<?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>186013</bug_id>
          
          <creation_ts>2018-05-26 08:37:53 -0700</creation_ts>
          <short_desc>[Baseline] Merge JITPropertyAccess, JITArithmetic, JITOpcodes, and JITCall to JIT</short_desc>
          <delta_ts>2021-11-01 12:16:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>achristensen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1427723</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-26 08:37:53 -0700</bug_when>
    <thetext>[Baseline] Merge JITPropertyAccess, JITArithmetic, JITOpcodes, and JITCall to JIT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1427724</commentid>
    <comment_count>1</comment_count>
      <attachid>341398</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-26 08:40:59 -0700</bug_when>
    <thetext>Created attachment 341398
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428181</commentid>
    <comment_count>2</comment_count>
      <attachid>341507</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-29 13:18:47 -0700</bug_when>
    <thetext>Created attachment 341507
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428182</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-29 13:19:16 -0700</bug_when>
    <thetext>Rebaselined. Ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428207</commentid>
    <comment_count>4</comment_count>
      <attachid>341507</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-29 14:17:37 -0700</bug_when>
    <thetext>Comment on attachment 341507
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=341507&amp;action=review

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        It is hard to check whether the given functionality is implemented in 32bit / 64bit,

Do you really believe that this is hard to do?

Does this patch do anything besides copy old implementation into this new file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428430</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-30 08:08:26 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #4)
&gt; Comment on attachment 341507 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=341507&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:8
&gt; &gt; +        It is hard to check whether the given functionality is implemented in 32bit / 64bit,
&gt; 
&gt; Do you really believe that this is hard to do?
&gt; 

Yes, for example, we have bunch of #if USE(JSVALUE64) / USE(JSVALUE32_64) in each file. Small ifdefs are consolidated into JIT.cpp. And large ifdef gaurds are removed and code is moved into JIT32_64.cpp / JIT64.cpp. Small ifdefs in functions are typically doing the same things (like, defining registers), they can be later removed easily in a batch styled manner.
And this code structure is completely the same to DFG, it is easy to find code.

&gt; Does this patch do anything besides copy old implementation into this new
&gt; file?

Yes, this patch just copies the implementations into these files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810748</commentid>
    <comment_count>6</comment_count>
      <attachid>341507</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-11-01 12:16:36 -0700</bug_when>
    <thetext>Comment on attachment 341507
Patch

This has been requesting review for more than one year.  If this is still needed, please rebase and re-request review.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341398</attachid>
            <date>2018-05-26 08:40:59 -0700</date>
            <delta_ts>2018-05-29 13:18:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-186013-20180527004057.patch</filename>
            <type>text/plain</type>
            <size>635913</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
M2UyYTIyZjc5Zjk1Njc5ZmFiYzYxYmQyMmZkMzk5NzRiYTczMGQ1Li4xYzdjMTEwYmYxNmU1MGJk
YWFlMWU5Y2U3MDQ1NjcwMGRiNDNiYjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MDYgQEAKKzIwMTgtMDUtMjYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW0Jhc2VsaW5lXSBNZXJnZSBKSVRQcm9wZXJ0eUFjY2VzcywgSklU
QXJpdGhtZXRpYywgSklUT3Bjb2RlcywgYW5kIEpJVENhbGwgdG8gSklUCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODYwMTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBoYXJkIHRvIGNoZWNrIHdo
ZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgaW4gMzJiaXQgLyA2
NGJpdCwKKyAgICAgICAgc2luY2UgSklUIGNvZGUgaXMgc2NhdHRlcmVkIGludG8gSklUUHJvcGVy
dHlBY2Nlc3MsIEpJVEFyaXRobWV0aWMsIEpJVE9wY29kZXMsIGFuZCBKSVRDYWxsLgorICAgICAg
ICBXaGlsZSBKSVRQcm9wZXJ0eUFjY2VzcywgSklUQXJpdGhtZXRpYywgSklUT3Bjb2RlcywgYW5k
IEpJVENhbGwgaW5jbHVkZXMgMzJiaXQgYW5kIDY0Yml0IGNvZGUsCisgICAgICAgIFhYWDMyXzY0
LmNwcCBkb2VzIG5vdCBpbmNsdWRlIDY0Yml0IGNvZGUuIFNvIHdoZW4gbG9va2luZyBpbnRvIEpJ
VE9wY29kZXMsIHdlIG5lZWQgdG8gY2hlY2sKKyAgICAgICAgdGhhdCB0aGUgZnVuY3Rpb24gaXMg
aW1wbGVtZW50ZWQgZm9yIDY0Yml0LCAzMmJpdCwgb3IgYm90aC4KKworICAgICAgICBUaGlzIHBh
dGNoIGFsaWducyBKSVQncyBpbXBsZW1lbnRhdGlvbiB0byBERkcuIFdlIGhhdmUgdGhyZWUgZmls
ZXMgZm9yIEpJVC5oLCBKSVQuY3BwLCBKSVQzMl82NC5jcHAsCisgICAgICAgIGFuZCBKSVQ2NC5j
cHAuIEpJVDMyXzY0IG9ubHkgaW5jbHVkZXMgMzJiaXQgaW1wbGVtZW50YXRpb24sIGFuZCBKSVQ2
NCBpbmNsdWRlcyA2NGJpdCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgSklULmNwcCBpbmNsdWRl
cyBjb2RlIGZvciBib3RoLiBUaGlzIGNoYW5nZSBleHRyYWN0cyAzMmJpdCBjb2RlIGZyb20gc2Nh
dHRlcmVkIEpJVCBmaWxlcyBlZmZlY3RpdmVseS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb29wX2hpbnQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jaGVja190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9ub3ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21t
b24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2Z1bmMpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbmV3X2dlbmVyYXRvcl9mdW5jKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXdfYXN5bmNfZnVuYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHBy
Q29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19mdW5jX2V4cCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25ld19hc3luY19mdW5jX2V4cCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfY29u
dHJvbF9mbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfamxlc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfamxlc3NlcSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9qZ3JlYXRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZ3JlYXRlcmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pubGVzcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmxlc3NlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qbmdyZWF0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2psZXNzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9qbGVzc2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9qbmxlc3NlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3Bfam5ncmVhdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9iZWxvdyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9iZWxvd2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2piZWxvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qYmVsb3dlcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lZ2F0
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfYml0YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2JpdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdHhvcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9sc2hpZnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSaWdodFNo
aWZ0RmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcnNoaWZ0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Vyc2hpZnQpOgorICAgICAgICAoSlNDOjpnZXRPcGVyYW5k
VHlwZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9hZGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNGYXN0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDU2xvdyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9kaXYpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbXVsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9tdWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3ViKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zdWIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCeVZh
bElkZW50aWZpZXJDaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNo
ZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2NvcGVkQXJndW1lbnRzR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9h
dFR5cGVkQXJyYXlHZXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEludFR5cGVkQXJy
YXlQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5
VmFsKToKKyAgICAgICAgKiBqaXQvSklUMzJfNjQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX21vdik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbmQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25ld19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9pbnN0YW5jZW9mKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbnN0YW5j
ZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19lbXB0eSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfaXNfYm9vbGVhbik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19udW1i
ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zZXRfZnVu
Y3Rpb25fbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9ub3QpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfamZhbHNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2p0
cnVlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2plcV9udWxsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
bmVxX3B0cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxKToK
KyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BFcUp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9qZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmVxKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5lcSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3Bfc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbnN0cmljdGVx
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfanN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2puc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25l
cV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Rocm93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3RvX251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90
b19zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2lkZW50aXR5X3dpdGhfcHJvZmlsZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
cGFyZW50X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9pbW0pOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9k
ZWJ1Zyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY3Jl
YXRlX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fdGhpcyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVIYXNJbmRleGVkUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFz
X2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19p
bmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3Rf
cG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3Bu
YW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJl
VW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Vuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2luYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWMpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9tb2QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX21vZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdENvbnRpZ3VvdXNMb2FkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0RG91YmxlTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5U3RvcmFnZUxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdp
dGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xv
c3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldENsb3N1
cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xv
c3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFy
cmllcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9j
YWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Nh
bGxfZXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwVmFyYXJn
c0ZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAqIGppdC9KSVQ2NC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9qbXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVy
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFf
cHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
am5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3Ry
aWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbnN0cmljdGVxKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfanN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puc3RyaWN0ZXEp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pZGVudGl0eV93
aXRoX3Byb2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2plcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luYyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbW9kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dERvdWJsZUxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRDb250aWd1b3VzTG9hZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dl
dHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX2RpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFZhckluamVjdGlvbkNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UmVzb2x2ZUNs
b3N1cmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2spOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRDbG9z
dXJlVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENs
b3N1cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF90b19hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6
OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RhaWxfY2FsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9jYWxsX2V2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfY2FsbF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RhaWxfY2FsbF92
YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RhaWxfY2FsbF9mb3J3YXJkX2Fy
Z3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3RfdmFyYXJncyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2NhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3Rh
aWxfY2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9jb25zdHJ1Y3QpOgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pJ
VENhbGwzMl82NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOiBSZW1vdmVkLgorCiAyMDE4LTA1LTI1ICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3ItaW4gbG9vcHMgc2hvdWxk
IHByZXNlcnZlIGFuZCByZXN0b3JlIHRoZSBURFogc3RhY2sgZm9yIGVhY2ggb2YgaXRzIGludGVy
bmFsIGxvb3BzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyOWNiYWI0ZDNiMDRi
ODg4ZTBlYjVlMTg0MDU1ZDhkM2JiZDU2MGRiLi43ODNjZjc2OTZmN2JiMDc0ZWNjMzkyMmE3NzA1
Yzc2YmVmMWY0NzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzA4Niw3ICsz
MDg2LDcgQEAKIAkJMTQ2QUFCMzcwQjY2QTk0NDAwRTU1RjE2IC8qIEpTU3RyaW5nUmVmQ0YuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3RyaW5nUmVmQ0YuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDZCMTREQjEyRUI1QjEyMDAxQkVDMUIg
LyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ29uc2VydmF0aXZlUm9vdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDZGQTVBODEzNzhGNkIwMDAzNjI3QTMgLyogSGFuZGxlVHlwZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGFuZGxlVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMTQ2RkU1MTExMUE3MTA0MzAwODdBRTY2IC8qIEpJVENhbGwzMl82NC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRDYWxsMzJfNjQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDZGRTUxMTExQTcxMDQzMDA4N0FFNjYgLyogSklU
MzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUMzJfNjQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDczNDFDQjFEQzAyRDcyMDBBQTI5
QkEgLyogRXhlY3V0YWJsZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RXhlY3V0YWJsZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ3MzQxQ0Qx
REMwMkQ3OTAwQUEyOUJBIC8qIFNjcmlwdEV4ZWN1dGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2NyaXB0RXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDczNDFDRjFEQzAyREI0MDBBQTI5QkEgLyogTmF0aXZlRXhlY3V0YWJsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVFeGVjdXRhYmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzY3LDcgKzM3NjcsNiBAQAogCQk4NkEwNTQ0NjE1
NTY0NTFCMDA0NDUxNTcgLyogTG93TGV2ZWxJbnRlcnByZXRlci5hc20gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbS5hc207IG5h
bWUgPSBMb3dMZXZlbEludGVycHJldGVyLmFzbTsgcGF0aCA9IGxsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkEwNTQ0NzE1NTY0NTFC
MDA0NDUxNTcgLyogTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbGlu
ZUVuZGluZyA9IDA7IG5hbWUgPSBMb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOyBwYXRoID0g
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODZBMDU0NDgxNTU2NDUxQjAwNDQ1MTU3IC8qIExvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmFzbS5hc207IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbTsgcGF0aCA9IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc207IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QTkwRUNGMEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRB
cml0aG1ldGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFy
aXRobWV0aWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkFERDE0MzBGRERF
QTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQVJNdjdBc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODZBREQxNDQwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk12Ny5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJvZmls
ZVRyZWVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb2ZpbGVUcmVl
Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc4MCw4ICszNzc5LDcgQEAK
IAkJODZDNTY4REUxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlck1JUFMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDNTY4REYxMUEyMTNFRTAwMDdGN0YwIC8qIE1JUFNB
c3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTUlQU0Fzc2VtYmxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkNDODVBMDBFRTc5QTQ3MDAyODg2
ODIgLyogSklUSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2Q0M4NUEyMEVFNzlCNzQw
MDI4ODY4MiAvKiBKSVRDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpJVENhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4NkNDODVDMzBF
RTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSklUUHJvcGVydHlBY2Nlc3MuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk4NkNDODVBMjBFRTc5Qjc0MDAyODg2ODIgLyogSklUNjQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUNjQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk4NkNDRUZERDBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRDb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTg2RDIyMjE5MTY3RUY5NDQwMDI0QzgwNCAvKiB0ZXN0YXBpLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IG5hbWUgPSB0ZXN0YXBpLm1tOyBwYXRo
ID0gQVBJL3Rlc3RzL3Rlc3RhcGkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
RDNCMkJGMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVJNQXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQxMTUsNyArNDExMyw2IEBACiAJCUE3MDREOTAxMTdBMEJBQTgwMDZC
QTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MDlGMkVG
MTdBMEFDMDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU2xvd1BhdGhDYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3MDlGMkYxMTdBMEFDMkEwMDUxMkU5OCAvKiBDb21tb25TbG93UGF0aHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQyMTc0IC8qIEpJVE9w
Y29kZXMzMl82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRP
cGNvZGVzMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE4RjYxQTEx
NzU0QTIxMDAyNDY1QTcgLyogUmVnRXhwSml0VGFibGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlZ0V4cEppdFRhYmxlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBNzE4RjgyMTExNzhFQjRCMDAyNDY1QTcgLyogY3JlYXRlX3JlZ2V4X3RhYmxlcyAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gdGV4dC5zY3JpcHQu
cHl0aG9uOyBmaWxlRW5jb2RpbmcgPSA0OyBuYW1lID0gY3JlYXRlX3JlZ2V4X3RhYmxlczsgcGF0
aCA9IHlhcnIvY3JlYXRlX3JlZ2V4X3RhYmxlczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTcyMDI4QjQxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NUZXN0UnVubmVyVXRpbHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDE0NSw3ICs0MTQyLDYgQEAKIAkJQTc0
REVGOEUxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90eXBlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NERFRjhGMTgyRDk5MTQwMDUyMkMyMiAvKiBKU01hcEl0
ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWFwSXRl
cmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzRERUY5MDE4MkQ5OTE0
MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU01hcEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUE3NTcw
NkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQXJpdGhtZXRpYzMyXzY0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc1RUU5QjAxOEFBQjdFMjAwQUFEMDQzIC8qIEJ1aWx0
aW5OYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdWlsdGluTmFtZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2N0I1QjMxN0EwQjk2NTAwNjNEOTQw
IC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcDsgcGF0
aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdM
b29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xvb3BQcmVIZWFkZXJD
cmVhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MjA0LDcgKzQy
MDAsNiBAQAogCQlBN0JGRjNCRjE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3Vs
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaWx0cmF0aW9uUmVzdWx0
Lmg7IHBhdGggPSBkZmcvREZHRmlsdHJhdGlvblJlc3VsdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBN0MwQzRBQTE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTY3JpcHRSZWYuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0MwQzRBQjE2N0MwOENEMDAxNzAxMUQgLyogSlNT
Y3JpcHRSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU2Ny
aXB0UmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBN0MxRThDODEx
MkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUVBRUIxNzk4N0FCNjAwMjk5REIyIC8qIENM
b29wU3RhY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENMb29w
U3RhY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzFFQUVDMTc5
ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IFN0YWNrVmlzaXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzFFQUVEMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zp
c2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tWaXNpdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDUyLDcgKzQ0NDcsNiBAQAogCQlCQ0Qy
MDM0NzBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlUHJvdG90eXBlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkNEMjAzNDgwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVQcm90b3R5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZVByb3RvdHlwZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0QyMDNFNzBFMTcxOEY0MDAyQzdFODIgLyogRGF0
ZVByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZVBy
b3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkNERDUxRTkwRkI4
REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSklUT3Bjb2Rlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDREUzQUIwMEU2QzgyQ0YwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNERTNBQjEwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkNGNjA1MTEwRTIwM0VGODAwQjlBNjREIC8qIEFyZ0xpc3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJnTGlzdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTEyLDkgKzQ5MDYsOSBAQAogCQkJCTE0QkQ1OUJGMEEz
RThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3
NCAvKiB0ZXN0YjMgKi8sCiAJCQkJRkU1MzNDQUMxRjIxN0RCNDAwMTZBMUZFIC8qIHRlc3RtYXNt
ICovLAorCQkJCTc5MjgxQkRDMjBCNjJCM0UwMDJFMkE2MCAvKiB0ZXN0bWVtICovLAogCQkJCTY1
MTEyMzA1MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAogCQkJCTkzMkY1QkQ5MDgy
MkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8sCi0JCQkJNzkyODFC
REMyMEI2MkIzRTAwMkUyQTYwIC8qIHRlc3RtZW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1
Y3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTU1NDAsMTEgKzU1MzQsMTEgQEAK
IAkJCQlERTVBMDlGRjFCQTNBQzNFMDAzRDQ0MjQgLyogSW50cmluc2ljRW1pdHRlci5jcHAgKi8s
CiAJCQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAgKi8sCiAJCQkJMTQyOUQ5
MkUwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5oICovLAorCQkJCTE0NkZFNTExMTFBNzEwNDMwMDg3
QUU2NiAvKiBKSVQzMl82NC5jcHAgKi8sCisJCQkJODZDQzg1QTIwRUU3OUI3NDAwMjg4NjgyIC8q
IEpJVDY0LmNwcCAqLywKIAkJCQlGRTEyMjAyNTFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRkR2Vu
ZXJhdG9yLmNwcCAqLywKIAkJCQlGRTEyMjAyNjFCRTdGNTY0MDAzOUU2RjIgLyogSklUQWRkR2Vu
ZXJhdG9yLmggKi8sCiAJCQkJMEY3NUEwNjUyMDEzRTRFRjAwMzhFMkNGIC8qIEpJVEFsbG9jYXRv
ci5oICovLAotCQkJCTg2QTkwRUNGMEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNw
cCAqLywKLQkJCQlBNzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0
LmNwcCAqLywKIAkJCQlGRTNBMDZBRDFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0QW5kR2VuZXJh
dG9yLmNwcCAqLywKIAkJCQlGRTNBMDZBRTFDMTBDQjZGMDAzOTBGREQgLyogSklUQml0QW5kR2Vu
ZXJhdG9yLmggKi8sCiAJCQkJRkUzQTA2QTcxQzEwQkM3NDAwMzkwRkREIC8qIEpJVEJpdEJpbmFy
eU9wR2VuZXJhdG9yLmggKi8sCkBAIC01NTUyLDggKzU1NDYsNiBAQAogCQkJCUZFM0EwNkE0MUMx
MEI3MDgwMDM5MEZERCAvKiBKSVRCaXRPckdlbmVyYXRvci5oICovLAogCQkJCUZFM0EwNkFGMUMx
MENCNkYwMDM5MEZERCAvKiBKSVRCaXRYb3JHZW5lcmF0b3IuY3BwICovLAogCQkJCUZFM0EwNkIw
MUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRYb3JHZW5lcmF0b3IuaCAqLywKLQkJCQk4NkNDODVB
MjBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgKi8sCi0JCQkJMTQ2RkU1MTExMUE3MTA0
MzAwODdBRTY2IC8qIEpJVENhbGwzMl82NC5jcHAgKi8sCiAJCQkJMEY4Rjk0NDMxNjY3NjM1MjAw
RDYxOTcxIC8qIEpJVENvZGUuY3BwICovLAogCQkJCTg2Q0NFRkREMEY0MTNGODkwMEZEN0Y5RSAv
KiBKSVRDb2RlLmggKi8sCiAJCQkJMEZGQjgwQkIyMEE3OTQ3MDAwMDZBQUY2IC8qIEpJVENvZGVJ
bmxpbmVzLmggKi8sCkBAIC01NTc3LDEyICs1NTY5LDggQEAKIAkJCQlGRTE4N0EwMDFCRkJDNzND
MDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmggKi8sCiAJCQkJRkU5OUIyNDcxQzI0QjZEMzAw
QzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8sCiAJCQkJRkU5OUIyNDgxQzI0QjZEMzAw
QzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovLAotCQkJCUJDREQ1MUU5MEZCOERGNzQwMDRB
OEJEQyAvKiBKSVRPcGNvZGVzLmNwcCAqLywKLQkJCQlBNzEyMzZFNDExOTVGMzNDMDBCRDIxNzQg
LyogSklUT3Bjb2RlczMyXzY0LmNwcCAqLywKIAkJCQkwRjI0RTU0NTE3RUUyNzQ5MDBBQkIyMTcg
LyogSklUT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJMEYyNEU1NDYxN0VFMjc0OTAwQUJCMjE3IC8q
IEpJVE9wZXJhdGlvbnMuaCAqLywKLQkJCQk4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklU
UHJvcGVydHlBY2Nlc3MuY3BwICovLAotCQkJCUE3QzFFOEM4MTEyRTcwMUMwMEEzN0Y5OCAvKiBK
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLywKIAkJCQlGRTNBMDZCODFDMTEwM0Q5MDAzOTBG
REQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHAgKi8sCiAJCQkJRkUzQTA2QjkxQzExMDNE
OTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCAqLywKIAkJCQkwRjc2NkQyNjE1
QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovLApAQCAtNjI4Niw4ICs2Mjc0
LDggQEAKIAkJNzlBQkNDNTUyMEI3ODEyNjAwMzIzRDVGIC8qIHRlc3RtZW0yICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk3OUFCQ0M1NjIwQjc4MTI2MDAz
MjNENUYgLyogdGVzdG1lbTIubSAqLywKIAkJCQk3OUFCQ0M1ODIwQjc4MTI2MDAzMjNENUYgLyog
dGVzdG1lbTIuMSAqLywKKwkJCQk3OUFCQ0M1NjIwQjc4MTI2MDAzMjNENUYgLyogdGVzdG1lbTIu
bSAqLywKIAkJCSk7CiAJCQlwYXRoID0gdGVzdG1lbTI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwpAQCAtODM2NSw3ICs4MzUzLDYgQEAKIAkJCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYg
LyogQjNPcmlnaW5EdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUyNjFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1
MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLywK
LQkJCQkwRkQyRkQ5NTIwQjUyQkUyMDBGMDk0NDEgLyogSXNvU3Vic3BhY2VJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2lu
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQ
aGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEg
LyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDkzLDYgKzg0ODAsNyBAQAog
CQkJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5n
U2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBD
b21wbGV0ZVN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQyRkQ5NDIwQjUyQkRFMDBG
MDk0NDEgLyogQ29tcGxldGVTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDM0Y0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2su
aCBpbiBIZWFkZXJzICovLApAQCAtODk5MCw2ICs4OTc4LDcgQEAKIAkJCQkwRkI0Njc4MDFGRERB
NkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNDY3ODEx
RkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkRDRTEyRDFGQUZCNEU1MDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRDJGRDk1MjBCNTJCRTIwMEYwOTQ0MSAvKiBJc29TdWJzcGFjZUlubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNUUwRkU3MjA4NkFENDgwMDk3RjBERSAvKiBJc29TdWJzcGFj
ZVBlclZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk4QjlGNkQ1NjFENTkxMkZBMDAxQzczOUYgLyog
SXRlcmF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0RDU1QjgxQUU3MTZDQTAwNTJF
NDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDAwLDcgKzg5ODks
NiBAQAogCQkJCUJDMThDNDE0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29yZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRD
b3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkg
LyogSklULmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkQyRkQ5NDIwQjUyQkRFMDBGMDk0NDEgLyog
Q29tcGxldGVTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTIyMDI3MUJF
N0Y1OEMwMDM5RTZGMiAvKiBKSVRBZGRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NzVBMDY2MjAxM0U0RjEwMDM4RTJDRiAvKiBKSVRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCUZFM0EwNkIyMUMxMENCODkwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IGMwMTFlZTZjNTIzMmNi
ZTQ2YmNjMDYxNDExYmI3YjZkNDQwMGQyYTYuLjRkMTgwYzgxOGYzNjdmODJkYTEwZTllOWNlNWVm
YmI5NTE3YzI4ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAgLTU5NywxNCArNTk3
LDEyIEBAIGppdC9Ib3N0Q2FsbFJldHVyblZhbHVlLmNwcAogaml0L0lDU3RhdHMuY3BwCiBqaXQv
SW50cmluc2ljRW1pdHRlci5jcHAKIGppdC9KSVQuY3BwCitqaXQvSklUMzJfNjQuY3BwCitqaXQv
SklUNjQuY3BwCiBqaXQvSklUQWRkR2VuZXJhdG9yLmNwcAotaml0L0pJVEFyaXRobWV0aWMuY3Bw
Ci1qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAogaml0L0pJVEJpdEFuZEdlbmVyYXRvci5jcHAK
IGppdC9KSVRCaXRPckdlbmVyYXRvci5jcHAKIGppdC9KSVRCaXRYb3JHZW5lcmF0b3IuY3BwCi1q
aXQvSklUQ2FsbC5jcHAKLWppdC9KSVRDYWxsMzJfNjQuY3BwCiBqaXQvSklUQ29kZS5jcHAKIGpp
dC9KSVREaXNhc3NlbWJsZXIuY3BwCiBqaXQvSklURGl2R2VuZXJhdG9yLmNwcApAQCAtNjEzLDEx
ICs2MTEsNyBAQCBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCiBqaXQvSklUTGVmdFNo
aWZ0R2VuZXJhdG9yLmNwcAogaml0L0pJVE11bEdlbmVyYXRvci5jcHAKIGppdC9KSVROZWdHZW5l
cmF0b3IuY3BwCi1qaXQvSklUT3Bjb2Rlcy5jcHAKLWppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCiBq
aXQvSklUT3BlcmF0aW9ucy5jcHAKLWppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKLWppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAogaml0L0pJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuY3BwCiBq
aXQvSklUU3R1YlJvdXRpbmUuY3BwCiBqaXQvSklUU3ViR2VuZXJhdG9yLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCmluZGV4IGQ5ZGIwNjI5YTQzOGMxMjlkNTdiZmEzODMxNjY5ZWI4YWYx
NTY5OTguLjRhODM2NWI3YTlmYzAwYTY4YTkwOTlkYjFkZTkwZjgwNDMwNTczOTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTI5LDE0ICsyOSwyMiBAQAogCiAjaW5jbHVkZSAiSklU
LmgiCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJCeXRlY29kZUdyYXBo
LmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJE
RkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlcklubGluZXMuaCIKKyNpbmNs
dWRlICJKSVRCaXRBbmRHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRCaXRPckdlbmVyYXRvci5o
IgorI2luY2x1ZGUgIkpJVEJpdFhvckdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpJVERpdkdlbmVy
YXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJKSVRMZWZ0U2hpZnRH
ZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRlICJKSVRPcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgpAQCAtNDcsOCArNTUsMTEgQEAKICNpbmNsdWRlICJQcm9maWxlckRhdGFiYXNlLmgiCiAjaW5j
bHVkZSAiUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKKyNpbmNs
dWRlICJTY29wZWRBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5o
IgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50Lmgi
CisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgi
CiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBo
aWNhbGx5UmFuZG9tTnVtYmVyLmg+CkBAIC0xMDIwLDYgKzEwMzEsMTQ4NSBAQCBTZWNvbmRzIEpJ
VDo6dG90YWxDb21waWxlVGltZSgpCiAgICAgcmV0dXJuIHRvdGFsQmFzZWxpbmVDb21waWxlVGlt
ZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1lOwogfQogCit2b2lk
IEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoSW5zdHJ1Y3Rpb24qKQoreworICAgIC8vIEVtaXQgdGhl
IEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CisgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8sIFRydXN0ZWRJbW0z
MihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgpKSwKKyAgICAgICAg
ICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklURXhlY3V0ZUNvdW50
ZXIoKSkpKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9sb29wX2hpbnQoSW5z
dHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworI2lm
IEVOQUJMRShERkdfSklUKQorICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBmb3IgdGhlIEpJVCBv
cHRpbWl6YXRpb24gY2hlY2s6CisgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkpIHsKKyAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgICAgICBjb3B5Q2FsbGVlU2F2ZXNGcm9tRnJh
bWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlG
cmFtZSk7CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRpbWl6ZSwgbV9ieXRl
Y29kZU9mZnNldCk7CisgICAgICAgIEp1bXAgbm9PcHRpbWl6ZWRFbnRyeSA9IGJyYW5jaFRlc3RQ
dHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkg
eworICAgICAgICAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUs
IHJldHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KDEwMDApKSkpOworICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJ
VFVucmVhc29uYWJsZUxvb3BIaW50SnVtcFRhcmdldCk7CisgICAgICAgICAgICBvay5saW5rKHRo
aXMpOworICAgICAgICB9CisgICAgICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5saW5rKHRoaXMpOwor
CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9sb29w
X2hpbnQpKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKKyNlbmRpZgor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190cmFwcyhJbnN0cnVjdGlvbiopCit7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRyZXNzKG1fdm0tPm5l
ZWRUcmFwSGFuZGxpbmdBZGRyZXNzKCkpKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25vcChJ
bnN0cnVjdGlvbiopCit7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfYmVn
aW4oSW5zdHJ1Y3Rpb24qKQoreworICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVB
ZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKEluc3RydWN0aW9uKikKK3sKKyAg
ICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2hlY2tfdHJhcHMoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X3Jl
Z2V4cChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3UmVnZXhwLCBtX2NvZGVCbG9jay0+cmVnZXhwKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKTsKKyAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworfQor
Cit2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBKdW1wIGxhenlKdW1wOworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKKyNl
bHNlCisgICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQs
IHJlZ1QwKTsKKyNlbmRpZgorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY0V4ZWMgPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwor
CisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVu
dEluc3RydWN0aW9uLT51Lm9wY29kZSk7CisgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5j
KQorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsIHJlZ1Qw
LCBmdW5jRXhlYyk7CisgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9m
dW5jKQorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVyYXRvckZ1bmN0aW9u
LCBkc3QsIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2FzeW5jX2Z1bmMpCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5j
dGlvbiwgZHN0LCByZWdUMCwgZnVuY0V4ZWMpOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsIHJlZ1QwLCBm
dW5jRXhlYyk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuYyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXROZXdGdW5jQ29tbW9uKGN1cnJl
bnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25ld19nZW5lcmF0b3JfZnVu
YyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXROZXdGdW5jQ29t
bW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25ld19hc3lu
Y19nZW5lcmF0b3JfZnVuYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGVtaXROZXdGdW5jQ29tbW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX25ld19hc3luY19mdW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgZW1pdE5ld0Z1bmNDb21tb24oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBK
SVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7CisjZWxzZQorICAgIGVtaXRMb2FkUGF5bG9hZChj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7CisjZW5kaWYKKworICAgIEZ1
bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgIE9wY29kZUlEIG9wY29kZUlEID0g
SW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpOwor
CisgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCByZWdUMCwgZnVuY3Rpb24pOworICAgIGVs
c2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHApCisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgcmVnVDAsIGZ1
bmN0aW9uKTsKKyAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuY19leHAp
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5jdGlvbiwgZHN0LCBy
ZWdUMCwgZnVuY3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQob3Bjb2RlSUQgPT0g
b3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCByZWdUMCwgZnVuY3Rpb24p
OworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhwKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGN1cnJl
bnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25ld19nZW5lcmF0b3JfZnVu
Y19leHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0TmV3RnVu
Y0V4cHJDb21tb24oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2FzeW5jX2Z1bmNfZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHAoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0TmV3RnVuY0V4cHJDb21tb24oY3VycmVudElu
c3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlc0luZGV4ID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICBpbnQgc2l6ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNJbmRleCAqIHNpemVvZihSZWdp
c3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LAorICAgICAgICBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICBpbnQgc2l6ZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2l6ZUluZGV4
LCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZSwgZHN0LAorICAgICAgICBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5hcnJheUFsbG9j
YXRpb25Qcm9maWxlLCByZWdUMCk7CisjZWxzZQorICAgIGVtaXRMb2FkKHNpemVJbmRleCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVB
bmRQcm9maWxlLCBkc3QsCisgICAgICAgIGN1cnJlbnRJbnN0cnVjdGlvblszXS51LmFycmF5QWxs
b2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOworI2VuZGlmCit9CisK
K3ZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9j
YXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5iYXNpY0Jsb2NrTG9jYXRpb247CisjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgq
dGhpcyk7CisjZWxzZQorICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0
aGlzLCByZWdUMCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291
bnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxs
RnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDApOworICAgIHN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRo
VHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgIGJveEludDMyKHJlZ1QwLCByZXN1
bHQpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
KyAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS51
bnNpZ25lZFZhbHVlOworICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpLCByZWdUMCk7CisgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Cisg
ICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1t
MzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwg
cmVnVDApOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVS
ZWdzKHJlZ1QwKSk7CisjZW5kaWYKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICB6ZXJv
TGVuZ3RoLmxpbmsodGhpcyk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtb3ZlKFRydXN0ZWRJ
bW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOworI2Vsc2UKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworI2VuZGlmCisKKyAgICBkb25lLmxpbmsodGhp
cyk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVnVDApOworI2Vsc2UKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyks
IHJlZ1QxKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdz
IHJlc3VsdFJlZ3MocmVnVDApOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJl
Z1QxLCByZWdUMCk7CisjZW5kaWYKKworICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMik7CisgICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRz
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7
CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsg
aW5kZXgpLCByZXN1bHRSZWdzKTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBhcmd1
bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCks
IHJlc3VsdFJlZ3MpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2psZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5z
aWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVt
aXRfY29tcGFyZUFuZEp1bXAob3Bfamxlc3MsIG9wMSwgb3AyLCB0YXJnZXQsIExlc3NUaGFuKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVu
c2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBl
bWl0X2NvbXBhcmVBbmRKdW1wKG9wX2psZXNzZXEsIG9wMSwgb3AyLCB0YXJnZXQsIExlc3NUaGFu
T3JFcXVhbCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXAob3BfamdyZWF0ZXIsIG9wMSwgb3AyLCB0YXJn
ZXQsIEdyZWF0ZXJUaGFuKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBvcDEgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wKG9wX2pncmVhdGVyZXEsIG9w
MSwgb3AyLCB0YXJnZXQsIEdyZWF0ZXJUaGFuT3JFcXVhbCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBv
cDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wKG9w
X2pubGVzcywgb3AxLCBvcDIsIHRhcmdldCwgR3JlYXRlclRoYW5PckVxdWFsKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBp
bnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdF9jb21w
YXJlQW5kSnVtcChvcF9qbmxlc3NlcSwgb3AxLCBvcDIsIHRhcmdldCwgR3JlYXRlclRoYW4pOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1
bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcChvcF9qbmdyZWF0ZXIsIG9wMSwgb3AyLCB0YXJnZXQsIExlc3NU
aGFuT3JFcXVhbCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcmVxKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXAob3Bfam5ncmVhdGVyZXEsIG9wMSwg
b3AyLCB0YXJnZXQsIExlc3NUaGFuKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNz
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KG9wMSwgb3AyLCB0YXJnZXQsIERvdWJsZUxl
c3NUaGFuLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBvcDEgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhvcDEs
IG9wMiwgdGFyZ2V0LCBEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVMZXNz
RXEsIGZhbHNlLCBpdGVyKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKwor
ICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KG9wMSwgb3AyLCB0YXJnZXQsIERvdWJsZUdyZWF0
ZXJUaGFuLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIpOworfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBv
cDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xv
dyhvcDEsIG9wMiwgdGFyZ2V0LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIG9wZXJhdGlvbkNv
bXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhvcDEsIG9wMiwgdGFyZ2V0LCBE
b3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3Ms
IHRydWUsIGl0ZXIpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3sKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1
bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAg
ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cob3AxLCBvcDIsIHRhcmdldCwgRG91YmxlR3JlYXRlclRo
YW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7Cit9CisK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBp
bnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AyID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3cob3AxLCBvcDIsIHRhcmdldCwgRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQs
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puZ3JlYXRlcmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IG9wMSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KG9wMSwg
b3AyLCB0YXJnZXQsIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVH
cmVhdGVyRXEsIHRydWUsIGl0ZXIpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkKGRzdCwgb3AxLCBvcDIsIEJlbG93KTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3dlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
ICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBv
cDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGVtaXRfY29tcGFyZVVu
c2lnbmVkKGRzdCwgb3AxLCBvcDIsIEJlbG93T3JFcXVhbCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2piZWxvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBv
cDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEFu
ZEp1bXAob3AxLCBvcDIsIHRhcmdldCwgQmVsb3cpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9q
YmVsb3dlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBvcDEg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1
bXAob3AxLCBvcDIsIHRhcmdldCwgQmVsb3dPckVxdWFsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfbmVnYXRlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgQXJpdGhQ
cm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBtX2NvZGVCbG9jay0+
YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdhdGVJQyk7CisgICAg
ZW1pdE1hdGhJQ0Zhc3QobmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJp
dGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfbmVnYXRlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKKworICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2FzdDxKSVROZWdJQyo+
KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9uKSk7CisgICAgZW1p
dE1hdGhJQ1Nsb3cobmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uQXJpdGhOZWdh
dGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRp
b25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgU25pcHBldEdl
bmVyYXRvcj4KK3ZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0
UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworI2VuZGlmCisKKyAgICBTbmlw
cGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7
CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENv
bnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NF
UlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisK
KyAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworCisgICAg
U25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVn
cywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CisKKyAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CisKKyAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKKyAg
ICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXBMaXN0KCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Qml0QmluYXJ5T3BGYXN0UGF0aDxKSVRCaXRB
bmRHZW5lcmF0b3I+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2JpdG9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdEJpdEJp
bmFyeU9wRmFzdFBhdGg8SklUQml0T3JHZW5lcmF0b3I+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2JpdHhvcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoPEpJVEJpdFhvckdlbmVyYXRvcj4o
Y3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbHNoaWZ0KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdEJpdEJpbmFyeU9wRmFzdFBh
dGg8SklUTGVmdFNoaWZ0R2VuZXJhdG9yPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworfQorCit2b2lk
IEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBPcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfcnNo
aWZ0IHx8IG9wY29kZUlEID09IG9wX3Vyc2hpZnQpOworCisgICAgSklUUmlnaHRTaGlmdEdlbmVy
YXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUgPSBvcGNvZGVJRCA9PSBvcF9yc2hpZnQg
PworICAgICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaWduZWRTaGlmdCA6IEpJVFJpZ2h0
U2hpZnRHZW5lcmF0b3I6OlVuc2lnbmVkU2hpZnQ7CisKKyAgICBpbnQgcmVzdWx0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKKyAg
ICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gSW52
YWxpZEZQUlJlZzsKKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBm
cFJlZ1QyOworI2VuZGlmCisKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKKyAgICBT
bmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkK
KyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50
KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAh
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKKyAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBp
ZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOworCisgICAgSklUUmlnaHRTaGlmdEdlbmVyYXRvciBnZW4obGVm
dE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywK
KyAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgc25pcHBldFNoaWZ0VHlw
ZSk7CisKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisKKyAgICBBU1NFUlQoZ2Vu
LmRpZEVtaXRGYXN0UGF0aCgpKTsKKyAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKworICAgIGFk
ZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9yc2hpZnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Umln
aHRTaGlmdEZhc3RQYXRoKGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BfcnNoaWZ0KTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY3VycmVudEluc3RydWN0aW9uLCBvcF91cnNo
aWZ0KTsKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgT3BlcmFuZFR5cGVzIGdldE9wZXJhbmRU
eXBlcyhJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgcmV0dXJuIE9wZXJhbmRUeXBl
cyhBcml0aFByb2ZpbGU6OmZyb21JbnQoaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKS5saHNSZXN1
bHRUeXBlKCksIEFyaXRoUHJvZmlsZTo6ZnJvbUludChpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
LnJoc1Jlc3VsdFR5cGUoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2FkZChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbV9jb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElDKGFyaXRoUHJvZmls
ZSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOworICAgIGVtaXRNYXRoSUNGYXN0KGFkZElDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
QWRkKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBKSVRBZGRJQyogYWRkSUMgPSBiaXR3
aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbikpOworICAgIGVtaXRNYXRoSUNTbG93KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVBZGRQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2Zp
bGVkRnVuY3Rpb24+Cit2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2Vu
ZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxl
ZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9uUHJvZmls
ZWRGdW5jdGlvbikKK3sKKyAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICBpbnQgb3BlcmFuZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIC8vIEFyaXRoTmVnYXRlIGJlbmVmaXRzIGZy
b20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCisgICAgLy8gU2luY2Ug
cmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZsaW5nIHJlZ2lzdGVy
IHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1
ZVJlZ3MocmVnVDEpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhy
ZWdUMSk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyNlbHNlCisgICAgSlNWYWx1
ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUNDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisg
ICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CisjZW5kaWYKKworICAgIG1hdGhJQy0+bV9n
ZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2NyYXRjaEdQUik7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3MpOworCisgICAgTWF0
aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9u
VG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgTWF0aElDR2Vu
ZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGJvb2wgZ2VuZXJhdGVkSW5s
aW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSk7CisgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAgICAgIEFyaXRoUHJv
ZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICAgICAgaWYg
KGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgICAgICBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdz
LCBhcml0aFByb2ZpbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoSnVtcHMpOworCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBpbmxpbmVF
bmQgPSBsYWJlbCgpOworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZl
cikgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVF
bmQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKGlu
bGluZVN0YXJ0KS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKKyAgICAgICAgbWF0aElDLT5t
X2dlbmVyYXRlZENvZGVTaXplICs9IHNpemU7CisgICAgfSk7CisjZW5kaWYKKworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgTm9u
UHJvZmlsZWRGdW5jdGlvbj4KK3ZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
cm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rpb24gbm9u
UHJvZmlsZWRGdW5jdGlvbikKK3sKKyAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5
cGVzKGNvcGllZEluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbikpOworICAgIEpTVmFsdWVS
ZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDM7CisgICAg
RlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworI2Vsc2UKKyAgICBPcGVyYW5kVHlwZXMgdHlw
ZXMgPSBnZXRPcGVyYW5kVHlwZXMoY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBKU1ZhbHVlUmVn
cyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3Mg
cmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyAg
ICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisjZW5kaWYKKworICAgIFNuaXBwZXRPcGVy
YW5kIGxlZnRPcGVyYW5kKHR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0
T3BlcmFuZCh0eXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAg
ICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
MikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmln
aHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKKyAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0gR2VuZXJh
dG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIpOworCisgICAg
QVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFu
ZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5k
KSkpOworCisgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxl
ZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdz
KTsKKyAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0
T3BlcmFuZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3Mp
OworCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBpbmxpbmVTdGFydCA9IGxh
YmVsKCk7CisjZW5kaWYKKworICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJh
dGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7
CisKKyAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5l
KCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOworICAgIGlmICghZ2VuZXJhdGVkSW5saW5l
Q29kZSkgeworICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAgICAgZWxzZSBpZiAo
cmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9
IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hv
dWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1
bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7
CisgICAgfSBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aEp1bXBzKTsKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gaW5s
aW5lRW5kID0gbGFiZWwoKTsKKyAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5s
aW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25P
ZihpbmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgIG1hdGhJ
Qy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOworICAgIH0pOworI2VuZGlmCisKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Cit9CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0
eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Cit2b2lk
IEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBw
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9u
LCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQoreworICAgIE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2Vu
ZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CisgICAgbWF0aElD
R2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworCisgICAgaW50IHJlc3Vs
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyNlbHNlCisgICAgSlNW
YWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisjZW5kaWYKKwor
I2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVs
KCk7CisjZW5kaWYKKworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5h
cml0aFByb2ZpbGUoKTsKKyAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgeworICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRo
UmVwYXRjaCkKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9u
X0VKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9m
aWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgIH0g
ZWxzZQorICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4o
cmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRo
SUMpKTsKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gc2xvd1BhdGhFbmQg
PSBsYWJlbCgpOworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikg
eworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVu
ZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xv
d1BhdGhTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgIG1hdGhJQy0+
bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOworICAgIH0pOworI2VuZGlmCisKKyAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisKKyAgICBhZGRMaW5rVGFz
ayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgTWF0aElDR2VuZXJhdGlv
blN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5l
cmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKKyAgICAgICAgbWF0
aElDLT5maW5hbGl6ZUlubGluZUNvZGUobWF0aElDR2VuZXJhdGlvblN0YXRlLCBsaW5rQnVmZmVy
KTsKKyAgICB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUg
UHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIFJlcGF0Y2hGdW5jdGlvbj4KK3ZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlN
YXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmls
ZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0
aW9uKQoreworICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRl
ID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3Ry
dWN0aW9uKS0+dmFsdWU7CisgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQg
PSBsYWJlbCgpOworCisgICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjb3Bp
ZWRJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyNlbHNlCisgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5
cGVzKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOworI2VuZGlmCisKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCh0eXBlcy5maXJz
dCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQodHlwZXMuc2Vjb25kKCkpOwor
CisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5k
LnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOworICAgIGVsc2UgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25z
dEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAgIEFTU0VSVCghKEdlbmVy
YXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQpICYmIEdlbmVyYXRv
cjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkpKTsKKworICAgIGlm
IChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBlbHNlIGlm
IChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKQor
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKworI2lmIEVO
QUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7Cisj
ZW5kaWYKKworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFBy
b2ZpbGUoKTsKKyAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
eworICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVwYXRj
aCkKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihw
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3Ms
IFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChw
cm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBhcml0aFBy
b2ZpbGUpOworICAgIH0gZWxzZQorICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1Bh
dGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0
aW9uX0VKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRT
KQorICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOworICAgIGFkZExpbmtUYXNrKFs9XSAo
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZm
ZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBs
aW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hh
cio+KCk7CisgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOworICAg
IH0pOworI2VuZGlmCisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0
UmVncyk7CisKKyAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsK
KyAgICAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBt
X2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rp
b24pLT52YWx1ZTsKKyAgICAgICAgbWF0aElDLT5maW5hbGl6ZUlubGluZUNvZGUobWF0aElDR2Vu
ZXJhdGlvblN0YXRlLCBsaW5rQnVmZmVyKTsKKyAgICB9KTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfZGl2KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHJlc3Vs
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE9wZXJhbmRUeXBl
cyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjb3BpZWRJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1
Y3Rpb24pKTsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsK
KyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7CisgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDI7CisjZWxzZQorICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhj
dXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsK
KyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworI2VuZGlmCisgICAgRlBSUmVnIHNjcmF0
Y2hGUFIgPSBmcFJlZ1QyOworCisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBudWxs
cHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGFyaXRoUHJvZmls
ZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwor
CisgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQodHlwZXMuZmlyc3QoKSk7CisgICAgU25p
cHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKHR5cGVzLnNlY29uZCgpKTsKKworICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudEludChvcDEpKQorICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMy
KGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGVs
c2UgaWYgKGlzT3BlcmFuZENvbnN0YW50RG91YmxlKG9wMSkpCisgICAgICAgIGxlZnRPcGVyYW5k
LnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDEpKTsKKyNlbmRpZgor
ICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3Bl
cmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50RG91YmxlKG9wMikpCisg
ICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3Vi
bGUob3AyKSk7CisjZW5kaWYKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0Nv
bnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCisgICAgaWYgKCFsZWZ0T3BlcmFu
ZC5pc0NvbnN0KCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVn
cyk7CisgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKworICAgIEpJVERpdkdlbmVyYXRvciBnZW4o
bGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVn
cywKKyAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgYXJp
dGhQcm9maWxlKTsKKworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKworICAgIGlm
IChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpIHsKKyAgICAgICAgZ2VuLmVuZEp1bXBMaXN0KCkubGlu
ayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJl
Z3MpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworICAg
IH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3QoKS5lbXB0eSgpKTsKKyAg
ICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHkoKSk7CisgICAgICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfZGl2KTsKKyAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICB9Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX211bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRoUHJvZmls
ZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgSklUTXVsSUMqIG11bElDID0gbV9jb2Rl
QmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAg
ICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbXVsSUMpOwor
ICAgIGVtaXRNYXRoSUNGYXN0KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX211bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVsSUMqPihtX2luc3Ry
dWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOworICAgIGVtaXRNYXRoSUNT
bG93KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWRP
cHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWxPcHRp
bWl6ZSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3N1YihJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9jb2RlQmxv
Y2stPmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgSklUU3ViSUMq
IHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmlsZSwgY3VycmVudElu
c3RydWN0aW9uKTsKKyAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVj
dGlvbiwgc3ViSUMpOworICAgIGVtaXRNYXRoSUNGYXN0KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlU3ViKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1YihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3aXNlX2Nhc3Q8SklU
U3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwor
ICAgIGVtaXRNYXRoSUNTbG93KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZh
bHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVTdWJPcHRpbWl6ZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJh
bmNoKCp2bSgpLCBvd25lciwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3Jp
dGVCYXJyaWVyU2xvd1BhdGgsIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCit7Cisg
ICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQorICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaFB0cihOb3RFcXVhbCwgY2VsbCwgVHJ1c3RlZEltbVB0cihieVZhbEluZm8tPmNhY2hl
ZFN5bWJvbC5nZXQoKSkpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdFN0cmluZyhjZWxsKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjZWxsLCBK
U1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRjaCk7CisgICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tUHRyKHByb3BlcnR5
TmFtZS5pbXBsKCkpKSk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSAmbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW2J5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleF07CisKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOworCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNlIEpJVEludDMyOgor
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVERvdWJsZToKKyAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdERvdWJsZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQ29udGlndW91czoKKyAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
YmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURGlyZWN0QXJndW1lbnRzOgor
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRTY29wZWRB
cmd1bWVudHM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRB
cnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUpKQorICAgICAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
LCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgSnVtcCBkb25lID0ganVtcCgp
OworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOworCisg
ICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4o
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRy
ZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1
cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBD
b2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFn
Pjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworCisgICAg
cGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZz
ZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworCisgICAgYnlWYWxJbmZvLT5zdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIG1fY29kZUJsb2NrLCBw
YXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICJCYXNlbGluZSBnZXRf
YnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJs
b2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxO
b1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihyZXR1cm5BZGRyZXNzKSks
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKSk7
Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gJm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2Rl
SW5kZXhdOworCisgICAgSnVtcCBmYXN0RG9uZUNhc2U7CisgICAgSnVtcCBzbG93RG9uZUNhc2U7
CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4g
PSBlbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHByb3BlcnR5TmFtZSwgZmFzdERvbmVDYXNlLCBzbG93RG9uZUNhc2UsIHNsb3dDYXNlcyk7CisK
KyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBwYXRjaEJ1
ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZhc3REb25lQ2FzZSwgYnlWYWxJ
bmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0Rv
bmUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dEb25lQ2FzZSwgYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb05leHRIb3RQYXRo
KSk7CisgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQorICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhhbmRsZXIp
OworCisgICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fY2FsbHMpIHsKKyAgICAgICAg
aWYgKGNhbGxTaXRlLmNhbGxlZSkKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNp
dGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKKyAgICB9CisgICAgZ2VuLmZpbmFsaXplKHBhdGNo
QnVmZmVyLCBwYXRjaEJ1ZmZlcik7CisKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklO
QUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBK
SVRTdHViUm91dGluZVB0clRhZywKKyAgICAgICAgIkJhc2VsaW5lIGdldF9ieV92YWwgd2l0aCBj
YWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCBw
cm9wZXJ0eU5hbWUuaW1wbCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29kZUJsb2Nr
KS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CisgICAgYnlWYWxJbmZvLT5zdHViSW5m
byA9IGdlbi5zdHViSW5mbygpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5
VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpKTsKK30KKwordm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sKKyAgICBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOworCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBl
OworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIGJvb2wgbmVlZHNMaW5rRm9yV3JpdGVC
YXJyaWVyID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgeworICAgIGNhc2UgSklU
SW50MzI6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURG91YmxlOgor
ICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9u
LCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSk7CisgICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
KTsKKyAgICAgICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJy
YXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgIGlmIChpc0ludCh0eXBl
KSkKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29k
ZUJsb2NrKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVs
PE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZh
bEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52
YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRo
KSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxh
YmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworICAgIGlmIChuZWVk
c0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKKyAgICAgICAgQVNTRVJUKHJlbW92ZUNvZGVQdHJUYWco
bV9jYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09IHJlbW92ZUNvZGVQ
dHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKKyAgICAgICAgcGF0Y2hCdWZm
ZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBtX2NhbGxzLmxhc3QoKS5jYWxsZWUpOworICAg
IH0KKworICAgIGJvb2wgaXNEaXJlY3QgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVu
dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CisgICAgaWYg
KCFpc0RpcmVjdCkgeworICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5lID0gRklOQUxJWkVf
Q09ERV9GT1JfU1RVQigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklU
U3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbCBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgp
LCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgYnlWYWxJ
bmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgICAgICBt
X2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAorICAgICAgICAg
ICAgIkJhc2VsaW5lIHB1dF9ieV92YWxfZGlyZWN0IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUo
KSk7CisgICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJh
ZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJ
bmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
Pihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1
dEJ5VmFsR2VuZXJpYykpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdp
dGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkK
K3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJm1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOworCisgICAgSnVtcExpc3Qg
ZG9uZUNhc2VzOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuID0gZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgY3VycmVudElu
c3RydWN0aW9uLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUsIGRvbmVDYXNlcywgc2xvd0Nhc2VzKTsK
KworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOworICAgIHBhdGNo
QnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRy
ZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZUNhc2VzLCBieVZhbElu
Zm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9u
ZSkpOworICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkKKyAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywgYnlWYWxJbmZvLT5leGNlcHRpb25IYW5kbGVy
KTsKKworICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2NhbGxzKSB7CisgICAgICAg
IGlmIChjYWxsU2l0ZS5jYWxsZWUpCisgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxT
aXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7CisgICAgfQorICAgIGdlbi5maW5hbGl6ZShwYXRj
aEJ1ZmZlciwgcGF0Y2hCdWZmZXIpOworCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJ
TkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwg
SklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0
aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAi
LCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS5pbXBs
KCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJu
QWRkcmVzcy52YWx1ZSgpKTsKKyAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZv
KCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJbmRl
eEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8t
PnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0
Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
b1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHB1
dEtpbmQgPT0gRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0
aW9uUHV0QnlWYWxHZW5lcmljKSk7Cit9CisKKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREaXJl
Y3RBcmd1bWVudHNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUp
Cit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBS
ZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIFJlZ2lz
dGVySUQgc2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsK
KyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9w
ZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoMiA9IHJlZ1Q0OworI2VuZGlmCisKKyAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKKyAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1
bWVudHNUeXBlKSk7CisKKyAgICBsb2FkMzIoQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6
Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBzY3JhdGNoMikpOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50
czo6b2Zmc2V0T2ZNYXBwZWRBcmd1bWVudHMoKSkpKTsKKworICAgIGxvYWRWYWx1ZShCYXNlSW5k
ZXgoYmFzZSwgcHJvcGVydHksIFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpKSwgcmVzdWx0KTsKKworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVt
cExpc3QgSklUOjplbWl0U2NvcGVkQXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworI2lmIFVT
RShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJ
RCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklE
IHNjcmF0Y2gyID0gcmVnVDQ7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OworI2Vs
c2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5
ID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIHNj
cmF0Y2gyID0gcmVnVDQ7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OworI2VuZGlm
CisKKyAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNj
cmF0Y2gsIFRydXN0ZWRJbW0zMihTY29wZWRBcmd1bWVudHNUeXBlKSk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCBzY3JhdGNo
Myk7CisgICAgeG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXko
KSksIHNjcmF0Y2gzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVh
bCwgcHJvcGVydHksIEFkZHJlc3Moc2NyYXRjaDMsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZU
b3RhbExlbmd0aEluU3RvcmFnZSgpKSkpOworCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNj
b3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2NyYXRjaCk7CisgICAgeG9yUHRyKFRy
dXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHNjcmF0Y2gpOworICAg
IGxvYWQzMihBZGRyZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxl
bmd0aCgpKSwgc2NyYXRjaDIpOworICAgIEp1bXAgb3ZlcmZsb3dDYXNlID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCBwcm9wZXJ0eSwgc2NyYXRjaDIpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
LCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyKTsKKyAgICB4b3JQ
dHIoVHJ1c3RlZEltbVB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRjaDIp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zm
c2V0T2ZBcmd1bWVudHMoKSksIHNjcmF0Y2gpOworICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRj
aCwgcHJvcGVydHksIFRpbWVzRm91ciksIHNjcmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxp
ZE9mZnNldCkpKTsKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNoLCBU
aW1lc0VpZ2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJl
c3VsdCk7CisgICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIG92ZXJmbG93Q2FzZS5saW5rKHRo
aXMpOworICAgIHN1YjMyKHByb3BlcnR5LCBzY3JhdGNoMik7CisgICAgbmVnMzIoc2NyYXRjaDIp
OworICAgIGxvYWRWYWx1ZShCYXNlSW5kZXgoc2NyYXRjaDMsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0
KSwgcmVzdWx0KTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVzdWx0KSk7
CisgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaDMsIFNj
b3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSwgc2NyYXRjaCk7
CisgICAgZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIocHJvcGVydHksIHNjcmF0Y2gsIHNj
cmF0Y2gyKTsKKyAgICBhbmRQdHIoc2NyYXRjaDIsIHJlc3VsdC5wYXlsb2FkR1BSKCkpOworCisg
ICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBl
ZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBl
ZEFycmF5VHlwZSB0eXBlKQoreworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisKKyAgICAvLyBU
aGUgYmVzdCB3YXkgdG8gdGVzdCB0aGUgYXJyYXkgdHlwZSBpcyB0byB1c2UgdGhlIGNsYXNzSW5m
by4gV2UgbmVlZCB0byBkbyBzbyB3aXRob3V0CisgICAgLy8gY2xvYmJlcmluZyB0aGUgcmVnaXN0
ZXIgdGhhdCBob2xkcyB0aGUgaW5kZXhpbmcgdHlwZSwgYmFzZSwgYW5kIHByb3BlcnR5LgorCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdp
c3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgUmVnaXN0ZXJJRCByZXN1bHRQYXlsb2FkID0g
cmVnVDA7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBz
Y3JhdGNoMiA9IHJlZ1Q0OworI2Vsc2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAg
ICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCByZXN1bHRQYXls
b2FkID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCByZXN1bHRUYWcgPSByZWdUMTsKKyAgICBSZWdp
c3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7
CisjZW5kaWYKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIGxvYWQ4KEFkZHJlc3Mo
YmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIGJhZFR5
cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5
cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBzY3JhdGNoKTsKKyAgICBjYWdlQ29uZGl0
aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZlLCBzY3JhdGNoLCBzY3JhdGNoMik7CisKKyAgICBz
d2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgY2FzZSAxOgorICAgICAgICBpZiAoSlND
Ojppc1NpZ25lZCh0eXBlKSkKKyAgICAgICAgICAgIGxvYWQ4U2lnbmVkRXh0ZW5kVG8zMihCYXNl
SW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGxvYWQ4KEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwg
VGltZXNPbmUpLCByZXN1bHRQYXlsb2FkKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgor
ICAgICAgICBpZiAoSlNDOjppc1NpZ25lZCh0eXBlKSkKKyAgICAgICAgICAgIGxvYWQxNlNpZ25l
ZEV4dGVuZFRvMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3Vs
dFBheWxvYWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkMTYoQmFzZUluZGV4KHNj
cmF0Y2gsIHByb3BlcnR5LCBUaW1lc1R3byksIHJlc3VsdFBheWxvYWQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIDQ6CisgICAgICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVy
dHksIFRpbWVzRm91ciksIHJlc3VsdFBheWxvYWQpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIEp1bXAgZG9uZTsKKyAgICBpZiAo
dHlwZSA9PSBUeXBlVWludDMyKSB7CisgICAgICAgIEp1bXAgY2FuQmVJbnQgPSBicmFuY2gzMihH
cmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFBheWxvYWQsIFRydXN0ZWRJbW0zMigwKSk7CisKKyAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVzdWx0UGF5bG9hZCwgZnBSZWdUMCk7CisgICAg
ICAgIGFkZERvdWJsZShBYnNvbHV0ZUFkZHJlc3MoJnR3b1RvVGhlMzIpLCBmcFJlZ1QwKTsKKyNp
ZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBtb3ZlRG91YmxlVG82NChmcFJlZ1QwLCByZXN1bHRQ
YXlsb2FkKTsKKyAgICAgICAgc3ViNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQYXls
b2FkKTsKKyNlbHNlCisgICAgICAgIG1vdmVEb3VibGVUb0ludHMoZnBSZWdUMCwgcmVzdWx0UGF5
bG9hZCwgcmVzdWx0VGFnKTsKKyNlbmRpZgorCisgICAgICAgIGRvbmUgPSBqdW1wKCk7CisgICAg
ICAgIGNhbkJlSW50LmxpbmsodGhpcyk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBvcjY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0UGF5bG9hZCk7CisjZWxzZQorICAg
IG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVzdWx0VGFnKTsKKyNlbmRp
ZgorICAgIGlmIChkb25lLmlzU2V0KCkpCisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICBy
ZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRB
cnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRB
cnJheVR5cGUgdHlwZSkKK3sKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBlKSk7CisKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQg
cHJvcGVydHkgPSByZWdUMTsKKyAgICBSZWdpc3RlcklEIHJlc3VsdFBheWxvYWQgPSByZWdUMDsK
KyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2gy
ID0gcmVnVDQ7CisjZWxzZQorICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lz
dGVySUQgcHJvcGVydHkgPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIHJlc3VsdFBheWxvYWQgPSBy
ZWdUMDsKKyAgICBSZWdpc3RlcklEIHJlc3VsdFRhZyA9IHJlZ1QxOworICAgIFJlZ2lzdGVySUQg
c2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsKKyNlbmRp
ZgorCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5
cGVkQXJyYXlUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVy
Vmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOworICAgIGNhZ2VDb25kaXRpb25hbGx5
KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKworICAgIHN3aXRjaCAo
ZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICBjYXNlIDQ6CisgICAgICAgIGxvYWRGbG9hdChCYXNl
SW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91ciksIGZwUmVnVDApOworICAgICAgICBj
b252ZXJ0RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSA4OiB7CisgICAgICAgIGxvYWREb3VibGUoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3Bl
cnR5LCBUaW1lc0VpZ2h0KSwgZnBSZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBk
ZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIEp1bXAgbm90TmFOID0gYnJh
bmNoRG91YmxlKERvdWJsZUVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QwKTsKKyAgICBzdGF0aWMgY29u
c3QgZG91YmxlIE5hTiA9IFBOYU47CisgICAgbG9hZERvdWJsZShUcnVzdGVkSW1tUHRyKCZOYU4p
LCBmcFJlZ1QwKTsKKyAgICBub3ROYU4ubGluayh0aGlzKTsKKworI2lmIFVTRShKU1ZBTFVFNjQp
CisgICAgbW92ZURvdWJsZVRvNjQoZnBSZWdUMCwgcmVzdWx0UGF5bG9hZCk7CisgICAgc3ViNjQo
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkKTsKKyNlbHNlCisgICAgbW92ZURv
dWJsZVRvSW50cyhmcFJlZ1QwLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOworI2VuZGlmCisg
ICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRJbnRUeXBl
ZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgQVNT
RVJUKGlzSW50KHR5cGUpKTsKKworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQgYmFzZSA9
IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAgICBSZWdpc3RlcklE
IGVhcmx5U2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdU
MjsKKyAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OworI2Vsc2UKKyAgICBSZWdp
c3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Cisg
ICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIGxhdGVT
Y3JhdGNoID0gcmVnVDE7CisgICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKKyNl
bmRpZgorCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgbG9hZDgoQWRkcmVzcyhiYXNl
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKKyAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZElt
bTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOworICAgIEp1bXAgaW5Cb3VuZHMgPSBi
cmFuY2gzMihCZWxvdywgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mTGVuZ3RoKCkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVj
aWFsQ2FzZShwcm9maWxlKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAoKSk7CisgICAgaW5C
b3VuZHMubGluayh0aGlzKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90SW50MzIoZWFybHlTY3JhdGNoKSk7CisjZWxzZQorICAgIGVtaXRMb2FkKHZhbHVl
LCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90SW50MzIobGF0ZVNjcmF0Y2gpKTsKKyNlbmRpZgorCisgICAgLy8gV2Ugd291bGQgYmUg
bG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUg
c2xvdworICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KKyAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9y
KCkpLCBsYXRlU2NyYXRjaCk7CisgICAgY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1p
dGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNoMik7CisKKyAgICBpZiAoaXNDbGFtcGVkKHR5
cGUpKSB7CisgICAgICAgIEFTU0VSVChlbGVtZW50U2l6ZSh0eXBlKSA9PSAxKTsKKyAgICAgICAg
QVNTRVJUKCFKU0M6OmlzU2lnbmVkKHR5cGUpKTsKKyAgICAgICAgSnVtcCBpbkJvdW5kcyA9IGJy
YW5jaDMyKEJlbG93T3JFcXVhbCwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwor
ICAgICAgICBKdW1wIHRvb0JpZyA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuLCBlYXJseVNjcmF0Y2gs
IFRydXN0ZWRJbW0zMigweGZmKSk7CisgICAgICAgIHhvcjMyKGVhcmx5U2NyYXRjaCwgZWFybHlT
Y3JhdGNoKTsKKyAgICAgICAgSnVtcCBjbGFtcGVkID0ganVtcCgpOworICAgICAgICB0b29CaWcu
bGluayh0aGlzKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoMHhmZiksIGVhcmx5U2NyYXRj
aCk7CisgICAgICAgIGNsYW1wZWQubGluayh0aGlzKTsKKyAgICAgICAgaW5Cb3VuZHMubGluayh0
aGlzKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CisgICAgY2Fz
ZSAxOgorICAgICAgICBzdG9yZTgoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gs
IHByb3BlcnR5LCBUaW1lc09uZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDI6CisgICAg
ICAgIHN0b3JlMTYoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5
LCBUaW1lc1R3bykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIHN0b3Jl
MzIoZWFybHlTY3JhdGNoLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0Zv
dXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCit7CisgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
OworICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKKworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lz
dGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAg
ICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgbGF0ZVNj
cmF0Y2ggPSByZWdUMjsKKyAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OworI2Vs
c2UKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5
ID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdp
c3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDE7CisgICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIg
PSByZWdUNDsKKyNlbmRpZgorCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgbG9hZDgo
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlTY3JhdGNo
KTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRj
aCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOworICAgIEp1bXAg
aW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKTsKKyAgICBlbWl0QXJyYXlQcm9maWxlT3V0
T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAo
KSk7CisgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgZWFybHlTY3JhdGNoKTsKKyAgICBKdW1wIGRv
dWJsZUNhc2UgPSBicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRjaCk7CisgICAgY29udmVydElu
dDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKKyAgICBKdW1wIHJlYWR5ID0ganVt
cCgpOworICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90TnVtYmVyKGVhcmx5U2NyYXRjaCkpOworICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgZWFybHlTY3JhdGNoKTsKKyAgICBtb3ZlNjRUb0RvdWJsZShlYXJseVNjcmF0Y2gs
IGZwUmVnVDApOworICAgIHJlYWR5LmxpbmsodGhpcyk7CisjZWxzZQorICAgIGVtaXRMb2FkKHZh
bHVlLCBsYXRlU2NyYXRjaCwgZWFybHlTY3JhdGNoKTsKKyAgICBKdW1wIGRvdWJsZUNhc2UgPSBi
cmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKTsKKyAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShl
YXJseVNjcmF0Y2gsIGZwUmVnVDApOworICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgZG91
YmxlQ2FzZS5saW5rKHRoaXMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmUs
IGxhdGVTY3JhdGNoLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgIG1v
dmVJbnRzVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBsYXRlU2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdU
MSk7CisgICAgcmVhZHkubGluayh0aGlzKTsKKyNlbmRpZgorCisgICAgLy8gV2Ugd291bGQgYmUg
bG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUg
c2xvdworICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KKyAg
ICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9y
KCkpLCBsYXRlU2NyYXRjaCk7CisgICAgY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1p
dGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNoMik7CisKKyAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKHR5cGUpKSB7CisgICAgY2FzZSA0OgorICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChm
cFJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgo
bGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSA4OgorICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0
Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVDMyXzY0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NzJmNzE3YWIzMDJmMjVhYWUzYTk0
YTNlYWI1MDQzMzVmODNiNDMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQzMl82NC5jcHAKQEAgLTAsMCArMSwzMDQ1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFBhdHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Cisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJKSVQuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJC
eXRlY29kZVN0cnVjdHMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJEaXJl
Y3RBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlcklubGluZXMuaCIKKyNpbmNs
dWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcnJheS5oIgorI2luY2x1ZGUgIkpTQ2Fz
dC5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9u
bWVudC5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgorI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgorI2luY2x1ZGUg
IlNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSAi
U3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMuaCIKKyNpbmNs
dWRlICJUeXBlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKKyNpbmNs
dWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKKyNpZiBVU0UoSlNWQUxVRTMyXzY0KQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGlmIChtX2NvZGVCbG9jay0+
aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKKyAgICAgICAgZW1pdFN0b3JlKGRzdCwgZ2V0
Q29uc3RhbnRPcGVyYW5kKHNyYykpOworICAgIGVsc2UgeworICAgICAgICBlbWl0TG9hZChzcmMs
IHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBBU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0
ZXIpOworICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1Qx
LCByZXR1cm5WYWx1ZUdQUik7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVt
aXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgcmV0KCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2ptcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgYWRkSnVtcChqdW1w
KCksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUo
KTsKKyAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9u
U2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgIEFsbG9jYXRvciBhbGxvY2F0
b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZp
cnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3Rz
KTsKKworICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmV0dXJuVmFsdWVHUFI7CisgICAgUmVn
aXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcg
PSByZWdUMzsKKworICAgIGlmICghYWxsb2NhdG9yKQorICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOworICAgIGVsc2UgeworICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGF1
dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAgICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciks
IGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0
Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShy
ZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIGFkZFNsb3dD
YXNlKHNsb3dDYXNlcyk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKKworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTmV3T2JqZWN0LCBzdHJ1Y3R1cmUpOworICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5W
YWx1ZUdQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2Uo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvJiBieXRlY29kZSA9
ICpyZWludGVycHJldF9jYXN0PE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2UqPihjdXJyZW50SW5zdHJ1
Y3Rpb24pOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3QoKTsKKyAgICBpbnQgY29uc3RydWN0
b3IgPSBieXRlY29kZS5jb25zdHJ1Y3RvcigpOworICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0g
Ynl0ZWNvZGUuaGFzSW5zdGFuY2VWYWx1ZSgpOworCisgICAgZW1pdExvYWRQYXlsb2FkKGhhc0lu
c3RhbmNlVmFsdWUsIHJlZ1QwKTsKKyAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hh
dCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCisgICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVl
Tm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7CisgICAgSnVt
cCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJ
bnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKKworICAgIC8vIFdlIGtub3cgdGhhdCBjb25zdHJ1
Y3RvciBpcyBhbiBvYmplY3QgZnJvbSB0aGUgd2F5IGJ5dGVjb2RlIGlzIGVtaXR0ZWQgZm9yIGlu
c3RhbmNlb2YgZXhwcmVzc2lvbnMuCisgICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCBy
ZWdUMCk7CisKKyAgICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVs
dEhhc0luc3RhbmNlJyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBi
b3VuZCBmdW5jdGlvbi4KKyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5
cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlKSwgcmVnVDApOworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIGhhc0luc3Rh
bmNlVmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5s
aW5rKHRoaXMpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisKKyAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKKworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgYXV0byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcEluc3RhbmNlb2Yq
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3QoKTsKKyAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZSgpOworICAgIGludCBwcm90byA9IGJ5dGVjb2Rl
LnByb3RvdHlwZSgpOworCisgICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgaW50byByZWdpc3RlcnMu
CisgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3
aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisg
ICAgZW1pdExvYWRQYXlsb2FkKHZhbHVlLCByZWdUMik7CisgICAgZW1pdExvYWRQYXlsb2FkKHBy
b3RvLCByZWdUMSk7CisKKyAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZh
bCBtdXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBT
eW1ib2wuaGFzSW5zdGFuY2UuCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVl
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG8pOworCisgICAgSklUSW5z
dGFuY2VPZkdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLAorICAgICAg
ICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIHJlZ1Qw
LCAvLyByZXN1bHQKKyAgICAgICAgcmVnVDIsIC8vIHZhbHVlCisgICAgICAgIHJlZ1QxLCAvLyBw
cm90bworICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCisgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOworICAgIG1faW5zdGFuY2VPZnMuYXBwZW5kKGdlbik7CisKKyAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5j
ZW9mX2N1c3RvbShJbnN0cnVjdGlvbiopCit7CisgICAgLy8gVGhpcyBhbHdheXMgZ29lcyB0byBz
bG93IHBhdGggc2luY2Ugd2UgZXhwZWN0IGl0IHRvIGJlIHJhcmUuCisgICAgYWRkU2xvd0Nhc2Uo
anVtcCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgYXV0byYgYnl0ZWNv
ZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcEluc3RhbmNlb2YqPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3QoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS52YWx1ZSgpOworICAgIGludCBwcm90byA9IGJ5dGVjb2RlLnByb3RvdHlwZSgpOworCisgICAg
SklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJ
bmRleCsrXTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIGVtaXRM
b2FkVGFnKHZhbHVlLCByZWdUMCk7CisgICAgZW1pdExvYWRUYWcocHJvdG8sIHJlZ1QzKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNlT2ZPcHRpbWl6ZSwg
ZHN0LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDAsIHJlZ1QyKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QxKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9t
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIGF1
dG8mIGJ5dGVjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BJbnN0YW5jZW9mQ3VzdG9tKj4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7CisgICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUoKTsKKyAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29k
ZS5jb25zdHJ1Y3RvcigpOworICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFz
SW5zdGFuY2VWYWx1ZSgpOworCisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7CisgICAgZW1pdExvYWQoaGFz
SW5zdGFuY2VWYWx1ZSwgcmVnVDQsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkluc3RhbmNlT2ZDdXN0b20sIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHJlZ1QyLCBKU1Zh
bHVlUmVncyhyZWdUNCwgcmVnVDMpKTsKKyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBjb21wYXJlMzIo
RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHJlZ1Qw
KTsKKworICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2lzX3VuZGVmaW5lZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2YWx1
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZCh2YWx1
ZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMSk7
CisKKyAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5k
ZWZpbmVkVGFnKSwgcmVnVDApOworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIGlzQ2Vs
bC5saW5rKHRoaXMpOworICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOworCisgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMSk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVn
VDEsIHJlZ1QwKTsKKworICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICBkb25lLmxpbmsodGhpcyk7CisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAg
ICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVnVDApOworICAgIGVtaXRTdG9y
ZUJvb2woZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgIGNvbXBhcmUzMihCZWxvdywgcmVnVDAs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSwgcmVnVDApOworICAgIGVtaXRT
dG9yZUJvb2woZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0
aF90eXBlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgdHlwZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CisKKyAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKwor
ICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdU
MCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7CisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1Qw
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOworICAgIEp1bXAgaXNOb3RDZWxs
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKKworICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0z
MihPYmplY3RUeXBlKSwgcmVnVDApOworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisK
KyAgICBkb25lLmxpbmsodGhpcyk7CisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CisgICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAg
ICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisKKyAgICBKdW1wIGlzSW1tID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QxKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkp
OworICAgIGlzSW1tLmxpbmsodGhpcyk7CisKKyAgICBpZiAoZHN0ICE9IHNyYykKKyAgICAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfc2V0
X2Z1bmN0aW9uX25hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBp
bnQgZnVuYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG5hbWUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGVtaXRMb2FkUGF5bG9hZChm
dW5jLCByZWdUMSk7CisgICAgZW1pdExvYWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJl
Z1QzLCByZWdUMikpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKKyAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKworICAgIGVtaXRMb2FkVGFnKHNyYywgcmVnVDApOworCisgICAgZW1pdExvYWQoc3JjLCBy
ZWdUMSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Qm9vbGVhbihyZWdUMSwg
SW52YWxpZEdQUlJlZykpOworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworCisg
ICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwLCAoZHN0ID09IHNyYykpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBpbnQgY29uZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRM
b2FkKGNvbmQsIHJlZ1QxLCByZWdUMCk7CisKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZShyZWdUMSwg
cmVnVDApOworICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisgICAgR1BSUmVnIHJlc3VsdCA9
IHJlZ1QzOworICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKKyAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCp2bSgpLCB2YWx1ZSwgcmVzdWx0LCBz
Y3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisKKyAgICBhZGRKdW1wKGJyYW5jaFRl
c3QzMihaZXJvLCByZXN1bHQpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBjb25kID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQoY29uZCwgcmVnVDEs
IHJlZ1QwKTsKKyAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRy
dWU7CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWUocmVnVDEsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2Ny
YXRjaCA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMzsKKyAgICBlbWl0Q29udmVy
dFZhbHVlVG9Cb29sZWFuKCp2bSgpLCB2YWx1ZSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBm
cFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKSk7CisKKyAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXN1
bHQpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisKKyAg
ICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKKworICAgIEp1bXAg
aXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgYWRkSnVtcChicmFuY2hQdHIo
RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCBy
ZWdUMCksIHRhcmdldCk7CisgICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWln
biA9IGp1bXAoKTsKKworICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVu
ZGVmaW5lZCAmIG51bGwKKyAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworICAgIHN0YXRpY19h
c3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYg
KEpTVmFsdWU6Ok51bGxUYWcgJiAweDEpLCAiIik7CisgICAgb3IzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QxKTsKKyAgICBhZGRKdW1wKGJyYW5jaElmTnVsbChyZWdUMSksIHRhcmdldCk7CisKKyAg
ICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICBtYXNxdWVyYWRl
c0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQg
c3JjID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQoc3Jj
LCByZWdUMSwgcmVnVDApOworCisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMSk7CisKKyAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGFkZEp1bXAoYnJhbmNo
UHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNl
dCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgp
OworCisgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYg
bnVsbAorICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KChK
U1ZhbHVlOjpVbmRlZmluZWRUYWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVl
OjpOdWxsVGFnICYgMHgxKSwgIiIpOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7
CisgICAgYWRkSnVtcChicmFuY2hJZk5vdE51bGwocmVnVDEpLCB0YXJnZXQpOworCisgICAgd2Fz
Tm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2puZXFfcHRy
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHNyYyA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgU3BlY2lhbDo6UG9pbnRlciBwdHIgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5zcGVjaWFsUG9pbnRlcjsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQoc3Jj
LCByZWdUMSwgcmVnVDApOworICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MSk7CisgICAgSnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1Q
dHIoYWN0dWFsUG9pbnRlckZvcihtX2NvZGVCbG9jaywgcHRyKSkpOworICAgIG5vdENlbGwubGlu
ayh0aGlzKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigxKSwgJmN1cnJlbnRJbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQpOworICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworICAgIGVxdWFs
LmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VxKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAg
IGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJl
bG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKworICAgIGNv
bXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisKKyAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKwor
ICAgIEp1bXBMaXN0IHN0b3JlUmVzdWx0OworICAgIEp1bXBMaXN0IGdlbmVyaWNDYXNlOworCisg
ICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3QgZXF1
YWwKKworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlNDZWxsCisg
ICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgZ2Vu
ZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QyKSk7CisKKyAgICAvLyBTdHJp
bmcgY2FzZS4KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVn
VDAsIHJlZ1QyKTsKKyAgICBzdG9yZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIEdl
bmVyaWMgY2FzZS4KKyAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAv
LyBkb3VibGVzCisgICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7CisKKyAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOworICAgIGVt
aXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2plcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGludCBzcmMxID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBz
cmMyLCByZWdUMywgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDMpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpMb3dlc3RUYWcpKSk7CisKKyAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVn
VDIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCBDb21waWxlT3BFcVR5cGUgdHlwZSwgaW50
IGp1bXBUYXJnZXQpCit7CisgICAgSnVtcExpc3QgZG9uZTsKKyAgICBKdW1wTGlzdCBnZW5lcmlj
Q2FzZTsKKworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIHRh
Z3Mgbm90IGVxdWFsCisKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHRhZ3MgZXF1YWwgYW5k
IEpTQ2VsbAorICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkp
OworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOworCisg
ICAgLy8gU3RyaW5nIGNhc2UuCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3Ry
aW5nRXEsIHJlZ1QwLCByZWdUMik7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1
ZUdQUiksIGp1bXBUYXJnZXQpOworICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAvLyBH
ZW5lcmljIGNhc2UuCisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsg
Ly8gZG91YmxlcworICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlRXEsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0
eXBlID09IENvbXBpbGVPcEVxVHlwZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVH
UFIpLCBqdW1wVGFyZ2V0KTsKKworICAgIGRvbmUubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2plcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVPcEVxSnVtcFNs
b3coaXRlciwgQ29tcGlsZU9wRXFUeXBlOjpFcSwgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOworICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAg
ICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0
TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDEpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisKKyAgICBjb21wYXJl
MzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworCisgICAgZW1pdFN0b3JlQm9vbChk
c3QsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworCisg
ICAgSnVtcExpc3Qgc3RvcmVSZXN1bHQ7CisgICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7CisKKyAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyB0YWdzIG5vdCBlcXVh
bAorCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwKKyAg
ICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBnZW5l
cmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKKworICAgIC8vIFN0cmlu
ZyBjYXNlLgorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdU
MCwgcmVnVDIpOworICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1wKCkpOworCisgICAgLy8gR2Vu
ZXJpYyBjYXNlLgorICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8v
IGRvdWJsZXMKKyAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ29tcGFyZUVxLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpKTsKKworICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7CisgICAgeG9y
MzIoVHJ1c3RlZEltbTMyKDB4MSksIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmV0dXJuVmFsdWVHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHRhcmdldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKKworICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1Qz
LCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdU
MykpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRh
ZykpKTsKKworICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiksIHRh
cmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgY29tcGlsZU9wRXFKdW1wU2xvdyhpdGVyLCBDb21waWxlT3BFcVR5cGU6Ok5FcSwgY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlT3BT
dHJpY3RFcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RF
cVR5cGUgdHlwZSkKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1p
dExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKKworICAgIC8v
IEJhaWwgaWYgdGhlIHRhZ3MgZGlmZmVyLCBvciBhcmUgZG91YmxlLgorICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisK
KyAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGJvdGggYXJlIHN0cmluZ3Mgb3Igc3ltYm9s
cyAobm9uIG9iamVjdCkuCisgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qx
KTsKKyAgICBKdW1wIGZpcnN0SXNPYmplY3QgPSBicmFuY2hJZk9iamVjdChyZWdUMCk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDIpKTsKKyAgICBub3RDZWxsLmxpbmso
dGhpcyk7CisgICAgZmlyc3RJc09iamVjdC5saW5rKHRoaXMpOworCisgICAgLy8gU2ltcGx5IGNv
bXBhcmUgdGhlIHBheWxvYWRzLgorICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6U3RyaWN0RXEpCisgICAgICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdU
MCk7CisgICAgZWxzZQorICAgICAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOworCisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3Bfc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBjb21waWxlT3BTdHJpY3RFcShjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6U3RyaWN0RXEpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9uc3RyaWN0ZXEoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBjb21waWxlT3BTdHJpY3RFcShjdXJy
ZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKK30KKwor
dm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKK3sKKyAgICBpbnQgdGFyZ2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjMSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3Jj
MiwgcmVnVDMsIHJlZ1QyKTsKKworICAgIC8vIEJhaWwgaWYgdGhlIHRhZ3MgZGlmZmVyLCBvciBh
cmUgZG91YmxlLgorICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVn
VDMpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisKKyAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlm
IGJvdGggYXJlIHN0cmluZ3Mgb3Igc3ltYm9scyAobm9uIG9iamVjdCkuCisgICAgSnVtcCBub3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKKyAgICBKdW1wIGZpcnN0SXNPYmplY3QgPSBi
cmFuY2hJZk9iamVjdChyZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3Qo
cmVnVDIpKTsKKyAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgZmlyc3RJc09iamVjdC5saW5r
KHRoaXMpOworCisgICAgLy8gU2ltcGx5IGNvbXBhcmUgdGhlIHBheWxvYWRzLgorICAgIGlmICh0
eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7CisgICAgZWxzZQorICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOworfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBjb21waWxlT3BTdHJpY3RFcUp1bXAoY3VycmVudEluc3RydWN0aW9uLCBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
am5zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBp
bGVPcFN0cmljdEVxSnVtcChjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlw
ZTo6TlN0cmljdEVxKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmlj
dEVxLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisKKyAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CisgICAgSnVtcCBpc0lt
bWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CisKKyAgICBKdW1wIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDEpOworICAgIEp1bXAgd2Fz
Tm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgIGNv
bXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7CisgICAgSnVtcCB3YXNOb3RJbW1l
ZGlhdGUgPSBqdW1wKCk7CisKKyAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgY29t
cGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdU
Mik7CisgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QxKTsKKyAgICBvcjMyKHJlZ1QyLCByZWdUMSk7CisKKyAgICB3YXNO
b3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
LmxpbmsodGhpcyk7CisKKyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDEpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGlu
dCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQo
c3JjLCByZWdUMSwgcmVnVDApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENl
bGwocmVnVDEpOworCisgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hU
ZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgbW92ZShUcnVz
dGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBqdW1wKCk7CisKKyAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9i
YWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1Qw
LCByZWdUMiwgcmVnVDEpOworICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisg
ICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKworICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOworICAgIGNvbXBhcmUz
MihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBy
ZWdUMSk7CisgICAgYW5kMzIocmVnVDIsIHJlZ1QxKTsKKworICAgIHdhc05vdEltbWVkaWF0ZS5s
aW5rKHRoaXMpOworICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsK
KworICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgQVNTRVJUKHJl
Z1QwID09IHJldHVyblZhbHVlR1BSKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICBlbWl0TG9hZChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVy
YXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApKTsKKyAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZChz
cmMsIHJlZ1QxLCByZWdUMCk7CisKKyAgICBKdW1wIGlzSW50MzIgPSBicmFuY2hJZkludDMyKHJl
Z1QxKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgIGlzSW50MzIubGluayh0aGlzKTsK
KworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBpZiAoc3JjICE9IGRzdCkKKyAg
ICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfdG9fc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYyA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZChzcmMsIHJlZ1Qx
LCByZWdUMCk7CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOworCisgICAgaWYgKHNyYyAh
PSBkc3QpCisgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX3RvX29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGlu
dCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQo
c3JjLCByZWdUMSwgcmVnVDApOworCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QxKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY2F0
Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICByZXN0b3JlQ2FsbGVl
U2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUp
OworCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CisgICAgLy8gb3BlcmF0
aW9uVGhyb3cgcmV0dXJucyB0aGUgY2FsbEZyYW1lIGZvciB0aGUgaGFuZGxlci4KKyAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJh
bWVSZWdpc3Rlcik7CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVz
cyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKKworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisg
ICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlv
bklzVW5jYXRjaGFibGVBbmROb3RpZnlQcm9maWxlcik7CisgICAgSnVtcCBpc0NhdGNoYWJsZUV4
Y2VwdGlvbiA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAganVtcFRv
RXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CisgICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGluayh0
aGlzKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOworCisgICAgLy8g
Tm93IHN0b3JlIHRoZSBleGNlcHRpb24gcmV0dXJuZWQgYnkgb3BlcmF0aW9uVGhyb3cuCisgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QyKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOworCisgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQo
KSkpOworCisgICAgdW5zaWduZWQgZXhjZXB0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICBlbWl0U3RvcmUoZXhjZXB0aW9uLCByZWdUMSwgcmVnVDIpOworCisgICAg
bG9hZDMyKEFkZHJlc3MocmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKKyAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9G
KEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7CisKKyAgICB1bnNpZ25lZCB0aHJvd25W
YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgZW1pdFN0b3JlKHRo
cm93blZhbHVlLCByZWdUMSwgcmVnVDApOworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgLy8g
RklYTUU6IGNvbnNpZGVyIGlubGluZSBjYWNoaW5nIHRoZSBwcm9jZXNzIG9mIGRvaW5nIE9TUiBl
bnRyeSwgaW5jbHVkaW5nCisgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9j
YWxzIHRvIHRoZSBidWZmZXIsIGV0YworICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzU1OTgKKworICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIq
IGJ1ZmZlciA9IHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqPihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5wb2ludGVyKTsKKyAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRF
bWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50
ZXJBdENhdGNoLCBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCBtX2J5dGVj
b2RlT2Zmc2V0KTsKKyAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywg
cmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBqdW1w
KHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CisgICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7
CisgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgYnVm
ZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgeworICAg
ICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMSwgcmVnVDApOworICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9maWxlLm1fb3BlcmFuZCwgcmVncyk7CisgICAgICAgICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKHByb2ZpbGUubV9wcm9maWxlKTsKKyAgICAgICAgfSk7
CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoSW5zdHJ1Y3Rpb24qKQoreworICAgIC8vIFdlIGRvbid0
IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZS4uLgorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cGFyZW50X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50
IGN1cnJlbnRTY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgZW1p
dExvYWRQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQ2Vs
bChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKworICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRp
b25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCisgICAgU2ltcGxlSnVtcFRhYmxlKiBq
dW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlT2Zm
c2V0LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOworICAgIGp1bXBU
YWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKKworICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEs
IHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3du
S2V5VHlwZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7CisgICAganVt
cChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHNpemVfdCB0
YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25l
ZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1
bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisg
ICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRo
aXMgc3dpdGNoIHN0YXRlbWVudC4KKyAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZt
X2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIG1fc3dpdGNoZXMu
YXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRP
ZmZzZXQsIFN3aXRjaFJlY29yZDo6Q2hhcmFjdGVyKSk7CisgICAganVtcFRhYmxlLT5lbnN1cmVD
VElUYWJsZSgpOworCisgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7CisgICAganVtcChyZXR1cm5WYWx1
ZUdQUiwgTm9QdHJUYWcpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgc2l6ZV90IHRhYmxlSW5kZXgg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIGRlZmF1bHRP
ZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHNj
cnV0aW5lZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgorICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2Nr
LT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgbV9zd2l0Y2hlcy5hcHBl
bmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVsdE9mZnNl
dCkpOworCisgICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4KTsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BS
LCBOb1B0clRhZyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJl
cXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVi
dWcsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIG5vRGVidWdnZXJSZXF1
ZXN0cy5saW5rKHRoaXMpOworfQorCisKK3ZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hl
Y2soKTsKKworICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3QgdXNlIHRoZW0sIHdl
IGluaXRpYWxpemUgb3VyIGNvbnN0YW50CisgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBw
b2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCisgICAgLy8gb2JqZWN0
IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgorICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytpKQorICAgICAgICBlbWl0U3RvcmUodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCksIGpzVW5kZWZpbmVkKCkpOworCisgICAg
SklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dfcGF0aF9lbnRlcik7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4o
KSksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGludCBjYWxsZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUuanNDZWxsOworICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7Cisg
ICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OworICAgIFJlZ2lzdGVySUQgcmVzdWx0
UmVnID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICBS
ZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVu
Y3Rpb25SZWcgPSByZWdUNDsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKKwor
ICAgIGVtaXRMb2FkUGF5bG9hZChjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoY2Fs
bGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZykpOworICAgIGxv
YWQzMihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZB
bGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJhcmVEYXRh
UmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkg
KyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZTdHJ1Y3R1cmUoKSksIHN0cnVjdHVy
ZVJlZyk7CisKKyAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9uLCBjYWNoZWRGdW5jdGlvblJlZyk7
CisgICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0gYnJhbmNoUHRyKEVxdWFsLCBjYWNo
ZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9i
amVjdHMoKSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgY2FsbGVlUmVn
LCBjYWNoZWRGdW5jdGlvblJlZykpOworICAgIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMubGluayh0
aGlzKTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBhdXRvIGJ1dHRlcmZseSA9IFRy
dXN0ZWRJbW1QdHIobnVsbHB0cik7CisgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVn
LCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRvclJlZywgc3RydWN0dXJlUmVnLCBi
dXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2VzKTsKKyAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlc3VsdFJlZyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4q
IGNhY2hlZFN0cnVjdHVyZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmU7Cisg
ICAgaW50IHRoaXNSZWdpc3RlciA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisK
KyAgICBlbWl0TG9hZCh0aGlzUmVnaXN0ZXIsIHJlZ1QzLCByZWdUMik7CisKKyAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDMpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dFR5cGUocmVnVDIsIEZpbmFsT2JqZWN0VHlwZSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoY2Fj
aGVkU3RydWN0dXJlLCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFs
LCByZWdUMCwgcmVnVDIpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdExvYWRUYWcoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
RW1wdHkocmVnVDApKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9w
ZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDAp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKKworICAgIGVtaXRMb2Fk
UGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7CisKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisgICAgbW92ZShUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOworfQorCit2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJm1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOworCisgICAgUGF0
Y2hhYmxlSnVtcCBiYWRUeXBlOworCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhl
ciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCisgICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUs
IGJhZFR5cGUpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2spOworCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJl
bDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOworCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1w
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworCisgICAgYnlW
YWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICJC
YXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVw
IiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkp
OworCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hD
YWxsKENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0
clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
aGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQg
YmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CisKKyAgICBlbWl0
TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlKTsKKworICAgIGVtaXRMb2FkUGF5bG9hZChwcm9wZXJ0eSwgcmVnVDEpOworCisgICAg
Ly8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGluZyBh
biBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCisgICAgLy8gV2Ug
Y2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rv
ckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKKyAgICAvLyBudW1iZXIgd2FzIHNp
Z25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2lu
Y2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KKyAgICAvLyBzaXplIGlzIGFsd2F5cyBsZXNzIHRoYW4g
NEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVlbiBjb3JyZWN0IChhbmQg
ZXh0ZW5kaW5nIHRoZSB2YWx1ZQorICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNpbmNl
IGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2UgemVybyBleHRlbmQgcmF0
aGVyIHRoYW4gc2lnbgorICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIg
dG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgorICAgIHplcm9FeHRlbmQzMlRv
UHRyKHJlZ1QxLCByZWdUMSk7CisKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwo
cmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdT
aGFwZU1hc2spLCByZWdUMik7CisKKyAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5
TW9kZShwcm9maWxlKTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisKKyAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3Vt
ZW50cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAz
NC4KKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50
SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMCk7CisKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOworCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisKKyAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOworCisgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOworCisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJ
bmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHBy
b2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9o
YXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAg
aW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLmJ5VmFsSW5mbzsKKworICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKwor
ICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQocHJvcGVydHks
IHJlZ1QzLCByZWdUMik7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25I
YXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIGJ5VmFsSW5mbyk7CisKKyAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNs
b3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAg
ICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisKKyAg
ICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2Us
IHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7CisKKyAgICAv
LyBDaGVjayB0aGUgc3RydWN0dXJlCisgICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJl
Z1QxKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwg
QWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJ
RE9mZnNldCgpKSkpOworCisgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgZW1pdExvYWRQ
YXlsb2FkKGluZGV4LCByZWdUMik7CisgICAgLy8gSWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBl
bnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFj
Y2VzcworICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBy
ZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6
b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7CisgICAgbG9hZDMyKEJhc2VJbmRleChy
ZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSwgcmVnVDEpOworICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1l
c0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdU
MCk7CisKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAvLyBPdGhlcndpc2UgaXQncyBv
dXQgb2YgbGluZQorICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAg
IHN1YjMyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5s
aW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBuZWczMihyZWdUMik7CisgICAgaW50
MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJ
bkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVl
KTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgb2Zmc2V0
T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCByZWdUMSk7CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQs
IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy5wYXlsb2FkKSksIHJlZ1QwKTsKKworICAgIGRvbmUubGluayh0aGlzKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKworICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOworICAgIGVtaXRM
b2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5j
aDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKworICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIo
MCksIHJlZ1QwKTsKKworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBpbkJvdW5kcy5saW5r
KHRoaXMpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBs
b2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIHRpbWVzUHRyKCkpLCByZWdUMCk7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QyKTsKKworICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KworICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9h
ZChlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93
LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRHZW5l
cmljUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpOdWxsVGFnKSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
CisKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKKwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNo
ZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7CisgICAgbG9hZFB0cihCYXNl
SW5kZXgocmVnVDEsIHJlZ1QwLCB0aW1lc1B0cigpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMik7CisKKyAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV90eXBlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
VHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5sb2NhdGlvbjsKKyAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworCisgICAgLy8gTG9hZCBwYXlsb2FkIGluIFQwLiBMb2FkIHRhZyBpbiBU
My4KKyAgICBlbWl0TG9hZFBheWxvYWQodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKKyAgICBlbWl0
TG9hZFRhZyh2YWx1ZVRvUHJvZmlsZSwgcmVnVDMpOworCisgICAgSnVtcExpc3QganVtcFRvRW5k
OworCisgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QzKSk7CisKKyAgICAv
LyBDb21waWxlIGluIGEgcHJlZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBwb3NzaWJsZSwgdG8gc2Vl
IGlmIHdlIGNhbiBza2lwIHdyaXRpbmcgdG8gdGhlIGxvZy4KKyAgICAvLyBUaGVzZSB0eXBlY2hl
Y2tzIGFyZSBpbmxpbmVkIHRvIG1hdGNoIHRob3NlIG9mIHRoZSAzMi1iaXQgSlNWYWx1ZSB0eXBl
IGNoZWNrcy4KKyAgICBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBU
eXBlVW5kZWZpbmVkKQorICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmVW5kZWZpbmVk
KHJlZ1QzKSk7CisgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlw
ZSA9PSBUeXBlTnVsbCkKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bGwocmVn
VDMpKTsKKyAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09
IFR5cGVCb29sZWFuKQorICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmQm9vbGVhbihy
ZWdUMywgSW52YWxpZEdQUlJlZykpOworICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+
bV9sYXN0U2VlblR5cGUgPT0gVHlwZUFueUludCkKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChi
cmFuY2hJZkludDMyKHJlZ1QzKSk7CisgICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5t
X2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVtYmVyKSB7CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQo
YnJhbmNoSWZOdW1iZXIoSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgcmVnVDEpKTsKKyAgICB9
IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVN0cmlu
ZykgeworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMyk7Cisg
ICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZTdHJpbmcocmVnVDApKTsKKyAgICAgICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgfQorCisgICAgLy8gTG9hZCB0aGUgdHlwZSBwcm9m
aWxpbmcgbG9nIGludG8gVDIuCisgICAgVHlwZVByb2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJvZmls
ZXJMb2cgPSBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgcmVnVDIpOworCisgICAgLy8gTG9hZCB0aGUgbmV4dCBs
b2cgZW50cnkgaW50byBUMS4KKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxl
ckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpLCByZWdUMSk7CisKKyAgICAvLyBTdG9yZSB0
aGUgSlNWYWx1ZSBvbnRvIHRoZSBsb2cgZW50cnkuCisgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVz
cyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSArIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOworICAgIHN0b3JlMzIocmVn
VDMsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0
KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworCisgICAgLy8g
U3RvcmUgdGhlIHN0cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIGFyZ3VtZW50IGlzIGEgY2VsbCwg
b3RoZXJ3aXNlLCBzdG9yZSAwIG9uIHRoZSBsb2cgZW50cnkuCisgICAgSnVtcCBub3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QzKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgIHN0b3JlMzIocmVnVDAsIEFkZHJl
c3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKKyAgICBKdW1wIHNraXBOb3RDZWxsID0ganVtcCgpOworICAgIG5vdENlbGwubGluayh0aGlz
KTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2Zp
bGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIHNraXBOb3RDZWxs
LmxpbmsodGhpcyk7CisKKyAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRoZSBsb2cg
ZW50cnkuCisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVMb2NhdGlvbiksIHJlZ1Qw
KTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6Okxv
Z0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7CisKKyAgICAvLyBJbmNyZW1lbnQgdGhlIGN1cnJl
bnQgbG9nIGVudHJ5LgorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxl
ckxvZzo6TG9nRW50cnkpKSwgcmVnVDEpOworICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVn
VDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKKyAgICBqdW1w
VG9FbmQuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW1QdHIoY2Fj
aGVkVHlwZVByb2ZpbGVyTG9nLT5sb2dFbmRQdHIoKSkpKTsKKyAgICAvLyBDbGVhciB0aGUgbG9n
IGlmIHdlJ3JlIGF0IHRoZSBlbmQgb2YgdGhlIGxvZy4KKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblByb2Nlc3NUeXBlUHJvZmlsZXJMb2cpOworCisgICAganVtcFRvRW5kLmxpbmsodGhpcyk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgp
OworICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9
IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAgICBH
UFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CisgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0g
bm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAg
IEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOworICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNr
ZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKwor
ICAgIHNjcmF0Y2gxUmVnID0gcmVnVDQ7CisgICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QzKTsKKyAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9n
dWVQYWNrZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOworICAgIHN0YXRpY19h
c3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2ls
bCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAgICBHUFJSZWcgc2hhZG93UGFj
a2V0UmVnID0gcmVnVDA7CisgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8g
VGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgorICAgIEdQUlJlZyBzY3JhdGNo
MlJlZyA9IHJlZ1QyOworICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRv
d1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKKworICAgIGVtaXRMb2FkUGF5
bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMik7CisgICAgZW1pdExv
YWRUYWcoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEpOworICAgIEpTVmFs
dWVSZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7CisgICAgZW1pdExvYWRQYXlsb2FkKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QzKTsKKyAgICBsb2dTaGFkb3dDaGlja2Vu
VGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgbV9jb2RlQmxvY2ss
IENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X2NvbXBhcmVBbmRKdW1wKE9wY29kZUlEIG9wY29kZSwgaW50IG9wMSwgaW50IG9wMiwgdW5zaWdu
ZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBKdW1wTGlz
dCBub3RJbnQzMk9wMTsKKyAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKKworICAgIC8vIENoYXJh
Y3RlciBsZXNzLgorICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgeworICAgICAg
ICBlbWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90Q2VsbChyZWdUMSkpOworICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKKyAgICAgICAg
ZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CisgICAgICAg
IGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRl
KGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQob3Ax
KSktPnRyeUdldFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKKyAgICAgICAgZW1pdExvYWQo
b3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwo
cmVnVDEpKTsKKyAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7CisgICAgICAgIGVtaXRMb2FkQ2hh
cmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOworICAgICAgICBhZGRTbG93Q2Fz
ZShmYWlsdXJlcyk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwg
SW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBd
KSksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSkpIHsKKyAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwor
ICAgICAgICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOworICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdl
dENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQpOworICAgIH0gZWxzZSBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgeworICAgICAgICBlbWl0TG9hZChvcDEsIHJl
Z1QxLCByZWdUMCk7CisgICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFuY2hJZk5vdEludDMy
KHJlZ1QxKSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1t
MzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCBy
ZWdUMik7CisgICAgICAgIG5vdEludDMyT3AxLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1Qx
KSk7CisgICAgICAgIG5vdEludDMyT3AyLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIpLCB0YXJn
ZXQpOworICAgIH0KKworICAgIGlmICghc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDEpOworICAgICAgICBhZGRTbG93Q2FzZShub3RJbnQz
Mk9wMik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSnVtcCBlbmQgPSBqdW1wKCk7CisK
KyAgICAvLyBEb3VibGUgbGVzcy4KKyAgICBlbWl0QmluYXJ5RG91YmxlT3Aob3Bjb2RlLCB0YXJn
ZXQsIG9wMSwgb3AyLCBPcGVyYW5kVHlwZXMoKSwgbm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAh
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSB8fCAh
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoaW50IG9wMSwgaW50IG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBpZiAo
aXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgeworICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1Qz
LCByZWdUMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCBy
ZWdUMiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSksIHRhcmdldCk7
CisgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CisgICAgICAgIGVt
aXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25k
aXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwg
dGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVn
VDAsIG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRp
b24sIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7CisgICAgfQorfQorCisKK3ZvaWQgSklUOjplbWl0
X2NvbXBhcmVVbnNpZ25lZChpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkg
eworICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdUMik7CisgICAgICAgIGNvbXBhcmUz
Mihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3Ax
KS5hc0ludDMyKCkpLCByZWdUMCk7CisgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDIpKSB7CisgICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAg
Y29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIp
LmFzSW50MzIoKSksIHJlZ1QwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0TG9hZDIob3Ax
LCByZWdUMSwgcmVnVDAsIG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgY29tcGFyZTMyKGNv
bmRpdGlvbiwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7CisgICAgfQorICAgIGVtaXRTdG9yZUJvb2wo
ZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhpbnQg
b3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChK
SVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNv
ZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBlbWl0TG9hZChv
cDEsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0
MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAg
IGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90SW50MzIocmVnVDEpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVn
VDAsIFRydXN0ZWRJbW0zMigwKSkpOworICAgIGVtaXRTdG9yZUludDMyKHJlc3VsdCwgcmVnVDAs
IHJlc3VsdCA9PSBvcDEpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsK
KworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAg
IGVtaXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9kZWMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgc3Jj
RHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKHNy
Y0RzdCwgcmVnVDEsIHJlZ1QwKTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIo
cmVnVDEpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZElt
bTMyKDEpLCByZWdUMCkpOworICAgIGVtaXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUp
OworfQorCit2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKE9wY29kZUlEIG9wY29kZUlELCBp
bnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBPcGVyYW5kVHlwZXMgdHlwZXMsIEp1bXBMaXN0JiBu
b3RJbnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMs
IGJvb2wgb3AySXNJblJlZ2lzdGVycykKK3sKKyAgICBKdW1wTGlzdCBlbmQ7CisKKyAgICBpZiAo
IW5vdEludDMyT3AxLmVtcHR5KCkpIHsKKyAgICAgICAgLy8gRG91YmxlIGNhc2UgMTogT3AxIGlz
IG5vdCBpbnQzMjsgT3AyIGlzIHVua25vd24uCisgICAgICAgIG5vdEludDMyT3AxLmxpbmsodGhp
cyk7CisKKyAgICAgICAgQVNTRVJUKG9wMUlzSW5SZWdpc3RlcnMpOworCisgICAgICAgIC8vIFZl
cmlmeSBPcDEgaXMgZG91YmxlLgorICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVs
eUlzTnVtYmVyKCkpCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZSwgcmVn
VDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisKKyAgICAgICAgaWYgKCFv
cDJJc0luUmVnaXN0ZXJzKQorICAgICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIp
OworCisgICAgICAgIEp1bXAgZG91YmxlT3AyID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QzLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7CisKKyAgICAgICAgaWYgKCF0eXBlcy5zZWNv
bmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTm90SW50MzIocmVnVDMpKTsKKworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdU
MiwgZnBSZWdUMCk7CisgICAgICAgIEp1bXAgZG9UaGVNYXRoID0ganVtcCgpOworCisgICAgICAg
IC8vIExvYWQgT3AyIGFzIGRvdWJsZSBpbnRvIGRvdWJsZSByZWdpc3Rlci4KKyAgICAgICAgZG91
YmxlT3AyLmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMCk7
CisKKyAgICAgICAgLy8gRG8gdGhlIG1hdGguCisgICAgICAgIGRvVGhlTWF0aC5saW5rKHRoaXMp
OworICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgIGNhc2Ugb3Bfamxlc3M6Cisg
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOworICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDIsIGZwUmVnVDApLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICAgICAg
ICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWwsIGZwUmVnVDIsIGZwUmVnVDApLCBkc3Qp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgICAg
ICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOworICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW4sIGZwUmVnVDIsIGZwUmVnVDApLCBkc3QpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICAgICAg
ICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7CisgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGZwUmVnVDIsIGZwUmVnVDApLCBk
c3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgICAg
ICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKKyAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBm
cFJlZ1QyKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG9wX2pubGVz
c2VxOgorICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKKyAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVn
VDAsIGZwUmVnVDIpLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3Bf
am5ncmVhdGVyOgorICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKKyAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9y
VW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QyKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgorICAgICAgICAgICAgZW1pdExvYWREb3VibGUo
b3AxLCBmcFJlZ1QyKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdy
ZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCBkc3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFub3RJbnQzMk9wMi5lbXB0
eSgpKQorICAgICAgICAgICAgZW5kLmFwcGVuZChqdW1wKCkpOworICAgIH0KKworICAgIGlmICgh
bm90SW50MzJPcDIuZW1wdHkoKSkgeworICAgICAgICAvLyBEb3VibGUgY2FzZSAyOiBPcDEgaXMg
aW50MzI7IE9wMiBpcyBub3QgaW50MzIuCisgICAgICAgIG5vdEludDMyT3AyLmxpbmsodGhpcyk7
CisKKyAgICAgICAgQVNTRVJUKG9wMklzSW5SZWdpc3RlcnMpOworCisgICAgICAgIGlmICghb3Ax
SXNJblJlZ2lzdGVycykKKyAgICAgICAgICAgIGVtaXRMb2FkUGF5bG9hZChvcDEsIHJlZ1QwKTsK
KworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7CisKKyAgICAg
ICAgLy8gVmVyaWZ5IG9wMiBpcyBkb3VibGUuCisgICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCku
ZGVmaW5pdGVseUlzTnVtYmVyKCkpCisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihB
Ym92ZSwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisKKyAgICAg
ICAgLy8gRG8gdGhlIG1hdGguCisgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKKyAgICAgICAg
Y2FzZSBvcF9qbGVzczoKKyAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7
CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgZnBSZWdU
MCwgZnBSZWdUMSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBvcF9q
bGVzc2VxOgorICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgZnBSZWdU
MCwgZnBSZWdUMSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBvcF9q
Z3JlYXRlcjoKKyAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7CisgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbiwgZnBSZWdUMCwg
ZnBSZWdUMSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBvcF9qZ3Jl
YXRlcmVxOgorICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKKyAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgZnBS
ZWdUMCwgZnBSZWdUMSksIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBv
cF9qbmxlc3M6CisgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOworICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9y
ZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZw
UmVnVDEpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5P
clVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIGRzdCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShv
cDIsIGZwUmVnVDEpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgICAgICAg
ICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCks
IGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBl
bmQubGluayh0aGlzKTsKK30KKworLy8gTW9kICglKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KKwordm9pZCBKSVQ6OmVtaXRfb3BfbW9kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisjaWYgQ1BVKFg4NikKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAg
IC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0
aW9ucy4KKyAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIEFTU0VS
VChyZWdUMSA9PSBYODZSZWdpc3RlcnM6OmVkeCk7CisgICAgQVNTRVJUKHJlZ1QyID09IFg4NlJl
Z2lzdGVyczo6ZWN4KTsKKyAgICBBU1NFUlQocmVnVDMgPT0gWDg2UmVnaXN0ZXJzOjplYngpOwor
CisgICAgZW1pdExvYWQyKG9wMSwgcmVnVDAsIHJlZ1QzLCBvcDIsIHJlZ1QxLCByZWdUMik7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmTm90SW50MzIocmVnVDApKTsKKworICAgIG1vdmUocmVnVDMsIHJlZ1QwKTsKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIpKTsKKyAgICBKdW1wIGRlbm9t
aW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKC0x
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
LTIxNDc0ODM2NDctMSkpKTsKKyAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKKyAg
ICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKKyAgICB4ODZEaXYzMihyZWdUMik7CisgICAg
SnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVn
VDMsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFplcm8s
IHJlZ1QxKSk7CisgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKKyAgICBlbWl0U3Rv
cmVJbnQzMihkc3QsIHJlZ1QxLCAob3AxID09IGRzdCB8fCBvcDIgPT0gZHN0KSk7CisjZWxzZQor
ICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9u
LCBzbG93X3BhdGhfbW9kKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworI2VuZGlmCit9CisK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyNpZiBDUFUoWDg2
KQorICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBKSVRTbG93UGF0aENhbGwgc2xv
d1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7CisgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOworICAgIC8vIFdlIHdvdWxkIGhhdmUg
cmVhbGx5IHVzZWZ1bCBhc3NlcnRpb25zIGhlcmUgaWYgaXQgd2Fzbid0IGZvciB0aGUgY29tcGls
ZXIncworICAgIC8vIGluc2lzdGVuY2Ugb24gYXR0cmlidXRlIG5vcmV0dXJuLgorICAgIC8vIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisjZW5kaWYKK30KKworLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgaW50IG9wdGlvbnMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOworICAgIGludCBnZXR0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
OworCisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFBheWxv
YWQoZ2V0dGVyLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJC
eUlkLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgb3B0
aW9ucywgcmVnVDMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wdGlvbnMgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOworICAgIGludCBzZXR0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kOworCisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKKyAgICBlbWl0
TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRTZXR0ZXJCeUlkLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmlt
cGwoKSwgb3B0aW9ucywgcmVnVDMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVy
X3NldHRlcl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlu
dCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVy
dHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBhdHRyaWJ1dGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGludCBnZXR0ZXIgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGludCBzZXR0ZXIgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNV0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1Qx
KTsKKyAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7CisgICAgZW1pdExvYWRQYXls
b2FkKHNldHRlciwgcmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
U2V0dGVyLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwg
YXR0cmlidXRlLCByZWdUMywgcmVnVDQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0
dGVyX2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBi
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludDMyX3QgYXR0cmlidXRl
cyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IGdldHRlciA9IGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZFBheWxvYWQoYmFz
ZSwgcmVnVDIpOworICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDApOworICAgIGVt
aXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5VmFsLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmli
dXRlcywgcmVnVDMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBiYXNlID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IGdldHRlciA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwor
ICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9h
ZChnZXR0ZXIsIHJlZ1QzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
VmFsLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBl
bWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlJZEpTUmVzdWx0LCBkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCkpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2Ug
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1Qx
LCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVu
dEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZv
ID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOworCisgICAgZW1pdExvYWQyKGJhc2UsIHJl
Z1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CisKKyAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOworICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXgg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZykpOworICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKKyAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCBwcm9maWxlKTsKKyAgICBhbmQzMihU
cnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMSk7CisKKyAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgSklUQXJyYXlNb2Rl
IG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7Cisg
ICAgY2FzZSBKSVRJbnQzMjoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyR2V0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBK
SVREb3VibGU6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVENvbnRp
Z3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwor
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisKKyAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsK
KworICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIEp1bXAgcmVzdWx0T0sgPSBi
cmFuY2hJZk5vdEVtcHR5KHJlZ1QxKTsKKyAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVEdldEJ5
VmFsUmVzdWx0SXNOb3RFbXB0eSk7CisgICAgICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7CisgICAg
fQorCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7CisKKyAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CisKKyAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbElu
Zm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBuZXh0SG90UGF0aCkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3Vv
dXNMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBl
IGV4cGVjdGVkU2hhcGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKGV4cGVj
dGVkU2hhcGUpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNM
ZW5ndGgoKSkpKTsKKyAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdo
dCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCByZWdUMSk7IC8vIHRh
ZworICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKKworICAgIHJldHVy
biBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0RG91YmxlTG9hZChJbnN0
cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKERvdWJsZVNoYXBlKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7CisgICAgbG9hZERvdWJsZShCYXNlSW5kZXgocmVn
VDMsIHJlZ1QyLCBUaW1lc0VpZ2h0KSwgZnBSZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hEb3VibGUoRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMCkp
OworCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRB
cnJheVN0b3JhZ2VMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoLUFycmF5
U3RvcmFnZVNoYXBlKSwgcmVnVDEsIHJlZ1QzKTsKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoMzIoQWJvdmUsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBl
IC0gQXJyYXlTdG9yYWdlU2hhcGUpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6
dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVn
VDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsgLy8gdGFnCisgICAgbG9hZDMy
KEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9y
T2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCBy
ZWdUMCk7IC8vIHBheWxvYWQKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVn
VDEpKTsKKworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVEdldEJ5SWRHZW5lcmF0b3Ig
SklUOjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgSnVtcCYgZmFzdERvbmVDYXNlLCBKdW1wJiBzbG93RG9uZUNhc2UsIEp1bXBMaXN0JiBzbG93
Q2FzZXMpCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisKKyAgICAvLyBiYXNlOiB0YWcocmVnVDEpLCBwYXlsb2FkKHJlZ1QwKQorICAgIC8vIHByb3Bl
cnR5OiB0YWcocmVnVDMpLCBwYXlsb2FkKHJlZ1QyKQorICAgIC8vIHNjcmF0Y2g6IHJlZ1Q0CisK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMykpOworICAgIGVtaXRC
eVZhbElkZW50aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1QyLCByZWdUNCwgcHJvcGVydHlOYW1l
LCBzbG93Q2FzZXMpOworCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1
cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsKKyAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisKKyAgICBmYXN0RG9uZUNhc2UgPSBqdW1w
KCk7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBnZW4uc2xvd1Bh
dGhKdW1wKCkubGluayh0aGlzKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRo
UHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGRzdCwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc2xvd0RvbmVDYXNl
ID0ganVtcCgpOworCisgICAgcmV0dXJuIGdlbjsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKyAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKKworICAgIGxpbmtTbG93Q2Fz
ZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKKyAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCisKKyAgICBKdW1wIG5vbkNlbGwg
PSBqdW1wKCk7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCisg
ICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hJZk5vdFN0cmluZyhyZWdUMCk7CisgICAgZW1pdE5h
a2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4obV92bS0+Z2V0Q1RJU3R1YihzdHJp
bmdHZXRCeVZhbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CisgICAgSnVt
cCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVDZWxs
KGRzdCwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdU
SChvcF9nZXRfYnlfdmFsKSk7CisgICAgZmFpbGVkLmxpbmsodGhpcyk7CisgICAgbm90U3RyaW5n
LmxpbmsodGhpcyk7CisgICAgbm9uQ2VsbC5saW5rKHRoaXMpOworCisgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBlbXB0eSB2YWx1ZQorCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworCisgICAgZW1p
dExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMs
IHJlZ1QyKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFs
T3B0aW1pemUsIGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSwgYnlWYWxJbmZvKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9i
eVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVz
cyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKKworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBiYXNlID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9
IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKKworICAgIGVtaXRMb2FkMihiYXNlLCByZWdU
MSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOworCisgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKKyAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0g
cGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpKTsKKyAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7CisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgcHJvZmlsZSk7CisgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDEpOworCisgICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIEpJVEFycmF5TW9kZSBt
b2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAg
IGNhc2UgSklUSW50MzI6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklU
RG91YmxlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250aWd1
b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYWRkU2xvd0Nh
c2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKworICAgIExhYmVsIGRv
bmUgPSBsYWJlbCgpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxD
b21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBub3RJbmRleCwgYmFk
VHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hh
cGUpCit7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
ICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
OworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKENvbnRpZ3VvdXNTaGFwZSkpOwor
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMyk7CisgICAgSnVtcCBvdXRPZkJvdW5kcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkp
OworCisgICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOworICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUMSwgcmVnVDApOworICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgIGNhc2Ug
SW50MzJTaGFwZToKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJl
Z1QxKSk7CisgICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRp
bWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOwor
ICAgICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0
LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKKyAgICAgICAgc3RvcmUzMihyZWdUMCwgQmFz
ZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChy
ZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSk7CisgICAgICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QyLCByZWdUMyk7CisgICAgICAg
IGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBEb3VibGVTaGFwZTogeworICAgICAgICBKdW1wIG5vdEludCA9
IGJyYW5jaElmTm90SW50MzIocmVnVDEpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShy
ZWdUMCwgZnBSZWdUMCk7CisgICAgICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgICAgIG5v
dEludC5saW5rKHRoaXMpOworICAgICAgICBtb3ZlSW50c1RvRG91YmxlKHJlZ1QwLCByZWdUMSwg
ZnBSZWdUMCwgZnBSZWdUMSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91Ymxl
KERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDApKTsKKyAgICAgICAg
cmVhZHkubGluayh0aGlzKTsKKyAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdUMCwgQmFzZUluZGV4
KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgb3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVn
VDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKworICAgIGVtaXRBcnJh
eVByb2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworCisgICAgYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDEpOworICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3Mo
cmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIGp1bXAoKS5s
aW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAg
cmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3Jh
Z2VQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKQoreworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5
UHJvZmlsZTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VT
aGFwZSkpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOworCisgICAgSnVtcCBlbXB0eSA9IGJyYW5jaDMyKEVxdWFsLCBCYXNlSW5kZXgo
cmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6RW1wdHlWYWx1ZVRhZykpOworCisgICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Cisg
ICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgc3RvcmUzMihyZWdUMCwgQmFz
ZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZz
ZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSkpOyAvLyBw
YXlsb2FkCisgICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNF
aWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy50YWcpKSk7IC8vIHRhZworICAgIEp1bXAgZW5kID0ganVtcCgpOworCisg
ICAgZW1wdHkubGluayh0aGlzKTsKKyAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShwcm9maWxlKTsKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVn
VDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0b3IpKSk7
CisgICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6
Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKworICAgIGFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QwKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7CisgICAganVtcCgpLmxp
bmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisKKyAgICBlbmQubGluayh0aGlzKTsKKworICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKworICAgIHJl
dHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKdW1wTGlzdCYgZG9uZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQoreworICAgIC8v
IGJhc2U6IHRhZyhyZWdUMSksIHBheWxvYWQocmVnVDApCisgICAgLy8gcHJvcGVydHk6IHRhZyhy
ZWdUMyksIHBheWxvYWQocmVnVDIpCisKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QzKSk7
CisgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDIsIHJlZ1QyLCBw
cm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CisKKyAgICAvLyBXcml0ZSBiYXJyaWVyIGJyZWFrcyB0
aGUgcmVnaXN0ZXJzLiBTbyBhZnRlciBpc3N1aW5nIHRoZSB3cml0ZSBiYXJyaWVyLAorICAgIC8v
IHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUs
IFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Cisg
ICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7CisKKyAgICBKSVRQdXRCeUlkR2VuZXJh
dG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNl
dCksIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCByZWdUMSwgbV9jb2RlQmxvY2stPmVj
bWFNb2RlKCksIHB1dEtpbmQpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAg
ICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKKyAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsKKworICAgIC8vIEpJ
VFB1dEJ5SWRHZW5lcmF0b3Igb25seSBwcmVzZXJ2ZSB0aGUgdmFsdWUgYW5kIHRoZSBiYXNlJ3Mg
cGF5bG9hZCwgd2UgaGF2ZSB0byByZWxvYWQgdGhlIHRhZy4KKyAgICBlbWl0TG9hZFRhZyhiYXNl
LCByZWdUMSk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1
bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGRvbmVDYXNlcy5hcHBl
bmQoanVtcCgpKTsKKworICAgIHJldHVybiBnZW47Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CisgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CisKKyAg
ICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNr
CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjaworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBub3QgYXJyYXkgY2hlY2sKKworICAgIEpJVEFycmF5
TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgSklUSW50MzI6CisgICAgY2FzZSBKSVREb3VibGU6CisgICAgICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gdmFsdWUgdHlwZSBjaGVjaworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBKdW1wIHNraXBQcm9maWxpbmcg
PSBqdW1wKCk7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBvdXQgb2YgYm91bmRzCisgICAg
ZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgc2tp
cFByb2ZpbGluZy5saW5rKHRoaXMpOworCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwor
CisgICAgYm9vbCBpc0RpcmVjdCA9IEludGVycHJldGVyOjpnZXRPcGNvZGVJRChjdXJyZW50SW5z
dHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKKworI2lmIENQVShY
ODYpCisgICAgLy8gRklYTUU6IFdlIG9ubHkgaGF2ZSA1IHRlbXAgcmVnaXN0ZXJzLCBidXQgbmVl
ZCA2IHRvIG1ha2UgdGhpcyBjYWxsLCB0aGVyZWZvcmUgd2UgbWF0ZXJpYWxpemUKKyAgICAvLyBv
dXIgb3duIGNhbGwuIFdoZW4gd2UgZmluaXNoIG1vdmluZyBKU0MgdG8gdGhlIEMgY2FsbCBzdGFj
aywgd2UnbGwgZ2V0IGFub3RoZXIgcmVnaXN0ZXIgc28KKyAgICAvLyB3ZSBjYW4gdXNlIHRoZSBu
b3JtYWwgY2FzZS4KKyAgICB1bnNpZ25lZCBwb2tlT2Zmc2V0ID0gMDsKKyAgICBwb2tlKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBwb2tlT2Zmc2V0KyspOworICAgIGVtaXRMb2FkKGJhc2Us
IHJlZ1QwLCByZWdUMSk7CisgICAgcG9rZShyZWdUMSwgcG9rZU9mZnNldCsrKTsKKyAgICBwb2tl
KHJlZ1QwLCBwb2tlT2Zmc2V0KyspOworICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMCwgcmVn
VDEpOworICAgIHBva2UocmVnVDEsIHBva2VPZmZzZXQrKyk7CisgICAgcG9rZShyZWdUMCwgcG9r
ZU9mZnNldCsrKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBwb2tl
KHJlZ1QxLCBwb2tlT2Zmc2V0KyspOworICAgIHBva2UocmVnVDAsIHBva2VPZmZzZXQrKyk7Cisg
ICAgcG9rZShUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mbyksIHBva2VPZmZzZXQrKyk7CisgICAgQ2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhpc0RpcmVjdCA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKTsKKyNl
bHNlCisgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVk
dWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KKyAgICAvLyBTd2FwcGluZyBzaG91bGRuJ3Qg
aGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KKyAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVn
VDEpOworICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOworICAgIGVtaXRMb2Fk
KHZhbHVlLCByZWdUNSwgcmVnVDQpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNE
aXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlW
YWxPcHRpbWl6ZSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgYnlWYWxJbmZvKTsKKyNlbmRpZgor
CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xv
d1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleCsrOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisKKyAg
ICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlLCByZWdUMSk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRl
SW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXQp
OworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4u
c2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgaW50IHJlc3VsdFZSZWcgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisK
KyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCks
IGlkZW50LT5pbXBsKCkpOworCisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJl
Z2luLCBjYWxsKTsKK30KKworCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisKKyAg
ICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChiYXNlLCByZWdUMSk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKKyAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRl
SW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAorICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9u
bHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXREaXJl
Y3QpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CisKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgaW50IHJlc3VsdFZS
ZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKSk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVs
KCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9u
R2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmltcGwoKSk7CisKKyAgICBnZW4ucmVwb3J0U2xv
d1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworfQorCisKK3ZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOworCisgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOworCisgICAgaWYgKCppZGVudCA9PSBt
X3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAg
ICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleFdpdGhDZWxsKHJlZ1Qw
LCByZWdUMiwgbV9ieXRlY29kZU9mZnNldCk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENh
bGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5
bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpH
ZXQpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CisKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
eworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKKworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBpZGVudC0+aW1wbCgpKTsKKworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHRoaXNWUmVnID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpOwor
CisgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZCh0aGlzVlJl
ZywgcmVnVDQsIHJlZ1QzKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwg
cmVnVDEpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh0aGlzVlJlZywgcmVnVDQp
OworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgoY3VycmVu
dEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVl
UmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBBY2Nl
c3NUeXBlOjpHZXRXaXRoVGhpcyk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwor
ICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkc1dpdGhU
aGlzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVt
aXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKKworICAgIGludCByZXN1bHRWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpOworCisgICAgSklUR2V0
QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlk
V2l0aFRoaXNJbmRleCsrXTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwor
CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5
SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgaWRlbnQtPmltcGwo
KSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhl
IFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwK
KyAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRv
IHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKKyAgICAvLyBz
dWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRp
c3RhbmNlIGZyb20gdGhpcy4KKworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworICAgIGludCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxh
Z3MgJiBQdXRCeUlkSXNEaXJlY3Q7CisKKyAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1Qw
LCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChiYXNlLCByZWdUMSk7CisKKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKKyAgICAgICAg
bV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgo
Y3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVy
cygpLAorICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMywgcmVnVDIpLAorICAgICAgICByZWdUMSwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCks
IGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCk7CisKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKworICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOworCisgICAgbV9w
dXRCeUlkcy5hcHBlbmQoZ2VuKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9p
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBp
bnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7CisK
KyAgICAvLyBKSVRQdXRCeUlkR2VuZXJhdG9yIG9ubHkgcHJlc2VydmUgdGhlIHZhbHVlIGFuZCB0
aGUgYmFzZSdzIHBheWxvYWQsIHdlIGhhdmUgdG8gcmVsb2FkIHRoZSB0YWcuCisgICAgZW1pdExv
YWRUYWcoYmFzZSwgcmVnVDEpOworCisgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9w
dXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oCisgICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBpZGVudC0+
aW1wbCgpKTsKKworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisKKyAgICBlbWl0TG9hZChiYXNlLCBy
ZWdUMSwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CisKKyAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1
Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAg
IGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCkpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1faW5CeUlkcy5hcHBlbmQo
Z2VuKTsKKworICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKworICAgIEpJ
VEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CisKKyAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5m
bygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBpZGVudC0+aW1wbCgpKTsKKworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKK3sK
KyAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICByZXR1cm47CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgp
KSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0UmVz
b2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzLCB1bnNpZ25lZCBkZXB0aCkKK3sKKyAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNW
YXJJbmplY3Rpb25DaGVja3MpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpLCByZWdUMSk7CisgICAgZW1pdExvYWRQYXlsb2FkKHNjb3BlLCByZWdUMCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBzY29wZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBzdGF0
aWNfY2FzdDxSZXNvbHZlVHlwZT4oY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Cisg
ICAgdW5zaWduZWQgZGVwdGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOworICAg
IGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAg
IHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAg
ICAgICAgY2FzZSBHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKKyAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAg
IGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2FzZSBHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgSlNTY29w
ZSogY29uc3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVz
b2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0
YW50U2NvcGUpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5q
ZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKGNvbnN0YW50U2NvcGUpLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0U3RvcmUoZHN0LCBy
ZWdUMSwgcmVnVDApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgorICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2NvcGUsIG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTW9kdWxlVmFyOgorICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5qc0NlbGwuZ2V0KCkpLCByZWdUMCk7CisgICAgICAg
ICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRHluYW1pYzoKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CisgICAgICAg
IGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfTsKKyAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7
CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsK
KyAgICAgICAgbG9hZDMyKCZjdXJyZW50SW5zdHJ1Y3Rpb25bNF0sIHJlZ1QwKTsKKworICAgICAg
ICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVy
dHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2Jh
bFByb3BlcnR5LmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2Rl
KEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAgIHNraXBUb0VuZC5h
cHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwor
CisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMp
OworCisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIHNraXBUb0VuZC5saW5r
KHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBl
bWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBK
SVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCkKK3sKKyAgICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBs
b2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIo
Tm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QyKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBvaW50ZXIoSlNWYWx1ZSogb3Bl
cmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpCit7CisgICAgdWludHB0cl90IHJhd0Fk
ZHJlc3MgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihvcGVyYW5kKTsKKyAgICBsb2FkMzIoYml0
d2lzZV9jYXN0PHZvaWQqPihyYXdBZGRyZXNzICsgVGFnT2Zmc2V0KSwgdGFnKTsKKyAgICBsb2Fk
MzIoYml0d2lzZV9jYXN0PHZvaWQqPihyYXdBZGRyZXNzICsgUGF5bG9hZE9mZnNldCksIHBheWxv
YWQpOworfQordm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUq
KiBvcGVyYW5kLCBHUFJSZWcgdGFnLCBHUFJSZWcgcGF5bG9hZCkKK3sKKyAgICBsb2FkUHRyKG9w
ZXJhbmQsIHBheWxvYWQpOworICAgIGxvYWQzMihBZGRyZXNzKHBheWxvYWQsIFRhZ09mZnNldCks
IHRhZyk7CisgICAgbG9hZDMyKEFkZHJlc3MocGF5bG9hZCwgUGF5bG9hZE9mZnNldCksIHBheWxv
YWQpOworfQorCit2b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRy
X3Qgb3BlcmFuZCkKK3sKKyAgICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCksIHJlZ1QxKTsK
KyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQp
LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNjb3BlID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IEdldFB1dEluZm8oY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkucmVzb2x2ZVR5cGUoKTsKKyAgICBTdHJ1Y3R1
cmUqKiBzdHJ1Y3R1cmVTbG90ID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUuc3RydWN0dXJlLnNs
b3QoKTsKKyAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3QqPigmY3VycmVudEluc3RydWN0aW9uWzZdLnUucG9pbnRlcik7CisKKyAgICBhdXRvIGVt
aXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKSB7CisgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBHbG9iYWxQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNj
b3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0
aW9uLgorICAgICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMjsKKyAgICAgICAgICAgIEdQUlJl
ZyByZXN1bHRUYWcgPSByZWdUMTsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkID0g
cmVnVDA7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0gcmVnVDM7CisKKyAgICAgICAgICAg
IG1vdmUocmVnVDAsIGJhc2UpOworICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZz
ZXQpOworICAgICAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgICAg
ICBKdW1wIGlzT3V0T2ZMaW5lID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQs
IFRydXN0ZWRJbW0zMihmaXJzdE91dE9mTGluZU9mZnNldCkpOworICAgICAgICAgICAgICAgIGFi
b3J0V2l0aFJlYXNvbihKSVRPZmZzZXRJc05vdE91dE9mTGluZSk7CisgICAgICAgICAgICAgICAg
aXNPdXRPZkxpbmUubGluayh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBiYXNlKTsKKyAg
ICAgICAgICAgIG5lZzMyKG9mZnNldCk7CisgICAgICAgICAgICBsb2FkMzIoQmFzZUluZGV4KGJh
c2UsIG9mZnNldCwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnBheWxvYWQpICsgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpT
VmFsdWUpKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgICAgICBsb2FkMzIoQmFzZUluZGV4KGJh
c2UsIG9mZnNldCwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRz
LnRhZykgKyAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpLCByZXN1bHRUYWcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrczoKKyAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgorICAgICAgICBjYXNlIEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAg
ICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKKyAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHJlZ1QxLCByZWdUMCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxM
ZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCisgICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoSWZFbXB0eShyZWdUMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2xv
c3VyZVZhcjoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoK
KyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNr
cyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIoc2NvcGUsICpv
cGVyYW5kU2xvdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEeW5hbWljOgor
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIE1vZHVsZVZhcjoKKyAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CisgICAg
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgSnVtcExpc3Qgc2tpcFRv
RW5kOworICAgICAgICBsb2FkMzIoJmN1cnJlbnRJbnN0cnVjdGlvbls0XSwgcmVnVDApOworICAg
ICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8v
IExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorCisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0
eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAgIHNraXBUb0Vu
ZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRo
aXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25z
ID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisKKyAgICAgICAg
c2tpcFRvRW5kLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1
bHQ6CisgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Nj
b3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAg
IGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3Ry
dWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBv
cGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3sKKyAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKKyAgICB1aW50
cHRyX3QgcmF3QWRkcmVzcyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG9wZXJhbmQpOworICAg
IHN0b3JlMzIocmVnVDEsIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFRhZ09mZnNl
dCkpOworICAgIHN0b3JlMzIocmVnVDAsIGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyAr
IFBheWxvYWRPZmZzZXQpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KEpTVmFsdWUqKiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqKiBpbmRpcmVjdFdhdGNocG9pbnRTZXQpCit7CisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1Qx
LCByZWdUMCk7CisgICAgbG9hZFB0cihpbmRpcmVjdFdhdGNocG9pbnRTZXQsIHJlZ1QyKTsKKyAg
ICBlbWl0Tm90aWZ5V3JpdGUocmVnVDIpOworICAgIGxvYWRQdHIoYWRkcmVzc09mT3BlcmFuZCwg
cmVnVDIpOworICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIFRhZ09mZnNldCkpOwor
ICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDIsIFBheWxvYWRPZmZzZXQpKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQs
IGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQoreworICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUMywgcmVnVDIpOworICAgIGVtaXRMb2FkKHNjb3BlLCByZWdUMSwgcmVnVDApOworICAgIGVt
aXROb3RpZnlXcml0ZShzZXQpOworICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDAsIEpT
TGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVv
ZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJl
Z1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQg
KiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCkpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2
YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgR2V0UHV0SW5mbyBn
ZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsK
KyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsK
KyAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUu
c3RydWN0dXJlLnNsb3QoKTsKKyAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3QqPigmY3VycmVudEluc3RydWN0aW9uWzZdLnUucG9pbnRlcik7CisK
KyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
KyAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwor
ICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNs
b3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCisgICAgICAgICAg
ICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKKworICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAg
ICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAgICBuZWdQdHIo
cmVnVDEpOworICAgICAgICAgICAgc3RvcmUzMihyZWdUMywgQmFzZUluZGV4KHJlZ1QwLCByZWdU
MSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy50YWcpKSk7CisgICAgICAgICAgICBzdG9yZTMyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJl
Z1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNC
aXRzLnBheWxvYWQpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgorICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CisgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKKyAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFs
dWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaWYg
KCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgICAgIC8vIFdl
IG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92
ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgorICAgICAgICAgICAgICAg
IGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQorICAgICAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHJlZ1QxLCByZWdUMCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFu
ZFNsb3QpLCByZWdUMSwgcmVnVDApOworICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbmRpcmVj
dExvYWRGb3JPcGVyYW5kKQorICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUlu
ZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsIGJpdHdp
c2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNV0pKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lz
ZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9u
WzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgorICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAg
ZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5k
U2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTW9kdWxlVmFyOgorICAgICAgICBjYXNlIER5
bmFtaWM6CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOworICAgICAgICBsb2FkMzIoJmN1cnJlbnRJbnN0cnVjdGlvbls0XSwgcmVn
VDApOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorCisgICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisK
KyAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29w
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBH
ZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQpOworICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNv
bHZlVHlwZSgpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKKyAgICAgICAg
SklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNs
b3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7
CisgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgfSBlbHNlCisgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgY3VycmVudEluc3RydWN0aW9uKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKwor
ICAgIGVtaXRMb2FkUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVnVDEpOworICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4
ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDAp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0U3RvcmUoZHN0LCByZWdU
MSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGFyZ3VtZW50cyA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOworCisgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBT
aG91bGRGaWx0ZXJWYWx1ZSk7CisKKyAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdU
MCk7CisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdU
MSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRl
eCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSk7CisgICAgc3Rv
cmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0
KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNl
dCkpOworfQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBvd25lciwgdW5z
aWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKK3sKKyAgICBKdW1wIHZhbHVlTm90
Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2VBbmRWYWx1ZSkgeworICAgICAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDAp
OworICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgIH0K
KworICAgIGVtaXRMb2FkKG93bmVyLCByZWdUMCwgcmVnVDEpOworICAgIEp1bXAgb3duZXJOb3RD
ZWxsOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUpCisgICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2Vs
bChyZWdUMCk7CisKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVy
QnJhbmNoKCp2bSgpLCByZWdUMSwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
V3JpdGVCYXJyaWVyU2xvd1BhdGgsIHJlZ1QxKTsKKyAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuLmxpbmsodGhpcyk7CisKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQorICAgICAgICBvd25lck5vdENlbGwubGlu
ayh0aGlzKTsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7
Cit9CisKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVk
IHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisgICAgSnVtcCB2YWx1ZU5vdENlbGw7
CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIHsKKyAgICAgICAgZW1pdExvYWRU
YWcodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QwKTsKKyAgICB9CisKKyAgICBlbWl0V3JpdGVCYXJyaWVyKG93bmVyKTsKKworICAgIGlm
IChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQorICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0
aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVn
VDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworCisgICAgZW1pdExvYWQoZHN0LCByZWdUMSwgcmVnVDApOworCisgICAgY2hlY2tT
dGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Cisg
ICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICByZXQoKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2Uob3BfY2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX3RhaWxfY2FsbCwgY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsX3ZhcmFyZ3Ms
IGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9
CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQoreworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jb25zdHJ1Y3RfdmFyYXJncywgY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlKG9wX2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jYWxsKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wQ2FsbChvcF9jYWxs
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX3RhaWxfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGNvbXBpbGVPcENhbGwob3BfdGFpbF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NhbGxfZXZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVPcENhbGwob3Bf
Y2FsbF9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgpOworfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfdmFyYXJncywgY3VycmVudElu
c3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF90YWlsX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGNvbXBpbGVPcENhbGwob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9j
YWxsX2ZvcndhcmRfYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgY29tcGlsZU9wQ2FsbChvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfY29uc3RydWN0X3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBjb21waWxlT3BDYWxsKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2Nv
bnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVP
cENhbGwob3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoT3Bjb2RlSUQg
b3Bjb2RlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5mbyogaW5mbykKK3sK
KyAgICBpbnQgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGludCBh
cmd1bWVudHMgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJlZVJl
Z2lzdGVyID0gaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOworICAgIGludCBmaXJzdFZhckFyZ09m
ZnNldCA9IGluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKGFyZ3VtZW50
cywgcmVnVDEsIHJlZ1QwKTsKKyAgICBaX0pJVE9wZXJhdGlvbl9FSlpaIHNpemVPcGVyYXRpb247
CisgICAgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAg
ICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRz
OworICAgIGVsc2UKKyAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZv
clZhcmFyZ3M7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7CisgICAgZW1p
dFNldFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVn
VDEpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykg
KyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA2ICogc2l6
ZW9mKHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBlbWl0TG9h
ZChhcmd1bWVudHMsIHJlZ1QyLCByZWdUNCk7CisgICAgRl9KSVRPcGVyYXRpb25fRUZKWlogc2V0
dXBPcGVyYXRpb247CisgICAgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpCisgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJn
dW1lbnRzRnJhbWU7CisgICAgZWxzZQorICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlv
blNldHVwVmFyYXJnc0ZyYW1lOworICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJl
Z1QxLCBKU1ZhbHVlUmVncyhyZWdUMiwgcmVnVDQpLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDAp
OworICAgIG1vdmUocmV0dXJuVmFsdWVHUFIsIHJlZ1QxKTsKKworICAgIC8vIFByb2ZpbGUgdGhl
IGFyZ3VtZW50IGNvdW50LgorICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBh
eWxvYWRPZmZzZXQpLCByZWdUMik7CisgICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heE51bUFy
Z3VtZW50cygpLCByZWdUMCk7CisgICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUs
IHJlZ1QwLCByZWdUMik7CisgICAgc3RvcmUzMihyZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4TnVt
QXJndW1lbnRzKCkpOworICAgIG5vdEJpZ2dlc3QubGluayh0aGlzKTsKKworICAgIC8vIEluaXRp
YWxpemUgJ3RoaXMnLgorICAgIGVtaXRMb2FkKHRoaXNWYWx1ZSwgcmVnVDIsIHJlZ1QwKTsKKyAg
ICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBQYXlsb2FkT2Zmc2V0ICsgKENhbGxGcmFt
ZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpKSkpOworICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDEsIFRhZ09mZnNldCArIChD
YWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2Yo
UmVnaXN0ZXIpKSkpKTsKKworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKK30KKwordm9pZCBKSVQ6
OmNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICBzdG9yZVB0cihjYWxs
RnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKSk7CisKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWws
IHJlZ1QxKTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKKworICAg
IHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChp
bnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIENhbGxMaW5rSW5mbyog
aW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKKyAgICBpbmZvLT5zZXRVcENh
bGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCByZWdU
MCk7CisKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
OworICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBhZGRQ
dHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVv
ZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisKKyAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdER1
bWJWaXJ0dWFsQ2FsbCgqdm0oKSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50
ZXJBbGlnbm1lbnQoKTsKKworICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisKKyAg
ICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjpjb21waWxl
T3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2ln
bmVkIGNhbGxMaW5rSW5mb0luZGV4KQoreworICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisKKyAgICAvKiBDYWxsZXIgYWx3YXlzOgorICAgICAgICAtIFVwZGF0ZXMg
Y2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KKyAgICAgICAgLSBJbml0aWFs
aXplcyBBcmd1bWVudENvdW50OyBDYWxsZXJGcmFtZTsgQ2FsbGVlLgorCisgICAgICAgRm9yIGEg
SlMgY2FsbDoKKyAgICAgICAgLSBDYWxsZWUgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9j
ay4KKyAgICAgICAgLSBDYWxsZWUgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYmVmb3JlIHJl
dHVybi4KKworICAgICAgIEZvciBhIG5vbi1KUyBjYWxsOgorICAgICAgICAtIENhbGxlciBpbml0
aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgorICAgICAgICAtIENhbGxlciByZXN0b3JlcyBj
YWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCisgICAgKi8KKyAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBudWxscHRyOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCisgICAg
ICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAgaWYgKG9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NG
cmFtZShvcGNvZGVJRCwgaW5zdHJ1Y3Rpb24sIGluZm8pOworICAgIGVsc2UgeworICAgICAgICBp
bnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICAgICAgaWYgKG9w
Y29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgICAg
ICBlbWl0TG9hZChyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNs
dWRpbmdUaGlzKDApLCByZWdUMCwgcmVnVDEpOworICAgICAgICAgICAgSnVtcCBkb25lID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICAgICAgc3RvcmVQ
dHIocmVnVDEsIGluc3RydWN0aW9uW09QQ09ERV9MRU5HVEgob3BfY2FsbCkgLSAyXS51LmFycmF5
UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKKyAgICAgICAgICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
cmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgICAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmdDb3VudCksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOworICAgIH0gLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCisKKyAgICB1aW50MzJfdCBs
b2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CisgICAgc3Rv
cmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFy
Z3VtZW50Q291bnQpKTsKKyAgICBlbWl0TG9hZChjYWxsZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJl
Z1QxLCByZWdUMCBob2xkcyBjYWxsZWUuCisKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxp
bnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSkpOworICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lz
dGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgIGlm
IChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgY29tcGlsZUNhbGxFdmFsKGlu
c3RydWN0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCisgICAg
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMSkpOworCisgICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtlZEZ1bmN0
aW9uQ2hlY2s7CisgICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVh
bCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIobnVs
bHB0cikpOworCisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2UpOworCisgICAgQVNTRVJUKG1fY2Fs
bENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExpbmtJbmZvSW5kZXgpOworICAgIGluZm8t
PnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBlRm9yKG9wY29kZUlEKSwgQ29kZU9yaWdp
bihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDApOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mby5h
cHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9u
Q2hlY2s7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxs
TGlua0luZm8gPSBpbmZvOworCisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykg
eworICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgIG1fY2FsbENvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkVGFp
bENhbGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2FsbENvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwor
CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxv
Y2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKworICAgIHNhbXBs
ZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rp
b24pOworfQorCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlEIG9wY29k
ZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQoreworICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
aW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyksIHJlZ1QyKTsKKworICAg
IGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MpCisgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKworICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0g
ZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CisKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9j
YWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7CisgICAgICAgIGFib3J0
V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKworICAg
IHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5z
dHJ1Y3Rpb24pOworfQorCisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQ2NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VDY0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMGY1YThhY2Q1ZDcyMDhhOTkwYzM5NmZjZDE1ZDFmOTc4NDUw
ZWM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQ2NC5j
cHAKQEAgLTAsMCArMSwyODkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFBhdHJp
Y2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxOCBZ
dXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
SVQuaCIKKworI2lmIEVOQUJMRShKSVQpCisKKyNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIK
KyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgorI2lu
Y2x1ZGUgIkdDQXdhcmVKSVRTdHViUm91dGluZS5oIgorI2luY2x1ZGUgIkludGVycHJldGVySW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCisj
aW5jbHVkZSAiSlNDYXN0LmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpT
TGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1l
LmgiCisjaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQu
aCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgIlRodW5rR2VuZXJh
dG9ycy5oIgorI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIlR5cGVQcm9maWxl
ckxvZy5oIgorI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgorI2luY2x1ZGUgPHd0Zi9TY29w
ZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIEpTQyB7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorCit2b2lkIEpJVDo6ZW1pdF9vcF9tb3Yo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdU
MCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCisKK3ZvaWQgSklUOjpl
bWl0X29wX2VuZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIFJFTEVB
U0VfQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJldHVy
blZhbHVlR1BSKTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdEZ1bmN0
aW9uRXBpbG9ndWUoKTsKKyAgICByZXQoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfam1wKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBhZGRKdW1wKGp1bXAoKSwgdGFy
Z2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOworICAg
IHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1
YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChh
bGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOworCisg
ICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIGFsbG9jYXRv
clJlZyA9IHJlZ1QxOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOworCisgICAg
aWYgKCFhbGxvY2F0b3IpCisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgZWxzZSB7
CisgICAgICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBU
cnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1
bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBU
cnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2Vz
KTsKKyAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0
dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
KyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUt
PnN0cnVjdHVyZSgpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBzdHJ1
Y3R1cmUpOworICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0
PE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2UqPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGludCBk
c3QgPSBieXRlY29kZS5kc3QoKTsKKyAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5jb25z
dHJ1Y3RvcigpOworICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFzSW5zdGFu
Y2VWYWx1ZSgpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVl
LCByZWdUMCk7CisKKyAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wu
aGFzSW5zdGFuY2Ugd291bGQgZG8uCisgICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0g
YnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKKworICAg
IC8vIENoZWNrIHRoYXQgY29uc3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2Un
IGkuZS4gdGhlIG9iamVjdCBpcyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9u
LgorICAgIHRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdU
MCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhp
cyk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVnVDApOworCisgICAgZG9u
ZS5saW5rKHRoaXMpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGF1dG8mIGJ5dGVjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BJbnN0YW5jZW9m
Kj4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7Cisg
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUoKTsKKyAgICBpbnQgcHJvdG8gPSBieXRlY29k
ZS5wcm90b3R5cGUoKTsKKworICAgIC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90
bywgYW5kIHZhbHVlIHJlc3BlY3RpdmVseSkgaW50byByZWdpc3RlcnMuCisgICAgLy8gV2UgdXNl
IHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3Qs
IGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
dG8sIHJlZ1QxKTsKKworICAgIC8vIENoZWNrIHRoYXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFs
IG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVja2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5
bWJvbC5oYXNJbnN0YW5jZS4KKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDIs
IHZhbHVlKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEsIHByb3RvKTsK
KworICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywg
Q29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zm
c2V0KSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAor
ICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQorICAgICAg
ICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAorICAg
IGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChn
ZW4pOworCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisKKyAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3Rh
bmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5j
ZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMiwgcmVnVDEpOwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKEluc3RydWN0aW9uKikKK3sKKyAgICAv
LyBUaGlzIGFsd2F5cyBnb2VzIHRvIHNsb3cgcGF0aCBzaW5jZSB3ZSBleHBlY3QgaXQgdG8gYmUg
cmFyZS4KKyAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9p
c19lbXB0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7CisgICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOworCisgICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAg
SnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDApOworCisgICAgY29tcGFyZTY0KEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKFZhbHVlVW5kZWZpbmVkKSwgcmVnVDApOworICAgIEp1bXAg
ZG9uZSA9IGp1bXAoKTsKKworICAgIGlzQ2VsbC5saW5rKHRoaXMpOworICAgIEp1bXAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisgICAgSnVt
cCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgaXNNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJl
Z1QwLCByZWdUMSwgcmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOworICAgIGNvbXBhcmVQdHIoRXF1
YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOworCisgICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworICAgIGRvbmUubGluayh0aGlzKTsKKyAgICBib3hCb29sZWFuKHJlZ1Qw
LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgeG9yNjQo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVnVDApOwor
ICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KH4xKSksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1Qw
IH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfaXNfbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICB0ZXN0NjQoTm9uWmVybywgcmVnVDAsIHRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgaW50IHR5cGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIEp1bXAgaXNOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCBy
ZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgZG9uZS5saW5rKHRo
aXMpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfaXNfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMCk7CisKKyAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSks
IHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwor
ICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAg
IG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICBkb25lLmxpbmso
dGhpcyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBBU1NF
UlQoY2FsbEZyYW1lUmVnaXN0ZXIgIT0gcmVnVDEpOworICAgIEFTU0VSVChyZWdUMSAhPSByZXR1
cm5WYWx1ZUdQUik7CisgICAgQVNTRVJUKHJldHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lz
dGVyKTsKKworICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IGluICVlYXguCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXR1cm5WYWx1
ZUdQUik7CisKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworICAgIGVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgIHJldCgp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisKKyAgICBKdW1wIGlz
SW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9i
amVjdChyZWdUMCkpOworICAgIGlzSW1tLmxpbmsodGhpcyk7CisKKyAgICBpZiAoZHN0ICE9IHNy
YykKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCit9CisKK3ZvaWQgSklU
OjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25TZXRGdW5jdGlvbk5hbWUsIHJlZ1QwLCByZWdUMSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X25vdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDApOworCisg
ICAgLy8gSW52ZXJ0IGFnYWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFn
Z2VkIGFzIGEgYm9vbGVhbiwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCisgICAgLy8gY2xlYXIgb3Ro
ZXIgdGhhbiB0aGUgbG93IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRy
dWUgaW5wdXRzIHJlc3BlY3RpdmVseSkuCisgICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1Zh
bHVlKHRydWUpLCB3aGljaCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBs
b3cgYml0LgorICAgIHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1
ZUZhbHNlKSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8s
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgIHhv
cjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVnVDAp
OworCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKworICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOworICAgIEdQUlJl
ZyByZXN1bHQgPSByZWdUMTsKKyAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworICAgIGJvb2wg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgdmFsdWUpOwor
ICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oKnZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwg
cmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7CisKKyAgICBhZGRKdW1w
KGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHQpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9qZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlu
dCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgIEp1
bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdU
MCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRy
ZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJn
ZXQpOworICAgIEp1bXAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7
CisKKyAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBu
dWxsCisgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICBhbmQ2NChUcnVzdGVkSW1tMzIo
flRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsK
KworICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgIG1hc3F1
ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Cit9Owordm9pZCBKSVQ6OmVt
aXRfb3Bfam5lcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQg
dGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7CisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisKKyAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAt
IGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCisgICAg
YWRkSnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRh
cmdldCk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEp
OworICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCBy
ZWdUMCk7CisgICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0
cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7CisgICAgSnVt
cCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1l
ZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgaXNJbW1lZGlhdGUubGluayh0aGlz
KTsKKyAgICBhbmQ2NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKKyAg
ICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6
OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsKKworICAgIHdhc05vdEltbWVkaWF0ZS5saW5r
KHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIFNwZWNpYWw6OlBvaW50ZXIgcHRyID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUuc3BlY2lhbFBvaW50ZXI7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCBy
ZWdUMCk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihhY3R1YWxQb2ludGVyRm9yKG1fY29kZUJsb2NrLCBwdHIpKSk7
CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMSksICZjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kKTsKKyAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICBlcXVhbC5saW5rKHRo
aXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCBy
ZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OworICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9qZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1bnNp
Z25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1Qw
LCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMSk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGFkZEp1bXAoYnJhbmNo
MzIoRXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2p0cnVlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWduZWQg
dGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIEdQUlJlZyB2
YWx1ZSA9IHJlZ1QwOworICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMTsKKyAgICBHUFJSZWcgc2Ny
YXRjaCA9IHJlZ1QyOworICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0gdHJ1ZTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIHZhbHVlKTsKKyAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCp2bSgp
LCBKU1ZhbHVlUmVncyh2YWx1ZSksIHJlc3VsdCwgc2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpOworICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlc3VsdCksIHRhcmdl
dCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCBy
ZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIp
OworICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKworICAgIGVtaXRQdXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2puZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMSk7CisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOworICAgIGFkZEp1bXAo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
QVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKKyAgICBjb3B5Q2FsbGVlU2F2ZXNUb0Vu
dHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1Qw
KTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVn
VDApOworICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOworfQorCit2b2lkIEpJVDo6
Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlIHR5cGUpCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOworICAgIGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7
CisKKyAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUgY2VsbHMgKHRvIGNvdmVyIHN0cmluZ3Mp
LgorICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICBvcjY0KHJlZ1QxLCByZWdUMik7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7CisKKyAgICAvLyBKdW1wIHNsb3cgaWYg
ZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0J3MgYW4gaW50ZWdlciwgd2hpY2gg
aXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgIC8vIGlmIGl0J3MgYSBkb3VibGUuCisgICAgSnVt
cCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk51bWJlcihyZWdUMCkpOworICAgIGxlZnRPSy5saW5rKHRoaXMpOworICAgIEp1bXAgcmlnaHRP
SyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVy
KHJlZ1QxKSk7CisgICAgcmlnaHRPSy5saW5rKHRoaXMpOworCisgICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAgICAgICAgY29tcGFyZTY0KEVxdWFsLCBy
ZWdUMSwgcmVnVDAsIHJlZ1QwKTsKKyAgICBlbHNlCisgICAgICAgIGNvbXBhcmU2NChOb3RFcXVh
bCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJl
Z3MgeyByZWdUMCB9KTsKKworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBjb21waWxlT3BTdHJpY3RFcShjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9uc3RyaWN0
ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBjb21waWxlT3BTdHJp
Y3RFcShjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVx
KTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVtcChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKK3sKKyAgICBpbnQg
dGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYzIgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMo
c3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKKworICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFy
ZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCisgICAgbW92ZShyZWdUMCwgcmVnVDIpOworICAg
IG9yNjQocmVnVDEsIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIp
KTsKKworICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3Qg
aWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0CisgICAgLy8g
aWYgaXQncyBhIGRvdWJsZS4KKyAgICBKdW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDAp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7CisgICAgbGVmdE9LLmxp
bmsodGhpcyk7CisgICAgSnVtcCByaWdodE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsKKyAgICByaWdodE9LLmxpbmsodGhp
cyk7CisKKyAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQor
ICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMSwgcmVnVDApLCB0YXJnZXQpOwor
ICAgIGVsc2UKKyAgICAgICAgYWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1Qw
KSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBjb21waWxlT3BTdHJpY3RFcUp1bXAoY3VycmVudEluc3RydWN0aW9uLCBDb21w
aWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9qc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworCisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJu
VmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3Rl
cShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICB1
bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMCwgcmVnVDEpOworICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3RWUmVnID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisK
KyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOworCisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCisgICAgICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X3RvX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBz
cmNWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1Qw
KSk7CisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0VlJlZyA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyY1ZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDAp
OworCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoKTsKKyAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQorICAgICAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zy
b21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CisKKyAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKKyAgICBsb2FkNjQoQWRkcmVzcyhy
ZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7
CisgICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06
OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKKworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgY2FsbE9wZXJh
dGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFi
bGVBbmROb3RpZnlQcm9maWxlcik7CisgICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJy
YW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7CisgICAganVtcFRvRXhjZXB0aW9uSGFu
ZGxlcigqdm0oKSk7CisgICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsKKworICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOworICAgIGxvYWQ2NChBZGRyZXNzKHJl
Z1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc3RvcmU2NChUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhj
ZXB0aW9uT2Zmc2V0KCkpKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOworCisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIEV4Y2Vw
dGlvbjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworCisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgLy8gRklYTUU6IGNvbnNpZGVyIGlubGluZSBjYWNoaW5nIHRoZSBwcm9jZXNzIG9mIGRv
aW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5nCisgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0
b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YworICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKKworICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZm
ZXIqPihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5wb2ludGVyKTsKKyAgICBpZiAoYnVmZmVyIHx8
ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
VHJ5T1NSRW50ZXJBdENhdGNoLCBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICBlbHNlCisgICAgICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxl
LCBtX2J5dGVjb2RlT2Zmc2V0KTsKKyAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQ
dHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsK
KyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsKKyAgICBz
a2lwT1NSRW50cnkubGluayh0aGlzKTsKKyAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9m
aWxpbmcoKSkgeworICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRP
cGVyYW5kJiBwcm9maWxlKSB7CisgICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QwKTsK
KyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJhbmQsIHJl
Z3MpOworICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShwcm9maWxlLm1fcHJvZmls
ZSk7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKEluc3RydWN0aW9uKikKK3sK
KyAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuLi4KK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGludCBjdXJyZW50U2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCByZWdUMCk7
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKKyAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
KyAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOworICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChq
dW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
SW1tZWRpYXRlKSk7CisgICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgp
OworICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CisgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKworICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGlu
YXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCisgICAgU2ltcGxlSnVtcFRhYmxl
KiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsK
KyAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2Rl
T2Zmc2V0LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOworICAgIGp1
bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
c2NydXRpbmVlLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFy
V2l0aFVua25vd25LZXlUeXBlLCByZWdUMCwgdGFibGVJbmRleCk7CisgICAganVtcChyZXR1cm5W
YWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
c3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgc2l6ZV90IHRh
YmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVk
IGRlZmF1bHRPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVu
c2lnbmVkIHNjcnV0aW5lZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAg
ICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhp
cyBzd2l0Y2ggc3RhdGVtZW50LgorICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1f
Y29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgbV9zd2l0
Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVm
YXVsdE9mZnNldCkpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJl
Z1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhVbmtub3du
S2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIEpT
U3dpdGNoUHRyVGFnKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2Vy
UmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKKyAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9
IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25E
ZWJ1ZywgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgbm9EZWJ1Z2dlclJl
cXVlc3RzLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VxX251bGwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsK
KyAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgIEp1
bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVz
cyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
CisgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAg
aXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgZW1pdExvYWRTdHJ1Y3R1
cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOworICAgIG1vdmUoVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOworICAgIGNv
bXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgIEp1bXAgd2FzTm90SW1t
ZWRpYXRlID0ganVtcCgpOworCisgICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKKworICAgIGFu
ZDY0KFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOworICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICB3
YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBz
cmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworCisgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgbW92
ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKyAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQgPSBqdW1wKCk7CisKKyAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0
aGlzKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSgqdm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJl
Z1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMik7CisgICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1Qy
LCByZWdUMCk7CisgICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7CisKKyAgICBpc0lt
bWVkaWF0ZS5saW5rKHRoaXMpOworCisgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRl
ZmluZWQpLCByZWdUMCk7CisgICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKFZhbHVlTnVsbCksIHJlZ1QwKTsKKworICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMp
OworICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKworICAgIGJv
eEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlv
biopCit7CisgICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRp
YWxpemUgb3VyIGNvbnN0YW50CisgICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVy
cywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCisgICAgLy8gb2JqZWN0IGxpZmV0
aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgorICAgIHNpemVfdCBjb3VudCA9IG1fY29k
ZUJsb2NrLT5tX251bVZhcnM7CisgICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291bnQ7ICsr
aikKKyAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChqKS5v
ZmZzZXQoKSk7CisKKyAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKKworICAgIGVt
aXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9z
Y29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1l
SGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Cisg
ICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdG9f
dGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIFdyaXRlQmFycmll
ckJhc2U8U3RydWN0dXJlPiogY2FjaGVkU3RydWN0dXJlID0gJmN1cnJlbnRJbnN0cnVjdGlvblsy
XS51LnN0cnVjdHVyZTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMSk7CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDEsIEZp
bmFsT2JqZWN0VHlwZSkpOworICAgIGxvYWRQdHIoY2FjaGVkU3RydWN0dXJlLCByZWdUMik7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMikpOworICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2Ny
ZWF0ZV90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGNh
bGxlZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgV3JpdGVCYXJyaWVy
QmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5q
c0NlbGw7CisgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKKyAgICBSZWdpc3RlcklE
IHJhcmVEYXRhUmVnID0gcmVnVDQ7CisgICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsK
KyAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOworICAgIFJlZ2lzdGVySUQgc3Ry
dWN0dXJlUmVnID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJlZyA9IHJl
Z1Q0OworICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVn
LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZykpOworICAgIHhvclB0cihU
cnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwgcmFyZURhdGFSZWcpOworICAg
IGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNl
dE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJl
RGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1
Y3R1cmVSZWcpOworCisgICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25S
ZWcpOworICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwg
Y2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxs
ZWVPYmplY3RzKCkpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxl
ZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKKyAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxp
bmsodGhpcyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkg
PSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3Vs
dFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJl
ZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY2FsbGVlLCBzY3JhdGNoUmVnKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aFJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgc2NyYXRjaFJlZyk7CisgICAg
eG9yUHRyKFRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBzY3JhdGNoUmVn
KTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZz
ZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6
b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7CisgICAgZW1pdEluaXRpYWxp
emVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CisgICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Cit9CisKKworLy8gU2xvdyBjYXNlcworCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOworCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QwLCBy
ZWdUMSk7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1
cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIHJldHVyblZhbHVlR1BSKTsKK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDAsIHJlZ1QxKTsK
KyAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmV0
dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXR1cm5W
YWx1ZUdQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkNvbXBhcmVFcSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2Fz
ZXMoaXRlcik7CisKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMCwg
cmVnVDEpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5W
YWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9m
X2N1c3RvbShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisK
KyAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9wSW5zdGFuY2VvZkN1c3Rv
bSo+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdCgpOwor
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7CisgICAgaW50IGNvbnN0cnVjdG9yID0g
Ynl0ZWNvZGUuY29uc3RydWN0b3IoKTsKKyAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVj
b2RlLmhhc0luc3RhbmNlVmFsdWUoKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdU
MSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCByZWdUMCwgcmVn
VDEsIHJlZ1QyKTsKKyAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7
IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXR1
cm5WYWx1ZUdQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVy
dHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7Cisg
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7CisK
KyAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSks
IHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQor
eworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAmbV9jb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpW2J5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleF07CisKKyAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVz
IGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBl
bWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIGFycmF5TW9kZSwgYmFkVHlw
ZSk7CisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVl
KSkpLCByZWdUMCk7CisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOworCisgICAgcGF0Y2hCdWZmZXIubGluayhi
YWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFs
dWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0
clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZv
LT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25l
LCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBl
SnVtcFRvRG9uZSkpOworCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NP
REVfRk9SX1NUVUIoCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJv
dXRpbmVQdHJUYWcsCisgICAgICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHVi
IGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgp
LCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hK
dW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0
aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAg
TWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0
cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eUdlbmVyaWMpKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5h
cnJheVByb2ZpbGU7CisgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRk
QnlWYWxJbmZvKCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwg
cHJvcGVydHksIHJlZ1QxKTsKKworICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0
IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlzIGRv
ZXNuJ3QgbWF0dGVyLgorICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1
aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBmYWls
IGlmCisgICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3
YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCisgICAgLy8g
c2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcgd2ls
bCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKKyAgICAvLyB0byA2
NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3Vs
YXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KKyAgICAvLyBleHRlbmRpbmcg
c2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cg
Y2FzZS4KKyAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworCisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICBhbmQzMihUcnVzdGVk
SW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CisKKyAgICBKSVRBcnJheU1vZGUgbW9k
ZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7
CisKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRB
cnJheXMgYW5kIEFyZ3VtZW50cy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNTAzNC4KKyAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFy
cmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOworCisgICAgbW92ZShU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7CisK
KyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwor
CisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisKKyAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CisKKyAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1f
Ynl0ZWNvZGVPZmZzZXQsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwg
ZG9uZSwgbmV4dEhvdFBhdGgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRl
eGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKKworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJv
cGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uYnlWYWxJbmZvOworCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFs
SW5mbyk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1f
YnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9kaXJl
Y3RfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVj
dGlvbls1XS51Lm9wZXJhbmQ7CisKKyAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKworICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1
cmUKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QyKTsKKyAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEp
OworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OworCisgICAgLy8gQ29tcHV0ZSB0aGUgb2Zmc2V0CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDEpOworICAgIC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVy
YXRvcidzIGNhY2hlZCBpbmxpbmUgc3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MK
KyAgICBKdW1wIG91dE9mTGluZUFjY2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEs
IEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2Fw
YWNpdHlPZmZzZXQoKSkpOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSwgcmVnVDApOworICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1Qx
LCByZWdUMSk7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQp
LCByZWdUMCk7CisKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICAvLyBPdGhlcndpc2Ug
aXQncyBvdXQgb2YgbGluZQorICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDAp
OworICAgIHN1YjMyKEFkZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2Fj
aGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBuZWczMihyZWdUMSk7Cisg
ICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICBpbnQzMl90IG9mZnNldE9m
Rmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpOworICAgIGxvYWQ2
NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVy
dHkpLCByZWdUMCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7CisgICAgZW1pdFZhbHVlUHJvZmls
aW5nU2l0ZSgpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMCk7CisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgSnVtcCBpbkJv
dW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKKworICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7CisK
KyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKKworICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQ
cm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7CisgICAgc2lnbkV4dGVuZDMyVG9Q
dHIocmVnVDAsIHJlZ1QwKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGlt
ZXNFaWdodCksIHJlZ1QwKTsKKworICAgIGRvbmUubGluayh0aGlzKTsKKyAgICBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBlbnVtZXJhdG9y
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgaW5kZXggPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihpbmRleCwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwg
cmVnVDEpOworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJl
c3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5k
ZXhPZmZzZXQoKSkpOworCisgICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVsbCgpKSksIHJlZ1QwKTsKKworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKyAgICBpbkJvdW5k
cy5saW5rKHRoaXMpOworCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JPZmZzZXQoKSksIHJlZ1QxKTsK
KyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOworICAgIGxvYWQ2NChCYXNlSW5k
ZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworCisgICAgZG9uZS5saW5rKHRo
aXMpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfcHJvZmlsZV90eXBlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5sb2NhdGlvbjsKKyAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZVRvUHJv
ZmlsZSwgcmVnVDApOworCisgICAgSnVtcExpc3QganVtcFRvRW5kOworCisgICAganVtcFRvRW5k
LmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QwKSk7CisKKyAgICAvLyBDb21waWxlIGluIGEgcHJl
ZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBwb3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lwIHdy
aXRpbmcgdG8gdGhlIGxvZy4KKyAgICAvLyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVkIHRv
IG1hdGNoIHRob3NlIG9mIHRoZSA2NC1iaXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KKyAgICBpZiAo
Y2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKQorICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmVW5kZWZpbmVkKHJlZ1QwKSk7CisgICAgZWxz
ZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVsbCkKKyAg
ICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bGwocmVnVDApKTsKKyAgICBlbHNlIGlm
IChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKQorICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmQm9vbGVhbihyZWdUMCwgcmVnVDEpKTsKKyAg
ICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVBbnlJ
bnQpCisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZJbnQzMihyZWdUMCkpOworICAg
IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU51bWJl
cikKKyAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAg
IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVN0cmlu
ZykgeworICAgICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Cisg
ICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZTdHJpbmcocmVnVDApKTsKKyAgICAgICAg
aXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgfQorCisgICAgLy8gTG9hZCB0aGUgdHlwZSBwcm9m
aWxpbmcgbG9nIGludG8gVDIuCisgICAgVHlwZVByb2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJvZmls
ZXJMb2cgPSBtX3ZtLT50eXBlUHJvZmlsZXJMb2coKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y2FjaGVkVHlwZVByb2ZpbGVyTG9nKSwgcmVnVDIpOworICAgIC8vIExvYWQgdGhlIG5leHQgbG9n
IGVudHJ5IGludG8gVDEuCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJM
b2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSwgcmVnVDEpOworCisgICAgLy8gU3RvcmUgdGhl
IEpTVmFsdWUgb250byB0aGUgbG9nIGVudHJ5LgorICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkpKTsKKworICAg
IC8vIFN0b3JlIHRoZSBzdHJ1Y3R1cmVJRCBvZiB0aGUgY2VsbCBpZiBUMCBpcyBhIGNlbGwsIG90
aGVyd2lzZSwgc3RvcmUgMCBvbiB0aGUgbG9nIGVudHJ5LgorICAgIEp1bXAgbm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7
CisgICAgSnVtcCBza2lwSXNDZWxsID0ganVtcCgpOworICAgIG5vdENlbGwubGluayh0aGlzKTsK
KyAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVy
TG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOworICAgIHNraXBJc0NlbGwubGlu
ayh0aGlzKTsKKworICAgIC8vIFN0b3JlIHRoZSB0eXBlTG9jYXRpb24gb24gdGhlIGxvZyBlbnRy
eS4KKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZUxvY2F0aW9uKSwgcmVnVDApOwor
ICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50
cnk6OmxvY2F0aW9uT2Zmc2V0KCkpKTsKKworICAgIC8vIEluY3JlbWVudCB0aGUgY3VycmVudCBs
b2cgZW50cnkuCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoVHlwZVByb2ZpbGVyTG9n
OjpMb2dFbnRyeSkpLCByZWdUMSk7CisgICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMiwg
VHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSkpOworICAgIEp1bXAgc2tp
cENsZWFyTG9nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbVB0cihjYWNo
ZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0VuZFB0cigpKSk7CisgICAgLy8gQ2xlYXIgdGhlIGxvZyBp
ZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRoZSBsb2cuCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9nKTsKKyAgICBza2lwQ2xlYXJMb2cubGluayh0aGlzKTsK
KworICAgIGp1bXBUb0VuZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQ
UjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVt
cyBpZiB0aGlzIGlzIHRydWUuIik7CisgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1Qw
OworICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBh
IG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsK
KyAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMyk7CisgICAgbG9nU2hhZG93Q2hpY2tl
blByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICBz
dGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwg
IndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CisgICAgR1BSUmVnIHNo
YWRvd1BhY2tldFJlZyA9IHJlZ1QwOworICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQ
UjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICBHUFJSZWcg
c2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgp
LCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMik7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kLCByZWdUMyk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0
UmVnLCBKU1ZhbHVlUmVncyhyZWdUMiksIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRl
eChtX2J5dGVjb2RlT2Zmc2V0KSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHJlc3VsdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVn
VDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVt
cChPcGNvZGVJRCwgaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbikKK3sKKyAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBm
b3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgorICAgIC8vIC0gaW50IGlt
bWVkaWF0ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCisgICAgLy8gLSBjb25zdGFudCBpbnQg
aW1tZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKKyAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50
IGltbWVkaWF0ZQorCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7CisgICAg
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsK
KyAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7
CisgICAgICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gz
Mihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9w
ZXJhbmQob3AxKSktPnRyeUdldFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKKyAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7CisgICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOworICAg
ICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKKyAg
ICAgICAgYWRkU2xvd0Nhc2UoZmFpbHVyZXMpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNv
bmRpdGlvbiwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDIpKS0+
dHJ5R2V0VmFsdWUoKVswXSkpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
Mik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3Ay
aW1tKSksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMSkpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKKyAgICAg
ICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKKyAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0p
KSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEludChyZWdUMCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKKwor
ICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGludCBvcDEsIGludCBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit7Cisg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVy
YW5kQ29uc3RhbnRJbnQob3AyKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24s
IHJlZ1QwLCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMSkpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIs
IHJlZ1QxKTsKKyAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1Qx
LCBJbW0zMihvcDFpbW0pKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKKyAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7CisgICAgfQorfQor
Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoaW50IGRzdCwgaW50IG9wMSwgaW50IG9w
MiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJl
Z1QwKTsKKyAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSksIHJl
Z1QwKTsKKyAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKKyAgICAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKKyAgICAgICAgaW50MzJfdCBv
cDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKKyAgICAgICAgY29tcGFyZTMyKGNv
bW11dGUoY29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJl
Z1QxKTsKKyAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7
CisgICAgfQorICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Cisg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdF9jb21w
YXJlQW5kSnVtcFNsb3coaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBEb3VibGVD
b25kaXRpb24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoRXhl
Y1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgQ09NUElMRV9BU1NF
UlQoT1BDT0RFX0xFTkdUSChvcF9qbGVzcykgPT0gT1BDT0RFX0xFTkdUSChvcF9qbGVzc2VxKSwg
T1BDT0RFX0xFTkdUSF9vcF9qbGVzc2VxX2VxdWFsc19vcF9qbGVzcyk7CisgICAgQ09NUElMRV9B
U1NFUlQoT1BDT0RFX0xFTkdUSChvcF9qbGVzcykgPT0gT1BDT0RFX0xFTkdUSChvcF9qbmxlc3Mp
LCBPUENPREVfTEVOR1RIX29wX2pubGVzc19lcXVhbHNfb3Bfamxlc3MpOworICAgIENPTVBJTEVf
QVNTRVJUKE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpID09IE9QQ09ERV9MRU5HVEgob3Bfam5sZXNz
ZXEpLCBPUENPREVfTEVOR1RIX29wX2pubGVzc2VxX2VxdWFsc19vcF9qbGVzcyk7CisgICAgQ09N
UElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9qbGVzcykgPT0gT1BDT0RFX0xFTkdUSChvcF9q
Z3JlYXRlciksIE9QQ09ERV9MRU5HVEhfb3BfamdyZWF0ZXJfZXF1YWxzX29wX2psZXNzKTsKKyAg
ICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2psZXNzKSA9PSBPUENPREVfTEVOR1RI
KG9wX2pncmVhdGVyZXEpLCBPUENPREVfTEVOR1RIX29wX2pncmVhdGVyZXFfZXF1YWxzX29wX2ps
ZXNzKTsKKyAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2psZXNzKSA9PSBPUENP
REVfTEVOR1RIKG9wX2puZ3JlYXRlciksIE9QQ09ERV9MRU5HVEhfb3Bfam5ncmVhdGVyX2VxdWFs
c19vcF9qbGVzcyk7CisgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9qbGVzcykg
PT0gT1BDT0RFX0xFTkdUSChvcF9qbmdyZWF0ZXJlcSksIE9QQ09ERV9MRU5HVEhfb3Bfam5ncmVh
dGVyZXFfZXF1YWxzX29wX2psZXNzKTsKKworICAgIC8vIFdlIGdlbmVyYXRlIGlubGluZSBjb2Rl
IGZvciB0aGUgZm9sbG93aW5nIGNhc2VzIGluIHRoZSBzbG93IHBhdGg6CisgICAgLy8gLSBmbG9h
dGluZy1wb2ludCBudW1iZXIgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQorICAgIC8vIC0gY29u
c3RhbnQgaW50IGltbWVkaWF0ZSB0byBmbG9hdGluZy1wb2ludCBudW1iZXIKKyAgICAvLyAtIGZs
b2F0aW5nLXBvaW50IG51bWJlciB0byBmbG9hdGluZy1wb2ludCBudW1iZXIuCisgICAgaWYgKGlz
T3BlcmFuZENvbnN0YW50Q2hhcihvcDEpIHx8IGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7
CisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDEsIGFyZ3VtZW50R1BSMCk7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AyLCBhcmd1bWVudEdQUjEpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
biwgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDIpKSB7CisgICAgICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICAg
ICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CisgICAgICAgICAgICBKdW1wIGZhaWwx
ID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOworICAgICAgICAgICAgYWRkNjQodGFnVHlwZU51
bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwg
ZnBSZWdUMCk7CisKKyAgICAgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0Q29uc3RhbnRPcGVy
YW5kKG9wMikuYXNJbnQzMigpOworCisgICAgICAgICAgICBtb3ZlKEltbTMyKG9wMmltbSksIHJl
Z1QxKTsKKyAgICAgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsK
KworICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwg
ZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1Rv
SG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9qbGVzcykpOworCisgICAgICAgICAgICBmYWls
MS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihvcDIsIHJlZ1QxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QwLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBa
ZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKKyAgICAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1Bv
aW50KCkpIHsKKyAgICAgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdU
MSk7CisgICAgICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QxKTsKKyAg
ICAgICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKKworICAgICAgICAgICAg
aW50MzJfdCBvcDFpbW0gPSBnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCk7CisKKyAg
ICAgICAgICAgIG1vdmUoSW1tMzIob3AxaW1tKSwgcmVnVDApOworICAgICAgICAgICAgY29udmVy
dEludDMyVG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOworCisgICAgICAgICAgICBlbWl0SnVtcFNs
b3dUb0hvdChicmFuY2hEb3VibGUoY29uZGl0aW9uLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0
KTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RI
KG9wX2psZXNzKSk7CisKKyAgICAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7CisgICAgICAgIH0K
KworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDIpOworICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDIsIHJlZ1QxKTsKKyAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1
ZUdQUiksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIExIUyBpcyBub3QgSW50LgorCisgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKSB7CisgICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7
CisgICAgICAgIEp1bXAgZmFpbDIgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMSk7CisgICAgICAg
IEp1bXAgZmFpbDMgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICAgICAgYWRkNjQodGFnVHlw
ZU51bWJlclJlZ2lzdGVyLCByZWdUMCk7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwgcmVnVDEpOworICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Cisg
ICAgICAgIG1vdmU2NFRvRG91YmxlKHJlZ1QxLCBmcFJlZ1QxKTsKKworICAgICAgICBlbWl0SnVt
cFNsb3dUb0hvdChicmFuY2hEb3VibGUoY29uZGl0aW9uLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFy
Z2V0KTsKKworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgo
b3Bfamxlc3MpKTsKKworICAgICAgICBmYWlsMS5saW5rKHRoaXMpOworICAgICAgICBmYWlsMi5s
aW5rKHRoaXMpOworICAgICAgICBmYWlsMy5saW5rKHRoaXMpOworICAgIH0KKworICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gUkhTIGlzIG5vdCBJbnQuCisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb24sIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMy
KGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX2luYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworCisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKE92ZXJm
bG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7CisgICAgYm94SW50MzIocmVnVDAsIEpTVmFs
dWVSZWdzIHsgcmVnVDAgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9kZWMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBpbnQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihP
dmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgIGJveEludDMyKHJlZ1QwLCBK
U1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0
KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0Qg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBDUFUoWDg2XzY0KQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBp
bnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AyID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIC8vIE1ha2Ugc3VyZSByZWdp
c3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KKyAgICBBU1NFUlQo
cmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOworICAgIGF1dG8gZWR4ID0gWDg2UmVnaXN0ZXJz
OjplZHg7CisgICAgYXV0byBlY3ggPSBYODZSZWdpc3RlcnM6OmVjeDsKKyAgICBBU1NFUlQocmVn
VDQgIT0gZWR4KTsKKyAgICBBU1NFUlQocmVnVDQgIT0gZWN4KTsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKG9wMSwgcmVnVDQsIG9wMiwgZWN4KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RJbnQocmVnVDQpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChlY3gpOworCisg
ICAgbW92ZShyZWdUNCwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJv
LCBlY3gpKTsKKyAgICBKdW1wIGRlbm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFs
LCBlY3gsIFRydXN0ZWRJbW0zMigtMSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgZGVub21pbmF0b3JO
b3ROZWcxLmxpbmsodGhpcyk7CisgICAgeDg2Q29udmVydFRvRG91YmxlV29yZDMyKCk7CisgICAg
eDg2RGl2MzIoZWN4KTsKKyAgICBKdW1wIG51bWVyYXRvclBvc2l0aXZlID0gYnJhbmNoMzIoR3Jl
YXRlclRoYW5PckVxdWFsLCByZWdUNCwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hUZXN0MzIoWmVybywgZWR4KSk7CisgICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0
aGlzKTsKKyAgICBib3hJbnQzMihlZHgsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bW9kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAg
IEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBz
bG93X3BhdGhfbW9kKTsKKyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworfQorCisjZWxzZSAvLyBD
UFUoWDg2XzY0KQorCit2b2lkIEpJVDo6ZW1pdF9vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwo
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChJbnN0cnVjdGlvbiosIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKQoreworICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9S
TSgpOworfQorCisjZW5kaWYgLy8gQ1BVKFg4Nl82NCkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tIEVORDogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LworCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
OworICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygp
OworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgYm9vbCBw
cm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3Bl
cnR5KTsKKyAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpCisgICAgICAgIG1v
dmUoSW1tMzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSksIHJlZ1QxKTsKKyAgICBl
bHNlCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKwor
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICBQYXRj
aGFibGVKdW1wIG5vdEluZGV4OworICAgIGlmICghcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3Rh
bnQpIHsKKyAgICAgICAgbm90SW5kZXggPSBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KHJlZ1Qx
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOworCisgICAgICAgIC8vIFRoaXMgaXMg
dGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9u
IHRoZSBob3QgcGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgorICAgICAgICAvLyBXZSBjaGVjayB0
aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEgdWludDMyIGFnYWluc3QgdGhlIG1fdmVjdG9yTGVuZ3Ro
IC0gd2hpY2ggd2lsbCBhbHdheXMgZmFpbCBpZgorICAgICAgICAvLyBudW1iZXIgd2FzIHNpZ25l
ZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2Ug
dGhlIHRvdGFsIGFsbG9jYXRpb24KKyAgICAgICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFu
IDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5k
IGV4dGVuZGluZyB0aGUgdmFsdWUKKyAgICAgICAgLy8gdG8gNjQtYml0cyBpcyBuZWNlc3Nhcnkg
c2luY2UgaXQncyB1c2VkIGluIHRoZSBhZGRyZXNzIGNhbGN1bGF0aW9uKS4gV2UgemVybyBleHRl
bmQgcmF0aGVyIHRoYW4gc2lnbgorICAgICAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMg
aXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KKyAgICAgICAg
emVyb0V4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKyAgICB9CisKKyAgICBlbWl0QXJyYXlQ
cm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKKyAgICBhbmQzMihU
cnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CisKKyAgICBQYXRjaGFibGVK
dW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgSklUQXJyYXlNb2Rl
IG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgc3dpdGNoIChtb2RlKSB7Cisg
ICAgY2FzZSBKSVRJbnQzMjoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyR2V0QnlWYWwo
Y3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBK
SVREb3VibGU6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVENvbnRp
Z3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJh
eVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBhZGRTbG93
Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworCisgICAgTGFiZWwg
ZG9uZSA9IGxhYmVsKCk7CisKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICBK
dW1wIHJlc3VsdE9LID0gYnJhbmNoSWZOb3RFbXB0eShyZWdUMCk7CisgICAgICAgIGFib3J0V2l0
aFJlYXNvbihKSVRHZXRCeVZhbFJlc3VsdElzTm90RW1wdHkpOworICAgICAgICByZXN1bHRPSy5s
aW5rKHRoaXMpOworICAgIH0KKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKKyAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxh
YmVsKCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBt
b2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOworfQorCitKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdERvdWJsZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQor
eworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMihEb3VibGVTaGFwZSkpOworICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIp
OworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRk
cmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIGxv
YWREb3VibGUoQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCksIGZwUmVnVDApOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQsIGZwUmVnVDAsIGZwUmVnVDApKTsKKworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJ
VDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91c0xvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRTaGFwZSkKK3sKKyAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7CisKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpOworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOworICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDApOworICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKSk7CisKKyAgICByZXR1cm4gc2xvd0Nhc2Vz
OworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQoSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KworICAgIGFkZDMyKFRydXN0ZWRJbW0zMigtQXJyYXlTdG9yYWdlU2hhcGUpLCByZWdUMiwgcmVn
VDMpOworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihBYm92ZSwgcmVnVDMsIFRydXN0
ZWRJbW0zMihTbG93UHV0QXJyYXlTdG9yYWdlU2hhcGUgLSBBcnJheVN0b3JhZ2VTaGFwZSkpOwor
CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJl
Z1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkp
OworCisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5
U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hUZXN0NjQoWmVybywgcmVnVDApKTsKKworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisK
K0pJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJ
bmZvKiBieVZhbEluZm8sIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcCYgZmFzdERvbmVDYXNlLCBKdW1wJiBzbG93RG9u
ZUNhc2UsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCit7CisgICAgLy8gYmFzZTogcmVnVDAKKyAgICAv
LyBwcm9wZXJ0eTogcmVnVDEKKyAgICAvLyBzY3JhdGNoOiByZWdUMworCisgICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOworICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhi
eVZhbEluZm8sIHJlZ1QxLCByZWdUMywgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOworCisgICAg
SklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2lu
KG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIHByb3BlcnR5TmFt
ZS5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NU
eXBlOjpHZXQpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKworICAgIGZhc3RE
b25lQ2FzZSA9IGp1bXAoKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwor
ICAgIGdlbi5zbG93UGF0aEp1bXAoKS5saW5rKHRoaXMpOworCisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0LCBnZW4u
c3R1YkluZm8oKSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgc2xvd0RvbmVDYXNlID0ganVt
cCgpOworCisgICAgcmV0dXJuIGdlbjsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9i
eV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKyAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKKworICAgIGxpbmtTbG93Q2FzZUlmTm90
SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKKworICAgIGlmICghaXNPcGVy
YW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQorICAgICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IHByb3BlcnR5IGludDMyIGNoZWNrCisgICAgSnVtcCBub25DZWxsID0ganVtcCgpOworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjaworICAgIEp1bXAgbm90U3RyaW5n
ID0gYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApOworICAgIGVtaXROYWtlZENhbGwoQ29kZUxvY2F0
aW9uTGFiZWw8Tm9QdHJUYWc+KG1fdm0tPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxHZW5lcmF0
b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOworICAgIEp1bXAgZmFpbGVkID0gYnJhbmNo
VGVzdDY0KFplcm8sIHJlZ1QwKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDApOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRf
YnlfdmFsKSk7CisgICAgZmFpbGVkLmxpbmsodGhpcyk7CisgICAgbm90U3RyaW5nLmxpbmsodGhp
cyk7CisgICAgbm9uQ2VsbC5saW5rKHRoaXMpOworCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyB2ZWN0b3IgbGVuZ3RoIGNoZWNrCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBlbXB0eSB2
YWx1ZQorCisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0
QnlWYWxPcHRpbWl6ZSwgZHN0LCByZWdUMCwgcmVnVDEsIGJ5VmFsSW5mbyk7CisKKyAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdl
dCA9IHNsb3dQYXRoOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4Kys7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHBy
b3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisgICAg
QnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKKyAgICBib29sIHByb3BlcnR5
TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpOwor
ICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkKKyAgICAgICAgbW92ZShJbW0z
MihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKSwgcmVnVDEpOworICAgIGVsc2UKKyAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworCisgICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKKyAgICBQYXRjaGFibGVKdW1w
IG5vdEluZGV4OworICAgIGlmICghcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpIHsKKyAg
ICAgICAgbm90SW5kZXggPSBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KHJlZ1QxKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOworICAgICAgICAvLyBTZWUgY29tbWVudCBpbiBvcF9n
ZXRfYnlfdmFsLgorICAgICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworICAg
IH0KKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9m
aWxlKTsKKworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKyAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7CisKKyAgICAvLyBUT0RPOiBNYXliZSB3ZSBzaG91bGQgZG8gdGhpcyBpbmxpbmU/CisgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29w
eU9uV3JpdGUpKSk7CisgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwg
cmVnVDIpOworCisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmls
ZSk7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRJbnQzMjoKKyAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVREb3VibGU6CisgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXREb3VibGVQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOworCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisKKyAgICBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1f
Ynl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBk
b25lKSk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRC
eVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKK3sKKyAgICBpbnQgdmFsdWUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKworICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKKworICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVn
VDIsIFRydXN0ZWRJbW0zMihpbmRleGluZ1NoYXBlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBKdW1wIG91
dE9mQm91bmRzID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwg
QnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICBMYWJlbCBzdG9yZVJl
c3VsdCA9IGxhYmVsKCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMp
OworICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFwZSkgeworICAgIGNhc2UgSW50MzJTaGFwZToKKyAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7CisgICAgICAg
IHN0b3JlNjQocmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBEb3VibGVTaGFwZTogeworICAgICAgICBKdW1wIG5vdElu
dCA9IGJyYW5jaElmTm90SW50MzIocmVnVDMpOworICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJs
ZShyZWdUMywgZnBSZWdUMCk7CisgICAgICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7CisgICAgICAg
IG5vdEludC5saW5rKHRoaXMpOworICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IHJlZ1QzKTsKKyAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDMsIGZwUmVnVDApOworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaERvdWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVk
LCBmcFJlZ1QwLCBmcFJlZ1QwKSk7CisgICAgICAgIHJlYWR5LmxpbmsodGhpcyk7CisgICAgICAg
IHN0b3JlRG91YmxlKGZwUmVnVDAsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgorICAg
ICAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7
CisgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgSnVtcCBk
b25lID0ganVtcCgpOworICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7CisKKyAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEJ1
dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsKKworICAgIGVtaXRBcnJheVByb2Zp
bGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworCisgICAgYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCByZWdUMSwgcmVnVDMpOworICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDIs
IEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOworICAgIGp1bXAoKS5saW5rVG8o
c3RvcmVSZXN1bHQsIHRoaXMpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworCisgICAgcmV0dXJu
IHNsb3dDYXNlczsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRU
eXBlKQoreworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKEFycmF5U3RvcmFn
ZVNoYXBlKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5
T2Zmc2V0KCkpLCByZWdUMik7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOworCisgICAgSnVtcCBlbXB0eSA9IGJyYW5jaFRlc3Q2NChaZXJvLCBCYXNlSW5k
ZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgp
KSk7CisKKyAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMyk7CisgICAgc3RvcmU2NChyZWdUMywgQmFzZUluZGV4KHJlZ1Qy
LCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSkpOworICAg
IGVtaXRXcml0ZUJhcnJpZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgdmFsdWUs
IFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBKdW1wIGVuZCA9IGp1bXAoKTsKKworICAgIGVtcHR5
LmxpbmsodGhpcyk7CisgICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2Uo
cHJvZmlsZSk7CisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKHJlZ1QyLCBBcnJh
eVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0KCkpKTsKKyAgICBicmFuY2gzMihCZWxv
dywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5s
aW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworCisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBy
ZWdUMSk7CisgICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjps
ZW5ndGhPZmZzZXQoKSkpOworICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAg
IGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOworCisgICAgZW5kLmxpbmsodGhpcyk7
CisKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6
ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSwgSnVtcExpc3QmIGRvbmVDYXNlcywgSnVtcExpc3QmIHNsb3dDYXNlcykK
K3sKKyAgICAvLyBiYXNlOiByZWdUMAorICAgIC8vIHByb3BlcnR5OiByZWdUMQorICAgIC8vIHNj
cmF0Y2g6IHJlZ1QyCisKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CisgICAgZW1p
dEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5h
bWUsIHNsb3dDYXNlcyk7CisKKyAgICAvLyBXcml0ZSBiYXJyaWVyIGJyZWFrcyB0aGUgcmVnaXN0
ZXJzLiBTbyBhZnRlciBpc3N1aW5nIHRoZSB3cml0ZSBiYXJyaWVyLAorICAgIC8vIHJlbG9hZCB0
aGUgcmVnaXN0ZXJzLgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2
YWx1ZSwgcmVnVDEpOworCisgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1f
Ynl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
CisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwg
bV9jb2RlQmxvY2stPmVjbWFNb2RlKCksIHB1dEtpbmQpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQ
YXRoKCp0aGlzKTsKKyAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsK
KworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwg
Z2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAg
Z2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBkb25lQ2Fz
ZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICByZXR1cm4gZ2VuOworfQorCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CisKKyAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMik7CisgICAgYm9vbCBpc0RpcmVjdCA9IEludGVycHJldGVyOjpnZXRPcGNv
ZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVj
dDsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHJlZ1QwLCBy
ZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbyk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOworICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJl
c3MgPSBjYWxsOworICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIHJlZ1QwKTsKKyAgICBpbnQzMl90IG9wdGlvbnMgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyQnlJZCwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgaW50MzJfdCBvcHRpb25zID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblB1dFNldHRlckJ5SWQsIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QxKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKKyAgICBpbnQzMl90IGF0dHJpYnV0ZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kLCByZWdUMSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kLCByZWdUMik7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKS5pbXBs
KCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQsIHJlZ1QxKTsKKyAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzRdLnUub3BlcmFuZCwgcmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOworfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDEpOworICAgIGludDMyX3QgYXR0
cmlidXRlcyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kLCByZWdUMik7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDAsIHJlZ1QxLCBh
dHRyaWJ1dGVzLCByZWdUMik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlJZEpTUmVzdWx0LCBkc3QsIHJlZ1QwLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBi
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHks
IHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQs
IGRzdCwgcmVnVDAsIHJlZ1QxKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9p
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCByZXN1bHRWUmVn
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZVZSZWcgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7
CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKwor
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwg
UmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBpZGVudC0+
aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlw
ZTo6VHJ5R2V0KTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwor
CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0VlJlZyk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lk
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIGlu
dCByZXN1bHRWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4gPSBsYWJlbCgpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25U
cnlHZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRl
bnQtPmltcGwoKSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4s
IGNhbGwpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworCisgICAgSklUR2V0
QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIGlkZW50LT5pbXBsKCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXREaXJl
Y3QpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CisKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRWUmVnKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgaW50IHJl
c3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kKSk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBt
X2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9
IGxhYmVsKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3Bl
cmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwg
cmVnVDAsIGlkZW50LT5pbXBsKCkpOworCisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
KTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworCisgICAgaWYg
KCppZGVudCA9PSBtX3ZtLT5wcm9wZXJ0eU5hbWVzLT5sZW5ndGggJiYgc2hvdWxkRW1pdFByb2Zp
bGluZygpKQorICAgICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlRm9yQnl0ZWNvZGVJbmRleFdp
dGhDZWxsKHJlZ1QwLCByZWdUMSwgbV9ieXRlY29kZU9mZnNldCk7CisKKyAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29k
ZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1
ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CisgICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0
aEp1bXAoKSk7CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHRoaXNWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpOworCisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodGhpc1ZSZWcsIHJlZ1QxKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDAsIGJhc2VWUmVnKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDEsIHRoaXNWUmVnKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCisgICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIEFjY2Vzc1R5cGU6OkdldFdpdGhU
aGlzKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2Uo
Z2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7
CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRWUmVnKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBpbnQg
cmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9
IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2lu
ID0gbGFiZWwoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdU
MCwgaWRlbnQtPmltcGwoKSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAg
ICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKKworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgr
K107CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKworICAgIENhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgaWRlbnQtPmlt
cGwoKSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGludCB2YWx1ZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOworICAgIHVuc2lnbmVkIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51LnB1
dEJ5SWRGbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKKworICAgIC8vIEluIG9yZGVyIHRvIGJlIGFi
bGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdl
IHN0b3JlIG9uZSBwb2ludGVyLAorICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBo
YXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2Vu
ZXJhdGUgY29kZQorICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBh
bHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgorCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKKworICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworCisgICAgSklUUHV0
QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksCisg
ICAgICAgIGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCk7CisKKyAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKwor
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIHZhbHVlVlJlZywgU2hvdWxkRmlsdGVyQmFz
ZSk7CisKKyAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOworfQorCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKKworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisKKyAgICBMYWJlbCBj
b2xkUGF0aEJlZ2luKHRoaXMpOworCisgICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9w
dXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwg
aWRlbnQtPmltcGwoKSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCByZXN1bHRWUmVnID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7CisKKyAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKKworICAgIEpJVEluQnlJZEdl
bmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVP
ZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2lu
QnlJZHMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgaW50IHJlc3VsdFZSZWcgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSk7CisKKyAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2lu
QnlJZEluZGV4KytdOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1
bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOworCisgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQorewor
ICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIHJldHVybjsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRSZXNv
bHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIHVuc2lnbmVkIGRlcHRoKQoreworICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zh
ckluamVjdGlvbkNoZWNrcyk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVn
VDApOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBzY29wZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2
ZVR5cGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4oY29waWVkSW5zdHJ1Y3Rpb24oY3VycmVu
dEluc3RydWN0aW9uKVs0XS51Lm9wZXJhbmQpOworICAgIHVuc2lnbmVkIGRlcHRoID0gY3VycmVu
dEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKworICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CisgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
KyAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBHbG9iYWxWYXI6Cisg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAg
ICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczogeworICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9IEpTU2Nv
cGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJsb2NrKTsK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOworICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKKyAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgICAgIGVtaXRSZXNv
bHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSksIGRlcHRoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1vZHVsZVZhcjoK
KyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5q
c0NlbGwuZ2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEeW5hbWljOgorICAgICAg
ICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIExvY2FsQ2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Cisg
ICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgeworICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgorICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczog
eworICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7CisgICAgICAgIGxvYWQzMigmY3VycmVudElu
c3RydWN0aW9uWzRdLCByZWdUMCk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7
CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKKyAgICAgICAgc2tpcFRvRW5kLmFw
cGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworCisg
ICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKworICAgICAg
ICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExl
eGljYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKworICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOworICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVD
aGVjayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCit7CisgICAgbG9hZFB0
cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsK
KyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDEpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJl
Z1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOworfQorCit2b2lkIEpJ
VDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyByZWcpCit7
CisgICAgbG9hZFB0cihvcGVyYW5kLCByZWcpOworfQorCit2b2lkIEpJVDo6ZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyByZWcpCit7CisgICAg
bG9hZFB0cihvcGVyYW5kLCByZWcpOworICAgIGxvYWRQdHIocmVnLCByZWcpOworfQorCit2b2lk
IEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKK3sK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSAr
IG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBz
Y29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBHZXRQdXRJbmZvKGNvcGllZEluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVj
dGlvbilbNF0udS5vcGVyYW5kKS5yZXNvbHZlVHlwZSgpOworICAgIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuc2xvdCgpOworICAg
IHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZj
dXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVyKTsKKworICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQp
IHsKKyAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgeworICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5OgorICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czogeworICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVj
dHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24gc2luY2Ug
d2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9iYWxPYmpl
Y3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZvciB0aGUg
dmFyIGluamVjdGlvbi4KKyAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7CisgICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7CisgICAgICAgICAgICBHUFJSZWcgb2Zmc2V0ID0g
cmVnVDE7CisgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOworCisgICAgICAgICAg
ICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVkSW1tUHRy
KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgfSkpOworCisgICAg
ICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7CisgICAgICAgICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0KSk7CisgICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElz
Tm90T3V0T2ZMaW5lKTsKKyAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgICAgICAgICAgbmVnMzIob2Zmc2V0
KTsKKyAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsKKyAgICAg
ICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCAoZmly
c3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHbG9iYWxWYXI6
CisgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAg
Y2FzZSBHbG9iYWxMZXhpY2FsVmFyOgorICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5l
ZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBpZiAoaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGly
ZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QwKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7CisgICAgICAgICAg
ICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNrLgorICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgQ2xvc3Vy
ZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9u
Q2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAg
IGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRHluYW1pYzoKKyAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6Cisg
ICAgICAgIGNhc2UgTW9kdWxlVmFyOgorICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToK
KyAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAg
IH07CisKKyAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CisgICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKKyAgICAgICAgbG9hZDMyKCZjdXJyZW50
SW5zdHJ1Y3Rpb25bNF0sIHJlZ1QwKTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1
dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKwor
ICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNH
bG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0
eSwgZmFsc2UpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKworICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIsIHRydWUpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0
cnVlKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKKworICAgICAgICBhZGRT
bG93Q2FzZShqdW1wKCkpOworCisgICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOworICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBlbWl0Q29kZShyZXNvbHZl
VHlwZSwgZmFsc2UpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRG
cm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRT
ZXQqIHNldCkKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Cisg
ICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CisgICAgc3RvcmVQdHIocmVnVDAsIG9wZXJhbmQpOwor
fQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUqKiBhZGRy
ZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdhdGNocG9p
bnRTZXQpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
IGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7CisgICAgZW1pdE5vdGlmeVdy
aXRlKHJlZ1QxKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsKKyAgICBz
dG9yZVB0cihyZWdUMCwgcmVnVDEpOworfQorCit2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIo
aW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBz
ZXQpCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUo
c2V0KTsKKyAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CisgICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhjb3BpZWRJbnN0cnVj
dGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pWzRdLnUub3BlcmFuZCk7CisgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5zbG90KCk7
CisgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJmN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOworCisgICAgYXV0byBlbWl0Q29k
ZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3Bl
cmFuZCkgeworICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHk6CisgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7CisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwg
c3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBz
aW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2Jh
bE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9y
IHRoZSB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDIpOworCisgICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAo
dm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRy
KEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
KTsKKyAgICAgICAgICAgIH0pKTsKKworICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBsb2Fk
UHRyKG9wZXJhbmRTbG90LCByZWdUMSk7CisgICAgICAgICAgICBuZWdQdHIocmVnVDEpOworICAg
ICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWln
aHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkp
OworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CisgICAg
ICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAg
ICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9y
Q29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChjb25zdGFudFNjb3BlKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVj
ayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgaWYg
KCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChy
ZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgeworICAgICAgICAgICAgICAgIC8vIFdl
IG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92
ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgorICAgICAgICAgICAgICAg
IGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQorICAgICAgICAgICAgICAgICAgICBlbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xv
dCksIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1Qw
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkKKyAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNl
X2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCBiaXR3aXNlX2Nhc3Q8V2F0Y2hw
b2ludFNldCoqPigmY3VycmVudEluc3RydWN0aW9uWzVdKSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9p
bnRTZXQpOworICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3BlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKKyAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgICAg
IGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlw
ZSkpOworICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwg
dmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOworICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1vZHVsZVZhcjoKKyAgICAgICAgY2FzZSBE
eW5hbWljOgorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICBjYXNlIFVucmVzb2x2ZWRQ
cm9wZXJ0eToKKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6IHsKKyAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOworICAgICAgICBsb2FkMzIoJmN1cnJl
bnRJbnN0cnVjdGlvbls0XSwgcmVnVDApOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0
UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAor
CisgICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBp
c0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3Bl
cnR5LCBmYWxzZSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAg
bm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAg
IEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4
aWNhbFZhciwgdHJ1ZSk7CisgICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAg
ICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsK
KyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3Ms
IHRydWUpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIGFk
ZFNsb3dDYXNlKGp1bXAoKSk7CisKKyAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVtaXRDb2RlKHJlc29s
dmVUeXBlLCBmYWxzZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisKKyAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGNv
cGllZEluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbilbNF0udS5vcGVyYW5kKTsKKyAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBp
ZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhyb3dfc3Ry
aWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOworICAgICAgICBzbG93UGF0
aENhbGwuY2FsbCgpOworICAgIH0gZWxzZQorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dFRvU2NvcGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2dldF9mcm9tX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBh
cmd1bWVudHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRl
eCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDApOworICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBE
aXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwor
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGludCBhcmd1bWVudHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGlu
dCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDEpOworICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFy
Z3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSkpOworCisgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVlLCBTaG91
bGRGaWx0ZXJWYWx1ZSk7Cit9CisKK3ZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKHVuc2lnbmVk
IG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQoreworICAgIEp1
bXAgdmFsdWVOb3RDZWxsOworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKKyAgICB9CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG93bmVy
LCByZWdUMCk7CisgICAgSnVtcCBvd25lck5vdENlbGw7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxk
RmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICAgICAg
b3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgIEp1bXAgb3duZXJJ
c1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2goKnZtKCksIHJlZ1QwLCByZWdUMSk7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDAp
OworICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKKworICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJh
c2UpCisgICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOworICAgIGlmIChtb2RlID09IFNo
b3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQorICAg
ICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRXcml0ZUJh
cnJpZXIoSlNDZWxsKiBvd25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9k
ZSkKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgSnVt
cCB2YWx1ZU5vdENlbGw7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCisgICAg
ICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICBlbWl0V3Jp
dGVCYXJyaWVyKG93bmVyKTsKKworICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKQor
ICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlU2V0
dXBWYXJhcmdzRnJhbWUoT3Bjb2RlSUQgb3Bjb2RlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IENhbGxMaW5rSW5mbyogaW5mbykKK3sKKyAgICBpbnQgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOworICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQ7CisgICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5k
OworICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGluc3RydWN0aW9uWzZdLnUub3BlcmFuZDsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMSk7CisgICAgWl9K
SVRPcGVyYXRpb25fRUpaWiBzaXplT3BlcmF0aW9uOworICAgIGlmIChvcGNvZGUgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0
aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsKKyAgICBlbHNlCisgICAgICAgIHNpemVP
cGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdzOworICAgIGNhbGxPcGVyYXRp
b24oc2l6ZU9wZXJhdGlvbiwgcmVnVDEsIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdP
ZmZzZXQpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1Qx
KTsKKyAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2Us
IHJlZ1QxLCByZWdUMSk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVz
KCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMik7CisgICAgRl9KSVRP
cGVyYXRpb25fRUZKWlogc2V0dXBPcGVyYXRpb247CisgICAgaWYgKG9wY29kZSA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0
aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CisgICAgZWxzZQorICAgICAgICBzZXR1cE9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOworICAgIGNhbGxPcGVyYXRpb24o
c2V0dXBPcGVyYXRpb24sIHJlZ1QxLCByZWdUMiwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsK
KyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CisKKyAgICAvLyBQcm9maWxlIHRoZSBh
cmd1bWVudCBjb3VudC4KKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXls
b2FkT2Zmc2V0KSwgcmVnVDIpOworICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhOdW1Bcmd1
bWVudHMoKSwgcmVnVDApOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCBy
ZWdUMCwgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NPZk1heE51bUFy
Z3VtZW50cygpKTsKKyAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CisKKyAgICAvLyBJbml0aWFs
aXplICd0aGlzJy4KKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNWYWx1ZSwgcmVnVDAp
OworICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpKSk7CisKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QxLCBz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWwoSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRp
Y19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCByZWdUMSk7CisgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJl
c3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOworCisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9m
KFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKworICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ2FsbEV2YWwsIHJlZ1QxKTsKKworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHko
cmVnVDApKTsKKworICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisKKyAgICBlbWl0
UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2
YWxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAg
IENhbGxMaW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKKyAg
ICBpbmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVPZmZzZXQpLCByZWdUMCk7CisKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rp
b25bNF0udS5vcGVyYW5kOworCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNl
dCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbG9hZDY0KEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7CisgICAgZW1pdER1bWJW
aXJ0dWFsQ2FsbCgqdm0oKSwgaW5mbyk7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKKworICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisKKyAgICBl
bWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlT3BD
YWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KQoreworICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisKKyAgICAvKiBDYWxsZXIgYWx3YXlzOgorICAgICAgICAtIFVwZGF0ZXMgY2Fs
bEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KKyAgICAgICAgLSBJbml0aWFsaXpl
cyBBcmd1bWVudENvdW50OyBDYWxsZXJGcmFtZTsgQ2FsbGVlLgorCisgICAgICAgRm9yIGEgSlMg
Y2FsbDoKKyAgICAgICAgLSBDYWxsZWUgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4K
KyAgICAgICAgLSBDYWxsZWUgcmVzdG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYmVmb3JlIHJldHVy
bi4KKworICAgICAgIEZvciBhIG5vbi1KUyBjYWxsOgorICAgICAgICAtIENhbGxlciBpbml0aWFs
aXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgorICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxs
RnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4uCisgICAgKi8KKyAgICBDT01QSUxFX0FTU0VSVChP
UENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSwgY2Fs
bF9hbmRfY29uc3RydWN0X29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CisgICAgQ09NUElM
RV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NhbGxf
dmFyYXJncyksIGNhbGxfYW5kX2NhbGxfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5n
dGgpOworICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RF
X0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFyYXJncyksIGNhbGxfYW5kX2NvbnN0cnVjdF92YXJhcmdz
X29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CisgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RF
X0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX3RhaWxfY2FsbCksIGNhbGxfYW5k
X3RhaWxfY2FsbF9vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOworICAgIENPTVBJTEVfQVNT
RVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF90YWlsX2NhbGxf
dmFyYXJncyksIGNhbGxfYW5kX3RhaWxfY2FsbF92YXJhcmdzX29wY29kZXNfbXVzdF9iZV9zYW1l
X2xlbmd0aCk7CisgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBP
UENPREVfTEVOR1RIKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyksIGNhbGxfYW5kX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50c19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwor
CisgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbnVsbHB0cjsKKyAgICBpZiAob3Bjb2RlSUQgIT0g
b3BfY2FsbF9ldmFsKQorICAgICAgICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5m
bygpOworICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfY29uc3RydWN0X3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICBj
b21waWxlU2V0dXBWYXJhcmdzRnJhbWUob3Bjb2RlSUQsIGluc3RydWN0aW9uLCBpbmZvKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
OworCisgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxp
bmcoKSkgeworICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNl
dCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7Cisg
ICAgICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICAg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QwKTsKKyAgICAgICAgICAgIHN0b3JlMzIocmVnVDAsIGluc3RydWN0aW9uW09QQ09ERV9MRU5H
VEgob3BfY2FsbCkgLSAyXS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKKyAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIp
ICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoYXJnQ291bnQpLCBB
ZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50
ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKyAgICB9IC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFt
ZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxp
emVkLgorCisgICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2NvZGVCbG9jay0+Ynl0ZWNv
ZGVPZmZzZXQoaW5zdHJ1Y3Rpb24pOworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxT
aXRlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLmJpdHMoKTsKKyAgICBzdG9yZTMyKFRydXN0ZWRJbW0z
Mihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90
Ojphcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFRh
Z09mZnNldCkpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QwKTsg
Ly8gcmVnVDAgaG9sZHMgY2FsbGVlLgorICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKKworICAgIGlm
IChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgY29tcGlsZUNhbGxFdmFsKGlu
c3RydWN0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBh
ZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOworICAgIEp1bXAgc2xvd0Nhc2UgPSBicmFuY2hQ
dHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNr
LCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZSk7CisK
KyAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlua0luZm9J
bmRleCk7CisgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVGb3Iob3Bj
b2RlSUQpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCByZWdUMCk7CisgICAgbV9jYWxs
Q29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOworICAgIG1fY2Fs
bENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0gYWRkcmVz
c09mTGlua2VkRnVuY3Rpb25DaGVjazsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExp
bmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87CisKKyAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsKSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRh
OworICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOworICAgICAgICBzaHVmZmxlRGF0YS50YWdUeXBlTnVtYmVyID0gR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyOworICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPQorICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kIC0gc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKKyAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUo
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBp
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7ICsraSkgeworICAgICAgICAgICAgc2h1ZmZsZURhdGEu
YXJnc1tpXSA9CisgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0
YWNrKAorICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSAt
IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCwKKyAgICAgICAgICAgICAgICAgICAgRGF0YUZvcm1h
dEpTKTsKKyAgICAgICAgfQorICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQorICAgICAgICAg
ICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7CisgICAgICAgIHNo
dWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7CisgICAgICAg
IGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICBDYWxsRnJh
bWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAg
ICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhl
ciA9IGVtaXROYWtlZFRhaWxDYWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7CisgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKKyAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtl
ZFRhaWxDYWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZENhbGwo
KTsKKworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisKKyAgICBz
YW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOworCisgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5z
dHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlE
IG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQoreworICAgIGlm
IChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKKyAgICAgICAgY29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoaW5zdHJ1Y3Rpb24sIGl0ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2Nh
bGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNh
dmVzKCk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CisKKyAgICBtX2NhbGxDb21w
aWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9CisgICAg
ICAgIGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgaWYgKG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgeworICAgICAgICBh
Ym9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisK
KyAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOworCisgICAgZW1pdFB1dENhbGxSZXN1
bHQoaW5zdHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jYWxsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX3RhaWxfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGNvbXBpbGVPcENhbGwob3BfdGFpbF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NhbGxfZXZhbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF9l
dmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0
aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90YWls
X2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNv
bXBpbGVPcENhbGwob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX2Zv
cndhcmRfYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
Y29tcGlsZU9wQ2FsbChvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBjb21waWxlT3BDYWxsKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVj
dChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVPcENhbGwo
b3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAg
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxf
Y2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF90YWls
X2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2Uob3BfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJn
cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF90YWlsX2Nh
bGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3Zh
cmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY29u
c3RydWN0X3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQoreworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKworI2VuZGlmIC8v
IFVTRShKU1ZBTFVFNjQpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRp
Yy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTgxZDAzODgxODk3MTNmNmI1YjU1ZGU2YTU1MGJl
MDAyNGUwMjRhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0j
aW5jbHVkZSAiSklULmgiCi0KLSNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKLSNpbmNsdWRlICJD
b2RlQmxvY2suaCIKLSNpbmNsdWRlICJKSVRBZGRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRC
aXRBbmRHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRCaXRPckdlbmVyYXRvci5oIgotI2luY2x1
ZGUgIkpJVEJpdFhvckdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVERpdkdlbmVyYXRvci5oIgot
I2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKSVRMZWZ0U2hpZnRHZW5lcmF0b3Iu
aCIKLSNpbmNsdWRlICJKSVRNYXRoSUMuaCIKLSNpbmNsdWRlICJKSVRNdWxHZW5lcmF0b3IuaCIK
LSNpbmNsdWRlICJKSVROZWdHZW5lcmF0b3IuaCIKLSNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgi
Ci0jaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVFN1Ykdl
bmVyYXRvci5oIgotI2luY2x1ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
Ci0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKLSNpbmNsdWRlICJT
bG93UGF0aENhbGwuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgSklUOjplbWl0X29wX2ps
ZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IG9wMSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFyZUFuZEp1bXAob3Bfamxlc3Ms
IG9wMSwgb3AyLCB0YXJnZXQsIExlc3NUaGFuKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfamxl
c3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBvcDEgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wKG9wX2psZXNz
ZXEsIG9wMSwgb3AyLCB0YXJnZXQsIExlc3NUaGFuT3JFcXVhbCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2pncmVhdGVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
aW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXAob3BfamdyZWF0ZXIsIG9wMSwgb3AyLCB0YXJnZXQsIEdyZWF0ZXJUaGFuKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXJlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVk
IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wKG9wX2pncmVhdGVyZXEsIG9wMSwgb3AyLCB0YXJnZXQsIEdyZWF0ZXJUaGFu
T3JFcXVhbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
Ci0KLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wKG9wX2pubGVzcywgb3AxLCBvcDIsIHRhcmdldCwg
R3JlYXRlclRoYW5PckVxdWFsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgb3AxID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotCi0gICAgZW1pdF9jb21wYXJlQW5kSnVtcChvcF9qbmxlc3NlcSwgb3Ax
LCBvcDIsIHRhcmdldCwgR3JlYXRlclRoYW4pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmdy
ZWF0ZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgb3AxID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgZW1pdF9jb21wYXJlQW5kSnVtcChvcF9qbmdy
ZWF0ZXIsIG9wMSwgb3AyLCB0YXJnZXQsIExlc3NUaGFuT3JFcXVhbCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2puZ3JlYXRlcmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXAob3Bfam5ncmVhdGVyZXEsIG9wMSwgb3AyLCB0YXJnZXQsIExlc3NUaGFuKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2psZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgaW50
IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KG9wMSwgb3AyLCB0YXJnZXQsIERvdWJsZUxlc3NUaGFuLCBvcGVyYXRpb25Db21wYXJlTGVz
cywgZmFsc2UsIGl0ZXIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhvcDEsIG9wMiwgdGFyZ2V0LCBEb3VibGVMZXNzVGhh
bk9yRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pncmVhdGVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgaW50IG9w
MSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93
KG9wMSwgb3AyLCB0YXJnZXQsIERvdWJsZUdyZWF0ZXJUaGFuLCBvcGVyYXRpb25Db21wYXJlR3Jl
YXRlciwgZmFsc2UsIGl0ZXIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJl
cShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
Ci0KLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhvcDEsIG9wMiwgdGFyZ2V0LCBEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVy
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBv
cDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0X2NvbXBhcmVB
bmRKdW1wU2xvdyhvcDEsIG9wMiwgdGFyZ2V0LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5sZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBpbnQgb3AxID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cob3Ax
LCBvcDIsIHRhcmdldCwgRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29t
cGFyZUxlc3NFcSwgdHJ1ZSwgaXRlcik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdy
ZWF0ZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotCi0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cob3AxLCBvcDIsIHRhcmdldCwgRG91
YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0
cnVlLCBpdGVyKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAg
dW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAg
IGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KG9wMSwgb3AyLCB0YXJnZXQsIERvdWJsZUxlc3NUaGFu
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9iZWxvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBvcDIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGVtaXRfY29tcGFyZVVuc2ln
bmVkKGRzdCwgb3AxLCBvcDIsIEJlbG93KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3dl
cShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkKGRzdCwgb3AxLCBvcDIsIEJlbG93
T3JFcXVhbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2piZWxvdyhJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
Ci0KLSAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAob3AxLCBvcDIsIHRhcmdldCwgQmVs
b3cpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qYmVsb3dlcShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwot
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0K
LSAgICBlbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAob3AxLCBvcDIsIHRhcmdldCwgQmVsb3dP
ckVxdWFsKTsKLX0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX3Vu
c2lnbmVkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IHJlc3Vs
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDAp
KSk7Ci0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZUFuZEp1bXAoT3Bjb2RlSUQsIGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCi17Ci0gICAgLy8gV2UgZ2VuZXJhdGUg
aW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKLSAg
ICAvLyAtIGludCBpbW1lZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQotICAgIC8vIC0g
Y29uc3RhbnQgaW50IGltbWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCi0gICAgLy8gLSBpbnQgaW1t
ZWRpYXRlIHRvIGludCBpbW1lZGlhdGUKLQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIo
b3AxKSkgewotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOwotICAg
ICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICAgICAgSnVtcExp
c3QgZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdU
MCwgZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIoYXNTdHJpbmco
Z2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIp
KSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgICAgICBKdW1wTGlzdCBm
YWlsdXJlczsKLSAgICAgICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBm
YWlsdXJlcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsKLSAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9w
ZXJhbmQob3AyKSktPnRyeUdldFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwotICAgICAgICBlbWl0SnVtcFNsb3dD
YXNlSWZOb3RJbnQocmVnVDApOwotICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRD
b25zdGFudEludChvcDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVn
VDAsIEltbTMyKG9wMmltbSkpLCB0YXJnZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChy
ZWdUMSk7Ci0gICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
MSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMSwg
SW1tMzIob3AxaW1tKSksIHRhcmdldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMSk7Ci0KLSAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1Qx
KSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChp
bnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQotewotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAgIGludDMyX3Qgb3Ay
aW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNo
MzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7Ci0gICAgfSBlbHNl
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AyLCByZWdUMSk7Ci0gICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25k
aXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSksIHRhcmdldCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7Ci0g
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQp
OwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGludCBkc3QsIGlu
dCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQotewotICAgIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIob3AxLCByZWdUMCk7Ci0gICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENv
bnN0YW50SW50KG9wMik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0z
MihvcDJpbW0pLCByZWdUMCk7Ci0gICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDEpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7Ci0gICAg
ICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7Ci0gICAgICAg
IGNvbXBhcmUzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0zMihvcDFpbW0pLCByZWdU
MCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCBy
ZWdUMCwgb3AyLCByZWdUMSk7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBy
ZWdUMSwgcmVnVDApOwotICAgIH0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7
IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRh
cmdldCwgRG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpv
cGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJv
b2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpID09IE9QQ09ERV9MRU5HVEgo
b3Bfamxlc3NlcSksIE9QQ09ERV9MRU5HVEhfb3Bfamxlc3NlcV9lcXVhbHNfb3Bfamxlc3MpOwot
ICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpID09IE9QQ09ERV9MRU5H
VEgob3Bfam5sZXNzKSwgT1BDT0RFX0xFTkdUSF9vcF9qbmxlc3NfZXF1YWxzX29wX2psZXNzKTsK
LSAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2psZXNzKSA9PSBPUENPREVfTEVO
R1RIKG9wX2pubGVzc2VxKSwgT1BDT0RFX0xFTkdUSF9vcF9qbmxlc3NlcV9lcXVhbHNfb3Bfamxl
c3MpOwotICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpID09IE9QQ09E
RV9MRU5HVEgob3BfamdyZWF0ZXIpLCBPUENPREVfTEVOR1RIX29wX2pncmVhdGVyX2VxdWFsc19v
cF9qbGVzcyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9qbGVzcykgPT0g
T1BDT0RFX0xFTkdUSChvcF9qZ3JlYXRlcmVxKSwgT1BDT0RFX0xFTkdUSF9vcF9qZ3JlYXRlcmVx
X2VxdWFsc19vcF9qbGVzcyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9q
bGVzcykgPT0gT1BDT0RFX0xFTkdUSChvcF9qbmdyZWF0ZXIpLCBPUENPREVfTEVOR1RIX29wX2pu
Z3JlYXRlcl9lcXVhbHNfb3Bfamxlc3MpOwotICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5H
VEgob3Bfamxlc3MpID09IE9QQ09ERV9MRU5HVEgob3Bfam5ncmVhdGVyZXEpLCBPUENPREVfTEVO
R1RIX29wX2puZ3JlYXRlcmVxX2VxdWFsc19vcF9qbGVzcyk7Ci0gICAgCi0gICAgLy8gV2UgZ2Vu
ZXJhdGUgaW5saW5lIGNvZGUgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIHNsb3cgcGF0
aDoKLSAgICAvLyAtIGZsb2F0aW5nLXBvaW50IG51bWJlciB0byBjb25zdGFudCBpbnQgaW1tZWRp
YXRlCi0gICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRpYXRlIHRvIGZsb2F0aW5nLXBvaW50IG51
bWJlcgotICAgIC8vIC0gZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGZsb2F0aW5nLXBvaW50IG51
bWJlci4KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkgfHwgaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgYXJndW1lbnRHUFIwKTsKLSAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uLCBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSk7Ci0gICAgICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywg
cmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgICAgICBpZiAoc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAg
ICAgICAgIEp1bXAgZmFpbDEgPSBicmFuY2hJZk5vdE51bWJlcihyZWdUMCk7Ci0gICAgICAgICAg
ICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgICAgIG1vdmU2
NFRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLQotICAgICAgICAgICAgaW50MzJfdCBvcDJpbW0g
PSBnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCk7Ci0KLSAgICAgICAgICAgIG1vdmUo
SW1tMzIob3AyaW1tKSwgcmVnVDEpOwotICAgICAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUo
cmVnVDEsIGZwUmVnVDEpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hE
b3VibGUoY29uZGl0aW9uLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKLQotICAgICAgICAg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2psZXNzKSk7Ci0K
LSAgICAgICAgICAgIGZhaWwxLmxpbmsodGhpcyk7Ci0gICAgICAgIH0KLQotICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDEpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIGlmIChz
dXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5j
aElmTm90TnVtYmVyKHJlZ1QxKTsKLSAgICAgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdp
c3RlciwgcmVnVDEpOwotICAgICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEp
OwotCi0gICAgICAgICAgICBpbnQzMl90IG9wMWltbSA9IGdldENvbnN0YW50T3BlcmFuZChvcDEp
LmFzSW50MzIoKTsKLQotICAgICAgICAgICAgbW92ZShJbW0zMihvcDFpbW0pLCByZWdUMCk7Ci0g
ICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Ci0KLSAgICAg
ICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShjb25kaXRpb24sIGZwUmVnVDAs
IGZwUmVnVDEpLCB0YXJnZXQpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1w
KCksIE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpKTsKLQotICAgICAgICAgICAgZmFpbDEubGluayh0
aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBy
ZWdUMik7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMiwgcmVnVDEpOwot
ICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5v
blplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gTEhTIGlzIG5vdCBJbnQuCi0KLSAgICBpZiAo
c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpIHsKLSAgICAgICAgSnVtcCBmYWlsMSA9IGJyYW5jaElm
Tm90TnVtYmVyKHJlZ1QwKTsKLSAgICAgICAgSnVtcCBmYWlsMiA9IGJyYW5jaElmTm90TnVtYmVy
KHJlZ1QxKTsKLSAgICAgICAgSnVtcCBmYWlsMyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAg
ICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICAgICAgYWRkNjQo
dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAgICAgIG1vdmU2NFRvRG91YmxlKHJl
Z1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDEsIGZwUmVnVDEpOwot
Ci0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShjb25kaXRpb24sIGZwUmVn
VDAsIGZwUmVnVDEpLCB0YXJnZXQpOwotCi0gICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAo
KSwgT1BDT0RFX0xFTkdUSChvcF9qbGVzcykpOwotCi0gICAgICAgIGZhaWwxLmxpbmsodGhpcyk7
Ci0gICAgICAgIGZhaWwyLmxpbmsodGhpcyk7Ci0gICAgICAgIGZhaWwzLmxpbmsodGhpcyk7Ci0g
ICAgfQotCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBSSFMgaXMgbm90IEludC4KLSAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDAp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHNyY0RzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2RlYyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNEc3QsIHJl
Z1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFN1YjMyKE92ZXJmbG93LCBUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKSk7Ci0gICAg
Ym94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihzcmNEc3QpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI2lm
IENQVShYODZfNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAg
Ly8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2IElESVYgaW5zdHJ1Y3Rp
b25zLgotICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgYXV0byBl
ZHggPSBYODZSZWdpc3RlcnM6OmVkeDsKLSAgICBhdXRvIGVjeCA9IFg4NlJlZ2lzdGVyczo6ZWN4
OwotICAgIEFTU0VSVChyZWdUNCAhPSBlZHgpOwotICAgIEFTU0VSVChyZWdUNCAhPSBlY3gpOwot
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUNCwgb3AyLCBlY3gpOwotICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUNCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KGVjeCk7Ci0KLSAgICBtb3ZlKHJlZ1Q0LCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDMyKFplcm8sIGVjeCkpOwotICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0g
YnJhbmNoMzIoTm90RXF1YWwsIGVjeCwgVHJ1c3RlZEltbTMyKC0xKSk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoLTIxNDc0ODM2NDctMSkpKTsK
LSAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsKLSAgICB4ODZDb252ZXJ0VG9Eb3Vi
bGVXb3JkMzIoKTsKLSAgICB4ODZEaXYzMihlY3gpOwotICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRp
dmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1Q0LCBUcnVzdGVkSW1tMzIoMCkp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCBlZHgpKTsKLSAgICBudW1lcmF0
b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGJveEludDMyKGVkeCwgSlNWYWx1ZVJlZ3MgeyBy
ZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
Ci19Ci0KLSNlbHNlIC8vIENQVShYODZfNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX21vZChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93
UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9kKEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpCi17Ci0gICAgVU5SRUFD
SEFCTEVfRk9SX1BMQVRGT1JNKCk7Ci19Ci0KLSNlbmRpZiAvLyBDUFUoWDg2XzY0KQotCi0vKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9uZWdhdGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVG
b3JQQyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIEpJVE5lZ0lDKiBuZWdhdGVJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVROZWdJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0g
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG5lZ2F0ZUlD
KTsKLSAgICBlbWl0TWF0aElDRmFzdChuZWdhdGVJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVy
YXRpb25Bcml0aE5lZ2F0ZVByb2ZpbGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZWdhdGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUTmVnSUMqIG5lZ0lDID0gYml0d2lzZV9jYXN0PEpJ
VE5lZ0lDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsK
LSAgICBlbWl0TWF0aElDU2xvdyhuZWdJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25B
cml0aE5lZ2F0ZVByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWQs
IG9wZXJhdGlvbkFyaXRoTmVnYXRlT3B0aW1pemUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBT
bmlwcGV0R2VuZXJhdG9yPgotdm9pZCBKSVQ6OmVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5kaWYKLQot
ICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0
T3BlcmFuZDsKLQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBs
ZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAg
ICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJh
bmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KLSAgICBSRUxF
QVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25z
dCgpKTsKLQotICAgIGlmICghbGVmdE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3MpOwotICAgIGlmICghcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7
Ci0KLSAgICBTbmlwcGV0R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCBy
ZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBzY3JhdGNoR1BSKTsKLQotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQotICAgIEFTU0VSVChnZW4uZGlkRW1pdEZhc3RQYXRo
KCkpOwotICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwotCi0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcExpc3QoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2JpdGFuZChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRCaXRCaW5hcnlPcEZhc3RQYXRo
PEpJVEJpdEFuZEdlbmVyYXRvcj4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfYml0b3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBl
bWl0Qml0QmluYXJ5T3BGYXN0UGF0aDxKSVRCaXRPckdlbmVyYXRvcj4oY3VycmVudEluc3RydWN0
aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfYml0eG9yKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGg8SklUQml0WG9yR2Vu
ZXJhdG9yPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9sc2hp
ZnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0Qml0QmluYXJ5
T3BGYXN0UGF0aDxKSVRMZWZ0U2hpZnRHZW5lcmF0b3I+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19
Ci0KLXZvaWQgSklUOjplbWl0UmlnaHRTaGlmdEZhc3RQYXRoKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIE9wY29kZUlEIG9wY29kZUlEKQotewotICAgIEFTU0VSVChvcGNvZGVJRCA9
PSBvcF9yc2hpZnQgfHwgb3Bjb2RlSUQgPT0gb3BfdXJzaGlmdCk7Ci0KLSAgICBKSVRSaWdodFNo
aWZ0R2VuZXJhdG9yOjpTaGlmdFR5cGUgc25pcHBldFNoaWZ0VHlwZSA9IG9wY29kZUlEID09IG9w
X3JzaGlmdCA/Ci0gICAgICAgIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNpZ25lZFNoaWZ0IDog
SklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6VW5zaWduZWRTaGlmdDsKLQotICAgIGludCByZXN1bHQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBvcDEgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBs
ZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRS
ZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0gICAgRlBSUmVnIHNjcmF0Y2hG
UFIgPSBJbnZhbGlkRlBSUmVnOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVm
dFJlZ3M7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSAgICBGUFJSZWcgc2NyYXRj
aEZQUiA9IGZwUmVnVDI7Ci0jZW5kaWYKLQotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5k
OwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZDsKLQotICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9w
ZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25z
dCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKLQotICAgIGlmICghbGVmdE9wZXJhbmQu
aXNDb25zdCgpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJlZ3Mp
OwotICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0KLSAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9y
IGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmln
aHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSLCBzbmlwcGV0
U2hpZnRUeXBlKTsKLQotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQotICAgIEFT
U0VSVChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpOwotICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxpbmso
dGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwot
Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKSk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX3JzaGlmdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY3VycmVudEluc3RydWN0aW9uLCBvcF9yc2hpZnQpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF91cnNoaWZ0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wX3Vyc2hpZnQpOwotfQotCi1BTFdBWVNfSU5MSU5FIHN0YXRpYyBPcGVyYW5kVHlwZXMgZ2V0
T3BlcmFuZFR5cGVzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKLXsKLSAgICByZXR1cm4gT3Bl
cmFuZFR5cGVzKEFyaXRoUHJvZmlsZTo6ZnJvbUludChpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
Lmxoc1Jlc3VsdFR5cGUoKSwgQXJpdGhQcm9maWxlOjpmcm9tSW50KGluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZCkucmhzUmVzdWx0VHlwZSgpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfYWRkKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3VycmVudEluc3RydWN0
aW9uKTsKLSAgICBKSVRBZGRJQyogYWRkSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUQWRkSUMoYXJp
dGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBhZGRJQyk7Ci0gICAgZW1pdE1hdGhJQ0Zhc3QoYWRk
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVBZGQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfYWRkKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVEFkZElDKiBhZGRJ
QyA9IGJpdHdpc2VfY2FzdDxKSVRBZGRJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3Vy
cmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3coYWRkSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVBZGRQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZE9wdGltaXplKTsKLX0KLQotdGVtcGxhdGUg
PHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUg
Tm9uUHJvZmlsZWRGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDRmFzdChKSVRVbmFyeU1h
dGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbiBu
b25Qcm9maWxlZEZ1bmN0aW9uKQotewotICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGludCBvcGVyYW5kID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgLy8gQXJpdGhOZWdhdGUgYmVu
ZWZpdHMgZnJvbSB1c2luZyB0aGUgc2FtZSByZWdpc3RlciBhcyBzcmMgYW5kIGRzdC4KLSAgICAv
LyBTaW5jZSByZWdUMT09YXJndW1lbnRHUFIxLCB1c2luZyByZWdUMSBhdm9pZCBzaHVmZmxpbmcg
cmVnaXN0ZXIgdG8gY2FsbCB0aGUgc2xvdyBwYXRoLgotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFs
dWVSZWdzKHJlZ1QxKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOwotI2Vsc2UKLSAg
ICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKLSAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTUFUSF9JQ19T
VEFUUykKLSAgICBhdXRvIGlubGluZVN0YXJ0ID0gbGFiZWwoKTsKLSNlbmRpZgotCi0gICAgbWF0
aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihyZXN1bHRSZWdzLCBzcmNSZWdzLCBzY3JhdGNo
R1BSKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCwgc3JjUmVncyk7Ci0K
LSAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5z
dHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5hZGQoY3VycmVudEluc3RydWN0aW9uLCBN
YXRoSUNHZW5lcmF0aW9uU3RhdGUoKSkuaXRlcmF0b3ItPnZhbHVlOwotCi0gICAgYm9vbCBnZW5l
cmF0ZWRJbmxpbmVDb2RlID0gbWF0aElDLT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlKTsKLSAgICBpZiAoIWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAg
QXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwotICAg
ICAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3Ms
IHNyY1JlZ3MsIGFyaXRoUHJvZmlsZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIHNyY1Jl
Z3MpOwotICAgIH0gZWxzZQotICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhKdW1wcyk7Ci0KLSNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKLSAgICBhdXRv
IGlubGluZUVuZCA9IGxhYmVsKCk7Ci0gICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBs
aW5rQnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9m
KGlubGluZUVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOwotICAgICAgICBt
YXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKLSAgICB9KTsKLSNlbmRpZgotCi0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwotfQotCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBl
bmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVEJp
bmFyeU1hdGhJQzxHZW5lcmF0b3I+KiBtYXRoSUMsIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5j
dGlvbiBub25Qcm9maWxlZEZ1bmN0aW9uKQotewotICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRP
cGVyYW5kVHlwZXMoY29waWVkSW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdU
MzsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0jZWxzZQotICAgIE9wZXJhbmRU
eXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIEpT
VmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1Zh
bHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJl
Z1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNlbmRpZgotCi0gICAgU25p
cHBldE9wZXJhbmQgbGVmdE9wZXJhbmQodHlwZXMuZmlyc3QoKSk7Ci0gICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kKHR5cGVzLnNlY29uZCgpKTsKLQotICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJh
bmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSk7Ci0KLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXNDb25zdCgp
IHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKLQotICAgIG1hdGhJQy0+bV9nZW5lcmF0b3Ig
PSBHZW5lcmF0b3IobGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJl
Z3MsIHJpZ2h0UmVncywgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUik7
Ci0gICAgCi0gICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFu
dChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
cmlnaHRPcGVyYW5kKSkpOwotICAgIAotICAgIGlmICghR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5k
VmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFs
aWRDb25zdGFudChyaWdodE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KG9wMiwgcmlnaHRSZWdzKTsKLQotI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQotICAgIGF1dG8g
aW5saW5lU3RhcnQgPSBsYWJlbCgpOwotI2VuZGlmCi0KLSAgICBNYXRoSUNHZW5lcmF0aW9uU3Rh
dGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRp
b25TdGF0ZS5hZGQoY3VycmVudEluc3RydWN0aW9uLCBNYXRoSUNHZW5lcmF0aW9uU3RhdGUoKSku
aXRlcmF0b3ItPnZhbHVlOwotCi0gICAgYm9vbCBnZW5lcmF0ZWRJbmxpbmVDb2RlID0gbWF0aElD
LT5nZW5lcmF0ZUlubGluZSgqdGhpcywgbWF0aElDR2VuZXJhdGlvblN0YXRlKTsKLSAgICBpZiAo
IWdlbmVyYXRlZElubGluZUNvZGUpIHsKLSAgICAgICAgaWYgKGxlZnRPcGVyYW5kLmlzQ29uc3Qo
KSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0g
ICAgICAgIGVsc2UgaWYgKHJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLSAgICAgICAgQXJpdGhQcm9maWxl
KiBhcml0aFByb2ZpbGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwotICAgICAgICBpZiAoYXJp
dGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCBy
aWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KG5vblByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRS
ZWdzLCByaWdodFJlZ3MpOwotICAgIH0gZWxzZQotICAgICAgICBhZGRTbG93Q2FzZShtYXRoSUNH
ZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhKdW1wcyk7Ci0KLSNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKLSAgICBhdXRvIGlubGluZUVuZCA9IGxhYmVsKCk7Ci0gICAgYWRkTGlua1Rhc2soWz1dIChM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBzaXplID0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGlubGluZUVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigp
OwotICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKLSAgICB9KTsK
LSNlbmRpZgotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3Mp
OwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9yLCB0eXBlbmFtZSBQcm9maWxlZFJl
cGF0Y2hGdW5jdGlvbiwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwgdHlwZW5hbWUgUmVwYXRj
aEZ1bmN0aW9uPgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNTbG93KEpJVFVuYXJ5TWF0aElDPEdlbmVy
YXRvcj4qIG1hdGhJQywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRS
ZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24g
cHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0aW9uIHJlcGF0Y2hGdW5jdGlvbikKLXsKLSAg
ICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1
Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5maW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZh
bHVlOwotICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsK
LQotICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotCi0j
aWYgVVNFKEpTVkFMVUU2NCkKLSAgICBKU1ZhbHVlUmVncyBzcmNSZWdzID0gSlNWYWx1ZVJlZ3Mo
cmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwotI2VuZGlmCi0KLSNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKLSAgICBhdXRvIHNsb3dQ
YXRoU3RhcnQgPSBsYWJlbCgpOwotI2VuZGlmCi0KLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJv
ZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Ci0gICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zaG91bGRTbG93UGF0aFJlcGF0Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3Rh
dGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2Fz
dDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCBzcmNSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQ
cm9maWxlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KHJlaW50ZXJwcmV0X2Nhc3Q8Sl9KSVRP
cGVyYXRpb25fRUpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRy
dXN0ZWRJbW1QdHIobWF0aElDKSk7Ci0KLSNpZiBFTkFCTEUoTUFUSF9JQ19TVEFUUykKLSAgICBh
dXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKLSAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZm
ZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2Yoc2xvd1BhdGhFbmQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOwot
ICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKLSAgICB9KTsKLSNl
bmRpZgotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3VsdFJlZ3MpOwot
Ci0gICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAg
IE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVj
dGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFs
dWU7Ci0gICAgICAgIG1hdGhJQy0+ZmluYWxpemVJbmxpbmVDb2RlKG1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSwgbGlua0J1ZmZlcik7Ci0gICAgfSk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxl
ZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJ
Q1Nsb3coSklUQmluYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1hdGhJQywgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24gcHJvZmlsZWRSZXBhdGNo
RnVuY3Rpb24sIFByb2ZpbGVkRnVuY3Rpb24gcHJvZmlsZWRGdW5jdGlvbiwgUmVwYXRjaEZ1bmN0
aW9uIHJlcGF0Y2hGdW5jdGlvbikKLXsKLSAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5m
aW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwotICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0
ZS5zbG93UGF0aFN0YXJ0ID0gbGFiZWwoKTsKLQotICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRP
cGVyYW5kVHlwZXMoY29waWVkSW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKSk7Ci0gICAg
SlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIE9wZXJhbmRUeXBlcyB0eXBl
cyA9IGdldE9wZXJhbmRUeXBlcyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIEpTVmFsdWVSZWdz
IGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSNlbmRpZgotICAgIAotICAgIFNuaXBwZXRPcGVyYW5kIGxl
ZnRPcGVyYW5kKHR5cGVzLmZpcnN0KCkpOwotICAgIFNuaXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFu
ZCh0eXBlcy5zZWNvbmQoKSk7Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkK
LSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSk7Ci0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKLSAgICAgICAg
cmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOwot
Ci0gICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0
T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRP
cGVyYW5kKSkpOwotCi0gICAgaWYgKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3Rh
bnQobGVmdE9wZXJhbmQpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVm
dFJlZ3MpOwotICAgIGVsc2UgaWYgKEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0
YW50KHJpZ2h0T3BlcmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
aWdodFJlZ3MpOwotCi0jaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCi0gICAgYXV0byBzbG93UGF0
aFN0YXJ0ID0gbGFiZWwoKTsKLSNlbmRpZgotCi0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2Zp
bGUgPSBtYXRoSUMtPmFyaXRoUHJvZmlsZSgpOwotICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hv
dWxkRW1pdFByb2ZpbGluZygpKSB7Ci0gICAgICAgIGlmIChtYXRoSUNHZW5lcmF0aW9uU3RhdGUu
c2hvdWxkU2xvd1BhdGhSZXBhdGNoKQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRl
LnNsb3dQYXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJ
VE9wZXJhdGlvbl9FSkpNaWM+KHByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywg
bGVmdFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoQ2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUmVzdWx0KHByb2ZpbGVkRnVuY3Rpb24sIHJlc3VsdFJlZ3MsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIGFyaXRoUHJvZmlsZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3
aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRpb25fRUpKTWljPihyZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRS
ZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwotCi0jaWYg
RU5BQkxFKE1BVEhfSUNfU1RBVFMpCi0gICAgYXV0byBzbG93UGF0aEVuZCA9IGxhYmVsKCk7Ci0g
ICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Ci0gICAgICAgIHNp
emVfdCBzaXplID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoRW5kKS5leGVjdXRhYmxl
QWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aFN0YXJ0KS5l
eGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKLSAgICAgICAgbWF0aElDLT5tX2dlbmVyYXRlZENv
ZGVTaXplICs9IHNpemU7Ci0gICAgfSk7Ci0jZW5kaWYKLQotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKLQotICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1
ZmZlciYgbGlua0J1ZmZlcikgewotICAgICAgICBNYXRoSUNHZW5lcmF0aW9uU3RhdGUmIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSA9IG1faW5zdHJ1Y3Rpb25Ub01hdGhJQ0dlbmVyYXRpb25TdGF0ZS5m
aW5kKGN1cnJlbnRJbnN0cnVjdGlvbiktPnZhbHVlOwotICAgICAgICBtYXRoSUMtPmZpbmFsaXpl
SW5saW5lQ29kZShtYXRoSUNHZW5lcmF0aW9uU3RhdGUsIGxpbmtCdWZmZXIpOwotICAgIH0pOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9kaXYoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQg
b3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVzKGNvcGllZEluc3Ry
dWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0g
SlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKLSNlbHNlCi0gICAgT3BlcmFuZFR5cGVzIHR5cGVz
ID0gZ2V0T3BlcmFuZFR5cGVzKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgSlNWYWx1ZVJlZ3Mg
bGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJp
Z2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyA9IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0jZW5k
aWYKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7Ci0KLSAgICBBcml0aFByb2ZpbGUq
IGFyaXRoUHJvZmlsZSA9IG51bGxwdHI7Ci0gICAgaWYgKHNob3VsZEVtaXRQcm9maWxpbmcoKSkK
LSAgICAgICAgYXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvclBDKGN1
cnJlbnRJbnN0cnVjdGlvbik7Ci0KLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZCh0eXBl
cy5maXJzdCgpKTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQodHlwZXMuc2Vjb25k
KCkpOwotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAgICAgIGxlZnRP
cGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwotI2lmIFVT
RShKU1ZBTFVFNjQpCi0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnREb3VibGUob3AxKSkK
LSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3REb3VibGUoZ2V0T3BlcmFuZENvbnN0YW50RG91
YmxlKG9wMSkpOwotI2VuZGlmCi0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3Ay
KSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50
SW50KG9wMikpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29u
c3RhbnREb3VibGUob3AyKSkKLSAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdl
dE9wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKTsKLSNlbmRpZgotCi0gICAgUkVMRUFTRV9BU1NF
UlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7Ci0K
LSAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkp
Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwotCi0gICAg
SklURGl2R2VuZXJhdG9yIGdlbihsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdz
LCBsZWZ0UmVncywgcmlnaHRSZWdzLAotICAgICAgICBmcFJlZ1QwLCBmcFJlZ1QxLCBzY3JhdGNo
R1BSLCBzY3JhdGNoRlBSLCBhcml0aFByb2ZpbGUpOwotCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBh
dGgoKnRoaXMpOwotCi0gICAgaWYgKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSkgewotICAgICAgICBn
ZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcExpc3QoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGdlbi5lbmRKdW1w
TGlzdCgpLmVtcHR5KCkpOwotICAgICAgICBBU1NFUlQoZ2VuLnNsb3dQYXRoSnVtcExpc3QoKS5l
bXB0eSgpKTsKLSAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9kaXYpOwotICAgICAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbXVsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2Nv
ZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBKSVRN
dWxJQyogbXVsSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUTXVsSUMoYXJpdGhQcm9maWxlLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwotICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudElu
c3RydWN0aW9uLCBtdWxJQyk7Ci0gICAgZW1pdE1hdGhJQ0Zhc3QobXVsSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVNdWwpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbXVsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVE11bElDKiBtdWxJQyA9IGJpdHdpc2VfY2Fz
dDxKSVRNdWxJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9u
KSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3cobXVsSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uVmFsdWVNdWxQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVkLCBv
cGVyYXRpb25WYWx1ZU11bE9wdGltaXplKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3ViKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgQXJpdGhQcm9maWxlKiBhcml0
aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3VycmVudEluc3RydWN0
aW9uKTsKLSAgICBKSVRTdWJJQyogc3ViSUMgPSBtX2NvZGVCbG9jay0+YWRkSklUU3ViSUMoYXJp
dGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJ
Qy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBzdWJJQyk7Ci0gICAgZW1pdE1hdGhJQ0Zhc3Qoc3Vi
SUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZCwgb3BlcmF0
aW9uVmFsdWVTdWIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfc3ViKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFN1YklDKiBzdWJJ
QyA9IGJpdHdpc2VfY2FzdDxKSVRTdWJJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3Vy
cmVudEluc3RydWN0aW9uKSk7Ci0gICAgZW1pdE1hdGhJQ1Nsb3coc3ViSUMsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgb3BlcmF0aW9uVmFsdWVTdWJQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25WYWx1
ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yk9wdGltaXplKTsKLX0KLQotLyogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfQURELCBPUF9TVUIsIE9QX01VTCwgT1Bf
UE9XIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGQzZWJkYjY3YzUyMWNiNjk5ZjM3ZTA5ODkyMDdhNGUyMWU3OWNjNTMuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzU3ICswLDAgQEAK
LS8qCi0qIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0qCi0qIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSogYXJlIG1ldDoKLSogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0qICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0qCi0qIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0qIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0qIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0qIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYg
RU5BQkxFKEpJVCkKLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotI2luY2x1ZGUgIkpJVC5oIgotCi0j
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSklUSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0
ZXIuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgot
I2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgotCi0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcChPcGNvZGVJRCBvcGNvZGUsIGludCBvcDEsIGludCBvcDIs
IHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCi17Ci0gICAg
SnVtcExpc3Qgbm90SW50MzJPcDE7Ci0gICAgSnVtcExpc3Qgbm90SW50MzJPcDI7Ci0KLSAgICAv
LyBDaGFyYWN0ZXIgbGVzcy4KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsK
LSAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwotICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0g
ICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwot
ICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVy
YW5kKG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7Ci0gICAgICAgIGVt
aXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RDZWxsKHJlZ1QxKSk7Ci0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICBlbWl0
TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKLSAgICAgICAgYWRk
U2xvd0Nhc2UoZmFpbHVyZXMpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwg
cmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDIpKS0+dHJ5R2V0VmFs
dWUoKVswXSkpLCB0YXJnZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfSAKLSAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSkgewotICAgICAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCBy
ZWdUMik7Ci0gICAgICAgIG5vdEludDMyT3AyLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1Qz
KSk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMiwg
SW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0gICAg
fSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRMb2Fk
KG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5jaElm
Tm90SW50MzIocmVnVDEpKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJl
Z1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsK
LSAgICB9IGVsc2UgewotICAgICAgICBlbWl0TG9hZDIob3AxLCByZWdUMSwgcmVnVDAsIG9wMiwg
cmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgbm90SW50MzJPcDEuYXBwZW5kKGJyYW5jaElmTm90SW50
MzIocmVnVDEpKTsKLSAgICAgICAgbm90SW50MzJPcDIuYXBwZW5kKGJyYW5jaElmTm90SW50MzIo
cmVnVDMpKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdU
MiksIHRhcmdldCk7Ci0gICAgfQotCi0gICAgaWYgKCFzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkg
ewotICAgICAgICBhZGRTbG93Q2FzZShub3RJbnQzMk9wMSk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KG5vdEludDMyT3AyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBKdW1wIGVuZCA9IGp1
bXAoKTsKLQotICAgIC8vIERvdWJsZSBsZXNzLgotICAgIGVtaXRCaW5hcnlEb3VibGVPcChvcGNv
ZGUsIHRhcmdldCwgb3AxLCBvcDIsIE9wZXJhbmRUeXBlcygpLCBub3RJbnQzMk9wMSwgbm90SW50
MzJPcDIsICFpc09wZXJhbmRDb25zdGFudEludChvcDEpLCBpc09wZXJhbmRDb25zdGFudEludChv
cDEpIHx8ICFpc09wZXJhbmRDb25zdGFudEludChvcDIpKTsKLSAgICBlbmQubGluayh0aGlzKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChpbnQgb3AxLCBpbnQg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQotewot
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9w
MiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRp
dGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwg
dGFyZ2V0KTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAg
ICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwotICAgICAgICBhZGRKdW1wKGJyYW5j
aDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIpLmFzSW50
MzIoKSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRMb2FkMihvcDEsIHJl
Z1QxLCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLSAgICB9Ci19Ci0KLQotdm9pZCBK
SVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJlbGF0
aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQotewotICAgIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAg
Y29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3Bl
cmFuZChvcDEpLmFzSW50MzIoKSksIHJlZ1QwKTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwot
ICAgICAgICBjb21wYXJlMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVy
YW5kKG9wMikuYXNJbnQzMigpKSwgcmVnVDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGVtaXRM
b2FkMihvcDEsIHJlZ1QxLCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBjb21w
YXJlMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICB9Ci0gICAgZW1pdFN0
b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgRG91YmxlQ29uZGl0aW9uLCBz
aXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGVt
aXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZChvcDIsIHJlZ1QzLCByZWdU
Mik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24sIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJy
YW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGludCByZXN1bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIAotICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICBlbWl0U3RvcmVJbnQz
MihyZXN1bHQsIHJlZ1QwLCByZXN1bHQgPT0gb3AxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IHNyY0RzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChzcmNEc3Qs
IHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1Qx
KSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigx
KSwgcmVnVDApKTsKLSAgICBlbWl0U3RvcmVJbnQzMihzcmNEc3QsIHJlZ1QwLCB0cnVlKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgaW50IHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0K
LSAgICBlbWl0TG9hZChzcmNEc3QsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3Zl
cmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBlbWl0U3RvcmVJbnQzMihzcmNE
c3QsIHJlZ1QwLCB0cnVlKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChPcGNv
ZGVJRCBvcGNvZGVJRCwgaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgT3BlcmFuZFR5cGVzIHR5
cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9wMiwgYm9vbCBv
cDFJc0luUmVnaXN0ZXJzLCBib29sIG9wMklzSW5SZWdpc3RlcnMpCi17Ci0gICAgSnVtcExpc3Qg
ZW5kOwotCi0gICAgaWYgKCFub3RJbnQzMk9wMS5lbXB0eSgpKSB7Ci0gICAgICAgIC8vIERvdWJs
ZSBjYXNlIDE6IE9wMSBpcyBub3QgaW50MzI7IE9wMiBpcyB1bmtub3duLgotICAgICAgICBub3RJ
bnQzMk9wMS5saW5rKHRoaXMpOwotCi0gICAgICAgIEFTU0VSVChvcDFJc0luUmVnaXN0ZXJzKTsK
LQotICAgICAgICAvLyBWZXJpZnkgT3AxIGlzIGRvdWJsZS4KLSAgICAgICAgaWYgKCF0eXBlcy5m
aXJzdCgpLmRlZmluaXRlbHlJc051bWJlcigpKQotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoQWJvdmUsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwot
Ci0gICAgICAgIGlmICghb3AySXNJblJlZ2lzdGVycykKLSAgICAgICAgICAgIGVtaXRMb2FkKG9w
MiwgcmVnVDMsIHJlZ1QyKTsKLQotICAgICAgICBKdW1wIGRvdWJsZU9wMiA9IGJyYW5jaDMyKEJl
bG93LCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpOwotCi0gICAgICAg
IGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkpCi0gICAgICAgICAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7Ci0KLSAgICAgICAgY29udmVydElu
dDMyVG9Eb3VibGUocmVnVDIsIGZwUmVnVDApOwotICAgICAgICBKdW1wIGRvVGhlTWF0aCA9IGp1
bXAoKTsKLQotICAgICAgICAvLyBMb2FkIE9wMiBhcyBkb3VibGUgaW50byBkb3VibGUgcmVnaXN0
ZXIuCi0gICAgICAgIGRvdWJsZU9wMi5saW5rKHRoaXMpOwotICAgICAgICBlbWl0TG9hZERvdWJs
ZShvcDIsIGZwUmVnVDApOwotCi0gICAgICAgIC8vIERvIHRoZSBtYXRoLgotICAgICAgICBkb1Ro
ZU1hdGgubGluayh0aGlzKTsKLSAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICAg
ICAgY2FzZSBvcF9qbGVzczoKLSAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZw
UmVnVDIpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NU
aGFuLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2Ugb3Bfamxlc3NlcToKLSAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJs
ZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERv
dWJsZUxlc3NUaGFuT3JFcXVhbCwgZnBSZWdUMiwgZnBSZWdUMCksIGRzdCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIG9wX2pncmVhdGVyOgotICAgICAgICAgICAg
ICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW4sIGZwUmVnVDIsIGZwUmVnVDApLCBkc3Qp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcmVx
OgotICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBm
cFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2Ugb3Bfam5sZXNzOgotICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwg
ZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVz
c1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCBkc3QpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcToKLSAgICAgICAg
ICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZw
UmVnVDIpLCBkc3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBv
cF9qbmdyZWF0ZXI6Ci0gICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1Qy
KTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgotICAgICAgICAg
ICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwg
ZnBSZWdUMiksIGRzdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIW5vdEludDMyT3AyLmVtcHR5KCkpCi0gICAgICAgICAgICBl
bmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgfQotCi0gICAgaWYgKCFub3RJbnQzMk9wMi5lbXB0eSgp
KSB7Ci0gICAgICAgIC8vIERvdWJsZSBjYXNlIDI6IE9wMSBpcyBpbnQzMjsgT3AyIGlzIG5vdCBp
bnQzMi4KLSAgICAgICAgbm90SW50MzJPcDIubGluayh0aGlzKTsKLQotICAgICAgICBBU1NFUlQo
b3AySXNJblJlZ2lzdGVycyk7Ci0KLSAgICAgICAgaWYgKCFvcDFJc0luUmVnaXN0ZXJzKQotICAg
ICAgICAgICAgZW1pdExvYWRQYXlsb2FkKG9wMSwgcmVnVDApOwotCi0gICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLQotICAgICAgICAvLyBWZXJpZnkgb3AyIGlz
IGRvdWJsZS4KLSAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQoKS5kZWZpbml0ZWx5SXNOdW1iZXIo
KSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlLCByZWdUMywgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgICAgICAvLyBEbyB0aGUgbWF0aC4K
LSAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgICAgICAgICAgY2FzZSBvcF9qbGVzczoK
LSAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuLCBmcFJlZ1QwLCBmcFJl
Z1QxKSwgZHN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ugb3Bf
amxlc3NlcToKLSAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwot
ICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVh
bCwgZnBSZWdUMCwgZnBSZWdUMSksIGRzdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIG9wX2pncmVhdGVyOgotICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91Ymxl
KG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91
YmxlR3JlYXRlclRoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgotICAgICAgICAgICAgICAg
IGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QxKSwg
ZHN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ugb3Bfam5sZXNz
OgotICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9y
ZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCBkc3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcToKLSAgICAgICAgICAgICAgICBlbWl0TG9hZERv
dWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91Ymxl
KERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCBkc3QpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAg
ICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCwgZnBSZWdUMSwgZnBSZWdUMCksIGRzdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgotICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91
YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
RG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIGRzdCk7Ci0g
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBlbmQubGluayh0aGlzKTsKLX0KLQotLy8gTW9kICglKQotCi0vKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gQkVHSU46IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0jaWYgQ1BVKFg4NikKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQot
ICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3Ry
dWN0aW9ucy4KLSAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOwotICAgIEFT
U0VSVChyZWdUMSA9PSBYODZSZWdpc3RlcnM6OmVkeCk7Ci0gICAgQVNTRVJUKHJlZ1QyID09IFg4
NlJlZ2lzdGVyczo6ZWN4KTsKLSAgICBBU1NFUlQocmVnVDMgPT0gWDg2UmVnaXN0ZXJzOjplYngp
OwotCi0gICAgZW1pdExvYWQyKG9wMSwgcmVnVDAsIHJlZ1QzLCBvcDIsIHJlZ1QxLCByZWdUMik7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90SW50MzIocmVnVDApKTsKLQotICAgIG1vdmUocmVnVDMsIHJlZ1QwKTsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDIpKTsKLSAgICBKdW1wIGRl
bm9taW5hdG9yTm90TmVnMSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KC0xKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoLTIxNDc0ODM2NDctMSkpKTsKLSAgICBkZW5vbWluYXRvck5vdE5lZzEubGluayh0aGlzKTsK
LSAgICB4ODZDb252ZXJ0VG9Eb3VibGVXb3JkMzIoKTsKLSAgICB4ODZEaXYzMihyZWdUMik7Ci0g
ICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwg
cmVnVDMsIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKFpl
cm8sIHJlZ1QxKSk7Ci0gICAgbnVtZXJhdG9yUG9zaXRpdmUubGluayh0aGlzKTsKLSAgICBlbWl0
U3RvcmVJbnQzMihkc3QsIHJlZ1QxLCAob3AxID09IGRzdCB8fCBvcDIgPT0gZHN0KSk7Ci0jZWxz
ZQotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0
aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotI2VuZGlmCi19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSNpZiBDUFUo
WDg2KQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBKSVRTbG93UGF0aENhbGwg
c2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7Ci0g
ICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci0gICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwotICAgIC8vIFdlIHdvdWxkIGhh
dmUgcmVhbGx5IHVzZWZ1bCBhc3NlcnRpb25zIGhlcmUgaWYgaXQgd2Fzbid0IGZvciB0aGUgY29t
cGlsZXIncwotICAgIC8vIGluc2lzdGVuY2Ugb24gYXR0cmlidXRlIG5vcmV0dXJuLgotICAgIC8v
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORDogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVF
MzJfNjQpCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGFiNDhiMTVhZjZkNTZjZDFl
ZDBjM2RmMjU5NmQyNTI4YzIxNjI2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShK
SVQpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSNpbmNsdWRlICJKSVQuaCIKLQotI2luY2x1ZGUgIkNh
bGxGcmFtZVNodWZmbGVyLmgiCi0jaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSAiSklU
SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgi
Ci0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlJlc3VsdFR5cGUuaCIKLSNpbmNsdWRlICJT
ZXR1cFZhcmFyZ3NGcmFtZS5oIgotI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCi0jaW5jbHVk
ZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+
Ci0KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1l
KE9wY29kZUlEIG9wY29kZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYWxsTGlua0luZm8q
IGluZm8pCi17Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LSAgICBpbnQgYXJndW1lbnRzID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgIGludCBm
aXJzdEZyZWVSZWdpc3RlciA9IGluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKLSAgICBpbnQgZmly
c3RWYXJBcmdPZmZzZXQgPSBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDEpOwotICAgIFpfSklUT3BlcmF0aW9uX0VK
Wlogc2l6ZU9wZXJhdGlvbjsKLSAgICBpZiAob3Bjb2RlID09IG9wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cykKLSAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZv
ckZvcndhcmRBcmd1bWVudHM7Ci0gICAgZWxzZQotICAgICAgICBzaXplT3BlcmF0aW9uID0gb3Bl
cmF0aW9uU2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRp
b24sIHJlZ1QxLCAtZmlyc3RGcmVlUmVnaXN0ZXIsIGZpcnN0VmFyQXJnT2Zmc2V0KTsKLSAgICBt
b3ZlKFRydXN0ZWRJbW0zMigtZmlyc3RGcmVlUmVnaXN0ZXIpLCByZWdUMSk7Ci0gICAgZW1pdFNl
dFZhcmFyZ3NGcmFtZSgqdGhpcywgcmV0dXJuVmFsdWVHUFIsIGZhbHNlLCByZWdUMSwgcmVnVDEp
OwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA1ICogc2l6ZW9m
KHZvaWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGFyZ3VtZW50cywgcmVnVDIpOwotICAgIEZfSklUT3BlcmF0aW9uX0VGSlpa
IHNldHVwT3BlcmF0aW9uOwotICAgIGlmIChvcGNvZGUgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRf
YXJndW1lbnRzKQotICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2Fy
ZEFyZ3VtZW50c0ZyYW1lOwotICAgIGVsc2UKLSAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVy
YXRpb25TZXR1cFZhcmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9u
LCByZWdUMSwgcmVnVDIsIGZpcnN0VmFyQXJnT2Zmc2V0LCByZWdUMCk7Ci0gICAgbW92ZShyZXR1
cm5WYWx1ZUdQUiwgcmVnVDEpOwotCi0gICAgLy8gUHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQu
Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQg
KiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJl
Z1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVzc09mTWF4TnVtQXJndW1lbnRzKCksIHJlZ1Qw
KTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsK
LSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRyZXNzT2ZNYXhOdW1Bcmd1bWVudHMoKSk7Ci0g
ICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwotICAgIAotICAgIC8vIEluaXRpYWxpemUgJ3RoaXMn
LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCByZWdUMCk7Ci0gICAgc3Rv
cmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQo
KSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKLQotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDEsIHN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24pCi17Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIs
IHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwg
Q2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0
YWNrUG9pbnRlckFsaWdubWVudCgpOwotCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxs
RXZhbCwgcmVnVDEpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwot
Ci0gICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKLSAgICAKLSAgICBlbWl0UHV0Q2Fs
bFJlc3VsdChpbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93
Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIENhbGxM
aW5rSW5mbyogaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKLSAgICBpbmZv
LT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpDYWxsLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZz
ZXQpLCByZWdUMCk7Ci0KLSAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kOwotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNp
emVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdp
c3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgbG9hZDY0KEFkZHJlc3Moc3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIHNpemVvZihSZWdpc3RlcikgKiBDYWxsRnJhbWVTbG90OjpjYWxsZWUg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMCk7Ci0gICAgZW1pdER1bWJWaXJ0dWFs
Q2FsbCgqdm0oKSwgaW5mbyk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJP
ZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lz
dGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKLQotICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7Ci0gICAgCi0gICAgZW1p
dFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBj
YWxsTGlua0luZm9JbmRleCkKLXsKLSAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwotCi0gICAgLyogQ2FsbGVyIGFsd2F5czoKLSAgICAgICAgLSBVcGRhdGVzIGNhbGxG
cmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJhbWUuCi0gICAgICAgIC0gSW5pdGlhbGl6ZXMg
QXJndW1lbnRDb3VudDsgQ2FsbGVyRnJhbWU7IENhbGxlZS4KLQotICAgICAgIEZvciBhIEpTIGNh
bGw6Ci0gICAgICAgIC0gQ2FsbGVlIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCi0g
ICAgICAgIC0gQ2FsbGVlIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGJlZm9yZSByZXR1cm4u
Ci0KLSAgICAgICBGb3IgYSBub24tSlMgY2FsbDoKLSAgICAgICAgLSBDYWxsZXIgaW5pdGlhbGl6
ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KLSAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2FsbEZy
YW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgotICAgICovCi0gICAgQ09NUElMRV9BU1NFUlQoT1BD
T0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCksIGNhbGxf
YW5kX2NvbnN0cnVjdF9vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwotICAgIENPTVBJTEVf
QVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3Zh
cmFyZ3MpLCBjYWxsX2FuZF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3Ro
KTsKLSAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9M
RU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpLCBjYWxsX2FuZF9jb25zdHJ1Y3RfdmFyYXJnc19v
cGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwotICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9M
RU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF90YWlsX2NhbGwpLCBjYWxsX2FuZF90
YWlsX2NhbGxfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKLSAgICBDT01QSUxFX0FTU0VS
VChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfdGFpbF9jYWxsX3Zh
cmFyZ3MpLCBjYWxsX2FuZF90YWlsX2NhbGxfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9s
ZW5ndGgpOwotICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BD
T0RFX0xFTkdUSChvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpLCBjYWxsX2FuZF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHNfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKLQot
ICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9w
X2NhbGxfZXZhbCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8o
KTsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9w
X2NvbnN0cnVjdF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKLSAgICAgICAgY29t
cGlsZVNldHVwVmFyYXJnc0ZyYW1lKG9wY29kZUlELCBpbnN0cnVjdGlvbiwgaW5mbyk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsK
LQotICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJPZmZzZXQg
KyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwgcmVnVDApOwotICAg
ICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAgICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MCk7Ci0gICAgICAgICAgICBzdG9yZTMyKHJlZ1QwLCBpbnN0cnVjdGlvbltPUENPREVfTEVOR1RI
KG9wX2NhbGwpIC0gMl0udS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSk7Ci0gICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgICAgIH0KLSAgICAKLSAg
ICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3Rl
cikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOwotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmdDb3VudCks
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotICAgIH0gLy8gU1AgaG9sZHMgbmV3Q2FsbEZy
YW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlh
bGl6ZWQuCi0gICAgCi0gICAgdWludDMyX3QgYnl0ZWNvZGVPZmZzZXQgPSBtX2NvZGVCbG9jay0+
Ynl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rpb24pOwotICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9
IENhbGxTaXRlSW5kZXgoYnl0ZWNvZGVPZmZzZXQpLmJpdHMoKTsKLSAgICBzdG9yZTMyKFRydXN0
ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSArIFRhZ09mZnNldCkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJl
Z1QwKTsgLy8gcmVnVDAgaG9sZHMgY2FsbGVlLgotICAgIHN0b3JlNjQocmVnVDAsIEFkZHJlc3Mo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0
PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLQot
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgY29tcGlsZUNhbGxF
dmFsKGluc3RydWN0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIERhdGFMYWJl
bFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgIEp1bXAgc2xvd0Nhc2UgPSBi
cmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlv
bkNoZWNrLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZSk7Ci0KLSAgICBBU1NFUlQobV9jYWxsQ29tcGlsYXRpb25JbmZvLnNpemUoKSA9PSBjYWxsTGlu
a0luZm9JbmRleCk7Ci0gICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Y2FsbFR5cGVG
b3Iob3Bjb2RlSUQpLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCByZWdUMCk7Ci0gICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChDYWxsQ29tcGlsYXRpb25JbmZvKCkpOwotICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aEJlZ2luID0g
YWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9b
Y2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5mbyA9IGluZm87Ci0KLSAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsKSB7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZm
bGVEYXRhOwotICAgICAgICBzaHVmZmxlRGF0YS5udW1QYXNzZWRBcmdzID0gaW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotICAgICAgICBzaHVmZmxlRGF0YS50YWdUeXBlTnVtYmVyID0gR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyOwotICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMg
PQotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKLSAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5y
ZXNpemUoaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7ICsraSkgewotICAgICAgICAgICAgc2h1ZmZs
ZURhdGEuYXJnc1tpXSA9Ci0gICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2Vk
SW5KU1N0YWNrKAotICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpKSAtIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCwKLSAgICAgICAgICAgICAgICAgICAgRGF0
YUZvcm1hdEpTKTsKLSAgICAgICAgfQotICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPQotICAg
ICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVnVDAsIERhdGFGb3JtYXRKUyk7Ci0gICAg
ICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2NvZGVCbG9jayk7Ci0g
ICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOwotICAgICAgICBD
YWxsRnJhbWVTaHVmZmxlcigqdGhpcywgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgp
OwotICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBh
dGhPdGhlciA9IGVtaXROYWtlZFRhaWxDYWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSB7Ci0gICAgICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKLSAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVt
aXROYWtlZFRhaWxDYWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtl
ZENhbGwoKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9y
KG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0K
LSAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwotICAgIAotICAgIGVtaXRQdXRDYWxs
UmVzdWx0KGluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkK
LXsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIGNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGluc3RydWN0aW9uLCBpdGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKLSAgICAgICAgZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvKSwgcmVnVDIpOwotCi0gICAg
bV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRp
b24gPQotICAgICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxUaHVu
a0dlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5vUHRyVGFnPigpKTsKLQotICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpIHsK
LSAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRl
ck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdu
bWVudCgpOwotCi0gICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKLSAgICAKLSAgICBl
bWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2Nh
bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxs
KG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2FsbChvcF90YWlsX2NhbGwsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2Fs
bF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9w
Q2FsbChvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF92YXJhcmdzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX3RhaWxfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgY29tcGlsZU9wQ2FsbChvcF90YWlsX2NhbGxfdmFyYXJncywgY3VycmVudElu
c3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdF9v
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cywgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3RfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGwob3BfY29uc3RydWN0X3ZhcmFyZ3MsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
Y29tcGlsZU9wQ2FsbChvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbCwgY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKG9wX3RhaWxfY2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NhbGxfZXZhbCwgY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KTsKLX0KLSAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21w
aWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF90
YWlsX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZShvcF90YWlsX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotICAgIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NvbnN0cnVjdF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KG9wX2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVF
NjQpCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbDMyXzY0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhiZWYxMmNlYjk1
NjhiYmFjODY4ODQ5ZDgyNDVlY2YyMmI3ZTAxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82
NC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShKSVQpCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSNpbmNsdWRlICJKSVQuaCIK
LQotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCi0jaW5j
bHVkZSAiSklUSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIu
aCIKLSNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCi0jaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUu
aCIKLSNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgotI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9y
cy5oIgotI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgSlND
IHsKLQotdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bikKLXsKLSAgICBpbnQgZHN0ID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotCi0gICAgZW1pdExvYWQoZHN0LCByZWdUMSwgcmVnVDApOwotCi0gICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1p
dEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICByZXQoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3Bf
Y2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwot
fQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX3RhaWxfY2FsbCwgY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KTsKLX0KLSAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF92YXJhcmdzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF90YWlsX2NhbGxfdmFyYXJncywgY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywg
Y3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotICAg
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jYWxsKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2FsbChvcF9j
YWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX3RhaWxfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGNvbXBpbGVPcENhbGwob3BfdGFpbF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGxfZXZh
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGwo
b3BfY2FsbF9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfdmFyYXJncywgY3VycmVu
dEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF90YWlsX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGNvbXBpbGVPcENhbGwob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgY29tcGlsZU9wQ2FsbChvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLSAgICAKLXZvaWQg
SklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2FsbChvcF9jb25zdHJ1Y3RfdmFyYXJncywgY3VycmVu
dEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotICAgIAotdm9pZCBKSVQ6
OmVtaXRfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgY29tcGlsZU9wQ2FsbChvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFt
ZShPcGNvZGVJRCBvcGNvZGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZv
KiBpbmZvKQotewotICAgIGludCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IGFyZ3VtZW50cyA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLSAgICBpbnQg
Zmlyc3RGcmVlUmVnaXN0ZXIgPSBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGZp
cnN0VmFyQXJnT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOwotCi0gICAgZW1pdExv
YWQoYXJndW1lbnRzLCByZWdUMSwgcmVnVDApOwotICAgIFpfSklUT3BlcmF0aW9uX0VKWlogc2l6
ZU9wZXJhdGlvbjsKLSAgICBpZiAob3Bjb2RlID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykKLSAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndh
cmRBcmd1bWVudHM7Ci0gICAgZWxzZQotICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9u
U2l6ZUZyYW1lRm9yVmFyYXJnczsKLSAgICBjYWxsT3BlcmF0aW9uKHNpemVPcGVyYXRpb24sIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIC1maXJzdEZyZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdP
ZmZzZXQpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1maXJzdEZyZWVSZWdpc3RlciksIHJlZ1Qx
KTsKLSAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlzLCByZXR1cm5WYWx1ZUdQUiwgZmFsc2Us
IHJlZ1QxLCByZWdUMSk7Ci0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtKHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVz
KCksIDYgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwot
ICAgIGVtaXRMb2FkKGFyZ3VtZW50cywgcmVnVDIsIHJlZ1Q0KTsKLSAgICBGX0pJVE9wZXJhdGlv
bl9FRkpaWiBzZXR1cE9wZXJhdGlvbjsKLSAgICBpZiAob3Bjb2RlID09IG9wX3RhaWxfY2FsbF9m
b3J3YXJkX2FyZ3VtZW50cykKLSAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1
cEZvcndhcmRBcmd1bWVudHNGcmFtZTsKLSAgICBlbHNlCi0gICAgICAgIHNldHVwT3BlcmF0aW9u
ID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdzRnJhbWU7Ci0gICAgY2FsbE9wZXJhdGlvbihzZXR1cE9w
ZXJhdGlvbiwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUNCksIGZpcnN0VmFyQXJnT2Zm
c2V0LCByZWdUMCk7Ci0gICAgbW92ZShyZXR1cm5WYWx1ZUdQUiwgcmVnVDEpOwotCi0gICAgLy8g
UHJvZmlsZSB0aGUgYXJndW1lbnQgY291bnQuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIENh
bGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QyKTsKLSAgICBsb2FkMzIoaW5mby0+YWRkcmVz
c09mTWF4TnVtQXJndW1lbnRzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdEJpZ2dlc3QgPSBicmFu
Y2gzMihBYm92ZSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9yZTMyKHJlZ1QyLCBpbmZvLT5hZGRy
ZXNzT2ZNYXhOdW1Bcmd1bWVudHMoKSk7Ci0gICAgbm90QmlnZ2VzdC5saW5rKHRoaXMpOwotICAg
IAotICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgotICAgIGVtaXRMb2FkKHRoaXNWYWx1ZSwgcmVn
VDIsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBQYXlsb2FkT2Zm
c2V0ICsgKENhbGxGcmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpKSkpOwotICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDEs
IFRhZ09mZnNldCArIChDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nh
c3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSkpKTsKLSAgICAKLSAgICBhZGRQdHIoVHJ1c3RlZElt
bTMyKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uKQotewotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7
Ci0gICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFj
a1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxG
cmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNhbGxFdmFsLCByZWdUMSk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVt
cHR5KHJlZ1QxKSk7Ci0KLSAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwotICAgIAot
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5m
bygpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIENvZGVPcmlnaW4o
bV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKLQotICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1p
bnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBz
aXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIGVtaXRMb2FkKGNhbGxlZSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICBlbWl0RHVtYlZpcnR1YWxDYWxsKCp2bSgpLCBpbmZvKTsKLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBz
aXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotCi0gICAgc2FtcGxlQ29kZUJs
b2NrKG1fY29kZUJsb2NrKTsKLSAgICAKLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlv
bik7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQotewotICAg
IGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICAvKiBDYWxsZXIg
YWx3YXlzOgotICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNh
bGxGcmFtZS4KLSAgICAgICAgLSBJbml0aWFsaXplcyBBcmd1bWVudENvdW50OyBDYWxsZXJGcmFt
ZTsgQ2FsbGVlLgotCi0gICAgICAgRm9yIGEgSlMgY2FsbDoKLSAgICAgICAgLSBDYWxsZWUgaW5p
dGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KLSAgICAgICAgLSBDYWxsZWUgcmVzdG9yZXMg
Y2FsbEZyYW1lUmVnaXN0ZXIgYmVmb3JlIHJldHVybi4KLQotICAgICAgIEZvciBhIG5vbi1KUyBj
YWxsOgotICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgot
ICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciByZXR1cm4u
Ci0gICAgKi8KLSAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwotICAgIGlmIChvcGNv
ZGVJRCAhPSBvcF9jYWxsX2V2YWwpCi0gICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2Fs
bExpbmtJbmZvKCk7Ci0gICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNv
ZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCi0g
ICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShvcGNvZGVJRCwgaW5zdHJ1Y3Rpb24sIGlu
Zm8pOwotICAgIGVsc2UgewotICAgICAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQ7Ci0gICAgICAgIAotICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGVtaXRMb2FkKHJlZ2lzdGVyT2Zm
c2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwLCBy
ZWdUMSk7Ci0gICAgICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwot
ICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMSwgaW5zdHJ1Y3Rpb25b
T1BDT0RFX0xFTkdUSChvcF9jYWxsKSAtIDJdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0
U2VlblN0cnVjdHVyZUlEKCkpOwotICAgICAgICAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgICAg
ICB9Ci0gICAgCi0gICAgICAgIGFkZFB0cihUcnVzdGVkSW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBz
aXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVn
aXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLQotICAgICAgICBzdG9yZTMyKFRydXN0ZWRJ
bW0zMihhcmdDb3VudCksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNs
b3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsg
UGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotICAgIH0gLy8gU1Ag
aG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3Vt
ZW50Q291bnQgaW5pdGlhbGl6ZWQuCi0gICAgCi0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0g
Q2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwotICAgIHN0b3JlMzIoVHJ1c3RlZElt
bTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7
Ci0gICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOyAvLyByZWdUMSwgcmVnVDAgaG9s
ZHMgY2FsbGVlLgotCi0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVn
aXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLSAg
ICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVT
bG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zm
c2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0cnVjdGlvbik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
IHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQotICAgICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEp
KTsKLQotICAgIERhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAg
IEp1bXAgc2xvd0Nhc2UgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QwLCBhZGRy
ZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKG51bGxwdHIpKTsKLQotICAg
IGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKLQotICAgIEFTU0VSVChtX2NhbGxDb21waWxhdGlvbklu
Zm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBpbmZvLT5zZXRVcENhbGwoQ2Fs
bExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIENvZGVPcmlnaW4obV9ieXRlY29kZU9m
ZnNldCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKENhbGxDb21w
aWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwotICAgIG1f
Y2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExpbmtJbmZvID0gaW5m
bzsKLQotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgaWYgKG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBv
cGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsKLSAgICAgICAgcHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOwotICAgICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZFRhaWxDYWxsKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJ
bmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZENhbGwoKTsKLQotICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihS
ZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAg
IGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICBzYW1wbGVDb2RlQmxvY2sobV9j
b2RlQmxvY2spOwotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKLX0KLQotdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKLXsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2Fs
bF9ldmFsKSB7Ci0gICAgICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGluc3RydWN0aW9uLCBp
dGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7Ci0KLSAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQotICAg
ICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0KLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwo
bV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpOwotCi0gICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgewotICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklU
RGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGFk
ZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNp
emVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICBzYW1wbGVDb2RlQmxv
Y2sobV9jb2RlQmxvY2spOwotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotI2Vu
ZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2MjFkODg2ZTcwYzQxNThlY2Q3YThl
YWE5ZjZkYzExMDVjYjgyOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMTQ2MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFBh
dHJpY2sgR2Fuc3RlcmVyIDxwYXJvZ2FAcGFyb2dhLmNvbT4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpZiBFTkFCTEUo
SklUKQotI2luY2x1ZGUgIkpJVC5oIgotCi0jaW5jbHVkZSAiQmFzaWNCbG9ja0xvY2F0aW9uLmgi
Ci0jaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uLmgiCi0j
aW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgIkludGVycHJldGVySW5saW5lcy5oIgotI2luY2x1
ZGUgIkpJVElubGluZXMuaCIKLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNDYXN0
LmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51
bWVyYXRvci5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJNYXhGcmFtZUV4
dGVudEZvclNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgotI2luY2x1
ZGUgIlN1cGVyU2FtcGxlci5oIgotI2luY2x1ZGUgIlRodW5rR2VuZXJhdG9ycy5oIgotI2luY2x1
ZGUgIlR5cGVMb2NhdGlvbi5oIgotI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgotI2luY2x1
ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgotI2luY2x1ZGUgIldhdGNoZG9nLmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW92KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9lbmQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBSRUxFQVNF
X0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXR1cm5W
YWx1ZUdQUik7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2ptcChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKLSAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJz
cGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxs
b2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLQotICAg
IFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JS
ZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKLQotICAgIGlm
ICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVsc2Ugewot
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5z
dHJ1Y3R1cmUoKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgc3RydWN0
dXJlKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxP
cE92ZXJyaWRlc0hhc0luc3RhbmNlKj4oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0KCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3Ry
dWN0b3IoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNl
VmFsdWUoKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwg
cmVnVDApOwotCi0gICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhh
c0luc3RhbmNlIHdvdWxkIGRvLgotICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJy
YW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7Ci0KLSAgICAv
LyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBp
LmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4K
LSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVt
cCBkb25lID0ganVtcCgpOwotCi0gICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMp
OwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIHJlZ1QwKTsKLQotICAgIGRvbmUu
bGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9wSW5zdGFuY2VvZio+
KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdCgpOwotICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7Ci0gICAgaW50IHByb3RvID0gYnl0ZWNvZGUu
cHJvdG90eXBlKCk7Ci0KLSAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8s
IGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgotICAgIC8vIFdlIHVzZSBy
ZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBh
bmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Rv
LCByZWdUMSk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VW
YWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlzIGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3Ig
U3ltYm9sLmhhc0luc3RhbmNlLgotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdU
MiwgdmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgcHJvdG8p
OwotCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVP
ZmZzZXQpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCks
Ci0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIsIC8vIHZhbHVlCi0gICAg
ICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVnVDQpOyAvLyBzY3JhdGNoCi0g
ICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5zdGFuY2VPZnMuYXBwZW5k
KGdlbik7Ci0gICAgCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCi0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIAotICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3Im
IGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107Ci0gICAgCi0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygp
LCByZWdUMiwgcmVnVDEpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2ZfY3VzdG9tKEluc3Ry
dWN0aW9uKikKLXsKLSAgICAvLyBUaGlzIGFsd2F5cyBnb2VzIHRvIHNsb3cgcGF0aCBzaW5jZSB3
ZSBleHBlY3QgaXQgdG8gYmUgcmFyZS4KLSAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotfQotICAg
IAotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChFcXVh
bCwgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1Qw
KTsKLQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pc191
bmRlZmluZWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdU
MCk7Ci0KLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoVmFsdWVVbmRl
ZmluZWQpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIAotICAgIGlzQ2Vs
bC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNo
VGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBub3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVk
ID0ganVtcCgpOwotCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgp
KSwgcmVnVDEpOwotICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMSwgcmVnVDApOwot
Ci0gICAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGRvbmUubGlu
ayh0aGlzKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwot
ICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfYm9vbGVhbihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIHhvcjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKLSAgICB0ZXN0NjQoWmVybywgcmVnVDAs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpLCByZWdUMCk7Ci0gICAgYm94
Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIHRlc3Q2NChOb25aZXJvLCByZWdUMCwgdGFnVHlwZU51bWJlclJlZ2lzdGVyLCBy
ZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lz
X2NlbGxfd2l0aF90eXBlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgdHlwZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotCi0gICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZh
bHVlRmFsc2UpLCByZWdUMCk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAg
IGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDApOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIo
VmFsdWVGYWxzZSksIHJlZ1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEFTU0VSVChjYWxsRnJhbWVSZWdpc3Rl
ciAhPSByZWdUMSk7Ci0gICAgQVNTRVJUKHJlZ1QxICE9IHJldHVyblZhbHVlR1BSKTsKLSAgICBB
U1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotCi0gICAgLy8gUmV0
dXJuIHRoZSByZXN1bHQgaW4gJWVheC4KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJldHVyblZhbHVlR1BSKTsKLQotICAgIGNoZWNr
U3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwot
ICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX3RvX3ByaW1pdGl2ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBz
cmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwot
ICAgIGlzSW1tLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotCi19Ci0KLXZvaWQgSklUOjplbWl0X29wX3NldF9m
dW5jdGlvbl9uYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdU
MCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kLCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5h
bWUsIHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25vdChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDApOwotCi0gICAgLy8gSW52ZXJ0IGFn
YWluc3QgSlNWYWx1ZShmYWxzZSk7IGlmIHRoZSB2YWx1ZSB3YXMgdGFnZ2VkIGFzIGEgYm9vbGVh
biwgdGhlbiBhbGwgYml0cyB3aWxsIGJlCi0gICAgLy8gY2xlYXIgb3RoZXIgdGhhbiB0aGUgbG93
IGJpdCAod2hpY2ggd2lsbCBiZSAwIG9yIDEgZm9yIGZhbHNlIG9yIHRydWUgaW5wdXRzIHJlc3Bl
Y3RpdmVseSkuCi0gICAgLy8gVGhlbiBpbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKHRydWUpLCB3aGlj
aCB3aWxsIGFkZCB0aGUgdGFnIGJhY2sgaW4sIGFuZCBmbGlwIHRoZSBsb3cgYml0LgotICAgIHhv
cjY0KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1Qw
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKE5vblplcm8sIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwotICAgIHhvcjY0KFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVnVDApOwotCi0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLQotICAgIEdQUlJlZyB2YWx1ZSA9IHJlZ1QwOwotICAgIEdQUlJlZyByZXN1bHQgPSByZWdU
MTsKLSAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgdmFsdWUpOwotICAgIGVtaXRDb252ZXJ0
VmFsdWVUb0Jvb2xlYW4oKnZtKCksIEpTVmFsdWVSZWdzKHZhbHVlKSwgcmVzdWx0LCBzY3JhdGNo
LCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7Ci0KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMiha
ZXJvLCByZXN1bHQpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBzcmMgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNy
YywgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotCi0gICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBjaGVjayBNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgotICAgIEp1bXAgaXNOb3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCkpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1Qx
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOwotICAgIEp1bXAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cg
aGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5l
ZCksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKLQot
ICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIG1hc3F1ZXJh
ZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19Owotdm9pZCBKSVQ6OmVtaXRf
b3Bfam5lcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50
IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7Ci0KLSAgICAvLyBGaXJzdCwgaGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNo
ZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9uIHRoZSBzdHJ1Y3R1cmUuCi0gICAgYWRk
SnVtcChicmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdl
dCk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVj
dHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3
YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlh
dGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsK
LSAgICBhbmQ2NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVu
Y29kZShqc051bGwoKSkpKSwgdGFyZ2V0KTsgICAgICAgICAgICAKLQotICAgIHdhc05vdEltbWVk
aWF0ZS5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIFNwZWNpYWw6OlBvaW50ZXIgcHRyID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUuc3BlY2lhbFBvaW50ZXI7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHNyYywgcmVnVDApOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5j
aFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoYWN0dWFsUG9pbnRlckZvcihtX2NvZGVC
bG9jaywgcHRyKSkpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDEpLCAmY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7Ci0gICAg
ZXF1YWwubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZXEoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDAp
OwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCByZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDEpOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0K
LSAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKLSAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDE7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKLSAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCB2YWx1ZSk7Ci0gICAgZW1pdENvbnZlcnRWYWx1ZVRv
Qm9vbGVhbigqdm0oKSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVn
VDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKTsKLSAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCBy
ZXN1bHQpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXEoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwg
cmVnVDEsIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVn
VDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0KLSAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCByZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVn
VDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
LSAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Ci0gICAgY29weUNh
bGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFt
ZSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0
aW9uVGhyb3csIHJlZ1QwKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKLX0K
LQotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQotewotICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMxID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwg
c3JjMiwgcmVnVDEpOwotICAgIAotICAgIC8vIEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAo
dG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVn
VDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLSAgICAK
LSAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlmIGl0
J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAotICAgIC8vIGlmIGl0
J3MgYSBkb3VibGUuCi0gICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOwotICAgIGxlZnRPSy5saW5rKHRo
aXMpOwotICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7Ci0gICAgcmlnaHRPSy5saW5rKHRoaXMpOwot
Ci0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAg
ICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBlbHNlCi0gICAg
ICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9v
bGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLQotICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BTdHJpY3RFcShjdXJyZW50
SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9uc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBjb21waWxlT3BTdHJpY3RFcShjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
SnVtcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5
cGUgdHlwZSkKLXsKLSAgICBpbnQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcnMoc3JjMSwgcmVnVDAsIHNyYzIsIHJlZ1QxKTsKLQotICAgIC8v
IEp1bXAgc2xvdyBpZiBib3RoIGFyZSBjZWxscyAodG8gY292ZXIgc3RyaW5ncykuCi0gICAgbW92
ZShyZWdUMCwgcmVnVDIpOwotICAgIG9yNjQocmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZkNlbGwocmVnVDIpKTsKLQotICAgIC8vIEp1bXAgc2xvdyBpZiBlaXRoZXIgaXMg
YSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBmaW5lLCBh
bmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBKdW1wIGxlZnRPSyA9
IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJl
Z1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdodE9LID0gYnJhbmNo
SWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDEpKTsK
LSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJp
Y3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KEVxdWFsLCByZWdU
MSwgcmVnVDApLCB0YXJnZXQpOwotICAgIGVsc2UKLSAgICAgICAgYWRkSnVtcChicmFuY2g2NChO
b3RFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
anN0cmljdGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGls
ZU9wU3RyaWN0RXFKdW1wKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBl
OjpTdHJpY3RFcSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BTdHJpY3RFcUp1bXAoY3Vy
cmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBh
cmVTdHJpY3RFcSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7Ci0KLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
LCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RvX251
bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3RWUmVn
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjVlJlZyA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzcmNWUmVnLCByZWdUMCk7Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBpZiAoc3Jj
VlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBpbnQgc3JjVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7Ci0K
LSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50
IGRzdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmNW
UmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7
Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgaWYgKHNyY1ZSZWcgIT0gZHN0
VlJlZykKLSAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3RWUmVnKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZt
KCktPnRvcEVudHJ5RnJhbWUpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdU
Myk7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNl
dCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVs
bHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7Ci0K
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2so
KSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLQotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkNo
ZWNrSWZFeGNlcHRpb25Jc1VuY2F0Y2hhYmxlQW5kTm90aWZ5UHJvZmlsZXIpOwotICAgIEp1bXAg
aXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIp
OwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwotICAgIGlzQ2F0Y2hhYmxlRXhj
ZXB0aW9uLmxpbmsodGhpcyk7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1Qz
KTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVn
VDApOwotICAgIHN0b3JlNjQoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkp
KSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLQotICAgIGxv
YWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIC8vIEZJWE1FOiBjb25zaWRlciBpbmxpbmUg
Y2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50cnksIGluY2x1ZGluZwotICAgIC8v
IGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMK
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4Ci0K
LSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxW
YWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKj4oY3VycmVudEluc3RydWN0aW9uWzNdLnUucG9p
bnRlcik7Ci0gICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgbV9ieXRlY29kZU9m
ZnNldCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVu
dGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgbV9ieXRlY29kZU9mZnNldCk7Ci0gICAgYXV0byBz
a2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKLSAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0
aW9uSGFuZGxlclB0clRhZyk7Ci0gICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYg
KGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JF
YWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewotICAgICAgICAgICAg
SlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUocHJvZmlsZS5tX3Byb2ZpbGUpOwotICAgICAgICB9KTsKLSAgICB9Ci0jZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCi19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhf
cHJvZmlsZShJbnN0cnVjdGlvbiopCi17Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0
aGluZyBoZXJlLi4uCi19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgY3VycmVudFNjb3BlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNT
Y29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBzaXpl
X3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5z
aWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LQotICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFj
ayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUg
PSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBtX3N3aXRj
aGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlT2Zmc2V0LCBkZWZh
dWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwotICAgIGp1bXBUYWJsZS0+ZW5z
dXJlQ1RJVGFibGUoKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktl
eVR5cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgc2l6ZV90IHRhYmxlSW5kZXggPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNjcnV0aW5l
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBjcmVhdGUganVt
cCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVt
ZW50LgotICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVj
b3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVj
b3JkOjpDaGFyYWN0ZXIpKTsKLSAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7Ci0KLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjcnV0aW5lZSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxl
SW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRj
aCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBTdHJpbmdK
dW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFi
bGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQpKTsKLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktleVR5cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKLSAg
ICBqdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgbG9h
ZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7Ci0gICAg
SnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOwotICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9lcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNy
YzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElm
Tm90Q2VsbChyZWdUMCk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJy
YW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3Zl
KFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRo
aXMpOwotICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBjb21wYXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJl
Z1QwKTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRp
YXRlLmxpbmsodGhpcyk7Ci0KLSAgICBhbmQ2NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5l
ZCksIHJlZ1QwKTsKLSAgICBjb21wYXJlNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoVmFs
dWVOdWxsKSwgcmVnVDApOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAg
d2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci0KLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKLSAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0gICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZt
KCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmVQ
dHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2FzTm90SW1tZWRp
YXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAgIGFuZDY0
KFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOwotICAgIGNvbXBhcmU2NChO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZWdUMCk7Ci0KLSAgICB3
YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJl
Z1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfZW50ZXIoSW5zdHJ1Y3Rpb24qKQotewotICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBk
b2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAotICAgIC8vIHJlZ2lz
dGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9u
Z2luZwotICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4K
LSAgICBzaXplX3QgY291bnQgPSBtX2NvZGVCbG9jay0+bV9udW1WYXJzOwotICAgIGZvciAoc2l6
ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2opCi0gICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmly
dHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikub2Zmc2V0KCkpOwotCi0gICAgZW1pdFdyaXRlQmFycmll
cihtX2NvZGVCbG9jayk7Ci0KLSAgICBlbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUs
IHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9m
U2NvcGVDaGFpbigpKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4qIGNhY2hlZFN0cnVjdHVy
ZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5zdHJ1Y3R1cmU7Ci0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSk7Ci0KLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDEpOwotCi0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5hbE9iamVjdFR5cGUpKTsKLSAgICBsb2FkUHRyKGNh
Y2hlZFN0cnVjdHVyZSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVy
bywgcmVnVDIpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFs
LCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGludCBjYWxsZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAm
Y3VycmVudEluc3RydWN0aW9uWzRdLnUuanNDZWxsOwotICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVn
ID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0OwotICAgIFJlZ2lz
dGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSBy
ZWdUMTsKLSAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwotICAgIFJlZ2lzdGVy
SUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcg
PSByZWdUMzsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgp
KSwgcmFyZURhdGFSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFy
ZURhdGFSZWcpKTsKLSAgICB4b3JQdHIoVHJ1c3RlZEltbVB0cihKU0Z1bmN0aW9uUG9pc29uOjpr
ZXkoKSksIHJhcmVEYXRhUmVnKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1
bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVj
dEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsK
LSAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNl
dE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpv
ZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0dXJlUmVnKTsKLQotICAgIGxvYWRQdHIoY2FjaGVk
RnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVnKTsKLSAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNh
bGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNhY2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRy
KEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVlT2JqZWN0cygpKSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoUHRyKE5vdEVxdWFsLCBjYWxsZWVSZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7Ci0gICAg
aGFzU2Vlbk11bHRpcGxlQ2FsbGVlcy5saW5rKHRoaXMpOwotCi0gICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwg
YWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcsIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nh
c2VzKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgc2NyYXRjaFJlZyk7Ci0g
ICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hSZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURh
dGEoKSksIHNjcmF0Y2hSZWcpOwotICAgIHhvclB0cihUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Q
b2lzb246OmtleSgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaFJl
ZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsg
T2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0
Y2hSZWcpOwotICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0
Y2hSZWcpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfY2hlY2tfdGR6KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotfQotCi0K
LS8vIFNsb3cgY2FzZXMKLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZUVxLCByZWdUMCwgcmVnVDEpOwotICAgIGJveEJvb2xlYW4ocmV0dXJuVmFs
dWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXR1cm5WYWx1ZUdQ
Uik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25D
b21wYXJlRXEsIHJlZ1QwLCByZWdUMSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJl
Z1QwKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVy
blZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfamVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LQotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QwLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BS
KSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgdW5zaWduZWQgdGFyZ2V0
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgYXV0byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnBy
ZXRfY2FzdDxPcEluc3RhbmNlb2ZDdXN0b20qPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIGlu
dCBkc3QgPSBieXRlY29kZS5kc3QoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZSgp
OwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLmNvbnN0cnVjdG9yKCk7Ci0gICAgaW50
IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5oYXNJbnN0YW5jZVZhbHVlKCk7Ci0KLSAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5z
dGFuY2VPZkN1c3RvbSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgYm94Qm9vbGVhbihyZXR1
cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwotfQotCi0jZW5kaWYgLy8gVVNF
KEpTVkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KEluc3RydWN0aW9uKikK
LXsKLSAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKLSAgICBpZiAoY2Fu
QmVPcHRpbWl6ZWQoKSkgewotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihQb3NpdGl2
ZU9yWmVybywgVHJ1c3RlZEltbTMyKE9wdGlvbnM6OmV4ZWN1dGlvbkNvdW50ZXJJbmNyZW1lbnRG
b3JMb29wKCkpLAotICAgICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5hZGRy
ZXNzT2ZKSVRFeGVjdXRlQ291bnRlcigpKSkpOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgLy8gRW1pdCB0aGUgc2xv
dyBwYXRoIGZvciB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazoKLSAgICBpZiAoY2FuQmVPcHRp
bWl6ZWQoKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIGNv
cHlDYWxsZWVTYXZlc0Zyb21GcmFtZU9yUmVnaXN0ZXJUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1
ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKLQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk9wdGltaXplLCBtX2J5dGVjb2RlT2Zmc2V0KTsKLSAgICAgICAgSnVtcCBub09wdGltaXpl
ZEVudHJ5ID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIGlm
ICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgICAgICBKdW1wIG9rID0gYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZSwgcmV0dXJuVmFsdWVHUFIsIFRydXN0ZWRJbW1QdHIoYml0d2lz
ZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4oMTAwMCkpKSk7Ci0gICAgICAgICAg
ICBhYm9ydFdpdGhSZWFzb24oSklUVW5yZWFzb25hYmxlTG9vcEhpbnRKdW1wVGFyZ2V0KTsKLSAg
ICAgICAgICAgIG9rLmxpbmsodGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAganVtcChyZXR1cm5W
YWx1ZUdQUiwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICBub09wdGltaXpl
ZEVudHJ5LmxpbmsodGhpcyk7Ci0KLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBP
UENPREVfTEVOR1RIKG9wX2xvb3BfaGludCkpOwotICAgIH0KLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKGl0ZXIpOwotI2VuZGlmCi19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NoZWNrX3RyYXBzKElu
c3RydWN0aW9uKikKLXsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0OChOb25aZXJvLCBBYnNv
bHV0ZUFkZHJlc3MobV92bS0+bmVlZFRyYXBIYW5kbGluZ0FkZHJlc3MoKSkpKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3Bfbm9wKEluc3RydWN0aW9uKikKLXsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3Bfc3VwZXJfc2FtcGxlcl9iZWdpbihJbnN0cnVjdGlvbiopCi17Ci0gICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZvaWQqPigmZ19zdXBlclNh
bXBsZXJDb3VudCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9lbmQo
SW5zdHJ1Y3Rpb24qKQotewotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgQWJzb2x1dGVBZGRy
ZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291bnQpKSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9jaGVja190cmFwcyhJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFuZGxlVHJhcHMpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9uZXdfcmVnZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdSZWdleHAsIG1fY29kZUJsb2NrLT5yZWdleHAoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0TmV3RnVuY0NvbW1vbihJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEp1bXAgbGF6eUp1bXA7Ci0gICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0KLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCwgcmVnVDApOwotI2Vsc2UKLSAgICBlbWl0TG9hZFBheWxvYWQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDApOwotI2VuZGlmCi0gICAgRnVuY3Rpb25FeGVjdXRh
YmxlKiBmdW5jRXhlYyA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkRlY2woY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7Ci0KLSAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IEludGVycHJldGVy
OjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKLSAgICBpZiAob3Bj
b2RlSUQgPT0gb3BfbmV3X2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3
RnVuY3Rpb24sIGRzdCwgcmVnVDAsIGZ1bmNFeGVjKTsKLSAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfZ2VuZXJhdG9yX2Z1bmMpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRzdCwgcmVnVDAsIGZ1bmNFeGVjKTsKLSAgICBlbHNlIGlm
IChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBkc3QsIHJlZ1QwLCBmdW5jRXhlYyk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIEFTU0VSVChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1
bmMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jR2VuZXJhdG9yRnVu
Y3Rpb24sIGRzdCwgcmVnVDAsIGZ1bmNFeGVjKTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX25ld19mdW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1p
dE5ld0Z1bmNDb21tb24oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X2dlbmVyYXRvcl9mdW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgZW1pdE5ld0Z1bmNDb21tb24oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdE5ld0Z1bmNDb21tb24oY3VycmVudEluc3RydWN0aW9u
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2Z1bmMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0TmV3RnVuY0NvbW1vbihjdXJyZW50SW5zdHJ1
Y3Rpb24pOwotfQotICAgIAotdm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7Ci0jZWxz
ZQotICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCBy
ZWdUMCk7Ci0jZW5kaWYKLQotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2Nv
ZGVCbG9jay0+ZnVuY3Rpb25FeHByKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwot
ICAgIE9wY29kZUlEIG9wY29kZUlEID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+dS5vcGNvZGUpOwotCi0gICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5j
X2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCBy
ZWdUMCwgZnVuY3Rpb24pOwotICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0
b3JfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9y
RnVuY3Rpb24sIGRzdCwgcmVnVDAsIGZ1bmN0aW9uKTsKLSAgICBlbHNlIGlmIChvcGNvZGVJRCA9
PSBvcF9uZXdfYXN5bmNfZnVuY19leHApCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCByZWdUMCwgZnVuY3Rpb24pOwotICAgIGVsc2UgewotICAg
ICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCByZWdUMCwgZnVuY3Rpb24pOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
bmV3X2Z1bmNfZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1p
dE5ld0Z1bmNFeHByQ29tbW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX25ld19nZW5lcmF0b3JfZnVuY19leHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBlbWl0TmV3RnVuY0V4cHJDb21tb24oY3VycmVudEluc3RydWN0aW9uKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci19Ci0gICAgCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJh
dG9yX2Z1bmNfZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1p
dE5ld0Z1bmNFeHByQ29tbW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0gICAgCi12b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfYXJyYXkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQg
dmFsdWVzSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBz
aXplID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHZhbHVlc0luZGV4ICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhQcm9maWxl
LCBkc3QsCi0gICAgICAgIGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5QWxsb2NhdGlvblBy
b2ZpbGUsIHJlZ1QwLCBzaXplKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5X3dp
dGhfc2l6ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzaXplSW5kZXggPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzaXplSW5kZXgsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsCi0gICAgICAgIGN1
cnJlbnRJbnN0cnVjdGlvblszXS51LmFycmF5QWxsb2NhdGlvblByb2ZpbGUsIHJlZ1QwKTsKLSNl
bHNlCi0gICAgZW1pdExvYWQoc2l6ZUluZGV4LCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwKLSAgICAgICAg
Y3VycmVudEluc3RydWN0aW9uWzNdLnUuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSk7Ci0jZW5kaWYKLX0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi12b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwot
ICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxs
OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMy
KE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotICAgIAotICAgIG1vdmUoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9ICZtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4XTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0g
ICAgCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVk
QXJyYXlzIGFuZCBBcmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JB
cnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDAp
OwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUs
IENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJU
YWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSku
bGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAg
cGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJl
c3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVy
bkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBi
eVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVt
cFRvRG9uZSkpOwotICAgIAotICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9D
T0RFX0ZPUl9TVFVCKAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJS
b3V0aW5lUHRyVGFnLAotICAgICAgICAiQmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1
YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEo
KSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKLSAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8SklUU3R1
YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsK
LSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxOb1B0clRh
Zz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0
aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJp
YykpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51LmFycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2Nr
LT5hZGRCeVZhbEluZm8oKTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNl
LCByZWdUMCwgcHJvcGVydHksIHJlZ1QxKTsKLQotICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkg
aW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0
aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBp
dCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFs
d2F5cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5n
dGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9u
Ci0gICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRl
bmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKLSAg
ICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJl
c3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KLSAgICAvLyBl
eHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4g
dGhlIHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotCi0g
ICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlKTsKLSAgICBlbWl0QXJy
YXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICBhbmQz
MihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7Ci0KLSAgICBKSVRBcnJh
eU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBQYXRjaGFibGVKdW1w
IGJhZFR5cGU7Ci0KLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxp
a2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0
TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5zdHJ1Y3Rpb24sIG1vZGUsIGJhZFR5cGUpOwotICAg
IAotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSwgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
c2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0KLSAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxh
YmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21w
aWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBQYXRjaGFibGVKdW1wKCks
IGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLQotICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZh
dWx0LCBkc3QsIHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1Bh
dGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0u
cmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgIGlu
dCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKLQotICAgIC8v
IENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2Up
OwotCi0gICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgcmVnVDIpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6
OmNhY2hlZFN0cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZz
ZXQKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGluZGV4LCByZWdUMSk7Ci0gICAgLy8gSWYg
aW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9yYWdl
LCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNzID0g
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdUMCk7
Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICBsb2FkNjQoQmFzZUlu
ZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7Ci0KLSAgICAvLyBPdGhlcndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91
dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVn
VDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICBuZWczMihyZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9QdHIocmVn
VDEsIHJlZ1QxKTsKLSAgICBpbnQzMl90IG9mZnNldE9mRmlyc3RQcm9wZXJ0eSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KG9mZnNldEluQnV0dGVyZmx5KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSkgKiBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkpLCByZWdUMCk7Ci0gICAgCi0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxv
dywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3Ry
dWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QwLCByZWdUMCk7Ci0g
ICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVzRWlnaHQpLCByZWdUMCk7Ci0K
LSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QwKTsKLSAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBKdW1wIGlu
Qm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0KCkpKTsKLQotICAg
IG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bGwoKSkpLCByZWdUMCk7Ci0K
LSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLQotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQ
cm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgc2lnbkV4dGVuZDMyVG9Q
dHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgVGlt
ZXNFaWdodCksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5
cGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBUeXBlTG9jYXRpb24q
IGNhY2hlZFR5cGVMb2NhdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LmxvY2F0aW9uOwot
ICAgIGludCB2YWx1ZVRvUHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlVG9Qcm9maWxlLCByZWdUMCk7Ci0K
LSAgICBKdW1wTGlzdCBqdW1wVG9FbmQ7Ci0KLSAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElm
RW1wdHkocmVnVDApKTsKLQotICAgIC8vIENvbXBpbGUgaW4gYSBwcmVkaWN0aXZlIHR5cGUgY2hl
Y2ssIGlmIHBvc3NpYmxlLCB0byBzZWUgaWYgd2UgY2FuIHNraXAgd3JpdGluZyB0byB0aGUgbG9n
LgotICAgIC8vIFRoZXNlIHR5cGVjaGVja3MgYXJlIGlubGluZWQgdG8gbWF0Y2ggdGhvc2Ugb2Yg
dGhlIDY0LWJpdCBKU1ZhbHVlIHR5cGUgY2hlY2tzLgotICAgIGlmIChjYWNoZWRUeXBlTG9jYXRp
b24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVVbmRlZmluZWQpCi0gICAgICAgIGp1bXBUb0VuZC5h
cHBlbmQoYnJhbmNoSWZVbmRlZmluZWQocmVnVDApKTsKLSAgICBlbHNlIGlmIChjYWNoZWRUeXBl
TG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdWxsKQotICAgICAgICBqdW1wVG9FbmQu
YXBwZW5kKGJyYW5jaElmTnVsbChyZWdUMCkpOwotICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2Nh
dGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZUJvb2xlYW4pCi0gICAgICAgIGp1bXBUb0VuZC5h
cHBlbmQoYnJhbmNoSWZCb29sZWFuKHJlZ1QwLCByZWdUMSkpOwotICAgIGVsc2UgaWYgKGNhY2hl
ZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZUFueUludCkKLSAgICAgICAganVt
cFRvRW5kLmFwcGVuZChicmFuY2hJZkludDMyKHJlZ1QwKSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVk
VHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVtYmVyKQotICAgICAgICBqdW1w
VG9FbmQuYXBwZW5kKGJyYW5jaElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVk
VHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlU3RyaW5nKSB7Ci0gICAgICAgIEp1
bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICAgICAganVtcFRvRW5k
LmFwcGVuZChicmFuY2hJZlN0cmluZyhyZWdUMCkpOwotICAgICAgICBpc05vdENlbGwubGluayh0
aGlzKTsKLSAgICB9Ci0KLSAgICAvLyBMb2FkIHRoZSB0eXBlIHByb2ZpbGluZyBsb2cgaW50byBU
Mi4KLSAgICBUeXBlUHJvZmlsZXJMb2cqIGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IG1fdm0tPnR5
cGVQcm9maWxlckxvZygpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmls
ZXJMb2cpLCByZWdUMik7Ci0gICAgLy8gTG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBUMS4K
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0Vu
dHJ5T2Zmc2V0KCkpLCByZWdUMSk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRo
ZSBsb2cgZW50cnkuCi0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2Zp
bGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSkpOwotCi0gICAgLy8gU3RvcmUgdGhlIHN0
cnVjdHVyZUlEIG9mIHRoZSBjZWxsIGlmIFQwIGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAw
IG9uIHRoZSBsb2cgZW50cnkuCi0gICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9m
aWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKLSAgICBKdW1wIHNraXBJ
c0NlbGwgPSBqdW1wKCk7Ci0gICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlMzIoVHJ1
c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSk7Ci0gICAgc2tpcElzQ2VsbC5saW5rKHRoaXMpOwotCi0gICAg
Ly8gU3RvcmUgdGhlIHR5cGVMb2NhdGlvbiBvbiB0aGUgbG9nIGVudHJ5LgotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCByZWdUMCk7Ci0gICAgc3RvcmU2NChyZWdU
MCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZz
ZXQoKSkpOwotCi0gICAgLy8gSW5jcmVtZW50IHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5KSksIHJl
Z1QxKTsKLSAgICBzdG9yZTY0KHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6
OmN1cnJlbnRMb2dFbnRyeU9mZnNldCgpKSk7Ci0gICAgSnVtcCBza2lwQ2xlYXJMb2cgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxv
Zy0+bG9nRW5kUHRyKCkpKTsKLSAgICAvLyBDbGVhciB0aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBl
bmQgb2YgdGhlIGxvZy4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJv
ZmlsZXJMb2cpOwotICAgIHNraXBDbGVhckxvZy5saW5rKHRoaXMpOwotCi0gICAganVtcFRvRW5k
LmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9w
cm9sb2d1ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVwZGF0ZVRv
cENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBu
b25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1
ZS4iKTsKLSAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNj
cmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJl
Z2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRv
d0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0
Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQo
c2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQobm9u
QXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHBy
b2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKLSAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0g
cmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0
IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJl
Z1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJl
Zywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QyKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QzKTsKLSAg
ICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIEpTVmFsdWVSZWdz
KHJlZ1QyKSwgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZz
ZXQpKTsKLX0KLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0KLXZvaWQgSklUOjplbWl0X29w
X3Byb2ZpbGVfY29udHJvbF9mbG93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBiYXNpY0Jsb2NrTG9jYXRpb24gPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5iYXNpY0Jsb2NrTG9jYXRpb247Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRFeGVjdXRlQ29kZSgqdGhpcyk7Ci0jZWxzZQotICAg
IGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzLCByZWdUMCk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfYXJndW1lbnRfY291bnQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICBsb2FkMzIocGF5bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSwgcmVnVDApOwotICAgIHN1YjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAg
IEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhy
ZWdUMCwgcmVnVDEpOwotICAgIGJveEludDMyKHJlZ1QwLCByZXN1bHQpOwotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
cmVzdF9sZW5ndGgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQg
ZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBudW1Q
YXJhbXNUb1NraXAgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS51bnNpZ25lZFZhbHVlOwotICAg
IGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7
Ci0gICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCB6ZXJvTGVuZ3Ro
ID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lw
KSk7Ci0gICAgc3ViMzIoSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSwgcmVnVDApOwotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0jZW5k
aWYKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBtb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwotI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVnVDApOwotI2VuZGlmCi0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwotI2Vsc2UKLSAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2FyZ3VtZW50KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDAp
OwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7Ci0jZW5k
aWYKLQotICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
LCByZWdUMik7Ci0gICAgSnVtcCBhcmd1bWVudE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1Ro
YW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGluZGV4KSk7Ci0gICAgbG9hZFZhbHVlKGFk
ZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6dGhpc0FyZ3VtZW50ICsgaW5kZXgpLCByZXN1bHRSZWdz
KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBhcmd1bWVudE91dE9mQm91bmRzLmxp
bmsodGhpcyk7Ci0gICAgbW92ZVZhbHVlKGpzVW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOwotCi0g
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVzdWx0UmVncyk7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZWVlOWQyODQ2NTI3MjMxNWYzOGQ5NzIyNmVkNzIyNWU0YmQyZDgwYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjg4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBhcm9nYUBwYXJv
Z2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSklUKQotI2lmIFVTRShKU1ZBTFVFMzJfNjQp
Ci0jaW5jbHVkZSAiSklULmgiCi0KLSNpbmNsdWRlICJCeXRlY29kZVN0cnVjdHMuaCIKLSNpbmNs
dWRlICJDQ2FsbEhlbHBlcnMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJK
SVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTQ2FzdC5oIgot
I2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0
b3IuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCi0jaW5jbHVkZSAiTWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwuaCIKLSNpbmNsdWRlICJPcGNvZGUuaCIKLSNpbmNsdWRlICJTbG93UGF0
aENhbGwuaCIKLSNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKLSNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgSklUOjplbWl0X29wX21vdihJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgIAotICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgoc3JjKSkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgZ2V0Q29uc3RhbnRPcGVy
YW5kKHNyYykpOwotICAgIGVsc2UgewotICAgICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0gICAgfQotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9lbmQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBBU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgIGVt
aXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxLCByZXR1cm5WYWx1
ZUdQUik7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgIGVtaXRGdW5jdGlvbkVw
aWxvZ3VlKCk7Ci0gICAgcmV0KCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2ptcChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKLSAgICBzaXpl
X3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1
cmUtPmlubGluZUNhcGFjaXR5KCkpOwotICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFj
ZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2Nh
dGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKLQotICAgIFJl
Z2lzdGVySUQgcmVzdWx0UmVnID0gcmV0dXJuVmFsdWVHUFI7Ci0gICAgUmVnaXN0ZXJJRCBhbGxv
Y2F0b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKLQot
ICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgIGVs
c2UgewotICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgICAgIGF1dG8gYnV0dGVyZmx5
ID0gVHJ1c3RlZEltbVB0cihudWxscHRyKTsKLSAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Qo
cmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJl
ZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dD
YXNlcyk7Ci0gICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNl
cyk7Ci0gICAgICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgcmVzdWx0UmVnKTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUtPnN0cnVjdHVyZSgpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0
LCBzdHJ1Y3R1cmUpOwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJl
dF9jYXN0PE9wT3ZlcnJpZGVzSGFzSW5zdGFuY2UqPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAg
IGludCBkc3QgPSBieXRlY29kZS5kc3QoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29k
ZS5jb25zdHJ1Y3RvcigpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFz
SW5zdGFuY2VWYWx1ZSgpOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUs
IHJlZ1QwKTsKLSAgICAvLyBXZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFz
SW5zdGFuY2Ugd291bGQgZG8uCi0gICAgSnVtcCBoYXNJbnN0YW5jZVZhbHVlTm90Q2VsbCA9IGVt
aXRKdW1wSWZOb3RKU0NlbGwoaGFzSW5zdGFuY2VWYWx1ZSk7Ci0gICAgSnVtcCBjdXN0b21oYXNJ
bnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0ciht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uUHJvdG9IYXNJbnN0YW5jZVN5bWJv
bEZ1bmN0aW9uKCkpKTsKLQotICAgIC8vIFdlIGtub3cgdGhhdCBjb25zdHJ1Y3RvciBpcyBhbiBv
YmplY3QgZnJvbSB0aGUgd2F5IGJ5dGVjb2RlIGlzIGVtaXR0ZWQgZm9yIGluc3RhbmNlb2YgZXhw
cmVzc2lvbnMuCi0gICAgZW1pdExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMCk7Ci0KLSAg
ICAvLyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNl
JyBpLmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlv
bi4KLSAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVn
VDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGhhc0luc3RhbmNlVmFsdWVOb3RD
ZWxsLmxpbmsodGhpcyk7Ci0gICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLQotfQotCi12b2lkIEpJVDo6ZW1pdF9v
cF9pbnN0YW5jZW9mKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgYXV0
byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcEluc3RhbmNlb2YqPihjdXJyZW50SW5z
dHJ1Y3Rpb24pOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3QoKTsKLSAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS52YWx1ZSgpOwotICAgIGludCBwcm90byA9IGJ5dGVjb2RlLnByb3RvdHlwZSgp
OwotCi0gICAgLy8gTG9hZCB0aGUgb3BlcmFuZHMgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2Ug
dXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmly
c3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2UgaXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdExvYWRQ
YXlsb2FkKHZhbHVlLCByZWdUMik7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHByb3RvLCByZWdUMSk7
Ci0KLSAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEg
Y2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5z
dGFuY2UuCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHZhbHVlKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocHJvdG8pOwotICAgIAotICAgIEpJVEluc3RhbmNlT2ZH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
T2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwKLSAgICAgICAgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICByZWdUMCwgLy8gcmVz
dWx0Ci0gICAgICAgIHJlZ1QyLCAvLyB2YWx1ZQotICAgICAgICByZWdUMSwgLy8gcHJvdG8KLSAg
ICAgICAgcmVnVDMsIHJlZ1Q0KTsgLy8gc2NyYXRjaAotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKLSAgICBtX2luc3RhbmNlT2ZzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRT
dG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKEluc3RydWN0aW9uKikKLXsKLSAgICAvLyBUaGlzIGFsd2F5cyBnb2VzIHRvIHNsb3cg
cGF0aCBzaW5jZSB3ZSBleHBlY3QgaXQgdG8gYmUgcmFyZS4KLSAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0gICAgCi0gICAgYXV0byYgYnl0ZWNv
ZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcEluc3RhbmNlb2YqPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3QoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS52YWx1ZSgpOwotICAgIGludCBwcm90byA9IGJ5dGVjb2RlLnByb3RvdHlwZSgpOwotICAgIAot
ICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5j
ZU9mSW5kZXgrK107Ci0gICAgCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0g
ICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFRhZyhwcm90bywgcmVn
VDMpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZk9w
dGltaXplLCBkc3QsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMCwgcmVnVDIpLCBK
U1ZhbHVlUmVncyhyZWdUMywgcmVnVDEpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNv
bGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwot
Ci0gICAgYXV0byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcEluc3RhbmNlb2ZDdXN0
b20qPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3QoKTsK
LSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZSgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9
IGJ5dGVjb2RlLmNvbnN0cnVjdG9yKCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRl
Y29kZS5oYXNJbnN0YW5jZVZhbHVlKCk7Ci0KLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJl
Z1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QyKTsKLSAgICBlbWl0
TG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUNCwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcmVn
VDIsIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMykpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCBy
ZXR1cm5WYWx1ZUdQUik7Ci19Ci0gICAgCi12b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7
Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5
VmFsdWVUYWcpLCByZWdUMCk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IAotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgaXNDZWxsID0g
YnJhbmNoSWZDZWxsKHJlZ1QxKTsKLQotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0g
anVtcCgpOwotICAgIAotICAgIGlzQ2VsbC5saW5rKHRoaXMpOwotICAgIEp1bXAgaXNNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0gICAgSnVtcCBu
b3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotICAgIAotICAgIGlzTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwotICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBub3RNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xl
YW4oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIAotICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdU
MCk7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJv
b2xlYW5UYWcpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICAKLSAg
ICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwg
cmVnVDApOwotICAgIGNvbXBhcmUzMihCZWxvdywgcmVnVDAsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpMb3dlc3RUYWcgKyAxKSwgcmVnVDApOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICBpbnQgdHlwZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0K
LSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBKdW1wIGlzTm90Q2VsbCA9
IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwg
cmVnVDApOwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRo
aXMpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0KLSAgICBkb25lLmxpbmso
dGhpcyk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QxKTsKLQotICAgIGNvbXBhcmU4KEFib3ZlT3JFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSwgcmVnVDAp
OwotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwot
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
dG9fcHJpbWl0aXZlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChzcmMsIHJlZ1Qx
LCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzSW1tID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk9iamVjdChyZWdUMCkpOwotICAgIGlzSW1tLmxpbmsodGhp
cyk7Ci0KLSAgICBpZiAoZHN0ICE9IHNyYykKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZnVuYyA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG5hbWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIGVtaXRMb2FkUGF5bG9hZChmdW5jLCByZWdUMSk7Ci0gICAgZW1p
dExvYWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNl
dEZ1bmN0aW9uTmFtZSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQg
c3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkVGFn
KHNyYywgcmVnVDApOwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTm90Qm9vbGVhbihyZWdUMSwgSW52YWxpZEdQUlJlZykpOwotICAg
IHhvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJlZ1QwLCAoZHN0ID09IHNyYykpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgY29uZCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKGNvbmQsIHJlZ1QxLCByZWdU
MCk7Ci0KLSAgICBKU1ZhbHVlUmVncyB2YWx1ZShyZWdUMSwgcmVnVDApOwotICAgIEdQUlJlZyBz
Y3JhdGNoID0gcmVnVDI7Ci0gICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QzOwotICAgIGJvb2wgc2hv
dWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBlbWl0Q29udmVydFZh
bHVlVG9Cb29sZWFuKCp2bSgpLCB2YWx1ZSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBmcFJl
Z1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSk7Ci0KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihaZXJvLCByZXN1bHQpLCB0
YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGludCBjb25kID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwotCi0gICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKLSAgICBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7Ci0gICAgSlNWYWx1ZVJlZ3Mg
dmFsdWUocmVnVDEsIHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotICAgIEdQ
UlJlZyByZXN1bHQgPSByZWdUMzsKLSAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCp2bSgp
LCB2YWx1ZSwgcmVzdWx0LCBzY3JhdGNoLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91bGRDaGVja01h
c3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSk7Ci0KLSAg
ICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXN1bHQpLCB0YXJnZXQpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAg
ICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzSW1tZWRpYXRlID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLQotICAgIEp1bXAgaXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0gYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5m
b0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
cmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVtcChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIs
IFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAg
SnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8v
IE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBp
c0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVm
aW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVsbFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcgJiAw
eDEpLCAiIik7Ci0gICAgb3IzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBhZGRKdW1w
KGJyYW5jaElmTnVsbChyZWdUMSksIHRhcmdldCk7Ci0KLSAgICBpc05vdE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQubGluayh0aGlzKTsKLSAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVjdElzRm9yZWln
bi5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotCi0g
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBhZGRK
dW1wKGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0
KTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNz
KHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQp
OwotICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRs
ZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRl
LmxpbmsodGhpcyk7Ci0KLSAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRUYWcg
KyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwgIiIp
OwotICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgYWRkSnVtcChicmFuY2hJ
Zk5vdE51bGwocmVnVDEpLCB0YXJnZXQpOwotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhp
cyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgU3BlY2lhbDo6UG9pbnRlciBwdHIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5zcGVjaWFsUG9pbnRlcjsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwotICAg
IEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0gICAgSnVtcCBlcXVhbCA9
IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIoYWN0dWFsUG9pbnRlckZvciht
X2NvZGVCbG9jaywgcHRyKSkpOwotICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICBzdG9yZTMy
KFRydXN0ZWRJbW0zMigxKSwgJmN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwotICAg
IGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwotICAgIGVxdWFsLmxpbmsodGhpcyk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNy
YzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBzcmMyID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkMihzcmMxLCByZWdU
MSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChy
ZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAs
IHJlZ1QyLCByZWdUMCk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLQotICAgIEp1bXBMaXN0IHN0b3JlUmVz
dWx0OwotICAgIEp1bXBMaXN0IGdlbmVyaWNDYXNlOwotCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5k
KGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3QgZXF1YWwKLQotICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gdGFncyBlcXVhbCBhbmQgSlNDZWxsCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5k
KGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5j
aElmTm90U3RyaW5nKHJlZ1QyKSk7Ci0KLSAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBzdG9y
ZVJlc3VsdC5hcHBlbmQoanVtcCgpKTsKLQotICAgIC8vIEdlbmVyaWMgY2FzZS4KLSAgICBnZW5l
cmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCi0gICAgZ2VuZXJp
Y0Nhc2UubGluayh0aGlzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0K
LSAgICBzdG9yZVJlc3VsdC5saW5rKHRoaXMpOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1
cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2plcShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGludCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0K
LSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gz
MihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0KLSAg
ICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwotfQotCi12
b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCBDb21waWxlT3BFcVR5cGUgdHlwZSwgaW50IGp1bXBUYXJnZXQpCi17Ci0gICAg
SnVtcExpc3QgZG9uZTsKLSAgICBKdW1wTGlzdCBnZW5lcmljQ2FzZTsKLQotICAgIGdlbmVyaWND
YXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIHRhZ3Mgbm90IGVxdWFsCi0KLSAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIHRhZ3MgZXF1YWwgYW5kIEpTQ2VsbAotICAgIGdlbmVyaWND
YXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkpOwotICAgIGdlbmVyaWNDYXNlLmFw
cGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikpOwotCi0gICAgLy8gU3RyaW5nIGNhc2UuCi0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIHJlZ1QwLCByZWdUMik7
Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFU
eXBlOjpFcSA/IE5vblplcm8gOiBaZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwot
ICAgIGRvbmUuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICAvLyBHZW5lcmljIGNhc2UuCi0gICAgZ2Vu
ZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwotICAgIGdlbmVy
aWNDYXNlLmxpbmsodGhpcyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwot
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlw
ZTo6RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKLQot
ICAgIGRvbmUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2plcShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGNvbXBpbGVPcEVxSnVtcFNsb3coaXRlciwgQ29tcGlsZU9wRXFU
eXBlOjpFcSwgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMxID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMiA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJl
Z1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMSwgcmVnVDMpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEp
KTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0KLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCBy
ZWdUMiwgcmVnVDApOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBkc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotCi0gICAgSnVtcExpc3Qgc3RvcmVSZXN1
bHQ7Ci0gICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7Ci0KLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQo
Z2V0U2xvd0Nhc2UoaXRlcikpOyAvLyB0YWdzIG5vdCBlcXVhbAotCi0gICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwKLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQo
YnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNo
SWZOb3RTdHJpbmcocmVnVDIpKTsKLQotICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3Jl
UmVzdWx0LmFwcGVuZChqdW1wKCkpOwotCi0gICAgLy8gR2VuZXJpYyBjYXNlLgotICAgIGdlbmVy
aWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKLSAgICBnZW5lcmlj
Q2FzZS5saW5rKHRoaXMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLQot
ICAgIHN0b3JlUmVzdWx0LmxpbmsodGhpcyk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSks
IHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgaW50IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVtaXRM
b2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaElmQ2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgIGFkZEp1bXAo
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wRXFKdW1w
U2xvdyhpdGVyLCBDb21waWxlT3BFcVR5cGU6Ok5FcSwgY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKLXsKLSAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzIgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCBy
ZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKLQotICAgIC8vIEJhaWwgaWYgdGhlIHRhZ3MgZGlm
ZmVyLCBvciBhcmUgZG91YmxlLgotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMSwgcmVnVDMpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0KLSAgICAvLyBKdW1wIHRvIGEgc2xv
dyBjYXNlIGlmIGJvdGggYXJlIHN0cmluZ3Mgb3Igc3ltYm9scyAobm9uIG9iamVjdCkuCi0gICAg
SnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLSAgICBKdW1wIGZpcnN0SXNP
YmplY3QgPSBicmFuY2hJZk9iamVjdChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RPYmplY3QocmVnVDIpKTsKLSAgICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgZmlyc3RJc09i
amVjdC5saW5rKHRoaXMpOwotCi0gICAgLy8gU2ltcGx5IGNvbXBhcmUgdGhlIHBheWxvYWRzLgot
ICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0gICAgZWxzZQotICAgICAg
ICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotCi0gICAgZW1pdFN0
b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3RyaWN0ZXEoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BTdHJpY3RFcShj
dXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9uc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBjb21waWxlT3BTdHJpY3RFcShjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxSnVtcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJp
Y3RFcVR5cGUgdHlwZSkKLXsKLSAgICBpbnQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0g
ICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKLQot
ICAgIC8vIEJhaWwgaWYgdGhlIHRhZ3MgZGlmZmVyLCBvciBhcmUgZG91YmxlLgotICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcp
KSk7Ci0KLSAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGJvdGggYXJlIHN0cmluZ3Mgb3Ig
c3ltYm9scyAobm9uIG9iamVjdCkuCi0gICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxs
KHJlZ1QxKTsKLSAgICBKdW1wIGZpcnN0SXNPYmplY3QgPSBicmFuY2hJZk9iamVjdChyZWdUMCk7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDIpKTsKLSAgICBub3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgZmlyc3RJc09iamVjdC5saW5rKHRoaXMpOwotCi0gICAgLy8gU2lt
cGx5IGNvbXBhcmUgdGhlIHBheWxvYWRzLgotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6U3RyaWN0RXEpCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1YWwsIHJlZ1Qw
LCByZWdUMiksIHRhcmdldCk7Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9q
c3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxl
T3BTdHJpY3RFcUp1bXAoY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6
OlN0cmljdEVxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFy
ZVN0cmljdEVxLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywg
cmVnVDIpKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0
dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJp
Y3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLSAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9h
ZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMSk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5j
aFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDEpOwotICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omds
b2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVx
dWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QxKTsK
LSAgICBvcjMyKHJlZ1QyLCByZWdUMSk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlz
KTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVs
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwot
ICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgSnVt
cCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsK
LSAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRy
dXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJl
Z1QyKTsKLSAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAg
IEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0
aGlzKTsKLQotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpOdWxsVGFnKSwgcmVnVDIpOwotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMSk7Ci0gICAgYW5kMzIocmVn
VDIsIHJlZ1QxKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05v
dE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGVtaXRTdG9yZUJvb2wo
ZHN0LCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Rocm93KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BS
KTsKLSAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgp
LT50b3BFbnRyeUZyYW1lKTsKLSAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNr
KG9wZXJhdGlvblRocm93LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSAgICBqdW1wVG9F
eGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVy
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0K
LSAgICBKdW1wIGlzSW50MzIgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSkpOwotICAgIGlzSW50MzIubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2Zp
bGluZ1NpdGUoKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwg
cmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdFN0cmluZyhyZWdUMCkpOwotCi0gICAgaWYgKHNyYyAhPSBkc3QpCi0gICAgICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RvX29iamVj
dChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwot
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOwotCi0gICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fdm0pLCByZWdUMyk7Ci0gICAgLy8gb3BlcmF0aW9uVGhyb3cgcmV0dXJucyB0aGUg
Y2FsbEZyYW1lIGZvciB0aGUgaGFuZGxlci4KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06
OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgc3Rv
cmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdUMywgVk06OmNhbGxGcmFt
ZUZvckNhdGNoT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2lu
dGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVS
ZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgY2FsbE9wZXJhdGlvbk5vRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5jYXRjaGFibGVBbmROb3Rp
ZnlQcm9maWxlcik7Ci0gICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlvbiA9IGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0o
KSk7Ci0gICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsKLQotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwotCi0gICAgLy8gTm93IHN0b3JlIHRoZSBleGNlcHRp
b24gcmV0dXJuZWQgYnkgb3BlcmF0aW9uVGhyb3cuCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDMs
IFZNOjpleGNlcHRpb25PZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotCi0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCks
IEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwotCi0gICAgdW5zaWduZWQg
ZXhjZXB0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBlbWl0U3Rv
cmUoZXhjZXB0aW9uLCByZWdUMSwgcmVnVDIpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDIs
IEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0
aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpLCByZWdUMSk7Ci0KLSAgICB1bnNpZ25lZCB0aHJvd25WYWx1ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgZW1pdFN0b3JlKHRocm93blZhbHVlLCByZWdUMSwgcmVn
VDApOwotCi0jaWYgRU5BQkxFKERGR19KSVQpCi0gICAgLy8gRklYTUU6IGNvbnNpZGVyIGlubGlu
ZSBjYWNoaW5nIHRoZSBwcm9jZXNzIG9mIGRvaW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5nCi0gICAg
Ly8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0
YwotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgK
LQotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0
PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqPihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5w
b2ludGVyKTsKLSAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCBtX2J5dGVjb2Rl
T2Zmc2V0KTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NS
RW50ZXJBdENhdGNoQW5kVmFsdWVQcm9maWxlLCBtX2J5dGVjb2RlT2Zmc2V0KTsKLSAgICBhdXRv
IHNraXBPU1JFbnRyeSA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwotICAg
IGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0
clRhZyk7Ci0gICAgc2tpcE9TUkVudHJ5LmxpbmsodGhpcyk7Ci0gICAgaWYgKGJ1ZmZlciAmJiBz
aG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFs
dWVQcm9maWxlQW5kT3BlcmFuZCYgcHJvZmlsZSkgewotICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mg
cmVncyhyZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihw
cm9maWxlLm1fb3BlcmFuZCwgcmVncyk7Ci0gICAgICAgICAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKHByb2ZpbGUubV9wcm9maWxlKTsKLSAgICAgICAgfSk7Ci0gICAgfQotI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2Zp
bGUoSW5zdHJ1Y3Rpb24qKQotewotICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcg
aGVyZS4uLgotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGN1cnJlbnRTY29wZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRT
Y29wZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0
T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0o
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBzaXplX3QgdGFibGVJbmRl
eCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgZGVmYXVs
dE9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQg
c2NydXRpbmVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIC8vIGNy
ZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRj
aCBzdGF0ZW1lbnQuCi0gICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxv
Y2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAgICBtX3N3aXRjaGVzLmFwcGVuZChT
d2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlT2Zmc2V0LCBkZWZhdWx0T2Zmc2V0LCBT
d2l0Y2hSZWNvcmQ6OkltbWVkaWF0ZSkpOwotICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUo
KTsKLQotICAgIGVtaXRMb2FkKHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgdGFibGVJbmRleCk7Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9Q
dHJUYWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hhcihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgLy8gY3JlYXRlIGp1bXAgdGFi
bGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4K
LSAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVt
cFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChq
dW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6
Q2hhcmFjdGVyKSk7Ci0gICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwotCi0gICAgZW1p
dExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uU3dpdGNoQ2hhcldpdGhVbmtub3duS2V5VHlwZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgdGFibGVJbmRleCk7Ci0gICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgc2l6ZV90IHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIFN0cmlu
Z0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBU
YWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVsdE9mZnNldCkpOwotCi0gICAgZW1pdExvYWQo
c2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0
YWJsZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdU
MCk7Ci0gICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVn
VDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsIGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOwotICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMpOwotfQot
Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKTsKLSAgICAKLSAgICAvLyBF
dmVuIHRob3VnaCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBj
b25zdGFudAotICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lk
IHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZwotICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5j
cmVhc2luZyBHQyBwcmVzc3VyZS4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY29kZUJsb2Nr
LT5tX251bVZhcnM7ICsraSkKLSAgICAgICAgZW1pdFN0b3JlKHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGkpLm9mZnNldCgpLCBqc1VuZGVmaW5lZCgpKTsKLQotICAgIEpJVFNsb3dQYXRoQ2FsbCBz
bG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW50ZXIpOwot
ICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9zY29w
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVh
ZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7Ci0gICAg
ZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRl
X3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgY2FsbGVl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBXcml0ZUJhcnJpZXJCYXNl
PEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJmN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmpzQ2Vs
bDsKLSAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcmFy
ZURhdGFSZWcgPSByZWdUNDsKLSAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOwotICAg
IFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1
cmVSZWcgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7
Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7Ci0KLSAgICBlbWl0TG9hZFBheWxv
YWQoY2FsbGVlLCBjYWxsZWVSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rp
b24oY2FsbGVlUmVnKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlv
bjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyYXJl
RGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmls
ZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxv
Y2F0b3JSZWcpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJl
RGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVSZWcpOwotCi0gICAgbG9h
ZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOwotICAgIEp1bXAgaGFzU2Vl
bk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRy
dXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25S
ZWcpKTsKLSAgICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7Ci0KLSAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7Ci0gICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2
YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNo
UmVnLCBzbG93Q2FzZXMpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgZW1pdFN0
b3JlQ2VsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+KiBjYWNoZWRTdHJ1Y3R1cmUg
PSAmY3VycmVudEluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlOwotICAgIGludCB0aGlzUmVnaXN0
ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWQodGhp
c1JlZ2lzdGVyLCByZWdUMywgcmVnVDIpOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QyLCBGaW5h
bE9iamVjdFR5cGUpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGNhY2hlZFN0cnVjdHVyZSwgcmVn
VDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyKSk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NoZWNrX3RkeihJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGVtaXRMb2FkVGFnKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVy
YW5kOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNs
b3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRv
ciwgcmVnVDEpOwotCi0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3Ry
dWN0dXJlSURPZmZzZXQoKSkpKTsKLSAgICAKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQotewotICAg
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAmbV9jb2RlQmxvY2stPmluc3RydWN0
aW9ucygpW2J5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleF07Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOwotICAgIAotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlw
ZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQgQXJndW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9
IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRU
eXBlKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2Nr
KTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVMb2NhdGlvbkxhYmVs
PE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhl
Y3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZh
bEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhz
bG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52
YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRo
KSk7Ci0gICAgCi0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVK
dW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwotCi0gICAg
YnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAg
IG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAg
ICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50
ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVl
KCkpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJh
ZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJ
bmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFn
PihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBw
cm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwotICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwotICAg
IAotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UpOwotCi0gICAgZW1pdExvYWRQYXlsb2FkKHByb3BlcnR5LCByZWdU
MSk7Ci0KLSAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGluY29ycmVjdCAtIHdlJ3JlIHplcm8t
ZXh0ZW5kaW5nIGFuIGludDMyLiBPbiB0aGUgaG90IHBhdGggdGhpcyBkb2Vzbid0IG1hdHRlci4K
LSAgICAvLyBXZSBjaGVjayB0aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEgdWludDMyIGFnYWluc3Qg
dGhlIG1fdmVjdG9yTGVuZ3RoIC0gd2hpY2ggd2lsbCBhbHdheXMgZmFpbCBpZgotICAgIC8vIG51
bWJlciB3YXMgc2lnbmVkIHNpbmNlIG1fdmVjdG9yTGVuZ3RoIGlzIGFsd2F5cyBsZXNzIHRoYW4g
aW50bWF4IChzaW5jZSB0aGUgdG90YWwgYWxsb2NhdGlvbgotICAgIC8vIHNpemUgaXMgYWx3YXlz
IGxlc3MgdGhhbiA0R2IpLiBBcyBzdWNoIHplcm8gZXh0ZW5kaW5nIHdpbGwgaGF2ZSBiZWVuIGNv
cnJlY3QgKGFuZCBleHRlbmRpbmcgdGhlIHZhbHVlCi0gICAgLy8gdG8gNjQtYml0cyBpcyBuZWNl
c3Nhcnkgc2luY2UgaXQncyB1c2VkIGluIHRoZSBhZGRyZXNzIGNhbGN1bGF0aW9uLiBXZSB6ZXJv
IGV4dGVuZCByYXRoZXIgdGhhbiBzaWduCi0gICAgLy8gZXh0ZW5kaW5nIHNpbmNlIGl0IG1ha2Vz
IGl0IGVhc2llciB0byByZS10YWcgdGhlIHZhbHVlIGluIHRoZSBzbG93IGNhc2UuCi0gICAgemVy
b0V4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKLQotICAgIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0g
Y2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLQot
ICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5
cyBhbmQgQXJndW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlN
b2RlKGN1cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJhZFR5cGUpOwotICAgIGFkZFNs
b3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAg
Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLQotICAgIExhYmVsIG5leHRIb3RQYXRo
ID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZh
bENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIFBhdGNoYWJsZUp1
bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGludCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0
aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotCi0gICAgTGFiZWwg
c2xvd1BhdGggPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlEZWZhdWx0LCBkc3Qs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIGJ5
VmFsSW5mbyk7Ci0KLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAg
IG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9k
aXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQg
ZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLSAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0
cnVjdGlvbls1XS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYSBjZWxs
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwoYmFzZSk7Ci0KLSAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJlCi0gICAgZW1p
dExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOwotCi0gICAgLy8gQ29tcHV0
ZSB0aGUgb2Zmc2V0Ci0gICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMik7Ci0gICAgLy8g
SWYgaW5kZXggaXMgbGVzcyB0aGFuIHRoZSBlbnVtZXJhdG9yJ3MgY2FjaGVkIGlubGluZSBzdG9y
YWdlLCB0aGVuIGl0J3MgYW4gaW5saW5lIGFjY2VzcwotICAgIEp1bXAgb3V0T2ZMaW5lQWNjZXNz
ID0gYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0
eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSk7Ci0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihKU09iamVjdDo6b2Zmc2V0T2ZJbmxpbmVTdG9yYWdlKCkpLCByZWdU
MCk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVD
VF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxvYWQzMihC
YXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1
ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotCi0gICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKLSAgICBvdXRPZkxpbmVB
Y2Nlc3MubGluayh0aGlzKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBzdWIzMihBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgbmVnMzIocmVnVDIpOwotICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChy
ZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwotICAgIGxvYWQzMihCYXNl
SW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7Ci0gICAg
Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgZW1pdExv
YWRQYXlsb2FkKGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3Is
IHJlZ1QxKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRy
ZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZFN0cnVjdHVyZVByb3BlcnR5
SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRh
ZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwotCi0gICAgSnVt
cCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0KLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlO
YW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwotICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1Qx
LCByZWdUMCwgdGltZXNQdHIoKSksIHJlZ1QwKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSwgcmVnVDIpOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0
b3JfZ2VuZXJpY19wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBlbnVt
ZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgaW5kZXgg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWRQYXlsb2Fk
KGluZGV4LCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsK
LSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNzKHJlZ1Qx
LCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4T2Zmc2V0
KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdUMik7
Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIHRp
bWVzUHRyKCkpLCByZWdUMCk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZyksIHJlZ1QyKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDIsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgVHlwZUxvY2F0aW9uKiBjYWNo
ZWRUeXBlTG9jYXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5sb2NhdGlvbjsKLSAgICBp
bnQgdmFsdWVUb1Byb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotCi0g
ICAgLy8gTG9hZCBwYXlsb2FkIGluIFQwLiBMb2FkIHRhZyBpbiBUMy4KLSAgICBlbWl0TG9hZFBh
eWxvYWQodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFRhZyh2YWx1ZVRvUHJv
ZmlsZSwgcmVnVDMpOwotCi0gICAgSnVtcExpc3QganVtcFRvRW5kOwotCi0gICAganVtcFRvRW5k
LmFwcGVuZChicmFuY2hJZkVtcHR5KHJlZ1QzKSk7Ci0KLSAgICAvLyBDb21waWxlIGluIGEgcHJl
ZGljdGl2ZSB0eXBlIGNoZWNrLCBpZiBwb3NzaWJsZSwgdG8gc2VlIGlmIHdlIGNhbiBza2lwIHdy
aXRpbmcgdG8gdGhlIGxvZy4KLSAgICAvLyBUaGVzZSB0eXBlY2hlY2tzIGFyZSBpbmxpbmVkIHRv
IG1hdGNoIHRob3NlIG9mIHRoZSAzMi1iaXQgSlNWYWx1ZSB0eXBlIGNoZWNrcy4KLSAgICBpZiAo
Y2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlVW5kZWZpbmVkKQotICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmVW5kZWZpbmVkKHJlZ1QzKSk7Ci0gICAgZWxz
ZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlTnVsbCkKLSAg
ICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bGwocmVnVDMpKTsKLSAgICBlbHNlIGlm
IChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVCb29sZWFuKQotICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmQm9vbGVhbihyZWdUMywgSW52YWxpZEdQUlJl
ZykpOwotICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0g
VHlwZUFueUludCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkludDMyKHJlZ1Qz
KSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBU
eXBlTnVtYmVyKSB7Ci0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdW1iZXIoSlNW
YWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgcmVnVDEpKTsKLSAgICB9IGVsc2UgaWYgKGNhY2hlZFR5
cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVN0cmluZykgewotICAgICAgICBKdW1w
IGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMyk7Ci0gICAgICAgIGp1bXBUb0VuZC5h
cHBlbmQoYnJhbmNoSWZTdHJpbmcocmVnVDApKTsKLSAgICAgICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7Ci0gICAgfQotCi0gICAgLy8gTG9hZCB0aGUgdHlwZSBwcm9maWxpbmcgbG9nIGludG8gVDIu
Ci0gICAgVHlwZVByb2ZpbGVyTG9nKiBjYWNoZWRUeXBlUHJvZmlsZXJMb2cgPSBtX3ZtLT50eXBl
UHJvZmlsZXJMb2coKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVy
TG9nKSwgcmVnVDIpOwotCi0gICAgLy8gTG9hZCB0aGUgbmV4dCBsb2cgZW50cnkgaW50byBUMS4K
LSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0Vu
dHJ5T2Zmc2V0KCkpLCByZWdUMSk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgSlNWYWx1ZSBvbnRvIHRo
ZSBsb2cgZW50cnkuCi0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2Zp
bGVyTG9nOjpMb2dFbnRyeTo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy5wYXlsb2FkKSkpOwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDEs
IFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOwotCi0gICAgLy8gU3RvcmUgdGhlIHN0cnVjdHVy
ZUlEIG9mIHRoZSBjZWxsIGlmIGFyZ3VtZW50IGlzIGEgY2VsbCwgb3RoZXJ3aXNlLCBzdG9yZSAw
IG9uIHRoZSBsb2cgZW50cnkuCi0gICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QzKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9m
aWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKLSAgICBKdW1wIHNraXBO
b3RDZWxsID0ganVtcCgpOwotICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICBzdG9yZTMyKFRy
dXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6
c3RydWN0dXJlSURPZmZzZXQoKSkpOwotICAgIHNraXBOb3RDZWxsLmxpbmsodGhpcyk7Ci0KLSAg
ICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRoZSBsb2cgZW50cnkuCi0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVMb2NhdGlvbiksIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJl
Z1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9m
ZnNldCgpKSk7Ci0KLSAgICAvLyBJbmNyZW1lbnQgdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgotICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkpKSwg
cmVnVDEpOwotICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxv
Zzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKLSAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5j
aFB0cihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9n
LT5sb2dFbmRQdHIoKSkpKTsKLSAgICAvLyBDbGVhciB0aGUgbG9nIGlmIHdlJ3JlIGF0IHRoZSBl
bmQgb2YgdGhlIGxvZy4KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblByb2Nlc3NUeXBlUHJv
ZmlsZXJMb2cpOwotCi0gICAganVtcFRvRW5kLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3Nl
cnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBo
YXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKLSAgICBHUFJSZWcgc2hhZG93UGFja2V0
UmVnID0gcmVnVDA7Ci0gICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhp
cyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJl
ZyA9IHJlZ1QyOwotICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1Bh
Y2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKLQotICAgIHNjcmF0Y2gxUmVnID0g
cmVnVDQ7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNrZXQoc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9sb2df
c2hhZG93X2NoaWNrZW5fdGFpbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwotICAgIHN0YXRpY19hc3NlcnQobm9uQXJnR1BSMCAh
PSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlm
IHRoaXMgaXMgdHJ1ZS4iKTsKLSAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7Ci0g
ICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9u
LWFyZ3VtZW50IHJlZ2lzdGVyLgotICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwotICAg
IGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRj
aDFSZWcsIHNjcmF0Y2gyUmVnKTsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgZW1pdExvYWRUYWcoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEpOwotICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzKHJl
Z1QxLCByZWdUMik7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQsIHJlZ1QzKTsKLSAgICBsb2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQ
YWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgoY3Vy
cmVudEluc3RydWN0aW9uKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8g
VVNFKEpTVkFMVUUzMl82NCkKLSNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNjU2ZTVmZDA4MjY2MGUxYzhhZDMxNDhkNDFkYjkxMjU4YjdjZGQ5ZS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE3
NTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShKSVQpCi0jaW5jbHVkZSAi
SklULmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJEaXJlY3RBcmd1bWVu
dHMuaCIKLSNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXIuaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlcklubGluZXMuaCIKLSNpbmNsdWRlICJK
SVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKLSNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKLSNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCi0jaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRz
LmgiCi0jaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKLSNpbmNsdWRlICJTbG93UGF0
aENhbGwuaCIKLSNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2luY2x1ZGUgPHd0Zi9T
Y29wZWRMYW1iZGEuaD4KLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotCi1u
YW1lc3BhY2UgSlNDIHsKLSNpZiBVU0UoSlNWQUxVRTY0KQotCi12b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25z
dGFudCA9IGlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KTsKLSAgICBpZiAocHJvcGVydHlO
YW1lSXNJbnRlZ2VyQ29uc3RhbnQpCi0gICAgICAgIG1vdmUoSW1tMzIoZ2V0T3BlcmFuZENvbnN0
YW50SW50KHByb3BlcnR5KSksIHJlZ1QxKTsKLSAgICBlbHNlCi0gICAgICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5v
dEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4OwotICAg
IGlmICghcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQpIHsKLSAgICAgICAgbm90SW5kZXgg
PSBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW50KHJlZ1QxKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uo
bm90SW5kZXgpOwotCi0gICAgICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0g
d2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0aGlzIGRvZXNu
J3QgbWF0dGVyLgotICAgICAgICAvLyBXZSBjaGVjayB0aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEg
dWludDMyIGFnYWluc3QgdGhlIG1fdmVjdG9yTGVuZ3RoIC0gd2hpY2ggd2lsbCBhbHdheXMgZmFp
bCBpZgotICAgICAgICAvLyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBp
cyBhbHdheXMgbGVzcyB0aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KLSAg
ICAgICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRl
bmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKLSAg
ICAgICAgLy8gdG8gNjQtYml0cyBpcyBuZWNlc3Nhcnkgc2luY2UgaXQncyB1c2VkIGluIHRoZSBh
ZGRyZXNzIGNhbGN1bGF0aW9uKS4gV2UgemVybyBleHRlbmQgcmF0aGVyIHRoYW4gc2lnbgotICAg
ICAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUg
dmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KLSAgICAgICAgemVyb0V4dGVuZDMyVG9QdHIocmVnVDEs
IHJlZ1QxKTsKLSAgICB9Ci0KLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVn
VDAsIHJlZ1QyLCBwcm9maWxlKTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFw
ZU1hc2spLCByZWdUMik7Ci0KLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUo
cHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludDMyR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXREb3VibGVHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsK
LSAgICAKLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICBKdW1wIHJlc3VsdE9L
ID0gYnJhbmNoSWZOb3RFbXB0eShyZWdUMCk7Ci0gICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRH
ZXRCeVZhbFJlc3VsdElzTm90RW1wdHkpOwotICAgICAgICByZXN1bHRPSy5saW5rKHRoaXMpOwot
ICAgIH0KLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGRzdCk7Ci0KLSAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7Ci0KLSAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZh
bEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxl
LCBkb25lLCBuZXh0SG90UGF0aCkpOwotfQotCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJs
ZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQotewotICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoRG91YmxlU2hhcGUpKTsKLSAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVn
VDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpKTsKLSAgICBsb2FkRG91Ymxl
KEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaERvdWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmcFJl
Z1QwLCBmcFJlZ1QwKSk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRDb250aWd1b3VzTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQotewotICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKLSAgICAKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdU
MiwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgIGxvYWQ2NChCYXNl
SW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKSk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dD
YXNlczsKLX0KLQotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2FkKEluc3Ry
dWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKLXsKLSAgICBKdW1wTGlzdCBzbG93Q2Fz
ZXM7Ci0KLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoLUFycmF5U3RvcmFnZVNoYXBlKSwgcmVnVDIs
IHJlZ1QzKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCBU
cnVzdGVkSW1tMzIoU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUp
KTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKLQotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBB
cnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVnVDApOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKSk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNl
czsKLX0KLQotSklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJ
ZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wJiBmYXN0RG9uZUNhc2UsIEp1bXAm
IHNsb3dEb25lQ2FzZSwgSnVtcExpc3QmIHNsb3dDYXNlcykKLXsKLSAgICAvLyBiYXNlOiByZWdU
MAotICAgIC8vIHByb3BlcnR5OiByZWdUMQotICAgIC8vIHNjcmF0Y2g6IHJlZ1QzCi0KLSAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLQotICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7Ci0gICAgZW1pdEJ5VmFsSWRlbnRpZmll
ckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJlZ1QzLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7
Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNl
dCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcHJv
cGVydHlOYW1lLmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEFjY2Vzc1R5cGU6OkdldCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCi0g
ICAgZmFzdERvbmVDYXNlID0ganVtcCgpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0gICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhpcyk7Ci0KLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBk
c3QsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLSAgICBzbG93RG9uZUNh
c2UgPSBqdW1wKCk7Ci0KLSAgICByZXR1cm4gZ2VuOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwotICAgIAotICAgIGxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKLQotICAg
IGlmICghaXNPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKQotICAgICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCi0gICAgSnVtcCBub25DZWxsID0ganVt
cCgpOwotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawotICAgIEp1
bXAgbm90U3RyaW5nID0gYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApOwotICAgIGVtaXROYWtlZENh
bGwoQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KG1fdm0tPmdldENUSVN0dWIoc3RyaW5nR2V0
QnlWYWxHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwotICAgIEp1bXAgZmFp
bGVkID0gYnJhbmNoVGVzdDY0KFplcm8sIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xF
TkdUSChvcF9nZXRfYnlfdmFsKSk7Ci0gICAgZmFpbGVkLmxpbmsodGhpcyk7Ci0gICAgbm90U3Ry
aW5nLmxpbmsodGhpcyk7Ci0gICAgbm9uQ2VsbC5saW5rKHRoaXMpOwotICAgIAotICAgIGxpbmtT
bG93Q2FzZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0aCBjaGVjawotICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gZW1wdHkgdmFsdWUKLSAgICAKLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7
Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOwotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCByZWdUMCwgcmVnVDEs
IGJ5VmFsSW5mbyk7Ci0KLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwot
ICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9j
ay0+YWRkQnlWYWxJbmZvKCk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKLSAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5k
Q29uc3RhbnRJbnQocHJvcGVydHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25z
dGFudCkKLSAgICAgICAgbW92ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkp
KSwgcmVnVDEpOwotICAgIGVsc2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9w
ZXJ0eSwgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBi
YXNlKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4OwotICAgIGlmICghcHJvcGVydHlOYW1l
SXNJbnRlZ2VyQ29uc3RhbnQpIHsKLSAgICAgICAgbm90SW5kZXggPSBlbWl0UGF0Y2hhYmxlSnVt
cElmTm90SW50KHJlZ1QxKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwotICAgICAg
ICAvLyBTZWUgY29tbWVudCBpbiBvcF9nZXRfYnlfdmFsLgotICAgICAgICB6ZXJvRXh0ZW5kMzJU
b1B0cihyZWdUMSwgcmVnVDEpOwotICAgIH0KLSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0
aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9maWxlKTsKLQotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlw
ZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICAvLyBUT0RPOiBNYXliZSB3ZSBzaG91
bGQgZG8gdGhpcyBpbmxpbmU/Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMyKE5vblplcm8s
IHJlZ1QyLCBUcnVzdGVkSW1tMzIoQ29weU9uV3JpdGUpKSk7Ci0gICAgYW5kMzIoVHJ1c3RlZElt
bTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUg
PSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2Fz
ZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3Vi
bGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBDUkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xvd0Nh
c2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJl
bCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVu
ZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5vdElu
ZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLUpJVDo6SnVt
cExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5k
ZXhpbmdTaGFwZSkKLXsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51LmFycmF5UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIo
aW5kZXhpbmdTaGFwZSkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBi
cmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwo
KTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7Ci0gICAgc3dpdGNo
IChpbmRleGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKLSAgICAgICAgc3RvcmU2NChyZWdU
MywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIERvdWJsZVNoYXBlOiB7Ci0gICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZO
b3RJbnQzMihyZWdUMyk7Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QzLCBmcFJl
Z1QwKTsKLSAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAgICAgICAgbm90SW50Lmxpbmso
dGhpcyk7Ci0gICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDMpOwotICAg
ICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMywgZnBSZWdUMCk7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoRG91YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZw
UmVnVDApKTsKLSAgICAgICAgcmVhZHkubGluayh0aGlzKTsKLSAgICAgICAgc3RvcmVEb3VibGUo
ZnBSZWdUMCwgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgY2FzZSBDb250aWd1b3VzU2hhcGU6Ci0gICAgICAgIHN0b3JlNjQo
cmVnVDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgZW1p
dFdyaXRlQmFycmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBD
UkFTSCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVt
cCgpOwotICAgIG91dE9mQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJm
bHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0gICAgCi0gICAgZW1pdEFycmF5UHJvZmls
ZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgCi0gICAgYWRkMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMSwgcmVnVDMpOwotICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVn
VDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJsaWNMZW5ndGgoKSkpOwotICAgIGp1bXAoKS5saW5r
VG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAK
LSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUpCi17Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
IAotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIFRydXN0
ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOwotICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKLQotICAgIEp1bXAgZW1wdHkgPSBicmFuY2hU
ZXN0NjQoWmVybywgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCwgQXJyYXlTdG9y
YWdlOjp2ZWN0b3JPZmZzZXQoKSkpOwotCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQodGhpcyk7Ci0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN0b3JlNjQocmVn
VDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVj
dG9yT2Zmc2V0KCkpKTsKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgSnVtcCBlbmQgPSBq
dW1wKCk7Ci0gICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxl
U3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIo
MSksIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVzSW5WZWN0b3JPZmZzZXQo
KSkpOwotICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQXJyYXlTdG9y
YWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0KLSAgICBh
ZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNz
KHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Ci0gICAgc3ViMzIoVHJ1c3Rl
ZEltbTMyKDEpLCByZWdUMSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7
Ci0KLSAgICBlbmQubGluayh0aGlzKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQot
Ci1KSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQdXRLaW5k
IHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcExpc3QmIGRvbmVD
YXNlcywgSnVtcExpc3QmIHNsb3dDYXNlcykKLXsKLSAgICAvLyBiYXNlOiByZWdUMAotICAgIC8v
IHByb3BlcnR5OiByZWdUMQotICAgIC8vIHNjcmF0Y2g6IHJlZ1QyCi0KLSAgICBpbnQgYmFzZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QxKSk7Ci0gICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5m
bywgcmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7Ci0KLSAgICAvLyBXcml0
ZSBiYXJyaWVyIGJyZWFrcyB0aGUgcmVnaXN0ZXJzLiBTbyBhZnRlciBpc3N1aW5nIHRoZSB3cml0
ZSBiYXJyaWVyLAotICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOwotCi0gICAgSklUUHV0QnlJ
ZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6
c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksIHB1dEtp
bmQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLSAgICBkb25lQ2FzZXMuYXBwZW5k
KGp1bXAoKSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBnZW4u
c2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCByZWdUMCwg
cHJvcGVydHlOYW1lLmltcGwoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKLSAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICByZXR1
cm4gZ2VuOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQnlWYWxJ
bmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5ieVZhbEluZm87Ci0KLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotICAgIExh
YmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFz
ZSwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7Ci0gICAgYm9vbCBpc0Rp
cmVjdCA9IEludGVycHJldGVyOjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bj
b2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlv
blB1dEJ5VmFsT3B0aW1pemUsIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbyk7Ci0KLSAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0
aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVj
dGlvbkluZGV4Kys7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSAgICBpbnQzMl90
IG9wdGlvbnMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCwgcmVnVDEpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDAsIG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7Ci0gICAgaW50
MzJfdCBvcHRpb25zID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsIHJlZ1Qx
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QwLCBtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9z
ZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1Qw
KTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bNV0udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Q
dXRHZXR0ZXJTZXR0ZXIsIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDEsIHJlZ1QyKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QxKTsKLSAgICBpbnQzMl90
IGF0dHJpYnV0ZXMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCwgcmVnVDIp
OwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QwLCByZWdU
MSwgYXR0cmlidXRlcywgcmVnVDIpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCwgcmVnVDEpOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRT
ZXR0ZXJCeVZhbCwgcmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2RlbF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGlu
dCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVy
dHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRl
QnlJZEpTUmVzdWx0LCBkc3QsIHJlZ1QwLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0
eSkuaW1wbCgpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgcmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGludCByZXN1bHRWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAot
ICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNp
dGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJl
Z2lzdGVycygpLAotICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0KTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
LQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOwotICAgIAotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAg
ICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRl
SW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKLSAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1Zh
bHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldERpcmVjdCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
LQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5k
ZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0
aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7
Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotICAgIAotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotICAgIAotICAgIGlmICgqaWRlbnQgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChyZWdUMCwg
cmVnVDEsIG1fYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
Ci0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxs
U2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxl
UmVnaXN0ZXJzKCksCi0gICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwg
SlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7
Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGludCByZXN1bHRWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIGludCB0aGlzVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHRoaXNW
UmVnLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
VlJlZyk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCB0aGlzVlJlZyk7
Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVj
b2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAg
ICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Qw
KSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCBBY2Nlc3NUeXBlOjpHZXRXaXRoVGhpcyk7Ci0gICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1
bXAoKSk7Ci0gICAgbV9nZXRCeUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJl
Zyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IHJlc3VsdFZSZWcgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKSk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+
aW1wbCgpKTsKLQotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGludCByZXN1
bHRWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCkpOwotCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBn
ZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKLSAgICAK
LSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNh
bGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCByZWdUMSwgaWRlbnQtPmltcGwoKSk7
Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCB2YWx1ZVZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwotICAgIHVuc2lnbmVkIGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51LnB1dEJ5SWRG
bGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKLQotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8g
cGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3Jl
IG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJl
ZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUg
Y29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMg
YXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcnMoYmFzZVZSZWcsIHJlZ1QwLCB2YWx1ZVZSZWcsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSklUUHV0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVP
ZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1
YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksCi0gICAgICAg
IGRpcmVjdCA/IERpcmVjdCA6IE5vdERpcmVjdCk7Ci0gICAgCi0gICAgZ2VuLmdlbmVyYXRlRmFz
dFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0gICAg
Ci0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlVlJlZywgdmFsdWVWUmVnLCBTaG91bGRGaWx0ZXJC
YXNlKTsKLQotICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwotCi0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKLQotICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4odGhpcyk7Ci0gICAgCi0gICAgSklUUHV0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9wdXRCeUlkc1ttX3B1dEJ5SWRJbmRleCsrXTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIHJlZ1QxLCBy
ZWdUMCwgaWRlbnQtPmltcGwoKSk7Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCByZXN1bHRWUmVnID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZVZSZWcgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7
Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0KLSAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpJVElu
QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0
ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNl
dDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIGlkZW50LT5pbXBsKCksIEpT
VmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBtX2luQnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IHJlc3VsdFZS
ZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKSk7Ci0KLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlk
c1ttX2luQnlJZEluZGV4KytdOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7
Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkpOwotCi0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRWYXJJbmplY3Rpb25DaGVjayhib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tz
KQotewotICAgIGlmICghbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCi0gICAgICAgIHJldHVybjsK
LSAgICBhZGRTbG93Q2FzZShicmFuY2g4KEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLT52YXJJbmplY3Rpb25XYXRjaHBvaW50KCktPmFkZHJlc3NPZlN0
YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRSZXNvbHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MsIHVuc2lnbmVkIGRlcHRoKQotewotICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29w
ZSwgcmVnVDApOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQotICAg
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVn
VDApOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfcmVzb2x2ZV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBz
Y29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4oY29waWVkSW5zdHJ1Y3Rpb24o
Y3VycmVudEluc3RydWN0aW9uKVs0XS51Lm9wZXJhbmQpOwotICAgIHVuc2lnbmVkIGRlcHRoID0g
Y3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKLQotICAgIGF1dG8gZW1pdENvZGUgPSBb
Jl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5
cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxW
YXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgot
ICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgSlNTY29wZSogY29uc3RhbnRTY29wZSA9
IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5cGUsIG1fY29kZUJs
b2NrKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2NvcGUpOwotICAgICAg
ICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29s
dmVUeXBlKSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY29uc3RhbnRTY29wZSks
IHJlZ1QwKTsKLSAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVt
aXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSksIGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVs
ZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb25b
Nl0udS5qc0NlbGwuZ2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBEeW5hbWljOgot
ICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNr
czoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0K
LSAgICB9OwotCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmY3Vy
cmVudEluc3RydWN0aW9uWzRdLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9w
ZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMp
OwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7
Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93
Q2FzZShqdW1wKCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1
Y3R1cmVDaGVjayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCi17Ci0gICAg
bG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVn
VDEpKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSkpOwotfQotCi12
b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyBy
ZWcpCi17Ci0gICAgbG9hZFB0cihvcGVyYW5kLCByZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoSlNWYWx1ZSoqIG9wZXJhbmQsIEdQUlJlZyByZWcpCi17
Ci0gICAgbG9hZFB0cihvcGVyYW5kLCByZWcpOwotICAgIGxvYWRQdHIocmVnLCByZWcpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDApOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBHZXRQdXRJbmZvKGNvcGllZEluc3RydWN0aW9uKGN1cnJlbnRJ
bnN0cnVjdGlvbilbNF0udS5vcGVyYW5kKS5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoq
IHN0cnVjdHVyZVNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuc2xvdCgp
OwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dCo+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVyKTsKLQotICAgIGF1dG8gZW1pdENv
ZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9w
ZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEds
b2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUs
IHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24g
c2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRoZSBHbG9i
YWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNraW5nIGZv
ciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDA7Ci0g
ICAgICAgICAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDA7Ci0gICAgICAgICAgICBHUFJSZWcgb2Zm
c2V0ID0gcmVnVDE7Ci0gICAgICAgICAgICBHUFJSZWcgc2NyYXRjaCA9IHJlZ1QyOwotCi0gICAg
ICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRhPEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1w
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJhbmNoUHRyKEVxdWFsLCBiYXNlLCBUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOwotICAgICAgICAgICAgfSkpOwot
Ci0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUg
PSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0
T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9m
ZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRo
aXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
T2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgICAgICAgICAgbmVnMzIo
b2Zmc2V0KTsKLSAgICAgICAgICAgIHNpZ25FeHRlbmQzMlRvUHRyKG9mZnNldCwgb2Zmc2V0KTsK
LSAgICAgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoc2NyYXRjaCwgb2Zmc2V0LCBUaW1lc0VpZ2h0
LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBy
ZXN1bHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9i
YWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAg
ICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBp
ZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJl
Z1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBv
aW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMCk7Ci0gICAg
ICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlw
ZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykgLy8gVERaIGNoZWNr
LgotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5q
ZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAg
ICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNl
KGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVW
YXI6Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9w
ZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
fQotICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMyKCZj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMy
KEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8g
VDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEdsb2Jh
bFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRy
dXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAg
ICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQ
cm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAg
ICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5v
dEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29kZShy
ZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZW1pdFB1dFZp
cnR1YWxSZWdpc3Rlcihkc3QpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0g
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRp
b25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNo
cG9pbnRTZXQqIHNldCkKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDAsIG9wZXJh
bmQpOwotfQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KEpTVmFsdWUq
KiBhZGRyZXNzT2ZPcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKiBpbmRpcmVjdFdh
dGNocG9pbnRTZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMSk7Ci0gICAgZW1pdE5v
dGlmeVdyaXRlKHJlZ1QxKTsKLSAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJlZ1QxKTsK
LSAgICBzdG9yZVB0cihyZWdUMCwgcmVnVDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50
U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5
V3JpdGUoc2V0KTsKLSAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lz
dGVyKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7Ci0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhjb3BpZWRJ
bnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pWzRdLnUub3BlcmFuZCk7Ci0gICAgUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0
dXJlKiogc3RydWN0dXJlU2xvdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5z
bG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Kj4oJmN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOwotCi0gICAgYXV0byBl
bWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2Fk
Rm9yT3BlcmFuZCkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhz
Y29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVj
dGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhl
IEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCByZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tp
bmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgotICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDIpOwotCi0gICAgICAgICAgICBqaXRBc3NlcnQoc2NvcGVkTGFtYmRh
PEp1bXAodm9pZCk+KFsmXSAoKSAtPiBKdW1wIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gYnJh
bmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKLSAgICAgICAgICAgIH0pKTsKLQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAg
ICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEp
OwotICAgICAgICAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRp
bWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jay0+Z2xvYmFs
T2JqZWN0KCksIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6
Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNj
b3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rp
b25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAg
ICAgaWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkp
ICYmIChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEds
b2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewotICAgICAgICAgICAgICAg
IC8vIFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5
cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAg
ICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBl
bWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVy
YW5kU2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5k
U2xvdCksIHJlZ1QwKTsKLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5
KHJlZ1QwKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChi
aXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCBiaXR3aXNlX2Nhc3Q8
V2F0Y2hwb2ludFNldCoqPigmY3VycmVudEluc3RydWN0aW9uWzVdKSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxK
U1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lndh
dGNocG9pbnRTZXQpOwotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihjb25zdGFudFNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5k
U2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOwotICAg
ICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAg
Y2FzZSBEeW5hbWljOgotICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2Fz
ZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgfTsKLQotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIo
JmN1cnJlbnRJbnN0cnVjdGlvbls0XSwgcmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50
byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAg
ICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAg
ICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAg
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2Rl
KHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJ
bmZvKGNvcGllZEluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbilbNF0udS5vcGVyYW5kKTsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsK
LSAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7Ci0gICAgICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdGhy
b3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwotICAgICAgICBz
bG93UGF0aENhbGwuY2FsbCgpOwotICAgIH0gZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFRvU2NvcGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBhcmd1bWVudHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGlu
dCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQWRkcmVz
cyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBpbnQgYXJndW1lbnRzID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7Ci0gICAgc3RvcmU2NChyZWdUMSwgQWRkcmVzcyhy
ZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihX
cml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50
cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLX0KLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVF
NjQpCi0KLSNpZiBVU0UoSlNWQUxVRTY0KQotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5z
aWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17Ci0g
ICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUg
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwotICAgIH0KLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG93bmVyLCByZWdUMCk7Ci0gICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUg
PT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkK
LSAgICAgICAgb3duZXJOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1
bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2goKnZtKCksIHJlZ1Qw
LCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0
aCwgcmVnVDApOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKLQot
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3Vs
ZEZpbHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmICht
b2RlID09IFNob3VsZEZpbHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZh
bHVlKSAKLSAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJp
ZXJNb2RlIG1vZGUpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZh
bHVlKQotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0g
ICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7Ci0KLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0
ZXJWYWx1ZSkgCi0gICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwotfQotCi0jZWxzZSAv
LyBVU0UoSlNWQUxVRTY0KQotCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcih1bnNpZ25lZCBv
d25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKLXsKLSAgICBKdW1w
IHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkgewotICAgICAgICBlbWl0TG9hZFRhZyh2YWx1
ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDAp
OwotICAgIH0KLSAgICAKLSAgICBlbWl0TG9hZChvd25lciwgcmVnVDAsIHJlZ1QxKTsKLSAgICBK
dW1wIG93bmVyTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1v
ZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKQotICAgICAgICBvd25lck5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5F
ZGVuID0gYmFycmllckJyYW5jaCgqdm0oKSwgcmVnVDEsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCByZWdUMSk7Ci0gICAgb3duZXJJc1Jl
bWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwotCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKLSAgICAgICAgb3du
ZXJOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUg
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIAotICAgICAgICB2YWx1ZU5vdENl
bGwubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lciwgdW5zaWduZWQgdmFsdWUsIFdyaXRlQmFycmllck1vZGUgbW9kZSkKLXsKLSAgICBKdW1w
IHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkgewotICAg
ICAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwotICAgICAgICB2YWx1ZU5vdENlbGwgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIH0KLQotICAgIGVtaXRXcml0ZUJhcnJpZXIob3du
ZXIpOwotCi0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpIAotICAgICAgICB2YWx1
ZU5vdENlbGwubGluayh0aGlzKTsKLX0KLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0KLXZv
aWQgSklUOjplbWl0V3JpdGVCYXJyaWVyKEpTQ2VsbCogb3duZXIpCi17Ci0gICAgSnVtcCBvd25l
cklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJyYW5jaCgqdm0oKSwgb3duZXIsIHJlZ1Qw
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCBvd25l
cik7Ci0gICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbi5saW5rKHRoaXMpOwotfQotCi12b2lk
IEpJVDo6ZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZWdp
c3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQotewotICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNT
eW1ib2woKSkKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIGNl
bGwsIFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvLT5jYWNoZWRTeW1ib2wuZ2V0KCkpKSk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcoY2VsbCkp
OwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2VsbCwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUo
KSksIHNjcmF0Y2gpOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVh
bCwgc2NyYXRjaCwgVHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSkpOwotICAgIH0K
LX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKLXsKLSAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJm1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOwotICAgIAotICAgIFBh
dGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAg
c3dpdGNoIChhcnJheU1vZGUpIHsKLSAgICBjYXNlIEpJVEludDMyOgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0SW50MzJHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dERvdWJsZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENv
bnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1p
dEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgSklURGlyZWN0QXJndW1lbnRzOgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRTY29wZWRBcmd1bWVudHM6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBU
eXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlN
b2RlKTsKLSAgICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5
cGUpOwotICAgICAgICBlbHNlIAotICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlw
ZWRBcnJheUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7Ci0gICAgCi0gICAgcGF0
Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9B
c3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJl
dHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRy
ZXNzVG9TbG93UGF0aCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9j
YXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRP
ZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwotICAgIAotICAgIHBh
dGNoQnVmZmVyLmxpbmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0
KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKLSAgICAKLSAgICBieVZhbEluZm8tPnN0
dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ss
IHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIGdl
dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2Rl
QmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKLSAgICAKLSAgICBNYWNyb0Fz
c2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0aW9u
TGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUo
KS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9u
Q2FsbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihyZXR1cm5BZGRy
ZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0QnlWYWxHZW5l
cmljKSk7Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElk
KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKLXsKLSAgICBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uID0gJm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5
dGVjb2RlSW5kZXhdOwotCi0gICAgSnVtcCBmYXN0RG9uZUNhc2U7Ci0gICAgSnVtcCBzbG93RG9u
ZUNhc2U7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRv
ciBnZW4gPSBlbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHByb3BlcnR5TmFtZSwgZmFzdERvbmVDYXNlLCBzbG93RG9uZUNhc2UsIHNsb3dDYXNl
cyk7Ci0KLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2sp
OwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVz
cyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJu
QWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZhc3REb25lQ2FzZSwg
YnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXBUb0RvbmUpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dEb25lQ2FzZSwgYnlWYWxJbmZv
LT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb05leHRI
b3RQYXRoKSk7Ci0gICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQotICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2VwdGlvbkhh
bmRsZXIpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fY2FsbHMpIHsKLSAg
ICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKLSAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
Y2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKLSAgICB9Ci0gICAgZ2VuLmZpbmFsaXpl
KHBhdGNoQnVmZmVyLCBwYXRjaEJ1ZmZlcik7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVm
ZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIGdldF9ieV92YWwg
d2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQg
JXAiLCBwcm9wZXJ0eU5hbWUuaW1wbCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmcoKm1fY29k
ZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7Ci0gICAgYnlWYWxJbmZvLT5z
dHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwotCi0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hK
dW1wKGJ5VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91
dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihN
YWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25Q
dHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpKTsKLX0KLQotdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKLXsKLSAg
ICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJm1fY29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOwotICAgIAotICAgIFBhdGNoYWJsZUp1
bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBib29sIG5lZWRzTGlu
a0ZvcldyaXRlQmFycmllciA9IGZhbHNlOwotCi0gICAgc3dpdGNoIChhcnJheU1vZGUpIHsKLSAg
ICBjYXNlIEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJ
VERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGln
dW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIg
PSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlv
biwgYmFkVHlwZSk7Ci0gICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmllciA9IHRydWU7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFR5cGVkQXJyYXlUeXBlIHR5cGUg
PSB0eXBlZEFycmF5VHlwZUZvckpJVEFycmF5TW9kZShhcnJheU1vZGUpOwotICAgICAgICBpZiAo
aXNJbnQodHlwZSkpCi0gICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50VHlwZWRBcnJheVB1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7Ci0gICAgICAgIGVsc2Ug
Ci0gICAgICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENv
ZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+
OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgcGF0
Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3Mo
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFk
ZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8t
PmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkp
OwotICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKLSAgICAgICAgQVNTRVJUKHJl
bW92ZUNvZGVQdHJUYWcobV9jYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkp
ID09IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKLSAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBtX2NhbGxzLmxhc3Qo
KS5jYWxsZWUpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6
OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92
YWxfZGlyZWN0OwotICAgIGlmICghaXNEaXJlY3QpIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9j
aywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2Vs
aW5lIHB1dF9ieV92YWwgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKLSAgICAgICAgCi0g
ICAgfSBlbHNlIHsKLSAgICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NP
REVfRk9SX1NUVUIoCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0
dWJSb3V0aW5lUHRyVGFnLAotICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWxfZGlyZWN0
IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5k
YXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7Ci0gICAgfQotICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxK
SVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5v
UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwg
RnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwotfQotCi12b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKLXsKLSAgICBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gJm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXhdOwotCi0gICAgSnVtcExpc3QgZG9uZUNhc2VzOwotICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1pdFB1dEJ5VmFsV2l0aENh
Y2hlZElkKGJ5VmFsSW5mbywgY3VycmVudEluc3RydWN0aW9uLCBwdXRLaW5kLCBwcm9wZXJ0eU5h
bWUsIGRvbmVDYXNlcywgc2xvd0Nhc2VzKTsKLQotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIobV9jb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhp
cywgbV9jb2RlQmxvY2spOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9j
YXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3Jl
YXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRP
ZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwotICAgIHBhdGNoQnVm
ZmVyLmxpbmsoZG9uZUNhc2VzLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQo
YnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwotICAgIGlmICghbV9leGNlcHRpb25DaGVj
a3MuZW1wdHkoKSkKLSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywg
YnlWYWxJbmZvLT5leGNlcHRpb25IYW5kbGVyKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgY2Fs
bFNpdGUgOiBtX2NhbGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0g
ICAgfQotICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0Y2hCdWZmZXIpOwotCi0gICAg
YnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAg
IG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAg
ICJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0
dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJl
Y3QiIDogIiIsIHByb3BlcnR5TmFtZS5pbXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygq
bV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKLSAgICBieVZhbElu
Zm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZvKCk7Ci0KLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaEp1bXAoYnlWYWxJbmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0
dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJU
YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5j
dGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KHB1dEtpbmQgPT0gRGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Ci19Ci0KLQot
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCi17Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwot
ICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0g
ICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9
IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKLSAg
ICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7Ci0jZWxzZQotICAgIFJlZ2lzdGVySUQgYmFz
ZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsKLSAgICBKU1ZhbHVl
UmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIFJlZ2lzdGVySUQg
c2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsKLSNlbmRp
ZgotCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgc2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBz
Y3JhdGNoLCBUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzVHlwZSkpOwotICAgIAotICAgIGxv
YWQzMihBZGRyZXNzKGJhc2UsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5ndGgoKSksIHNj
cmF0Y2gyKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJv
cGVydHksIHNjcmF0Y2gyKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKE5v
blplcm8sIEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZk1hcHBlZEFyZ3Vt
ZW50cygpKSkpOwotICAgIAotICAgIGxvYWRWYWx1ZShCYXNlSW5kZXgoYmFzZSwgcHJvcGVydHks
IFRpbWVzRWlnaHQsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0KTsK
LSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1p
dFNjb3BlZEFyZ3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSkKLXsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5
ID0gcmVnVDE7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwot
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIg
PSByZWdUNDsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2gzID0gcmVnVDU7Ci0jZWxzZQotICAgIFJl
Z2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSBy
ZWdUNDsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2gzID0gcmVnVDU7Ci0jZW5kaWYKLQotICAgIGxv
YWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIHNjcmF0Y2gp
OwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1
c3RlZEltbTMyKFNjb3BlZEFyZ3VtZW50c1R5cGUpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFz
ZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHNjcmF0Y2gzKTsKLSAgICB4
b3JQdHIoVHJ1c3RlZEltbVB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRj
aDMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0
eSwgQWRkcmVzcyhzY3JhdGNoMywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3Ro
SW5TdG9yYWdlKCkpKSk7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZUYWJsZSgpKSwgc2NyYXRjaCk7Ci0gICAgeG9yUHRyKFRydXN0ZWRJ
bW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHNjcmF0Y2gpOwotICAgIGxvYWQz
MihBZGRyZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxlbmd0aCgp
KSwgc2NyYXRjaDIpOwotICAgIEp1bXAgb3ZlcmZsb3dDYXNlID0gYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCBwcm9wZXJ0eSwgc2NyYXRjaDIpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBTY29w
ZWRBcmd1bWVudHM6Om9mZnNldE9mU2NvcGUoKSksIHNjcmF0Y2gyKTsKLSAgICB4b3JQdHIoVHJ1
c3RlZEltbVB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRjaDIpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhzY3JhdGNoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZB
cmd1bWVudHMoKSksIHNjcmF0Y2gpOwotICAgIGxvYWQzMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJv
cGVydHksIFRpbWVzRm91ciksIHNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNo
MzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihTY29wZU9mZnNldDo6aW52YWxpZE9mZnNl
dCkpKTsKLSAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gyLCBzY3JhdGNoLCBUaW1lc0Vp
Z2h0LCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSksIHJlc3VsdCk7
Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIG92ZXJmbG93Q2FzZS5saW5rKHRoaXMpOwot
ICAgIHN1YjMyKHByb3BlcnR5LCBzY3JhdGNoMik7Ci0gICAgbmVnMzIoc2NyYXRjaDIpOwotICAg
IGxvYWRWYWx1ZShCYXNlSW5kZXgoc2NyYXRjaDMsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0KSwgcmVz
dWx0KTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVzdWx0KSk7Ci0gICAg
ZG9uZS5saW5rKHRoaXMpOwotICAgIAotICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2gzLCBTY29w
ZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGhJblN0b3JhZ2UoKSksIHNjcmF0Y2gpOwot
ICAgIGVtaXRQcmVwYXJlUHJlY2lzZUluZGV4TWFzazMyKHByb3BlcnR5LCBzY3JhdGNoLCBzY3Jh
dGNoMik7Ci0gICAgYW5kUHRyKHNjcmF0Y2gyLCByZXN1bHQucGF5bG9hZEdQUigpKTsKLSAgICAK
LSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEludFR5
cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5
cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAgQVNTRVJUKGlzSW50KHR5cGUpKTsKLSAgICAKLSAg
ICAvLyBUaGUgYmVzdCB3YXkgdG8gdGVzdCB0aGUgYXJyYXkgdHlwZSBpcyB0byB1c2UgdGhlIGNs
YXNzSW5mby4gV2UgbmVlZCB0byBkbyBzbyB3aXRob3V0Ci0gICAgLy8gY2xvYmJlcmluZyB0aGUg
cmVnaXN0ZXIgdGhhdCBob2xkcyB0aGUgaW5kZXhpbmcgdHlwZSwgYmFzZSwgYW5kIHByb3BlcnR5
LgotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAg
ICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCByZXN1bHRQYXls
b2FkID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0
ZXJJRCBzY3JhdGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdU
MDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCByZXN1
bHRQYXlsb2FkID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCByZXN1bHRUYWcgPSByZWdUMTsKLSAg
ICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0g
cmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAg
bG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRj
aCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBU
cnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7Ci0gICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOwot
ICAgIGNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gsIHNjcmF0
Y2gyKTsKLQotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKLSAgICBjYXNlIDE6Ci0g
ICAgICAgIGlmIChKU0M6OmlzU2lnbmVkKHR5cGUpKQotICAgICAgICAgICAgbG9hZDhTaWduZWRF
eHRlbmRUbzMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpLCByZXN1bHRQ
YXlsb2FkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9hZDgoQmFzZUluZGV4KHNjcmF0
Y2gsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxvYWQpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIDI6Ci0gICAgICAgIGlmIChKU0M6OmlzU2lnbmVkKHR5cGUpKQotICAgICAgICAg
ICAgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRp
bWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvYWQx
NihCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzVHdvKSwgcmVzdWx0UGF5bG9hZCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgbG9hZDMyKEJhc2VJbmRleChz
Y3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgcmVzdWx0UGF5bG9hZCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIEp1
bXAgZG9uZTsKLSAgICBpZiAodHlwZSA9PSBUeXBlVWludDMyKSB7Ci0gICAgICAgIEp1bXAgY2Fu
QmVJbnQgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlc3VsdFBheWxvYWQsIFRydXN0
ZWRJbW0zMigwKSk7Ci0gICAgICAgIAotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZXN1
bHRQYXlsb2FkLCBmcFJlZ1QwKTsKLSAgICAgICAgYWRkRG91YmxlKEFic29sdXRlQWRkcmVzcygm
dHdvVG9UaGUzMiksIGZwUmVnVDApOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1vdmVE
b3VibGVUbzY0KGZwUmVnVDAsIHJlc3VsdFBheWxvYWQpOwotICAgICAgICBzdWI2NCh0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlc3VsdFBheWxvYWQpOwotI2Vsc2UKLSAgICAgICAgbW92ZURvdWJs
ZVRvSW50cyhmcFJlZ1QwLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwotI2VuZGlmCi0gICAg
ICAgIAotICAgICAgICBkb25lID0ganVtcCgpOwotICAgICAgICBjYW5CZUludC5saW5rKHRoaXMp
OwotICAgIH0KLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgb3I2NCh0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIsIHJlc3VsdFBheWxvYWQpOwotI2Vsc2UKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpJbnQzMlRhZyksIHJlc3VsdFRhZyk7Ci0jZW5kaWYKLSAgICBpZiAoZG9uZS5pc1NldCgp
KQotICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQot
SklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlv
biosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAg
QVNTRVJUKGlzRmxvYXQodHlwZSkpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVn
aXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwot
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UGF5bG9hZCA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgc2Ny
YXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsKLSNlbHNlCi0g
ICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJl
Z1QyOwotICAgIFJlZ2lzdGVySUQgcmVzdWx0UGF5bG9hZCA9IHJlZ1QwOwotICAgIFJlZ2lzdGVy
SUQgcmVzdWx0VGFnID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7Ci0g
ICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgCi0gICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwotCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMy
KE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5
cGUpKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZW
ZWN0b3IoKSksIHNjcmF0Y2gpOwotICAgIGNhZ2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmlt
aXRpdmUsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRTaXpl
KHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAgICAgICBsb2FkRmxvYXQoQmFzZUluZGV4KHNjcmF0
Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBmcFJlZ1QwKTsKLSAgICAgICAgY29udmVydEZsb2F0
VG9Eb3VibGUoZnBSZWdUMCwgZnBSZWdUMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgODog
ewotICAgICAgICBsb2FkRG91YmxlKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNF
aWdodCksIGZwUmVnVDApOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBub3ROYU4gPSBicmFuY2hEb3Vi
bGUoRG91YmxlRXF1YWwsIGZwUmVnVDAsIGZwUmVnVDApOwotICAgIHN0YXRpYyBjb25zdCBkb3Vi
bGUgTmFOID0gUE5hTjsKLSAgICBsb2FkRG91YmxlKFRydXN0ZWRJbW1QdHIoJk5hTiksIGZwUmVn
VDApOwotICAgIG5vdE5hTi5saW5rKHRoaXMpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0g
ICAgbW92ZURvdWJsZVRvNjQoZnBSZWdUMCwgcmVzdWx0UGF5bG9hZCk7Ci0gICAgc3ViNjQodGFn
VHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRQYXlsb2FkKTsKLSNlbHNlCi0gICAgbW92ZURvdWJs
ZVRvSW50cyhmcFJlZ1QwLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwotI2VuZGlmCi0gICAg
cmV0dXJuIHNsb3dDYXNlczsgICAgCi19Ci0KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlw
ZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwotICAgIEFT
U0VSVChpc0ludCh0eXBlKSk7Ci0gICAgCi0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVnaXN0ZXJJRCBi
YXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwotICAgIFJlZ2lz
dGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9
IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZWxzZQotICAg
IFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdU
MjsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQg
bGF0ZVNjcmF0Y2ggPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoMiA9IHJlZ1Q0
OwotI2VuZGlmCi0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGxvYWQ4
KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRj
aCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0
Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICBKdW1w
IGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJy
YXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7Ci0gICAgZW1pdEFycmF5UHJvZmlsZU91
dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChqdW1w
KCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBlYXJseVNjcmF0Y2gpOwotICAgIHNs
b3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpKTsKLSNlbHNlCi0g
ICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJseVNjcmF0Y2gpOwotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCkpOwotI2VuZGlmCi0gICAg
Ci0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGludG8gYmFzZSBhcyBpbiBnZXRfYnlf
dmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBhdGggZXhwZWN0cyB0aGUgYmFzZSB0
byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZl
clZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlv
bmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0Y2gsIGxhdGVTY3JhdGNoMik7Ci0g
ICAgCi0gICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgewotICAgICAgICBBU1NFUlQoZWxlbWVudFNp
emUodHlwZSkgPT0gMSk7Ci0gICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBlKSk7Ci0g
ICAgICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIGVhcmx5U2NyYXRj
aCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKLSAgICAgICAgSnVtcCB0b29CaWcgPSBicmFuY2gzMihH
cmVhdGVyVGhhbiwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOwotICAgICAgICB4
b3IzMihlYXJseVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgICAgIEp1bXAgY2xhbXBlZCA9
IGp1bXAoKTsKLSAgICAgICAgdG9vQmlnLmxpbmsodGhpcyk7Ci0gICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKDB4ZmYpLCBlYXJseVNjcmF0Y2gpOwotICAgICAgICBjbGFtcGVkLmxpbmsodGhpcyk7
Ci0gICAgICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAgfQotICAgIAotICAgIHN3aXRjaCAo
ZWxlbWVudFNpemUodHlwZSkpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIHN0b3JlOChlYXJseVNj
cmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgc3RvcmUxNihlYXJseVNjcmF0Y2gsIEJh
c2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzVHdvKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgNDoKLSAgICAgICAgc3RvcmUzMihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChs
YXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91cikpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gc2xvd0Nh
c2VzOwotfQotCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwotICAgIEFTU0VSVChpc0Zsb2F0KHR5
cGUpKTsKLSAgICAKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsK
LSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBlYXJseVNj
cmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDI7Ci0gICAg
UmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBi
YXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lz
dGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9
IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAg
ICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNl
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFybHlTY3JhdGNoKTsKLSAgICBiYWRU
eXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZElt
bTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBi
cmFuY2gzMihCZWxvdywgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6
Om9mZnNldE9mTGVuZ3RoKCkpKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVj
aWFsQ2FzZShwcm9maWxlKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGp1bXAoKSk7Ci0gICAgaW5C
b3VuZHMubGluayh0aGlzKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7Ci0gICAgSnVtcCBkb3VibGVDYXNl
ID0gYnJhbmNoSWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpOwotICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKLSAg
ICBkb3VibGVDYXNlLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5v
dE51bWJlcihlYXJseVNjcmF0Y2gpKTsKLSAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IGVhcmx5U2NyYXRjaCk7Ci0gICAgbW92ZTY0VG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1Qw
KTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwotI2Vsc2UKLSAgICBlbWl0TG9hZCh2YWx1ZSwgbGF0
ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgSnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZO
b3RJbnQzMihsYXRlU2NyYXRjaCk7Ci0gICAgY29udmVydEludDMyVG9Eb3VibGUoZWFybHlTY3Jh
dGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0ganVtcCgpOwotICAgIGRvdWJsZUNhc2Uu
bGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlLCBsYXRlU2Ny
YXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLSAgICBtb3ZlSW50c1Rv
RG91YmxlKGVhcmx5U2NyYXRjaCwgbGF0ZVNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEpOwotICAg
IHJlYWR5LmxpbmsodGhpcyk7Ci0jZW5kaWYKLSAgICAKLSAgICAvLyBXZSB3b3VsZCBiZSBsb2Fk
aW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWwsIGV4Y2VwdCB0aGF0IHRoZSBzbG93
Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJlIHVuY2xvYmJlcmVkLgotICAgIGxv
YWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSks
IGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxseShHaWdhY2FnZTo6UHJpbWl0aXZl
LCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyKTsKLSAgICAKLSAgICBzd2l0Y2ggKGVsZW1lbnRT
aXplKHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAgICAgICBjb252ZXJ0RG91YmxlVG9GbG9hdChm
cFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgc3RvcmVGbG9hdChmcFJlZ1QwLCBCYXNlSW5kZXgo
bGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSA4OgotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0
Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTczYWVmYWIyMmFkYTc4OTQ1MmI1OWJkYTcw
NGZlNzk5NWI5OTY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxMTYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBF
TkFCTEUoSklUKQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0jaW5jbHVkZSAiSklULmgiCi0KLSNp
bmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKLSNpbmNs
dWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlcklubGlu
ZXMuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheS5oIgotI2lu
Y2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgot
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCi0jaW5jbHVk
ZSAiU2xvd1BhdGhDYWxsLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNpbmNs
dWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotCi1uYW1lc3BhY2UgSlNDIHsKLSAgICAK
LXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICBpbnQgb3B0aW9ucyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IGdldHRlciA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0KLSAgICBl
bWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIs
IHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1Qx
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdU
Myk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICBpbnQgb3B0aW9ucyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHNldHRlciA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7
Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9h
ZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5
SWQsIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRp
b25zLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5
X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGJhc2UgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGF0dHJpYnV0ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGdldHRlciA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNldHRlciA9IGN1cnJlbnRJbnN0cnVjdGlvbls1
XS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwotICAgIGVt
aXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVy
LCByZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJl
Z1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUs
IHJlZ1QzLCByZWdUNCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGJhc2UgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgZ2V0dGVyID0gY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7
Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXls
b2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVy
QnlWYWwsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdU
Myk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKLSAgICBpbnQgZ2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZDsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7Ci0gICAgZW1pdExv
YWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwg
cmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1Qy
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJv
cGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGVtaXRMb2FkKGJh
c2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlk
SlNSZXN1bHQsIGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgbV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBw
cm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVC
bG9jay0+YWRkQnlWYWxJbmZvKCk7Ci0KLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1Qw
LCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXggPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAgICBlbWl0QXJyYXlQcm9maWxp
bmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCBwcm9maWxlKTsKLSAgICBhbmQzMihUcnVzdGVk
SW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMSk7Ci0KLSAgICBQYXRjaGFibGVKdW1wIGJh
ZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIEpJVEFycmF5TW9kZSBt
b2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAg
IGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMkdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklU
RG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlR2V0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1
b3VzOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7
Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFi
ZWwoKTsKLQotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIEp1bXAgcmVzdWx0
T0sgPSBicmFuY2hJZk5vdEVtcHR5KHJlZ1QxKTsKLSAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJ
VEdldEJ5VmFsUmVzdWx0SXNOb3RFbXB0eSk7Ci0gICAgICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7
Ci0gICAgfQotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRTdG9yZShk
c3QsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7Ci0g
ICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbklu
Zm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwg
cHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0KLQotSklUOjpKdW1wTGlzdCBKSVQ6OmVt
aXRDb250aWd1b3VzTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIElu
ZGV4aW5nVHlwZSBleHBlY3RlZFNoYXBlKQotewotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDMsIHJl
Z1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSks
IHJlZ1QxKTsgLy8gdGFnCi0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVz
RWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1Qw
KTsgLy8gcGF5bG9hZAotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMSkp
OwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLUpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RG91YmxlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCi17Ci0g
ICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihEb3VibGVTaGFwZSkpOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMp
OwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRk
cmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgIGxv
YWREb3VibGUoQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCksIGZwUmVnVDApOwot
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVy
ZWQsIGZwUmVnVDAsIGZwUmVnVDApKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQot
Ci1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKQotewotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAK
LSAgICBhZGQzMihUcnVzdGVkSW1tMzIoLUFycmF5U3RvcmFnZVNoYXBlKSwgcmVnVDEsIHJlZ1Qz
KTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCBUcnVzdGVk
SW1tMzIoU2xvd1B1dEFycmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJl
Z1QzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIs
IEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0g
ICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSksIHJlZ1QxKTsgLy8gdGFnCi0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7IC8vIHBheWxvYWQKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKLSAgICAKLSAgICByZXR1cm4gc2xv
d0Nhc2VzOwotfQotCi1KSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0aENh
Y2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXAmIGZhc3REb25lQ2FzZSwg
SnVtcCYgc2xvd0RvbmVDYXNlLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQotewotICAgIGludCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotCi0gICAgLy8gYmFzZTogdGFnKHJl
Z1QxKSwgcGF5bG9hZChyZWdUMCkKLSAgICAvLyBwcm9wZXJ0eTogdGFnKHJlZ1QzKSwgcGF5bG9h
ZChyZWdUMikKLSAgICAvLyBzY3JhdGNoOiByZWdUNAotCi0gICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hJZk5vdENlbGwocmVnVDMpKTsKLSAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlW
YWxJbmZvLCByZWdUMiwgcmVnVDQsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKLQotICAgIEpJ
VEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbiht
X2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdp
c3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHByb3BlcnR5TmFt
ZS5pbXBsKCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7Ci0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOwotCi0gICAgZmFzdERvbmVDYXNlID0ganVtcCgpOwotCi0gICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhpcyk7Ci0K
LSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJ
ZE9wdGltaXplLCBkc3QsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwotICAgIHNsb3dEb25lQ2FzZSA9IGp1bXAoKTsKLQotICAgIHJldHVy
biBnZW47Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBw
cm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4XS5ieVZhbEluZm87Ci0KLSAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNl
KTsgLy8gYmFzZSBjZWxsIGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBwcm9wZXJ0
eSBpbnQzMiBjaGVjawotCi0gICAgSnVtcCBub25DZWxsID0ganVtcCgpOwotICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawotICAgIEp1bXAgbm90U3RyaW5nID0gYnJh
bmNoSWZOb3RTdHJpbmcocmVnVDApOwotICAgIGVtaXROYWtlZENhbGwoQ29kZUxvY2F0aW9uTGFi
ZWw8Tm9QdHJUYWc+KG1fdm0tPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxHZW5lcmF0b3IpLnJl
dGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwotICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0
cihaZXJvLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwotICAg
IGZhaWxlZC5saW5rKHRoaXMpOwotICAgIG5vdFN0cmluZy5saW5rKHRoaXMpOwotICAgIG5vbkNl
bGwubGluayh0aGlzKTsKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdmVjdG9yIGxlbmd0
aCBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gZW1wdHkgdmFsdWUKLSAgICAKLSAg
ICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0gICAgZW1pdExvYWQoYmFzZSwgcmVn
VDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgYnlW
YWxJbmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAg
bV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
LmFycmF5UHJvZmlsZTsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5h
ZGRCeVZhbEluZm8oKTsKLSAgICAKLSAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBw
cm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXggPSBwYXRjaGFi
bGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCBwcm9maWxlKTsKLSAgICBhbmQzMihUcnVzdGVkSW1t
MzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMSk7Ci0gICAgCi0gICAgUGF0Y2hhYmxlSnVtcCBi
YWRUeXBlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAgICAKLSAgICBKSVRBcnJheU1vZGUg
bW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAg
ICBjYXNlIEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJ
VERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQ29udGln
dW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVEFycmF5
U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBhZGRT
bG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAotICAg
IExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8u
YXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwg
bm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKLX0KLQotSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1NoYXBlKQotewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
LmFycmF5UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAg
YmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KENvbnRpZ3VvdXNTaGFwZSkpOwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNP
YmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDMpOwotICAgIEp1bXAgb3V0T2ZCb3VuZHMg
PSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBCdXR0ZXJmbHk6
Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICAKLSAgICBMYWJlbCBzdG9yZVJlc3VsdCA9
IGxhYmVsKCk7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgc3dpdGNo
IChpbmRleGluZ1NoYXBlKSB7Ci0gICAgY2FzZSBJbnQzMlNoYXBlOgotICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKLSAgICAgICAgc3RvcmUzMihyZWdU
MCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJ
bmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1
LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29udGlndW91c1NoYXBl
OgotICAgICAgICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0Vp
Z2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKLSAgICAg
ICAgc3RvcmUzMihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JK
RUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKLSAgICAgICAgZW1pdExvYWQo
YmFzZSwgcmVnVDIsIHJlZ1QzKTsKLSAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIERvdWJsZVNo
YXBlOiB7Ci0gICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMSk7Ci0g
ICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgSnVt
cCByZWFkeSA9IGp1bXAoKTsKLSAgICAgICAgbm90SW50LmxpbmsodGhpcyk7Ci0gICAgICAgIG1v
dmVJbnRzVG9Eb3VibGUocmVnVDAsIHJlZ1QxLCBmcFJlZ1QwLCBmcFJlZ1QxKTsKLSAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hEb3VibGUoRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwg
ZnBSZWdUMCwgZnBSZWdUMCkpOwotICAgICAgICByZWFkeS5saW5rKHRoaXMpOwotICAgICAgICBz
dG9yZURvdWJsZShmcFJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0KSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsK
LSAgICAKLSAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwotICAgIAotICAgIGVtaXRBcnJheVByb2ZpbGVTdG9y
ZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgcmVnVDIsIHJlZ1QxKTsKLSAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QzLCBC
dXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlua1RvKHN0
b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgCi0gICAg
cmV0dXJuIHNsb3dDYXNlczsKLX0KLQotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3Jh
Z2VQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1w
JiBiYWRUeXBlKQotewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwot
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5
UHJvZmlsZTsKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgYmFkVHlw
ZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEFycmF5
U3RvcmFnZVNoYXBlKSk7Ci0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVj
dDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOwotCi0gICAgSnVtcCBlbXB0eSA9IGJyYW5jaDMyKEVxdWFs
LCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rv
ck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAgIAotICAgIExhYmVsIHN0b3Jl
UmVzdWx0KHRoaXMpOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIHN0
b3JlMzIocmVnVDAsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpKTsgLy8gcGF5bG9hZAotICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdU
MywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkpOyAvLyB0YWcKLSAgICBKdW1wIGVu
ZCA9IGp1bXAoKTsKLSAgICAKLSAgICBlbXB0eS5saW5rKHRoaXMpOwotICAgIGVtaXRBcnJheVBy
b2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3RvcikpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDIsIEFkZHJlc3Mo
cmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOwotICAgIAotICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDIsIHJlZ1QwKTsK
LSAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9m
ZnNldCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7Ci0gICAgCi0g
ICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0K
LUpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJ
bmZvKiBieVZhbEluZm8sIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFB1dEtpbmQg
cHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgZG9uZUNh
c2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQotewotICAgIC8vIGJhc2U6IHRhZyhyZWdUMSksIHBh
eWxvYWQocmVnVDApCi0gICAgLy8gcHJvcGVydHk6IHRhZyhyZWdUMyksIHBheWxvYWQocmVnVDIp
Ci0KLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QzKSk7Ci0gICAgZW1pdEJ5VmFsSWRlbnRp
ZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDIsIHJlZ1QyLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNl
cyk7Ci0KLSAgICAvLyBXcml0ZSBiYXJyaWVyIGJyZWFrcyB0aGUgcmVnaXN0ZXJzLiBTbyBhZnRl
ciBpc3N1aW5nIHRoZSB3cml0ZSBiYXJyaWVyLAotICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJz
LgotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOwot
ICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJl
Z1QzLCByZWdUMik7Ci0KLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgoY3Vy
cmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAotICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhy
ZWdUMywgcmVnVDIpLCByZWdUMSwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksIHB1dEtpbmQpOwot
ICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBkb25lQ2FzZXMuYXBwZW5kKGp1
bXAoKSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBnZW4uc2xv
d1BhdGhKdW1wKCkubGluayh0aGlzKTsKLQotICAgIC8vIEpJVFB1dEJ5SWRHZW5lcmF0b3Igb25s
eSBwcmVzZXJ2ZSB0aGUgdmFsdWUgYW5kIHRoZSBiYXNlJ3MgcGF5bG9hZCwgd2UgaGF2ZSB0byBy
ZWxvYWQgdGhlIHRhZy4KLSAgICBlbWl0TG9hZFRhZyhiYXNlLCByZWdUMSk7Ci0KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5m
bygpLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwotICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKLQotICAgIHJl
dHVybiBnZW47Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7
Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlW
YWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87Ci0gICAgCi0gICAgbGlua1Nsb3dDYXNlSWZO
b3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawotICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7
IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCi0gICAgCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBj
aG9vc2VBcnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBK
SVRJbnQzMjoKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyB2YWx1ZSB0eXBlIGNoZWNrCi0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBKdW1wIHNraXBQcm9maWxpbmcgPSBqdW1wKCk7
Ci0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBvdXQgb2YgYm91bmRzCi0gICAgZW1pdEFycmF5
UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgc2tpcFByb2ZpbGlu
Zy5saW5rKHRoaXMpOwotCi0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAgIAotICAg
IGJvb2wgaXNEaXJlY3QgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0
aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0KLSNpZiBDUFUoWDg2KQot
ICAgIC8vIEZJWE1FOiBXZSBvbmx5IGhhdmUgNSB0ZW1wIHJlZ2lzdGVycywgYnV0IG5lZWQgNiB0
byBtYWtlIHRoaXMgY2FsbCwgdGhlcmVmb3JlIHdlIG1hdGVyaWFsaXplCi0gICAgLy8gb3VyIG93
biBjYWxsLiBXaGVuIHdlIGZpbmlzaCBtb3ZpbmcgSlNDIHRvIHRoZSBDIGNhbGwgc3RhY2ssIHdl
J2xsIGdldCBhbm90aGVyIHJlZ2lzdGVyIHNvCi0gICAgLy8gd2UgY2FuIHVzZSB0aGUgbm9ybWFs
IGNhc2UuCi0gICAgdW5zaWduZWQgcG9rZU9mZnNldCA9IDA7Ci0gICAgcG9rZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgcG9rZU9mZnNldCsrKTsKLSAgICBlbWl0TG9hZChiYXNlLCByZWdU
MCwgcmVnVDEpOwotICAgIHBva2UocmVnVDEsIHBva2VPZmZzZXQrKyk7Ci0gICAgcG9rZShyZWdU
MCwgcG9rZU9mZnNldCsrKTsKLSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDAsIHJlZ1QxKTsK
LSAgICBwb2tlKHJlZ1QxLCBwb2tlT2Zmc2V0KyspOwotICAgIHBva2UocmVnVDAsIHBva2VPZmZz
ZXQrKyk7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QwLCByZWdUMSk7Ci0gICAgcG9rZShyZWdU
MSwgcG9rZU9mZnNldCsrKTsKLSAgICBwb2tlKHJlZ1QwLCBwb2tlT2Zmc2V0KyspOwotICAgIHBv
a2UoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pLCBwb2tlT2Zmc2V0KyspOwotICAgIENhbGwgY2Fs
bCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk7Ci0jZWxzZQot
ICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSBy
ZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCi0gICAgLy8gU3dhcHBpbmcgc2hvdWxkbid0IGhhcHBl
biBvbiBvdGhlciBwbGF0Zm9ybXMuCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsK
LSAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZCh2YWx1
ZSwgcmVnVDUsIHJlZ1Q0KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0
aW1pemUsIEpTVmFsdWVSZWdzKHJlZ1QyLCByZWdUMSksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1Q1LCByZWdUNCksIGJ5VmFsSW5mbyk7Ci0jZW5kaWYKLQotICAg
IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRo
VGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0
aW9uSW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2st
PmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwotCi0gICAgZW1p
dExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwoYmFzZSwgcmVnVDEpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4
KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKLSAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0KTsKLSAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQ
YXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotICAgIAotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwot
fQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9n
ZXRCeUlkSW5kZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5R2V0QnlJZE9wdGltaXpl
LCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwg
aWRlbnQtPmltcGwoKSk7Ci0gICAgCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKLX0KLQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0K
LSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxT
aXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9h
ZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXRE
aXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2Fz
ZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IHJlc3Vs
dFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxh
YmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0
aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmltcGwoKSk7Ci0KLSAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi0KLXZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpOwotICAgIAotICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIGlmICgqaWRl
bnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXhXaXRoQ2Vs
bChyZWdUMCwgcmVnVDIsIG1fYnl0ZWNvZGVPZmZzZXQpOwotCi0gICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZz
ZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHVi
VW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNz
VHlwZTo6R2V0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xv
d0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwot
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IHJlc3VsdFZS
ZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZp
ZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKSk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5
SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBpZGVudC0+aW1wbCgpKTsKLSAgICAKLSAgICBnZW4ucmVw
b3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCB0aGlz
VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQpKTsKLSAgICAKLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDAp
OwotICAgIGVtaXRMb2FkKHRoaXNWUmVnLCByZWdUNCwgcmVnVDMpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHRoaXNWUmVnLCByZWdUNCk7Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0
b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0
KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1Q0LCByZWdUMyksIEFjY2Vzc1R5cGU6OkdldFdpdGhUaGlzKTsKLSAgICBnZW4uZ2Vu
ZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgp
KTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKCk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IHJlc3VsdFZSZWcgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlk
ZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kKSk7Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0
QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwotICAgIAotICAgIExhYmVs
IGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1Q0LCByZWdUMyksIGlkZW50LT5pbXBsKCkpOwotICAgIAotICAgIGdlbi5yZXBvcnRT
bG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIC8vIElu
IG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9i
amVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAotICAgIC8vIHRvIGp1c3QgYWZ0ZXIg
dGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVn
aW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJl
ICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgotICAg
IAotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBp
bnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBkaXJl
Y3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJl
Y3Q7Ci0gICAgCi0gICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUsIHJlZ1Qz
LCByZWdUMik7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5z
dHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAg
ICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMiksCi0gICAgICAgIHJlZ1QxLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUoKSwgZGlyZWN0ID8g
RGlyZWN0IDogTm90RGlyZWN0KTsKLSAgICAKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICAKLSAgICBlbWl0
V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLQotICAgIG1fcHV0
QnlJZHMuYXBwZW5kKGdlbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50
IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotCi0g
ICAgLy8gSklUUHV0QnlJZEdlbmVyYXRvciBvbmx5IHByZXNlcnZlIHRoZSB2YWx1ZSBhbmQgdGhl
IGJhc2UncyBwYXlsb2FkLCB3ZSBoYXZlIHRvIHJlbG9hZCB0aGUgdGFnLgotICAgIGVtaXRMb2Fk
VGFnKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0
QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbigKLSAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIEpT
VmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGlkZW50
LT5pbXBsKCkpOwotICAgIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0KLSAgICBlbWl0TG9hZChi
YXNlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNl
LCByZWdUMSk7Ci0KLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVC
bG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50
SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0g
ICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1faW5CeUlkcy5h
cHBlbmQoZ2VuKTsKLQotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKLQot
ICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107
Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5z
dHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBpZGVudC0+aW1wbCgpKTsKLQot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKLXsKLSAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICByZXR1cm47
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKHNjb3BlLCByZWdUMCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCi0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1p
dFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzY29wZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUg
PSBzdGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4oY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZCk7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5k
OwotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlKSB7Ci0g
ICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0
eToKLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZh
cjoKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogCi0gICAgICAgIGNh
c2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAg
IEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJs
b2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKLSAgICAgICAgICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgICAgIG1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9uWzZdLnUuanNDZWxsLmdldCgpKSwgcmVnVDApOwot
ICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgot
ICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBVbnJlc29sdmVk
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07Ci0gICAgc3dpdGNoIChyZXNvbHZl
VHlwZSkgewotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZl
ZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lw
VG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmY3VycmVudEluc3RydWN0aW9uWzRdLCByZWdUMCk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2Jh
bFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBu
b3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBl
bWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOwotICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0
aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGlu
ayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICBza2lwVG9F
bmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAg
ICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0K
LXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhpbnQgc2NvcGUsIFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QpCi17Ci0gICAgZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7
Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMikpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFs
dWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKQotewotICAgIHVpbnRwdHJf
dCByYXdBZGRyZXNzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ob3BlcmFuZCk7Ci0gICAgbG9h
ZDMyKGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFRhZ09mZnNldCksIHRhZyk7Ci0g
ICAgbG9hZDMyKGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFBheWxvYWRPZmZzZXQp
LCBwYXlsb2FkKTsKLX0KLXZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihK
U1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpCi17Ci0gICAgbG9h
ZFB0cihvcGVyYW5kLCBwYXlsb2FkKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhwYXlsb2FkLCBUYWdP
ZmZzZXQpLCB0YWcpOwotICAgIGxvYWQzMihBZGRyZXNzKHBheWxvYWQsIFBheWxvYWRPZmZzZXQp
LCBwYXlsb2FkKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7
Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpLCBy
ZWdUMSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50Ojpv
ZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2Fk
T2Zmc2V0KSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzY29wZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBHZXRQdXRJ
bmZvKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpLnJlc29sdmVUeXBlKCk7Ci0gICAg
U3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVj
dHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Kj4oJmN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOwotICAgIAot
ICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGlu
ZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewot
ICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QyOwotICAgICAg
ICAgICAgR1BSUmVnIHJlc3VsdFRhZyA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMzsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgbW92ZShyZWdUMCwgYmFzZSk7Ci0gICAgICAgICAgICBs
b2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAgICAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRPZkxpbmUgPSBicmFuY2gzMihHcmVh
dGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMyKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0
KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVE9mZnNldElzTm90T3V0T2ZM
aW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5saW5rKHRoaXMpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIGJhc2UpOwotICAgICAgICAgICAgbmVnMzIob2Zmc2V0KTsKLSAgICAgICAg
ICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkgKyAoZmlyc3RPdXRPZkxpbmVPZmZzZXQg
LSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1bHRQYXlsb2FkKTsKLSAgICAgICAg
ICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZG
U0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSArIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIp
ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdFRhZyk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5k
KQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0
PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgaWYg
KHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVjay4KLSAgICAgICAg
ICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNr
KG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAgICBlbWl0
R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNl
IExvY2FsQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAg
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICB9Owot
Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmY3VycmVudEluc3Ry
dWN0aW9uWzRdLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZv
Ojp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCi0KLSAgICAg
ICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVk
SW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIo
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAgIGlzR2xvYmFs
UHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZh
bHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFy
LCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RH
bG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAg
ICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7
Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xvd0Nh
c2UoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUs
IGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEZyb21T
Y29wZSwgZHN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCog
c2V0KQotewotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXROb3Rp
ZnlXcml0ZShzZXQpOwotICAgIHVpbnRwdHJfdCByYXdBZGRyZXNzID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4ob3BlcmFuZCk7Ci0gICAgc3RvcmUzMihyZWdUMSwgYml0d2lzZV9jYXN0PHZvaWQq
PihyYXdBZGRyZXNzICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMCwgYml0d2lzZV9j
YXN0PHZvaWQqPihyYXdBZGRyZXNzICsgUGF5bG9hZE9mZnNldCkpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQs
IGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKLXsKLSAg
ICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0
Y2hwb2ludFNldCwgcmVnVDIpOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMik7Ci0gICAgbG9h
ZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVz
cyhyZWdUMiwgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMiwg
UGF5bG9hZE9mZnNldCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50IHNj
b3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17
Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgZW1pdExvYWQoc2NvcGUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7Ci0gICAgc3RvcmUzMihy
ZWdUMywgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCkpOwotICAgIHN0
b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRP
ZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0
KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGludCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCog
b3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZjdXJyZW50SW5zdHJ1
Y3Rpb25bNl0udS5wb2ludGVyKTsKLSAgICAKLSAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNv
bHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7Ci0gICAg
ICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToK
LSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLCB2
YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0
dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJz
IHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1Qy
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRyKG9w
ZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQdHIocmVnVDEpOwotICAgICAgICAg
ICAgc3RvcmUzMihyZWdUMywgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZp
cnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKSk7Ci0gICAgICAg
ICAgICBzdG9yZTMyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpF
Q1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZhcjoKLSAg
ICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBjYXNl
IEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBK
U1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9j
ayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAg
ICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZh
bHVlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgaWYgKCFpc0luaXRpYWxpemF0aW9u
KGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYmIChyZXNvbHZlVHlwZSA9PSBHbG9i
YWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzKSkgewotICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gYSBURFog
Y2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBwcm92ZSB3ZSBuZWVkIHRvIGVtaXQg
VERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRG
b3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9p
bnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHJlZ1QxLCByZWdUMCk7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMSwgcmVn
VDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQot
ICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2Fz
dDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsIGJpdHdpc2VfY2FzdDxXYXRjaHBvaW50
U2V0Kio+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNV0pKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigq
b3BlcmFuZFNsb3QpLCB2YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNl
dCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIExvY2FsQ2xv
c3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihz
Y29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAg
ICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1cnJl
bnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAg
ICAgICBsb2FkMzIoJmN1cnJlbnRJbnN0cnVjdGlvbls0XSwgcmVnVDApOwotICAgICAgICBhbmQz
MihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCByZWdUMCk7IC8vIExvYWQgUmVz
b2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNHbG9iYWxQcm9wZXJ0eSA9IGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0gICAgICAg
IEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7Ci0gICAgICAgIGVt
aXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQo
anVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucy5saW5r
KHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhciA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXIpKTsKLSAgICAgICAg
ZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBl
bmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5saW5rKHRoaXMpOwotCi0g
ICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAo
KSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucy5saW5rKHRo
aXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0KLSAgICAgICAgc2tpcFRvRW5k
LmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQot
ewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBHZXRQdXRJbmZvIGdldFB1dElu
Zm8gPSBHZXRQdXRJbmZvKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwotICAgIFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIGlm
IChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKLSAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJp
Y3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7Ci0gICAgICAgIHNsb3dQYXRo
Q2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0VG9TY29wZSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGFy
Z3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGluZGV4
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVj
dEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSArIFRhZ09mZnNldCksIHJlZ1QxKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdU
MCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlZ1QwKTsKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGludCBhcmd1bWVudHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LSAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKLSAgICAKLSAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7Ci0g
ICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMik7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRk
cmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihy
ZWdUMiwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBp
bmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCkpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0j
ZW5kaWYgLy8gRU5BQkxFKEpJVCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341507</attachid>
            <date>2018-05-29 13:18:47 -0700</date>
            <delta_ts>2021-11-01 12:16:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-186013-20180530051845.patch</filename>
            <type>text/plain</type>
            <size>631488</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBk
YTJjOTYwOTJjNmU2NDczZDI3MzlmNzQ1MGVkNjEyZmIwNjI1MjA2Li40Y2ZmOGFhOTRkMjMxMzVi
NjE3NzM4YTE2MGYzOWRiZjliYWZjM2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MDMgQEAKKzIwMTgtMDUtMjkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgW0Jhc2VsaW5lXSBNZXJnZSBKSVRQcm9wZXJ0eUFjY2VzcywgSklU
QXJpdGhtZXRpYywgSklUT3Bjb2RlcywgYW5kIEpJVENhbGwgdG8gSklUCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODYwMTMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBoYXJkIHRvIGNoZWNrIHdo
ZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgaW4gMzJiaXQgLyA2
NGJpdCwKKyAgICAgICAgc2luY2UgSklUIGNvZGUgaXMgc2NhdHRlcmVkIGludG8gSklUUHJvcGVy
dHlBY2Nlc3MsIEpJVEFyaXRobWV0aWMsIEpJVE9wY29kZXMsIGFuZCBKSVRDYWxsLgorICAgICAg
ICBXaGlsZSBKSVRQcm9wZXJ0eUFjY2VzcywgSklUQXJpdGhtZXRpYywgSklUT3Bjb2RlcywgYW5k
IEpJVENhbGwgaW5jbHVkZXMgMzJiaXQgYW5kIDY0Yml0IGNvZGUsCisgICAgICAgIFhYWDMyXzY0
LmNwcCBkb2VzIG5vdCBpbmNsdWRlIDY0Yml0IGNvZGUuIFNvIHdoZW4gbG9va2luZyBpbnRvIEpJ
VE9wY29kZXMsIHdlIG5lZWQgdG8gY2hlY2sKKyAgICAgICAgdGhhdCB0aGUgZnVuY3Rpb24gaXMg
aW1wbGVtZW50ZWQgZm9yIDY0Yml0LCAzMmJpdCwgb3IgYm90aC4KKworICAgICAgICBUaGlzIHBh
dGNoIGFsaWducyBKSVQncyBpbXBsZW1lbnRhdGlvbiB0byBERkcuIFdlIGhhdmUgdGhyZWUgZmls
ZXMgZm9yIEpJVC5oLCBKSVQuY3BwLCBKSVQzMl82NC5jcHAsCisgICAgICAgIGFuZCBKSVQ2NC5j
cHAuIEpJVDMyXzY0IG9ubHkgaW5jbHVkZXMgMzJiaXQgaW1wbGVtZW50YXRpb24sIGFuZCBKSVQ2
NCBpbmNsdWRlcyA2NGJpdCBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgSklULmNwcCBpbmNsdWRl
cyBjb2RlIGZvciBib3RoLiBUaGlzIGNoYW5nZSBleHRyYWN0cyAzMmJpdCBjb2RlIGZyb20gc2Nh
dHRlcmVkIEpJVCBmaWxlcyBlZmZlY3RpdmVseS4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb29wX2hpbnQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xvb3BfaGludCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jaGVja190cmFwcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9ub3ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3VwZXJfc2FtcGxlcl9iZWdpbik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfbmV3X3JlZ2V4cCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNDb21t
b24pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X2Z1bmMpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfbmV3X2dlbmVyYXRvcl9mdW5jKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXdfYXN5bmNfZnVuYyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ld0Z1bmNFeHBy
Q29tbW9uKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25ld19mdW5jX2V4cCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdfZ2VuZXJhdG9yX2Z1bmNfZXhwKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX25ld19hc3luY19mdW5jX2V4cCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25ld19hcnJheSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXdf
YXJyYXlfd2l0aF9zaXplKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfY29u
dHJvbF9mbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2FyZ3VtZW50X2NvdW50KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfamxlc3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfamxlc3NlcSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9qZ3JlYXRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qZ3JlYXRlcmVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pubGVzcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmxlc3NlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qbmdyZWF0ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5ncmVhdGVyZXEp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2psZXNzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9qbGVzc2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9qZ3JlYXRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5sZXNzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9qbmxlc3NlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3Bfam5ncmVhdGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXJl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9iZWxvdyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9iZWxvd2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2piZWxvdyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qYmVsb3dlcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uZWdhdGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lZ2F0
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfYml0YW5kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2JpdG9yKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2JpdHhvcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9sc2hpZnQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSaWdodFNo
aWZ0RmFzdFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcnNoaWZ0KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3Vyc2hpZnQpOgorICAgICAgICAoSlNDOjpnZXRPcGVyYW5k
VHlwZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfYWRkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0U2xvd19vcF9hZGQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRNYXRoSUNGYXN0
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TWF0aElDU2xvdyk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9kaXYpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbXVsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9tdWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfc3ViKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9zdWIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRXcml0ZUJhcnJpZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRCeVZh
bElkZW50aWZpZXJDaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNo
ZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdERvdWJsZUxvYWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRD
b250aWd1b3VzTG9hZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3RvcmFnZUxvYWQp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50c0dldEJ5VmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRJbnRU
eXBlZEFycmF5UHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRGbG9hdFR5cGVkQXJy
YXlQdXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVDMyXzY0LmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5k
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2ptcCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdf
b2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFu
Y2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
aW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
aXNfbnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
c2V0X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pu
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3N0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25z
dHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9qbnN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qc3Ry
aWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdG9fc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hf
aW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZGVidWcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX3RoaXMpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRf
ZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3Ry
dWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1w
U2xvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25lZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9pbmMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVjKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0QmluYXJ5RG91YmxlT3ApOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfbW9kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9tb2QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdp
dGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9i
eV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0VmFySW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xv
c3VyZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0
VmFyRnJvbUluZGlyZWN0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldENsb3N1
cmVWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xv
c3VyZVZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X3RvX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFy
cmllcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9j
YWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhbGwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Nh
bGxfZXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwVmFyYXJn
c0ZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAqIGppdC9KSVQ2NC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9qbXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfbnVtYmVy
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9yZXQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX25vdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXFf
cHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2plcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qdHJ1ZSk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
am5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90aHJvdyk6CisgICAgICAgIChKU0M6
OkpJVDo6Y29tcGlsZU9wU3RyaWN0RXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3Ry
aWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbnN0cmljdGVxKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfanN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puc3RyaWN0ZXEp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF90b19udW1iZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pZGVudGl0eV93
aXRoX3Byb2ZpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29w
ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9lbnRlcik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfdG9fdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jaGVja190ZHopOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXEp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2plcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3Bfam5lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVy
ZV9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVk
UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVy
dHkpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfdW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXApOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luYyk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbW9kKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9tb2QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5
X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
aWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0VmFy
SW5qZWN0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRSZXNvbHZlQ2xvc3VyZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdEdldFZhckZyb21Qb2ludGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0VmFyRnJv
bUluZGlyZWN0UG9pbnRlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldENsb3N1cmVWYXIp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9i
YWxWYXJpYWJsZUluZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3VyZVZh
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X3RvX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFdyaXRlQmFycmllcik6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZUNhbGxFdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhbGwp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYWxs
X3ZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfY2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxs
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2NvbnN0cnVjdCk6CisgICAgICAgICogaml0L0pJVEFyaXRobWV0aWMuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIGppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIGppdC9KSVRDYWxsLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUQ2FsbDMy
XzY0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBqaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHA6IFJlbW92ZWQuCisKIDIwMTgtMDUtMjkgIFl1c3VrZSBTdXp1
a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0Jhc2VsaW5lXSBNZXJnZSBs
b2FkaW5nIGZ1bmN0aW9uYWxpdGllcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAy
OWNiYWI0ZDNiMDRiODg4ZTBlYjVlMTg0MDU1ZDhkM2JiZDU2MGRiLi43ODNjZjc2OTZmN2JiMDc0
ZWNjMzkyMmE3NzA1Yzc2YmVmMWY0NzA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMzA4Niw3ICszMDg2LDcgQEAKIAkJMTQ2QUFCMzcwQjY2QTk0NDAwRTU1RjE2IC8qIEpTU3Ry
aW5nUmVmQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3Ry
aW5nUmVmQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDZCMTREQjEyRUI1
QjEyMDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ29uc2VydmF0aXZlUm9vdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNDZGQTVBODEzNzhGNkIwMDAzNjI3QTMgLyogSGFuZGxlVHlwZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFuZGxlVHlwZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTQ2RkU1MTExMUE3MTA0MzAwODdBRTY2IC8qIEpJVENhbGwz
Ml82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRDYWxsMzJf
NjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxNDZGRTUxMTExQTcxMDQzMDA4
N0FFNjYgLyogSklUMzJfNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSklUMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDczNDFDQjFE
QzAyRDcyMDBBQTI5QkEgLyogRXhlY3V0YWJsZUJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRXhlY3V0YWJsZUJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMTQ3MzQxQ0QxREMwMkQ3OTAwQUEyOUJBIC8qIFNjcmlwdEV4ZWN1dGFibGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0RXhlY3V0YWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxNDczNDFDRjFEQzAyREI0MDBBQTI5QkEgLyogTmF0aXZlRXhl
Y3V0YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXRpdmVFeGVjdXRh
YmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNzY3LDcgKzM3NjcsNiBAQAog
CQk4NkEwNTQ0NjE1NTY0NTFCMDA0NDUxNTcgLyogTG93TGV2ZWxJbnRlcnByZXRlci5hc20gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmFzbS5hc207IG5hbWUgPSBMb3dMZXZlbEludGVycHJldGVyLmFzbTsgcGF0aCA9IGxsaW50L0xv
d0xldmVsSW50ZXJwcmV0ZXIuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkEw
NTQ0NzE1NTY0NTFCMDA0NDUxNTcgLyogTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
YXNtLmFzbTsgbGluZUVuZGluZyA9IDA7IG5hbWUgPSBMb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtOyBwYXRoID0gbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZBMDU0NDgxNTU2NDUxQjAwNDQ1MTU3IC8qIExvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbS5hc207IGxpbmVFbmRpbmcgPSAwOyBuYW1lID0gTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbTsgcGF0aCA9IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc207IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2QTkwRUNGMEVFN0Q1MUYwMEFC
MzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpJVEFyaXRobWV0aWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
NkFERDE0MzBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQVJNdjdBc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJODZBREQxNDQwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJN
djcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk12
Ny5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMz
MDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFByb2ZpbGVUcmVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzc4MCw4
ICszNzc5LDcgQEAKIAkJODZDNTY4REUxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVy
TUlQUy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNYWNyb0Fzc2VtYmxlck1J
UFMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZDNTY4REYxMUEyMTNFRTAwMDdG
N0YwIC8qIE1JUFNBc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
TUlQU0Fzc2VtYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkNDODVBMDBF
RTc5QTQ3MDAyODg2ODIgLyogSklUSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKSVRJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTg2Q0M4
NUEyMEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpJVENhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk4NkNDODVDMzBFRTdBODk0MDAyODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUUHJvcGVydHlBY2Nlc3MuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkNDODVBMjBFRTc5Qjc0MDAyODg2ODIgLyog
SklUNjQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUNjQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkNDRUZERDBGNDEzRjg5MDBGRDdGOUUg
LyogSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRDb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2RDIyMjE5MTY3RUY5NDQwMDI0QzgwNCAv
KiB0ZXN0YXBpLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IGZpbGVFbmNvZGluZyA9IDQ7IG5hbWUgPSB0ZXN0
YXBpLm1tOyBwYXRoID0gQVBJL3Rlc3RzL3Rlc3RhcGkubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTg2RDNCMkJGMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQVJNQXNzZW1ibGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQxMTUsNyArNDExMyw2IEBACiAJCUE3MDREOTAx
MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oOyBwYXRoID0g
ZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE3MDlGMkVGMTdBMEFDMDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvd1BhdGhDYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUE3MDlGMkYxMTdBMEFDMkEwMDUxMkU5OCAvKiBDb21tb25TbG93UGF0aHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tbW9uU2xvd1BhdGhz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQTcxMjM2RTQxMTk1RjMzQzAwQkQy
MTc0IC8qIEpJVE9wY29kZXMzMl82NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKSVRPcGNvZGVzMzJfNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzE4RjYxQTExNzU0QTIxMDAyNDY1QTcgLyogUmVnRXhwSml0VGFibGVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ0V4cEppdFRhYmxlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBNzE4RjgyMTExNzhFQjRCMDAyNDY1QTcgLyogY3JlYXRlX3JlZ2V4
X3RhYmxlcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
dGV4dC5zY3JpcHQucHl0aG9uOyBmaWxlRW5jb2RpbmcgPSA0OyBuYW1lID0gY3JlYXRlX3JlZ2V4
X3RhYmxlczsgcGF0aCA9IHlhcnIvY3JlYXRlX3JlZ2V4X3RhYmxlczsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTcyMDI4QjQxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJV
dGlscy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NUZXN0UnVu
bmVyVXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDE0NSw3ICs0MTQy
LDYgQEAKIAkJQTc0REVGOEUxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90eXBl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NERFRjhGMTgyRDk5MTQwMDUyMkMy
MiAvKiBKU01hcEl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTTWFwSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzRE
RUY5MDE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU01hcEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCUE3NTcwNkREMTE4QTJCQ0YwMDU3Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQXJpdGhtZXRpYzMyXzY0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc1RUU5QjAxOEFBQjdFMjAwQUFE
MDQzIC8qIEJ1aWx0aW5OYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
dWlsdGluTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTc2N0I1QjMxN0Ew
Qjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBo
YXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3NjdCNUI0MTdBMEI5NjUwMDYzRDk0MCAvKiBE
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR0xv
b3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MjA0LDcgKzQyMDAsNiBAQAogCQlBN0JGRjNCRjE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmls
dHJhdGlvblJlc3VsdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGaWx0
cmF0aW9uUmVzdWx0Lmg7IHBhdGggPSBkZmcvREZHRmlsdHJhdGlvblJlc3VsdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBN0MwQzRBQTE2N0MwOENEMDAxNzAxMUQgLyogSlNTY3Jp
cHRSZWYuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTY3JpcHRS
ZWYuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBN0MwQzRBQjE2N0MwOENEMDAx
NzAxMUQgLyogSlNTY3JpcHRSZWZQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTU2NyaXB0UmVmUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQlBN0MxRThDODExMkU3MDFDMDBBMzdGOTggLyogSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDMUVBRUIxNzk4N0FCNjAw
Mjk5REIyIC8qIENMb29wU3RhY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENMb29wU3RhY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUE3QzFFQUVDMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IFN0YWNrVmlzaXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzFFQUVEMTc5ODdBQjYwMDI5OURC
MiAvKiBTdGFja1Zpc2l0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3Rh
Y2tWaXNpdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDUyLDcgKzQ0NDcs
NiBAQAogCQlCQ0QyMDM0NzBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZVByb3RvdHlwZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlUHJvdG90eXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNEMjAzNDgwRTE3MTM1RTAwMkM3RTgyIC8qIERh
dGVQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZVByb3Rv
dHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0QyMDNFNzBFMTcxOEY0MDAy
QzdFODIgLyogRGF0ZVByb3RvdHlwZS5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGF0ZVByb3RvdHlwZS5sdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QkNERDUxRTkwRkI4REY3NDAwNEE4QkRDIC8qIEpJVE9wY29kZXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUT3Bjb2Rlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDREUzQUIwMEU2QzgyQ0YwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RydWN0dXJlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNERTNBQjEwRTZDODJDRjAwMTQ1M0E3IC8qIFN0cnVj
dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGNjA1MTEwRTIwM0VGODAwQjlBNjREIC8qIEFy
Z0xpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJnTGlzdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTEyLDkgKzQ5MDYsOSBAQAogCQkJ
CTE0QkQ1OUJGMEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTBGRUM4NUFEMUJE
QjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJRkU1MzNDQUMxRjIxN0RCNDAwMTZBMUZF
IC8qIHRlc3RtYXNtICovLAorCQkJCTc5MjgxQkRDMjBCNjJCM0UwMDJFMkE2MCAvKiB0ZXN0bWVt
ICovLAogCQkJCTY1MTEyMzA1MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAogCQkJ
CTkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi8s
Ci0JCQkJNzkyODFCREMyMEI2MkIzRTAwMkUyQTYwIC8qIHRlc3RtZW0gKi8sCiAJCQkpOwogCQkJ
bmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTU1NDAsMTEg
KzU1MzQsMTEgQEAKIAkJCQlERTVBMDlGRjFCQTNBQzNFMDAzRDQ0MjQgLyogSW50cmluc2ljRW1p
dHRlci5jcHAgKi8sCiAJCQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAgKi8s
CiAJCQkJMTQyOUQ5MkUwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5oICovLAorCQkJCTE0NkZFNTEx
MTFBNzEwNDMwMDg3QUU2NiAvKiBKSVQzMl82NC5jcHAgKi8sCisJCQkJODZDQzg1QTIwRUU3OUI3
NDAwMjg4NjgyIC8qIEpJVDY0LmNwcCAqLywKIAkJCQlGRTEyMjAyNTFCRTdGNTY0MDAzOUU2RjIg
LyogSklUQWRkR2VuZXJhdG9yLmNwcCAqLywKIAkJCQlGRTEyMjAyNjFCRTdGNTY0MDAzOUU2RjIg
LyogSklUQWRkR2VuZXJhdG9yLmggKi8sCiAJCQkJMEY3NUEwNjUyMDEzRTRFRjAwMzhFMkNGIC8q
IEpJVEFsbG9jYXRvci5oICovLAotCQkJCTg2QTkwRUNGMEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRB
cml0aG1ldGljLmNwcCAqLywKLQkJCQlBNzU3MDZERDExOEEyQkNGMDA1N0Y4OEYgLyogSklUQXJp
dGhtZXRpYzMyXzY0LmNwcCAqLywKIAkJCQlGRTNBMDZBRDFDMTBDQjZGMDAzOTBGREQgLyogSklU
Qml0QW5kR2VuZXJhdG9yLmNwcCAqLywKIAkJCQlGRTNBMDZBRTFDMTBDQjZGMDAzOTBGREQgLyog
SklUQml0QW5kR2VuZXJhdG9yLmggKi8sCiAJCQkJRkUzQTA2QTcxQzEwQkM3NDAwMzkwRkREIC8q
IEpJVEJpdEJpbmFyeU9wR2VuZXJhdG9yLmggKi8sCkBAIC01NTUyLDggKzU1NDYsNiBAQAogCQkJ
CUZFM0EwNkE0MUMxMEI3MDgwMDM5MEZERCAvKiBKSVRCaXRPckdlbmVyYXRvci5oICovLAogCQkJ
CUZFM0EwNkFGMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRYb3JHZW5lcmF0b3IuY3BwICovLAog
CQkJCUZFM0EwNkIwMUMxMENCNkYwMDM5MEZERCAvKiBKSVRCaXRYb3JHZW5lcmF0b3IuaCAqLywK
LQkJCQk4NkNDODVBMjBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgKi8sCi0JCQkJMTQ2
RkU1MTExMUE3MTA0MzAwODdBRTY2IC8qIEpJVENhbGwzMl82NC5jcHAgKi8sCiAJCQkJMEY4Rjk0
NDMxNjY3NjM1MjAwRDYxOTcxIC8qIEpJVENvZGUuY3BwICovLAogCQkJCTg2Q0NFRkREMEY0MTNG
ODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmggKi8sCiAJCQkJMEZGQjgwQkIyMEE3OTQ3MDAwMDZBQUY2
IC8qIEpJVENvZGVJbmxpbmVzLmggKi8sCkBAIC01NTc3LDEyICs1NTY5LDggQEAKIAkJCQlGRTE4
N0EwMDFCRkJDNzNDMDAzOEJCQ0EgLyogSklUTXVsR2VuZXJhdG9yLmggKi8sCiAJCQkJRkU5OUIy
NDcxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5jcHAgKi8sCiAJCQkJRkU5OUIy
NDgxQzI0QjZEMzAwQzgyMTU5IC8qIEpJVE5lZ0dlbmVyYXRvci5oICovLAotCQkJCUJDREQ1MUU5
MEZCOERGNzQwMDRBOEJEQyAvKiBKSVRPcGNvZGVzLmNwcCAqLywKLQkJCQlBNzEyMzZFNDExOTVG
MzNDMDBCRDIxNzQgLyogSklUT3Bjb2RlczMyXzY0LmNwcCAqLywKIAkJCQkwRjI0RTU0NTE3RUUy
NzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5jcHAgKi8sCiAJCQkJMEYyNEU1NDYxN0VFMjc0
OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCAqLywKLQkJCQk4NkNDODVDMzBFRTdBODk0MDAy
ODg2ODIgLyogSklUUHJvcGVydHlBY2Nlc3MuY3BwICovLAotCQkJCUE3QzFFOEM4MTEyRTcwMUMw
MEEzN0Y5OCAvKiBKSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCAqLywKIAkJCQlGRTNBMDZCODFD
MTEwM0Q5MDAzOTBGREQgLyogSklUUmlnaHRTaGlmdEdlbmVyYXRvci5jcHAgKi8sCiAJCQkJRkUz
QTA2QjkxQzExMDNEOTAwMzkwRkREIC8qIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IuaCAqLywKIAkJ
CQkwRjc2NkQyNjE1QThDQzFCMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuY3BwICovLApAQCAt
NjI4Niw4ICs2Mjc0LDggQEAKIAkJNzlBQkNDNTUyMEI3ODEyNjAwMzIzRDVGIC8qIHRlc3RtZW0y
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk3OUFCQ0M1
NjIwQjc4MTI2MDAzMjNENUYgLyogdGVzdG1lbTIubSAqLywKIAkJCQk3OUFCQ0M1ODIwQjc4MTI2
MDAzMjNENUYgLyogdGVzdG1lbTIuMSAqLywKKwkJCQk3OUFCQ0M1NjIwQjc4MTI2MDAzMjNENUYg
LyogdGVzdG1lbTIubSAqLywKIAkJCSk7CiAJCQlwYXRoID0gdGVzdG1lbTI7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtODM2NSw3ICs4MzUzLDYgQEAKIAkJCQkwRjRDOTE2NjFDMjlG
NEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUy
NjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggaW4g
SGVhZGVycyAqLywKLQkJCQkwRkQyRkQ5NTIwQjUyQkUyMDBGMDk0NDEgLyogSXNvU3Vic3BhY2VJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTlFRjdDNDFDNTZFRDk2MDAyQjA1MzQgLyog
QjNQQ1RvT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUyQTFCREFDREFDMDA4
MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM3MzA4RDFDMEJE
MjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5oIGluIEhlYWRlcnMgKi8sCkBAIC04NDkzLDYg
Kzg0ODAsNyBAQAogCQkJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJl
c3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0RjExRTgyMDlCQ0RBQjAwNzA5NjU0IC8qIENv
bXBpbGVyVGltaW5nU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRENFMTJBMUZBRkE4NUYw
MDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkQyRkQ5
NDIwQjUyQkRFMDBGMDk0NDEgLyogQ29tcGxldGVTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21wbGV0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1
cnJlbnRKU0xvY2suaCBpbiBIZWFkZXJzICovLApAQCAtODk5MCw2ICs4OTc4LDcgQEAKIAkJCQkw
RkI0Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0NlbGxTZXRJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkRDRTEyRDFGQUZCNEU1MDA2RjM5MDEgLyogSXNvU3Vic3BhY2UuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRDJGRDk1MjBCNTJCRTIwMEYwOTQ0MSAvKiBJc29TdWJzcGFj
ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUUwRkU3MjA4NkFENDgwMDk3RjBERSAv
KiBJc29TdWJzcGFjZVBlclZNLmggaW4gSGVhZGVycyAqLywKIAkJCQk4QjlGNkQ1NjFENTkxMkZB
MDAxQzczOUYgLyogSXRlcmF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0RDU1Qjgx
QUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC05
MDAwLDcgKzg5ODksNiBAQAogCQkJCUJDMThDNDE0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2Ny
aXB0Q29yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8q
IEphdmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIy
RDcwMDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkQyRkQ5NDIwQjUyQkRF
MDBGMDk0NDEgLyogQ29tcGxldGVTdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFMTIyMDI3MUJFN0Y1OEMwMDM5RTZGMiAvKiBKSVRBZGRHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNzVBMDY2MjAxM0U0RjEwMDM4RTJDRiAvKiBKSVRBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFM0EwNkIyMUMxMENCODkwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5l
cmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CmluZGV4IGMw
MTFlZTZjNTIzMmNiZTQ2YmNjMDYxNDExYmI3YjZkNDQwMGQyYTYuLjRkMTgwYzgxOGYzNjdmODJk
YTEwZTllOWNlNWVmYmI5NTE3YzI4ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKQEAg
LTU5NywxNCArNTk3LDEyIEBAIGppdC9Ib3N0Q2FsbFJldHVyblZhbHVlLmNwcAogaml0L0lDU3Rh
dHMuY3BwCiBqaXQvSW50cmluc2ljRW1pdHRlci5jcHAKIGppdC9KSVQuY3BwCitqaXQvSklUMzJf
NjQuY3BwCitqaXQvSklUNjQuY3BwCiBqaXQvSklUQWRkR2VuZXJhdG9yLmNwcAotaml0L0pJVEFy
aXRobWV0aWMuY3BwCi1qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAogaml0L0pJVEJpdEFuZEdl
bmVyYXRvci5jcHAKIGppdC9KSVRCaXRPckdlbmVyYXRvci5jcHAKIGppdC9KSVRCaXRYb3JHZW5l
cmF0b3IuY3BwCi1qaXQvSklUQ2FsbC5jcHAKLWppdC9KSVRDYWxsMzJfNjQuY3BwCiBqaXQvSklU
Q29kZS5jcHAKIGppdC9KSVREaXNhc3NlbWJsZXIuY3BwCiBqaXQvSklURGl2R2VuZXJhdG9yLmNw
cApAQCAtNjEzLDExICs2MTEsNyBAQCBqaXQvSklUSW5saW5lQ2FjaGVHZW5lcmF0b3IuY3BwCiBq
aXQvSklUTGVmdFNoaWZ0R2VuZXJhdG9yLmNwcAogaml0L0pJVE11bEdlbmVyYXRvci5jcHAKIGpp
dC9KSVROZWdHZW5lcmF0b3IuY3BwCi1qaXQvSklUT3Bjb2Rlcy5jcHAKLWppdC9KSVRPcGNvZGVz
MzJfNjQuY3BwCiBqaXQvSklUT3BlcmF0aW9ucy5jcHAKLWppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5j
cHAKLWppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAogaml0L0pJVFJpZ2h0U2hpZnRHZW5l
cmF0b3IuY3BwCiBqaXQvSklUU3R1YlJvdXRpbmUuY3BwCiBqaXQvSklUU3ViR2VuZXJhdG9yLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGQ5ZGIwNjI5YTQzOGMxMjlkNTdiZmEz
ODMxNjY5ZWI4YWYxNTY5OTguLjNkODM2ZjQzNmIwMjExOWViZmI0YjEwMjYyMGMyNzE5NjE2N2Uy
MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAgLTI5LDE0ICsyOSwyMiBAQAogCiAj
aW5jbHVkZSAiSklULmgiCiAKKyNpbmNsdWRlICJBcml0aFByb2ZpbGUuaCIKICNpbmNsdWRlICJC
eXRlY29kZUdyYXBoLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgiCiAj
aW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIK
ICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJJbnRlcnByZXRlcklubGlu
ZXMuaCIKKyNpbmNsdWRlICJKSVRCaXRBbmRHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRCaXRP
ckdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkpJVEJpdFhvckdlbmVyYXRvci5oIgorI2luY2x1ZGUg
IkpJVERpdkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkpJVElubGluZXMuaCIKKyNpbmNsdWRlICJK
SVRMZWZ0U2hpZnRHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJKSVRNYXRoSUMuaCIKICNpbmNsdWRl
ICJKSVRPcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiSklUUmlnaHRTaGlmdEdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbi5oIgpAQCAtNDcsOCArNTUsMTEgQEAKICNpbmNsdWRlICJQcm9maWxlckRhdGFi
YXNlLmgiCiAjaW5jbHVkZSAiUHJvZ3JhbUNvZGVCbG9jay5oIgogI2luY2x1ZGUgIlJlc3VsdFR5
cGUuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJTY29wZWRBcmd1
bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIlN0YWNr
QWxpZ25tZW50LmgiCisjaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgiCiAjaW5jbHVkZSAiVGh1bmtH
ZW5lcmF0b3JzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSA8d3Rm
L0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CkBAIC0xMDIwLDYgKzEwMzEsMTU1MCBA
QCBTZWNvbmRzIEpJVDo6dG90YWxDb21waWxlVGltZSgpCiAgICAgcmV0dXJuIHRvdGFsQmFzZWxp
bmVDb21waWxlVGltZSArIHRvdGFsREZHQ29tcGlsZVRpbWUgKyB0b3RhbEZUTENvbXBpbGVUaW1l
OwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoSW5zdHJ1Y3Rpb24qKQoreworICAg
IC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CisgICAgaWYgKGNhbkJlT3B0aW1p
emVkKCkpIHsKKyAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoUG9zaXRpdmVPclplcm8s
IFRydXN0ZWRJbW0zMihPcHRpb25zOjpleGVjdXRpb25Db3VudGVySW5jcmVtZW50Rm9yTG9vcCgp
KSwKKyAgICAgICAgICAgIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+YWRkcmVzc09mSklU
RXhlY3V0ZUNvdW50ZXIoKSkpKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9s
b29wX2hpbnQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIEVtaXQgdGhlIHNsb3cgcGF0aCBm
b3IgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6CisgICAgaWYgKGNhbkJlT3B0aW1pemVkKCkp
IHsKKyAgICAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgICAgICBjb3B5Q2FsbGVl
U2F2ZXNGcm9tRnJhbWVPclJlZ2lzdGVyVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS0+dG9wRW50cnlGcmFtZSk7CisKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25PcHRp
bWl6ZSwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgICAgIEp1bXAgbm9PcHRpbWl6ZWRFbnRyeSA9
IGJyYW5jaFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgeworICAgICAgICAgICAgSnVtcCBvayA9IGJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmUsIHJldHVyblZhbHVlR1BSLCBUcnVzdGVkSW1tUHRyKGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEwMDApKSkpOworICAgICAgICAgICAgYWJvcnRX
aXRoUmVhc29uKEpJVFVucmVhc29uYWJsZUxvb3BIaW50SnVtcFRhcmdldCk7CisgICAgICAgICAg
ICBvay5saW5rKHRoaXMpOworICAgICAgICB9CisgICAgICAgIGp1bXAocmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICAgICAgbm9PcHRpbWl6ZWRFbnRyeS5s
aW5rKHRoaXMpOworCisgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xF
TkdUSChvcF9sb29wX2hpbnQpKTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpdGVy
KTsKKyNlbmRpZgorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190cmFwcyhJbnN0cnVjdGlv
biopCit7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDgoTm9uWmVybywgQWJzb2x1dGVBZGRy
ZXNzKG1fdm0tPm5lZWRUcmFwSGFuZGxpbmdBZGRyZXNzKCkpKSk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX25vcChJbnN0cnVjdGlvbiopCit7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3N1cGVy
X3NhbXBsZXJfYmVnaW4oSW5zdHJ1Y3Rpb24qKQoreworICAgIGFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgQWJzb2x1dGVBZGRyZXNzKGJpdHdpc2VfY2FzdDx2b2lkKj4oJmdfc3VwZXJTYW1wbGVyQ291
bnQpKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3N1cGVyX3NhbXBsZXJfZW5kKEluc3RydWN0
aW9uKikKK3sKKyAgICBzdWIzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRlQWRkcmVzcyhiaXR3
aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2hlY2tfdHJhcHMoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkhhbmRsZVRyYXBzKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X3JlZ2V4cChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uTmV3UmVnZXhwLCBtX2NvZGVCbG9jay0+cmVnZXhwKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdE5ld0Z1bmNDb21tb24oSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBKdW1wIGxhenlKdW1wOworICAgIGludCBkc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQs
IHJlZ1QwKTsKKyNlbHNlCisgICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQsIHJlZ1QwKTsKKyNlbmRpZgorICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y0V4ZWMgPSBtX2NvZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOworCisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBJbnRlcnByZXRlcjo6Z2V0T3Bj
b2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7CisgICAgaWYgKG9wY29kZUlEID09
IG9wX25ld19mdW5jKQorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9u
LCBkc3QsIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3
X2dlbmVyYXRvcl9mdW5jKQorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0dlbmVy
YXRvckZ1bmN0aW9uLCBkc3QsIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgZWxzZSBpZiAob3Bjb2Rl
SUQgPT0gb3BfbmV3X2FzeW5jX2Z1bmMpCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
TmV3QXN5bmNGdW5jdGlvbiwgZHN0LCByZWdUMCwgZnVuY0V4ZWMpOworICAgIGVsc2UgeworICAg
ICAgICBBU1NFUlQob3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jKTsKKyAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBk
c3QsIHJlZ1QwLCBmdW5jRXhlYyk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXdf
ZnVuYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXROZXdGdW5j
Q29tbW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25ld19n
ZW5lcmF0b3JfZnVuYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVt
aXROZXdGdW5jQ29tbW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGVtaXROZXdGdW5jQ29tbW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19mdW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgZW1pdE5ld0Z1bmNDb21tb24oY3VycmVudEluc3RydWN0aW9uKTsK
K30KKwordm9pZCBKSVQ6OmVtaXROZXdGdW5jRXhwckNvbW1vbihJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7CisjZWxzZQorICAgIGVtaXRM
b2FkUGF5bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7CisjZW5k
aWYKKworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVuY3Rpb24gPSBtX2NvZGVCbG9jay0+ZnVu
Y3Rpb25FeHByKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgIE9wY29kZUlE
IG9wY29kZUlEID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+
dS5vcGNvZGUpOworCisgICAgaWYgKG9wY29kZUlEID09IG9wX25ld19mdW5jX2V4cCkKKyAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCByZWdUMCwgZnVuY3Rp
b24pOworICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3JfZnVuY19leHAp
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3R2VuZXJhdG9yRnVuY3Rpb24sIGRz
dCwgcmVnVDAsIGZ1bmN0aW9uKTsKKyAgICBlbHNlIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfYXN5
bmNfZnVuY19leHApCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNGdW5j
dGlvbiwgZHN0LCByZWdUMCwgZnVuY3Rpb24pOworICAgIGVsc2UgeworICAgICAgICBBU1NFUlQo
b3Bjb2RlSUQgPT0gb3BfbmV3X2FzeW5jX2dlbmVyYXRvcl9mdW5jX2V4cCk7CisgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCByZWdU
MCwgZnVuY3Rpb24pOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmNfZXhw
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdE5ld0Z1bmNFeHBy
Q29tbW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25ld19n
ZW5lcmF0b3JfZnVuY19leHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBlbWl0TmV3RnVuY0V4cHJDb21tb24oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X2FzeW5jX2Z1bmNfZXhwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgZW1pdE5ld0Z1bmNFeHByQ29tbW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHAoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0TmV3RnVuY0V4cHJDb21t
b24oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2FycmF5
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlc0luZGV4ID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgc2l6ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMih2YWx1ZXNJbmRleCAq
IHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoUHJvZmlsZSwgZHN0LAorICAgICAgICBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCwgc2l6ZSk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25ld19hcnJheV93aXRoX3NpemUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc2l6ZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2l6ZUluZGV4LCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJh
eVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LAorICAgICAgICBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5hcnJheUFsbG9jYXRpb25Qcm9maWxlLCByZWdUMCk7CisjZWxzZQorICAgIGVtaXRMb2FkKHNp
emVJbmRleCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Fy
cmF5V2l0aFNpemVBbmRQcm9maWxlLCBkc3QsCisgICAgICAgIGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51LmFycmF5QWxsb2NhdGlvblByb2ZpbGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwor
I2VuZGlmCit9CisKK3ZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfY29udHJvbF9mbG93KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgQmFzaWNCbG9ja0xvY2F0aW9uKiBi
YXNpY0Jsb2NrTG9jYXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5iYXNpY0Jsb2NrTG9j
YXRpb247CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBiYXNpY0Jsb2NrTG9jYXRpb24tPmVtaXRF
eGVjdXRlQ29kZSgqdGhpcyk7CisjZWxzZQorICAgIGJhc2ljQmxvY2tMb2NhdGlvbi0+ZW1pdEV4
ZWN1dGVDb2RlKCp0aGlzLCByZWdUMCk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
YXJndW1lbnRfY291bnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBsb2FkMzIocGF5
bG9hZEZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSwgcmVnVDApOworICAgIHN1YjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFs
dWVSZWdzOjp3aXRoVHdvQXZhaWxhYmxlUmVncyhyZWdUMCwgcmVnVDEpOworICAgIGJveEludDMy
KHJlZ1QwLCByZXN1bHQpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHQp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcmVzdF9sZW5ndGgoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBudW1QYXJhbXNUb1NraXAgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS51bnNpZ25lZFZhbHVlOworICAgIGxvYWQzMihwYXlsb2FkRm9yKENhbGxGcmFt
ZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7CisgICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCByZWdUMCk7CisgICAgSnVtcCB6ZXJvTGVuZ3RoID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFs
LCByZWdUMCwgSW1tMzIobnVtUGFyYW1zVG9Ta2lwKSk7CisgICAgc3ViMzIoSW1tMzIobnVtUGFy
YW1zVG9Ta2lwKSwgcmVnVDApOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgYm94SW50MzIocmVn
VDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisjZW5kaWYKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisKKyAgICB6ZXJvTGVuZ3RoLmxpbmsodGhpcyk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSwgcmVnVDApOwor
I2Vsc2UKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworI2VuZGlmCisKKyAgICBk
b25lLmxpbmsodGhpcyk7CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGRzdCwgcmVnVDApOworI2Vsc2UKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpJbnQzMlRhZyksIHJlZ1QxKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisjZW5kaWYKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2FyZ3VtZW50KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDApOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzKHJlZ1QxLCByZWdUMCk7CisjZW5kaWYKKworICAgIGxvYWQzMihwYXlsb2FkRm9y
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMik7CisgICAgSnVtcCBhcmd1bWVu
dE91dE9mQm91bmRzID0gYnJhbmNoMzIoTGVzc1RoYW5PckVxdWFsLCByZWdUMiwgVHJ1c3RlZElt
bTMyKGluZGV4KSk7CisgICAgbG9hZFZhbHVlKGFkZHJlc3NGb3IoQ2FsbEZyYW1lU2xvdDo6dGhp
c0FyZ3VtZW50ICsgaW5kZXgpLCByZXN1bHRSZWdzKTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7
CisKKyAgICBhcmd1bWVudE91dE9mQm91bmRzLmxpbmsodGhpcyk7CisgICAgbW92ZVZhbHVlKGpz
VW5kZWZpbmVkKCksIHJlc3VsdFJlZ3MpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwg
cmVzdWx0UmVncyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2psZXNzKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXAob3Bfamxlc3MsIG9wMSwgb3AyLCB0YXJnZXQs
IExlc3NUaGFuKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wKG9wX2psZXNzZXEsIG9wMSwgb3AyLCB0YXJn
ZXQsIExlc3NUaGFuT3JFcXVhbCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2pncmVhdGVyKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXAob3BfamdyZWF0ZXIsIG9w
MSwgb3AyLCB0YXJnZXQsIEdyZWF0ZXJUaGFuKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfamdy
ZWF0ZXJlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBvcDEg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wKG9wX2pn
cmVhdGVyZXEsIG9wMSwgb3AyLCB0YXJnZXQsIEdyZWF0ZXJUaGFuT3JFcXVhbCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGlu
dCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wKG9wX2pubGVzcywgb3AxLCBvcDIsIHRhcmdldCwgR3JlYXRlclRoYW5PckVxdWFs
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfam5sZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisg
ICAgZW1pdF9jb21wYXJlQW5kSnVtcChvcF9qbmxlc3NlcSwgb3AxLCBvcDIsIHRhcmdldCwgR3Jl
YXRlclRoYW4pOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qbmdyZWF0ZXIoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcChvcF9qbmdyZWF0ZXIsIG9wMSwgb3AyLCB0
YXJnZXQsIExlc3NUaGFuT3JFcXVhbCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRl
cmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IG9wMSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXAob3Bfam5ncmVh
dGVyZXEsIG9wMSwgb3AyLCB0YXJnZXQsIExlc3NUaGFuKTsKK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2psZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KG9wMSwgb3AyLCB0YXJn
ZXQsIERvdWJsZUxlc3NUaGFuLCBvcGVyYXRpb25Db21wYXJlTGVzcywgZmFsc2UsIGl0ZXIpOwor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfamxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAg
IGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhvcDEsIG9wMiwgdGFyZ2V0LCBEb3VibGVMZXNzVGhhbk9yRXF1YWwsIG9wZXJhdGlv
bkNvbXBhcmVMZXNzRXEsIGZhbHNlLCBpdGVyKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2pncmVhdGVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KG9wMSwgb3AyLCB0YXJnZXQs
IERvdWJsZUdyZWF0ZXJUaGFuLCBvcGVyYXRpb25Db21wYXJlR3JlYXRlciwgZmFsc2UsIGl0ZXIp
OworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamdyZWF0ZXJlcShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
eworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGlu
dCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBh
cmVBbmRKdW1wU2xvdyhvcDEsIG9wMiwgdGFyZ2V0LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWws
IG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyRXEsIGZhbHNlLCBpdGVyKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2pubGVzcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGludCBvcDEgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhvcDEsIG9w
MiwgdGFyZ2V0LCBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MsIHRydWUsIGl0ZXIpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5s
ZXNzZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworCisgICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cob3AxLCBvcDIsIHRhcmdldCwgRG91
YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgdHJ1ZSwg
aXRlcik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbmdyZWF0ZXIoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3sKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAg
ICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3cob3AxLCBvcDIsIHRhcmdldCwgRG91YmxlTGVzc1RoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCB0cnVlLCBpdGVyKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAg
aW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KG9wMSwgb3AyLCB0YXJnZXQsIERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIG9wZXJh
dGlvbkNvbXBhcmVHcmVhdGVyRXEsIHRydWUsIGl0ZXIpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9iZWxvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDEgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOworICAgIGVtaXRfY29tcGFyZVVuc2lnbmVkKGRzdCwgb3AxLCBvcDIs
IEJlbG93KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfYmVsb3dlcShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGVt
aXRfY29tcGFyZVVuc2lnbmVkKGRzdCwgb3AxLCBvcDIsIEJlbG93T3JFcXVhbCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2piZWxvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGlu
dCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXAob3AxLCBvcDIsIHRhcmdldCwgQmVsb3cpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9qYmVsb3dlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBv
cDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXAob3AxLCBvcDIsIHRhcmdldCwgQmVsb3dPckVxdWFsKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3BfbmVnYXRlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgQXJpdGhQcm9maWxlKiBhcml0aFByb2ZpbGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9m
aWxlRm9yUEMoY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBKSVROZWdJQyogbmVnYXRlSUMgPSBt
X2NvZGVCbG9jay0+YWRkSklUTmVnSUMoYXJpdGhQcm9maWxlLCBjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5hZGQoY3VycmVudEluc3RydWN0aW9uLCBuZWdh
dGVJQyk7CisgICAgZW1pdE1hdGhJQ0Zhc3QobmVnYXRlSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdhdGUpOworfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVnYXRlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIEpJVE5lZ0lDKiBuZWdJQyA9IGJpdHdpc2VfY2Fz
dDxKSVROZWdJQyo+KG1faW5zdHJ1Y3Rpb25Ub01hdGhJQy5nZXQoY3VycmVudEluc3RydWN0aW9u
KSk7CisgICAgZW1pdE1hdGhJQ1Nsb3cobmVnSUMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BlcmF0
aW9uQXJpdGhOZWdhdGVQcm9maWxlZE9wdGltaXplLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZVByb2Zp
bGVkLCBvcGVyYXRpb25Bcml0aE5lZ2F0ZU9wdGltaXplKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgU25pcHBldEdlbmVyYXRvcj4KK3ZvaWQgSklUOjplbWl0Qml0QmluYXJ5T3BGYXN0UGF0aChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCByZXN1bHQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMSk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOwor
ICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIGxl
ZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdo
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3MgPSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworI2VuZGlm
CisKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFuZDsKKyAgICBTbmlwcGV0T3BlcmFuZCBy
aWdodE9wZXJhbmQ7CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAg
ICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7
CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRP
cGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMikpOworCisgICAg
UkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlz
Q29uc3QoKSk7CisKKyAgICBpZiAoIWxlZnRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICBpZiAoIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJl
Z3MpOworCisgICAgU25pcHBldEdlbmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFu
ZCwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgc2NyYXRjaEdQUik7CisKKyAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisKKyAgICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0
UGF0aCgpKTsKKyAgICBnZW4uZW5kSnVtcExpc3QoKS5saW5rKHRoaXMpOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKKworICAgIGFkZFNsb3dDYXNlKGdl
bi5zbG93UGF0aEp1bXBMaXN0KCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9iaXRhbmQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0Qml0QmluYXJ5T3BGYXN0
UGF0aDxKSVRCaXRBbmRHZW5lcmF0b3I+KGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2JpdG9yKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGg8SklUQml0T3JHZW5lcmF0b3I+KGN1cnJlbnRJbnN0
cnVjdGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2JpdHhvcihJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoPEpJVEJpdFhv
ckdlbmVyYXRvcj4oY3VycmVudEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
bHNoaWZ0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdEJpdEJp
bmFyeU9wRmFzdFBhdGg8SklUTGVmdFNoaWZ0R2VuZXJhdG9yPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworfQorCit2b2lkIEpJVDo6ZW1pdFJpZ2h0U2hpZnRGYXN0UGF0aChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBPcGNvZGVJRCBvcGNvZGVJRCkKK3sKKyAgICBBU1NFUlQob3Bjb2Rl
SUQgPT0gb3BfcnNoaWZ0IHx8IG9wY29kZUlEID09IG9wX3Vyc2hpZnQpOworCisgICAgSklUUmln
aHRTaGlmdEdlbmVyYXRvcjo6U2hpZnRUeXBlIHNuaXBwZXRTaGlmdFR5cGUgPSBvcGNvZGVJRCA9
PSBvcF9yc2hpZnQgPworICAgICAgICBKSVRSaWdodFNoaWZ0R2VuZXJhdG9yOjpTaWduZWRTaGlm
dCA6IEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlVuc2lnbmVkU2hpZnQ7CisKKyAgICBpbnQgcmVz
dWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AxID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJl
Z3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmlnaHRS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBs
ZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QyOworICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gSW52YWxpZEZQUlJlZzsKKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7CisgICAgRlBSUmVnIHNj
cmF0Y2hGUFIgPSBmcFJlZ1QyOworI2VuZGlmCisKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3Bl
cmFuZDsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQ7CisKKyAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihn
ZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlz
Q29uc3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKKyAgICBpZiAoIWxlZnRPcGVy
YW5kLmlzQ29uc3QoKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRS
ZWdzKTsKKyAgICBpZiAoIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworCisgICAgSklUUmlnaHRTaGlmdEdlbmVy
YXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJlZ3Ms
IHJpZ2h0UmVncywKKyAgICAgICAgZnBSZWdUMCwgc2NyYXRjaEdQUiwgc2NyYXRjaEZQUiwgc25p
cHBldFNoaWZ0VHlwZSk7CisKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisKKyAg
ICBBU1NFUlQoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKTsKKyAgICBnZW4uZW5kSnVtcExpc3QoKS5s
aW5rKHRoaXMpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdz
KTsKKworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9yc2hpZnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBlbWl0UmlnaHRTaGlmdEZhc3RQYXRoKGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BfcnNoaWZ0
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdXJzaGlmdChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY3VycmVudEluc3RydWN0
aW9uLCBvcF91cnNoaWZ0KTsKK30KKworQUxXQVlTX0lOTElORSBzdGF0aWMgT3BlcmFuZFR5cGVz
IGdldE9wZXJhbmRUeXBlcyhJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit7CisgICAgcmV0dXJu
IE9wZXJhbmRUeXBlcyhBcml0aFByb2ZpbGU6OmZyb21JbnQoaW5zdHJ1Y3Rpb25bNF0udS5vcGVy
YW5kKS5saHNSZXN1bHRUeXBlKCksIEFyaXRoUHJvZmlsZTo6ZnJvbUludChpbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmQpLnJoc1Jlc3VsdFR5cGUoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2Fk
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEFyaXRoUHJvZmlsZSog
YXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0
cnVjdGlvbik7CisgICAgSklUQWRkSUMqIGFkZElDID0gbV9jb2RlQmxvY2stPmFkZEpJVEFkZElD
KGFyaXRoUHJvZmlsZSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgYWRkSUMpOworICAgIGVtaXRNYXRoSUNGYXN0
KGFkZElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9w
ZXJhdGlvblZhbHVlQWRkKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2FkZChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBKSVRBZGRJQyog
YWRkSUMgPSBiaXR3aXNlX2Nhc3Q8SklUQWRkSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbikpOworICAgIGVtaXRNYXRoSUNTbG93KGFkZElDLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9u
VmFsdWVBZGRQcm9maWxlZCwgb3BlcmF0aW9uVmFsdWVBZGRPcHRpbWl6ZSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVu
YW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+Cit2b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUVW5h
cnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVkRnVuY3Rp
b24gbm9uUHJvZmlsZWRGdW5jdGlvbikKK3sKKyAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3BlcmFuZCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIC8vIEFyaXRoTmVnYXRl
IGJlbmVmaXRzIGZyb20gdXNpbmcgdGhlIHNhbWUgcmVnaXN0ZXIgYXMgc3JjIGFuZCBkc3QuCisg
ICAgLy8gU2luY2UgcmVnVDE9PWFyZ3VtZW50R1BSMSwgdXNpbmcgcmVnVDEgYXZvaWQgc2h1ZmZs
aW5nIHJlZ2lzdGVyIHRvIGNhbGwgdGhlIHNsb3cgcGF0aC4KKyAgICBKU1ZhbHVlUmVncyBzcmNS
ZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBK
U1ZhbHVlUmVncyhyZWdUMSk7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMjsKKyNlbHNl
CisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Cisg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Cisg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1BVEhf
SUNfU1RBVFMpCisgICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVsKCk7CisjZW5kaWYKKworICAg
IG1hdGhJQy0+bV9nZW5lcmF0b3IgPSBHZW5lcmF0b3IocmVzdWx0UmVncywgc3JjUmVncywgc2Ny
YXRjaEdQUik7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQsIHNyY1JlZ3Mp
OworCisgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBt
X2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuYWRkKGN1cnJlbnRJbnN0cnVjdGlv
biwgTWF0aElDR2VuZXJhdGlvblN0YXRlKCkpLml0ZXJhdG9yLT52YWx1ZTsKKworICAgIGJvb2wg
Z2VuZXJhdGVkSW5saW5lQ29kZSA9IG1hdGhJQy0+Z2VuZXJhdGVJbmxpbmUoKnRoaXMsIG1hdGhJ
Q0dlbmVyYXRpb25TdGF0ZSk7CisgICAgaWYgKCFnZW5lcmF0ZWRJbmxpbmVDb2RlKSB7CisgICAg
ICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsK
KyAgICAgICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAg
ICAgICAgICBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRS
ZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChub25Qcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBz
cmNSZWdzKTsKKyAgICB9IGVsc2UKKyAgICAgICAgYWRkU2xvd0Nhc2UobWF0aElDR2VuZXJhdGlv
blN0YXRlLnNsb3dQYXRoSnVtcHMpOworCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAg
YXV0byBpbmxpbmVFbmQgPSBsYWJlbCgpOworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihpbmxpbmVFbmQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpIC0gbGlua0J1ZmZlci5s
b2NhdGlvbk9mKGlubGluZVN0YXJ0KS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKKyAgICAg
ICAgbWF0aElDLT5tX2dlbmVyYXRlZENvZGVTaXplICs9IHNpemU7CisgICAgfSk7CisjZW5kaWYK
KworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRSZWdzKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJvZmlsZWRGdW5jdGlvbiwg
dHlwZW5hbWUgTm9uUHJvZmlsZWRGdW5jdGlvbj4KK3ZvaWQgSklUOjplbWl0TWF0aElDRmFzdChK
SVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBQcm9maWxlZEZ1bmN0aW9uIHByb2ZpbGVkRnVuY3Rpb24sIE5vblByb2ZpbGVk
RnVuY3Rpb24gbm9uUHJvZmlsZWRGdW5jdGlvbikKK3sKKyAgICBpbnQgcmVzdWx0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0g
Z2V0T3BlcmFuZFR5cGVzKGNvcGllZEluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvbikpOwor
ICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOworICAgIEpTVmFs
dWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QyKTsKKyAgICBKU1ZhbHVlUmVncyBy
ZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDApOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDM7CisgICAgRlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworI2Vsc2UKKyAgICBPcGVy
YW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlwZXMoY3VycmVudEluc3RydWN0aW9uKTsKKyAg
ICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAg
SlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKTsKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIg
PSByZWdUNDsKKyAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IGZwUmVnVDI7CisjZW5kaWYKKworICAg
IFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKHR5cGVzLmZpcnN0KCkpOworICAgIFNuaXBwZXRP
cGVyYW5kIHJpZ2h0T3BlcmFuZCh0eXBlcy5zZWNvbmQoKSk7CisKKyAgICBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AxKSkKKyAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7CisgICAgZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSkKKyAgICAgICAgcmlnaHRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENv
bnN0YW50SW50KG9wMikpOworCisgICAgUkVMRUFTRV9BU1NFUlQoIWxlZnRPcGVyYW5kLmlzQ29u
c3QoKSB8fCAhcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSk7CisKKyAgICBtYXRoSUMtPm1fZ2VuZXJh
dG9yID0gR2VuZXJhdG9yKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxl
ZnRSZWdzLCByaWdodFJlZ3MsIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hG
UFIpOworCisgICAgQVNTRVJUKCEoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFu
dChsZWZ0T3BlcmFuZCkgJiYgR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQo
cmlnaHRPcGVyYW5kKSkpOworCisgICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxp
ZENvbnN0YW50KGxlZnRPcGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihv
cDEsIGxlZnRSZWdzKTsKKyAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENv
bnN0YW50KHJpZ2h0T3BlcmFuZCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ay
LCByaWdodFJlZ3MpOworCisjaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCisgICAgYXV0byBpbmxp
bmVTdGFydCA9IGxhYmVsKCk7CisjZW5kaWYKKworICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYg
bWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0
YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVy
YXRvci0+dmFsdWU7CisKKyAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdl
bmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOworICAgIGlmICghZ2Vu
ZXJhdGVkSW5saW5lQ29kZSkgeworICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQor
ICAgICAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKKyAgICAg
ICAgZWxzZSBpZiAocmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKKyAgICAgICAgICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOworICAgICAgICBBcml0aFByb2ZpbGUqIGFy
aXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7CisgICAgICAgIGlmIChhcml0aFBy
b2ZpbGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bldpdGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0
UmVncywgYXJpdGhQcm9maWxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQobm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3Ms
IHJpZ2h0UmVncyk7CisgICAgfSBlbHNlCisgICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQor
ICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwoKTsKKyAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YoaW5saW5lRW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihpbmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7Cisg
ICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOworICAgIH0pOworI2Vu
ZGlmCisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRj
aEZ1bmN0aW9uLCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVu
Y3Rpb24+Cit2b2lkIEpJVDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9y
PiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0
Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9m
aWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQoreworICAgIE1h
dGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlv
blRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7
CisgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOworCisg
ICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyNl
bHNlCisgICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7
CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7
CisjZW5kaWYKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gc2xvd1BhdGhT
dGFydCA9IGxhYmVsKCk7CisjZW5kaWYKKworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbWF0aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3Vs
ZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNo
b3VsZFNsb3dQYXRoUmVwYXRjaCkKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5z
bG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpf
SklUT3BlcmF0aW9uX0VKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3Ms
IHNyY1JlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2Zp
bGUpOworICAgIH0gZWxzZQorICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhD
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJh
dGlvbl9FSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3Rl
ZEltbVB0cihtYXRoSUMpKTsKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8g
c2xvd1BhdGhFbmQgPSBsYWJlbCgpOworICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYg
bGlua0J1ZmZlcikgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25P
ZihzbG93UGF0aEVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7CisgICAg
ICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOworICAgIH0pOworI2VuZGlm
CisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7CisKKyAg
ICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgTWF0
aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9u
VG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsK
KyAgICAgICAgbWF0aElDLT5maW5hbGl6ZUlubGluZUNvZGUobWF0aElDR2VuZXJhdGlvblN0YXRl
LCBsaW5rQnVmZmVyKTsKKyAgICB9KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRv
ciwgdHlwZW5hbWUgUHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVu
Y3Rpb24sIHR5cGVuYW1lIFJlcGF0Y2hGdW5jdGlvbj4KK3ZvaWQgSklUOjplbWl0TWF0aElDU2xv
dyhKSVRCaW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5j
dGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24g
cmVwYXRjaEZ1bmN0aW9uKQoreworICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQo
Y3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7CisgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNs
b3dQYXRoU3RhcnQgPSBsYWJlbCgpOworCisgICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJh
bmRUeXBlcyhjb3BpZWRJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKKyAgICBKU1Zh
bHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKKyAgICBKU1ZhbHVlUmVncyBy
aWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyNlbHNlCisgICAgT3BlcmFuZFR5cGVzIHR5cGVzID0g
Z2V0T3BlcmFuZFR5cGVzKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgSlNWYWx1ZVJlZ3MgbGVm
dFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJpZ2h0
UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
UmVncyA9IGxlZnRSZWdzOworI2VuZGlmCisKKyAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3BlcmFu
ZCh0eXBlcy5maXJzdCgpKTsKKyAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQodHlwZXMu
c2Vjb25kKCkpOworCisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCisgICAgICAg
IGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwor
ICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAgICAgIHJpZ2h0T3Bl
cmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKKworICAgIEFT
U0VSVCghKEdlbmVyYXRvcjo6aXNMZWZ0T3BlcmFuZFZhbGlkQ29uc3RhbnQobGVmdE9wZXJhbmQp
ICYmIEdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3BlcmFuZCkp
KTsKKworICAgIGlmIChHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsK
KyAgICBlbHNlIGlmIChHZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdo
dE9wZXJhbmQpKQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdz
KTsKKworI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQorICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9
IGxhYmVsKCk7CisjZW5kaWYKKworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0
aElDLT5hcml0aFByb2ZpbGUoKTsKKyAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQ
cm9maWxpbmcoKSkgeworICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNs
b3dQYXRoUmVwYXRjaCkKKyAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0
aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChiaXR3aXNlX2Nhc3Q8Sl9KSVRPcGVyYXRp
b25fRUpKTWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9u
V2l0aFJlc3VsdChwcm9maWxlZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRS
ZWdzLCBhcml0aFByb2ZpbGUpOworICAgIH0gZWxzZQorICAgICAgICBtYXRoSUNHZW5lcmF0aW9u
U3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0
PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4ocmVwYXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgbGVm
dFJlZ3MsIHJpZ2h0UmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMpKTsKKworI2lmIEVOQUJMRShN
QVRIX0lDX1NUQVRTKQorICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBsYWJlbCgpOworICAgIGFkZExp
bmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgeworICAgICAgICBzaXplX3Qgc2l6
ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCkuZXhlY3V0YWJsZUFkZHJlc3M8
Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhTdGFydCkuZXhlY3V0YWJs
ZUFkZHJlc3M8Y2hhcio+KCk7CisgICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRDb2RlU2l6ZSAr
PSBzaXplOworICAgIH0pOworI2VuZGlmCisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJl
c3VsdCwgcmVzdWx0UmVncyk7CisKKyAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxp
bmtCdWZmZXIpIHsKKyAgICAgICAgTWF0aElDR2VuZXJhdGlvblN0YXRlJiBtYXRoSUNHZW5lcmF0
aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0aW9uU3RhdGUuZmluZChjdXJy
ZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKKyAgICAgICAgbWF0aElDLT5maW5hbGl6ZUlubGluZUNv
ZGUobWF0aElDR2VuZXJhdGlvblN0YXRlLCBsaW5rQnVmZmVyKTsKKyAgICB9KTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3BfZGl2KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjb3BpZWRJbnN0cnVjdGlvbihj
dXJyZW50SW5zdHJ1Y3Rpb24pKTsKKyAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdU
MSk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdzOworICAgIEdQUlJlZyBz
Y3JhdGNoR1BSID0gcmVnVDI7CisjZWxzZQorICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9w
ZXJhbmRUeXBlcyhjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdz
ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Mg
PSBsZWZ0UmVnczsKKyAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1Q0OworI2VuZGlmCisgICAg
RlBSUmVnIHNjcmF0Y2hGUFIgPSBmcFJlZ1QyOworCisgICAgQXJpdGhQcm9maWxlKiBhcml0aFBy
b2ZpbGUgPSBudWxscHRyOworICAgIGlmIChzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAg
IGFyaXRoUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJyZW50SW5z
dHJ1Y3Rpb24pOworCisgICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQodHlwZXMuZmlyc3Qo
KSk7CisgICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKHR5cGVzLnNlY29uZCgpKTsKKwor
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQorICAgICAgICBsZWZ0T3BlcmFuZC5z
ZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKKyNpZiBVU0UoSlNWQUxV
RTY0KQorICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50RG91YmxlKG9wMSkpCisgICAgICAg
IGxlZnRPcGVyYW5kLnNldENvbnN0RG91YmxlKGdldE9wZXJhbmRDb25zdGFudERvdWJsZShvcDEp
KTsKKyNlbmRpZgorICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCisgICAg
ICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIp
KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50RG91
YmxlKG9wMikpCisgICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdERvdWJsZShnZXRPcGVyYW5k
Q29uc3RhbnREb3VibGUob3AyKSk7CisjZW5kaWYKKworICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0
T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOworCisgICAgaWYg
KCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AxLCBsZWZ0UmVncyk7CisgICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQorICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKKworICAgIEpJVERpdkdl
bmVyYXRvciBnZW4obGVmdE9wZXJhbmQsIHJpZ2h0T3BlcmFuZCwgcmVzdWx0UmVncywgbGVmdFJl
Z3MsIHJpZ2h0UmVncywKKyAgICAgICAgZnBSZWdUMCwgZnBSZWdUMSwgc2NyYXRjaEdQUiwgc2Ny
YXRjaEZQUiwgYXJpdGhQcm9maWxlKTsKKworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlz
KTsKKworICAgIGlmIChnZW4uZGlkRW1pdEZhc3RQYXRoKCkpIHsKKyAgICAgICAgZ2VuLmVuZEp1
bXBMaXN0KCkubGluayh0aGlzKTsKKyAgICAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1
bHQsIHJlc3VsdFJlZ3MpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXBM
aXN0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVChnZW4uZW5kSnVtcExpc3QoKS5l
bXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGdlbi5zbG93UGF0aEp1bXBMaXN0KCkuZW1wdHkoKSk7
CisgICAgICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfZGl2KTsKKyAgICAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAg
ICB9Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX211bChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbV9jb2RlQmxvY2st
PmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgSklUTXVsSUMqIG11
bElDID0gbV9jb2RlQmxvY2stPmFkZEpJVE11bElDKGFyaXRoUHJvZmlsZSwgY3VycmVudEluc3Ry
dWN0aW9uKTsKKyAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlv
biwgbXVsSUMpOworICAgIGVtaXRNYXRoSUNGYXN0KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX211bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisKKyAgICBKSVRNdWxJQyogbXVsSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTXVs
SUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOworICAg
IGVtaXRNYXRoSUNTbG93KG11bElDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVl
TXVsUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVNdWxQcm9maWxlZCwgb3BlcmF0aW9u
VmFsdWVNdWxPcHRpbWl6ZSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3N1YihJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxl
ID0gbV9jb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVjdGlvbik7Cisg
ICAgSklUU3ViSUMqIHN1YklDID0gbV9jb2RlQmxvY2stPmFkZEpJVFN1YklDKGFyaXRoUHJvZmls
ZSwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBtX2luc3RydWN0aW9uVG9NYXRoSUMuYWRkKGN1
cnJlbnRJbnN0cnVjdGlvbiwgc3ViSUMpOworICAgIGVtaXRNYXRoSUNGYXN0KHN1YklDLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVl
U3ViKTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX3N1YihJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBKSVRTdWJJQyogc3ViSUMgPSBiaXR3
aXNlX2Nhc3Q8SklUU3ViSUMqPihtX2luc3RydWN0aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvbikpOworICAgIGVtaXRNYXRoSUNTbG93KHN1YklDLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWRPcHRpbWl6ZSwgb3BlcmF0aW9uVmFsdWVTdWJQcm9m
aWxlZCwgb3BlcmF0aW9uVmFsdWVTdWJPcHRpbWl6ZSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9QX0FERCwgT1BfU1VCLCBPUF9NVUwsIE9QX1BPVyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJp
ZXIoSlNDZWxsKiBvd25lcikKK3sKKyAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4g
PSBiYXJyaWVyQnJhbmNoKCp2bSgpLCBvd25lciwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgsIG93bmVyKTsKKyAgICBvd25lcklzUmVtZW1i
ZXJlZE9ySW5FZGVuLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0QnlWYWxJZGVudGlm
aWVyQ2hlY2soQnlWYWxJbmZvKiBieVZhbEluZm8sIFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJ
RCBzY3JhdGNoLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBzbG93
Q2FzZXMpCit7CisgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKQorICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgY2VsbCwgVHJ1c3RlZEltbVB0cihieVZh
bEluZm8tPmNhY2hlZFN5bWJvbC5nZXQoKSkpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhjZWxsKSk7CisgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhjZWxsLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRjaCk7CisgICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1t
UHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKSk7CisgICAgfQorfQorCit2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQoreworICAgIEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSAmbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW2J5VmFs
SW5mby0+Ynl0ZWNvZGVJbmRleF07CisKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgc3dpdGNoIChhcnJheU1vZGUpIHsKKyAgICBjYXNl
IEpJVEludDMyOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJHZXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVERvdWJs
ZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQ29udGlndW91czoK
KyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNHZXRCeVZhbChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEpJVEFycmF5U3RvcmFn
ZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURGlyZWN0
QXJndW1lbnRzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBKSVRTY29wZWRBcmd1bWVudHM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRTY29wZWRBcmd1
bWVudHNHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBUeXBlZEFycmF5VHlwZSB0eXBlID0gdHlwZWRBcnJh
eVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKKyAgICAgICAgaWYgKGlzSW50KHR5cGUp
KQorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgSnVtcCBk
b25lID0ganVtcCgpOworCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2Rl
QmxvY2spOworCisgICAgcGF0Y2hCdWZmZXIubGluayhiYWRUeXBlLCBDb2RlTG9jYXRpb25MYWJl
bDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4
ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlW
YWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
c2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3Mu
dmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0
aCkpOworCisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJhZFR5cGVKdW1w
LmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOworCisgICAgYnlW
YWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICJC
YXNlbGluZSBnZXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJp
bmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CisKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxv
Y2F0aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxv
Y2F0aW9uQ2FsbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihyZXR1
cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0QnlW
YWxHZW5lcmljKSk7Cit9CisKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsV2l0aENh
Y2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKK3sKKyAgICBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uID0gJm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieVZhbElu
Zm8tPmJ5dGVjb2RlSW5kZXhdOworCisgICAgSnVtcCBmYXN0RG9uZUNhc2U7CisgICAgSnVtcCBz
bG93RG9uZUNhc2U7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4gPSBlbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoYnlWYWxJbmZvLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIHByb3BlcnR5TmFtZSwgZmFzdERvbmVDYXNlLCBzbG93RG9uZUNhc2UsIHNs
b3dDYXNlcyk7CisKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5t
X2xvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJU
YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxl
QWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+
cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZhc3REb25l
Q2FzZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFk
VHlwZUp1bXBUb0RvbmUpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dEb25lQ2FzZSwgYnlW
YWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBU
b05leHRIb3RQYXRoKSk7CisgICAgaWYgKCFtX2V4Y2VwdGlvbkNoZWNrcy5lbXB0eSgpKQorICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZXhjZXB0aW9uQ2hlY2tzLCBieVZhbEluZm8tPmV4Y2Vw
dGlvbkhhbmRsZXIpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fY2FsbHMp
IHsKKyAgICAgICAgaWYgKGNhbGxTaXRlLmNhbGxlZSkKKyAgICAgICAgICAgIHBhdGNoQnVmZmVy
LmxpbmsoY2FsbFNpdGUuZnJvbSwgY2FsbFNpdGUuY2FsbGVlKTsKKyAgICB9CisgICAgZ2VuLmZp
bmFsaXplKHBhdGNoQnVmZmVyLCBwYXRjaEJ1ZmZlcik7CisKKyAgICBieVZhbEluZm8tPnN0dWJS
b3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBh
dGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKKyAgICAgICAgIkJhc2VsaW5lIGdldF9i
eV92YWwgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4g
cG9pbnQgJXAiLCBwcm9wZXJ0eU5hbWUuaW1wbCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJpbmco
Km1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7CisgICAgYnlWYWxJ
bmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJl
cGF0Y2hKdW1wKGJ5VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRy
VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpKTsKK30K
Kwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkK
K3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJm1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOworCisgICAgUGF0Y2hhYmxl
SnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIGJvb2wgbmVlZHNM
aW5rRm9yV3JpdGVCYXJyaWVyID0gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGFycmF5TW9kZSkgewor
ICAgIGNhc2UgSklUSW50MzI6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SklURG91YmxlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250
aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIG5lZWRzTGlua0ZvcldyaXRlQmFycmll
ciA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAg
ICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgbmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyID0gdHJ1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlw
ZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlNb2RlKGFycmF5TW9kZSk7CisgICAgICAgIGlm
IChpc0ludCh0eXBlKSkKKyAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlLCB0eXBlKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1dEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
KnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGJhZFR5cGUsIENvZGVM
b2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+Ojpj
cmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxB
dE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hC
dWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0
dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJl
c3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lLCBieVZhbEluZm8tPmJh
ZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRvRG9uZSkpOwor
ICAgIGlmIChuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIpIHsKKyAgICAgICAgQVNTRVJUKHJlbW92
ZUNvZGVQdHJUYWcobV9jYWxscy5sYXN0KCkuY2FsbGVlLmV4ZWN1dGFibGVBZGRyZXNzKCkpID09
IHJlbW92ZUNvZGVQdHJUYWcob3BlcmF0aW9uV3JpdGVCYXJyaWVyU2xvd1BhdGgpKTsKKyAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzLmxhc3QoKS5mcm9tLCBtX2NhbGxzLmxhc3QoKS5j
YWxsZWUpOworICAgIH0KKworICAgIGJvb2wgaXNEaXJlY3QgPSBJbnRlcnByZXRlcjo6Z2V0T3Bj
b2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJl
Y3Q7CisgICAgaWYgKCFpc0RpcmVjdCkgeworICAgICAgICBieVZhbEluZm8tPnN0dWJSb3V0aW5l
ID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgICAgIG1fY29kZUJsb2NrLCBwYXRj
aEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICAgICAiQmFzZWxpbmUgcHV0
X2J5X3ZhbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVC
bG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOworCisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisg
ICAgICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFn
LAorICAgICAgICAgICAgIkJhc2VsaW5lIHB1dF9ieV92YWxfZGlyZWN0IHN0dWIgZm9yICVzLCBy
ZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFk
ZHJlc3MudmFsdWUoKSk7CisgICAgfQorICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChi
eVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0
clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1hY3Jv
QXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fz
c2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3Bl
cmF0aW9uUHRyVGFnPihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6
IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOworfQorCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJm1f
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOworCisg
ICAgSnVtcExpc3QgZG9uZUNhc2VzOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKGJ5VmFsSW5m
bywgY3VycmVudEluc3RydWN0aW9uLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUsIGRvbmVDYXNlcywg
c2xvd0Nhc2VzKTsKKworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2st
Pm1fbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2sp
OworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0
clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZv
LT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZUNh
c2VzLCBieVZhbEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRU
eXBlSnVtcFRvRG9uZSkpOworICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkKKyAg
ICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywgYnlWYWxJbmZvLT5leGNl
cHRpb25IYW5kbGVyKTsKKworICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2NhbGxz
KSB7CisgICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCisgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7CisgICAgfQorICAgIGdlbi5m
aW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0Y2hCdWZmZXIpOworCisgICAgYnlWYWxJbmZvLT5zdHVi
Um91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIG1fY29kZUJsb2NrLCBw
YXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCisgICAgICAgICJCYXNlbGluZSBwdXRf
YnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3Bl
cnR5TmFtZS5pbXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRh
dGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKKyAgICBieVZhbEluZm8tPnN0dWJJbmZvID0g
Z2VuLnN0dWJJbmZvKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJ
bmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFn
PihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRp
b25QdHJUYWc+KHB1dEtpbmQgPT0gRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5l
cmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Cit9CisKK0pJVDo6SnVtcExpc3QgSklU
OjplbWl0RG91YmxlTG9hZChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBS
ZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgUmVnaXN0ZXJJRCBpbmRleGluZyA9IHJl
Z1QyOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworI2Vsc2UKKyAgICBSZWdpc3Rl
cklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CisgICAg
UmVnaXN0ZXJJRCBpbmRleGluZyA9IHJlZ1QxOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJl
Z1QzOworI2VuZGlmCisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBiYWRUeXBlID0g
cGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGluZGV4aW5nLCBUcnVzdGVkSW1tMzIoRG91Ymxl
U2hhcGUpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgc2NyYXRjaCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKHNjcmF0Y2gsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpKTsKKyAgICBsb2FkRG91YmxlKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0
eSwgVGltZXNFaWdodCksIGZwUmVnVDApOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoRG91
YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDApKTsKKworICAg
IHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0Q29udGlndW91
c0xvYWQoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUg
ZXhwZWN0ZWRTaGFwZSkKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQgYmFz
ZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAgICBSZWdpc3Rl
cklEIGluZGV4aW5nID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJl
Z3MocmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworI2Vsc2UKKyAgICBS
ZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7
CisgICAgUmVnaXN0ZXJJRCBpbmRleGluZyA9IHJlZ1QxOworICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0g
cmVnVDM7CisjZW5kaWYKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIGJhZFR5cGUg
PSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgaW5kZXhpbmcsIFRydXN0ZWRJbW0zMihleHBl
Y3RlZFNoYXBlKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHNjcmF0Y2gpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhzY3JhdGNoLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKSk7CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3JhdGNoLCBwcm9w
ZXJ0eSwgVGltZXNFaWdodCksIHJlc3VsdCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJ
ZkVtcHR5KHJlc3VsdCkpOworCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSkKK3sKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQgYmFzZSA9
IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAgICBSZWdpc3RlcklE
IGluZGV4aW5nID0gcmVnVDI7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3Mo
cmVnVDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworI2Vsc2UKKyAgICBSZWdp
c3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Cisg
ICAgUmVnaXN0ZXJJRCBpbmRleGluZyA9IHJlZ1QxOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVn
VDM7CisjZW5kaWYKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigtQXJyYXlTdG9yYWdlU2hhcGUpLCBpbmRleGluZywgc2NyYXRjaCk7CisgICAgYmFk
VHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKEFib3ZlLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoU2xv
d1B1dEFycmF5U3RvcmFnZVNoYXBlIC0gQXJyYXlTdG9yYWdlU2hhcGUpKTsKKworICAgIGxvYWRQ
dHIoQWRkcmVzcyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFk
ZHJlc3Moc2NyYXRjaCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKwor
ICAgIGxvYWRWYWx1ZShCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRWlnaHQsIEFy
cmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpLCByZXN1bHQpOworICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZFbXB0eShyZXN1bHQpKTsKKworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisK
K0pJVDo6SnVtcExpc3QgSklUOjplbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQoreworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsK
KworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAg
UmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpT
VmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKKyAgICBS
ZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7CisjZWxzZQorICAgIFJlZ2lzdGVySUQgYmFzZSA9
IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMjsKKyAgICBKU1ZhbHVlUmVn
cyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOworICAgIFJlZ2lzdGVySUQgc2Ny
YXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsKKyNlbmRpZgor
CisgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
c2NyYXRjaCk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3Jh
dGNoLCBUcnVzdGVkSW1tMzIoRGlyZWN0QXJndW1lbnRzVHlwZSkpOworCisgICAgbG9hZDMyKEFk
ZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaDIp
OworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwg
c2NyYXRjaDIpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoTm9uWmVybywg
QWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkp
KSk7CisKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KGJhc2UsIHByb3BlcnR5LCBUaW1lc0VpZ2h0
LCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7CisKKyAgICByZXR1
cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50
c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKK3sKKyAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIFJlZ2lzdGVySUQg
YmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKKyAgICBKU1Zh
bHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3Jh
dGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJlZ1Q0OworICAgIFJlZ2lz
dGVySUQgc2NyYXRjaDMgPSByZWdUNTsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVn
VDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNo
ID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJlZ1Q0OworICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaDMgPSByZWdUNTsKKyNlbmRpZgorCisgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CisgICAgYmFkVHlwZSA9IHBh
dGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoU2NvcGVkQXJn
dW1lbnRzVHlwZSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBTY29wZWRBcmd1bWVudHM6
Om9mZnNldE9mU3RvcmFnZSgpKSwgc2NyYXRjaDMpOworICAgIHhvclB0cihUcnVzdGVkSW1tUHRy
KFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMyk7CisgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKHNjcmF0Y2gz
LCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGhJblN0b3JhZ2UoKSkpKTsKKwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVGFibGUo
KSksIHNjcmF0Y2gpOworICAgIHhvclB0cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50c1Bv
aXNvbjo6a2V5KCkpLCBzY3JhdGNoKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoLCBTY29w
ZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHNjcmF0Y2gyKTsKKyAgICBKdW1w
IG92ZXJmbG93Q2FzZSA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIHNjcmF0Y2gy
KTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlNj
b3BlKCkpLCBzY3JhdGNoMik7CisgICAgeG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1l
bnRzUG9pc29uOjprZXkoKSksIHNjcmF0Y2gyKTsKKyAgICBsb2FkUHRyKEFkZHJlc3Moc2NyYXRj
aCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mQXJndW1lbnRzKCkpLCBzY3JhdGNoKTsK
KyAgICBsb2FkMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCBzY3Jh
dGNoKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoLCBUcnVz
dGVkSW1tMzIoU2NvcGVPZmZzZXQ6OmludmFsaWRPZmZzZXQpKSk7CisgICAgbG9hZFZhbHVlKEJh
c2VJbmRleChzY3JhdGNoMiwgc2NyYXRjaCwgVGltZXNFaWdodCwgSlNMZXhpY2FsRW52aXJvbm1l
bnQ6Om9mZnNldE9mVmFyaWFibGVzKCkpLCByZXN1bHQpOworICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKyAgICBvdmVyZmxvd0Nhc2UubGluayh0aGlzKTsKKyAgICBzdWIzMihwcm9wZXJ0eSwgc2Ny
YXRjaDIpOworICAgIG5lZzMyKHNjcmF0Y2gyKTsKKyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNj
cmF0Y2gzLCBzY3JhdGNoMiwgVGltZXNFaWdodCksIHJlc3VsdCk7CisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZkVtcHR5KHJlc3VsdCkpOworICAgIGRvbmUubGluayh0aGlzKTsKKworICAg
IGxvYWQzMihBZGRyZXNzKHNjcmF0Y2gzLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxM
ZW5ndGhJblN0b3JhZ2UoKSksIHNjcmF0Y2gpOworICAgIGVtaXRQcmVwYXJlUHJlY2lzZUluZGV4
TWFzazMyKHByb3BlcnR5LCBzY3JhdGNoLCBzY3JhdGNoMik7CisgICAgYW5kUHRyKHNjcmF0Y2gy
LCByZXN1bHQucGF5bG9hZEdQUigpKTsKKworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJ
VDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKK3sKKyAgICBBU1NF
UlQoaXNJbnQodHlwZSkpOworCisgICAgLy8gVGhlIGJlc3Qgd2F5IHRvIHRlc3QgdGhlIGFycmF5
IHR5cGUgaXMgdG8gdXNlIHRoZSBjbGFzc0luZm8uIFdlIG5lZWQgdG8gZG8gc28gd2l0aG91dAor
ICAgIC8vIGNsb2JiZXJpbmcgdGhlIHJlZ2lzdGVyIHRoYXQgaG9sZHMgdGhlIGluZGV4aW5nIHR5
cGUsIGJhc2UsIGFuZCBwcm9wZXJ0eS4KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0
ZXJJRCBiYXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAg
IEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBSZWdpc3RlcklE
IHNjcmF0Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7CisjZWxz
ZQorICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkg
PSByZWdUMjsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgc2Ny
YXRjaDIgPSByZWdUNDsKKyNlbmRpZgorICAgIFJlZ2lzdGVySUQgcmVzdWx0UGF5bG9hZCA9IHJl
c3VsdC5wYXlsb2FkR1BSKCk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBsb2Fk
OChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsK
KyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0
ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJh
eUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7CisgICAg
Y2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRjaCwgc2NyYXRjaDIp
OworCisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgIGNhc2UgMToKKyAgICAg
ICAgaWYgKEpTQzo6aXNTaWduZWQodHlwZSkpCisgICAgICAgICAgICBsb2FkOFNpZ25lZEV4dGVu
ZFRvMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSksIHJlc3VsdFBheWxv
YWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2FkOChCYXNlSW5kZXgoc2NyYXRjaCwg
cHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgMjoKKyAgICAgICAgaWYgKEpTQzo6aXNTaWduZWQodHlwZSkpCisgICAgICAgICAgICBs
b2FkMTZTaWduZWRFeHRlbmRUbzMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNU
d28pLCByZXN1bHRQYXlsb2FkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9hZDE2KEJh
c2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICBsb2FkMzIoQmFzZUluZGV4KHNjcmF0
Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCByZXN1bHRQYXlsb2FkKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisKKyAgICBKdW1wIGRvbmU7
CisgICAgaWYgKHR5cGUgPT0gVHlwZVVpbnQzMikgeworICAgICAgICBKdW1wIGNhbkJlSW50ID0g
YnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZXN1bHRQYXlsb2FkLCBUcnVzdGVkSW1tMzIo
MCkpOworCisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlc3VsdFBheWxvYWQsIGZwUmVn
VDApOworICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVBZGRyZXNzKCZ0d29Ub1RoZTMyKSwgZnBS
ZWdUMCk7CisgICAgICAgIGJveERvdWJsZShmcFJlZ1QwLCByZXN1bHQpOworICAgICAgICBkb25l
ID0ganVtcCgpOworICAgICAgICBjYW5CZUludC5saW5rKHRoaXMpOworICAgIH0KKworICAgIGJv
eEludDMyKHJlc3VsdFBheWxvYWQsIHJlc3VsdCk7CisgICAgaWYgKGRvbmUuaXNTZXQoKSkKKyAg
ICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKK0pJVDo6
SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIEFTU0VS
VChpc0Zsb2F0KHR5cGUpKTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgUmVnaXN0ZXJJRCBi
YXNlID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOworICAgIEpTVmFs
dWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKKyAgICBSZWdpc3RlcklEIHNjcmF0
Y2ggPSByZWdUMzsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7CisjZWxzZQorICAg
IFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdU
MjsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwor
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOworICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIg
PSByZWdUNDsKKyNlbmRpZgorCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgbG9hZDgo
QWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7Cisg
ICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVk
SW1tMzIodHlwZUZvclR5cGVkQXJyYXlUeXBlKHR5cGUpKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlC
dWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNl
LCBKU0FycmF5QnVmZmVyVmlldzo6b2Zmc2V0T2ZWZWN0b3IoKSksIHNjcmF0Y2gpOworICAgIGNh
Z2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIHNjcmF0Y2gsIHNjcmF0Y2gyKTsK
KworICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKKyAgICBjYXNlIDQ6CisgICAgICAg
IGxvYWRGbG9hdChCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91ciksIGZwUmVn
VDApOworICAgICAgICBjb252ZXJ0RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBmcFJlZ1QwKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSA4OiB7CisgICAgICAgIGxvYWREb3VibGUoQmFzZUluZGV4
KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSwgZnBSZWdUMCk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgIH0KKworICAgIEp1
bXAgbm90TmFOID0gYnJhbmNoRG91YmxlKERvdWJsZUVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QwKTsK
KyAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47CisgICAgbG9hZERvdWJsZShUcnVz
dGVkSW1tUHRyKCZOYU4pLCBmcFJlZ1QwKTsKKyAgICBub3ROYU4ubGluayh0aGlzKTsKKworICAg
IGJveERvdWJsZShmcFJlZ1QwLCByZXN1bHQpOworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisK
K0pJVDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlU
eXBlIHR5cGUpCit7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0
aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIEFTU0VSVChpc0ludCh0eXBlKSk7CisKKyAgICBp
bnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBSZWdpc3RlcklEIHBy
b3BlcnR5ID0gcmVnVDE7CisgICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKKyAg
ICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDI7CisgICAgUmVnaXN0ZXJJRCBsYXRlU2Ny
YXRjaDIgPSByZWdUNDsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7CisgICAg
UmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNo
ID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOworICAgIFJlZ2lz
dGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7CisjZW5kaWYKKworICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKKworICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZz
ZXQoKSksIGVhcmx5U2NyYXRjaCk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5v
dEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUo
dHlwZSkpKTsKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5LCBB
ZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7CisgICAg
ZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7CisgICAgc2xv
d0Nhc2VzLmFwcGVuZChqdW1wKCkpOworICAgIGluQm91bmRzLmxpbmsodGhpcyk7CisKKyNpZiBV
U0UoSlNWQUxVRTY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2Ny
YXRjaCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGVhcmx5U2NyYXRj
aCkpOworI2Vsc2UKKyAgICBlbWl0TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRj
aCk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKGxhdGVTY3JhdGNoKSk7
CisjZW5kaWYKKworICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMg
aW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKKyAgICAvLyBwYXRoIGV4cGVjdHMg
dGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOworICAgIGNh
Z2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2Ny
YXRjaDIpOworCisgICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgeworICAgICAgICBBU1NFUlQoZWxl
bWVudFNpemUodHlwZSkgPT0gMSk7CisgICAgICAgIEFTU0VSVCghSlNDOjppc1NpZ25lZCh0eXBl
KSk7CisgICAgICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvd09yRXF1YWwsIGVhcmx5
U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKKyAgICAgICAgSnVtcCB0b29CaWcgPSBicmFu
Y2gzMihHcmVhdGVyVGhhbiwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1tMzIoMHhmZikpOworICAg
ICAgICB4b3IzMihlYXJseVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7CisgICAgICAgIEp1bXAgY2xh
bXBlZCA9IGp1bXAoKTsKKyAgICAgICAgdG9vQmlnLmxpbmsodGhpcyk7CisgICAgICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDB4ZmYpLCBlYXJseVNjcmF0Y2gpOworICAgICAgICBjbGFtcGVkLmxpbmso
dGhpcyk7CisgICAgICAgIGluQm91bmRzLmxpbmsodGhpcyk7CisgICAgfQorCisgICAgc3dpdGNo
IChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgIGNhc2UgMToKKyAgICAgICAgc3RvcmU4KGVhcmx5
U2NyYXRjaCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNPbmUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAgICBzdG9yZTE2KGVhcmx5U2NyYXRjaCwg
QmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSA0OgorICAgICAgICBzdG9yZTMyKGVhcmx5U2NyYXRjaCwgQmFzZUluZGV4
KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgfQorCisgICAgcmV0dXJuIHNsb3dDYXNl
czsKK30KKworSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBU
eXBlZEFycmF5VHlwZSB0eXBlKQoreworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICBBU1NFUlQoaXNGbG9hdCh0eXBl
KSk7CisKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKKyAgICBS
ZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7CisgICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2gg
PSByZWdUMzsKKyAgICBSZWdpc3RlcklEIGxhdGVTY3JhdGNoID0gcmVnVDI7CisgICAgUmVnaXN0
ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKKyNlbHNlCisgICAgUmVnaXN0ZXJJRCBiYXNlID0g
cmVnVDA7CisgICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQg
ZWFybHlTY3JhdGNoID0gcmVnVDM7CisgICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1Qx
OworICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gyID0gcmVnVDQ7CisjZW5kaWYKKworICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKworICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7CisgICAgYmFkVHlwZSA9IHBhdGNoYWJs
ZUJyYW5jaDMyKE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlw
ZWRBcnJheVR5cGUodHlwZSkpKTsKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3cs
IHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0
aCgpKSk7CisgICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmls
ZSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChqdW1wKCkpOworICAgIGluQm91bmRzLmxpbmsodGhp
cyk7CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIGVhcmx5U2NyYXRjaCk7CisgICAgSnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQz
MihlYXJseVNjcmF0Y2gpOworICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwg
ZnBSZWdUMCk7CisgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICBkb3VibGVDYXNlLmxpbmso
dGhpcyk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihlYXJseVNjcmF0
Y2gpKTsKKyAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGVhcmx5U2NyYXRjaCk7Cisg
ICAgbW92ZTY0VG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKKyAgICByZWFkeS5saW5r
KHRoaXMpOworI2Vsc2UKKyAgICBlbWl0TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2Ny
YXRjaCk7CisgICAgSnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRj
aCk7CisgICAgY29udmVydEludDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKKyAg
ICBKdW1wIHJlYWR5ID0ganVtcCgpOworICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKKyAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlLCBsYXRlU2NyYXRjaCwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICBtb3ZlSW50c1RvRG91YmxlKGVhcmx5U2NyYXRj
aCwgbGF0ZVNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEpOworICAgIHJlYWR5LmxpbmsodGhpcyk7
CisjZW5kaWYKKworICAgIC8vIFdlIHdvdWxkIGJlIGxvYWRpbmcgdGhpcyBpbnRvIGJhc2UgYXMg
aW4gZ2V0X2J5X3ZhbCwgZXhjZXB0IHRoYXQgdGhlIHNsb3cKKyAgICAvLyBwYXRoIGV4cGVjdHMg
dGhlIGJhc2UgdG8gYmUgdW5jbG9iYmVyZWQuCisgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpT
QXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgbGF0ZVNjcmF0Y2gpOworICAgIGNh
Z2VDb25kaXRpb25hbGx5KEdpZ2FjYWdlOjpQcmltaXRpdmUsIGxhdGVTY3JhdGNoLCBsYXRlU2Ny
YXRjaDIpOworCisgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgeworICAgIGNhc2UgNDoK
KyAgICAgICAgY29udmVydERvdWJsZVRvRmxvYXQoZnBSZWdUMCwgZnBSZWdUMCk7CisgICAgICAg
IHN0b3JlRmxvYXQoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGlt
ZXNGb3VyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgODoKKyAgICAgICAgc3RvcmVEb3Vi
bGUoZnBSZWdUMCwgQmFzZUluZGV4KGxhdGVTY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNFaWdodCkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgIH0K
KworICAgIHJldHVybiBzbG93Q2FzZXM7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5k
aWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQzMl82NC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMGFkMjE3YmNmZDgyNTVkMTEyMWYxNjc3ZGMyNTVkNTRhZmVkZDU0MgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUMzJfNjQuY3BwCkBAIC0w
LDAgKzEsMjk4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNrIEdhbnN0
ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1
enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklULmgiCisK
KyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisjaW5jbHVk
ZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAi
RXhjZXB0aW9uLmgiCisjaW5jbHVkZSAiR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgiCisjaW5jbHVk
ZSAiSW50ZXJwcmV0ZXJJbmxpbmVzLmgiCisjaW5jbHVkZSAiSklUSW5saW5lcy5oIgorI2luY2x1
ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0Nhc3QuaCIKKyNpbmNsdWRlICJKU0Z1bmN0aW9u
LmgiCisjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAi
U2V0dXBWYXJhcmdzRnJhbWUuaCIKKyNpbmNsdWRlICJTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRl
ICJTdGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5j
bHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCisjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCisjaW5j
bHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCisjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCisj
aW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisj
aWYgVVNFKEpTVkFMVUUzMl82NCkKKwordm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisKKyAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4KHNy
YykpCisgICAgICAgIGVtaXRTdG9yZShkc3QsIGdldENvbnN0YW50T3BlcmFuZChzcmMpKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworICAgICAgICBl
bWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOworICAgIH0KK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfZW5kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgQVNTRVJUKHJl
dHVyblZhbHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBlbWl0TG9hZChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGVt
aXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
IHJldCgpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CisgICAgc2l6ZV90IGFsbG9jYXRpb25T
aXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKKyAgICBBbGxvY2F0b3IgYWxsb2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9i
amVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxv
Y2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0cyk7CisKKyAgICBSZWdpc3RlcklEIHJlc3Vs
dFJlZyA9IHJldHVyblZhbHVlR1BSOworICAgIFJlZ2lzdGVySUQgYWxsb2NhdG9yUmVnID0gcmVn
VDE7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CisKKyAgICBpZiAoIWFsbG9j
YXRvcikKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
SnVtcExpc3Qgc2xvd0Nhc2VzOworICAgICAgICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1Q
dHIobnVsbHB0cik7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklU
QWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0b3JSZWcsIFRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOworICAgICAg
ICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOworICAgICAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworICAgICAgICBl
bWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7
CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1
cmUoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgc3RydWN0dXJlKTsK
KyAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgYXV0byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcE92ZXJy
aWRlc0hhc0luc3RhbmNlKj4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUuZHN0KCk7CisgICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3RydWN0b3Io
KTsKKyAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUo
KTsKKworICAgIGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CisgICAg
Ly8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxk
IGRvLgorICAgIEp1bXAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwgPSBlbWl0SnVtcElmTm90SlND
ZWxsKGhhc0luc3RhbmNlVmFsdWUpOworICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7
CisKKyAgICAvLyBXZSBrbm93IHRoYXQgY29uc3RydWN0b3IgaXMgYW4gb2JqZWN0IGZyb20gdGhl
IHdheSBieXRlY29kZSBpcyBlbWl0dGVkIGZvciBpbnN0YW5jZW9mIGV4cHJlc3Npb25zLgorICAg
IGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDApOworCisgICAgLy8gQ2hlY2sgdGhh
dCBjb25zdHJ1Y3RvciAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScgaS5lLiB0aGUgb2Jq
ZWN0IGlzIG5vdCBhIEMtQVBJIHVzZXIgbm9yIGEgYm91bmQgZnVuY3Rpb24uCisgICAgdGVzdDgo
WmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSksIHJlZ1QwKTsKKyAgICBKdW1w
IGRvbmUgPSBqdW1wKCk7CisKKyAgICBoYXNJbnN0YW5jZVZhbHVlTm90Q2VsbC5saW5rKHRoaXMp
OworICAgIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUubGluayh0aGlzKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRTdG9y
ZUJvb2woZHN0LCByZWdUMCk7CisKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZihJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8mIGJ5dGVjb2RlID0g
KnJlaW50ZXJwcmV0X2Nhc3Q8T3BJbnN0YW5jZW9mKj4oY3VycmVudEluc3RydWN0aW9uKTsKKyAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFs
dWUoKTsKKyAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5cGUoKTsKKworICAgIC8vIExv
YWQgdGhlIG9wZXJhbmRzIGludG8gcmVnaXN0ZXJzLgorICAgIC8vIFdlIHVzZSByZWdUMCBmb3Ig
YmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2Fu
IHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgIGVtaXRMb2FkUGF5bG9hZCh2YWx1ZSwg
cmVnVDIpOworICAgIGVtaXRMb2FkUGF5bG9hZChwcm90bywgcmVnVDEpOworCisgICAgLy8gQ2hl
Y2sgdGhhdCBwcm90byBhcmUgY2VsbHMuIGJhc2VWYWwgbXVzdCBiZSBhIGNlbGwgLSB0aGlzIGlz
IGNoZWNrZWQgYnkgdGhlIGdldF9ieV9pZCBmb3IgU3ltYm9sLmhhc0luc3RhbmNlLgorICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbCh2YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHByb3RvKTsKKworICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3IgZ2VuKAorICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlT2Zmc2V0KSwKKyAgICAgICAgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWls
YWJsZVJlZ2lzdGVycygpLAorICAgICAgICByZWdUMCwgLy8gcmVzdWx0CisgICAgICAgIHJlZ1Qy
LCAvLyB2YWx1ZQorICAgICAgICByZWdUMSwgLy8gcHJvdG8KKyAgICAgICAgcmVnVDMsIHJlZ1Q0
KTsgLy8gc2NyYXRjaAorICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBtX2lu
c3RhbmNlT2ZzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oSW5zdHJ1Y3Rpb24qKQor
eworICAgIC8vIFRoaXMgYWx3YXlzIGdvZXMgdG8gc2xvdyBwYXRoIHNpbmNlIHdlIGV4cGVjdCBp
dCB0byBiZSByYXJlLgorICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dD
YXNlcyhpdGVyKTsKKworICAgIGF1dG8mIGJ5dGVjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BJ
bnN0YW5jZW9mKj4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
ZHN0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUoKTsKKyAgICBpbnQgcHJvdG8g
PSBieXRlY29kZS5wcm90b3R5cGUoKTsKKworICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdl
biA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5jZU9mSW5kZXgrK107CisKKyAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBlbWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOworICAg
IGVtaXRMb2FkVGFnKHByb3RvLCByZWdUMyk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgZ2VuLnN0dWJJbmZvKCksIEpTVmFs
dWVSZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMSkpOworICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJl
dF9jYXN0PE9wSW5zdGFuY2VvZkN1c3RvbSo+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgaW50
IGRzdCA9IGJ5dGVjb2RlLmRzdCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7
CisgICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3RydWN0b3IoKTsKKyAgICBpbnQg
aGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUoKTsKKworICAgIGVt
aXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1
Y3RvciwgcmVnVDIpOworICAgIGVtaXRMb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1Q0LCByZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSk7Cisg
ICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfaXNfZW1wdHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQodmFsdWUs
IHJlZ1QxLCByZWdUMCk7CisgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCByZWdUMCk7CisKKyAgICBlbWl0U3RvcmVCb29sKGRz
dCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworCisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgSnVt
cCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDEpOworCisgICAgY29tcGFyZTMyKEVxdWFsLCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlZ1QwKTsKKyAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICBKdW1wIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAg
IEp1bXAgbm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7CisgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QxLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDEpOwor
ICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7CisKKyAgICBub3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgZG9uZS5saW5rKHRoaXMpOworICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2lzX2Jv
b2xlYW4oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1Qw
KTsKKyAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9v
bGVhblRhZyksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAg
ICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1p
dExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1Qw
KTsKKyAgICBjb21wYXJlMzIoQmVsb3csIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnICsgMSksIHJlZ1QwKTsKKyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOworfQor
Cit2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisgICAgaW50IHR5cGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAg
ZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgSnVtcCBpc05vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDEpOworCisgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAs
IEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIodHlwZSksIHJlZ1Qw
KTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBpc05vdENlbGwubGluayh0aGlzKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworCisgICAgZG9uZS5saW5rKHRoaXMp
OworICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X2lzX29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7
CisKKyAgICBjb21wYXJlOChBYm92ZU9yRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSksIHJlZ1QwKTsKKyAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RvX3By
aW1pdGl2ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBzcmMgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVn
VDApOworCisgICAgSnVtcCBpc0ltbSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZPYmplY3QocmVnVDApKTsKKyAgICBpc0ltbS5saW5rKHRoaXMpOwor
CisgICAgaWYgKGRzdCAhPSBzcmMpCisgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGZ1bmMgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIGludCBuYW1lID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKKyAgICBlbWl0TG9hZFBheWxvYWQoZnVuYywgcmVnVDEpOworICAgIGVtaXRMb2Fk
KG5hbWUsIHJlZ1QzLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5j
dGlvbk5hbWUsIHJlZ1QxLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3Bfbm90KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYyA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZFRhZyhzcmMs
IHJlZ1QwKTsKKworICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2hJZk5vdEJvb2xlYW4ocmVnVDEsIEludmFsaWRHUFJSZWcpKTsKKyAgICB4b3Iz
MihUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKKworICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdU
MCwgKGRzdCA9PSBzcmMpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGNvbmQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZChjb25kLCByZWdUMSwgcmVnVDApOwor
CisgICAgSlNWYWx1ZVJlZ3MgdmFsdWUocmVnVDEsIHJlZ1QwKTsKKyAgICBHUFJSZWcgc2NyYXRj
aCA9IHJlZ1QyOworICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMzsKKyAgICBib29sIHNob3VsZENo
ZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisgICAgZW1pdENvbnZlcnRWYWx1ZVRv
Qm9vbGVhbigqdm0oKSwgdmFsdWUsIHJlc3VsdCwgc2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpOworCisgICAgYWRkSnVtcChicmFuY2hUZXN0MzIoWmVybywgcmVzdWx0KSwgdGFyZ2V0
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBpbnQgY29uZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKworICAgIGVtaXRMb2FkKGNvbmQsIHJlZ1QxLCByZWdUMCk7CisgICAgYm9vbCBzaG91bGRD
aGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSB0cnVlOworICAgIEpTVmFsdWVSZWdzIHZhbHVl
KHJlZ1QxLCByZWdUMCk7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICBHUFJSZWcg
cmVzdWx0ID0gcmVnVDM7CisgICAgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqdm0oKSwgdmFs
dWUsIHJlc3VsdCwgc2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVy
YWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworCisgICAgYWRk
SnVtcChicmFuY2hUZXN0MzIoTm9uWmVybywgcmVzdWx0KSwgdGFyZ2V0KTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNp
Z25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1p
dExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworCisgICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMSk7CisKKyAgICBKdW1wIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1Qy
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwg
cmVnVDApOworICAgIGFkZEp1bXAoYnJhbmNoUHRyKEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgIEp1bXAg
bWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24gPSBqdW1wKCk7CisKKyAgICAvLyBOb3cg
aGFuZGxlIHRoZSBpbW1lZGlhdGUgY2FzZXMgLSB1bmRlZmluZWQgJiBudWxsCisgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChKU1ZhbHVlOjpVbmRlZmluZWRU
YWcgKyAxID09IEpTVmFsdWU6Ok51bGxUYWcpICYmIChKU1ZhbHVlOjpOdWxsVGFnICYgMHgxKSwg
IiIpOworICAgIG9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAgYWRkSnVtcChicmFu
Y2hJZk51bGwocmVnVDEpLCB0YXJnZXQpOworCisgICAgaXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkLmxpbmsodGhpcyk7CisgICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0ZvcmVpZ24ubGlu
ayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKworICAgIEp1
bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOworCisgICAgYWRkSnVtcChi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSksIHRhcmdldCk7Cisg
ICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBy
ZWdUMik7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKKyAgICBhZGRKdW1wKGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKKyAg
ICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgIC8vIE5vdyBoYW5kbGUgdGhl
IGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKKyAgICBpc0ltbWVkaWF0ZS5saW5r
KHRoaXMpOworCisgICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9
PSBKU1ZhbHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKKyAg
ICBvcjMyKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOworICAgIGFkZEp1bXAoYnJhbmNoSWZOb3RO
dWxsKHJlZ1QxKSwgdGFyZ2V0KTsKKworICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIFNwZWNpYWw6OlBvaW50ZXIgcHRyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUuc3Bl
Y2lhbFBvaW50ZXI7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBKdW1w
IG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOworICAgIEp1bXAgZXF1YWwgPSBicmFu
Y2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKGFjdHVhbFBvaW50ZXJGb3IobV9jb2Rl
QmxvY2ssIHB0cikpKTsKKyAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIoMSksICZjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAgICBhZGRK
dW1wKGp1bXAoKSwgdGFyZ2V0KTsKKyAgICBlcXVhbC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBzcmMxID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjMiA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJl
Z1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMSwgcmVnVDMpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkNlbGwocmVnVDEp
KTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisKKyAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MiwgcmVnVDApOworCisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyAgICBKdW1wTGlzdCBzdG9yZVJlc3VsdDsK
KyAgICBKdW1wTGlzdCBnZW5lcmljQ2FzZTsKKworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRT
bG93Q2FzZShpdGVyKSk7IC8vIHRhZ3Mgbm90IGVxdWFsCisKKyAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIHRhZ3MgZXF1YWwgYW5kIEpTQ2VsbAorICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFu
Y2hJZk5vdFN0cmluZyhyZWdUMCkpOworICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5v
dFN0cmluZyhyZWdUMikpOworCisgICAgLy8gU3RyaW5nIGNhc2UuCisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Db21wYXJlU3RyaW5nRXEsIHJlZ1QwLCByZWdUMik7CisgICAgc3RvcmVSZXN1
bHQuYXBwZW5kKGp1bXAoKSk7CisKKyAgICAvLyBHZW5lcmljIGNhc2UuCisgICAgZ2VuZXJpY0Nh
c2UuYXBwZW5kKGdldFNsb3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcworICAgIGdlbmVyaWNDYXNl
LmxpbmsodGhpcyk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOworCisgICAg
c3RvcmVSZXN1bHQubGluayh0aGlzKTsKKyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFs
dWVHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBpbnQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKyAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisgICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAg
ZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CisgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVs
b3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworCisgICAgYWRk
SnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKK30KKwordm9pZCBK
SVQ6OmNvbXBpbGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlciwgQ29tcGlsZU9wRXFUeXBlIHR5cGUsIGludCBqdW1wVGFyZ2V0KQoreworICAgIEp1bXBM
aXN0IGRvbmU7CisgICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7CisKKyAgICBnZW5lcmljQ2FzZS5h
cHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyB0YWdzIG5vdCBlcXVhbAorCisgICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyB0YWdzIGVxdWFsIGFuZCBKU0NlbGwKKyAgICBnZW5lcmljQ2FzZS5h
cHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDApKTsKKyAgICBnZW5lcmljQ2FzZS5hcHBlbmQo
YnJhbmNoSWZOb3RTdHJpbmcocmVnVDIpKTsKKworICAgIC8vIFN0cmluZyBjYXNlLgorICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0VxLCByZWdUMCwgcmVnVDIpOworICAg
IGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMih0eXBlID09IENvbXBpbGVPcEVxVHlwZTo6
RXEgPyBOb25aZXJvIDogWmVybywgcmV0dXJuVmFsdWVHUFIpLCBqdW1wVGFyZ2V0KTsKKyAgICBk
b25lLmFwcGVuZChqdW1wKCkpOworCisgICAgLy8gR2VuZXJpYyBjYXNlLgorICAgIGdlbmVyaWND
YXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKKyAgICBnZW5lcmljQ2Fz
ZS5saW5rKHRoaXMpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKKyAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVx
ID8gTm9uWmVybyA6IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7CisKKyAgICBk
b25lLmxpbmsodGhpcyk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3sKKyAgICBjb21waWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlwZTo6
RXEsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjMSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwg
c3JjMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDEsIHJlZ1QzKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7Cisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TG93ZXN0VGFnKSkpOworCisgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIs
IHJlZ1QwKTsKKworICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAgIEp1bXBMaXN0IHN0b3JlUmVzdWx0Owor
ICAgIEp1bXBMaXN0IGdlbmVyaWNDYXNlOworCisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNs
b3dDYXNlKGl0ZXIpKTsgLy8gdGFncyBub3QgZXF1YWwKKworICAgIGxpbmtTbG93Q2FzZShpdGVy
KTsgLy8gdGFncyBlcXVhbCBhbmQgSlNDZWxsCisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5j
aElmTm90U3RyaW5nKHJlZ1QwKSk7CisgICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90
U3RyaW5nKHJlZ1QyKSk7CisKKyAgICAvLyBTdHJpbmcgY2FzZS4KKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDAsIHJlZ1QyKTsKKyAgICBzdG9yZVJlc3Vs
dC5hcHBlbmQoanVtcCgpKTsKKworICAgIC8vIEdlbmVyaWMgY2FzZS4KKyAgICBnZW5lcmljQ2Fz
ZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCisgICAgZ2VuZXJpY0Nhc2Uu
bGluayh0aGlzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisKKyAgICBz
dG9yZVJlc3VsdC5saW5rKHRoaXMpOworICAgIHhvcjMyKFRydXN0ZWRJbW0zMigweDEpLCByZXR1
cm5WYWx1ZUdQUik7CisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGludCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQg
c3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZDIo
c3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKKyAgICBhZGRTbG93Q2FzZShicmFu
Y2hJZkNlbGwocmVnVDEpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihCZWxvdywgcmVnVDEs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisKKyAgICBhZGRKdW1wKGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3Bfam5lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVPcEVxSnVtcFNsb3co
aXRlciwgQ29tcGlsZU9wRXFUeXBlOjpORXEsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOworfQorCit2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCit7CisgICAgaW50IGRz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYzEgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBzcmMyID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAs
IHNyYzIsIHJlZ1QzLCByZWdUMik7CisKKyAgICAvLyBCYWlsIGlmIHRoZSB0YWdzIGRpZmZlciwg
b3IgYXJlIGRvdWJsZS4KKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEs
IHJlZ1QzKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworCisgICAgLy8gSnVtcCB0byBhIHNsb3cgY2Fz
ZSBpZiBib3RoIGFyZSBzdHJpbmdzIG9yIHN5bWJvbHMgKG5vbiBvYmplY3QpLgorICAgIEp1bXAg
bm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CisgICAgSnVtcCBmaXJzdElzT2JqZWN0
ID0gYnJhbmNoSWZPYmplY3QocmVnVDApOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2Jq
ZWN0KHJlZ1QyKSk7CisgICAgbm90Q2VsbC5saW5rKHRoaXMpOworICAgIGZpcnN0SXNPYmplY3Qu
bGluayh0aGlzKTsKKworICAgIC8vIFNpbXBseSBjb21wYXJlIHRoZSBwYXlsb2Fkcy4KKyAgICBp
ZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQorICAgICAgICBjb21w
YXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOworICAgIGVsc2UKKyAgICAgICAgY29t
cGFyZTMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKworICAgIGVtaXRTdG9yZUJv
b2woZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wU3RyaWN0RXEoY3VycmVu
dEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3BfbnN0cmljdGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgY29tcGlsZU9wU3RyaWN0RXEoY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BT
dHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7Cit9CisKK3ZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RF
cUp1bXAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFU
eXBlIHR5cGUpCit7CisgICAgaW50IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisgICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
ICAgIGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVt
aXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CisKKyAgICAv
LyBCYWlsIGlmIHRoZSB0YWdzIGRpZmZlciwgb3IgYXJlIGRvdWJsZS4KKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwor
CisgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBib3RoIGFyZSBzdHJpbmdzIG9yIHN5bWJv
bHMgKG5vbiBvYmplY3QpLgorICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdU
MSk7CisgICAgSnVtcCBmaXJzdElzT2JqZWN0ID0gYnJhbmNoSWZPYmplY3QocmVnVDApOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QyKSk7CisgICAgbm90Q2VsbC5saW5r
KHRoaXMpOworICAgIGZpcnN0SXNPYmplY3QubGluayh0aGlzKTsKKworICAgIC8vIFNpbXBseSBj
b21wYXJlIHRoZSBwYXlsb2Fkcy4KKyAgICBpZiAodHlwZSA9PSBDb21waWxlT3BTdHJpY3RFcVR5
cGU6OlN0cmljdEVxKQorICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgcmVn
VDIpLCB0YXJnZXQpOworICAgIGVsc2UKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVh
bCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfanN0cmlj
dGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wU3Ry
aWN0RXFKdW1wKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2puc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBjb21waWxlT3BTdHJpY3RFcUp1bXAoY3VycmVudElu
c3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7Cit9CisKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOworCisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJp
Y3RFcSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1Qy
KSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgdW5z
aWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBz
cmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQoc3Jj
LCByZWdUMSwgcmVnVDApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDEpOworCisgICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7CisgICAgbW92ZShUcnVzdGVk
SW1tMzIoMCksIHJlZ1QxKTsKKyAgICBKdW1wIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSBqdW1wKCk7CisKKyAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgp
KSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCByZWdU
MiwgcmVnVDEpOworICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgaXNJ
bW1lZGlhdGUubGluayh0aGlzKTsKKworICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOworICAgIGNvbXBhcmUzMihFcXVhbCwg
cmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZWdUMSk7CisgICAg
b3IzMihyZWdUMiwgcmVnVDEpOworCisgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Cisg
ICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworCisgICAgZW1pdFN0
b3JlQm9vbChkc3QsIHJlZ1QxKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbmVxX251bGwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKyAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKKworICAgIEp1bXAgaXNN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCkpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAg
SnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOworCisgICAgaXNNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7CisgICAgbW92ZShUcnVzdGVk
SW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7
CisgICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBKdW1w
IHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKKworICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CisKKyAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TnVsbFRhZyksIHJlZ1QyKTsKKyAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDEpOworICAgIGFuZDMyKHJlZ1QyLCBy
ZWdUMSk7CisKKyAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKKyAgICB3YXNOb3RNYXNx
dWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisKKyAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVnVDEpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIEFTU0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7Cisg
ICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9w
RW50cnlGcmFtZSk7CisgICAgZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVy
YXRpb25UaHJvdywgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7CisgICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcigqdm0oKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworCisgICAg
SnVtcCBpc0ludDMyID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRh
ZykpKTsKKyAgICBpc0ludDMyLmxpbmsodGhpcyk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKCk7CisgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOworCisgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOworCisgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RT
dHJpbmcocmVnVDApKTsKKworICAgIGlmIChzcmMgIT0gZHN0KQorICAgICAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKKworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOworICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7
CisgICAgaWYgKHNyYyAhPSBkc3QpCisgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihtX3ZtKSwgcmVnVDMpOworICAgIC8vIG9wZXJhdGlvblRocm93IHJldHVybnMgdGhlIGNhbGxG
cmFtZSBmb3IgdGhlIGhhbmRsZXIuCisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDMsIFZNOjpjYWxs
RnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIHN0b3JlUHRy
KFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpjYWxsRnJhbWVGb3JD
YXRjaE9mZnNldCgpKSk7CisKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9m
ZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0
ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbkNoZWNrSWZFeGNlcHRpb25Jc1VuY2F0Y2hhYmxlQW5kTm90aWZ5UHJv
ZmlsZXIpOworICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFuY2hUZXN0MzIoWmVy
bywgcmV0dXJuVmFsdWVHUFIpOworICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwor
ICAgIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CisKKyAgICBtb3ZlKFRydXN0ZWRJ
bW1QdHIobV92bSksIHJlZ1QzKTsKKworICAgIC8vIE5vdyBzdG9yZSB0aGUgZXhjZXB0aW9uIHJl
dHVybmVkIGJ5IG9wZXJhdGlvblRocm93LgorICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6
ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMik7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKKworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRy
ZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKTsKKworICAgIHVuc2lnbmVkIGV4Y2Vw
dGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgZW1pdFN0b3JlKGV4
Y2VwdGlvbiwgcmVnVDEsIHJlZ1QyKTsKKworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBFeGNl
cHRpb246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMu
cGF5bG9hZCkpLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEV4Y2VwdGlvbjo6
dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwg
cmVnVDEpOworCisgICAgdW5zaWduZWQgdGhyb3duVmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworICAgIGVtaXRTdG9yZSh0aHJvd25WYWx1ZSwgcmVnVDEsIHJlZ1QwKTsK
KworI2lmIEVOQUJMRShERkdfSklUKQorICAgIC8vIEZJWE1FOiBjb25zaWRlciBpbmxpbmUgY2Fj
aGluZyB0aGUgcHJvY2VzcyBvZiBkb2luZyBPU1IgZW50cnksIGluY2x1ZGluZworICAgIC8vIGFy
Z3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CisKKyAg
ICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxWYWx1
ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKj4oY3VycmVudEluc3RydWN0aW9uWzNdLnUucG9pbnRl
cik7CisgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaCwgbV9ieXRlY29kZU9mZnNl
dCk7CisgICAgZWxzZQorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVy
QXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgYXV0byBza2lw
T1NSRW50cnkgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcp
OworICAgIHNraXBPU1JFbnRyeS5saW5rKHRoaXMpOworICAgIGlmIChidWZmZXIgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgIGJ1ZmZlci0+Zm9yRWFjaChbJl0gKFZhbHVlUHJv
ZmlsZUFuZE9wZXJhbmQmIHByb2ZpbGUpIHsKKyAgICAgICAgICAgIEpTVmFsdWVSZWdzIHJlZ3Mo
cmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmls
ZS5tX29wZXJhbmQsIHJlZ3MpOworICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShw
cm9maWxlLm1fcHJvZmlsZSk7CisgICAgICAgIH0pOworICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKElu
c3RydWN0aW9uKikKK3sKKyAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUu
Li4KK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBjdXJyZW50U2NvcGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50U2NvcGUs
IHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4
dCgpKSwgcmVnVDApOworICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZz
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHNjcnV0
aW5lZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICAvLyBjcmVhdGUg
anVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3Rh
dGVtZW50LgorICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5z
d2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CisgICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNo
UmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNldCwgZGVmYXVsdE9mZnNldCwgU3dpdGNo
UmVjb3JkOjpJbW1lZGlhdGUpKTsKKyAgICBqdW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CisK
KyAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIHRhYmxlSW5kZXgpOworICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFn
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCisgICAg
U2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKKyAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRh
YmxlLCBtX2J5dGVjb2RlT2Zmc2V0LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJh
Y3RlcikpOworICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKKworICAgIGVtaXRMb2Fk
KHNjcnV0aW5lZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3
aXRjaENoYXJXaXRoVW5rbm93bktleVR5cGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRh
YmxlSW5kZXgpOworICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOworCisgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBk
ZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KKyAgICBTdHJpbmdKdW1w
VGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpOworICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUs
IG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQpKTsKKworICAgIGVtaXRMb2FkKHNjcnV0
aW5lZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0
cmluZ1dpdGhVbmtub3duS2V5VHlwZSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgdGFibGVJ
bmRleCk7CisgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVnVDApOwor
ICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKTsK
KyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKKyAgICBub0RlYnVnZ2VyUmVxdWVzdHMubGluayh0aGlzKTsKK30KKworCit2
b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CisKKyAgICAvLyBFdmVuIHRob3Vn
aCBKSVQgY29kZSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAor
ICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNz
YXJpbHkgcHJvbG9uZ2luZworICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBH
QyBwcmVzc3VyZS4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5tX251bVZh
cnM7ICsraSkKKyAgICAgICAgZW1pdFN0b3JlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLm9m
ZnNldCgpLCBqc1VuZGVmaW5lZCgpKTsKKworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENh
bGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfZW50ZXIpOworICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdUMCk7CisgICAgZW1pdFN0b3Jl
Q2VsbChkc3QsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgY2FsbGVlID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4q
IGNhY2hlZEZ1bmN0aW9uID0gJmN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmpzQ2VsbDsKKyAgICBS
ZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1QwOworICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcg
PSByZWdUNDsKKyAgICBSZWdpc3RlcklEIHJlc3VsdFJlZyA9IHJlZ1QwOworICAgIFJlZ2lzdGVy
SUQgYWxsb2NhdG9yUmVnID0gcmVnVDE7CisgICAgUmVnaXN0ZXJJRCBzdHJ1Y3R1cmVSZWcgPSBy
ZWdUMjsKKyAgICBSZWdpc3RlcklEIGNhY2hlZEZ1bmN0aW9uUmVnID0gcmVnVDQ7CisgICAgUmVn
aXN0ZXJJRCBzY3JhdGNoUmVnID0gcmVnVDM7CisKKyAgICBlbWl0TG9hZFBheWxvYWQoY2FsbGVl
LCBjYWxsZWVSZWcpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90RnVuY3Rpb24oY2FsbGVl
UmVnKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQ
dHIoWmVybywgcmFyZURhdGFSZWcpKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyYXJlRGF0YVJlZywg
RnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcp
OworICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6
Om9mZnNldE9mU3RydWN0dXJlKCkpLCBzdHJ1Y3R1cmVSZWcpOworCisgICAgbG9hZFB0cihjYWNo
ZWRGdW5jdGlvbiwgY2FjaGVkRnVuY3Rpb25SZWcpOworICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxl
Q2FsbGVlcyA9IGJyYW5jaFB0cihFcXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1Q
dHIoSlNDZWxsOjpzZWVuTXVsdGlwbGVDYWxsZWVPYmplY3RzKCkpKTsKKyAgICBhZGRTbG93Q2Fz
ZShicmFuY2hQdHIoTm90RXF1YWwsIGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKKyAg
ICBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzLmxpbmsodGhpcyk7CisKKyAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CisgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOworICAg
IGVtaXRBbGxvY2F0ZUpTT2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgp
LCBhbGxvY2F0b3JSZWcsIHN0cnVjdHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93
Q2FzZXMpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisgICAgZW1pdFN0b3JlQ2VsbChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF90b190aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmU+KiBjYWNoZWRTdHJ1Y3R1cmUgPSAmY3VycmVu
dEluc3RydWN0aW9uWzJdLnUuc3RydWN0dXJlOworICAgIGludCB0aGlzUmVnaXN0ZXIgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworCisgICAgZW1pdExvYWQodGhpc1JlZ2lzdGVy
LCByZWdUMywgcmVnVDIpOworCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qz
KSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QyLCBGaW5hbE9iamVjdFR5
cGUpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QwKTsKKyAgICBsb2FkUHRyKGNhY2hlZFN0cnVjdHVyZSwgcmVnVDIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyKSk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2NoZWNrX3RkeihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGVtaXRMb2FkVGFnKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJl
Z1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworCisg
ICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSk7CisKKyAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEp
OworCisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIEFk
ZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgZW1p
dFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFz
SW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCit7CisgICAgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9ICZtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4XTsKKworICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKKworICAg
IC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBh
bmQgQXJndW1lbnRzLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTM1MDM0LgorICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2Rl
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYXJyYXlNb2RlLCBiYWRUeXBlKTsKKyAgICBtb3ZlKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDApOworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKKworICAgIHBhdGNoQnVmZmVy
LmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVy
Q29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRy
ZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xv
d1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFi
ZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21F
eGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5
VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKworICAgIHBhdGNoQnVmZmVyLmxp
bmsoZG9uZSwgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXBUb0RvbmUpKTsKKworICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5B
TElaRV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJ
VFN0dWJSb3V0aW5lUHRyVGFnLAorICAgICAgICAiQmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVy
dHkgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2sp
LmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBhdGNoSnVtcChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRT
dHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkp
OworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRy
VGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVu
Y3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5l
cmljKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlOworICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxv
Y2stPmFkZEJ5VmFsSW5mbygpOworCisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7CisKKyAgICBlbWl0TG9hZFBh
eWxvYWQocHJvcGVydHksIHJlZ1QxKTsKKworICAgIC8vIFRoaXMgaXMgdGVjaG5pY2FsbHkgaW5j
b3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIuIE9uIHRoZSBob3QgcGF0aCB0
aGlzIGRvZXNuJ3QgbWF0dGVyLgorICAgIC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3
YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5
cyBmYWlsIGlmCisgICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2luY2UgbV92ZWN0b3JMZW5ndGgg
aXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0b3RhbCBhbGxvY2F0aW9uCisg
ICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFzIHN1Y2ggemVybyBleHRlbmRp
bmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGluZyB0aGUgdmFsdWUKKyAgICAv
LyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3Mg
Y2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFuIHNpZ24KKyAgICAvLyBleHRl
bmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRhZyB0aGUgdmFsdWUgaW4gdGhl
IHNsb3cgY2FzZS4KKyAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOworCisgICAg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Cisg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOworCisgICAg
SklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgUGF0Y2hh
YmxlSnVtcCBiYWRUeXBlOworCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0
eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCisgICAgLy8gU2VlIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCisgICAgSnVtcExpc3Qgc2xvd0Nhc2Vz
ID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBl
KTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOworCisgICAgYWRkU2xvd0Nhc2Uo
YmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKworICAgIExhYmVsIGRvbmUg
PSBsYWJlbCgpOworCisgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKKworICAgIExhYmVs
IG5leHRIb3RQYXRoID0gbGFiZWwoKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgUGF0
Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkp
OworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CisKKyAg
ICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CisKKyAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwg
cmVnVDApOworICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDIpOworICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5RGVmYXVsdCwg
ZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
LCBieVZhbEluZm8pOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1
Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsK
KyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfZGlyZWN0X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2Ug
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOworCisgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEg
Y2VsbAorICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SlNDZWxsKGJhc2UpOworCisgICAgLy8gQ2hlY2sgdGhlIHN0cnVjdHVyZQorICAg
IGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsKKworICAgIC8vIENv
bXB1dGUgdGhlIG9mZnNldAorICAgIGVtaXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDIpOworICAg
IC8vIElmIGluZGV4IGlzIGxlc3MgdGhhbiB0aGUgZW51bWVyYXRvcidzIGNhY2hlZCBpbmxpbmUg
c3RvcmFnZSwgdGhlbiBpdCdzIGFuIGlubGluZSBhY2Nlc3MKKyAgICBKdW1wIG91dE9mTGluZUFj
Y2VzcyA9IGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDEsIEpTUHJv
cGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkpOworICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgpKSwg
cmVnVDApOworICAgIGxvYWQzMihCYXNlSW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKKyAgICBsb2Fk
MzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOworCisgICAgSnVtcCBkb25lID0ganVt
cCgpOworCisgICAgLy8gT3RoZXJ3aXNlIGl0J3Mgb3V0IG9mIGxpbmUKKyAgICBvdXRPZkxpbmVB
Y2Nlc3MubGluayh0aGlzKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICBzdWIzMihBZGRyZXNzKHJlZ1QxLCBKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdU
Mik7CisgICAgbmVnMzIocmVnVDIpOworICAgIGludDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVP
ZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSk7CisgICAgbG9hZDMyKEJhc2VJbmRleChy
ZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOworICAgIGxvYWQzMihCYXNl
SW5kZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBP
QkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7CisKKyAg
ICBkb25lLmxpbmsodGhpcyk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVt
aXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2VudW1l
cmF0b3Jfc3RydWN0dXJlX3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBp
bmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZFBh
eWxvYWQoaW5kZXgsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVn
VDEpOworICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3Mo
cmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRl
eE9mZnNldCgpKSk7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwg
cmVnVDIpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CisKKyAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisgICAgaW5Cb3VuZHMubGluayh0aGlzKTsKKworICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVz
VmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7CisgICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDEsIHJl
Z1QwLCB0aW1lc1B0cigpKSwgcmVnVDApOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCByZWdUMik7CisKKyAgICBkb25lLmxpbmsodGhpcyk7CisgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDIsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9n
ZW5lcmljX3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0
b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZFBheWxvYWQoaW5k
ZXgsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOworICAg
IEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpT
UHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkp
OworCisgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKKyAg
ICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworCisgICAgSnVtcCBkb25lID0ganVtcCgp
OworICAgIGluQm91bmRzLmxpbmsodGhpcyk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNl
dCgpKSwgcmVnVDEpOworICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgdGltZXNQ
dHIoKSksIHJlZ1QwKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwg
cmVnVDIpOworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qy
LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxv
Y2F0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUubG9jYXRpb247CisgICAgaW50IHZhbHVl
VG9Qcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAgIC8vIExv
YWQgcGF5bG9hZCBpbiBUMC4gTG9hZCB0YWcgaW4gVDMuCisgICAgZW1pdExvYWRQYXlsb2FkKHZh
bHVlVG9Qcm9maWxlLCByZWdUMCk7CisgICAgZW1pdExvYWRUYWcodmFsdWVUb1Byb2ZpbGUsIHJl
Z1QzKTsKKworICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKKworICAgIGp1bXBUb0VuZC5hcHBlbmQo
YnJhbmNoSWZFbXB0eShyZWdUMykpOworCisgICAgLy8gQ29tcGlsZSBpbiBhIHByZWRpY3RpdmUg
dHlwZSBjaGVjaywgaWYgcG9zc2libGUsIHRvIHNlZSBpZiB3ZSBjYW4gc2tpcCB3cml0aW5nIHRv
IHRoZSBsb2cuCisgICAgLy8gVGhlc2UgdHlwZWNoZWNrcyBhcmUgaW5saW5lZCB0byBtYXRjaCB0
aG9zZSBvZiB0aGUgMzItYml0IEpTVmFsdWUgdHlwZSBjaGVja3MuCisgICAgaWYgKGNhY2hlZFR5
cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVVuZGVmaW5lZCkKKyAgICAgICAganVt
cFRvRW5kLmFwcGVuZChicmFuY2hJZlVuZGVmaW5lZChyZWdUMykpOworICAgIGVsc2UgaWYgKGNh
Y2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU51bGwpCisgICAgICAgIGp1
bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdWxsKHJlZ1QzKSk7CisgICAgZWxzZSBpZiAoY2FjaGVk
VHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQm9vbGVhbikKKyAgICAgICAganVt
cFRvRW5kLmFwcGVuZChicmFuY2hJZkJvb2xlYW4ocmVnVDMsIEludmFsaWRHUFJSZWcpKTsKKyAg
ICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVBbnlJ
bnQpCisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZJbnQzMihyZWdUMykpOworICAg
IGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU51bWJl
cikgeworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmTnVtYmVyKEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMCksIHJlZ1QxKSk7CisgICAgfSBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRp
b24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVTdHJpbmcpIHsKKyAgICAgICAgSnVtcCBpc05vdENl
bGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDMpOworICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJy
YW5jaElmU3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAg
IH0KKworICAgIC8vIExvYWQgdGhlIHR5cGUgcHJvZmlsaW5nIGxvZyBpbnRvIFQyLgorICAgIFR5
cGVQcm9maWxlckxvZyogY2FjaGVkVHlwZVByb2ZpbGVyTG9nID0gbV92bS0+dHlwZVByb2ZpbGVy
TG9nKCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZyksIHJl
Z1QyKTsKKworICAgIC8vIExvYWQgdGhlIG5leHQgbG9nIGVudHJ5IGludG8gVDEuCisgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJlbnRMb2dFbnRyeU9mZnNl
dCgpKSwgcmVnVDEpOworCisgICAgLy8gU3RvcmUgdGhlIEpTVmFsdWUgb250byB0aGUgbG9nIGVu
dHJ5LgorICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6
TG9nRW50cnk6OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpKTsKKyAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJv
ZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnRhZykpKTsKKworICAgIC8vIFN0b3JlIHRoZSBzdHJ1Y3R1cmVJRCBvZiB0
aGUgY2VsbCBpZiBhcmd1bWVudCBpcyBhIGNlbGwsIG90aGVyd2lzZSwgc3RvcmUgMCBvbiB0aGUg
bG9nIGVudHJ5LgorICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMyk7Cisg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJl
Z1QwKTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6
OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSk7CisgICAgSnVtcCBza2lwTm90Q2VsbCA9
IGp1bXAoKTsKKyAgICBub3RDZWxsLmxpbmsodGhpcyk7CisgICAgc3RvcmUzMihUcnVzdGVkSW1t
MzIoMCksIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpKTsKKyAgICBza2lwTm90Q2VsbC5saW5rKHRoaXMpOworCisgICAgLy8gU3Rv
cmUgdGhlIHR5cGVMb2NhdGlvbiBvbiB0aGUgbG9nIGVudHJ5LgorICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihjYWNoZWRUeXBlTG9jYXRpb24pLCByZWdUMCk7CisgICAgc3RvcmUzMihyZWdUMCwgQWRk
cmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6bG9jYXRpb25PZmZzZXQoKSkp
OworCisgICAgLy8gSW5jcmVtZW50IHRoZSBjdXJyZW50IGxvZyBlbnRyeS4KKyAgICBhZGRQdHIo
VHJ1c3RlZEltbTMyKHNpemVvZihUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5KSksIHJlZ1QxKTsK
KyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBUeXBlUHJvZmlsZXJMb2c6OmN1cnJl
bnRMb2dFbnRyeU9mZnNldCgpKSk7CisgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hQdHIoTm90
RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZy0+bG9nRW5k
UHRyKCkpKSk7CisgICAgLy8gQ2xlYXIgdGhlIGxvZyBpZiB3ZSdyZSBhdCB0aGUgZW5kIG9mIHRo
ZSBsb2cuCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Qcm9jZXNzVHlwZVByb2ZpbGVyTG9n
KTsKKworICAgIGp1bXBUb0VuZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vbkFy
Z0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9i
bGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CisgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJl
Z1QwOworICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBi
ZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KKyAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdU
MjsKKyAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcs
IHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CisKKyAgICBzY3JhdGNoMVJlZyA9IHJlZ1Q0Owor
ICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdU
Myk7CisgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlUGFja2V0KHNoYWRvd1BhY2tldFJlZywg
c2NyYXRjaDFSZWcsIHJlZ1QzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICB1cGRh
dGVUb3BDYWxsRnJhbWUoKTsKKyAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAg
JiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlz
IHRydWUuIik7CisgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOworICAgIEdQUlJl
ZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVu
dCByZWdpc3Rlci4KKyAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKKyAgICBlbnN1cmVT
aGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBz
Y3JhdGNoMlJlZyk7CisKKyAgICBlbWl0TG9hZFBheWxvYWQoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCwgcmVnVDIpOworICAgIGVtaXRMb2FkVGFnKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIHJlZ1QxKTsKKyAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyhyZWdUMSwgcmVn
VDIpOworICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
LCByZWdUMyk7CisgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVn
LCB0aGlzUmVncywgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0
cnVjdGlvbikpOworfQorCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChPcGNvZGVJRCBv
cGNvZGUsIGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCit7CisgICAgSnVtcExpc3Qgbm90SW50MzJPcDE7CisgICAgSnVtcExp
c3Qgbm90SW50MzJPcDI7CisKKyAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KKyAgICBpZiAoaXNPcGVy
YW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKKyAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVn
VDApOworICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKKyAgICAg
ICAgSnVtcExpc3QgZmFpbHVyZXM7CisgICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJl
Z1QwLCByZWdUMCwgZmFpbHVyZXMpOworICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIo
YXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRh
cmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
Q2hhcihvcDIpKSB7CisgICAgICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CisgICAgICAgIEp1bXBMaXN0
IGZhaWx1cmVzOworICAgICAgICBlbWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAs
IGZhaWx1cmVzKTsKKyAgICAgICAgYWRkU2xvd0Nhc2UoZmFpbHVyZXMpOworICAgICAgICBhZGRK
dW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50
T3BlcmFuZChvcDIpKS0+dHJ5R2V0VmFsdWUoKVswXSkpLCB0YXJnZXQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CisgICAgICAg
IGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICAgICAgbm90SW50MzJPcDIuYXBwZW5k
KGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21t
dXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0lu
dDMyKCkpKSwgdGFyZ2V0KTsKKyAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9w
MikpIHsKKyAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOworICAgICAgICBub3RJ
bnQzMk9wMS5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDIp
LmFzSW50MzIoKSkpLCB0YXJnZXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVtaXRMb2FkMihv
cDEsIHJlZ1QxLCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBub3RJbnQzMk9w
MS5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOworICAgICAgICBub3RJbnQzMk9wMi5h
cHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOworICAgICAgICBhZGRKdW1wKGJyYW5jaDMy
KGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKKyAgICB9CisKKyAgICBpZiAoIXN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7CisgICAgICAgIGFkZFNsb3dDYXNlKG5vdEludDMyT3Ax
KTsKKyAgICAgICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIEp1bXAgZW5kID0ganVtcCgpOworCisgICAgLy8gRG91YmxlIGxlc3MuCisgICAg
ZW1pdEJpbmFyeURvdWJsZU9wKG9wY29kZSwgdGFyZ2V0LCBvcDEsIG9wMiwgT3BlcmFuZFR5cGVz
KCksIG5vdEludDMyT3AxLCBub3RJbnQzMk9wMiwgIWlzT3BlcmFuZENvbnN0YW50SW50KG9wMSks
IGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkgfHwgIWlzT3BlcmFuZENvbnN0YW50SW50KG9wMikp
OworICAgIGVuZC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkp
IHsKKyAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOworICAgICAgICBhZGRKdW1w
KGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3Bl
cmFuZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQpOworICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5k
Q29uc3RhbnRJbnQob3AyKSkgeworICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7
CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoZ2V0Q29u
c3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7Cisg
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQp
OworICAgIH0KK30KKworCit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoaW50IGRzdCwg
aW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit7CisgICAg
aWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKKyAgICAgICAgZW1pdExvYWQob3AyLCBy
ZWdUMywgcmVnVDIpOworICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdU
MiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSwgcmVnVDApOworICAg
IH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgeworICAgICAgICBlbWl0TG9h
ZChvcDEsIHJlZ1QxLCByZWdUMCk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1Qw
LCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkpLCByZWdUMCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJlZ1Qz
LCByZWdUMik7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMiwgcmVn
VDApOworICAgIH0KKyAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFy
Z2V0LCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOworCisgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOworICAgIGVt
aXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbiwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Cisg
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJv
LCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3Vuc2ln
bmVkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHJlc3VsdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdU
MCk7CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAg
ICBlbWl0U3RvcmVJbnQzMihyZXN1bHQsIHJlZ1QwLCByZXN1bHQgPT0gb3AxKTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3BfaW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgaW50IHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisKKyAgICBl
bWl0TG9hZChzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJ
Zk5vdEludDMyKHJlZ1QxKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoQWRkMzIoT3ZlcmZsb3cs
IFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICBlbWl0U3RvcmVJbnQzMihzcmNEc3QsIHJl
Z1QwLCB0cnVlKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZGVjKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZChzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CisKKyAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoU3ViMzIoT3ZlcmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICBlbWl0
U3RvcmVJbnQzMihzcmNEc3QsIHJlZ1QwLCB0cnVlKTsKK30KKwordm9pZCBKSVQ6OmVtaXRCaW5h
cnlEb3VibGVPcChPcGNvZGVJRCBvcGNvZGVJRCwgaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwg
T3BlcmFuZFR5cGVzIHR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJ
bnQzMk9wMiwgYm9vbCBvcDFJc0luUmVnaXN0ZXJzLCBib29sIG9wMklzSW5SZWdpc3RlcnMpCit7
CisgICAgSnVtcExpc3QgZW5kOworCisgICAgaWYgKCFub3RJbnQzMk9wMS5lbXB0eSgpKSB7Cisg
ICAgICAgIC8vIERvdWJsZSBjYXNlIDE6IE9wMSBpcyBub3QgaW50MzI7IE9wMiBpcyB1bmtub3du
LgorICAgICAgICBub3RJbnQzMk9wMS5saW5rKHRoaXMpOworCisgICAgICAgIEFTU0VSVChvcDFJ
c0luUmVnaXN0ZXJzKTsKKworICAgICAgICAvLyBWZXJpZnkgT3AxIGlzIGRvdWJsZS4KKyAgICAg
ICAgaWYgKCF0eXBlcy5maXJzdCgpLmRlZmluaXRlbHlJc051bWJlcigpKQorICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmUsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSkpOworCisgICAgICAgIGlmICghb3AySXNJblJlZ2lzdGVycykKKyAgICAgICAg
ICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKKworICAgICAgICBKdW1wIGRvdWJsZU9w
MiA9IGJyYW5jaDMyKEJlbG93LCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRh
ZykpOworCisgICAgICAgIGlmICghdHlwZXMuc2Vjb25kKCkuZGVmaW5pdGVseUlzTnVtYmVyKCkp
CisgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7CisKKyAg
ICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDIsIGZwUmVnVDApOworICAgICAgICBKdW1w
IGRvVGhlTWF0aCA9IGp1bXAoKTsKKworICAgICAgICAvLyBMb2FkIE9wMiBhcyBkb3VibGUgaW50
byBkb3VibGUgcmVnaXN0ZXIuCisgICAgICAgIGRvdWJsZU9wMi5saW5rKHRoaXMpOworICAgICAg
ICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDApOworCisgICAgICAgIC8vIERvIHRoZSBtYXRo
LgorICAgICAgICBkb1RoZU1hdGgubGluayh0aGlzKTsKKyAgICAgICAgc3dpdGNoIChvcGNvZGVJ
RCkgeworICAgICAgICBjYXNlIG9wX2psZXNzOgorICAgICAgICAgICAgZW1pdExvYWREb3VibGUo
b3AxLCBmcFJlZ1QyKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxl
c3NUaGFuLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIG9wX2psZXNzZXE6CisgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZw
UmVnVDIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5P
ckVxdWFsLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBm
cFJlZ1QyKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJU
aGFuLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIG9wX2pncmVhdGVyZXE6CisgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZw
UmVnVDIpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIG9wX2pubGVzczoKKyAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwg
ZnBSZWdUMik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBvcF9qbmxlc3NlcToKKyAgICAgICAgICAgIGVtaXRMb2Fk
RG91YmxlKG9wMSwgZnBSZWdUMik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShE
b3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QyKSwgZHN0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcjoKKyAgICAgICAgICAgIGVt
aXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERv
dWJsZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdU
MiksIGRzdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXJl
cToKKyAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7CisgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBmcFJl
Z1QwLCBmcFJlZ1QyKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghbm90SW50MzJPcDIuZW1wdHkoKSkKKyAgICAgICAgICAgIGVuZC5hcHBl
bmQoanVtcCgpKTsKKyAgICB9CisKKyAgICBpZiAoIW5vdEludDMyT3AyLmVtcHR5KCkpIHsKKyAg
ICAgICAgLy8gRG91YmxlIGNhc2UgMjogT3AxIGlzIGludDMyOyBPcDIgaXMgbm90IGludDMyLgor
ICAgICAgICBub3RJbnQzMk9wMi5saW5rKHRoaXMpOworCisgICAgICAgIEFTU0VSVChvcDJJc0lu
UmVnaXN0ZXJzKTsKKworICAgICAgICBpZiAoIW9wMUlzSW5SZWdpc3RlcnMpCisgICAgICAgICAg
ICBlbWl0TG9hZFBheWxvYWQob3AxLCByZWdUMCk7CisKKyAgICAgICAgY29udmVydEludDMyVG9E
b3VibGUocmVnVDAsIGZwUmVnVDApOworCisgICAgICAgIC8vIFZlcmlmeSBvcDIgaXMgZG91Ymxl
LgorICAgICAgICBpZiAoIXR5cGVzLnNlY29uZCgpLmRlZmluaXRlbHlJc051bWJlcigpKQorICAg
ICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworCisgICAgICAgIC8vIERvIHRoZSBtYXRoLgorICAgICAg
ICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgICAgICAg
ICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOworICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICAgICAgICAgIGVtaXRM
b2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShEb3VibGVMZXNzVGhhbk9yRXF1YWwsIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6CisgICAgICAgICAgICBlbWl0
TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOworICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoRG91YmxlR3JlYXRlclRoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICAgICAgICAgIGVtaXRM
b2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7CisgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgICAgICAgICAgZW1p
dExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QxLCBmcFJlZ1QwKSwg
ZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIG9wX2pubGVzc2VxOgorICAg
ICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKKyAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVn
VDApLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVy
OgorICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKKyAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVk
LCBmcFJlZ1QxLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIG9wX2puZ3JlYXRlcmVxOgorICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJl
Z1QxKTsKKyAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFu
T3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCBkc3QpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICB9CisgICAgfQorCisgICAgZW5kLmxpbmsodGhpcyk7Cit9CisKKy8vIE1v
ZCAoJSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0Qg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3ZvaWQgSklUOjplbWl0X29wX21v
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworI2lmIENQVShYODYpCisgICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICAvLyBNYWtlIHN1cmUgcmVnaXN0ZXJzIGFy
ZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCisgICAgQVNTRVJUKHJlZ1QwID09
IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBBU1NFUlQocmVnVDEgPT0gWDg2UmVnaXN0ZXJzOjpl
ZHgpOworICAgIEFTU0VSVChyZWdUMiA9PSBYODZSZWdpc3RlcnM6OmVjeCk7CisgICAgQVNTRVJU
KHJlZ1QzID09IFg4NlJlZ2lzdGVyczo6ZWJ4KTsKKworICAgIGVtaXRMb2FkMihvcDEsIHJlZ1Qw
LCByZWdUMywgb3AyLCByZWdUMSwgcmVnVDIpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
SW50MzIocmVnVDEpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdEludDMyKHJlZ1QwKSk7
CisKKyAgICBtb3ZlKHJlZ1QzLCByZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdDMy
KFplcm8sIHJlZ1QyKSk7CisgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW0zMigtMSkpOworICAgIGFkZFNsb3dDYXNlKGJyYW5j
aDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKC0yMTQ3NDgzNjQ3LTEpKSk7CisgICAgZGVu
b21pbmF0b3JOb3ROZWcxLmxpbmsodGhpcyk7CisgICAgeDg2Q29udmVydFRvRG91YmxlV29yZDMy
KCk7CisgICAgeDg2RGl2MzIocmVnVDIpOworICAgIEp1bXAgbnVtZXJhdG9yUG9zaXRpdmUgPSBi
cmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoMCkpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMSkpOworICAgIG51bWVyYXRvclBv
c2l0aXZlLmxpbmsodGhpcyk7CisgICAgZW1pdFN0b3JlSW50MzIoZHN0LCByZWdUMSwgKG9wMSA9
PSBkc3QgfHwgb3AyID09IGRzdCkpOworI2Vsc2UKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX21vZCk7CisgICAgc2xv
d1BhdGhDYWxsLmNhbGwoKTsKKyNlbmRpZgorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbW9k
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit7CisjaWYgQ1BVKFg4NikKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOworCisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5z
dHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisjZWxz
ZQorICAgIFVOVVNFRF9QQVJBTShjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIFVOVVNFRF9QQVJB
TShpdGVyKTsKKyAgICAvLyBXZSB3b3VsZCBoYXZlIHJlYWxseSB1c2VmdWwgYXNzZXJ0aW9ucyBo
ZXJlIGlmIGl0IHdhc24ndCBmb3IgdGhlIGNvbXBpbGVyJ3MKKyAgICAvLyBpbnNpc3RlbmNlIG9u
IGF0dHJpYnV0ZSBub3JldHVybi4KKyAgICAvLyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworI2VuZGlmCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQ6IE9Q
X01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKwordm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQg
cHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBvcHRp
b25zID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgZ2V0dGVyID0g
Y3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2FkUGF5bG9hZChi
YXNlLCByZWdUMSk7CisgICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlJZCwgcmVnVDEsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQoreworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
KyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IGludCBvcHRpb25zID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQg
c2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKworICAgIGVtaXRMb2Fk
UGF5bG9hZChiYXNlLCByZWdUMSk7CisgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDEsIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICBpbnQgYXR0cmlidXRlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKyAgICBpbnQgZ2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZDsKKyAgICBpbnQgc2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKwor
ICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CisgICAgZW1pdExvYWRQYXlsb2FkKGdl
dHRlciwgcmVnVDMpOworICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Q0KTsKKyAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDEsIG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwgcmVnVDMsIHJlZ1Q0KTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKKyAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworICAgIGludCBnZXR0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVy
YW5kOworCisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKKyAgICBlbWl0TG9hZChw
cm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdU
Myk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDIsIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisgICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAg
ICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgIGludCBnZXR0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworCisgICAg
ZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKKyAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7CisgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDIsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0LCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0
eSkuaW1wbCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywg
cmVnVDIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdCwg
ZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIp
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJv
ZmlsZTsKKyAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbElu
Zm8oKTsKKworICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdU
MywgcmVnVDIpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1Qx
KTsKKyAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBhZGRTbG93
Q2FzZShub3RJbmRleCk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1Qw
LCByZWdUMSwgcHJvZmlsZSk7CisgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVN
YXNrKSwgcmVnVDEpOworCisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0
IHNsb3dDYXNlczsKKworICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHBy
b2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgSklUSW50MzI6CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnQzMkdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklURG91YmxlOgorICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0RG91YmxlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250aWd1b3VzOgorICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgorICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9
CisKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMp
OworCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisKKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkgeworICAgICAgICBKdW1wIHJlc3VsdE9LID0gYnJhbmNoSWZOb3RFbXB0eShyZWdUMSk7Cisg
ICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRHZXRCeVZhbFJlc3VsdElzTm90RW1wdHkpOworICAg
ICAgICByZXN1bHRPSy5saW5rKHRoaXMpOworICAgIH0KKworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoKTsKKyAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOworCisgICAgTGFiZWwg
bmV4dEhvdFBhdGggPSBsYWJlbCgpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBub3RJ
bmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKK30KKwor
SklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wJiBmYXN0RG9uZUNhc2UsIEp1bXAmIHNsb3dEb25l
Q2FzZSwgSnVtcExpc3QmIHNsb3dDYXNlcykKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAgIC8vIGJhc2U6IHRhZyhyZWdUMSksIHBheWxvYWQo
cmVnVDApCisgICAgLy8gcHJvcGVydHk6IHRhZyhyZWdUMyksIHBheWxvYWQocmVnVDIpCisgICAg
Ly8gc2NyYXRjaDogcmVnVDQKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QzKSk7CisgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDIs
IHJlZ1Q0LCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNl
dCksIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBB
Y2Nlc3NUeXBlOjpHZXQpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKworICAg
IGZhc3REb25lQ2FzZSA9IGp1bXAoKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOworICAgIGdlbi5zbG93UGF0aEp1bXAoKS5saW5rKHRoaXMpOworCisgICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcHJvcGVydHlOYW1l
LmltcGwoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKKyAgICBzbG93RG9uZUNhc2UgPSBqdW1wKCk7CisKKyAgICByZXR1cm4gZ2VuOworfQorCit2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0g
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZv
OworCisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2Vs
bCBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sK
KworICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IGJhc2UgYXJyYXkgY2hlY2sKKyAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaElmTm90U3RyaW5n
KHJlZ1QwKTsKKyAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiht
X3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKKyAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDAp
OworICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
anVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKKyAgICBmYWlsZWQubGluayh0
aGlzKTsKKyAgICBub3RTdHJpbmcubGluayh0aGlzKTsKKyAgICBub25DZWxsLmxpbmsodGhpcyk7
CisKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKKyAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCisKKyAgICBMYWJlbCBzbG93UGF0aCA9
IGxhYmVsKCk7CisKKyAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOworICAgIGVtaXRM
b2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDIpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZSwgZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCBieVZhbEluZm8pOworCisgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQg
PSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlv
bkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eCsrOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworfQorCit2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBwcm9w
ZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworICAgIEJ5
VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOworCisgICAg
ZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CisK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOworICAgIFBhdGNo
YWJsZUp1bXAgbm90SW5kZXggPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOworICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4
KTsKKyAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCBwcm9m
aWxlKTsKKyAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMSk7
CisKKyAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7CisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwor
CisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAg
c3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRJbnQzMjoKKyAgICAgICAgc2xvd0Nhc2VzID0g
ZW1pdEludDMyUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBKSVREb3VibGU6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3Vi
bGVQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEpJVENvbnRpZ3VvdXM6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1
b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOworCisgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CisKKyAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVP
ZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Cit9
CisKK0pJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKK3sKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
Q29udGlndW91c1NoYXBlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBKdW1wIG91dE9mQm91bmRzID0gYnJh
bmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7CisKKyAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVsKCk7
CisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CisgICAgc3dpdGNoIChpbmRleGlu
Z1NoYXBlKSB7CisgICAgY2FzZSBJbnQzMlNoYXBlOgorICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKKyAgICAgICAgc3RvcmUzMihyZWdUMCwgQmFzZUlu
ZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnBheWxvYWQpKSk7CisgICAgICAgIHN0b3JlMzIocmVnVDEsIEJhc2VJbmRleChyZWdU
MywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgorICAgICAg
ICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpKTsKKyAgICAgICAgc3RvcmUz
MihyZWdUMSwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsKKyAgICAgICAgZW1pdExvYWQoYmFzZSwgcmVn
VDIsIHJlZ1QzKTsKKyAgICAgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyVmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERvdWJsZVNoYXBlOiB7Cisg
ICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQzMihyZWdUMSk7CisgICAgICAgIGNv
bnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKyAgICAgICAgSnVtcCByZWFkeSA9
IGp1bXAoKTsKKyAgICAgICAgbm90SW50LmxpbmsodGhpcyk7CisgICAgICAgIG1vdmVJbnRzVG9E
b3VibGUocmVnVDAsIHJlZ1QxLCBmcFJlZ1QwLCBmcFJlZ1QxKTsKKyAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hEb3VibGUoRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwg
ZnBSZWdUMCkpOworICAgICAgICByZWFkeS5saW5rKHRoaXMpOworICAgICAgICBzdG9yZURvdWJs
ZShmcFJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0KSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBvdXRPZkJvdW5k
cy5saW5rKHRoaXMpOworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFs
LCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgp
KSkpOworCisgICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmls
ZSk7CisKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMSk7CisgICAgc3Rv
cmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0
aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7CisKKyAgICBkb25l
LmxpbmsodGhpcyk7CisKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitKSVQ6Okp1bXBMaXN0
IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgaW50IGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudElu
c3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwor
CisgICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3Rl
ZEltbTMyKEFycmF5U3RvcmFnZVNoYXBlKSk7CisKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QzKTsKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICBKdW1wIGVtcHR5ID0gYnJhbmNo
MzIoRXF1YWwsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIEFycmF5U3RvcmFn
ZTo6dmVjdG9yT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFn
KSksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7CisKKyAgICBMYWJlbCBz
dG9yZVJlc3VsdCh0aGlzKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKKyAg
ICBzdG9yZTMyKHJlZ1QwLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJh
eVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNC
aXRzLnBheWxvYWQpKSk7IC8vIHBheWxvYWQKKyAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgo
cmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsg
T0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykpKTsgLy8gdGFnCisgICAgSnVt
cCBlbmQgPSBqdW1wKCk7CisKKyAgICBlbXB0eS5saW5rKHRoaXMpOworICAgIGVtaXRBcnJheVBy
b2ZpbGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOworICAgIGFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgQWRkcmVzcyhyZWdUMywgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9u
dW1WYWx1ZXNJblZlY3RvcikpKTsKKyAgICBicmFuY2gzMihCZWxvdywgcmVnVDIsIEFkZHJlc3Mo
cmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQs
IHRoaXMpOworCisgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMiwgcmVnVDApOworICAg
IHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDMsIEFycmF5U3RvcmFnZTo6bGVuZ3RoT2Zmc2V0
KCkpKTsKKyAgICBqdW1wKCkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKKworICAgIGVuZC5s
aW5rKHRoaXMpOworCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworCisgICAgcmV0dXJuIHNsb3dDYXNlczsKK30KKworSklUUHV0QnlJZEdlbmVy
YXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBkb25lQ2FzZXMsIEp1bXBMaXN0JiBz
bG93Q2FzZXMpCit7CisgICAgLy8gYmFzZTogdGFnKHJlZ1QxKSwgcGF5bG9hZChyZWdUMCkKKyAg
ICAvLyBwcm9wZXJ0eTogdGFnKHJlZ1QzKSwgcGF5bG9hZChyZWdUMikKKworICAgIGludCBiYXNl
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwocmVnVDMpKTsKKyAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJ
bmZvLCByZWdUMiwgcmVnVDIsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKKworICAgIC8vIFdy
aXRlIGJhcnJpZXIgYnJlYWtzIHRoZSByZWdpc3RlcnMuIFNvIGFmdGVyIGlzc3VpbmcgdGhlIHdy
aXRlIGJhcnJpZXIsCisgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMuCisgICAgZW1pdFdyaXRl
QmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1pdExvYWRQYXls
b2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKKwor
ICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24p
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFs
dWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIHJl
Z1QxLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUoKSwgcHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOworICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKKworICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworICAgIGdlbi5zbG93UGF0aEp1bXAoKS5saW5r
KHRoaXMpOworCisgICAgLy8gSklUUHV0QnlJZEdlbmVyYXRvciBvbmx5IHByZXNlcnZlIHRoZSB2
YWx1ZSBhbmQgdGhlIGJhc2UncyBwYXlsb2FkLCB3ZSBoYXZlIHRvIHJlbG9hZCB0aGUgdGFnLgor
ICAgIGVtaXRMb2FkVGFnKGJhc2UsIHJlZ1QxKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVy
YXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdz
KHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHByb3BlcnR5TmFtZS5p
bXBsKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgcmV0dXJuIGdlbjsKK30KKwor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBp
bnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3Bl
cnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmls
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLmJ5VmFsSW5mbzsKKworICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2Up
OyAvLyBiYXNlIGNlbGwgY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5
IGludDMyIGNoZWNrCisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIG5vdCBhcnJheSBj
aGVjaworCisgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7
CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBKSVRJbnQzMjoKKyAgICBjYXNlIEpJVERv
dWJsZToKKyAgICAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB2YWx1ZSB0eXBlIGNoZWNrCisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IEp1bXAgc2tpcFByb2ZpbGluZyA9IGp1bXAoKTsKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IG91dCBvZiBib3VuZHMKKyAgICBlbWl0QXJyYXlQcm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2Fz
ZShwcm9maWxlKTsKKyAgICBza2lwUHJvZmlsaW5nLmxpbmsodGhpcyk7CisKKyAgICBMYWJlbCBz
bG93UGF0aCA9IGxhYmVsKCk7CisKKyAgICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6Omdl
dE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxf
ZGlyZWN0OworCisgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4g
dG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KKyAgICAvLyBTd2FwcGluZyBzaG91
bGRuJ3QgaGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KKyAgICBlbWl0TG9hZChiYXNlLCByZWdU
MiwgcmVnVDEpOworICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOworICAgIGVt
aXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxPcHRpbWl6ZSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1QxKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0KSwgYnlWYWxJbmZvKTsKKwor
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQ
YXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXgrKzsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworCisgICAg
ZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgcmVnVDEpOworCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCisgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUlu
ZGV4KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6VHJ5R2V0KTsK
KyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Cit9
CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIGludCByZXN1bHRWUmVnID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOworCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworCisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlHZXRCeUlkT3B0aW1pemUs
IHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBp
ZGVudC0+aW1wbCgpKTsKKworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdp
biwgY2FsbCk7Cit9CisKKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworCisgICAg
ZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgcmVnVDEpOworCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCisgICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUlu
ZGV4KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdp
c3RlcnMoKSwKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0RGlyZWN0
KTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOworCisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIGludCByZXN1bHRWUmVn
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCkpOworCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlk
c1ttX2dldEJ5SWRJbmRleCsrXTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIGlkZW50LT5pbXBsKCkpOworCisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKK30KKworCit2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgYmFzZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQg
PSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKTsKKworICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKKworICAgIGlmICgqaWRlbnQgPT0gbV92
bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkKKyAgICAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZvckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChyZWdUMCwg
cmVnVDIsIG1fYnl0ZWNvZGVPZmZzZXQpOworCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4o
CisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxs
U2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFi
bGVSZWdpc3RlcnMoKSwKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0
KTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2Vu
LnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOworCisgICAgZW1p
dFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sK
KyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKSk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9w
dGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgaWRlbnQtPmltcGwoKSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90
aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCB0aGlzVlJlZyA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKKwor
ICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdExvYWQodGhpc1ZSZWcs
IHJlZ1Q0LCByZWdUMyk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwodGhpc1ZSZWcsIHJlZ1Q0KTsK
KworICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciBnZW4oCisgICAgICAgIG1fY29kZUJs
b2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJ
bnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgQWNjZXNz
VHlwZTo6R2V0V2l0aFRoaXMpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1fZ2V0QnlJZHNXaXRoVGhp
cy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0
U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CisKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKKworICAgIEpJVEdldEJ5
SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdp
dGhUaGlzSW5kZXgrK107CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlk
V2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIGlkZW50LT5pbXBsKCkp
OworCisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBT
dHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCisg
ICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byBy
ZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCisgICAgLy8gc3Vj
aCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0
YW5jZSBmcm9tIHRoaXMuCisKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKyAgICBpbnQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0QnlJZEZsYWdz
ICYgUHV0QnlJZElzRGlyZWN0OworCisgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwg
dmFsdWUsIHJlZ1QzLCByZWdUMik7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwo
YmFzZSwgcmVnVDEpOworCisgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCisgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1
cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKKyAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSwKKyAgICAgICAgcmVnVDEsIG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLCBk
aXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QpOworCisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgo
KnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CisKKyAgICBlbWl0
V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKKworICAgIG1fcHV0
QnlJZHMuYXBwZW5kKGdlbik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgaW50
IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOworCisg
ICAgLy8gSklUUHV0QnlJZEdlbmVyYXRvciBvbmx5IHByZXNlcnZlIHRoZSB2YWx1ZSBhbmQgdGhl
IGJhc2UncyBwYXlsb2FkLCB3ZSBoYXZlIHRvIHJlbG9hZCB0aGUgdGFnLgorICAgIGVtaXRMb2Fk
VGFnKGJhc2UsIHJlZ1QxKTsKKworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fcHV0
QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KAorICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmlt
cGwoKSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworCisgICAgZW1pdExvYWQoYmFzZSwgcmVn
VDEsIHJlZ1QwKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEp
OworCisgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0
aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAorICAgICAgICBp
ZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVn
cyhyZWdUMSwgcmVnVDApKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2luQnlJZHMuYXBwZW5kKGdl
bik7CisKKyAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworCisgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisKKyAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJZEluZGV4KytdOworCisgICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkluQnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8o
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmltcGwoKSk7CisKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworfQorCit2b2lkIEpJVDo6
ZW1pdFZhckluamVjdGlvbkNoZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit7Cisg
ICAgaWYgKCFuZWVkc1ZhckluamVjdGlvbkNoZWNrcykKKyAgICAgICAgcmV0dXJuOworICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDgoRXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCktPnZhckluamVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc29s
dmVDbG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cywgdW5zaWduZWQgZGVwdGgpCit7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFy
SW5qZWN0aW9uQ2hlY2tzKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSwgcmVnVDEpOworICAgIGVtaXRMb2FkUGF5bG9hZChzY29wZSwgcmVnVDApOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBkZXB0aDsgKytpKQorICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOworICAgIGVtaXRTdG9yZShk
c3QsIHJlZ1QxLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gc3RhdGlj
X2Nhc3Q8UmVzb2x2ZVR5cGU+KGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAg
IHVuc2lnbmVkIGRlcHRoID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKyAgICBh
dXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgeworICAgICAgICBz
d2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CisgICAg
ICAgIGNhc2UgR2xvYmFsVmFyOgorICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6CisgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBj
YXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgICAgIEpTU2NvcGUq
IGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29s
dmVUeXBlLCBtX2NvZGVCbG9jayk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFu
dFNjb3BlKTsKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0
cihjb25zdGFudFNjb3BlKSwgcmVnVDApOworICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVn
VDEsIHJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKKyAgICAgICAgICAgIGVtaXRSZXNvbHZlQ2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSksIGRlcHRoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIE1vZHVsZVZhcjoKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
Y3VycmVudEluc3RydWN0aW9uWzZdLnUuanNDZWxsLmdldCgpKSwgcmVnVDApOworICAgICAgICAg
ICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIER5bmFtaWM6CisgICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgorICAgICAgICBj
YXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewor
ICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Cisg
ICAgICAgIGxvYWQzMigmY3VycmVudEluc3RydWN0aW9uWzRdLCByZWdUMCk7CisKKyAgICAgICAg
SnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5
KTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQ
cm9wZXJ0eS5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKKwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwor
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsK
KworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICBza2lwVG9FbmQubGluayh0
aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgZW1p
dENvZGUocmVzb2x2ZVR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgSklU
OjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QpCit7CisgICAgZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7CisgICAgbG9h
ZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
MikpOworfQorCit2b2lkIEpJVDo6ZW1pdEdldFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJh
bmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXlsb2FkKQoreworICAgIHVpbnRwdHJfdCByYXdBZGRy
ZXNzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ob3BlcmFuZCk7CisgICAgbG9hZDMyKGJpdHdp
c2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFRhZ09mZnNldCksIHRhZyk7CisgICAgbG9hZDMy
KGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyArIFBheWxvYWRPZmZzZXQpLCBwYXlsb2Fk
KTsKK30KK3ZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiog
b3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVnIHBheWxvYWQpCit7CisgICAgbG9hZFB0cihvcGVy
YW5kLCBwYXlsb2FkKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhwYXlsb2FkLCBUYWdPZmZzZXQpLCB0
YWcpOworICAgIGxvYWQzMihBZGRyZXNzKHBheWxvYWQsIFBheWxvYWRPZmZzZXQpLCBwYXlsb2Fk
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQpCit7CisgICAgZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7CisgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxl
cygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpLCByZWdUMSk7Cisg
ICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZh
cmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwg
cmVnVDApOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIGludCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBHZXRQdXRJbmZvKGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpLnJlc29sdmVUeXBlKCk7CisgICAgU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5zbG90
KCk7CisgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJmN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOworCisgICAgYXV0byBlbWl0
Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9y
T3BlcmFuZCkgeworICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CisgICAgICAgIGNhc2Ug
R2xvYmFsUHJvcGVydHk6CisgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBlbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29w
ZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVjdHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlv
bi4KKyAgICAgICAgICAgIEdQUlJlZyBiYXNlID0gcmVnVDI7CisgICAgICAgICAgICBHUFJSZWcg
cmVzdWx0VGFnID0gcmVnVDE7CisgICAgICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZCA9IHJl
Z1QwOworICAgICAgICAgICAgR1BSUmVnIG9mZnNldCA9IHJlZ1QzOworCisgICAgICAgICAgICBt
b3ZlKHJlZ1QwLCBiYXNlKTsKKyAgICAgICAgICAgIGxvYWQzMihvcGVyYW5kU2xvdCwgb2Zmc2V0
KTsKKyAgICAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICAgICAg
SnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgb2Zmc2V0LCBU
cnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAgICAgICAgICAgICBhYm9y
dFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAgICAgICAgICAgICAgIGlz
T3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgYmFzZSk7CisgICAg
ICAgICAgICBuZWczMihvZmZzZXQpOworICAgICAgICAgICAgbG9hZDMyKEJhc2VJbmRleChiYXNl
LCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5w
YXlsb2FkKSArIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSksIHJlc3VsdFBheWxvYWQpOworICAgICAgICAgICAgbG9hZDMyKEJhc2VJbmRleChiYXNl
LCBvZmZzZXQsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50
YWcpICsgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
KSwgcmVzdWx0VGFnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgR2xvYmFsVmFyOgorICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6CisgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9iYWxM
ZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgICAgIGVtaXRWYXJJbmpl
Y3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCisgICAgICAgICAgICAgICAgZW1pdEdl
dFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNs
b3QpLCByZWdUMSwgcmVnVDApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVt
aXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCks
IHJlZ1QxLCByZWdUMCk7CisgICAgICAgICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4
aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcykgLy8gVERaIGNoZWNrLgorICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmRW1wdHkocmVnVDEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENsb3N1
cmVWYXI6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Cisg
ICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3Mo
cmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRHZXRDbG9zdXJlVmFyKHNjb3BlLCAqb3Bl
cmFuZFNsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRHluYW1pYzoKKyAg
ICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNb2R1bGVWYXI6CisgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgorICAgICAg
ICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzd2l0Y2ggKHJlc29sdmVUeXBl
KSB7CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CisgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIEp1bXBMaXN0IHNraXBUb0Vu
ZDsKKyAgICAgICAgbG9hZDMyKCZjdXJyZW50SW5zdHJ1Y3Rpb25bNF0sIHJlZ1QwKTsKKyAgICAg
ICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBM
b2FkIFJlc29sdmVUeXBlIGludG8gVDAKKworICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkg
PSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwor
ICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gz
MihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOworICAg
ICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBza2lwVG9FbmQu
YXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bnMubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFu
Y2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Cisg
ICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAgICBza2lwVG9F
bmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlz
KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9
IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMu
bGluayh0aGlzKTsKKworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworCisgICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRTdG9yZShkc3Qs
IHJlZ1QxLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29w
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGN1cnJlbnRJbnN0cnVj
dGlvbik7Cit9CisKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3Bl
cmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCit7CisgICAgZW1pdExvYWQodmFs
dWUsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CisgICAgdWludHB0
cl90IHJhd0FkZHJlc3MgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihvcGVyYW5kKTsKKyAgICBz
dG9yZTMyKHJlZ1QxLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJlc3MgKyBUYWdPZmZzZXQp
KTsKKyAgICBzdG9yZTMyKHJlZ1QwLCBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHJhd0FkZHJlc3MgKyBQ
YXlsb2FkT2Zmc2V0KSk7Cit9CisKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChKU1ZhbHVlKiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0
KiogaW5kaXJlY3RXYXRjaHBvaW50U2V0KQoreworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwg
cmVnVDApOworICAgIGxvYWRQdHIoaW5kaXJlY3RXYXRjaHBvaW50U2V0LCByZWdUMik7CisgICAg
ZW1pdE5vdGlmeVdyaXRlKHJlZ1QyKTsKKyAgICBsb2FkUHRyKGFkZHJlc3NPZk9wZXJhbmQsIHJl
Z1QyKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBUYWdPZmZzZXQpKTsKKyAg
ICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QyLCBQYXlsb2FkT2Zmc2V0KSk7Cit9CisKK3Zv
aWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBp
bnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3sKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVn
VDMsIHJlZ1QyKTsKKyAgICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0
Tm90aWZ5V3JpdGUoc2V0KTsKKyAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QwLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgVGFnT2Zmc2V0KSk7CisgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdU
MCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
aW50IHNjb3BlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFs
dWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEdldFB1dEluZm8gZ2V0
UHV0SW5mbyA9IEdldFB1dEluZm8oY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Cisg
ICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Cisg
ICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0
cnVjdHVyZS5zbG90KCk7CisgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Kj4oJmN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOworCisg
ICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5k
aXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Cisg
ICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CisgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAg
ICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90
KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uLgorICAgICAgICAgICAg
ZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7CisKKyAgICAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOworICAgICAg
ICAgICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOworICAgICAgICAgICAgbmVnUHRyKHJl
Z1QxKTsKKyAgICAgICAgICAgIHN0b3JlMzIocmVnVDMsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEs
IFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSkpOworICAgICAgICAgICAgc3RvcmUzMihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdU
MSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0
cy5wYXlsb2FkKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2Fz
ZSBHbG9iYWxWYXI6CisgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czoKKyAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgorICAgICAgICBjYXNlIEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBKU1Njb3BlKiBj
b25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhyZXNvbHZl
VHlwZSwgbV9jb2RlQmxvY2spOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29uc3RhbnRT
Y29wZSk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGlmICgh
aXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgpKSAmJiAocmVz
b2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBu
ZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdheXMgcHJvdmUg
d2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KKyAgICAgICAgICAgICAgICBp
ZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZh
ckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCByZWdUMSwgcmVnVDApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgZW1pdEdldFZhckZyb21Qb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSwgcmVnVDEsIHJlZ1QwKTsKKyAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJ
ZkVtcHR5KHJlZ1QxKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5kaXJlY3RM
b2FkRm9yT3BlcmFuZCkKKyAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRp
cmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCBiaXR3aXNl
X2Nhc3Q8V2F0Y2hwb2ludFNldCoqPigmY3VycmVudEluc3RydWN0aW9uWzVdKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1
XS51LndhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CisgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKKyAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgICAg
ICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2
ZVR5cGUpKTsKKyAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNs
b3QsIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1vZHVsZVZhcjoKKyAgICAgICAgY2FzZSBEeW5h
bWljOgorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CisgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKKyAgICAgICAgbG9hZDMyKCZjdXJyZW50SW5zdHJ1Y3Rpb25bNF0sIHJlZ1Qw
KTsKKyAgICAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVn
VDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGludG8gVDAKKworICAgICAgICBKdW1wIGlzR2xvYmFs
UHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMg
PSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRo
aXMpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSwgZmFsc2UpOworICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbnMubGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxW
YXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2Fs
VmFyKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXIsIHRydWUpOworICAgICAg
ICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIu
bGluayh0aGlzKTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5q
ZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGVtaXRDb2RlKEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCB0cnVlKTsKKyAgICAgICAgc2tpcFRv
RW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbnMubGluayh0aGlzKTsKKworICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworCisg
ICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBkZWZhdWx0OgorICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgR2V0
UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kKTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2
ZVR5cGUoKTsKKyAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CisgICAgICAgIEpJ
VFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93
X3BhdGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwor
ICAgICAgICBzbG93UGF0aENhbGwuY2FsbCgpOworICAgIH0gZWxzZQorICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblB1dFRvU2NvcGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOworICAgIGludCBhcmd1bWVudHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAg
ICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlZ1QxKTsKKyAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlZ1QwKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEs
IHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBhcmd1bWVudHMgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hv
dWxkRmlsdGVyVmFsdWUpOworCisgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDAp
OworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDEs
IEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCkpOworICAgIHN0b3Jl
MzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgp
ICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFBheWxvYWRPZmZzZXQp
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2ln
bmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisgICAgSnVtcCB2YWx1ZU5vdENl
bGw7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRG
aWx0ZXJCYXNlQW5kVmFsdWUpIHsKKyAgICAgICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsK
KyAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICB9CisK
KyAgICBlbWl0TG9hZChvd25lciwgcmVnVDAsIHJlZ1QxKTsKKyAgICBKdW1wIG93bmVyTm90Q2Vs
bDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlIHx8IG1vZGUgPT0gU2hvdWxkRmls
dGVyQmFzZUFuZFZhbHVlKQorICAgICAgICBvd25lck5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwo
cmVnVDApOworCisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuID0gYmFycmllckJy
YW5jaCgqdm0oKSwgcmVnVDEsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbldy
aXRlQmFycmllclNsb3dQYXRoLCByZWdUMSk7CisgICAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRl
bi5saW5rKHRoaXMpOworCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSB8fCBtb2Rl
ID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKKyAgICAgICAgb3duZXJOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91
bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCisgICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwor
fQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2
YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQoreworICAgIEp1bXAgdmFsdWVOb3RDZWxsOwor
ICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSB7CisgICAgICAgIGVtaXRMb2FkVGFn
KHZhbHVlLCByZWdUMCk7CisgICAgICAgIHZhbHVlTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChy
ZWdUMCk7CisgICAgfQorCisgICAgZW1pdFdyaXRlQmFycmllcihvd25lcik7CisKKyAgICBpZiAo
bW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKKyAgICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhp
cyk7Cit9CisKK3ZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKworICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwKTsKKworICAgIGNoZWNrU3Rh
Y2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAg
IGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgcmV0KCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
eworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF90YWlsX2NhbGwsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZShvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF92YXJhcmdzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3Zv
aWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF90YWlsX2NhbGxfdmFyYXJncywgY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50
cywgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQor
Cit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY29uc3RydWN0X3ZhcmFyZ3MsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZShvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY2FsbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbCwg
Y3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF90YWlsX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBjb21waWxlT3BDYWxsKG9wX3RhaWxfY2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX2V2YWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBjb21waWxlT3BDYWxsKG9wX2Nh
bGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBjb21waWxlT3BDYWxsKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RhaWxfY2Fs
bF9mb3J3YXJkX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGNvbXBpbGVPcENhbGwob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2NvbnN0cnVjdF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgY29tcGlsZU9wQ2FsbChvcF9jb25zdHJ1Y3RfdmFyYXJncywgY3VycmVudEluc3RydWN0
aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jb25z
dHJ1Y3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBjb21waWxlT3BD
YWxsKG9wX2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworfQorCit2b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKE9wY29kZUlEIG9w
Y29kZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCit7Cisg
ICAgaW50IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgYXJn
dW1lbnRzID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGludCBmaXJzdEZyZWVSZWdp
c3RlciA9IGluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKyAgICBpbnQgZmlyc3RWYXJBcmdPZmZz
ZXQgPSBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0TG9hZChhcmd1bWVudHMs
IHJlZ1QxLCByZWdUMCk7CisgICAgWl9KSVRPcGVyYXRpb25fRUpaWiBzaXplT3BlcmF0aW9uOwor
ICAgIGlmIChvcGNvZGUgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAg
ICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsK
KyAgICBlbHNlCisgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JW
YXJhcmdzOworICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAg
bW92ZShUcnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOworICAgIGVtaXRT
ZXRWYXJhcmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1Qx
KTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsg
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVv
Zih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgZW1pdExvYWQo
YXJndW1lbnRzLCByZWdUMiwgcmVnVDQpOworICAgIEZfSklUT3BlcmF0aW9uX0VGSlpaIHNldHVw
T3BlcmF0aW9uOworICAgIGlmIChvcGNvZGUgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKQorICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3Vt
ZW50c0ZyYW1lOworICAgIGVsc2UKKyAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25T
ZXR1cFZhcmFyZ3NGcmFtZTsKKyAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdU
MSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsK
KyAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7CisKKyAgICAvLyBQcm9maWxlIHRoZSBh
cmd1bWVudCBjb3VudC4KKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6
YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXls
b2FkT2Zmc2V0KSwgcmVnVDIpOworICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhOdW1Bcmd1
bWVudHMoKSwgcmVnVDApOworICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCBy
ZWdUMCwgcmVnVDIpOworICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NPZk1heE51bUFy
Z3VtZW50cygpKTsKKyAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7CisKKyAgICAvLyBJbml0aWFs
aXplICd0aGlzJy4KKyAgICBlbWl0TG9hZCh0aGlzVmFsdWUsIHJlZ1QyLCByZWdUMCk7CisgICAg
c3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgUGF5bG9hZE9mZnNldCArIChDYWxsRnJhbWU6
OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIp
KSkpKTsKKyAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBUYWdPZmZzZXQgKyAoQ2Fs
bEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJl
Z2lzdGVyKSkpKSk7CisKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CisKK3ZvaWQgSklUOjpj
b21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQoreworICAgIGFkZFB0cihU
cnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4oc2l6ZW9mKENhbGxlckZyYW1lQW5k
UEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7CisgICAgc3RvcmVQdHIoY2FsbEZy
YW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQo
KSkpOworCisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9j
b2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCBy
ZWdUMSk7CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CisKKyAgICBz
YW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOworCisgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5z
dHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBDYWxsTGlua0luZm8qIGlu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAgaW5mby0+c2V0VXBDYWxs
KENhbGxMaW5rSW5mbzo6Q2FsbCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDAp
OworCisgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsK
KyAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgYWRkUHRy
KFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworCisgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOworICAgIGVtaXREdW1i
VmlydHVhbENhbGwoKnZtKCksIGluZm8pOworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQ
b2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJh
bWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CisKKyAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOworCisgICAg
ZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25l
ZCBjYWxsTGlua0luZm9JbmRleCkKK3sKKyAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworCisgICAgLyogQ2FsbGVyIGFsd2F5czoKKyAgICAgICAgLSBVcGRhdGVzIGNh
bGxGcmFtZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJhbWUuCisgICAgICAgIC0gSW5pdGlhbGl6
ZXMgQXJndW1lbnRDb3VudDsgQ2FsbGVyRnJhbWU7IENhbGxlZS4KKworICAgICAgIEZvciBhIEpT
IGNhbGw6CisgICAgICAgIC0gQ2FsbGVlIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2su
CisgICAgICAgIC0gQ2FsbGVlIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGJlZm9yZSByZXR1
cm4uCisKKyAgICAgICBGb3IgYSBub24tSlMgY2FsbDoKKyAgICAgICAgLSBDYWxsZXIgaW5pdGlh
bGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KKyAgICAgICAgLSBDYWxsZXIgcmVzdG9yZXMgY2Fs
bEZyYW1lUmVnaXN0ZXIgYWZ0ZXIgcmV0dXJuLgorICAgICovCisgICAgQ2FsbExpbmtJbmZvKiBp
bmZvID0gbnVsbHB0cjsKKyAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQorICAgICAg
ICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOworICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgICAgICBjb21waWxlU2V0dXBWYXJhcmdzRnJh
bWUob3Bjb2RlSUQsIGluc3RydWN0aW9uLCBpbmZvKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaW50
IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworCisgICAgICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgeworICAgICAgICAgICAg
ZW1pdExvYWQocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVk
aW5nVGhpcygwKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5j
aElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgICAgIHN0b3JlUHRy
KHJlZ1QxLCBpbnN0cnVjdGlvbltPUENPREVfTEVOR1RIKG9wX2NhbGwpIC0gMl0udS5hcnJheVBy
b2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgICAgICBkb25l
LmxpbmsodGhpcyk7CisgICAgICAgIH0KKworICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJl
Z2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAgICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoYXJnQ291bnQpLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXpl
b2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykp
KTsKKyAgICB9IC8vIFNQIGhvbGRzIG5ld0NhbGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRpYWxpemVkLgorCisgICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOworICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1
bWVudENvdW50KSk7CisgICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOyAvLyByZWdU
MSwgcmVnVDAgaG9sZHMgY2FsbGVlLgorCisgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhzdGFj
a1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKTsKKyAgICBzdG9yZTMyKHJlZ1QxLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3Rl
cikpICsgVGFnT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7CisKKyAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGNvbXBpbGVDYWxsRXZhbChpbnN0
cnVjdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAob3Bjb2RlSUQgPT0g
b3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQorICAgICAg
ICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDEpKTsKKworICAgIERhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlv
bkNoZWNrOworICAgIEp1bXAgc2xvd0Nhc2UgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWws
IHJlZ1QwLCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBUcnVzdGVkSW1tUHRyKG51bGxw
dHIpKTsKKworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKKworICAgIEFTU0VSVChtX2NhbGxD
b21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICBpbmZvLT5z
ZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIENvZGVPcmlnaW4o
bV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNo
ZWNrOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExp
bmtJbmZvID0gaW5mbzsKKworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisgICAg
aWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxf
dmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpIHsK
KyAgICAgICAgcHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICBtX2NhbGxDb21waWxh
dGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZFRhaWxD
YWxsKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZENhbGwoKTsKKwor
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2Nr
KSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisKKyAgICBzYW1wbGVD
b2RlQmxvY2sobV9jb2RlQmxvY2spOworICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9u
KTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBvcGNvZGVJ
RCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3sKKyAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfY2FsbF9ldmFsKSB7CisgICAgICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGlu
c3RydWN0aW9uLCBpdGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CisKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRp
b25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CisKKyAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzKQorICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisKKyAgICBtX2NhbGxD
b21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVt
aXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRh
Z2dlZENvZGU8Tm9QdHJUYWc+KCkpOworCisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgeworICAgICAgICBhYm9ydFdp
dGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29k
ZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CisKKyAgICBz
YW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOworICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3Ry
dWN0aW9uKTsKK30KKworI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQ2
NC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZDY3OGQ4NjRiNmM0YWUyMDMxODlmMjBjNmNlMGEwZjJmNDJlNTg4
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUNjQuY3Bw
CkBAIC0wLDAgKzEsMjg1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBQYXRyaWNr
IEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVz
dWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSklU
LmgiCisKKyNpZiBFTkFCTEUoSklUKQorCisjaW5jbHVkZSAiQnl0ZWNvZGVTdHJ1Y3RzLmgiCisj
aW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb24uaCIKKyNpbmNs
dWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlcklubGlu
ZXMuaCIKKyNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcnJheS5oIgorI2lu
Y2x1ZGUgIkpTQ2FzdC5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU0xl
eGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
IgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5o
IgorI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50Lmgi
CisjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlICJUaHVua0dlbmVyYXRv
cnMuaCIKKyNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJUeXBlUHJvZmlsZXJM
b2cuaCIKKyNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2NvcGVk
TGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCisjaWYgVVNFKEpTVkFMVUU2NCkKKwordm9pZCBKSVQ6OmVtaXRfb3BfbW92KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDAp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKworCit2b2lkIEpJVDo6ZW1p
dF9vcF9lbmQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXR1cm5W
YWx1ZUdQUik7CisgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgIGVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CisgICAgcmV0KCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2ptcChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgYWRkSnVtcChqdW1wKCksIHRhcmdl
dCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKKyAgICBz
aXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0ZpbmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1
Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOworICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJz
cGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxs
b2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1vZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKKworICAg
IFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JS
ZWcgPSByZWdUMTsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMjsKKworICAgIGlm
ICghYWxsb2NhdG9yKQorICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgIGVsc2Ugewor
ICAgICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgICAgIGF1dG8gYnV0dGVyZmx5ID0gVHJ1
c3RlZEltbVB0cihudWxscHRyKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0
UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7
CisgICAgICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVy
ZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Cisg
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5z
dHJ1Y3R1cmUoKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVjdCwgc3RydWN0
dXJlKTsKKyAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxP
cE92ZXJyaWRlc0hhc0luc3RhbmNlKj4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0KCk7CisgICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3Ry
dWN0b3IoKTsKKyAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNl
VmFsdWUoKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwg
cmVnVDApOworCisgICAgLy8gV2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhh
c0luc3RhbmNlIHdvdWxkIGRvLgorICAgIEp1bXAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZSA9IGJy
YW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5mdW5jdGlvblByb3RvSGFzSW5zdGFuY2VTeW1ib2xGdW5jdGlvbigpKSk7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9yLCByZWdUMCk7CisKKyAgICAv
LyBDaGVjayB0aGF0IGNvbnN0cnVjdG9yICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJyBp
LmUuIHRoZSBvYmplY3QgaXMgbm90IGEgQy1BUEkgdXNlciBub3IgYSBib3VuZCBmdW5jdGlvbi4K
KyAgICB0ZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSwgcmVnVDAp
OworICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgSnVt
cCBkb25lID0ganVtcCgpOworCisgICAgY3VzdG9taGFzSW5zdGFuY2VWYWx1ZS5saW5rKHRoaXMp
OworICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlVHJ1ZSksIHJlZ1QwKTsKKworICAgIGRvbmUu
bGluayh0aGlzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9wSW5zdGFuY2VvZio+
KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdCgpOworICAg
IGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7CisgICAgaW50IHByb3RvID0gYnl0ZWNvZGUu
cHJvdG90eXBlKCk7CisKKyAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyAoYmFzZVZhbCwgcHJvdG8s
IGFuZCB2YWx1ZSByZXNwZWN0aXZlbHkpIGludG8gcmVnaXN0ZXJzLgorICAgIC8vIFdlIHVzZSBy
ZWdUMCBmb3IgYmFzZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBh
bmQgd2UgY2FuIHRoZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgorICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3Rv
LCByZWdUMSk7CisKKyAgICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBt
dXN0IGJlIGEgY2VsbCAtIHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1i
b2wuaGFzSW5zdGFuY2UuCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2
YWx1ZSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7CisK
KyAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNl
dCksCisgICAgICAgIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAg
ICAgICAgcmVnVDAsIC8vIHJlc3VsdAorICAgICAgICByZWdUMiwgLy8gdmFsdWUKKyAgICAgICAg
cmVnVDEsIC8vIHByb3RvCisgICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKKyAgICBn
ZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2Vu
KTsKKworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOworCisgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworCisgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5j
ZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VP
Zk9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDIsIHJlZ1QxKTsKKyAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShJbnN0cnVjdGlvbiopCit7CisgICAgLy8g
VGhpcyBhbHdheXMgZ29lcyB0byBzbG93IHBhdGggc2luY2Ugd2UgZXhwZWN0IGl0IHRvIGJlIHJh
cmUuCisgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfaXNf
ZW1wdHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOworICAgIGNvbXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKSksIHJlZ1QwKTsKKworICAgIGJveEJvb2xlYW4ocmVn
VDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIEp1
bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKKworICAgIGNvbXBhcmU2NChFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICBpc0NlbGwubGluayh0aGlzKTsKKyAgICBKdW1wIGlzTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpT
Q2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNV
bmRlZmluZWQpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOworICAgIEp1bXAg
bm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgIGlzTWFzcXVlcmFkZXNB
c1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgU3RydWN0
dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICBjb21wYXJlUHRyKEVxdWFs
LCByZWdUMCwgcmVnVDEsIHJlZ1QwKTsKKworICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKKyAgICBkb25lLmxpbmsodGhpcyk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwg
SlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIHhvcjY0KFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlZ1QwKTsKKyAg
ICB0ZXN0NjQoWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpLCByZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2lzX251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgdGVzdDY0KE5vblplcm8sIHJlZ1QwLCB0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IGludCB0eXBlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBKdW1wIGlzTm90Q2VsbCA9IGJy
YW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICBjb21wYXJlOChFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMih0eXBlKSwgcmVn
VDApOworICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgbW92
ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2lzX29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENl
bGwocmVnVDApOworCisgICAgY29tcGFyZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBK
U0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCBy
ZWdUMCk7CisgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBpc05vdENlbGwubGluayh0aGlzKTsKKyAgICBt
b3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVnVDApOworCisgICAgZG9uZS5saW5rKHRo
aXMpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgQVNTRVJU
KGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsKKyAgICBBU1NFUlQocmVnVDEgIT0gcmV0dXJu
VmFsdWVHUFIpOworICAgIEFTU0VSVChyZXR1cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rl
cik7CisKKyAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAlZWF4LgorICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmV0dXJuVmFsdWVH
UFIpOworCisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKyAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CisgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICByZXQoKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworCisgICAgSnVtcCBpc0lt
bSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZPYmpl
Y3QocmVnVDApKTsKKyAgICBpc0ltbS5saW5rKHRoaXMpOworCisgICAgaWYgKGRzdCAhPSBzcmMp
CisgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
U2V0RnVuY3Rpb25OYW1lLCByZWdUMCwgcmVnVDEpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9u
b3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKKworICAg
IC8vIEludmVydCBhZ2FpbnN0IEpTVmFsdWUoZmFsc2UpOyBpZiB0aGUgdmFsdWUgd2FzIHRhZ2dl
ZCBhcyBhIGJvb2xlYW4sIHRoZW4gYWxsIGJpdHMgd2lsbCBiZQorICAgIC8vIGNsZWFyIG90aGVy
IHRoYW4gdGhlIGxvdyBiaXQgKHdoaWNoIHdpbGwgYmUgMCBvciAxIGZvciBmYWxzZSBvciB0cnVl
IGlucHV0cyByZXNwZWN0aXZlbHkpLgorICAgIC8vIFRoZW4gaW52ZXJ0IGFnYWluc3QgSlNWYWx1
ZSh0cnVlKSwgd2hpY2ggd2lsbCBhZGQgdGhlIHRhZyBiYWNrIGluLCBhbmQgZmxpcCB0aGUgbG93
IGJpdC4KKyAgICB4b3I2NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVG
YWxzZSkpLCByZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihOb25aZXJvLCBy
ZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICB4b3I2
NChUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlZ1QwKTsK
KworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2pmYWxzZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisKKyAgICBHUFJSZWcgdmFsdWUgPSByZWdUMDsKKyAgICBHUFJSZWcg
cmVzdWx0ID0gcmVnVDE7CisgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKKyAgICBib29sIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHZhbHVlKTsKKyAg
ICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCp2bSgpLCBKU1ZhbHVlUmVncyh2YWx1ZSksIHJl
c3VsdCwgc2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpOworCisgICAgYWRkSnVtcChi
cmFuY2hUZXN0MzIoWmVybywgcmVzdWx0KSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfamVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQg
c3JjID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmMsIHJlZ1QwKTsKKyAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKKworICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hl
Y2sgTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KKyAgICBKdW1w
IGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KFplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSgqdm0oKSwgcmVnVDAs
IHJlZ1QyLCByZWdUMSk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKKyAgICBhZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVz
cyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0
KTsKKyAgICBKdW1wIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwor
CisgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVs
bAorICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5U
YWdCaXRVbmRlZmluZWQpLCByZWdUMCk7CisgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisK
KyAgICBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKKyAgICBtYXNxdWVy
YWRlc0dsb2JhbE9iamVjdElzRm9yZWlnbi5saW5rKHRoaXMpOworfTsKK3ZvaWQgSklUOjplbWl0
X29wX2puZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGlu
dCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKHNyYywgcmVnVDApOworICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDApOworCisgICAgLy8gRmlyc3QsIGhhbmRsZSBKU0NlbGwgY2FzZXMgLSBj
aGVjayBNYXNxdWVyYWRlc0FzVW5kZWZpbmVkIGJpdCBvbiB0aGUgc3RydWN0dXJlLgorICAgIGFk
ZEp1bXAoYnJhbmNoVGVzdDgoWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJn
ZXQpOworICAgIGVtaXRMb2FkU3RydWN0dXJlKCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVn
VDApOworICAgIGFkZEp1bXAoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDApLCB0YXJnZXQpOworICAgIEp1bXAg
d2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgLy8gTm93IGhhbmRsZSB0aGUgaW1tZWRp
YXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAorICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7
CisgICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZWdUMCk7CisgICAg
YWRkSnVtcChicmFuY2g2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpKSksIHRhcmdldCk7CisKKyAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0
aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKKyAgICBTcGVjaWFsOjpQb2ludGVyIHB0ciA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51LnNwZWNpYWxQb2ludGVyOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOworICAgIENDYWxsSGVscGVyczo6SnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW1QdHIoYWN0dWFsUG9pbnRlckZvcihtX2NvZGVCbG9jaywgcHRyKSkpOwor
ICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDEpLCAmY3VycmVudEluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZCk7CisgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7CisgICAgZXF1YWwubGluayh0aGlz
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kLCByZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCwgcmVn
VDEpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgIGJveEJvb2xl
YW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRfb3BfamVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdW5zaWdu
ZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCwg
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDEpOworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBhZGRKdW1wKGJyYW5jaDMy
KEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9q
dHJ1ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBHUFJSZWcgdmFs
dWUgPSByZWdUMDsKKyAgICBHUFJSZWcgcmVzdWx0ID0gcmVnVDE7CisgICAgR1BSUmVnIHNjcmF0
Y2ggPSByZWdUMjsKKyAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9
IHRydWU7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kLCB2YWx1ZSk7CisgICAgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqdm0oKSwg
SlNWYWx1ZVJlZ3ModmFsdWUpLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNo
b3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKTsKKyAgICBhZGRKdW1wKGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXN1bHQpLCB0YXJnZXQp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kLCByZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCwgcmVn
VDEpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsK
KyAgICBjb21wYXJlMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisKKyAgICBlbWl0UHV0VmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9qbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVycyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBy
ZWdUMCwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDEpOworICAgIGVtaXRK
dW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCwgcmVnVDEsIHJlZ1QyKTsKKyAgICBhZGRKdW1wKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF90aHJvdyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIEFT
U0VSVChyZWdUMCA9PSByZXR1cm5WYWx1ZUdQUik7CisgICAgY29weUNhbGxlZVNhdmVzVG9FbnRy
eUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CisgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7
CisgICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIHJlZ1Qw
KTsKKyAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKK30KKwordm9pZCBKSVQ6OmNv
bXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVP
cFN0cmljdEVxVHlwZSB0eXBlKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwor
CisgICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4K
KyAgICBtb3ZlKHJlZ1QwLCByZWdUMik7CisgICAgb3I2NChyZWdUMSwgcmVnVDIpOworICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOworCisgICAgLy8gSnVtcCBzbG93IGlmIGVp
dGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVzdCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlz
IGZpbmUsIGFuZCB0aGVuIHRlc3QKKyAgICAvLyBpZiBpdCdzIGEgZG91YmxlLgorICAgIEp1bXAg
bGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
dW1iZXIocmVnVDApKTsKKyAgICBsZWZ0T0subGluayh0aGlzKTsKKyAgICBKdW1wIHJpZ2h0T0sg
PSBicmFuY2hJZkludDMyKHJlZ1QxKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihy
ZWdUMSkpOworICAgIHJpZ2h0T0subGluayh0aGlzKTsKKworICAgIGlmICh0eXBlID09IENvbXBp
bGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpCisgICAgICAgIGNvbXBhcmU2NChFcXVhbCwgcmVn
VDEsIHJlZ1QwLCByZWdUMCk7CisgICAgZWxzZQorICAgICAgICBjb21wYXJlNjQoTm90RXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOworICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdz
IHsgcmVnVDAgfSk7CisKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX3N0cmljdGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgY29tcGlsZU9wU3RyaWN0RXEoY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbnN0cmljdGVx
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wU3RyaWN0
RXEoY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7
Cit9CisKK3ZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCit7CisgICAgaW50IHRh
cmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYzEgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBzcmMyID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNy
YzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7CisKKyAgICAvLyBKdW1wIHNsb3cgaWYgYm90aCBhcmUg
Y2VsbHMgKHRvIGNvdmVyIHN0cmluZ3MpLgorICAgIG1vdmUocmVnVDAsIHJlZ1QyKTsKKyAgICBv
cjY0KHJlZ1QxLCByZWdUMik7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QyKSk7
CisKKyAgICAvLyBKdW1wIHNsb3cgaWYgZWl0aGVyIGlzIGEgZG91YmxlLiBGaXJzdCB0ZXN0IGlm
IGl0J3MgYW4gaW50ZWdlciwgd2hpY2ggaXMgZmluZSwgYW5kIHRoZW4gdGVzdAorICAgIC8vIGlm
IGl0J3MgYSBkb3VibGUuCisgICAgSnVtcCBsZWZ0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QwKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMCkpOworICAgIGxlZnRPSy5saW5r
KHRoaXMpOworICAgIEp1bXAgcmlnaHRPSyA9IGJyYW5jaElmSW50MzIocmVnVDEpOworICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmTnVtYmVyKHJlZ1QxKSk7CisgICAgcmlnaHRPSy5saW5rKHRoaXMp
OworCisgICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKKyAg
ICAgICAgYWRkSnVtcChicmFuY2g2NChFcXVhbCwgcmVnVDEsIHJlZ1QwKSwgdGFyZ2V0KTsKKyAg
ICBlbHNlCisgICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90RXF1YWwsIHJlZ1QxLCByZWdUMCks
IHRhcmdldCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjdXJyZW50
SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
anN0cmljdGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
KworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QwLCByZWdU
MSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZh
bHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgdW5z
aWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBl
bWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJn
ZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgaW50IHNyY1ZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywgcmVnVDApOworCisg
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApKTsKKworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQorICAgICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90
b19zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgc3Jj
VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzcmNWUmVnLCByZWdUMCk7CisKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDApKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFN0cmluZyhyZWdUMCkp
OworCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIGludCBzcmNWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsK
KworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgIGFkZFNsb3dD
YXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKCk7CisgICAgaWYgKHNyY1ZSZWcgIT0gZHN0VlJlZykKKyAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3RWUmVnKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9t
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOworCisgICAg
bW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCByZWdUMyk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVn
VDMsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwor
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIEFkZHJlc3MocmVnVDMsIFZNOjpj
YWxsRnJhbWVGb3JDYXRjaE9mZnNldCgpKSk7CisKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0
YWNrUG9pbnRlck9mZnNldEZvcihjb2RlQmxvY2soKSkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2Fs
bEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIGNhbGxPcGVyYXRp
b25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbkNoZWNrSWZFeGNlcHRpb25Jc1VuY2F0Y2hhYmxl
QW5kTm90aWZ5UHJvZmlsZXIpOworICAgIEp1bXAgaXNDYXRjaGFibGVFeGNlcHRpb24gPSBicmFu
Y2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpOworICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRs
ZXIoKnZtKCkpOworICAgIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uLmxpbmsodGhpcyk7CisKKyAgICBt
b3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKKyAgICBsb2FkNjQoQWRkcmVzcyhyZWdU
MywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSwgcmVnVDApOworICAgIHN0b3JlNjQoVHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2Vw
dGlvbk9mZnNldCgpKSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKTsKKworICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QwLCBFeGNlcHRp
b246OnZhbHVlT2Zmc2V0KCkpLCByZWdUMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKworI2lmIEVOQUJMRShERkdfSklUKQor
ICAgIC8vIEZJWE1FOiBjb25zaWRlciBpbmxpbmUgY2FjaGluZyB0aGUgcHJvY2VzcyBvZiBkb2lu
ZyBPU1IgZW50cnksIGluY2x1ZGluZworICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9y
aW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CisKKyAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
QnVmZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVy
Kj4oY3VycmVudEluc3RydWN0aW9uWzNdLnUucG9pbnRlcik7CisgICAgaWYgKGJ1ZmZlciB8fCAh
c2hvdWxkRW1pdFByb2ZpbGluZygpKQorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRy
eU9TUkVudGVyQXRDYXRjaCwgbV9ieXRlY29kZU9mZnNldCk7CisgICAgZWxzZQorICAgICAgICBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRDYXRjaEFuZFZhbHVlUHJvZmlsZSwg
bV9ieXRlY29kZU9mZnNldCk7CisgICAgYXV0byBza2lwT1NSRW50cnkgPSBicmFuY2hUZXN0UHRy
KFplcm8sIHJldHVyblZhbHVlR1BSKTsKKyAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Cisg
ICAganVtcChyZXR1cm5WYWx1ZUdQUiwgRXhjZXB0aW9uSGFuZGxlclB0clRhZyk7CisgICAgc2tp
cE9TUkVudHJ5LmxpbmsodGhpcyk7CisgICAgaWYgKGJ1ZmZlciAmJiBzaG91bGRFbWl0UHJvZmls
aW5nKCkpIHsKKyAgICAgICAgYnVmZmVyLT5mb3JFYWNoKFsmXSAoVmFsdWVQcm9maWxlQW5kT3Bl
cmFuZCYgcHJvZmlsZSkgeworICAgICAgICAgICAgSlNWYWx1ZVJlZ3MgcmVncyhyZWdUMCk7Cisg
ICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCByZWdz
KTsKKyAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUocHJvZmlsZS5tX3Byb2ZpbGUp
OworICAgICAgICB9KTsKKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShJbnN0cnVjdGlvbiopCit7Cisg
ICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLi4uCit9CisKK3ZvaWQgSklU
OjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBpbnQgY3VycmVudFNjb3BlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRTY29wZSwgcmVnVDApOwor
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdU
MCk7CisgICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBy
ZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCisg
ICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKKyAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVt
cFRhYmxlLCBtX2J5dGVjb2RlT2Zmc2V0LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6Oklt
bWVkaWF0ZSkpOworICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Td2l0Y2hJbW1XaXRoVW5rbm93bktleVR5cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsK
KyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3aXRjaFB0clRhZyk7Cit9CisKK3ZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9jaGFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisKKyAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0
aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgorICAgIFNpbXBsZUp1bXBUYWJsZSog
anVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Cisg
ICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9m
ZnNldCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKKyAgICBqdW1w
VGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNj
cnV0aW5lZSwgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoQ2hhcldp
dGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOworICAgIGp1bXAocmV0dXJuVmFs
dWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0
cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIHNpemVfdCB0YWJs
ZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCBk
ZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNp
Z25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAg
Ly8gY3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMg
c3dpdGNoIHN0YXRlbWVudC4KKyAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2Nv
ZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOworICAgIG1fc3dpdGNo
ZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1
bHRPZmZzZXQpKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NydXRpbmVlLCByZWdU
MCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93bktl
eVR5cGUsIHJlZ1QwLCB0YWJsZUluZGV4KTsKKyAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBKU1N3
aXRjaFB0clRhZyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2RlYnVnKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgbG9hZDMyKGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJl
cXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CisgICAgSnVtcCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBi
cmFuY2hUZXN0MzIoWmVybywgcmVnVDApOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVi
dWcsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIG5vRGVidWdnZXJSZXF1
ZXN0cy5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMxLCByZWdUMCk7Cisg
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisKKyAgICBKdW1w
IGlzTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3Mo
cmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQpKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwor
ICAgIEp1bXAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKKworICAgIGlz
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMpOworICAgIGVtaXRMb2FkU3RydWN0dXJl
KCp2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgcmVnVDApOworICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSksIHJlZ1QyKTsKKyAgICBjb21w
YXJlUHRyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKKyAgICBKdW1wIHdhc05vdEltbWVk
aWF0ZSA9IGp1bXAoKTsKKworICAgIGlzSW1tZWRpYXRlLmxpbmsodGhpcyk7CisKKyAgICBhbmQ2
NChUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlZ1QwKTsKKyAgICBjb21wYXJlNjQo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoVmFsdWVOdWxsKSwgcmVnVDApOworCisgICAgd2Fz
Tm90SW1tZWRpYXRlLmxpbmsodGhpcyk7CisgICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZC5saW5rKHRoaXMpOworCisgICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdU
MCB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisKK30KKwordm9pZCBKSVQ6
OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAg
ICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgc3Jj
MSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHNyYzEsIHJlZ1QwKTsKKyAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZO
b3RDZWxsKHJlZ1QwKTsKKworICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJh
bmNoVGVzdDgoTm9uWmVybywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CisgICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkID0ganVtcCgpOworCisgICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhp
cyk7CisgICAgZW1pdExvYWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdU
MCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSwgcmVnVDIpOworICAgIGNvbXBhcmVQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMiwg
cmVnVDApOworICAgIEp1bXAgd2FzTm90SW1tZWRpYXRlID0ganVtcCgpOworCisgICAgaXNJbW1l
ZGlhdGUubGluayh0aGlzKTsKKworICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZp
bmVkKSwgcmVnVDApOworICAgIGNvbXBhcmU2NChOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0z
MihWYWx1ZU51bGwpLCByZWdUMCk7CisKKyAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsK
KyAgICB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7CisKKyAgICBib3hC
b29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGVtaXRQdXRWaXJ0dWFs
UmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoSW5zdHJ1Y3Rpb24q
KQoreworICAgIC8vIEV2ZW4gdGhvdWdoIENUSSBkb2Vzbid0IHVzZSB0aGVtLCB3ZSBpbml0aWFs
aXplIG91ciBjb25zdGFudAorICAgIC8vIHJlZ2lzdGVycyB0byB6YXAgc3RhbGUgcG9pbnRlcnMs
IHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2luZworICAgIC8vIG9iamVjdCBsaWZldGlt
ZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KKyAgICBzaXplX3QgY291bnQgPSBtX2NvZGVC
bG9jay0+bV9udW1WYXJzOworICAgIGZvciAoc2l6ZV90IGogPSBDb2RlQmxvY2s6OmxsaW50QmFz
ZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKTsgaiA8IGNvdW50OyArK2op
CisgICAgICAgIGVtaXRJbml0UmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaikub2Zm
c2V0KCkpOworCisgICAgZW1pdFdyaXRlQmFycmllcihtX2NvZGVCbG9jayk7CisKKyAgICBlbWl0
RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2Nv
cGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhl
YWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2NvcGVDaGFpbigpKSwgcmVnVDApOworICAg
IGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RvX3Ro
aXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBXcml0ZUJhcnJpZXJC
YXNlPFN0cnVjdHVyZT4qIGNhY2hlZFN0cnVjdHVyZSA9ICZjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5zdHJ1Y3R1cmU7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCByZWdUMSk7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDEpOworCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RUeXBlKHJlZ1QxLCBGaW5h
bE9iamVjdFR5cGUpKTsKKyAgICBsb2FkUHRyKGNhY2hlZFN0cnVjdHVyZSwgcmVnVDIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDIpKTsKKyAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMiwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBjYWxs
ZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIFdyaXRlQmFycmllckJh
c2U8SlNDZWxsPiogY2FjaGVkRnVuY3Rpb24gPSAmY3VycmVudEluc3RydWN0aW9uWzRdLnUuanND
ZWxsOworICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnID0gcmVnVDA7CisgICAgUmVnaXN0ZXJJRCBy
YXJlRGF0YVJlZyA9IHJlZ1Q0OworICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Cisg
ICAgUmVnaXN0ZXJJRCBhbGxvY2F0b3JSZWcgPSByZWdUMTsKKyAgICBSZWdpc3RlcklEIHN0cnVj
dHVyZVJlZyA9IHJlZ1QyOworICAgIFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdU
NDsKKyAgICBSZWdpc3RlcklEIHNjcmF0Y2hSZWcgPSByZWdUMzsKKworICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCBjYWxsZWVSZWcpOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90RnVuY3Rpb24oY2FsbGVlUmVnKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKGNhbGxlZVJlZywg
SlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgcmFyZURhdGFSZWcpOworICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFRlc3RQdHIoWmVybywgcmFyZURhdGFSZWcpKTsKKyAgICB4b3JQdHIoVHJ1
c3RlZEltbVB0cihKU0Z1bmN0aW9uUG9pc29uOjprZXkoKSksIHJhcmVEYXRhUmVnKTsKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmFyZURhdGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRP
ZkFsbG9jYXRvcigpKSwgYWxsb2NhdG9yUmVnKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmFyZURh
dGFSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9mZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUo
KSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOjpvZmZzZXRPZlN0cnVjdHVyZSgpKSwgc3RydWN0
dXJlUmVnKTsKKworICAgIGxvYWRQdHIoY2FjaGVkRnVuY3Rpb24sIGNhY2hlZEZ1bmN0aW9uUmVn
KTsKKyAgICBKdW1wIGhhc1NlZW5NdWx0aXBsZUNhbGxlZXMgPSBicmFuY2hQdHIoRXF1YWwsIGNh
Y2hlZEZ1bmN0aW9uUmVnLCBUcnVzdGVkSW1tUHRyKEpTQ2VsbDo6c2Vlbk11bHRpcGxlQ2FsbGVl
T2JqZWN0cygpKSk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBjYWxsZWVS
ZWcsIGNhY2hlZEZ1bmN0aW9uUmVnKSk7CisgICAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcy5saW5r
KHRoaXMpOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworICAgIGF1dG8gYnV0dGVyZmx5ID0g
VHJ1c3RlZEltbVB0cihudWxscHRyKTsKKyAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRS
ZWcsIEpJVEFsbG9jYXRvcjo6dmFyaWFibGUoKSwgYWxsb2NhdG9yUmVnLCBzdHJ1Y3R1cmVSZWcs
IGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGNhbGxlZSwgc2NyYXRjaFJlZyk7CisgICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2hS
ZWcsIEpTRnVuY3Rpb246Om9mZnNldE9mUmFyZURhdGEoKSksIHNjcmF0Y2hSZWcpOworICAgIHhv
clB0cihUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwgc2NyYXRjaFJlZyk7
CisgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0
T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9m
ZnNldE9mSW5saW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOworICAgIGVtaXRJbml0aWFsaXpl
SW5saW5lU3RvcmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOworICAgIGFkZFNsb3dDYXNlKHNs
b3dDYXNlcyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZFbXB0eShyZWdUMCkpOworfQorCisKKy8vIFNsb3cgY2FzZXMKKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhp
dGVyKTsKKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZWdUMCwgcmVn
VDEpOworICAgIGJveEJvb2xlYW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJu
VmFsdWVHUFIgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kLCByZXR1cm5WYWx1ZUdQUik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwor
CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJlZ1QwLCByZWdUMSk7Cisg
ICAgeG9yMzIoVHJ1c3RlZEltbTMyKDB4MSksIHJlZ1QwKTsKKyAgICBib3hCb29sZWFuKHJldHVy
blZhbHVlR1BSLCBKU1ZhbHVlUmVncyB7IHJldHVyblZhbHVlR1BSIH0pOworICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmV0dXJuVmFs
dWVHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25Db21wYXJlRXEsIHJlZ1QwLCByZWdUMSk7CisgICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNo
VGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2puZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOworCisgICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDAsIHJl
Z1QxKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFs
dWVHUFIpLCB0YXJnZXQpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9j
dXN0b20oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisg
ICAgYXV0byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcEluc3RhbmNlb2ZDdXN0b20q
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3QoKTsKKyAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZSgpOworICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5
dGVjb2RlLmNvbnN0cnVjdG9yKCk7CisgICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29k
ZS5oYXNJbnN0YW5jZVZhbHVlKCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVl
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihjb25zdHJ1Y3RvciwgcmVnVDEp
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDIpOwor
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5zdGFuY2VPZkN1c3RvbSwgcmVnVDAsIHJlZ1Qx
LCByZWdUMik7CisgICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3MgeyBy
ZXR1cm5WYWx1ZUdQUiB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmV0dXJu
VmFsdWVHUFIpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0
aW9uWzRdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVn
VDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAg
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkpOworCisg
ICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCBy
ZWdUMCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKK3sK
KyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJm1fY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOworCisgICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOworCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBs
aWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1p
dExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUp
OworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSwgcmVnVDApOworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKKworICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFk
VHlwZSwgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxO
b1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVl
KCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsK
KyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJU
YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxl
QWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+
cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKworICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwg
YnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXBUb0RvbmUpKTsKKworICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RF
X0ZPUl9TVFVCKAorICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0
aW5lUHRyVGFnLAorICAgICAgICAiQmFzZWxpbmUgaGFzX2luZGV4ZWRfcHJvcGVydHkgc3R1YiBm
b3IgJXMsIHJldHVybiBwb2ludCAlcCIsIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwg
cmV0dXJuQWRkcmVzcy52YWx1ZSgpKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVt
cChieVZhbEluZm8tPmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGlu
ZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIE1h
Y3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNy
b0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8
T3BlcmF0aW9uUHRyVGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJy
YXlQcm9maWxlOworICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5
VmFsSW5mbygpOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHBy
b3BlcnR5LCByZWdUMSk7CisKKyAgICAvLyBUaGlzIGlzIHRlY2huaWNhbGx5IGluY29ycmVjdCAt
IHdlJ3JlIHplcm8tZXh0ZW5kaW5nIGFuIGludDMyLiBPbiB0aGUgaG90IHBhdGggdGhpcyBkb2Vz
bid0IG1hdHRlci4KKyAgICAvLyBXZSBjaGVjayB0aGUgdmFsdWUgYXMgaWYgaXQgd2FzIGEgdWlu
dDMyIGFnYWluc3QgdGhlIG1fdmVjdG9yTGVuZ3RoIC0gd2hpY2ggd2lsbCBhbHdheXMgZmFpbCBp
ZgorICAgIC8vIG51bWJlciB3YXMgc2lnbmVkIHNpbmNlIG1fdmVjdG9yTGVuZ3RoIGlzIGFsd2F5
cyBsZXNzIHRoYW4gaW50bWF4IChzaW5jZSB0aGUgdG90YWwgYWxsb2NhdGlvbgorICAgIC8vIHNp
emUgaXMgYWx3YXlzIGxlc3MgdGhhbiA0R2IpLiBBcyBzdWNoIHplcm8gZXh0ZW5kaW5nIHdpbGwg
aGF2ZSBiZWVuIGNvcnJlY3QgKGFuZCBleHRlbmRpbmcgdGhlIHZhbHVlCisgICAgLy8gdG8gNjQt
Yml0cyBpcyBuZWNlc3Nhcnkgc2luY2UgaXQncyB1c2VkIGluIHRoZSBhZGRyZXNzIGNhbGN1bGF0
aW9uLiBXZSB6ZXJvIGV4dGVuZCByYXRoZXIgdGhhbiBzaWduCisgICAgLy8gZXh0ZW5kaW5nIHNp
bmNlIGl0IG1ha2VzIGl0IGVhc2llciB0byByZS10YWcgdGhlIHZhbHVlIGluIHRoZSBzbG93IGNh
c2UuCisgICAgemVyb0V4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsKKworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgZW1pdEFycmF5UHJvZmlsaW5n
U2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgYW5kMzIoVHJ1c3RlZElt
bTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOworCisgICAgSklUQXJyYXlNb2RlIG1vZGUg
PSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CisgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwor
CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJy
YXlzIGFuZCBBcmd1bWVudHMuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzUwMzQuCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJh
eU1vZGUoY3VycmVudEluc3RydWN0aW9uLCBtb2RlLCBiYWRUeXBlKTsKKworICAgIG1vdmUoVHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSwgcmVnVDApOworCisg
ICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKwor
ICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOworCisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOworCisgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOworCisgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5
dGVjb2RlT2Zmc2V0LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRv
bmUsIG5leHRIb3RQYXRoKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhl
ZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CisKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBp
bnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IHByb3Bl
cnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhd
LmJ5VmFsSW5mbzsKKworICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKKworICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIocHJvcGVydHksIHJlZ1QxKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIGRzdCwgcmVnVDAsIHJlZ1QxLCBieVZhbElu
Zm8pOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
W21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKKyAgICBtX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0
X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CisgICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNV0udS5vcGVyYW5kOworCisgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEgY2VsbAorICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisKKyAgICAvLyBDaGVjayB0aGUgc3RydWN0dXJl
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdUMik7CisgICAgbG9h
ZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsK
KyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIs
IEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURPZmZzZXQoKSkpKTsK
KworICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QxKTsKKyAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4gdGhlIGVudW1lcmF0
b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxpbmUgYWNjZXNzCisg
ICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBB
ZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZElubGluZUNhcGFj
aXR5T2Zmc2V0KCkpKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKKyAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwg
cmVnVDEpOworICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0KSwg
cmVnVDApOworCisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgLy8gT3RoZXJ3aXNlIGl0
J3Mgb3V0IG9mIGxpbmUKKyAgICBvdXRPZkxpbmVBY2Nlc3MubGluayh0aGlzKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QwKTsK
KyAgICBzdWIzMihBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpLCByZWdUMSk7CisgICAgbmVnMzIocmVnVDEpOworICAg
IHNpZ25FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgaW50MzJfdCBvZmZzZXRPZkZp
cnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJz
dE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKTsKKyAgICBsb2FkNjQo
QmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5
KSwgcmVnVDApOworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOworICAgIEp1bXAgaW5Cb3Vu
ZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7CisKKyAgICBt
b3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpKSwgcmVnVDApOworCisg
ICAgSnVtcCBkb25lID0ganVtcCgpOworICAgIGluQm91bmRzLmxpbmsodGhpcyk7CisKKyAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkUHJv
cGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOworICAgIHNpZ25FeHRlbmQzMlRvUHRy
KHJlZ1QwLCByZWdUMCk7CisgICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMSwgcmVnVDAsIFRpbWVz
RWlnaHQpLCByZWdUMCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7CisgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVy
aWNfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgZW51bWVyYXRvciA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
aW5kZXgsIHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGVudW1lcmF0b3IsIHJl
Z1QxKTsKKyAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmVuZEdlbmVyaWNQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpKTsKKworICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpLCByZWdUMCk7CisKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAgaW5Cb3VuZHMu
bGluayh0aGlzKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Cisg
ICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKKyAgICBsb2FkNjQoQmFzZUluZGV4
KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKKworICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX3Byb2ZpbGVfdHlwZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUubG9jYXRpb247CisgICAgaW50IHZhbHVlVG9Qcm9maWxlID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2Zp
bGUsIHJlZ1QwKTsKKworICAgIEp1bXBMaXN0IGp1bXBUb0VuZDsKKworICAgIGp1bXBUb0VuZC5h
cHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworCisgICAgLy8gQ29tcGlsZSBpbiBhIHByZWRp
Y3RpdmUgdHlwZSBjaGVjaywgaWYgcG9zc2libGUsIHRvIHNlZSBpZiB3ZSBjYW4gc2tpcCB3cml0
aW5nIHRvIHRoZSBsb2cuCisgICAgLy8gVGhlc2UgdHlwZWNoZWNrcyBhcmUgaW5saW5lZCB0byBt
YXRjaCB0aG9zZSBvZiB0aGUgNjQtYml0IEpTVmFsdWUgdHlwZSBjaGVja3MuCisgICAgaWYgKGNh
Y2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZVVuZGVmaW5lZCkKKyAgICAg
ICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlVuZGVmaW5lZChyZWdUMCkpOworICAgIGVsc2Ug
aWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZU51bGwpCisgICAg
ICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdWxsKHJlZ1QwKSk7CisgICAgZWxzZSBpZiAo
Y2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQm9vbGVhbikKKyAgICAg
ICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkJvb2xlYW4ocmVnVDAsIHJlZ1QxKSk7CisgICAg
ZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQW55SW50
KQorICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmSW50MzIocmVnVDApKTsKKyAgICBl
bHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdW1iZXIp
CisgICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKKyAgICBl
bHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVTdHJpbmcp
IHsKKyAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAg
ICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmU3RyaW5nKHJlZ1QwKSk7CisgICAgICAgIGlz
Tm90Q2VsbC5saW5rKHRoaXMpOworICAgIH0KKworICAgIC8vIExvYWQgdGhlIHR5cGUgcHJvZmls
aW5nIGxvZyBpbnRvIFQyLgorICAgIFR5cGVQcm9maWxlckxvZyogY2FjaGVkVHlwZVByb2ZpbGVy
TG9nID0gbV92bS0+dHlwZVByb2ZpbGVyTG9nKCk7CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNh
Y2hlZFR5cGVQcm9maWxlckxvZyksIHJlZ1QyKTsKKyAgICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBl
bnRyeSBpbnRvIFQxLgorICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9n
OjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHJlZ1QxKTsKKworICAgIC8vIFN0b3JlIHRoZSBK
U1ZhbHVlIG9udG8gdGhlIGxvZyBlbnRyeS4KKyAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJl
Z1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2YWx1ZU9mZnNldCgpKSk7CisKKyAgICAv
LyBTdG9yZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYgVDAgaXMgYSBjZWxsLCBvdGhl
cndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4KKyAgICBKdW1wIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0
cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7CisgICAgc3RvcmUzMihyZWdUMCwgQWRkcmVzcyhy
ZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6c3RydWN0dXJlSURPZmZzZXQoKSkpOwor
ICAgIEp1bXAgc2tpcElzQ2VsbCA9IGp1bXAoKTsKKyAgICBub3RDZWxsLmxpbmsodGhpcyk7Cisg
ICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDEsIFR5cGVQcm9maWxlckxv
Zzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkpKTsKKyAgICBza2lwSXNDZWxsLmxpbmso
dGhpcyk7CisKKyAgICAvLyBTdG9yZSB0aGUgdHlwZUxvY2F0aW9uIG9uIHRoZSBsb2cgZW50cnku
CisgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVMb2NhdGlvbiksIHJlZ1QwKTsKKyAg
ICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5
Ojpsb2NhdGlvbk9mZnNldCgpKSk7CisKKyAgICAvLyBJbmNyZW1lbnQgdGhlIGN1cnJlbnQgbG9n
IGVudHJ5LgorICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKFR5cGVQcm9maWxlckxvZzo6
TG9nRW50cnkpKSwgcmVnVDEpOworICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3MocmVnVDIsIFR5
cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zmc2V0KCkpKTsKKyAgICBKdW1wIHNraXBD
bGVhckxvZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW1QdHIoY2FjaGVk
VHlwZVByb2ZpbGVyTG9nLT5sb2dFbmRQdHIoKSkpOworICAgIC8vIENsZWFyIHRoZSBsb2cgaWYg
d2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nLgorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHJvY2Vzc1R5cGVQcm9maWxlckxvZyk7CisgICAgc2tpcENsZWFyTG9nLmxpbmsodGhpcyk7CisK
KyAgICBqdW1wVG9FbmQubGluayh0aGlzKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3Byb2xvZ3VlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIw
ICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMg
aWYgdGhpcyBpcyB0cnVlLiIpOworICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsK
KyAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBu
b24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Cisg
ICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3Jh
dGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDMpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5Q
cm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7Cit9CisK
K3ZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CisgICAgc3Rh
dGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3
ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOworICAgIEdQUlJlZyBzaGFk
b3dQYWNrZXRSZWcgPSByZWdUMDsKKyAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIw
OyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgR1BSUmVnIHNj
cmF0Y2gyUmVnID0gcmVnVDI7CisgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqdm0oKSwg
c2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDIpOwor
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCwgcmVnVDMpOworICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJl
ZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgo
bV9ieXRlY29kZU9mZnNldCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCByZXN1bHQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1Qw
KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVnVDApOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKExlc3NUaGFuLCByZWdUMCwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgYm94SW50
MzIocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3RlcihyZXN1bHQsIHJlZ1QwKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAo
T3Bjb2RlSUQsIGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit7CisgICAgLy8gV2UgZ2VuZXJhdGUgaW5saW5lIGNvZGUgZm9y
IHRoZSBmb2xsb3dpbmcgY2FzZXMgaW4gdGhlIGZhc3QgcGF0aDoKKyAgICAvLyAtIGludCBpbW1l
ZGlhdGUgdG8gY29uc3RhbnQgaW50IGltbWVkaWF0ZQorICAgIC8vIC0gY29uc3RhbnQgaW50IGlt
bWVkaWF0ZSB0byBpbnQgaW1tZWRpYXRlCisgICAgLy8gLSBpbnQgaW1tZWRpYXRlIHRvIGludCBp
bW1lZGlhdGUKKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgeworICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmVnVDApOworICAgICAgICBhZGRTbG93Q2Fz
ZShicmFuY2hJZk5vdENlbGwocmVnVDApKTsKKyAgICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Cisg
ICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwor
ICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIo
Y29tbXV0ZShjb25kaXRpb24pLCByZWdUMCwgSW1tMzIoYXNTdHJpbmcoZ2V0Q29uc3RhbnRPcGVy
YW5kKG9wMSkpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDIpKSB7CisgICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOworICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKKyAgICAg
ICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7CisgICAg
ICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsKKyAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25k
aXRpb24sIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQob3AyKSktPnRy
eUdldFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgeworICAgICAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKG9wMSwgcmVnVDApOworICAgICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQocmVn
VDApOworICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldE9wZXJhbmRDb25zdGFudEludChvcDIp
OworICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmlt
bSkpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDEpKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
ZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMSk7CisgICAgICAg
IGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7CisgICAgICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMSwgSW1tMzIob3AxaW1tKSks
IHRhcmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RJbnQocmVnVDApOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMSk7CisKKyAg
ICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxKSwgdGFyZ2V0KTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChpbnQgb3AxLCBpbnQgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQoreworICAg
IGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFu
ZENvbnN0YW50SW50KG9wMik7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCBy
ZWdUMCwgSW1tMzIob3AyaW1tKSksIHRhcmdldCk7CisgICAgfSBlbHNlIGlmIChpc09wZXJhbmRD
b25zdGFudEludChvcDEpKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCBy
ZWdUMSk7CisgICAgICAgIGludDMyX3Qgb3AxaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
MSk7CisgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMSwg
SW1tMzIob3AxaW1tKSksIHRhcmdldCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdUMSk7CisgICAgICAgIGFkZEp1bXAo
YnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOworICAgIH0KK30KKwor
dm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGludCBkc3QsIGludCBvcDEsIGludCBvcDIs
IFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQoreworICAgIGlmIChpc09wZXJhbmRDb25z
dGFudEludChvcDIpKSB7CisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCByZWdU
MCk7CisgICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7
CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCBJbW0zMihvcDJpbW0pLCByZWdU
MCk7CisgICAgfSBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CisgICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7CisgICAgICAgIGludDMyX3Qgb3Ax
aW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSk7CisgICAgICAgIGNvbXBhcmUzMihjb21t
dXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0zMihvcDFpbW0pLCByZWdUMCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMob3AxLCByZWdUMCwgb3AyLCByZWdU
MSk7CisgICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSwgcmVnVDApOwor
ICAgIH0KKyAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgRG91YmxlQ29u
ZGl0aW9uIGNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIENPTVBJTEVfQVNTRVJU
KE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpID09IE9QQ09ERV9MRU5HVEgob3Bfamxlc3NlcSksIE9Q
Q09ERV9MRU5HVEhfb3Bfamxlc3NlcV9lcXVhbHNfb3Bfamxlc3MpOworICAgIENPTVBJTEVfQVNT
RVJUKE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpID09IE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzKSwg
T1BDT0RFX0xFTkdUSF9vcF9qbmxlc3NfZXF1YWxzX29wX2psZXNzKTsKKyAgICBDT01QSUxFX0FT
U0VSVChPUENPREVfTEVOR1RIKG9wX2psZXNzKSA9PSBPUENPREVfTEVOR1RIKG9wX2pubGVzc2Vx
KSwgT1BDT0RFX0xFTkdUSF9vcF9qbmxlc3NlcV9lcXVhbHNfb3Bfamxlc3MpOworICAgIENPTVBJ
TEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpID09IE9QQ09ERV9MRU5HVEgob3Bfamdy
ZWF0ZXIpLCBPUENPREVfTEVOR1RIX29wX2pncmVhdGVyX2VxdWFsc19vcF9qbGVzcyk7CisgICAg
Q09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9qbGVzcykgPT0gT1BDT0RFX0xFTkdUSChv
cF9qZ3JlYXRlcmVxKSwgT1BDT0RFX0xFTkdUSF9vcF9qZ3JlYXRlcmVxX2VxdWFsc19vcF9qbGVz
cyk7CisgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9qbGVzcykgPT0gT1BDT0RF
X0xFTkdUSChvcF9qbmdyZWF0ZXIpLCBPUENPREVfTEVOR1RIX29wX2puZ3JlYXRlcl9lcXVhbHNf
b3Bfamxlc3MpOworICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpID09
IE9QQ09ERV9MRU5HVEgob3Bfam5ncmVhdGVyZXEpLCBPUENPREVfTEVOR1RIX29wX2puZ3JlYXRl
cmVxX2VxdWFsc19vcF9qbGVzcyk7CisKKyAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBm
b3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgorICAgIC8vIC0gZmxvYXRp
bmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKKyAgICAvLyAtIGNvbnN0
YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCisgICAgLy8gLSBmbG9h
dGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgorICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewor
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOworICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkgeworICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgeworICAgICAgICAgICAgSnVtcCBmYWlsMSA9
IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKKyAgICAgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZw
UmVnVDApOworCisgICAgICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFu
ZChvcDIpLmFzSW50MzIoKTsKKworICAgICAgICAgICAgbW92ZShJbW0zMihvcDJpbW0pLCByZWdU
MSk7CisgICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisK
KyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShjb25kaXRpb24sIGZw
UmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOworCisgICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpKTsKKworICAgICAgICAgICAgZmFpbDEu
bGluayh0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMCwgcmVn
VDEpOworICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVy
byA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CisgICAgICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpKSB7CisgICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEp
OworICAgICAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7CisgICAg
ICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisKKyAgICAgICAgICAgIGlu
dDMyX3Qgb3AxaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOworCisgICAg
ICAgICAgICBtb3ZlKEltbTMyKG9wMWltbSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKKworICAgICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7
CisKKyAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChv
cF9qbGVzcykpOworCisgICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMSk7CisgICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KKworICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkgeworICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwor
ICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOworICAgICAgICBK
dW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7CisgICAgICAgIGFkZDY0KHRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVnVDApOworICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlZ1QxKTsKKyAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOworICAg
ICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7CisKKyAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdl
dCk7CisKKyAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9w
X2psZXNzKSk7CisKKyAgICAgICAgZmFpbDEubGluayh0aGlzKTsKKyAgICAgICAgZmFpbDIubGlu
ayh0aGlzKTsKKyAgICAgICAgZmFpbDMubGluayh0aGlzKTsKKyAgICB9CisKKyAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgorICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMCwgcmVnVDEpOworICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOworfQorCit2
b2lkIEpJVDo6ZW1pdF9vcF9pbmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBpbnQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKworICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7CisgICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxv
dywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOworICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfZGVjKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgaW50IHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOworICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCk7CisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3Zl
cmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKKyAgICBib3hJbnQzMihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7
Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgQ1BVKFg4Nl82NCkKKwordm9p
ZCBKSVQ6OmVtaXRfb3BfbW9kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IG9wMiA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICAvLyBNYWtlIHN1cmUgcmVnaXN0
ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCisgICAgQVNTRVJUKHJl
Z1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKKyAgICBhdXRvIGVkeCA9IFg4NlJlZ2lzdGVyczo6
ZWR4OworICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjplY3g7CisgICAgQVNTRVJUKHJlZ1Q0
ICE9IGVkeCk7CisgICAgQVNTRVJUKHJlZ1Q0ICE9IGVjeCk7CisKKyAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhvcDEsIHJlZ1Q0LCBvcDIsIGVjeCk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1Q0KTsKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKKworICAg
IG1vdmUocmVnVDQsIHJlZ1QwKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywg
ZWN4KSk7CisgICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwg
ZWN4LCBUcnVzdGVkSW1tMzIoLTEpKTsKKyAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOworICAgIGRlbm9taW5hdG9yTm90
TmVnMS5saW5rKHRoaXMpOworICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOworICAgIHg4
NkRpdjMyKGVjeCk7CisgICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7CisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOworICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhp
cyk7CisgICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOworICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX21vZCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKK30KKworI2Vsc2UgLy8gQ1BV
KFg4Nl82NCkKKwordm9pZCBKSVQ6OmVtaXRfb3BfbW9kKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOworICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKK3sKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsKK30KKworI2VuZGlmIC8vIENQVShYODZfNjQpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBFTkQ6IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBp
bnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsK
KyAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsK
KworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGJvb2wgcHJv
cGVydHlOYW1lSXNJbnRlZ2VyQ29uc3RhbnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0
eSk7CisgICAgaWYgKHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50KQorICAgICAgICBtb3Zl
KEltbTMyKGdldE9wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSkpLCByZWdUMSk7CisgICAgZWxz
ZQorICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisKKyAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworCisgICAgUGF0Y2hh
YmxlSnVtcCBub3RJbmRleDsKKyAgICBpZiAoIXByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50
KSB7CisgICAgICAgIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChyZWdUMSk7
CisgICAgICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKKworICAgICAgICAvLyBUaGlzIGlzIHRl
Y2huaWNhbGx5IGluY29ycmVjdCAtIHdlJ3JlIHplcm8tZXh0ZW5kaW5nIGFuIGludDMyLiBPbiB0
aGUgaG90IHBhdGggdGhpcyBkb2Vzbid0IG1hdHRlci4KKyAgICAgICAgLy8gV2UgY2hlY2sgdGhl
IHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2FpbnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAt
IHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKKyAgICAgICAgLy8gbnVtYmVyIHdhcyBzaWduZWQg
c2luY2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRo
ZSB0b3RhbCBhbGxvY2F0aW9uCisgICAgICAgIC8vIHNpemUgaXMgYWx3YXlzIGxlc3MgdGhhbiA0
R2IpLiBBcyBzdWNoIHplcm8gZXh0ZW5kaW5nIHdpbGwgaGF2ZSBiZWVuIGNvcnJlY3QgKGFuZCBl
eHRlbmRpbmcgdGhlIHZhbHVlCisgICAgICAgIC8vIHRvIDY0LWJpdHMgaXMgbmVjZXNzYXJ5IHNp
bmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbikuIFdlIHplcm8gZXh0ZW5k
IHJhdGhlciB0aGFuIHNpZ24KKyAgICAgICAgLy8gZXh0ZW5kaW5nIHNpbmNlIGl0IG1ha2VzIGl0
IGVhc2llciB0byByZS10YWcgdGhlIHZhbHVlIGluIHRoZSBzbG93IGNhc2UuCisgICAgICAgIHpl
cm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgfQorCisgICAgZW1pdEFycmF5UHJv
ZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CisgICAgYW5kMzIoVHJ1
c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOworCisgICAgUGF0Y2hhYmxlSnVt
cCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIEpJVEFycmF5TW9kZSBt
b2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOworICAgIHN3aXRjaCAobW9kZSkgeworICAg
IGNhc2UgSklUSW50MzI6CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMkdldEJ5VmFsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklU
RG91YmxlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlR2V0QnlWYWwoY3VycmVudElu
c3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBKSVRDb250aWd1
b3VzOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c0dldEJ5VmFsKGN1cnJlbnRJ
bnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSklUQXJyYXlT
dG9yYWdlOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlR2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYWRkU2xvd0Nh
c2UoYmFkVHlwZSk7CisgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKworICAgIExhYmVsIGRv
bmUgPSBsYWJlbCgpOworCisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgSnVt
cCByZXN1bHRPSyA9IGJyYW5jaElmTm90RW1wdHkocmVnVDApOworICAgICAgICBhYm9ydFdpdGhS
ZWFzb24oSklUR2V0QnlWYWxSZXN1bHRJc05vdEVtcHR5KTsKKyAgICAgICAgcmVzdWx0T0subGlu
ayh0aGlzKTsKKyAgICB9CisKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworCisgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJl
bCgpOworCisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlv
bkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBub3RJbmRleCwgYmFkVHlwZSwgbW9k
ZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKK30KKworSklUR2V0QnlJZEdlbmVyYXRv
ciBKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBKdW1wJiBmYXN0RG9uZUNhc2UsIEp1bXAmIHNsb3dEb25lQ2FzZSwgSnVtcExpc3QmIHNs
b3dDYXNlcykKK3sKKyAgICAvLyBiYXNlOiByZWdUMAorICAgIC8vIHByb3BlcnR5OiByZWdUMQor
ICAgIC8vIHNjcmF0Y2g6IHJlZ1QzCisKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QxKSk7CisgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDEsIHJl
Z1QzLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9y
IGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCks
IENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFp
bGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CisgICAgZ2Vu
LmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworCisgICAgZmFzdERvbmVDYXNlID0ganVtcCgpOwor
CisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgZ2VuLnNsb3dQYXRoSnVt
cCgpLmxpbmsodGhpcyk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2Zp
bGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3QsIGdlbi5zdHViSW5mbygpLCByZWdUMCwg
cHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0
aEJlZ2luLCBjYWxsKTsKKyAgICBzbG93RG9uZUNhc2UgPSBqdW1wKCk7CisKKyAgICByZXR1cm4g
Z2VuOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJv
cGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIEJ5VmFsSW5mbyog
YnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eF0uYnlWYWxJbmZvOworCisgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7
IC8vIGJhc2UgY2VsbCBjaGVjaworCisgICAgaWYgKCFpc09wZXJhbmRDb25zdGFudEludChwcm9w
ZXJ0eSkpCisgICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hl
Y2sKKyAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CisgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBiYXNlIGFycmF5IGNoZWNrCisgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hJZk5vdFN0cmlu
ZyhyZWdUMCk7CisgICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4o
bV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbEdlbmVyYXRvcikucmV0YWdnZWRDb2RlPE5v
UHRyVGFnPigpKSk7CisgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0NjQoWmVybywgcmVnVDAp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CisgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKKyAgICBmYWls
ZWQubGluayh0aGlzKTsKKyAgICBub3RTdHJpbmcubGluayh0aGlzKTsKKyAgICBub25DZWxsLmxp
bmsodGhpcyk7CisKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hl
Y2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCisKKyAgICBMYWJlbCBz
bG93UGF0aCA9IGxhYmVsKCk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJl
Z1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3Qs
IHJlZ1QwLCByZWdUMSwgYnlWYWxJbmZvKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRk
cmVzcyA9IGNhbGw7CisgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKKworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBiYXNlID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKKyAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZSwgcmVnVDApOworICAgIGJvb2wgcHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29uc3Rh
bnQgPSBpc09wZXJhbmRDb25zdGFudEludChwcm9wZXJ0eSk7CisgICAgaWYgKHByb3BlcnR5TmFt
ZUlzSW50ZWdlckNvbnN0YW50KQorICAgICAgICBtb3ZlKEltbTMyKGdldE9wZXJhbmRDb25zdGFu
dEludChwcm9wZXJ0eSkpLCByZWdUMSk7CisgICAgZWxzZQorICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CisKKyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwocmVnVDAsIGJhc2UpOworICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXg7CisgICAgaWYg
KCFwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCkgeworICAgICAgICBub3RJbmRleCA9IGVt
aXRQYXRjaGFibGVKdW1wSWZOb3RJbnQocmVnVDEpOworICAgICAgICBhZGRTbG93Q2FzZShub3RJ
bmRleCk7CisgICAgICAgIC8vIFNlZSBjb21tZW50IGluIG9wX2dldF9ieV92YWwuCisgICAgICAg
IHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7CisgICAgfQorICAgIGVtaXRBcnJheVBy
b2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOworCisgICAgUGF0Y2hh
YmxlSnVtcCBiYWRUeXBlOworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIC8vIFRPRE86
IE1heWJlIHdlIHNob3VsZCBkbyB0aGlzIGlubGluZT8KKyAgICBhZGRTbG93Q2FzZShicmFuY2hU
ZXN0MzIoTm9uWmVybywgcmVnVDIsIFRydXN0ZWRJbW0zMihDb3B5T25Xcml0ZSkpKTsKKyAgICBh
bmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7CisKKyAgICBKSVRB
cnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKKyAgICBzd2l0Y2ggKG1v
ZGUpIHsKKyAgICBjYXNlIEpJVEludDMyOgorICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQ
dXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEpJVERvdWJsZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SklUQ29udGlndW91czoKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEpJVEFycmF5U3RvcmFnZToKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIENSQVNIKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGFkZFNsb3dDYXNlKGJhZFR5cGUpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisKKyAg
ICBMYWJlbCBkb25lID0gbGFiZWwoKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgbm90
SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKK30KKworSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBp
bmRleGluZ1NoYXBlKQoreworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlOworCisgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOworCisgICAgYmFk
VHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMyKGlu
ZGV4aW5nU2hhcGUpKTsKKworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1
dHRlcmZseU9mZnNldCgpKSwgcmVnVDIpOworICAgIEp1bXAgb3V0T2ZCb3VuZHMgPSBicmFuY2gz
MihBYm92ZU9yRXF1YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9m
UHVibGljTGVuZ3RoKCkpKTsKKworICAgIExhYmVsIHN0b3JlUmVzdWx0ID0gbGFiZWwoKTsKKyAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMyk7CisgICAgc3dpdGNoIChpbmRl
eGluZ1NoYXBlKSB7CisgICAgY2FzZSBJbnQzMlNoYXBlOgorICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKKyAgICAgICAgc3RvcmU2NChyZWdUMywgQmFz
ZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIERvdWJsZVNoYXBlOiB7CisgICAgICAgIEp1bXAgbm90SW50ID0gYnJhbmNoSWZOb3RJbnQz
MihyZWdUMyk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKHJlZ1QzLCBmcFJlZ1QwKTsK
KyAgICAgICAgSnVtcCByZWFkeSA9IGp1bXAoKTsKKyAgICAgICAgbm90SW50LmxpbmsodGhpcyk7
CisgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVnVDMpOworICAgICAgICBt
b3ZlNjRUb0RvdWJsZShyZWdUMywgZnBSZWdUMCk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoRG91YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDAp
KTsKKyAgICAgICAgcmVhZHkubGluayh0aGlzKTsKKyAgICAgICAgc3RvcmVEb3VibGUoZnBSZWdU
MCwgQmFzZUluZGV4KHJlZ1QyLCByZWdUMSwgVGltZXNFaWdodCkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBDb250aWd1b3VzU2hhcGU6CisgICAgICAgIHN0b3JlNjQocmVnVDMs
IEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKKyAgICAgICAgZW1pdFdyaXRl
QmFycmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCB2YWx1ZSwgU2hvdWxkRmls
dGVyVmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBDUkFTSCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisgICAg
b3V0T2ZCb3VuZHMubGluayh0aGlzKTsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIo
QWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZl
Y3Rvckxlbmd0aCgpKSkpOworCisgICAgZW1pdEFycmF5UHJvZmlsZVN0b3JlVG9Ib2xlU3BlY2lh
bENhc2UocHJvZmlsZSk7CisKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxLCByZWdU
Myk7CisgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRP
ZlB1YmxpY0xlbmd0aCgpKSk7CisgICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhpcyk7
CisKKyAgICBkb25lLmxpbmsodGhpcyk7CisKKyAgICByZXR1cm4gc2xvd0Nhc2VzOworfQorCitK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCit7CisgICAgaW50IHZh
bHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CisKKyAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKKyAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsK
KyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJl
c3MocmVnVDIsIEFycmF5U3RvcmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisKKyAgICBK
dW1wIGVtcHR5ID0gYnJhbmNoVGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRp
bWVzRWlnaHQsIEFycmF5U3RvcmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKKworICAgIExhYmVsIHN0
b3JlUmVzdWx0KHRoaXMpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qz
KTsKKyAgICBzdG9yZTY0KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0
LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSk7CisgICAgZW1pdFdyaXRlQmFycmllcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OworICAgIEp1bXAgZW5kID0ganVtcCgpOworCisgICAgZW1wdHkubGluayh0aGlzKTsKKyAgICBl
bWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKKyAgICBhZGQz
MihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MocmVnVDIsIEFycmF5U3RvcmFnZTo6bnVtVmFsdWVz
SW5WZWN0b3JPZmZzZXQoKSkpOworICAgIGJyYW5jaDMyKEJlbG93LCByZWdUMSwgQWRkcmVzcyhy
ZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpLmxpbmtUbyhzdG9yZVJlc3VsdCwg
dGhpcyk7CisKKyAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QxKTsKKyAgICBzdG9yZTMy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSk7Cisg
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7CisgICAganVtcCgpLmxpbmtUbyhzdG9y
ZVJlc3VsdCwgdGhpcyk7CisKKyAgICBlbmQubGluayh0aGlzKTsKKworICAgIHJldHVybiBzbG93
Q2FzZXM7Cit9CisKK0pJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1w
TGlzdCYgZG9uZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQoreworICAgIC8vIGJhc2U6IHJl
Z1QwCisgICAgLy8gcHJvcGVydHk6IHJlZ1QxCisgICAgLy8gc2NyYXRjaDogcmVnVDIKKworICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFs
dWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKKyAgICBlbWl0QnlWYWxJZGVudGlmaWVyQ2hl
Y2soYnlWYWxJbmZvLCByZWdUMSwgcmVnVDEsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKKwor
ICAgIC8vIFdyaXRlIGJhcnJpZXIgYnJlYWtzIHRoZSByZWdpc3RlcnMuIFNvIGFmdGVyIGlzc3Vp
bmcgdGhlIHdyaXRlIGJhcnJpZXIsCisgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMuCisgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CisKKyAg
ICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmln
aW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBtX2NvZGVCbG9jay0+ZWNtYU1v
ZGUoKSwgcHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGVt
aXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGRvbmVD
YXNlcy5hcHBlbmQoanVtcCgpKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OworICAgIGdlbi5zbG93UGF0aEp1bXAoKS5saW5rKHRoaXMpOworCisgICAgQ2FsbCBjYWxsID0g
Y2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVn
VDEsIHJlZ1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhD
YWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsK
KworICAgIHJldHVybiBnZW47Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KyAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZh
bEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKKworICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CisgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOworCisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QyKTsKKyAg
ICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVj
dGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXpl
IDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJ
bmZvKTsKKworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CisgICAgbV9i
eVZhbEluc3RydWN0aW9uSW5kZXgrKzsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwor
ICAgIGludDMyX3Qgb3B0aW9ucyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
LCByZWdUMSk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeUlkLCByZWdU
MCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCkuaW1wbCgpLCBvcHRpb25zLCByZWdUMSk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3B1dF9z
ZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1Qw
KTsKKyAgICBpbnQzMl90IG9wdGlvbnMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZCwgcmVnVDEpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwg
cmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpLmltcGwoKSwgb3B0aW9ucywgcmVnVDEpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX3NldHRlcl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
eworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgcmVnVDApOworICAgIGludDMyX3QgYXR0cmlidXRlID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQsIHJlZ1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpLmltcGwoKSwgYXR0cmlidXRlLCByZWdU
MSwgcmVnVDIpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDEpOwor
ICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVy
YW5kLCByZWdUMik7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwg
cmVnVDAsIHJlZ1QxLCBhdHRyaWJ1dGVzLCByZWdUMik7Cit9CisKK3ZvaWQgSklUOjplbWl0X29w
X3B1dF9zZXR0ZXJfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7Cisg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kLCByZWdUMSk7CisgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsIHJlZ1QyKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMCwgcmVnVDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsK
K30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWxldGVCeUlkSlNSZXN1bHQsIGRzdCwgcmVnVDAsIG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKHByb3BlcnR5KS5pbXBsKCkpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCByZWdUMCk7
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0eSwgcmVnVDEpOworICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdCwgZHN0LCByZWdUMCwgcmVnVDEp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOworICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKworICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOworCisgICAgSklUR2V0QnlJZEdlbmVy
YXRvciBnZW4oCisgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZz
ZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVu
YXZhaWxhYmxlUmVnaXN0ZXJzKCksCisgICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdz
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpUcnlHZXQpOworICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOworICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CisKKyAgICBlbWl0VmFsdWVQcm9m
aWxpbmdTaXRlKCk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sK
KyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKSk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0
QnlJZEluZGV4KytdOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwg
cmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cit9CisKK3ZvaWQg
SklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3sKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgaW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisKKyAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OkdldERpcmVjdCk7CisgICAgZ2VuLmdlbmVy
YXRlRmFzdFBhdGgoKnRoaXMpOworICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CisgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOworfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CisKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAm
KG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
KTsKKworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlk
SW5kZXgrK107CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkRGlyZWN0
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQtPmltcGwo
KSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwor
fQorCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3sKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgaW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworCisgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisKKyAgICBpZiAoKmlkZW50ID09IG1fdm0tPnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCisgICAgICAgIGVt
aXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4V2l0aENlbGwocmVnVDAsIHJlZ1Qx
LCBtX2J5dGVjb2RlT2Zmc2V0KTsKKworICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJ
bmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lz
dGVycygpLAorICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CisgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKKyAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOworCisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAg
IGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZF93aXRoX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
CisgICAgaW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAg
ICBpbnQgdGhpc1ZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50
SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSk7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGJhc2VWUmVnLCByZWdUMCk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlzVlJlZywg
cmVnVDEpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcpOworCisg
ICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ss
IENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9m
ZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKKyAgICAgICAg
aWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgQWNjZXNzVHlwZTo6R2V0V2l0aFRoaXMpOworICAgIGdlbi5nZW5l
cmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkp
OworICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKKworICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZSZWcpOwor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7Cisg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIGludCByZXN1bHRWUmVnID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCkpOworCisgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOworCisgICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsK
KworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cit9CisK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAgIGludCByZXN1bHRWUmVnID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZCkpOworCisgICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yJiBnZW4gPSBtX2dl
dEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsrXTsKKworICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4gPSBsYWJlbCgpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldp
dGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBn
ZW4uc3R1YkluZm8oKSwgcmVnVDAsIHJlZ1QxLCBpZGVudC0+aW1wbCgpKTsKKworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAg
IGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IHZhbHVlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgdW5zaWdu
ZWQgZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJ
ZElzRGlyZWN0OworCisgICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRo
ZSBTdHJ1Y3R1cmUsIGFuZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIs
CisgICAgLy8gdG8ganVzdCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50
byByZWdpc3RlcnMgJ2hvdFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCisgICAgLy8g
c3VjaCB0aGF0IHRoZSBTdHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBk
aXN0YW5jZSBmcm9tIHRoaXMuCisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlVlJl
ZywgcmVnVDAsIHZhbHVlVlJlZywgcmVnVDEpOworCisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CisKKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MSksIHJlZ1QyLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUoKSwKKyAgICAgICAgZGlyZWN0ID8gRGly
ZWN0IDogTm90RGlyZWN0KTsKKworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAg
ICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworCisgICAgZW1pdFdyaXRlQmFycmll
cihiYXNlVlJlZywgdmFsdWVWUmVnLCBTaG91bGRGaWx0ZXJCYXNlKTsKKworICAgIG1fcHV0QnlJ
ZHMuYXBwZW5kKGdlbik7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKworICAgIExhYmVsIGNvbGRQYXRoQmVnaW4odGhpcyk7
CisKKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX3B1dEJ5SWRzW21fcHV0QnlJZElu
ZGV4KytdOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5j
dGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKKwor
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2luX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit7CisgICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKKworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2Vs
bChyZWdUMCwgYmFzZVZSZWcpOworCisgICAgSklUSW5CeUlkR2VuZXJhdG9yIGdlbigKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5k
ZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKKyAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVl
UmVncyhyZWdUMCkpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBhZGRT
bG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOworICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsK
KworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pbl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CisKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKworICAgIEpJ
VEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CisKKyAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5m
bygpLCByZWdUMCwgaWRlbnQtPmltcGwoKSk7CisKKyAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOworfQorCit2b2lkIEpJVDo6ZW1pdFZhckluamVjdGlvbkNo
ZWNrKGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpCit7CisgICAgaWYgKCFuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcykKKyAgICAgICAgcmV0dXJuOworICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgo
RXF1YWwsIEFic29sdXRlQWRkcmVzcyhtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPnZhcklu
amVjdGlvbldhdGNocG9pbnQoKS0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0lu
dmFsaWRhdGVkKSkpOworfQorCit2b2lkIEpJVDo6ZW1pdFJlc29sdmVDbG9zdXJlKGludCBkc3Qs
IGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywgdW5zaWduZWQgZGVwdGgp
Cit7CisgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKTsK
KyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRlcHRoOyArK2kpCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNjb3BlID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IHN0YXRpY19jYXN0
PFJlc29sdmVUeXBlPihjb3BpZWRJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pWzRdLnUu
b3BlcmFuZCk7CisgICAgdW5zaWduZWQgZGVwdGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5v
cGVyYW5kOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5
cGUpIHsKKyAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgeworICAgICAgICBjYXNlIEdsb2Jh
bFByb3BlcnR5OgorICAgICAgICBjYXNlIEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrczoKKyAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFyOgorICAg
ICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAg
ICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZv
ckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOworICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY29uc3RhbnRTY29wZSk7CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOworICAgICAgICAgICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgorICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgZW1pdFJlc29sdmVDbG9zdXJlKGRzdCwgc2Nv
cGUsIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSwgZGVwdGgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTW9kdWxlVmFyOgorICAgICAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGN1cnJlbnRJbnN0cnVjdGlvbls2XS51LmpzQ2VsbC5nZXQoKSksIHJlZ1Qw
KTsKKyAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIER5bmFtaWM6CisgICAgICAgICAgICBhZGRTbG93Q2FzZShq
dW1wKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFy
OgorICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBVbnJlc29s
dmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7CisgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6CisgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgIEp1bXBMaXN0
IHNraXBUb0VuZDsKKyAgICAgICAgbG9hZDMyKCZjdXJyZW50SW5zdHJ1Y3Rpb25bNF0sIHJlZ1Qw
KTsKKworICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKKyAgICAgICAgZW1pdENvZGUo
R2xvYmFsUHJvcGVydHkpOworICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAg
ICAgIG5vdEdsb2JhbFByb3BlcnR5LmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAg
ICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcyk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhcik7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhci5s
aW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpOworICAgICAgICBza2lwVG9FbmQuYXBw
ZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
cy5saW5rKHRoaXMpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisgICAgICAgIHNr
aXBUb0VuZC5saW5rKHRoaXMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0
OgorICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKwordm9pZCBKSVQ6OmVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKGludCBzY29wZSwgU3Ry
dWN0dXJlKiogc3RydWN0dXJlU2xvdCkKK3sKKyAgICBsb2FkUHRyKHN0cnVjdHVyZVNsb3QsIHJl
Z1QxKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMSkpOworICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1QxLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7CisgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIHJlZ1QxKSk7Cit9CisKK3ZvaWQgSklUOjplbWl0R2V0VmFyRnJvbVBv
aW50ZXIoSlNWYWx1ZSogb3BlcmFuZCwgR1BSUmVnIHJlZykKK3sKKyAgICBsb2FkUHRyKG9wZXJh
bmQsIHJlZyk7Cit9CisKK3ZvaWQgSklUOjplbWl0R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihK
U1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHJlZykKK3sKKyAgICBsb2FkUHRyKG9wZXJhbmQsIHJl
Zyk7CisgICAgbG9hZFB0cihyZWcsIHJlZyk7Cit9CisKK3ZvaWQgSklUOjplbWl0R2V0Q2xvc3Vy
ZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQoreworICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTTGV4
aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihS
ZWdpc3RlcikpLCByZWdUMCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3Bl
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHNjb3BlID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IEdldFB1
dEluZm8oY29waWVkSW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKVs0XS51Lm9wZXJhbmQp
LnJlc29sdmVUeXBlKCk7CisgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5zbG90KCk7CisgICAgdWludHB0cl90KiBvcGVyYW5k
U2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJmN1cnJlbnRJbnN0cnVjdGlvbls2
XS51LnBvaW50ZXIpOworCisgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgeworICAgICAgICBzd2l0Y2gg
KHJlc29sdmVUeXBlKSB7CisgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CisgICAgICAgIGNh
c2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CisgICAgICAgICAgICBl
bWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhzY29wZSwgc3RydWN0dXJlU2xvdCk7IC8vIFN0cnVj
dHVyZSBjaGVjayBjb3ZlcnMgdmFyIGluamVjdGlvbiBzaW5jZSB3ZSBkb24ndCBjYWNoZSBzdHJ1
Y3R1cmVzIGZvciBhbnl0aGluZyBidXQgdGhlIEdsb2JhbE9iamVjdC4gQWRkaXRpb25hbGx5LCBy
ZXNvbHZlX3Njb3BlIGhhbmRsZXMgY2hlY2tpbmcgZm9yIHRoZSB2YXIgaW5qZWN0aW9uLgorICAg
ICAgICAgICAgR1BSUmVnIGJhc2UgPSByZWdUMDsKKyAgICAgICAgICAgIEdQUlJlZyByZXN1bHQg
PSByZWdUMDsKKyAgICAgICAgICAgIEdQUlJlZyBvZmZzZXQgPSByZWdUMTsKKyAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7CisKKyAgICAgICAgICAgIGppdEFzc2VydChzY29wZWRM
YW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1bXAgeworICAgICAgICAgICAgICAgIHJldHVy
biBicmFuY2hQdHIoRXF1YWwsIGJhc2UsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSk7CisgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgIGxvYWQzMihvcGVy
YW5kU2xvdCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Cisg
ICAgICAgICAgICAgICAgSnVtcCBpc091dE9mTGluZSA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JF
cXVhbCwgb2Zmc2V0LCBUcnVzdGVkSW1tMzIoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKTsKKyAgICAg
ICAgICAgICAgICBhYm9ydFdpdGhSZWFzb24oSklUT2Zmc2V0SXNOb3RPdXRPZkxpbmUpOworICAg
ICAgICAgICAgICAgIGlzT3V0T2ZMaW5lLmxpbmsodGhpcyk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgp
KSwgc2NyYXRjaCk7CisgICAgICAgICAgICBuZWczMihvZmZzZXQpOworICAgICAgICAgICAgc2ln
bkV4dGVuZDMyVG9QdHIob2Zmc2V0LCBvZmZzZXQpOworICAgICAgICAgICAgbG9hZDY0KEJhc2VJ
bmRleChzY3JhdGNoLCBvZmZzZXQsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAt
IDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdsb2JhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICBjYXNlIEdsb2JhbExleGljYWxW
YXI6CisgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CisgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MocmVzb2x2ZVR5cGUpKTsKKyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5k
KQorICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKGJpdHdpc2Vf
Y2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tUG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHJlZ1QwKTsKKyAgICAgICAgICAgIGlmIChyZXNvbHZlVHlwZSA9
PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKSAvLyBURFogY2hlY2suCisgICAgICAgICAgICAgICAgYWRkU2xv
d0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKKyAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOworICAgICAgICAgICAgZW1pdEdldENsb3N1cmVWYXIo
c2NvcGUsICpvcGVyYW5kU2xvdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBE
eW5hbWljOgorICAgICAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKKyAgICAgICAgY2FzZSBNb2R1bGVW
YXI6CisgICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgICAgICBjYXNlIFVucmVz
b2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHN3aXRjaCAo
cmVzb2x2ZVR5cGUpIHsKKyAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKKyAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAgSnVtcExp
c3Qgc2tpcFRvRW5kOworICAgICAgICBsb2FkMzIoJmN1cnJlbnRJbnN0cnVjdGlvbls0XSwgcmVn
VDApOworICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMpLCBy
ZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAorCisgICAgICAgIEp1bXAgaXNHbG9i
YWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFBy
b3BlcnR5KSk7CisgICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
cyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxpbmso
dGhpcyk7CisgICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7CisgICAgICAg
IHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNh
bFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGlj
YWxWYXIpKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7CisgICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZh
ci5saW5rKHRoaXMpOworCisgICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJ
bmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKKyAgICAgICAgZW1pdENvZGUoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOworICAgICAgICBza2lw
VG9FbmQuYXBwZW5kKGp1bXAoKSk7CisgICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFy
SW5qZWN0aW9ucy5saW5rKHRoaXMpOworCisgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7CisK
KyAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OworCisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
Y2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworfQorCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpT
VmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQoreworICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUo
c2V0KTsKKyAgICBzdG9yZVB0cihyZWdUMCwgb3BlcmFuZCk7Cit9Cit2b2lkIEpJVDo6ZW1pdFB1
dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2
YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0V2F0Y2hwb2ludFNldCkKK3sKKyAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgbG9hZFB0cihpbmRpcmVjdFdh
dGNocG9pbnRTZXQsIHJlZ1QxKTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEpOworICAgIGxv
YWRQdHIoYWRkcmVzc09mT3BlcmFuZCwgcmVnVDEpOworICAgIHN0b3JlUHRyKHJlZ1QwLCByZWdU
MSk7Cit9CisKK3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKK3sKKyAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cihzY29wZSwgcmVnVDApOworICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOworICAgIHN0b3JlUHRy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJp
YWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQorewor
ICAgIGludCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBHZXRQdXRJbmZv
IGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGNvcGllZEluc3RydWN0aW9uKGN1cnJlbnRJbnN0cnVj
dGlvbilbNF0udS5vcGVyYW5kKTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1
dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gY3Vy
cmVudEluc3RydWN0aW9uWzVdLnUuc3RydWN0dXJlLnNsb3QoKTsKKyAgICB1aW50cHRyX3QqIG9w
ZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmY3VycmVudEluc3RydWN0
aW9uWzZdLnUucG9pbnRlcik7CisKKyAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlw
ZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CisgICAgICAgIHN3
aXRjaCAocmVzb2x2ZVR5cGUpIHsKKyAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKKyAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKKyAgICAgICAg
ICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3BlLCBzdHJ1Y3R1cmVTbG90KTsgLy8g
U3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9uIHNpbmNlIHdlIGRvbid0IGNhY2hl
IHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xvYmFsT2JqZWN0LiBBZGRpdGlvbmFs
bHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBmb3IgdGhlIHZhciBpbmplY3Rpb24u
CisgICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CisKKyAg
ICAgICAgICAgIGppdEFzc2VydChzY29wZWRMYW1iZGE8SnVtcCh2b2lkKT4oWyZdICgpIC0+IEp1
bXAgeworICAgICAgICAgICAgICAgIHJldHVybiBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgfSkp
OworCisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICAgICAgICAgIGxvYWRQdHIob3BlcmFuZFNsb3QsIHJl
Z1QxKTsKKyAgICAgICAgICAgIG5lZ1B0cihyZWdUMSk7CisgICAgICAgICAgICBzdG9yZVB0cihy
ZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5l
T2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CisgICAgICAgICAgICBlbWl0
V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
R2xvYmFsVmFyOgorICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
CisgICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKKyAgICAgICAgY2FzZSBHbG9iYWxMZXhp
Y2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICAgICAgSlNTY29wZSogY29u
c3RhbnRTY29wZSA9IEpTU2NvcGU6OmNvbnN0YW50U2NvcGVGb3JDb2RlQmxvY2socmVzb2x2ZVR5
cGUsIG1fY29kZUJsb2NrKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnN0YW50U2Nv
cGUpOworICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9u
Q2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBpZiAoIWlzSW5pdGlhbGl6YXRpb24o
Z2V0UHV0SW5mby5pbml0aWFsaXphdGlvbk1vZGUoKSkgJiYgKHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXIgfHwgcmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MpKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyBhIFREWiBj
aGVjayBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgYWx3YXlzIHByb3ZlIHdlIG5lZWQgdG8gZW1pdCBU
RFogY2hlY2tzIHN0YXRpY2FsbHkuCisgICAgICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpCisgICAgICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5kaXJlY3RQb2lu
dGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Qb2ludGVy
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOworICAgICAgICAg
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQorICAgICAgICAgICAgICAg
IGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9w
ZXJhbmRTbG90KSwgdmFsdWUsIGJpdHdpc2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZjdXJyZW50
SW5zdHJ1Y3Rpb25bNV0pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBlbWl0
UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2
YWx1ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAg
ICBlbWl0V3JpdGVCYXJyaWVyKGNvbnN0YW50U2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExvY2FsQ2xv
c3VyZVZhcjoKKyAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgorICAgICAgICBjYXNlIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgorICAgICAgICAgICAgZW1pdFZhckluamVjdGlvbkNo
ZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7CisgICAgICAgICAgICBl
bWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgY3VycmVudEluc3Ry
dWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVy
KHNjb3BlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTW9kdWxlVmFyOgorICAgICAgICBjYXNlIER5bmFtaWM6CisgICAgICAgICAg
ICBhZGRTbG93Q2FzZShqdW1wKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5OgorICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9OworCisgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgeworICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgorICAgIGNhc2Ug
VW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogeworICAgICAgICBKdW1w
TGlzdCBza2lwVG9FbmQ7CisgICAgICAgIGxvYWQzMigmY3VycmVudEluc3RydWN0aW9uWzRdLCBy
ZWdUMCk7CisgICAgICAgIGFuZDMyKFRydXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyks
IHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRvIFQwCisKKyAgICAgICAgSnVtcCBpc0ds
b2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFs
UHJvcGVydHkpKTsKKyAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVy
dHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7CisgICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGlu
ayh0aGlzKTsKKyAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKKyAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdp
dGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhp
Y2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4
aWNhbFZhcikpOworICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKKyAg
ICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOworICAgICAgICBub3RHbG9iYWxMZXhpY2Fs
VmFyLmxpbmsodGhpcyk7CisKKyAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZh
ckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9i
YWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpOworICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgdHJ1ZSk7CisgICAgICAgIHNr
aXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKKyAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zLmxpbmsodGhpcyk7CisKKyAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsK
KworICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Nj
b3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKKworICAg
IEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oY29waWVkSW5zdHJ1Y3Rpb24oY3Vy
cmVudEluc3RydWN0aW9uKVs0XS51Lm9wZXJhbmQpOworICAgIFJlc29sdmVUeXBlIHJlc29sdmVU
eXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGlmIChyZXNvbHZlVHlwZSA9PSBN
b2R1bGVWYXIpIHsKKyAgICAgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9w
cm9wZXJ0eV93cml0ZV9lcnJvcik7CisgICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CisgICAg
fSBlbHNlCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgY3VycmVu
dEluc3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRz
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRz
LCByZWdUMCk7CisgICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3Rv
cmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJl
Z1QwKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGFyZ3VtZW50cyA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGluZGV4ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMs
IHJlZ1QwKTsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CisgICAg
c3RvcmU2NChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zm
c2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pKSk7CisKKyAgICBl
bWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIodW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZh
bHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCit7CisgICAgSnVtcCB2YWx1ZU5vdENlbGw7Cisg
ICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJC
YXNlQW5kVmFsdWUpIHsKKyAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOworICAgICAgICB2YWx1ZU5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAg
IH0KKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3duZXIsIHJlZ1QwKTsKKyAgICBKdW1w
IG93bmVyTm90Q2VsbDsKKyAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUg
fHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQorICAgICAgICBvd25lck5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOworCisgICAgSnVtcCBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVu
ID0gYmFycmllckJyYW5jaCgqdm0oKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQYXRoLCByZWdUMCk7CisgICAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbi5saW5rKHRoaXMpOworCisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZUFuZFZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZSkKKyAgICAgICAgb3duZXJO
b3RDZWxsLmxpbmsodGhpcyk7CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUgfHwg
bW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCisgICAgICAgIHZhbHVlTm90Q2VsbC5s
aW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVy
LCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBtb2RlKQoreworICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBKdW1wIHZhbHVlTm90Q2VsbDsKKyAg
ICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSkKKyAgICAgICAgdmFsdWVOb3RDZWxsID0g
YnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKworICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwor
CisgICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFsdWUpCisgICAgICAgIHZhbHVlTm90Q2Vs
bC5saW5rKHRoaXMpOworfQorCit2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShPcGNv
ZGVJRCBvcGNvZGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZvKiBpbmZv
KQoreworICAgIGludCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAg
aW50IGFyZ3VtZW50cyA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICBpbnQgZmlyc3RG
cmVlUmVnaXN0ZXIgPSBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0VmFy
QXJnT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25bNl0udS5vcGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QxKTsKKyAgICBaX0pJVE9wZXJhdGlvbl9FSlpaIHNp
emVPcGVyYXRpb247CisgICAgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpCisgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3
YXJkQXJndW1lbnRzOworICAgIGVsc2UKKyAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlv
blNpemVGcmFtZUZvclZhcmFyZ3M7CisgICAgY2FsbE9wZXJhdGlvbihzaXplT3BlcmF0aW9uLCBy
ZWdUMSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7CisgICAgbW92ZShU
cnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOworICAgIGVtaXRTZXRWYXJh
cmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKKyAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNSAqIHNpemVvZih2b2lk
KikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudHMsIHJlZ1QyKTsKKyAgICBGX0pJVE9wZXJhdGlvbl9FRkpaWiBzZXR1
cE9wZXJhdGlvbjsKKyAgICBpZiAob3Bjb2RlID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cykKKyAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1
bWVudHNGcmFtZTsKKyAgICBlbHNlCisgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9u
U2V0dXBWYXJhcmdzRnJhbWU7CisgICAgY2FsbE9wZXJhdGlvbihzZXR1cE9wZXJhdGlvbiwgcmVn
VDEsIHJlZ1QyLCBmaXJzdFZhckFyZ09mZnNldCwgcmVnVDApOworICAgIG1vdmUocmV0dXJuVmFs
dWVHUFIsIHJlZ1QxKTsKKworICAgIC8vIFByb2ZpbGUgdGhlIGFyZ3VtZW50IGNvdW50LgorICAg
IGxvYWQzMihBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc3Rh
dGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMik7
CisgICAgbG9hZDMyKGluZm8tPmFkZHJlc3NPZk1heE51bUFyZ3VtZW50cygpLCByZWdUMCk7Cisg
ICAgSnVtcCBub3RCaWdnZXN0ID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCByZWdUMik7CisgICAg
c3RvcmUzMihyZWdUMiwgaW5mby0+YWRkcmVzc09mTWF4TnVtQXJndW1lbnRzKCkpOworICAgIG5v
dEJpZ2dlc3QubGluayh0aGlzKTsKKworICAgIC8vIEluaXRpYWxpemUgJ3RoaXMnLgorICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIodGhpc1ZhbHVlLCByZWdUMCk7CisgICAgc3RvcmU2NChyZWdU
MCwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkpKTsKKworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCit7CisgICAgYWRkUHRyKFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90Pihz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsK
KyAgICBzdG9yZVB0cihjYWxsRnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1l
OjpjYWxsZXJGcmFtZU9mZnNldCgpKSk7CisKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNr
UG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZy
YW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOworCisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DYWxsRXZhbCwgcmVn
VDEpOworCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOworCisgICAgc2Ft
cGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKKworICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3Ry
dWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3sKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOworCisgICAgQ2FsbExpbmtJbmZvKiBpbmZv
ID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOworICAgIGluZm8tPnNldFVwQ2FsbChD
YWxsTGlua0luZm86OkNhbGwsIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsK
KworICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisK
KyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVy
KSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisKKyAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgc2l6ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSksIHJlZ1QwKTsKKyAgICBlbWl0RHVtYlZpcnR1YWxDYWxsKCp2bSgpLCBp
bmZvKTsKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2Nv
ZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOworCisgICAg
c2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKKworICAgIGVtaXRQdXRDYWxsUmVzdWx0KGlu
c3RydWN0aW9uKTsKK30KKwordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2Rl
SUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgp
Cit7CisgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIC8q
IENhbGxlciBhbHdheXM6CisgICAgICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBj
YWxsZWUgY2FsbEZyYW1lLgorICAgICAgICAtIEluaXRpYWxpemVzIEFyZ3VtZW50Q291bnQ7IENh
bGxlckZyYW1lOyBDYWxsZWUuCisKKyAgICAgICBGb3IgYSBKUyBjYWxsOgorICAgICAgICAtIENh
bGxlZSBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJsb2NrLgorICAgICAgICAtIENhbGxlZSBy
ZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBiZWZvcmUgcmV0dXJuLgorCisgICAgICAgRm9yIGEg
bm9uLUpTIGNhbGw6CisgICAgICAgIC0gQ2FsbGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2Rl
QmxvY2suCisgICAgICAgIC0gQ2FsbGVyIHJlc3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVy
IHJldHVybi4KKyAgICAqLworICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2Fs
bCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpLCBjYWxsX2FuZF9jb25zdHJ1Y3Rfb3Bj
b2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKKyAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVO
R1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgY2FsbF9hbmRf
Y2FsbF92YXJhcmdzX29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CisgICAgQ09NUElMRV9B
U1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0cnVj
dF92YXJhcmdzKSwgY2FsbF9hbmRfY29uc3RydWN0X3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3Nh
bWVfbGVuZ3RoKTsKKyAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09
IE9QQ09ERV9MRU5HVEgob3BfdGFpbF9jYWxsKSwgY2FsbF9hbmRfdGFpbF9jYWxsX29wY29kZXNf
bXVzdF9iZV9zYW1lX2xlbmd0aCk7CisgICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChv
cF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX3RhaWxfY2FsbF92YXJhcmdzKSwgY2FsbF9hbmRf
dGFpbF9jYWxsX3ZhcmFyZ3Nfb3Bjb2Rlc19tdXN0X2JlX3NhbWVfbGVuZ3RoKTsKKyAgICBDT01Q
SUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKSwgY2FsbF9hbmRfdGFpbF9jYWxsX2ZvcndhcmRfYXJn
dW1lbnRzX29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7CisKKyAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBudWxscHRyOworICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCisgICAg
ICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7CisgICAgaWYgKG9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NG
cmFtZShvcGNvZGVJRCwgaW5zdHJ1Y3Rpb24sIGluZm8pOworICAgIGVsc2UgeworICAgICAgICBp
bnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisKKyAgICAgICAgaWYgKG9w
Y29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CisgICAgICAgICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1
bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwKTsKKyAgICAgICAgICAgIEp1bXAgZG9u
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7CisgICAgICAgICAgICBsb2FkMzIoQWRkcmVzcyhy
ZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDApOworICAgICAgICAgICAg
c3RvcmUzMihyZWdUMCwgaW5zdHJ1Y3Rpb25bT1BDT0RFX0xFTkdUSChvcF9jYWxsKSAtIDJdLnUu
YXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZUlEKCkpOworICAgICAgICAg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgYWRkUHRyKFRydXN0ZWRJ
bW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
ICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmdDb3VudCksIEFkZHJlc3Moc3RhY2tQb2ludGVy
UmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+
KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFu
ZFBDKSkpOworICAgIH0gLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCisKKyAgICB1aW50MzJf
dCBieXRlY29kZU9mZnNldCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChpbnN0cnVjdGlv
bik7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRlY29kZU9m
ZnNldCkuYml0cygpOworICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFk
ZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBz
dGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7CisKKyAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xkcyBjYWxs
ZWUuCisgICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2Fs
bEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSAt
IHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOworCisgICAgaWYgKG9wY29kZUlEID09IG9wX2Nh
bGxfZXZhbCkgeworICAgICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtlZEZ1bmN0
aW9uQ2hlY2s7CisgICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVh
bCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1QdHIobnVs
bHB0cikpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKKworICAgIEFTU0VSVChtX2NhbGxD
b21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKKyAgICBpbmZvLT5z
ZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIENvZGVPcmlnaW4o
bV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKKyAgICBtX2NhbGxDb21waWxhdGlvbkluZm8uYXBw
ZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7CisgICAgbV9jYWxsQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNo
ZWNrOworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbExp
bmtJbmZvID0gaW5mbzsKKworICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwpIHsKKyAg
ICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7CisgICAgICAgIHNodWZmbGVE
YXRhLm51bVBhc3NlZEFyZ3MgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgICAgIHNo
dWZmbGVEYXRhLnRhZ1R5cGVOdW1iZXIgPSBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXI7
CisgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9CisgICAgICAgICAgICBpbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2YoUmVnaXN0
ZXIpOworICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsgKytpKSB7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KKyAgICAgICAg
ICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCisgICAgICAgICAgICAg
ICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpIC0gaW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kLAorICAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOworICAgICAgICB9Cisg
ICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9CisgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5Ojpp
bkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKKyAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxs
ZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKKyAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVm
ZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0aGlzLCBz
aHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0
aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkVGFpbENh
bGwoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMpIHsKKyAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICBwcmVw
YXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkVGFpbENhbGwoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0lu
Zm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgpOworCisgICAgYWRkUHRyKFRy
dXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJl
Z2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
Y2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKworICAgIHNhbXBsZUNvZGVCbG9jayhtX2Nv
ZGVCbG9jayk7CisKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7Cit9CisKK3Zv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit7CisgICAgaWYgKG9wY29kZUlEID09IG9wX2Nh
bGxfZXZhbCkgeworICAgICAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShpbnN0cnVjdGlvbiwg
aXRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOworCisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMpCisgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKworICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNh
bGxMaW5rSW5mbyksIHJlZ1QyKTsKKworICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlu
a0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0KKyAgICAgICAgZW1pdE5ha2VkQ2FsbCht
X3ZtLT5nZXRDVElTdHViKGxpbmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0
clRhZz4oKSk7CisKKyAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKSB7CisgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRE
aWRSZXR1cm5Gcm9tVGFpbENhbGwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKKworICAgIHNhbXBsZUNvZGVCbG9j
ayhtX2NvZGVCbG9jayk7CisKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7Cit9
CisKK3ZvaWQgSklUOjplbWl0X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBjb21waWxlT3BDYWxsKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wQ2FsbChvcF90
YWlsX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NhbGxf
dmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVP
cENhbGwob3BfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbF92YXJhcmdzKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wQ2FsbChvcF90YWls
X2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBjb21waWxlT3BDYWxsKG9wX3Rh
aWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3RfdmFyYXJncyhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVPcENhbGwob3Bf
Y29uc3RydWN0X3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wQ2FsbChvcF9jb25zdHJ1Y3QsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2Uob3BfY2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Cit7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX3RhaWxfY2FsbCwgY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KTsKK30KKwordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsX3ZhcmFyZ3Ms
IGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9
CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQoreworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jb25zdHJ1Y3RfdmFyYXJncywgY3Vy
cmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlKG9wX2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDM5ODFkMDM4ODE4OTcxM2Y2YjViNTVkZTZhNTUwYmUwMDI0ZTAyNGEuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRBcml0aG1ldGljLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMTMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLSNpbmNsdWRlICJKSVQuaCIKLQot
I2luY2x1ZGUgIkFyaXRoUHJvZmlsZS5oIgotI2luY2x1ZGUgIkNvZGVCbG9jay5oIgotI2luY2x1
ZGUgIkpJVEFkZEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVEJpdEFuZEdlbmVyYXRvci5oIgot
I2luY2x1ZGUgIkpJVEJpdE9yR2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklUQml0WG9yR2VuZXJh
dG9yLmgiCi0jaW5jbHVkZSAiSklURGl2R2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklUSW5saW5l
cy5oIgotI2luY2x1ZGUgIkpJVExlZnRTaGlmdEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVE1h
dGhJQy5oIgotI2luY2x1ZGUgIkpJVE11bEdlbmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVE5lZ0dl
bmVyYXRvci5oIgotI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJKSVRSaWdo
dFNoaWZ0R2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAiSklUU3ViR2VuZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnBy
ZXRlci5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgotI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotdm9pZCBKSVQ6OmVtaXRfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwotCi0gICAgZW1pdF9jb21wYXJlQW5kSnVtcChvcF9qbGVzcywgb3AxLCBvcDIsIHRhcmdldCwg
TGVzc1RoYW4pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbGVzc2VxKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLQotICAgIGVtaXRfY29tcGFyZUFuZEp1bXAob3Bfamxlc3NlcSwgb3AxLCBvcDIsIHRhcmdl
dCwgTGVzc1RoYW5PckVxdWFsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfamdyZWF0ZXIoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgb3AxID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotCi0gICAgZW1pdF9jb21wYXJlQW5kSnVtcChvcF9qZ3JlYXRlciwgb3Ax
LCBvcDIsIHRhcmdldCwgR3JlYXRlclRoYW4pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qZ3Jl
YXRlcmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IG9wMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFyZUFuZEp1bXAob3Bfamdy
ZWF0ZXJlcSwgb3AxLCBvcDIsIHRhcmdldCwgR3JlYXRlclRoYW5PckVxdWFsKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3Bfam5sZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXAob3Bfam5sZXNzLCBvcDEsIG9wMiwgdGFyZ2V0LCBHcmVhdGVyVGhhbk9yRXF1YWwp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmxlc3NlcShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAg
ICBlbWl0X2NvbXBhcmVBbmRKdW1wKG9wX2pubGVzc2VxLCBvcDEsIG9wMiwgdGFyZ2V0LCBHcmVh
dGVyVGhhbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2puZ3JlYXRlcihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7Ci0KLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wKG9wX2puZ3JlYXRlciwgb3AxLCBvcDIsIHRh
cmdldCwgTGVzc1RoYW5PckVxdWFsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam5ncmVhdGVy
ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgb3AxID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgZW1pdF9jb21wYXJlQW5kSnVtcChvcF9qbmdyZWF0
ZXJlcSwgb3AxLCBvcDIsIHRhcmdldCwgTGVzc1RoYW4pOwotfQotCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3Bfamxlc3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBpbnQgb3AxID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotCi0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cob3AxLCBvcDIsIHRhcmdl
dCwgRG91YmxlTGVzc1RoYW4sIG9wZXJhdGlvbkNvbXBhcmVMZXNzLCBmYWxzZSwgaXRlcik7Ci19
Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbGVzc2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
aW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFyZUFuZEp1
bXBTbG93KG9wMSwgb3AyLCB0YXJnZXQsIERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgb3BlcmF0aW9u
Q29tcGFyZUxlc3NFcSwgZmFsc2UsIGl0ZXIpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amdyZWF0ZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotCi0gICAgZW1pdF9jb21wYXJlQW5kSnVtcFNsb3cob3AxLCBvcDIsIHRhcmdldCwg
RG91YmxlR3JlYXRlclRoYW4sIG9wZXJhdGlvbkNvbXBhcmVHcmVhdGVyLCBmYWxzZSwgaXRlcik7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZ3JlYXRlcmVxKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17
Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFy
ZUFuZEp1bXBTbG93KG9wMSwgb3AyLCB0YXJnZXQsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwg
b3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXJFcSwgZmFsc2UsIGl0ZXIpOwotfQotCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3Bfam5sZXNzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgaW50IG9wMSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFyZUFuZEp1bXBTbG93KG9wMSwgb3Ay
LCB0YXJnZXQsIERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBvcGVyYXRpb25D
b21wYXJlTGVzcywgdHJ1ZSwgaXRlcik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmxl
c3NlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7Ci0KLSAgICBlbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhvcDEsIG9wMiwgdGFyZ2V0LCBEb3Vi
bGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBvcGVyYXRpb25Db21wYXJlTGVzc0VxLCB0cnVlLCBp
dGVyKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZ3JlYXRlcihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQotewotICAgIGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBvcDIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVk
IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0X2Nv
bXBhcmVBbmRKdW1wU2xvdyhvcDEsIG9wMiwgdGFyZ2V0LCBEb3VibGVMZXNzVGhhbk9yRXF1YWxP
clVub3JkZXJlZCwgb3BlcmF0aW9uQ29tcGFyZUdyZWF0ZXIsIHRydWUsIGl0ZXIpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5ncmVhdGVyZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBp
bnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgZW1pdF9jb21wYXJlQW5kSnVt
cFNsb3cob3AxLCBvcDIsIHRhcmdldCwgRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgb3BlcmF0
aW9uQ29tcGFyZUdyZWF0ZXJFcSwgdHJ1ZSwgaXRlcik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2JlbG93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgZW1pdF9jb21wYXJlVW5zaWduZWQoZHN0LCBvcDEsIG9wMiwg
QmVsb3cpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9iZWxvd2VxKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgZW1p
dF9jb21wYXJlVW5zaWduZWQoZHN0LCBvcDEsIG9wMiwgQmVsb3dPckVxdWFsKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfamJlbG93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFy
Z2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcChvcDEsIG9wMiwgdGFyZ2V0LCBCZWxvdyk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2piZWxvd2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9w
MiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRfY29tcGFyZVVu
c2lnbmVkQW5kSnVtcChvcDEsIG9wMiwgdGFyZ2V0LCBCZWxvd09yRXF1YWwpOwotfQotCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTGVzc1RoYW4sIHJlZ1QwLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICBib3hJbnQzMihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KHJlc3VsdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChPcGNv
ZGVJRCwgaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlvbmFsQ29uZGl0
aW9uIGNvbmRpdGlvbikKLXsKLSAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBmb3IgdGhl
IGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgZmFzdCBwYXRoOgotICAgIC8vIC0gaW50IGltbWVkaWF0
ZSB0byBjb25zdGFudCBpbnQgaW1tZWRpYXRlCi0gICAgLy8gLSBjb25zdGFudCBpbnQgaW1tZWRp
YXRlIHRvIGludCBpbW1lZGlhdGUKLSAgICAvLyAtIGludCBpbW1lZGlhdGUgdG8gaW50IGltbWVk
aWF0ZQotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50Q2hhcihvcDEpKSB7Ci0gICAgICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByZWdUMCk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAg
ICAgZW1pdExvYWRDaGFyYWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7Ci0gICAg
ICAgIGFkZFNsb3dDYXNlKGZhaWx1cmVzKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21t
dXRlKGNvbmRpdGlvbiksIHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQo
b3AxKSktPnRyeUdldFZhbHVlKClbMF0pKSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsKLSAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgICAgIEp1bXBMaXN0IGZhaWx1cmVzOwotICAgICAgICBl
bWl0TG9hZENoYXJhY3RlclN0cmluZyhyZWdUMCwgcmVnVDAsIGZhaWx1cmVzKTsKLSAgICAgICAg
YWRkU2xvd0Nhc2UoZmFpbHVyZXMpOwotICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlv
biwgcmVnVDAsIEltbTMyKGFzU3RyaW5nKGdldENvbnN0YW50T3BlcmFuZChvcDIpKS0+dHJ5R2V0
VmFsdWUoKVswXSkpLCB0YXJnZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDIpKSB7Ci0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIob3AxLCByZWdUMCk7Ci0gICAgICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChyZWdUMCk7
Ci0gICAgICAgIGludDMyX3Qgb3AyaW1tID0gZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMik7Ci0g
ICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIob3AyaW1tKSks
IHRhcmdldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1Qx
KTsKLSAgICAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKLSAgICAgICAgaW50
MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0zMihvcDFpbW0pKSwgdGFy
Z2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXJzKG9wMSwgcmVnVDAsIG9wMiwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdElu
dChyZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QxKTsKLQotICAgIGFk
ZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgcmVnVDEpLCB0YXJnZXQpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGludCBvcDEsIGludCBvcDIsIHVu
c2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCi17Ci0gICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihvcDEsIHJlZ1QwKTsKLSAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb25kaXRpb24sIHJlZ1Qw
LCBJbW0zMihvcDJpbW0pKSwgdGFyZ2V0KTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1Qx
KTsKLSAgICAgICAgaW50MzJfdCBvcDFpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsK
LSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QxLCBJbW0z
MihvcDFpbW0pKSwgdGFyZ2V0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsKLSAgICAgICAgYWRkSnVtcChicmFu
Y2gzMihjb25kaXRpb24sIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Ci0gICAgfQotfQotCi12b2lk
IEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCi17Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50
SW50KG9wMikpIHsKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QwKTsK
LSAgICAgICAgaW50MzJfdCBvcDJpbW0gPSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKTsKLSAg
ICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKG9wMmltbSksIHJlZ1QwKTsK
LSAgICB9IGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJlZ1QwKTsKLSAgICAgICAgaW50MzJfdCBvcDFpbW0g
PSBnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKTsKLSAgICAgICAgY29tcGFyZTMyKGNvbW11dGUo
Y29uZGl0aW9uKSwgcmVnVDAsIEltbTMyKG9wMWltbSksIHJlZ1QwKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhvcDEsIHJlZ1QwLCBvcDIsIHJlZ1QxKTsK
LSAgICAgICAgY29tcGFyZTMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Ci0gICAg
fQotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1p
dFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5k
SnVtcFNsb3coaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBEb3VibGVDb25kaXRp
b24gY29uZGl0aW9uLCBzaXplX3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgQ09NUElMRV9BU1NFUlQoT1BD
T0RFX0xFTkdUSChvcF9qbGVzcykgPT0gT1BDT0RFX0xFTkdUSChvcF9qbGVzc2VxKSwgT1BDT0RF
X0xFTkdUSF9vcF9qbGVzc2VxX2VxdWFsc19vcF9qbGVzcyk7Ci0gICAgQ09NUElMRV9BU1NFUlQo
T1BDT0RFX0xFTkdUSChvcF9qbGVzcykgPT0gT1BDT0RFX0xFTkdUSChvcF9qbmxlc3MpLCBPUENP
REVfTEVOR1RIX29wX2pubGVzc19lcXVhbHNfb3Bfamxlc3MpOwotICAgIENPTVBJTEVfQVNTRVJU
KE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpID09IE9QQ09ERV9MRU5HVEgob3Bfam5sZXNzZXEpLCBP
UENPREVfTEVOR1RIX29wX2pubGVzc2VxX2VxdWFsc19vcF9qbGVzcyk7Ci0gICAgQ09NUElMRV9B
U1NFUlQoT1BDT0RFX0xFTkdUSChvcF9qbGVzcykgPT0gT1BDT0RFX0xFTkdUSChvcF9qZ3JlYXRl
ciksIE9QQ09ERV9MRU5HVEhfb3BfamdyZWF0ZXJfZXF1YWxzX29wX2psZXNzKTsKLSAgICBDT01Q
SUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2psZXNzKSA9PSBPUENPREVfTEVOR1RIKG9wX2pn
cmVhdGVyZXEpLCBPUENPREVfTEVOR1RIX29wX2pncmVhdGVyZXFfZXF1YWxzX29wX2psZXNzKTsK
LSAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2psZXNzKSA9PSBPUENPREVfTEVO
R1RIKG9wX2puZ3JlYXRlciksIE9QQ09ERV9MRU5HVEhfb3Bfam5ncmVhdGVyX2VxdWFsc19vcF9q
bGVzcyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9qbGVzcykgPT0gT1BD
T0RFX0xFTkdUSChvcF9qbmdyZWF0ZXJlcSksIE9QQ09ERV9MRU5HVEhfb3Bfam5ncmVhdGVyZXFf
ZXF1YWxzX29wX2psZXNzKTsKLSAgICAKLSAgICAvLyBXZSBnZW5lcmF0ZSBpbmxpbmUgY29kZSBm
b3IgdGhlIGZvbGxvd2luZyBjYXNlcyBpbiB0aGUgc2xvdyBwYXRoOgotICAgIC8vIC0gZmxvYXRp
bmctcG9pbnQgbnVtYmVyIHRvIGNvbnN0YW50IGludCBpbW1lZGlhdGUKLSAgICAvLyAtIGNvbnN0
YW50IGludCBpbW1lZGlhdGUgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyCi0gICAgLy8gLSBmbG9h
dGluZy1wb2ludCBudW1iZXIgdG8gZmxvYXRpbmctcG9pbnQgbnVtYmVyLgotICAgIGlmIChpc09w
ZXJhbmRDb25zdGFudENoYXIob3AxKSB8fCBpc09wZXJhbmRDb25zdGFudENoYXIob3AyKSkgewot
ICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIob3AxLCBhcmd1bWVudEdQUjApOwotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKG9wMiwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb24s
IGFyZ3VtZW50R1BSMCwgYXJndW1lbnRHUFIxKTsKLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3Qo
YnJhbmNoVGVzdDMyKGludmVydCA/IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaXNPcGVyYW5kQ29uc3Rh
bnRJbnQob3AyKSkgewotICAgICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgICAg
IGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkgewotICAgICAgICAgICAgSnVtcCBmYWlsMSA9
IGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKTsKLSAgICAgICAgICAgIGFkZDY0KHRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgcmVnVDApOwotICAgICAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZw
UmVnVDApOwotCi0gICAgICAgICAgICBpbnQzMl90IG9wMmltbSA9IGdldENvbnN0YW50T3BlcmFu
ZChvcDIpLmFzSW50MzIoKTsKLQotICAgICAgICAgICAgbW92ZShJbW0zMihvcDJpbW0pLCByZWdU
MSk7Ci0gICAgICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0K
LSAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaERvdWJsZShjb25kaXRpb24sIGZw
UmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwotCi0gICAgICAgICAgICBlbWl0SnVtcFNsb3dUb0hv
dChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bfamxlc3MpKTsKLQotICAgICAgICAgICAgZmFpbDEu
bGluayh0aGlzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByZWdUMSk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uLCByZWdUMCwgcmVn
VDEpOwotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVy
byA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7Ci0gICAgICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgaWYgKHN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpKSB7Ci0gICAgICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEp
OwotICAgICAgICAgICAgYWRkNjQodGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZWdUMSk7Ci0gICAg
ICAgICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0KLSAgICAgICAgICAgIGlu
dDMyX3Qgb3AxaW1tID0gZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpOwotCi0gICAg
ICAgICAgICBtb3ZlKEltbTMyKG9wMWltbSksIHJlZ1QwKTsKLSAgICAgICAgICAgIGNvbnZlcnRJ
bnQzMlRvRG91YmxlKHJlZ1QwLCBmcFJlZ1QwKTsKLQotICAgICAgICAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7
Ci0KLSAgICAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChv
cF9qbGVzcykpOwotCi0gICAgICAgICAgICBmYWlsMS5saW5rKHRoaXMpOwotICAgICAgICB9Ci0K
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIHJlZ1QyKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb24sIHJlZ1QyLCByZWdUMSk7Ci0gICAgICAgIGVtaXRKdW1wU2xv
d1RvSG90KGJyYW5jaFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVH
UFIpLCB0YXJnZXQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBMSFMgaXMgbm90IEludC4KLQotICAgIGlmIChzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkgewotICAgICAgICBKdW1wIGZhaWwxID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDApOwot
ICAgICAgICBKdW1wIGZhaWwyID0gYnJhbmNoSWZOb3ROdW1iZXIocmVnVDEpOwotICAgICAgICBK
dW1wIGZhaWwzID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgICAgIGFkZDY0KHRhZ1R5cGVO
dW1iZXJSZWdpc3RlciwgcmVnVDApOwotICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIsIHJlZ1QxKTsKLSAgICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDAsIGZwUmVnVDApOwotICAg
ICAgICBtb3ZlNjRUb0RvdWJsZShyZWdUMSwgZnBSZWdUMSk7Ci0KLSAgICAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoYnJhbmNoRG91YmxlKGNvbmRpdGlvbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdl
dCk7Ci0KLSAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9w
X2psZXNzKSk7Ci0KLSAgICAgICAgZmFpbDEubGluayh0aGlzKTsKLSAgICAgICAgZmFpbDIubGlu
ayh0aGlzKTsKLSAgICAgICAgZmFpbDMubGluayh0aGlzKTsKLSAgICB9Ci0KLSAgICBsaW5rU2xv
d0Nhc2UoaXRlcik7IC8vIFJIUyBpcyBub3QgSW50LgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uLCByZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihp
bnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9pbmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBpbnQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93
Q2FzZUlmTm90SW50KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hBZGQzMihPdmVyZmxv
dywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0KTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgaW50IHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCwgcmVnVDApOwotICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEludChyZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoU3ViMzIoT3Zl
cmZsb3csIFRydXN0ZWRJbW0zMigxKSwgcmVnVDApKTsKLSAgICBib3hJbnQzMihyZWdUMCwgSlNW
YWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7
Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWYgQ1BVKFg4Nl82NCkKLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfbW9kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBNYWtlIHN1cmUgcmVnaXN0
ZXJzIGFyZSBjb3JyZWN0IGZvciB4ODYgSURJViBpbnN0cnVjdGlvbnMuCi0gICAgQVNTRVJUKHJl
Z1QwID09IFg4NlJlZ2lzdGVyczo6ZWF4KTsKLSAgICBhdXRvIGVkeCA9IFg4NlJlZ2lzdGVyczo6
ZWR4OwotICAgIGF1dG8gZWN4ID0gWDg2UmVnaXN0ZXJzOjplY3g7Ci0gICAgQVNTRVJUKHJlZ1Q0
ICE9IGVkeCk7Ci0gICAgQVNTRVJUKHJlZ1Q0ICE9IGVjeCk7Ci0KLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVycyhvcDEsIHJlZ1Q0LCBvcDIsIGVjeCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SW50KHJlZ1Q0KTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoZWN4KTsKLQotICAg
IG1vdmUocmVnVDQsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywg
ZWN4KSk7Ci0gICAgSnVtcCBkZW5vbWluYXRvck5vdE5lZzEgPSBicmFuY2gzMihOb3RFcXVhbCwg
ZWN4LCBUcnVzdGVkSW1tMzIoLTEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkpOwotICAgIGRlbm9taW5hdG9yTm90
TmVnMS5saW5rKHRoaXMpOwotICAgIHg4NkNvbnZlcnRUb0RvdWJsZVdvcmQzMigpOwotICAgIHg4
NkRpdjMyKGVjeCk7Ci0gICAgSnVtcCBudW1lcmF0b3JQb3NpdGl2ZSA9IGJyYW5jaDMyKEdyZWF0
ZXJUaGFuT3JFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoVGVzdDMyKFplcm8sIGVkeCkpOwotICAgIG51bWVyYXRvclBvc2l0aXZlLmxpbmsodGhp
cyk7Ci0gICAgYm94SW50MzIoZWR4LCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX21vZCk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQotI2Vsc2UgLy8gQ1BV
KFg4Nl82NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2QpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJikKLXsKLSAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0o
KTsKLX0KLQotI2VuZGlmIC8vIENQVShYODZfNjQpCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSBFTkQ6IE9QX01PRCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
LQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX25lZ2F0ZShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEFyaXRoUHJvZmlsZSogYXJp
dGhQcm9maWxlID0gbV9jb2RlQmxvY2stPmFyaXRoUHJvZmlsZUZvclBDKGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci0gICAgSklUTmVnSUMqIG5lZ2F0ZUlDID0gbV9jb2RlQmxvY2stPmFkZEpJVE5lZ0lD
KGFyaXRoUHJvZmlsZSwgY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBtX2luc3RydWN0aW9uVG9N
YXRoSUMuYWRkKGN1cnJlbnRJbnN0cnVjdGlvbiwgbmVnYXRlSUMpOwotICAgIGVtaXRNYXRoSUNG
YXN0KG5lZ2F0ZUlDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJv
ZmlsZWQsIG9wZXJhdGlvbkFyaXRoTmVnYXRlKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25lZ2F0ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0K
LSAgICBKSVROZWdJQyogbmVnSUMgPSBiaXR3aXNlX2Nhc3Q8SklUTmVnSUMqPihtX2luc3RydWN0
aW9uVG9NYXRoSUMuZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbikpOwotICAgIGVtaXRNYXRoSUNTbG93
KG5lZ0lDLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wZXJhdGlvbkFyaXRoTmVnYXRlUHJvZmlsZWRP
cHRpbWl6ZSwgb3BlcmF0aW9uQXJpdGhOZWdhdGVQcm9maWxlZCwgb3BlcmF0aW9uQXJpdGhOZWdh
dGVPcHRpbWl6ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFNuaXBwZXRHZW5lcmF0b3I+Ci12
b2lkIEpJVDo6ZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotI2lmIFVTRShK
U1ZBTFVFNjQpCi0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1QyOwotI2Vsc2UKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotCi0gICAgU25pcHBldE9wZXJhbmQg
bGVmdE9wZXJhbmQ7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kOwotCi0gICAgaWYg
KGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0
SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkpOwotICAgIGVsc2UgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJpZ2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdl
dE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQotICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3Bl
cmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5pc0NvbnN0KCkpOwotCi0gICAgaWYgKCFs
ZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3Ax
LCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFyaWdodE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICBl
bWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmlnaHRSZWdzKTsKLQotICAgIFNuaXBwZXRHZW5l
cmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdz
LCByaWdodFJlZ3MsIHNjcmF0Y2hHUFIpOwotCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOwotCi0gICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFzdFBhdGgoKSk7Ci0gICAgZ2VuLmVuZEp1
bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwg
cmVzdWx0UmVncyk7Ci0KLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfYml0YW5kKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgZW1pdEJpdEJpbmFyeU9wRmFzdFBhdGg8SklUQml0QW5kR2VuZXJhdG9y
PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9iaXRvcihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRCaXRCaW5hcnlPcEZhc3RQ
YXRoPEpJVEJpdE9yR2VuZXJhdG9yPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9iaXR4b3IoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBlbWl0Qml0QmluYXJ5T3BGYXN0UGF0aDxKSVRCaXRYb3JHZW5lcmF0b3I+KGN1cnJlbnRJbnN0
cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2xzaGlmdChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRCaXRCaW5hcnlPcEZhc3RQYXRoPEpJVExlZnRT
aGlmdEdlbmVyYXRvcj4oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRS
aWdodFNoaWZ0RmFzdFBhdGgoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgT3Bjb2Rl
SUQgb3Bjb2RlSUQpCi17Ci0gICAgQVNTRVJUKG9wY29kZUlEID09IG9wX3JzaGlmdCB8fCBvcGNv
ZGVJRCA9PSBvcF91cnNoaWZ0KTsKLQotICAgIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3I6OlNoaWZ0
VHlwZSBzbmlwcGV0U2hpZnRUeXBlID0gb3Bjb2RlSUQgPT0gb3BfcnNoaWZ0ID8KLSAgICAgICAg
SklUUmlnaHRTaGlmdEdlbmVyYXRvcjo6U2lnbmVkU2hpZnQgOiBKSVRSaWdodFNoaWZ0R2VuZXJh
dG9yOjpVbnNpZ25lZFNoaWZ0OwotCi0gICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0K
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7Ci0gICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSByZWdUMjsKLSAgICBGUFJSZWcgc2NyYXRjaEZQUiA9IEludmFsaWRGUFJSZWc7
Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIGxlZnRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDIpOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcg
c2NyYXRjaEdQUiA9IHJlZ1Q0OwotICAgIEZQUlJlZyBzY3JhdGNoRlBSID0gZnBSZWdUMjsKLSNl
bmRpZgotCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQ7Ci0gICAgU25pcHBldE9wZXJh
bmQgcmlnaHRPcGVyYW5kOwotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0g
ICAgICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9w
MSkpOwotICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJp
Z2h0T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQot
ICAgIFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFu
ZC5pc0NvbnN0KCkpOwotCi0gICAgaWYgKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkpCi0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgaWYgKCFyaWdodE9w
ZXJhbmQuaXNDb25zdCgpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMiwgcmln
aHRSZWdzKTsKLQotICAgIEpJVFJpZ2h0U2hpZnRHZW5lcmF0b3IgZ2VuKGxlZnRPcGVyYW5kLCBy
aWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJlZ3MsCi0gICAgICAgIGZw
UmVnVDAsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIHNuaXBwZXRTaGlmdFR5cGUpOwotCi0gICAg
Z2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotCi0gICAgQVNTRVJUKGdlbi5kaWRFbWl0RmFz
dFBhdGgoKSk7Ci0gICAgZ2VuLmVuZEp1bXBMaXN0KCkubGluayh0aGlzKTsKLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Ci0KLSAgICBhZGRTbG93Q2FzZShn
ZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcnNoaWZ0KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdFJpZ2h0U2hpZnRGYXN0
UGF0aChjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wX3JzaGlmdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX3Vyc2hpZnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0
UmlnaHRTaGlmdEZhc3RQYXRoKGN1cnJlbnRJbnN0cnVjdGlvbiwgb3BfdXJzaGlmdCk7Ci19Ci0K
LUFMV0FZU19JTkxJTkUgc3RhdGljIE9wZXJhbmRUeXBlcyBnZXRPcGVyYW5kVHlwZXMoSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQotewotICAgIHJldHVybiBPcGVyYW5kVHlwZXMoQXJpdGhQcm9m
aWxlOjpmcm9tSW50KGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkubGhzUmVzdWx0VHlwZSgpLCBB
cml0aFByb2ZpbGU6OmZyb21JbnQoaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKS5yaHNSZXN1bHRU
eXBlKCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9hZGQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1fY29kZUJs
b2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIEpJVEFkZElD
KiBhZGRJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRBZGRJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci0gICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGFkZElDKTsKLSAgICBlbWl0TWF0aElDRmFzdChhZGRJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZUFkZFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZUFkZCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9hZGQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUQWRkSUMqIGFkZElDID0gYml0d2lzZV9jYXN0PEpJ
VEFkZElDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsK
LSAgICBlbWl0TWF0aElDU2xvdyhhZGRJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZUFkZFByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlQWRkUHJvZmlsZWQsIG9wZXJh
dGlvblZhbHVlQWRkT3B0aW1pemUpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgR2VuZXJhdG9y
LCB0eXBlbmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBOb25Qcm9maWxlZEZ1bmN0aW9u
Pgotdm9pZCBKSVQ6OmVtaXRNYXRoSUNGYXN0KEpJVFVuYXJ5TWF0aElDPEdlbmVyYXRvcj4qIG1h
dGhJQywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBw
cm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVuY3Rpb24p
Ci17Ci0gICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IG9wZXJhbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0jaWYg
VVNFKEpTVkFMVUU2NCkKLSAgICAvLyBBcml0aE5lZ2F0ZSBiZW5lZml0cyBmcm9tIHVzaW5nIHRo
ZSBzYW1lIHJlZ2lzdGVyIGFzIHNyYyBhbmQgZHN0LgotICAgIC8vIFNpbmNlIHJlZ1QxPT1hcmd1
bWVudEdQUjEsIHVzaW5nIHJlZ1QxIGF2b2lkIHNodWZmbGluZyByZWdpc3RlciB0byBjYWxsIHRo
ZSBzbG93IHBhdGguCi0gICAgSlNWYWx1ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1Qx
KTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDI7Ci0jZWxzZQotICAgIEpTVmFsdWVSZWdzIHNyY1Jl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJl
Z3MgPSBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0g
cmVnVDQ7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQotICAgIGF1dG8gaW5s
aW5lU3RhcnQgPSBsYWJlbCgpOwotI2VuZGlmCi0KLSAgICBtYXRoSUMtPm1fZ2VuZXJhdG9yID0g
R2VuZXJhdG9yKHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIHNjcmF0Y2hHUFIpOwotCi0gICAgZW1pdEdl
dFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLCBzcmNSZWdzKTsKLQotICAgIE1hdGhJQ0dlbmVyYXRp
b25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2Vu
ZXJhdGlvblN0YXRlLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0
ZSgpKS5pdGVyYXRvci0+dmFsdWU7Ci0KLSAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBt
YXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwotICAg
IGlmICghZ2VuZXJhdGVkSW5saW5lQ29kZSkgewotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRo
UHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQcm9maWxlKCk7Ci0gICAgICAgIGlmIChhcml0aFByb2Zp
bGUgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldp
dGhSZXN1bHQocHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVncywgYXJpdGhQcm9m
aWxlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
bm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgc3JjUmVncyk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aEp1bXBzKTsK
LQotI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQotICAgIGF1dG8gaW5saW5lRW5kID0gbGFiZWwo
KTsKLSAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAg
ICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5lRW5kKS5leGVjdXRh
YmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmxpbmVTdGFydCku
ZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7Ci0gICAgICAgIG1hdGhJQy0+bV9nZW5lcmF0ZWRD
b2RlU2l6ZSArPSBzaXplOwotICAgIH0pOwotI2VuZGlmCi0KLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Ci19Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBHZW5l
cmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVu
Y3Rpb24+Ci12b2lkIEpJVDo6ZW1pdE1hdGhJQ0Zhc3QoSklUQmluYXJ5TWF0aElDPEdlbmVyYXRv
cj4qIG1hdGhJQywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHJvZmlsZWRGdW5j
dGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBOb25Qcm9maWxlZEZ1bmN0aW9uIG5vblByb2ZpbGVkRnVu
Y3Rpb24pCi17Ci0gICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjb3BpZWRJ
bnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHJlZ1QzOwotICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gZnBSZWdUMjsKLSNlbHNlCi0gICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3Bl
cmFuZFR5cGVzKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3Mg
PSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9
IGxlZnRSZWdzOwotICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDQ7Ci0gICAgRlBSUmVnIHNj
cmF0Y2hGUFIgPSBmcFJlZ1QyOwotI2VuZGlmCi0KLSAgICBTbmlwcGV0T3BlcmFuZCBsZWZ0T3Bl
cmFuZCh0eXBlcy5maXJzdCgpKTsKLSAgICBTbmlwcGV0T3BlcmFuZCByaWdodE9wZXJhbmQodHlw
ZXMuc2Vjb25kKCkpOwotCi0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpCi0gICAg
ICAgIGxlZnRPcGVyYW5kLnNldENvbnN0SW50MzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KG9wMSkp
OwotICAgIGVsc2UgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpCi0gICAgICAgIHJpZ2h0
T3BlcmFuZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDIpKTsKLQotICAg
IFJFTEVBU0VfQVNTRVJUKCFsZWZ0T3BlcmFuZC5pc0NvbnN0KCkgfHwgIXJpZ2h0T3BlcmFuZC5p
c0NvbnN0KCkpOwotCi0gICAgbWF0aElDLT5tX2dlbmVyYXRvciA9IEdlbmVyYXRvcihsZWZ0T3Bl
cmFuZCwgcmlnaHRPcGVyYW5kLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdzLCBmcFJl
Z1QwLCBmcFJlZ1QxLCBzY3JhdGNoR1BSLCBzY3JhdGNoRlBSKTsKLSAgICAKLSAgICBBU1NFUlQo
IShHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBH
ZW5lcmF0b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7Ci0g
ICAgCi0gICAgaWYgKCFHZW5lcmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRP
cGVyYW5kKSkKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsK
LSAgICBpZiAoIUdlbmVyYXRvcjo6aXNSaWdodE9wZXJhbmRWYWxpZENvbnN0YW50KHJpZ2h0T3Bl
cmFuZCkpCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AyLCByaWdodFJlZ3MpOwot
Ci0jaWYgRU5BQkxFKE1BVEhfSUNfU1RBVFMpCi0gICAgYXV0byBpbmxpbmVTdGFydCA9IGxhYmVs
KCk7Ci0jZW5kaWYKLQotICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlv
blN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmFkZChjdXJyZW50
SW5zdHJ1Y3Rpb24sIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSgpKS5pdGVyYXRvci0+dmFsdWU7Ci0K
LSAgICBib29sIGdlbmVyYXRlZElubGluZUNvZGUgPSBtYXRoSUMtPmdlbmVyYXRlSW5saW5lKCp0
aGlzLCBtYXRoSUNHZW5lcmF0aW9uU3RhdGUpOwotICAgIGlmICghZ2VuZXJhdGVkSW5saW5lQ29k
ZSkgewotICAgICAgICBpZiAobGVmdE9wZXJhbmQuaXNDb25zdCgpKQotICAgICAgICAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihvcDEsIGxlZnRSZWdzKTsKLSAgICAgICAgZWxzZSBpZiAocmln
aHRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIo
b3AyLCByaWdodFJlZ3MpOwotICAgICAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1h
dGhJQy0+YXJpdGhQcm9maWxlKCk7Ci0gICAgICAgIGlmIChhcml0aFByb2ZpbGUgJiYgc2hvdWxk
RW1pdFByb2ZpbGluZygpKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQocHJv
ZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQcm9m
aWxlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
bm9uUHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncyk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGFkZFNsb3dDYXNlKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93
UGF0aEp1bXBzKTsKLQotI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQotICAgIGF1dG8gaW5saW5l
RW5kID0gbGFiZWwoKTsKLSAgICBhZGRMaW5rVGFzayhbPV0gKExpbmtCdWZmZXImIGxpbmtCdWZm
ZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YoaW5saW5l
RW5kKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKSAtIGxpbmtCdWZmZXIubG9jYXRpb25PZihp
bmxpbmVTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7Ci0gICAgICAgIG1hdGhJQy0+
bV9nZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwotICAgIH0pOwotI2VuZGlmCi0KLSAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Ci19Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1lIFByb2ZpbGVkUmVwYXRjaEZ1bmN0aW9uLCB0eXBl
bmFtZSBQcm9maWxlZEZ1bmN0aW9uLCB0eXBlbmFtZSBSZXBhdGNoRnVuY3Rpb24+Ci12b2lkIEpJ
VDo6ZW1pdE1hdGhJQ1Nsb3coSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9m
aWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRGdW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBS
ZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9uKQotewotICAgIE1hdGhJQ0dlbmVyYXRpb25T
dGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0gbV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJh
dGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0aW9uKS0+dmFsdWU7Ci0gICAgbWF0aElDR2Vu
ZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwotCi0gICAgaW50IHJlc3VsdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0KLSNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIEpTVmFsdWVSZWdzIHNyY1JlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMSk7Ci0gICAgSlNWYWx1
ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSNlbHNlCi0gICAgSlNWYWx1
ZVJlZ3Mgc3JjUmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMik7Ci0jZW5kaWYKLQotI2lm
IEVOQUJMRShNQVRIX0lDX1NUQVRTKQotICAgIGF1dG8gc2xvd1BhdGhTdGFydCA9IGxhYmVsKCk7
Ci0jZW5kaWYKLQotICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbWF0aElDLT5hcml0
aFByb2ZpbGUoKTsKLSAgICBpZiAoYXJpdGhQcm9maWxlICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewotICAgICAgICBpZiAobWF0aElDR2VuZXJhdGlvblN0YXRlLnNob3VsZFNsb3dQYXRoUmVw
YXRjaCkKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFJlc3VsdChyZWludGVycHJldF9jYXN0PEpfSklUT3BlcmF0aW9uX0VK
TWljPihwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIHNyY1JlZ3MsIFRydXN0
ZWRJbW1QdHIobWF0aElDKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1hdGhJQ0dlbmVy
YXRpb25TdGF0ZS5zbG93UGF0aENhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFJlc3VsdChwcm9maWxl
ZEZ1bmN0aW9uLCByZXN1bHRSZWdzLCBzcmNSZWdzLCBhcml0aFByb2ZpbGUpOwotICAgIH0gZWxz
ZQotICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhSZXN1bHQocmVpbnRlcnByZXRfY2FzdDxKX0pJVE9wZXJhdGlvbl9FSk1pYz4ocmVw
YXRjaEZ1bmN0aW9uKSwgcmVzdWx0UmVncywgc3JjUmVncywgVHJ1c3RlZEltbVB0cihtYXRoSUMp
KTsKLQotI2lmIEVOQUJMRShNQVRIX0lDX1NUQVRTKQotICAgIGF1dG8gc2xvd1BhdGhFbmQgPSBs
YWJlbCgpOwotICAgIGFkZExpbmtUYXNrKFs9XSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlcikgewot
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzbG93UGF0aEVuZCku
ZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCkgLSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc2xvd1Bh
dGhTdGFydCkuZXhlY3V0YWJsZUFkZHJlc3M8Y2hhcio+KCk7Ci0gICAgICAgIG1hdGhJQy0+bV9n
ZW5lcmF0ZWRDb2RlU2l6ZSArPSBzaXplOwotICAgIH0pOwotI2VuZGlmCi0KLSAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdCwgcmVzdWx0UmVncyk7Ci0KLSAgICBhZGRMaW5rVGFzayhb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgTWF0aElDR2VuZXJhdGlvblN0
YXRlJiBtYXRoSUNHZW5lcmF0aW9uU3RhdGUgPSBtX2luc3RydWN0aW9uVG9NYXRoSUNHZW5lcmF0
aW9uU3RhdGUuZmluZChjdXJyZW50SW5zdHJ1Y3Rpb24pLT52YWx1ZTsKLSAgICAgICAgbWF0aElD
LT5maW5hbGl6ZUlubGluZUNvZGUobWF0aElDR2VuZXJhdGlvblN0YXRlLCBsaW5rQnVmZmVyKTsK
LSAgICB9KTsKLX0KLQotdGVtcGxhdGUgPHR5cGVuYW1lIEdlbmVyYXRvciwgdHlwZW5hbWUgUHJv
ZmlsZWRSZXBhdGNoRnVuY3Rpb24sIHR5cGVuYW1lIFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1l
IFJlcGF0Y2hGdW5jdGlvbj4KLXZvaWQgSklUOjplbWl0TWF0aElDU2xvdyhKSVRCaW5hcnlNYXRo
SUM8R2VuZXJhdG9yPiogbWF0aElDLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQ
cm9maWxlZFJlcGF0Y2hGdW5jdGlvbiBwcm9maWxlZFJlcGF0Y2hGdW5jdGlvbiwgUHJvZmlsZWRG
dW5jdGlvbiBwcm9maWxlZEZ1bmN0aW9uLCBSZXBhdGNoRnVuY3Rpb24gcmVwYXRjaEZ1bmN0aW9u
KQotewotICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0g
bV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0
aW9uKS0+dmFsdWU7Ci0gICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQYXRoU3RhcnQgPSBs
YWJlbCgpOwotCi0gICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIE9wZXJhbmRUeXBlcyB0eXBlcyA9IGdldE9wZXJhbmRUeXBlcyhjb3BpZWRJ
bnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVn
cyA9IEpTVmFsdWVSZWdzKHJlZ1QxKTsKLSAgICBKU1ZhbHVlUmVncyByaWdodFJlZ3MgPSBKU1Zh
bHVlUmVncyhyZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IEpTVmFsdWVSZWdz
KHJlZ1QwKTsKLSNlbHNlCi0gICAgT3BlcmFuZFR5cGVzIHR5cGVzID0gZ2V0T3BlcmFuZFR5cGVz
KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApOwotICAgIEpTVmFsdWVSZWdzIHJpZ2h0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMik7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IGxlZnRSZWdz
OwotI2VuZGlmCi0gICAgCi0gICAgU25pcHBldE9wZXJhbmQgbGVmdE9wZXJhbmQodHlwZXMuZmly
c3QoKSk7Ci0gICAgU25pcHBldE9wZXJhbmQgcmlnaHRPcGVyYW5kKHR5cGVzLnNlY29uZCgpKTsK
LQotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKQotICAgICAgICBsZWZ0T3BlcmFu
ZC5zZXRDb25zdEludDMyKGdldE9wZXJhbmRDb25zdGFudEludChvcDEpKTsKLSAgICBlbHNlIGlm
IChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29u
c3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0KLSAgICBBU1NFUlQoIShHZW5l
cmF0b3I6OmlzTGVmdE9wZXJhbmRWYWxpZENvbnN0YW50KGxlZnRPcGVyYW5kKSAmJiBHZW5lcmF0
b3I6OmlzUmlnaHRPcGVyYW5kVmFsaWRDb25zdGFudChyaWdodE9wZXJhbmQpKSk7Ci0KLSAgICBp
ZiAoR2VuZXJhdG9yOjppc0xlZnRPcGVyYW5kVmFsaWRDb25zdGFudChsZWZ0T3BlcmFuZCkpCi0g
ICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIob3AxLCBsZWZ0UmVncyk7Ci0gICAgZWxzZSBp
ZiAoR2VuZXJhdG9yOjppc1JpZ2h0T3BlcmFuZFZhbGlkQ29uc3RhbnQocmlnaHRPcGVyYW5kKSkK
LSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0KLSNpZiBF
TkFCTEUoTUFUSF9JQ19TVEFUUykKLSAgICBhdXRvIHNsb3dQYXRoU3RhcnQgPSBsYWJlbCgpOwot
I2VuZGlmCi0KLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1hdGhJQy0+YXJpdGhQ
cm9maWxlKCk7Ci0gICAgaWYgKGFyaXRoUHJvZmlsZSAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkp
IHsKLSAgICAgICAgaWYgKG1hdGhJQ0dlbmVyYXRpb25TdGF0ZS5zaG91bGRTbG93UGF0aFJlcGF0
Y2gpCi0gICAgICAgICAgICBtYXRoSUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhSZXN1bHQoYml0d2lzZV9jYXN0PEpfSklUT3BlcmF0aW9uX0VKSk1pYz4o
cHJvZmlsZWRSZXBhdGNoRnVuY3Rpb24pLCByZXN1bHRSZWdzLCBsZWZ0UmVncywgcmlnaHRSZWdz
LCBUcnVzdGVkSW1tUHRyKG1hdGhJQykpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtYXRo
SUNHZW5lcmF0aW9uU3RhdGUuc2xvd1BhdGhDYWxsID0gY2FsbE9wZXJhdGlvbldpdGhSZXN1bHQo
cHJvZmlsZWRGdW5jdGlvbiwgcmVzdWx0UmVncywgbGVmdFJlZ3MsIHJpZ2h0UmVncywgYXJpdGhQ
cm9maWxlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbWF0aElDR2VuZXJhdGlvblN0YXRlLnNsb3dQ
YXRoQ2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUmVzdWx0KGJpdHdpc2VfY2FzdDxKX0pJVE9wZXJh
dGlvbl9FSkpNaWM+KHJlcGF0Y2hGdW5jdGlvbiksIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdo
dFJlZ3MsIFRydXN0ZWRJbW1QdHIobWF0aElDKSk7Ci0KLSNpZiBFTkFCTEUoTUFUSF9JQ19TVEFU
UykKLSAgICBhdXRvIHNsb3dQYXRoRW5kID0gbGFiZWwoKTsKLSAgICBhZGRMaW5rVGFzayhbPV0g
KExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBsaW5rQnVm
ZmVyLmxvY2F0aW9uT2Yoc2xvd1BhdGhFbmQpLmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpIC0g
bGlua0J1ZmZlci5sb2NhdGlvbk9mKHNsb3dQYXRoU3RhcnQpLmV4ZWN1dGFibGVBZGRyZXNzPGNo
YXIqPigpOwotICAgICAgICBtYXRoSUMtPm1fZ2VuZXJhdGVkQ29kZVNpemUgKz0gc2l6ZTsKLSAg
ICB9KTsKLSNlbmRpZgotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHQsIHJlc3Vs
dFJlZ3MpOwotCi0gICAgYWRkTGlua1Rhc2soWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7
Ci0gICAgICAgIE1hdGhJQ0dlbmVyYXRpb25TdGF0ZSYgbWF0aElDR2VuZXJhdGlvblN0YXRlID0g
bV9pbnN0cnVjdGlvblRvTWF0aElDR2VuZXJhdGlvblN0YXRlLmZpbmQoY3VycmVudEluc3RydWN0
aW9uKS0+dmFsdWU7Ci0gICAgICAgIG1hdGhJQy0+ZmluYWxpemVJbmxpbmVDb2RlKG1hdGhJQ0dl
bmVyYXRpb25TdGF0ZSwgbGlua0J1ZmZlcik7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2RpdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCByZXN1
bHQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBvcDEgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBvcDIgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBPcGVyYW5kVHlw
ZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlwZXMoY29waWVkSW5zdHJ1Y3Rpb24oY3VycmVudEluc3Ry
dWN0aW9uKSk7Ci0gICAgSlNWYWx1ZVJlZ3MgbGVmdFJlZ3MgPSBKU1ZhbHVlUmVncyhyZWdUMCk7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJlZ3MocmVnVDEpOwotICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3MgPSBsZWZ0UmVnczsKLSAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHJlZ1QyOwotI2Vsc2UKLSAgICBPcGVyYW5kVHlwZXMgdHlwZXMgPSBnZXRPcGVyYW5kVHlwZXMo
Y3VycmVudEluc3RydWN0aW9uKTsKLSAgICBKU1ZhbHVlUmVncyBsZWZ0UmVncyA9IEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmlnaHRSZWdzID0gSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gbGVmdFJlZ3M7
Ci0gICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUNDsKLSNlbmRpZgotICAgIEZQUlJlZyBzY3Jh
dGNoRlBSID0gZnBSZWdUMjsKLQotICAgIEFyaXRoUHJvZmlsZSogYXJpdGhQcm9maWxlID0gbnVs
bHB0cjsKLSAgICBpZiAoc2hvdWxkRW1pdFByb2ZpbGluZygpKQotICAgICAgICBhcml0aFByb2Zp
bGUgPSBtX2NvZGVCbG9jay0+YXJpdGhQcm9maWxlRm9yUEMoY3VycmVudEluc3RydWN0aW9uKTsK
LQotICAgIFNuaXBwZXRPcGVyYW5kIGxlZnRPcGVyYW5kKHR5cGVzLmZpcnN0KCkpOwotICAgIFNu
aXBwZXRPcGVyYW5kIHJpZ2h0T3BlcmFuZCh0eXBlcy5zZWNvbmQoKSk7Ci0KLSAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRJbnQob3AxKSkKLSAgICAgICAgbGVmdE9wZXJhbmQuc2V0Q29uc3RJbnQz
MihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBl
bHNlIGlmIChpc09wZXJhbmRDb25zdGFudERvdWJsZShvcDEpKQotICAgICAgICBsZWZ0T3BlcmFu
ZC5zZXRDb25zdERvdWJsZShnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUob3AxKSk7Ci0jZW5kaWYK
LSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDIpKQotICAgICAgICByaWdodE9w
ZXJhbmQuc2V0Q29uc3RJbnQzMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7Ci0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICBlbHNlIGlmIChpc09wZXJhbmRDb25zdGFudERvdWJsZShvcDIpKQot
ICAgICAgICByaWdodE9wZXJhbmQuc2V0Q29uc3REb3VibGUoZ2V0T3BlcmFuZENvbnN0YW50RG91
YmxlKG9wMikpOwotI2VuZGlmCi0KLSAgICBSRUxFQVNFX0FTU0VSVCghbGVmdE9wZXJhbmQuaXND
b25zdCgpIHx8ICFyaWdodE9wZXJhbmQuaXNDb25zdCgpKTsKLQotICAgIGlmICghbGVmdE9wZXJh
bmQuaXNDb25zdCgpKQotICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKG9wMSwgbGVmdFJl
Z3MpOwotICAgIGlmICghcmlnaHRPcGVyYW5kLmlzQ29uc3QoKSkKLSAgICAgICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihvcDIsIHJpZ2h0UmVncyk7Ci0KLSAgICBKSVREaXZHZW5lcmF0b3IgZ2Vu
KGxlZnRPcGVyYW5kLCByaWdodE9wZXJhbmQsIHJlc3VsdFJlZ3MsIGxlZnRSZWdzLCByaWdodFJl
Z3MsCi0gICAgICAgIGZwUmVnVDAsIGZwUmVnVDEsIHNjcmF0Y2hHUFIsIHNjcmF0Y2hGUFIsIGFy
aXRoUHJvZmlsZSk7Ci0KLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0KLSAgICBp
ZiAoZ2VuLmRpZEVtaXRGYXN0UGF0aCgpKSB7Ci0gICAgICAgIGdlbi5lbmRKdW1wTGlzdCgpLmxp
bmsodGhpcyk7Ci0gICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0LCByZXN1bHRS
ZWdzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wTGlzdCgpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBBU1NFUlQoZ2VuLmVuZEp1bXBMaXN0KCkuZW1wdHkoKSk7Ci0g
ICAgICAgIEFTU0VSVChnZW4uc2xvd1BhdGhKdW1wTGlzdCgpLmVtcHR5KCkpOwotICAgICAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX2Rpdik7Ci0gICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci0gICAgfQotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9tdWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1fY29kZUJsb2NrLT5hcml0aFByb2Zp
bGVGb3JQQyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIEpJVE11bElDKiBtdWxJQyA9IG1fY29k
ZUJsb2NrLT5hZGRKSVRNdWxJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0g
ICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1Y3Rpb24sIG11bElDKTsK
LSAgICBlbWl0TWF0aElDRmFzdChtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZU11bFByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZU11bCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF9tdWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgSklUTXVsSUMqIG11bElDID0gYml0d2lzZV9jYXN0PEpJVE11bElDKj4obV9pbnN0
cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsKLSAgICBlbWl0TWF0aElD
U2xvdyhtdWxJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25WYWx1ZU11bFByb2ZpbGVk
T3B0aW1pemUsIG9wZXJhdGlvblZhbHVlTXVsUHJvZmlsZWQsIG9wZXJhdGlvblZhbHVlTXVsT3B0
aW1pemUpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zdWIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBBcml0aFByb2ZpbGUqIGFyaXRoUHJvZmlsZSA9IG1fY29kZUJs
b2NrLT5hcml0aFByb2ZpbGVGb3JQQyhjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIEpJVFN1YklD
KiBzdWJJQyA9IG1fY29kZUJsb2NrLT5hZGRKSVRTdWJJQyhhcml0aFByb2ZpbGUsIGN1cnJlbnRJ
bnN0cnVjdGlvbik7Ci0gICAgbV9pbnN0cnVjdGlvblRvTWF0aElDLmFkZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIHN1YklDKTsKLSAgICBlbWl0TWF0aElDRmFzdChzdWJJQywgY3VycmVudEluc3RydWN0
aW9uLCBvcGVyYXRpb25WYWx1ZVN1YlByb2ZpbGVkLCBvcGVyYXRpb25WYWx1ZVN1Yik7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9zdWIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgSklUU3ViSUMqIHN1YklDID0gYml0d2lzZV9jYXN0PEpJ
VFN1YklDKj4obV9pbnN0cnVjdGlvblRvTWF0aElDLmdldChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsK
LSAgICBlbWl0TWF0aElDU2xvdyhzdWJJQywgY3VycmVudEluc3RydWN0aW9uLCBvcGVyYXRpb25W
YWx1ZVN1YlByb2ZpbGVkT3B0aW1pemUsIG9wZXJhdGlvblZhbHVlU3ViUHJvZmlsZWQsIG9wZXJh
dGlvblZhbHVlU3ViT3B0aW1pemUpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gRU5EOiBPUF9BREQsIE9QX1NVQiwgT1BfTVVMLCBPUF9QT1cgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCi0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gRU5B
QkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGht
ZXRpYzMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMy
XzY0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNlYmRiNjdjNTIxY2I2OTlm
MzdlMDk4OTIwN2E0ZTIxZTc5Y2M1My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82
NC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzNTcgKzAsMCBAQAotLyoKLSogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSoKLSogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0qIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotKiBhcmUgbWV0OgotKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0qIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0qICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSoKLSogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0qIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0qIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0qIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSklUKQotI2lmIFVT
RShKU1ZBTFVFMzJfNjQpCi0jaW5jbHVkZSAiSklULmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2su
aCIKLSNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgotI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKLSNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCi0jaW5jbHVkZSAiU2xvd1BhdGhD
YWxsLmgiCi0KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wKE9wY29kZUlEIG9wY29kZSwgaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKLXsKLSAgICBKdW1wTGlzdCBub3RJbnQzMk9w
MTsKLSAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKLQotICAgIC8vIENoYXJhY3RlciBsZXNzLgot
ICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewotICAgICAgICBlbWl0TG9hZChv
cDIsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChy
ZWdUMSkpOwotICAgICAgICBKdW1wTGlzdCBmYWlsdXJlczsKLSAgICAgICAgZW1pdExvYWRDaGFy
YWN0ZXJTdHJpbmcocmVnVDAsIHJlZ1QwLCBmYWlsdXJlcyk7Ci0gICAgICAgIGFkZFNsb3dDYXNl
KGZhaWx1cmVzKTsKLSAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiks
IHJlZ1QwLCBJbW0zMihhc1N0cmluZyhnZXRDb25zdGFudE9wZXJhbmQob3AxKSktPnRyeUdldFZh
bHVlKClbMF0pKSwgdGFyZ2V0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaXNP
cGVyYW5kQ29uc3RhbnRDaGFyKG9wMikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwg
cmVnVDApOwotICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAg
ICAgICAgSnVtcExpc3QgZmFpbHVyZXM7Ci0gICAgICAgIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5n
KHJlZ1QwLCByZWdUMCwgZmFpbHVyZXMpOwotICAgICAgICBhZGRTbG93Q2FzZShmYWlsdXJlcyk7
Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwgSW1tMzIoYXNTdHJp
bmcoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikpLT50cnlHZXRWYWx1ZSgpWzBdKSksIHRhcmdldCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9IAotICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChv
cDEpKSB7Ci0gICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgbm90
SW50MzJPcDIuYXBwZW5kKGJyYW5jaElmTm90SW50MzIocmVnVDMpKTsKLSAgICAgICAgYWRkSnVt
cChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9w
ZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKLSAgICB9IGVsc2UgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMikpIHsKLSAgICAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDAp
OwotICAgICAgICBub3RJbnQzMk9wMS5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIEltbTMyKGdldENvbnN0
YW50T3BlcmFuZChvcDIpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGVtaXRMb2FkMihvcDEsIHJlZ1QxLCByZWdUMCwgb3AyLCByZWdUMywgcmVnVDIpOwotICAg
ICAgICBub3RJbnQzMk9wMS5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMSkpOwotICAgICAg
ICBub3RJbnQzMk9wMi5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihyZWdUMykpOwotICAgICAgICBh
ZGRKdW1wKGJyYW5jaDMyKGNvbmRpdGlvbiwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLSAgICB9
Ci0KLSAgICBpZiAoIXN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Ci0gICAgICAgIGFkZFNsb3dD
YXNlKG5vdEludDMyT3AxKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uobm90SW50MzJPcDIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIEp1bXAgZW5kID0ganVtcCgpOwotCi0gICAgLy8gRG91
YmxlIGxlc3MuCi0gICAgZW1pdEJpbmFyeURvdWJsZU9wKG9wY29kZSwgdGFyZ2V0LCBvcDEsIG9w
MiwgT3BlcmFuZFR5cGVzKCksIG5vdEludDMyT3AxLCBub3RJbnQzMk9wMiwgIWlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSksIGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkgfHwgIWlzT3BlcmFuZENv
bnN0YW50SW50KG9wMikpOwotICAgIGVuZC5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdl
dCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCi17Ci0gICAgaWYgKGlzT3BlcmFuZENv
bnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwot
ICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMy
KGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkpLCB0YXJnZXQpOwotICAgIH0gZWxz
ZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewotICAgICAgICBlbWl0TG9hZChvcDEs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdU
MCwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMikuYXNJbnQzMigpKSksIHRhcmdldCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJlZ1QwLCBvcDIsIHJl
Z1QzLCByZWdUMik7Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoY29uZGl0aW9uLCByZWdUMCwg
cmVnVDIpLCB0YXJnZXQpOwotICAgIH0KLX0KLQotCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWQoaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCi17Ci0gICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKLSAgICAgICAg
ZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwotICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShj
b25kaXRpb24pLCByZWdUMiwgSW1tMzIoZ2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigp
KSwgcmVnVDApOwotICAgIH0gZWxzZSBpZiAoaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSkgewot
ICAgICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgIGNvbXBhcmUzMihj
b25kaXRpb24sIHJlZ1QwLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AyKS5hc0ludDMyKCkp
LCByZWdUMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZW1pdExvYWQyKG9wMSwgcmVnVDEsIHJl
Z1QwLCBvcDIsIHJlZ1QzLCByZWdUMik7Ci0gICAgICAgIGNvbXBhcmUzMihjb25kaXRpb24sIHJl
Z1QwLCByZWdUMiwgcmVnVDApOwotICAgIH0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDAp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coaW50IG9wMSwgaW50IG9w
MiwgdW5zaWduZWQgdGFyZ2V0LCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElP
TiAqb3BlcmF0aW9uKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUp
LCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsK
LSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgZW1pdExvYWQob3AxLCByZWdUMSwg
cmVnVDApOwotICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKGludmVydCA/
IFplcm8gOiBOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX3Vuc2lnbmVkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdExv
YWQob3AxLCByZWdUMSwgcmVnVDApOwotICAgIAotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihMZXNzVGhhbiwgcmVnVDAs
IFRydXN0ZWRJbW0zMigwKSkpOwotICAgIGVtaXRTdG9yZUludDMyKHJlc3VsdCwgcmVnVDAsIHJl
c3VsdCA9PSBvcDEpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pbmMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKLQot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVnVDEpKTsKLSAgICBhZGRTbG93Q2Fz
ZShicmFuY2hBZGQzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMyKDEpLCByZWdUMCkpOwotICAgIGVt
aXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9v
cF9kZWMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgc3JjRHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNyY0Rz
dCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90SW50MzIocmVn
VDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hTdWIzMihPdmVyZmxvdywgVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCkpOwotICAgIGVtaXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwot
fQotCi12b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKE9wY29kZUlEIG9wY29kZUlELCBpbnQg
ZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBPcGVyYW5kVHlwZXMgdHlwZXMsIEp1bXBMaXN0JiBub3RJ
bnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMsIGJv
b2wgb3AySXNJblJlZ2lzdGVycykKLXsKLSAgICBKdW1wTGlzdCBlbmQ7Ci0KLSAgICBpZiAoIW5v
dEludDMyT3AxLmVtcHR5KCkpIHsKLSAgICAgICAgLy8gRG91YmxlIGNhc2UgMTogT3AxIGlzIG5v
dCBpbnQzMjsgT3AyIGlzIHVua25vd24uCi0gICAgICAgIG5vdEludDMyT3AxLmxpbmsodGhpcyk7
Ci0KLSAgICAgICAgQVNTRVJUKG9wMUlzSW5SZWdpc3RlcnMpOwotCi0gICAgICAgIC8vIFZlcmlm
eSBPcDEgaXMgZG91YmxlLgotICAgICAgICBpZiAoIXR5cGVzLmZpcnN0KCkuZGVmaW5pdGVseUlz
TnVtYmVyKCkpCi0gICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZSwgcmVnVDEs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0KLSAgICAgICAgaWYgKCFvcDJJ
c0luUmVnaXN0ZXJzKQotICAgICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIpOwot
Ci0gICAgICAgIEp1bXAgZG91YmxlT3AyID0gYnJhbmNoMzIoQmVsb3csIHJlZ1QzLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSk7Ci0KLSAgICAgICAgaWYgKCF0eXBlcy5zZWNvbmQo
KS5kZWZpbml0ZWx5SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90SW50MzIocmVnVDMpKTsKLQotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMiwg
ZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgZG9UaGVNYXRoID0ganVtcCgpOwotCi0gICAgICAgIC8v
IExvYWQgT3AyIGFzIGRvdWJsZSBpbnRvIGRvdWJsZSByZWdpc3Rlci4KLSAgICAgICAgZG91Ymxl
T3AyLmxpbmsodGhpcyk7Ci0gICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMCk7Ci0K
LSAgICAgICAgLy8gRG8gdGhlIG1hdGguCi0gICAgICAgIGRvVGhlTWF0aC5saW5rKHRoaXMpOwot
ICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgICAgICAgICBjYXNlIG9wX2psZXNzOgot
ICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDIsIGZwUmVn
VDApLCBkc3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBvcF9q
bGVzc2VxOgotICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0g
ICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFs
LCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUo
b3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3Vi
bGVHcmVhdGVyVGhhbiwgZnBSZWdUMiwgZnBSZWdUMCksIGRzdCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIG9wX2pncmVhdGVyZXE6Ci0gICAgICAgICAgICAgICAg
ZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGZwUmVnVDIsIGZwUmVnVDApLCBk
c3QpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3M6
Ci0gICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIG9wX2pubGVzc2VxOgotICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91
YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcjoKLSAgICAg
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVk
LCBmcFJlZ1QwLCBmcFJlZ1QyKSwgZHN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6Ci0gICAgICAgICAgICAgICAgZW1pdExvYWREb3Vi
bGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShE
b3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QyKSwgZHN0KTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
ICghbm90SW50MzJPcDIuZW1wdHkoKSkKLSAgICAgICAgICAgIGVuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICB9Ci0KLSAgICBpZiAoIW5vdEludDMyT3AyLmVtcHR5KCkpIHsKLSAgICAgICAgLy8gRG91
YmxlIGNhc2UgMjogT3AxIGlzIGludDMyOyBPcDIgaXMgbm90IGludDMyLgotICAgICAgICBub3RJ
bnQzMk9wMi5saW5rKHRoaXMpOwotCi0gICAgICAgIEFTU0VSVChvcDJJc0luUmVnaXN0ZXJzKTsK
LQotICAgICAgICBpZiAoIW9wMUlzSW5SZWdpc3RlcnMpCi0gICAgICAgICAgICBlbWl0TG9hZFBh
eWxvYWQob3AxLCByZWdUMCk7Ci0KLSAgICAgICAgY29udmVydEludDMyVG9Eb3VibGUocmVnVDAs
IGZwUmVnVDApOwotCi0gICAgICAgIC8vIFZlcmlmeSBvcDIgaXMgZG91YmxlLgotICAgICAgICBp
ZiAoIXR5cGVzLnNlY29uZCgpLmRlZmluaXRlbHlJc051bWJlcigpKQotICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoMzIoQWJvdmUsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93
ZXN0VGFnKSkpOwotCi0gICAgICAgIC8vIERvIHRoZSBtYXRoLgotICAgICAgICBzd2l0Y2ggKG9w
Y29kZUlEKSB7Ci0gICAgICAgICAgICBjYXNlIG9wX2psZXNzOgotICAgICAgICAgICAgICAgIGVt
aXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgotICAgICAgICAg
ICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1Qx
KSwgZHN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6Ci0gICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAg
ICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbiwgZnBS
ZWdUMCwgZnBSZWdUMSksIGRzdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIG9wX2pncmVhdGVyZXE6Ci0gICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3Ay
LCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWwsIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3M6Ci0gICAgICAgICAgICAgICAg
ZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJy
YW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMSwgZnBS
ZWdUMCksIGRzdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIG9w
X2pubGVzc2VxOgotICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7
Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PclVu
b3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCksIGRzdCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcjoKLSAgICAgICAgICAgICAgICBlbWl0TG9h
ZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QxLCBmcFJlZ1Qw
KSwgZHN0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ugb3Bfam5n
cmVhdGVyZXE6Ci0gICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsK
LSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9y
VW5vcmRlcmVkLCBmcFJlZ1QxLCBmcFJlZ1QwKSwgZHN0KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGVuZC5saW5rKHRoaXMpOwot
fQotCi0vLyBNb2QgKCUpCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJ
TjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi12b2lkIEpJVDo6
ZW1pdF9vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSNpZiBDUFUo
WDg2KQotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBvcDEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBvcDIg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgLy8gTWFrZSBzdXJlIHJl
Z2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2IElESVYgaW5zdHJ1Y3Rpb25zLgotICAgIEFTU0VS
VChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVheCk7Ci0gICAgQVNTRVJUKHJlZ1QxID09IFg4NlJl
Z2lzdGVyczo6ZWR4KTsKLSAgICBBU1NFUlQocmVnVDIgPT0gWDg2UmVnaXN0ZXJzOjplY3gpOwot
ICAgIEFTU0VSVChyZWdUMyA9PSBYODZSZWdpc3RlcnM6OmVieCk7Ci0KLSAgICBlbWl0TG9hZDIo
b3AxLCByZWdUMCwgcmVnVDMsIG9wMiwgcmVnVDEsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdEludDMyKHJlZ1QxKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RJbnQz
MihyZWdUMCkpOwotCi0gICAgbW92ZShyZWdUMywgcmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaFRlc3QzMihaZXJvLCByZWdUMikpOwotICAgIEp1bXAgZGVub21pbmF0b3JOb3ROZWcxID0g
YnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVzdGVkSW1tMzIoLTEpKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMigtMjE0NzQ4MzY0Ny0xKSkp
OwotICAgIGRlbm9taW5hdG9yTm90TmVnMS5saW5rKHRoaXMpOwotICAgIHg4NkNvbnZlcnRUb0Rv
dWJsZVdvcmQzMigpOwotICAgIHg4NkRpdjMyKHJlZ1QyKTsKLSAgICBKdW1wIG51bWVyYXRvclBv
c2l0aXZlID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCByZWdUMywgVHJ1c3RlZEltbTMy
KDApKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0MzIoWmVybywgcmVnVDEpKTsKLSAgICBu
dW1lcmF0b3JQb3NpdGl2ZS5saW5rKHRoaXMpOwotICAgIGVtaXRTdG9yZUludDMyKGRzdCwgcmVn
VDEsIChvcDEgPT0gZHN0IHx8IG9wMiA9PSBkc3QpKTsKLSNlbHNlCi0gICAgSklUU2xvd1BhdGhD
YWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9tb2Qp
OwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX21vZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotI2lmIENQVShYODYpCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywg
Y3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfbW9kKTsKLSAgICBzbG93UGF0aENhbGwuY2Fs
bCgpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBV
TlVTRURfUEFSQU0oaXRlcik7Ci0gICAgLy8gV2Ugd291bGQgaGF2ZSByZWFsbHkgdXNlZnVsIGFz
c2VydGlvbnMgaGVyZSBpZiBpdCB3YXNuJ3QgZm9yIHRoZSBjb21waWxlcidzCi0gICAgLy8gaW5z
aXN0ZW5jZSBvbiBhdHRyaWJ1dGUgbm9yZXR1cm4uCi0gICAgLy8gUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRU5EOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKLSNlbmRpZiAvLyBF
TkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDUwYWI0OGIxNWFmNmQ1NmNkMWVkMGMzZGYyNTk2ZDI1MjhjMjE2
MjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM1MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLSNpZiBVU0UoSlNWQUxV
RTY0KQotI2luY2x1ZGUgIkpJVC5oIgotCi0jaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIK
LSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCi0jaW5jbHVk
ZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnBy
ZXRlci5oIgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKLSNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
Ci0jaW5jbHVkZSAiUmVzdWx0VHlwZS5oIgotI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgi
Ci0jaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKLSNpbmNsdWRlICJUaHVua0dlbmVyYXRvcnMu
aCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotCi1uYW1lc3BhY2UgSlND
IHsKLQotdm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
bikKLXsKLSAgICBpbnQgZHN0ID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19
Ci0KLXZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoT3Bjb2RlSUQgb3Bjb2RlLCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5mbyogaW5mbykKLXsKLSAgICBpbnQg
dGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBhcmd1bWVudHMg
PSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0g
aW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOwotICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGlu
c3RydWN0aW9uWzZdLnUub3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzLCByZWdUMSk7Ci0gICAgWl9KSVRPcGVyYXRpb25fRUpaWiBzaXplT3BlcmF0aW9uOwot
ICAgIGlmIChvcGNvZGUgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQotICAgICAg
ICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsK
LSAgICBlbHNlCi0gICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JW
YXJhcmdzOwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgcmVnVDEsIC1maXJzdEZy
ZWVSZWdpc3RlciwgZmlyc3RWYXJBcmdPZmZzZXQpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKC1m
aXJzdEZyZWVSZWdpc3RlciksIHJlZ1QxKTsKLSAgICBlbWl0U2V0VmFyYXJnc0ZyYW1lKCp0aGlz
LCByZXR1cm5WYWx1ZUdQUiwgZmFsc2UsIHJlZ1QxLCByZWdUMSk7Ci0gICAgYWRkUHRyKFRydXN0
ZWRJbW0zMigtKHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSArIFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIDUgKiBzaXplb2Yodm9pZCopKSkpLCByZWdUMSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1l
bnRzLCByZWdUMik7Ci0gICAgRl9KSVRPcGVyYXRpb25fRUZKWlogc2V0dXBPcGVyYXRpb247Ci0g
ICAgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCi0gICAgICAg
IHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7Ci0g
ICAgZWxzZQotICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0Zy
YW1lOwotICAgIGNhbGxPcGVyYXRpb24oc2V0dXBPcGVyYXRpb24sIHJlZ1QxLCByZWdUMiwgZmly
c3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKLSAgICBtb3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7
Ci0KLSAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVudCBjb3VudC4KLSAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4o
c2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihp
bmZvLT5hZGRyZXNzT2ZNYXhOdW1Bcmd1bWVudHMoKSwgcmVnVDApOwotICAgIEp1bXAgbm90Qmln
Z2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIs
IGluZm8tPmFkZHJlc3NPZk1heE51bUFyZ3VtZW50cygpKTsKLSAgICBub3RCaWdnZXN0Lmxpbmso
dGhpcyk7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6ZSAndGhpcycuCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih0aGlzVmFsdWUsIHJlZ1QwKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNz
KHJlZ1QxLCBDYWxsRnJhbWU6OnRoaXNBcmd1bWVudE9mZnNldCgpICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSkpOwotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2Yo
Q2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotfQotCi12
b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKLXsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwotICAgIHN0b3Jl
UHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZy
YW1lT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zm
c2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rl
ciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50
KCk7Ci0KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNhbGxFdmFsLCByZWdUMSk7Ci0KLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0KLSAgICBzYW1wbGVDb2RlQmxv
Y2sobV9jb2RlQmxvY2spOwotICAgIAotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9u
KTsKLX0KLQotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAg
ICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9j
b2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlu
a0luZm86OkNhbGwsIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKLQotICAg
IGludCByZWdpc3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0KLSAgICBh
ZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNp
emVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7Ci0KLSAgICBsb2FkNjQoQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwgc2l6
ZW9mKFJlZ2lzdGVyKSAqIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAtIHNpemVvZihDYWxsZXJGcmFt
ZUFuZFBDKSksIHJlZ1QwKTsKLSAgICBlbWl0RHVtYlZpcnR1YWxDYWxsKCp2bSgpLCBpbmZvKTsK
LSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvcihtX2NvZGVCbG9j
aykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwotCi0gICAgc2FtcGxl
Q29kZUJsb2NrKG1fY29kZUJsb2NrKTsKLSAgICAKLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0
cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlE
LCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQot
ewotICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICAvKiBD
YWxsZXIgYWx3YXlzOgotICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2Fs
bGVlIGNhbGxGcmFtZS4KLSAgICAgICAgLSBJbml0aWFsaXplcyBBcmd1bWVudENvdW50OyBDYWxs
ZXJGcmFtZTsgQ2FsbGVlLgotCi0gICAgICAgRm9yIGEgSlMgY2FsbDoKLSAgICAgICAgLSBDYWxs
ZWUgaW5pdGlhbGl6ZXMgUmV0dXJuUEM7IENvZGVCbG9jay4KLSAgICAgICAgLSBDYWxsZWUgcmVz
dG9yZXMgY2FsbEZyYW1lUmVnaXN0ZXIgYmVmb3JlIHJldHVybi4KLQotICAgICAgIEZvciBhIG5v
bi1KUyBjYWxsOgotICAgICAgICAtIENhbGxlciBpbml0aWFsaXplcyBSZXR1cm5QQzsgQ29kZUJs
b2NrLgotICAgICAgICAtIENhbGxlciByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBhZnRlciBy
ZXR1cm4uCi0gICAgKi8KLSAgICBDT01QSUxFX0FTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwp
ID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0KSwgY2FsbF9hbmRfY29uc3RydWN0X29wY29k
ZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7Ci0gICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdU
SChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIGNhbGxfYW5kX2Nh
bGxfdmFyYXJnc19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwotICAgIENPTVBJTEVfQVNT
RVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3Rf
dmFyYXJncyksIGNhbGxfYW5kX2NvbnN0cnVjdF92YXJhcmdzX29wY29kZXNfbXVzdF9iZV9zYW1l
X2xlbmd0aCk7Ci0gICAgQ09NUElMRV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBP
UENPREVfTEVOR1RIKG9wX3RhaWxfY2FsbCksIGNhbGxfYW5kX3RhaWxfY2FsbF9vcGNvZGVzX211
c3RfYmVfc2FtZV9sZW5ndGgpOwotICAgIENPTVBJTEVfQVNTRVJUKE9QQ09ERV9MRU5HVEgob3Bf
Y2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF90YWlsX2NhbGxfdmFyYXJncyksIGNhbGxfYW5kX3Rh
aWxfY2FsbF92YXJhcmdzX29wY29kZXNfbXVzdF9iZV9zYW1lX2xlbmd0aCk7Ci0gICAgQ09NUElM
RV9BU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cyksIGNhbGxfYW5kX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50c19vcGNvZGVzX211c3RfYmVfc2FtZV9sZW5ndGgpOwotCi0gICAgQ2FsbExpbmtJbmZvKiBp
bmZvID0gbnVsbHB0cjsKLSAgICBpZiAob3Bjb2RlSUQgIT0gb3BfY2FsbF9ldmFsKQotICAgICAg
ICBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwotICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfY29uc3RydWN0X3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQotICAgICAgICBjb21waWxlU2V0dXBWYXJhcmdzRnJh
bWUob3Bjb2RlSUQsIGluc3RydWN0aW9uLCBpbmZvKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaW50
IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotCi0gICAgICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAg
ZW1pdEdldFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1l
bnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCk7Ci0gICAgICAgICAgICBKdW1wIGRvbmUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICAgICAgICAgIHN0
b3JlMzIocmVnVDAsIGluc3RydWN0aW9uW09QQ09ERV9MRU5HVEgob3BfY2FsbCkgLSAyXS51LmFy
cmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsKLSAgICAgICAgICAg
IGRvbmUubGluayh0aGlzKTsKLSAgICAgICAgfQotICAgIAotICAgICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJG
cmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0g
ICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ0NvdW50KSwgQWRkcmVzcyhzdGFja1BvaW50
ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSk7Ci0gICAgfSAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KLSAgICAKLSAgICB1
aW50MzJfdCBieXRlY29kZU9mZnNldCA9IG1fY29kZUJsb2NrLT5ieXRlY29kZU9mZnNldChpbnN0
cnVjdGlvbik7Ci0gICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChieXRl
Y29kZU9mZnNldCkuYml0cygpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0
cyksIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgVGFnT2Zmc2V0KSk7Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDApOyAvLyByZWdUMCBob2xk
cyBjYWxsZWUuCi0gICAgc3RvcmU2NChyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0
ZXIpKSAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotCi0gICAgaWYgKG9wY29kZUlEID09
IG9wX2NhbGxfZXZhbCkgewotICAgICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgRGF0YUxhYmVsUHRyIGFkZHJlc3NPZkxpbmtl
ZEZ1bmN0aW9uQ2hlY2s7Ci0gICAgSnVtcCBzbG93Q2FzZSA9IGJyYW5jaFB0cldpdGhQYXRjaChO
b3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIFRydXN0ZWRJbW1Q
dHIobnVsbHB0cikpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlKTsKLQotICAgIEFTU0VSVCht
X2NhbGxDb21waWxhdGlvbkluZm8uc2l6ZSgpID09IGNhbGxMaW5rSW5mb0luZGV4KTsKLSAgICBp
bmZvLT5zZXRVcENhbGwoQ2FsbExpbmtJbmZvOjpjYWxsVHlwZUZvcihvcGNvZGVJRCksIENvZGVP
cmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm8uYXBwZW5kKENhbGxDb21waWxhdGlvbkluZm8oKSk7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25J
bmZvW2NhbGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5j
dGlvbkNoZWNrOwotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbExpbmtJbmZvID0gaW5mbzsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwp
IHsKLSAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7Ci0gICAgICAgIHNo
dWZmbGVEYXRhLm51bVBhc3NlZEFyZ3MgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIHNodWZmbGVEYXRhLnRhZ1R5cGVOdW1iZXIgPSBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXI7Ci0gICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9Ci0gICAgICAgICAgICBpbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgLyBzaXplb2Yo
UmVnaXN0ZXIpOwotICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShpbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsgKytpKSB7Ci0gICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0KLSAg
ICAgICAgICAgICAgICBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2soCi0gICAgICAg
ICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpIC0gaW5zdHJ1Y3Rpb25b
NF0udS5vcGVyYW5kLAotICAgICAgICAgICAgICAgICAgICBEYXRhRm9ybWF0SlMpOwotICAgICAg
ICB9Ci0gICAgICAgIHNodWZmbGVEYXRhLmNhbGxlZSA9Ci0gICAgICAgICAgICBWYWx1ZVJlY292
ZXJ5OjppbkdQUihyZWdUMCwgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgc2h1ZmZsZURhdGEuc2V0
dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKG1fY29kZUJsb2NrKTsKLSAgICAgICAgaW5mby0+c2V0RnJh
bWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7Ci0gICAgICAgIENhbGxGcmFtZVNodWZmbGVyKCp0
aGlzLCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7Ci0gICAgICAgIG1fY2FsbENv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2Vk
VGFpbENhbGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMpIHsKLSAgICAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwotICAgICAg
ICBwcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5m
b1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkVGFpbENhbGwoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxs
TGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwotCi0gICAgYWRk
UHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6
ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKLQotICAgIHNhbXBsZUNvZGVCbG9j
ayhtX2NvZGVCbG9jayk7Ci0gICAgCi0gICAgZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24p
OwotfQotCi12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlE
LCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQotewotICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoaW5z
dHJ1Y3Rpb24sIGl0ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzKQotICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0K
LSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5m
b0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7Ci0KLSAgICBtX2NhbGxDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9Ci0gICAgICAgIGVtaXRO
YWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dl
ZENvZGU8Tm9QdHJUYWc+KCkpOwotCi0gICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCB8
fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncykgewotICAgICAgICBhYm9ydFdpdGhS
ZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJs
b2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICBzYW1w
bGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwotICAgIAotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGlu
c3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2FsbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbCwgY3VycmVudElu
c3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdF9v
cF90YWlsX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21w
aWxlT3BDYWxsKG9wX3RhaWxfY2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfZXZhbCwg
Y3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9jYWxs
X3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxl
T3BDYWxsKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbF9mb3J3YXJk
X2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBp
bGVPcENhbGwob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NvbnN0
cnVjdF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29t
cGlsZU9wQ2FsbChvcF9jb25zdHJ1Y3RfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsKG9wX2Nv
bnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZShvcF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfdGFpbF9jYWxs
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgpOwotfQotIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2Nh
bGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShv
cF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX3RhaWxfY2FsbF92
YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3Zh
cmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY29u
c3RydWN0X3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKLX0KLSAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY29uc3RydWN0LCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKLSNlbmRpZiAvLyBFTkFC
TEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGJlZjEyY2ViOTU2OGJiYWM4Njg4NDlkODI0NWVj
ZjIyYjdlMDFiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDMzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLSNp
ZiBVU0UoSlNWQUxVRTMyXzY0KQotI2luY2x1ZGUgIkpJVC5oIgotCi0jaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVzLmgi
Ci0jaW5jbHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlJlc3Vs
dFR5cGUuaCIKLSNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgotI2luY2x1ZGUgIlN0YWNr
QWxpZ25tZW50LmgiCi0jaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSA8d3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIEpJVDo6ZW1p
dFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQotewotICAgIGludCBkc3Qg
PSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgp
OwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX3JldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHVuc2lnbmVk
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChk
c3QsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBjaGVja1N0YWNrUG9pbnRlckFsaWdubWVudCgpOwot
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLSAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OwotICAgIHJldCgpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2Uob3BfdGFpbF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF9ldmFsLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgpOwotfQotIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGNvbXBp
bGVPcENhbGxTbG93Q2FzZShvcF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Rh
aWxfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2Uob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2Uob3BfY29uc3RydWN0X3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRl
ciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLSAgICAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
b3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdGFp
bF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9w
Q2FsbChvcF90YWlsX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsX2V2YWwsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGNvbXBpbGVPcENhbGwob3BfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbF92YXJh
cmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2Fs
bChvcF90YWlsX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BD
YWxsKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotICAgIAotdm9pZCBKSVQ6OmVtaXRfb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21w
aWxlT3BDYWxsKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0gICAgCi12b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3Qo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsKG9w
X2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwot
fQotCi12b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKE9wY29kZUlEIG9wY29kZSwg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYWxsTGlua0luZm8qIGluZm8pCi17Ci0gICAgaW50
IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgYXJndW1lbnRz
ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9
IGluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKLSAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBp
bnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZChhcmd1bWVudHMsIHJlZ1Qx
LCByZWdUMCk7Ci0gICAgWl9KSVRPcGVyYXRpb25fRUpaWiBzaXplT3BlcmF0aW9uOwotICAgIGlm
IChvcGNvZGUgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQotICAgICAgICBzaXpl
T3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9yRm9yd2FyZEFyZ3VtZW50czsKLSAgICBl
bHNlCi0gICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JWYXJhcmdz
OwotICAgIGNhbGxPcGVyYXRpb24oc2l6ZU9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgLWZpcnN0RnJlZVJlZ2lzdGVyLCBmaXJzdFZhckFyZ09mZnNldCk7Ci0gICAgbW92ZShU
cnVzdGVkSW1tMzIoLWZpcnN0RnJlZVJlZ2lzdGVyKSwgcmVnVDEpOwotICAgIGVtaXRTZXRWYXJh
cmdzRnJhbWUoKnRoaXMsIHJldHVyblZhbHVlR1BSLCBmYWxzZSwgcmVnVDEsIHJlZ1QxKTsKLSAg
ICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lk
KikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgZW1pdExvYWQoYXJndW1l
bnRzLCByZWdUMiwgcmVnVDQpOwotICAgIEZfSklUT3BlcmF0aW9uX0VGSlpaIHNldHVwT3BlcmF0
aW9uOwotICAgIGlmIChvcGNvZGUgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQot
ICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwRm9yd2FyZEFyZ3VtZW50c0Zy
YW1lOwotICAgIGVsc2UKLSAgICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cFZh
cmFyZ3NGcmFtZTsKLSAgICBjYWxsT3BlcmF0aW9uKHNldHVwT3BlcmF0aW9uLCByZWdUMSwgSlNW
YWx1ZVJlZ3MocmVnVDIsIHJlZ1Q0KSwgZmlyc3RWYXJBcmdPZmZzZXQsIHJlZ1QwKTsKLSAgICBt
b3ZlKHJldHVyblZhbHVlR1BSLCByZWdUMSk7Ci0KLSAgICAvLyBQcm9maWxlIHRoZSBhcmd1bWVu
dCBjb3VudC4KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lU2xvdDo6YXJndW1l
bnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zm
c2V0KSwgcmVnVDIpOwotICAgIGxvYWQzMihpbmZvLT5hZGRyZXNzT2ZNYXhOdW1Bcmd1bWVudHMo
KSwgcmVnVDApOwotICAgIEp1bXAgbm90QmlnZ2VzdCA9IGJyYW5jaDMyKEFib3ZlLCByZWdUMCwg
cmVnVDIpOwotICAgIHN0b3JlMzIocmVnVDIsIGluZm8tPmFkZHJlc3NPZk1heE51bUFyZ3VtZW50
cygpKTsKLSAgICBub3RCaWdnZXN0LmxpbmsodGhpcyk7Ci0gICAgCi0gICAgLy8gSW5pdGlhbGl6
ZSAndGhpcycuCi0gICAgZW1pdExvYWQodGhpc1ZhbHVlLCByZWdUMiwgcmVnVDApOwotICAgIHN0
b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEsIFBheWxvYWRPZmZzZXQgKyAoQ2FsbEZyYW1lOjp0
aGlzQXJndW1lbnRPZmZzZXQoKSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkp
KSk7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMSwgVGFnT2Zmc2V0ICsgKENhbGxG
cmFtZTo6dGhpc0FyZ3VtZW50T2Zmc2V0KCkgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdp
c3RlcikpKSkpOwotICAgIAotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLX0KLQotdm9pZCBKSVQ6
OmNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCi17Ci0gICAgYWRkUHRy
KFRydXN0ZWRJbW0zMigtc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIHJlZ1QxKTsKLSAgICBzdG9yZVB0cihjYWxs
RnJhbWVSZWdpc3RlciwgQWRkcmVzcyhyZWdUMSwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNl
dCgpKSk7Ci0KLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHN0YWNrUG9pbnRlck9mZnNldEZvciht
X2NvZGVCbG9jaykgKiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNr
UG9pbnRlclJlZ2lzdGVyKTsKLQotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ2FsbEV2YWws
IHJlZ1QxKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKLQotICAg
IHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7Ci0gICAgCi0gICAgZW1pdFB1dENhbGxSZXN1
bHQoaW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2Uo
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBDYWxsTGlua0lu
Zm8qIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0gICAgaW5mby0+c2V0
VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2FsbCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwg
cmVnVDApOwotCi0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKLSAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotCi0gICAgZW1pdExvYWQoY2FsbGVlLCByZWdUMSwgcmVnVDApOwotICAgIGVt
aXREdW1iVmlydHVhbENhbGwoKnZtKCksIGluZm8pOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c3RhY2tQb2ludGVyT2Zmc2V0Rm9yKG1fY29kZUJsb2NrKSAqIHNpemVvZihSZWdpc3RlcikpLCBj
YWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIGNoZWNrU3RhY2tQ
b2ludGVyQWxpZ25tZW50KCk7Ci0KLSAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwot
ICAgIAotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCi17Ci0gICAgaW50IGNhbGxlZSA9IGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIC8qIENhbGxlciBhbHdheXM6Ci0gICAgICAgIC0g
VXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgotICAgICAgICAt
IEluaXRpYWxpemVzIEFyZ3VtZW50Q291bnQ7IENhbGxlckZyYW1lOyBDYWxsZWUuCi0KLSAgICAg
ICBGb3IgYSBKUyBjYWxsOgotICAgICAgICAtIENhbGxlZSBpbml0aWFsaXplcyBSZXR1cm5QQzsg
Q29kZUJsb2NrLgotICAgICAgICAtIENhbGxlZSByZXN0b3JlcyBjYWxsRnJhbWVSZWdpc3RlciBi
ZWZvcmUgcmV0dXJuLgotCi0gICAgICAgRm9yIGEgbm9uLUpTIGNhbGw6Ci0gICAgICAgIC0gQ2Fs
bGVyIGluaXRpYWxpemVzIFJldHVyblBDOyBDb2RlQmxvY2suCi0gICAgICAgIC0gQ2FsbGVyIHJl
c3RvcmVzIGNhbGxGcmFtZVJlZ2lzdGVyIGFmdGVyIHJldHVybi4KLSAgICAqLwotICAgIENhbGxM
aW5rSW5mbyogaW5mbyA9IG51bGxwdHI7Ci0gICAgaWYgKG9wY29kZUlEICE9IG9wX2NhbGxfZXZh
bCkKLSAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxsTGlua0luZm8oKTsKLSAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlE
ID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKLSAgICAgICAgY29tcGlsZVNldHVw
VmFyYXJnc0ZyYW1lKG9wY29kZUlELCBpbnN0cnVjdGlvbiwgaW5mbyk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLSAgICAgICAg
Ci0gICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewotICAgICAgICAgICAgZW1pdExvYWQocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFy
Z3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwgcmVnVDAsIHJlZ1QxKTsKLSAgICAgICAgICAg
IEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0gICAgICAgICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKLSAg
ICAgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBpbnN0cnVjdGlvbltPUENPREVfTEVOR1RIKG9wX2Nh
bGwpIC0gMl0udS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7
Ci0gICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBz
aXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVy
UmVnaXN0ZXIpOwotCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ0NvdW50KSwgQWRk
cmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAq
IHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgfSAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUg
KyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXpl
ZC4KLSAgICAKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGluc3Ry
dWN0aW9uKS5iaXRzKCk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwg
dGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKTsKLSAgICBlbWl0TG9hZChjYWxs
ZWUsIHJlZ1QxLCByZWdUMCk7IC8vIHJlZ1QxLCByZWdUMCBob2xkcyBjYWxsZWUuCi0KLSAgICBz
dG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90
OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwotICAgIHN0b3JlMzIocmVnVDEsIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKTsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKLSAg
ICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3Bf
dGFpbF9jYWxsX3ZhcmFyZ3MpCi0gICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKLQot
ICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwotCi0gICAgRGF0YUxhYmVs
UHRyIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7Ci0gICAgSnVtcCBzbG93Q2FzZSA9IGJy
YW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgcmVnVDAsIGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9u
Q2hlY2ssIFRydXN0ZWRJbW1QdHIobnVsbHB0cikpOwotCi0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nh
c2UpOwotCi0gICAgQVNTRVJUKG1fY2FsbENvbXBpbGF0aW9uSW5mby5zaXplKCkgPT0gY2FsbExp
bmtJbmZvSW5kZXgpOwotICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OmNhbGxUeXBl
Rm9yKG9wY29kZUlEKSwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDApOwotICAg
IG1fY2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQ2FsbENvbXBpbGF0aW9uSW5mbygpKTsKLSAg
ICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhCZWdpbiA9
IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7Ci0gICAgbV9jYWxsQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8gPSBpbmZvOwotCi0gICAgY2hlY2tTdGFj
a1BvaW50ZXJBbGlnbm1lbnQoKTsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8
IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbF9mb3J3YXJkX2FyZ3VtZW50cykgewotICAgICAgICBwcmVwYXJlRm9yVGFpbENhbGxTbG93
KCk7Ci0gICAgICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90
UGF0aE90aGVyID0gZW1pdE5ha2VkVGFpbENhbGwoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90
aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1Bv
aW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFt
ZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1BvaW50ZXJB
bGlnbm1lbnQoKTsKLQotICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7Ci0gICAgZW1p
dFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KQotewotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAg
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoaW5zdHJ1Y3Rpb24sIGl0ZXIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIG1vdmUoVHJ1
c3RlZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxM
aW5rSW5mbyksIHJlZ1QyKTsKLQotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCi0gICAgICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKLQotICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7Ci0KLSAgICBp
ZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzKSB7Ci0gICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENh
bGwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihz
dGFja1BvaW50ZXJPZmZzZXRGb3IobV9jb2RlQmxvY2spICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNh
bGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgY2hlY2tTdGFja1Bv
aW50ZXJBbGlnbm1lbnQoKTsKLQotICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7Ci0g
ICAgZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwotfQotCi19IC8vIG5hbWVzcGFjZSBK
U0MKLQotI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzODYyMWQ4ODZlNzBjNDE1OGVjZDdhOGVhYTlmNmRjMTEwNWNiODI5Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNDYyICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgUGF0cmljayBHYW5zdGVyZXIgPHBh
cm9nYUBwYXJvZ2EuY29tPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lmIEVOQUJMRShKSVQpCi0jaW5jbHVkZSAiSklU
LmgiCi0KLSNpbmNsdWRlICJCYXNpY0Jsb2NrTG9jYXRpb24uaCIKLSNpbmNsdWRlICJCeXRlY29k
ZVN0cnVjdHMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb24uaCIKLSNpbmNsdWRlICJIZWFwLmgiCi0j
aW5jbHVkZSAiSW50ZXJwcmV0ZXJJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSklUSW5saW5lcy5oIgot
I2luY2x1ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU0Nhc3QuaCIKLSNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCi0jaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIk1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
LmgiCi0jaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCi0jaW5jbHVkZSAiU3VwZXJTYW1wbGVyLmgi
Ci0jaW5jbHVkZSAiVGh1bmtHZW5lcmF0b3JzLmgiCi0jaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgi
Ci0jaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCi0jaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVy
LmgiCi0jaW5jbHVkZSAiV2F0Y2hkb2cuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSNpZiBVU0Uo
SlNWQUxVRTY0KQotCi12b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwotfQotCi0KLXZvaWQgSklUOjplbWl0X29wX2VuZChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIFJFTEVBU0VfQVNTRVJUKHJldHVyblZhbHVl
R1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0
UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICBy
ZXQoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0
QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSA9IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmpl
Y3Q+KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2Nh
dG9yRm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRS
ZWcgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJl
Z2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QyOwotCi0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAg
ICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBMaXN0IHNs
b3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIp
OwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6
Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdEluaXRp
YWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICB9Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0LCBzdHJ1Y3R1cmUpOwotICAgIGVtaXRTdG9y
ZUNlbGwoZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX292ZXJy
aWRlc19oYXNfaW5zdGFuY2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9wT3ZlcnJpZGVzSGFzSW5zdGFu
Y2UqPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3QoKTsK
LSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5jb25zdHJ1Y3RvcigpOwotICAgIGludCBo
YXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFzSW5zdGFuY2VWYWx1ZSgpOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7Ci0KLSAgICAvLyBX
ZSBkb24ndCBqdW1wIGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8u
Ci0gICAgSnVtcCBjdXN0b21oYXNJbnN0YW5jZVZhbHVlID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9u
UHJvdG9IYXNJbnN0YW5jZVN5bWJvbEZ1bmN0aW9uKCkpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY29uc3RydWN0b3IsIHJlZ1QwKTsKLQotICAgIC8vIENoZWNrIHRoYXQgY29uc3Ry
dWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBpcyBu
b3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8sIEFk
ZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0K
LSAgICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVk
SW1tMzIoVmFsdWVUcnVlKSwgcmVnVDApOwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVt
aXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGF1dG8mIGJ5dGVj
b2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BJbnN0YW5jZW9mKj4oY3VycmVudEluc3RydWN0aW9u
KTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUudmFsdWUoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5cGUoKTsKLQotICAg
IC8vIExvYWQgdGhlIG9wZXJhbmRzIChiYXNlVmFsLCBwcm90bywgYW5kIHZhbHVlIHJlc3BlY3Rp
dmVseSkgaW50byByZWdpc3RlcnMuCi0gICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFsIHNp
bmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1c2Ug
aXQgZm9yIHRoZSByZXN1bHQuCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvdG8sIHJlZ1QxKTsKLSAgICAKLSAg
ICAvLyBDaGVjayB0aGF0IHByb3RvIGFyZSBjZWxscy4gYmFzZVZhbCBtdXN0IGJlIGEgY2VsbCAt
IHRoaXMgaXMgY2hlY2tlZCBieSB0aGUgZ2V0X2J5X2lkIGZvciBTeW1ib2wuaGFzSW5zdGFuY2Uu
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QyLCB2YWx1ZSk7Ci0gICAgZW1p
dEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QxLCBwcm90byk7Ci0KLSAgICBKSVRJbnN0YW5j
ZU9mR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksCi0gICAgICAgIFJl
Z2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgcmVnVDAsIC8v
IHJlc3VsdAotICAgICAgICByZWdUMiwgLy8gdmFsdWUKLSAgICAgICAgcmVnVDEsIC8vIHByb3Rv
Ci0gICAgICAgIHJlZ1QzLCByZWdUNCk7IC8vIHNjcmF0Y2gKLSAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7Ci0gICAgbV9pbnN0YW5jZU9mcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9p
bnN0YW5jZW9mKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
LSAgICAKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9m
c1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkluc3RhbmNl
T2ZPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QyLCByZWdUMSk7Ci0g
ICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oSW5zdHJ1Y3Rpb24qKQotewotICAgIC8v
IFRoaXMgYWx3YXlzIGdvZXMgdG8gc2xvdyBwYXRoIHNpbmNlIHdlIGV4cGVjdCBpdCB0byBiZSBy
YXJlLgotICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci19Ci0gICAgCi12b2lkIEpJVDo6ZW1pdF9v
cF9pc19lbXB0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KEVxdWFsLCByZWdUMCwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSwgcmVnVDApOwotCi0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lz
dGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDAp
OwotICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QwKTsKLQotICAgIGNvbXBhcmU2
NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZVVuZGVmaW5lZCksIHJlZ1QwKTsKLSAg
ICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNDZWxsLmxpbmsodGhpcyk7Ci0gICAg
SnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihN
YXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1Qw
KTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBp
c01hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVy
ZSgqdm0oKSwgcmVnVDAsIHJlZ1QxLCByZWdUMik7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29t
cGFyZVB0cihFcXVhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBub3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGJveEJv
b2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICAKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdU
MCk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFs
c2UpKSwgcmVnVDApOwotICAgIHRlc3Q2NChaZXJvLCByZWdUMCwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSksIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1Zh
bHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICAK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgdGVzdDY0KE5v
blplcm8sIHJlZ1QwLCB0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBib3hCb29s
ZWFuKHJlZ1QwLCBKU1ZhbHVlUmVncyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgIGludCB0eXBlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICBjb21wYXJl
OChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMih0eXBlKSwgcmVnVDApOwotICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVS
ZWdzIHsgcmVnVDAgfSk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxs
LmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlZ1QwKTsK
LQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0K
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgSnVtcCBpc05v
dENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgY29tcGFyZTgoQWJvdmVPckVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihyZWdUMCwgSlNWYWx1
ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBpc05vdENl
bGwubGluayh0aGlzKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVnVDAp
OwotCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgQVNTRVJUKGNhbGxGcmFtZVJlZ2lzdGVyICE9IHJlZ1QxKTsKLSAgICBB
U1NFUlQocmVnVDEgIT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIEFTU0VSVChyZXR1cm5WYWx1ZUdQ
UiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBpbiAl
ZWF4LgotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgcmV0dXJuVmFsdWVHUFIpOwotCi0gICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1l
bnQoKTsKLSAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBp
bG9ndWUoKTsKLSAgICByZXQoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZl
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYywgcmVn
VDApOwotICAgIAotICAgIEp1bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlz
KTsKLQotICAgIGlmIChkc3QgIT0gc3JjKQotICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci0KLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QxKTsKLSAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgcmVnVDAsIHJlZ1QxKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kLCByZWdUMCk7Ci0KLSAgICAvLyBJbnZlcnQgYWdhaW5zdCBKU1ZhbHVlKGZhbHNl
KTsgaWYgdGhlIHZhbHVlIHdhcyB0YWdnZWQgYXMgYSBib29sZWFuLCB0aGVuIGFsbCBiaXRzIHdp
bGwgYmUKLSAgICAvLyBjbGVhciBvdGhlciB0aGFuIHRoZSBsb3cgYml0ICh3aGljaCB3aWxsIGJl
IDAgb3IgMSBmb3IgZmFsc2Ugb3IgdHJ1ZSBpbnB1dHMgcmVzcGVjdGl2ZWx5KS4KLSAgICAvLyBU
aGVuIGludmVydCBhZ2FpbnN0IEpTVmFsdWUodHJ1ZSksIHdoaWNoIHdpbGwgYWRkIHRoZSB0YWcg
YmFjayBpbiwgYW5kIGZsaXAgdGhlIGxvdyBiaXQuCi0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVnVDApOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90Pih+MSkpKSk7Ci0gICAgeG9yNjQoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlVHJ1ZSkpLCByZWdUMCk7Ci0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9q
ZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgR1BSUmVnIHZh
bHVlID0gcmVnVDA7Ci0gICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QxOwotICAgIEdQUlJlZyBzY3Jh
dGNoID0gcmVnVDI7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSB0cnVlOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCB2YWx1ZSk7Ci0gICAgZW1pdENvbnZlcnRWYWx1ZVRvQm9vbGVhbigqdm0o
KSwgSlNWYWx1ZVJlZ3ModmFsdWUpLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEs
IHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKTsKLQotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdCksIHRhcmdl
dCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7Ci0gICAgSnVt
cCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0KLSAgICAvLyBGaXJzdCwg
aGFuZGxlIEpTQ2VsbCBjYXNlcyAtIGNoZWNrIE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgYml0IG9u
IHRoZSBzdHJ1Y3R1cmUuCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZz
ZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgZW1pdExv
YWRTdHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgYWRkSnVt
cChicmFuY2hQdHIoRXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0
T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCBtYXNxdWVyYWRlc0dsb2JhbE9i
amVjdElzRm9yZWlnbiA9IGp1bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0
ZSBjYXNlcyAtIHVuZGVmaW5lZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOwotICAgIGFk
ZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVsbCgpKSkpLCB0YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgaXNOb3RNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbWFzcXVlcmFkZXNHbG9iYWxPYmplY3RJc0Zv
cmVpZ24ubGluayh0aGlzKTsKLX07Ci12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzcmMsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQot
ICAgIC8vIEZpcnN0LCBoYW5kbGUgSlNDZWxsIGNhc2VzIC0gY2hlY2sgTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCBiaXQgb24gdGhlIHN0cnVjdHVyZS4KLSAgICBhZGRKdW1wKGJyYW5jaFRlc3Q4KFpl
cm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQpKSwgdGFyZ2V0KTsKLSAgICBlbWl0TG9hZFN0
cnVjdHVyZSgqdm0oKSwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBhZGRKdW1wKGJy
YW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1
bXAoKTsKLQotICAgIC8vIE5vdyBoYW5kbGUgdGhlIGltbWVkaWF0ZSBjYXNlcyAtIHVuZGVmaW5l
ZCAmIG51bGwKLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIGFuZDY0KFRydXN0ZWRJ
bW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOwotICAgIGFkZEp1bXAoYnJhbmNoNjQoTm90
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSkpLCB0
YXJnZXQpOyAgICAgICAgICAgIAotCi0gICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgU3BlY2lhbDo6UG9pbnRlciBwdHIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5zcGVj
aWFsUG9pbnRlcjsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjLCByZWdUMCk7
Ci0gICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwg
VHJ1c3RlZEltbVB0cihhY3R1YWxQb2ludGVyRm9yKG1fY29kZUJsb2NrLCBwdHIpKSk7Ci0gICAg
c3RvcmUzMihUcnVzdGVkSW1tMzIoMSksICZjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
KTsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLSAgICBlcXVhbC5saW5rKHRoaXMpOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAg
IGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVhbihy
ZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9v
cF9qZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwLCBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNoMzIoRXF1
YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2p0cnVl
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgdW5zaWduZWQgdGFyZ2V0
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIEdQUlJlZyB2YWx1ZSA9
IHJlZ1QwOwotICAgIEdQUlJlZyByZXN1bHQgPSByZWdUMTsKLSAgICBHUFJSZWcgc2NyYXRjaCA9
IHJlZ1QyOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gdHJ1
ZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIHZhbHVlKTsKLSAgICBlbWl0Q29udmVydFZhbHVlVG9Cb29sZWFuKCp2bSgpLCBKU1Zh
bHVlUmVncyh2YWx1ZSksIHJlc3VsdCwgc2NyYXRjaCwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
OwotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJlc3VsdCksIHRhcmdldCk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQsIHJlZ1QwLCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kLCByZWdUMSk7
Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAg
IGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QwLCByZWdUMCk7Ci0gICAgYm94Qm9vbGVh
bihyZWdUMCwgSlNWYWx1ZVJlZ3MgeyByZWdUMCB9KTsKLQotICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2puZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXJzKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1Qw
LCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBT
bG93Q2FzZUlmTm90SW50KHJlZ1QwLCByZWdUMSwgcmVnVDIpOwotICAgIGFkZEp1bXAoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMSksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgQVNTRVJU
KHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKLSAgICBjb3B5Q2FsbGVlU2F2ZXNUb0VudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSAg
ICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgcmVnVDApOwot
ICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwotfQotCi12b2lkIEpJVDo6Y29tcGls
ZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3Ry
aWN0RXFUeXBlIHR5cGUpCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKHNyYzEsIHJlZ1QwLCBzcmMyLCByZWdUMSk7Ci0gICAg
Ci0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGggYXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4K
LSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0gICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMikpOwotICAgIAotICAgIC8vIEp1bXAgc2xvdyBp
ZiBlaXRoZXIgaXMgYSBkb3VibGUuIEZpcnN0IHRlc3QgaWYgaXQncyBhbiBpbnRlZ2VyLCB3aGlj
aCBpcyBmaW5lLCBhbmQgdGhlbiB0ZXN0Ci0gICAgLy8gaWYgaXQncyBhIGRvdWJsZS4KLSAgICBK
dW1wIGxlZnRPSyA9IGJyYW5jaElmSW50MzIocmVnVDApOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmTnVtYmVyKHJlZ1QwKSk7Ci0gICAgbGVmdE9LLmxpbmsodGhpcyk7Ci0gICAgSnVtcCByaWdo
dE9LID0gYnJhbmNoSWZJbnQzMihyZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1i
ZXIocmVnVDEpKTsKLSAgICByaWdodE9LLmxpbmsodGhpcyk7Ci0KLSAgICBpZiAodHlwZSA9PSBD
b21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKQotICAgICAgICBjb21wYXJlNjQoRXF1YWws
IHJlZ1QxLCByZWdUMCwgcmVnVDApOwotICAgIGVsc2UKLSAgICAgICAgY29tcGFyZTY0KE5vdEVx
dWFsLCByZWdUMSwgcmVnVDAsIHJlZ1QwKTsKLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVl
UmVncyB7IHJlZ1QwIH0pOwotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGNvbXBpbGVPcFN0cmljdEVxKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGls
ZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25zdHJp
Y3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcFN0
cmljdEVxKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0
RXEpOwotfQotCi12b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQotewotICAgIGlu
dCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBzcmMx
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMiA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhzcmMxLCByZWdUMCwgc3JjMiwgcmVnVDEpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGJvdGgg
YXJlIGNlbGxzICh0byBjb3ZlciBzdHJpbmdzKS4KLSAgICBtb3ZlKHJlZ1QwLCByZWdUMik7Ci0g
ICAgb3I2NChyZWdUMSwgcmVnVDIpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdU
MikpOwotCi0gICAgLy8gSnVtcCBzbG93IGlmIGVpdGhlciBpcyBhIGRvdWJsZS4gRmlyc3QgdGVz
dCBpZiBpdCdzIGFuIGludGVnZXIsIHdoaWNoIGlzIGZpbmUsIGFuZCB0aGVuIHRlc3QKLSAgICAv
LyBpZiBpdCdzIGEgZG91YmxlLgotICAgIEp1bXAgbGVmdE9LID0gYnJhbmNoSWZJbnQzMihyZWdU
MCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOdW1iZXIocmVnVDApKTsKLSAgICBsZWZ0T0su
bGluayh0aGlzKTsKLSAgICBKdW1wIHJpZ2h0T0sgPSBicmFuY2hJZkludDMyKHJlZ1QxKTsKLSAg
ICBhZGRTbG93Q2FzZShicmFuY2hJZk51bWJlcihyZWdUMSkpOwotICAgIHJpZ2h0T0subGluayh0
aGlzKTsKLQotICAgIGlmICh0eXBlID09IENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEp
Ci0gICAgICAgIGFkZEp1bXAoYnJhbmNoNjQoRXF1YWwsIHJlZ1QxLCByZWdUMCksIHRhcmdldCk7
Ci0gICAgZWxzZQotICAgICAgICBhZGRKdW1wKGJyYW5jaDY0KE5vdEVxdWFsLCByZWdUMSwgcmVn
VDApLCB0YXJnZXQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BTdHJpY3RFcUp1bXAoY3Vy
cmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjdXJyZW50SW5zdHJ1Y3Rpb24sIENv
bXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2pzdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZWdUMCwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1
cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmlj
dGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJlZ1QwLCByZWdUMSk7Ci0g
ICAgZW1pdEp1bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwg
dGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmNWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsK
LSAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE51bWJlcihyZWdUMCkpOwotCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGlmIChzcmNWUmVnICE9IGRzdFZSZWcpCi0g
ICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0VlJlZyk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX3RvX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IGludCBzcmNWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHNyY1ZSZWcsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmTm90Q2VsbChyZWdUMCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5n
KHJlZ1QwKSk7Ci0KLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0VlJlZyA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyY1ZSZWcgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjVlJlZywg
cmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRWYWx1ZVBy
b2ZpbGluZ1NpdGUoKTsKLSAgICBpZiAoc3JjVlJlZyAhPSBkc3RWUmVnKQotICAgICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdFZSZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jYXRj
aChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7
Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1QzKTsKLSAgICBsb2FkNjQoQWRk
cmVzcyhyZWdUMywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpLCBjYWxsRnJhbWVSZWdp
c3Rlcik7Ci0gICAgc3RvcmVQdHIoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgQWRkcmVzcyhyZWdU
MywgVk06OmNhbGxGcmFtZUZvckNhdGNoT2Zmc2V0KCkpKTsKLQotICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIoc3RhY2tQb2ludGVyT2Zmc2V0Rm9yKGNvZGVCbG9jaygpKSAqIHNpemVvZihSZWdpc3Rl
cikpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgY2Fs
bE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ2hlY2tJZkV4Y2VwdGlvbklzVW5j
YXRjaGFibGVBbmROb3RpZnlQcm9maWxlcik7Ci0gICAgSnVtcCBpc0NhdGNoYWJsZUV4Y2VwdGlv
biA9IGJyYW5jaFRlc3QzMihaZXJvLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAganVtcFRvRXhjZXB0
aW9uSGFuZGxlcigqdm0oKSk7Ci0gICAgaXNDYXRjaGFibGVFeGNlcHRpb24ubGluayh0aGlzKTsK
LQotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX3ZtKSwgcmVnVDMpOwotICAgIGxvYWQ2NChBZGRy
ZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgc3RvcmU2NChU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpLCBBZGRyZXNzKHJlZ1QzLCBW
TTo6ZXhjZXB0aW9uT2Zmc2V0KCkpKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotCi0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAs
IEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSksIHJlZ1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgLy8gRklYTUU6IGNvbnNpZGVyIGlubGluZSBjYWNoaW5nIHRoZSBwcm9jZXNz
IG9mIGRvaW5nIE9TUiBlbnRyeSwgaW5jbHVkaW5nCi0gICAgLy8gYXJndW1lbnQgdHlwZSBwcm9v
ZnMsIHN0b3JpbmcgbG9jYWxzIHRvIHRoZSBidWZmZXIsIGV0YwotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU1OTgKLQotICAgIFZhbHVlUHJvZmlsZUFu
ZE9wZXJhbmRCdWZmZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZUFuZE9wZXJh
bmRCdWZmZXIqPihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5wb2ludGVyKTsKLSAgICBpZiAoYnVm
ZmVyIHx8ICFzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoLCBtX2J5dGVjb2RlT2Zmc2V0KTsKLSAgICBlbHNlCi0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNoQW5kVmFsdWVQ
cm9maWxlLCBtX2J5dGVjb2RlT2Zmc2V0KTsKLSAgICBhdXRvIHNraXBPU1JFbnRyeSA9IGJyYW5j
aFRlc3RQdHIoWmVybywgcmV0dXJuVmFsdWVHUFIpOwotICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2
ZXMoKTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBFeGNlcHRpb25IYW5kbGVyUHRyVGFnKTsK
LSAgICBza2lwT1NSRW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVt
aXRQcm9maWxpbmcoKSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2Zp
bGVBbmRPcGVyYW5kJiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJl
Z1QwKTsKLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvZmlsZS5tX29wZXJh
bmQsIHJlZ3MpOwotICAgICAgICAgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShwcm9maWxlLm1f
cHJvZmlsZSk7Ci0gICAgICAgIH0pOwotICAgIH0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKEluc3RydWN0aW9u
KikKLXsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuLi4KLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGludCBjdXJyZW50U2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudFNjb3BlLCBy
ZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQo
KSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBzY3J1dGlu
ZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KLSAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJl
Y29yZChqdW1wVGFibGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJl
Y29yZDo6SW1tZWRpYXRlKSk7Ci0gICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwotCi0g
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGluZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblN3aXRjaEltbVdpdGhVbmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxl
SW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIEpTU3dpdGNoUHRyVGFnKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2gg
ZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgU2ltcGxlSnVt
cFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJsZSh0YWJsZUlu
ZGV4KTsKLSAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5
dGVjb2RlT2Zmc2V0LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcikpOwot
ICAgIGp1bXBUYWJsZS0+ZW5zdXJlQ1RJVGFibGUoKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NydXRpbmVlLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0
Y2hDaGFyV2l0aFVua25vd25LZXlUeXBlLCByZWdUMCwgdGFibGVJbmRleCk7Ci0gICAganVtcChy
ZXR1cm5WYWx1ZUdQUiwgSlNTd2l0Y2hQdHJUYWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgc2l6
ZV90IHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVu
c2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwot
ICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
Ci0KLSAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJh
Y2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxl
ID0gJm1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAg
bV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29kZU9mZnNl
dCwgZGVmYXVsdE9mZnNldCkpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY3J1dGlu
ZWUsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblN3aXRjaFN0cmluZ1dpdGhV
bmtub3duS2V5VHlwZSwgcmVnVDAsIHRhYmxlSW5kZXgpOwotICAgIGp1bXAocmV0dXJuVmFsdWVH
UFIsIEpTU3dpdGNoUHRyVGFnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRl
YnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vRGVidWdnZXJSZXF1
ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25EZWJ1ZywgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgbm9EZWJ1
Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VxX251bGwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNyYzEsIHJl
Z1QwKTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQot
ICAgIEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywg
QWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1t
MzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCBy
ZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwot
Ci0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgZW1pdExvYWRT
dHJ1Y3R1cmUoKnZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwot
ICAgIGNvbXBhcmVQdHIoRXF1YWwsIHJlZ1QwLCByZWdUMiwgcmVnVDApOwotICAgIEp1bXAgd2Fz
Tm90SW1tZWRpYXRlID0ganVtcCgpOwotCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQot
ICAgIGFuZDY0KFRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVnVDApOwotICAgIGNv
bXBhcmU2NChFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihWYWx1ZU51bGwpLCByZWdUMCk7Ci0K
LSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLSAgICB3YXNOb3RNYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0KLSAgICBib3hCb29sZWFuKHJlZ1QwLCBKU1ZhbHVlUmVn
cyB7IHJlZ1QwIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc3JjMSwgcmVnVDApOwotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOwotCi0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWQgPSBicmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZv
RmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHdhc05vdE1hc3F1ZXJh
ZGVzQXNVbmRlZmluZWQgPSBqdW1wKCk7Ci0KLSAgICBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQu
bGluayh0aGlzKTsKLSAgICBlbWl0TG9hZFN0cnVjdHVyZSgqdm0oKSwgcmVnVDAsIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFs
T2JqZWN0T2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgY29tcGFyZVB0cihOb3RFcXVhbCwgcmVnVDAs
IHJlZ1QyLCByZWdUMCk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAg
ICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgYW5kNjQoVHJ1c3RlZEltbTMyKH5UYWdC
aXRVbmRlZmluZWQpLCByZWdUMCk7Ci0gICAgY29tcGFyZTY0KE5vdEVxdWFsLCByZWdUMCwgVHJ1
c3RlZEltbTMyKFZhbHVlTnVsbCksIHJlZ1QwKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5r
KHRoaXMpOwotICAgIHdhc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQot
ICAgIGJveEJvb2xlYW4ocmVnVDAsIEpTVmFsdWVSZWdzIHsgcmVnVDAgfSk7Ci0gICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0
cnVjdGlvbiopCi17Ci0gICAgLy8gRXZlbiB0aG91Z2ggQ1RJIGRvZXNuJ3QgdXNlIHRoZW0sIHdl
IGluaXRpYWxpemUgb3VyIGNvbnN0YW50Ci0gICAgLy8gcmVnaXN0ZXJzIHRvIHphcCBzdGFsZSBw
b2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCi0gICAgLy8gb2JqZWN0
IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIHNpemVfdCBjb3VudCA9
IG1fY29kZUJsb2NrLT5tX251bVZhcnM7Ci0gICAgZm9yIChzaXplX3QgaiA9IENvZGVCbG9jazo6
bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBqIDwgY291
bnQ7ICsraikKLSAgICAgICAgZW1pdEluaXRSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChqKS5vZmZzZXQoKSk7Ci0KLSAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKLQot
ICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2dldF9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDApOwotICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNoYWluKCkpLCByZWdU
MCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIFdyaXRl
QmFycmllckJhc2U8U3RydWN0dXJlPiogY2FjaGVkU3RydWN0dXJlID0gJmN1cnJlbnRJbnN0cnVj
dGlvblsyXS51LnN0cnVjdHVyZTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMSk7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVn
VDEsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAgIGxvYWRQdHIoY2FjaGVkU3RydWN0dXJlLCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMikpOwotICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdU
Mik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpT
Q2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QyKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
aW50IGNhbGxlZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgV3JpdGVC
YXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlvbiA9ICZjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5qc0NlbGw7Ci0gICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWcgPSByZWdUMDsKLSAgICBSZWdp
c3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7Ci0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSBy
ZWdUMDsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwotICAgIFJlZ2lzdGVy
SUQgc3RydWN0dXJlUmVnID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBjYWNoZWRGdW5jdGlvblJl
ZyA9IHJlZ1Q0OwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIGNhbGxlZVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MoY2Fs
bGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRhKCkpLCByYXJlRGF0YVJlZyk7Ci0g
ICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByYXJlRGF0YVJlZykpOwotICAgIHhv
clB0cihUcnVzdGVkSW1tUHRyKEpTRnVuY3Rpb25Qb2lzb246OmtleSgpKSwgcmFyZURhdGFSZWcp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zm
c2V0T2ZPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6
Om9mZnNldE9mQWxsb2NhdG9yKCkpLCBhbGxvY2F0b3JSZWcpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhyYXJlRGF0YVJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxvY2F0aW9u
UHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mU3RydWN0dXJlKCkp
LCBzdHJ1Y3R1cmVSZWcpOwotCi0gICAgbG9hZFB0cihjYWNoZWRGdW5jdGlvbiwgY2FjaGVkRnVu
Y3Rpb25SZWcpOwotICAgIEp1bXAgaGFzU2Vlbk11bHRpcGxlQ2FsbGVlcyA9IGJyYW5jaFB0cihF
cXVhbCwgY2FjaGVkRnVuY3Rpb25SZWcsIFRydXN0ZWRJbW1QdHIoSlNDZWxsOjpzZWVuTXVsdGlw
bGVDYWxsZWVPYmplY3RzKCkpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWws
IGNhbGxlZVJlZywgY2FjaGVkRnVuY3Rpb25SZWcpKTsKLSAgICBoYXNTZWVuTXVsdGlwbGVDYWxs
ZWVzLmxpbmsodGhpcyk7Ci0KLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgYXV0byBidXR0
ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51bGxwdHIpOwotICAgIGVtaXRBbGxvY2F0ZUpTT2JqZWN0
KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjp2YXJpYWJsZSgpLCBhbGxvY2F0b3JSZWcsIHN0cnVj
dHVyZVJlZywgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBzbG93Q2FzZXMpOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoY2FsbGVlLCBzY3JhdGNoUmVnKTsKLSAgICBsb2FkUHRyKEFkZHJlc3Mo
c2NyYXRjaFJlZywgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZSYXJlRGF0YSgpKSwgc2NyYXRjaFJlZyk7
Ci0gICAgeG9yUHRyKFRydXN0ZWRJbW1QdHIoSlNGdW5jdGlvblBvaXNvbjo6a2V5KCkpLCBzY3Jh
dGNoUmVnKTsKLSAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoUmVnLCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7Ci0gICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHoo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSAgICBhZGRT
bG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci19Ci0KLQotLy8gU2xvdyBjYXNlcwotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIHJl
Z1QwLCByZWdUMSk7Ci0gICAgYm94Qm9vbGVhbihyZXR1cm5WYWx1ZUdQUiwgSlNWYWx1ZVJlZ3Mg
eyByZXR1cm5WYWx1ZUdQUiB9KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7Ci0KLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDAsIHJl
Z1QxKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmVnVDApOwotICAgIGJveEJvb2xl
YW4ocmV0dXJuVmFsdWVHUFIsIEpTVmFsdWVSZWdzIHsgcmV0dXJuVmFsdWVHUFIgfSk7Ci0gICAg
ZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBy
ZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgdW5zaWduZWQgdGFy
Z2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNvbXBhcmVFcSwgcmVnVDAsIHJlZ1QxKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7Ci0KLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBy
ZWdUMCwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihaZXJvLCBy
ZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0
YW5jZW9mX2N1c3RvbShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7Ci0KLSAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9wSW5zdGFuY2Vv
ZkN1c3RvbSo+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7Ci0gICAgaW50IGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUuY29uc3RydWN0b3IoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9
IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUoKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNvbnN0cnVjdG9y
LCByZWdUMSk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihoYXNJbnN0YW5jZVZhbHVlLCBy
ZWdUMik7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mQ3VzdG9tLCByZWdU
MCwgcmVnVDEsIHJlZ1QyKTsKLSAgICBib3hCb29sZWFuKHJldHVyblZhbHVlR1BSLCBKU1ZhbHVl
UmVncyB7IHJldHVyblZhbHVlR1BSIH0pOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoSW5zdHJ1Y3Rpb24qKQotewotICAgIC8vIEVtaXQgdGhl
IEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IAotICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0g
ICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaEFkZDMyKFBvc2l0aXZlT3JaZXJvLCBUcnVzdGVkSW1t
MzIoT3B0aW9uczo6ZXhlY3V0aW9uQ291bnRlckluY3JlbWVudEZvckxvb3AoKSksCi0gICAgICAg
ICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb2RlQmxvY2stPmFkZHJlc3NPZkpJVEV4ZWN1dGVDb3Vu
dGVyKCkpKSk7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KElu
c3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLSAgICAvLyBFbWl0IHRoZSBzbG93IHBhdGggZm9yIHRoZSBKSVQg
b3B0aW1pemF0aW9uIGNoZWNrOgotICAgIGlmIChjYW5CZU9wdGltaXplZCgpKSB7Ci0gICAgICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICAgICAgY29weUNhbGxlZVNhdmVzRnJvbUZy
YW1lT3JSZWdpc3RlclRvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5
RnJhbWUpOwotCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uT3B0aW1pemUsIG1fYnl0
ZWNvZGVPZmZzZXQpOwotICAgICAgICBKdW1wIG5vT3B0aW1pemVkRW50cnkgPSBicmFuY2hUZXN0
UHRyKFplcm8sIHJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQp
IHsKLSAgICAgICAgICAgIEp1bXAgb2sgPSBicmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
LCByZXR1cm5WYWx1ZUdQUiwgVHJ1c3RlZEltbVB0cihiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRp
Y19jYXN0PGludHB0cl90PigxMDAwKSkpKTsKLSAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihK
SVRVbnJlYXNvbmFibGVMb29wSGludEp1bXBUYXJnZXQpOwotICAgICAgICAgICAgb2subGluayh0
aGlzKTsKLSAgICAgICAgfQotICAgICAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgICAgIG5vT3B0aW1pemVkRW50cnkubGluayh0aGlzKTsK
LQotICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfbG9v
cF9oaW50KSk7Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oaXRlcik7Ci0jZW5kaWYK
LX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdHJhcHMoSW5zdHJ1Y3Rpb24qKQotewotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaFRlc3Q4KE5vblplcm8sIEFic29sdXRlQWRkcmVzcyhtX3ZtLT5u
ZWVkVHJhcEhhbmRsaW5nQWRkcmVzcygpKSkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9ub3Ao
SW5zdHJ1Y3Rpb24qKQotewotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2Jl
Z2luKEluc3RydWN0aW9uKikKLXsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFic29sdXRl
QWRkcmVzcyhiaXR3aXNlX2Nhc3Q8dm9pZCo+KCZnX3N1cGVyU2FtcGxlckNvdW50KSkpOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF9zdXBlcl9zYW1wbGVyX2VuZChJbnN0cnVjdGlvbiopCi17Ci0g
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBBYnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PHZv
aWQqPigmZ19zdXBlclNhbXBsZXJDb3VudCkpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2NoZWNrX3RyYXBzKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25IYW5kbGVUcmFwcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25ld19y
ZWdleHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbk5ld1JlZ2V4cCwgbV9jb2RlQmxvY2stPnJlZ2V4cChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7Ci0gICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXROZXdGdW5jQ29tbW9uKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgSnVtcCBsYXp5SnVtcDsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMCk7Ci0j
ZWxzZQotICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
LCByZWdUMCk7Ci0jZW5kaWYKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmNFeGVjID0gbV9j
b2RlQmxvY2stPmZ1bmN0aW9uRGVjbChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
LQotICAgIE9wY29kZUlEIG9wY29kZUlEID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJl
bnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpOwotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXdfZnVu
YykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiwgZHN0LCByZWdU
MCwgZnVuY0V4ZWMpOwotICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19nZW5lcmF0b3Jf
ZnVuYykKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlv
biwgZHN0LCByZWdUMCwgZnVuY0V4ZWMpOwotICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25l
d19hc3luY19mdW5jKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FzeW5jRnVu
Y3Rpb24sIGRzdCwgcmVnVDAsIGZ1bmNFeGVjKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJU
KG9wY29kZUlEID09IG9wX25ld19hc3luY19nZW5lcmF0b3JfZnVuYyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uTmV3QXN5bmNHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCByZWdUMCwg
ZnVuY0V4ZWMpOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2Z1bmMoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0TmV3RnVuY0NvbW1vbihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZ2VuZXJhdG9yX2Z1
bmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0TmV3RnVuY0Nv
bW1vbihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXN5
bmNfZ2VuZXJhdG9yX2Z1bmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBlbWl0TmV3RnVuY0NvbW1vbihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9uZXdfYXN5bmNfZnVuYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGVtaXROZXdGdW5jQ29tbW9uKGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0gICAgCi12
b2lkIEpJVDo6ZW1pdE5ld0Z1bmNFeHByQ29tbW9uKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSNlbHNlCi0gICAgZW1pdExvYWRQYXls
b2FkKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QwKTsKLSNlbmRpZgotCi0g
ICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbiA9IG1fY29kZUJsb2NrLT5mdW5jdGlvbkV4
cHIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29k
ZSk7Ci0KLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2Z1bmNfZXhwKQotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBkc3QsIHJlZ1QwLCBmdW5jdGlvbik7Ci0g
ICAgZWxzZSBpZiAob3Bjb2RlSUQgPT0gb3BfbmV3X2dlbmVyYXRvcl9mdW5jX2V4cCkKLSAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdHZW5lcmF0b3JGdW5jdGlvbiwgZHN0LCByZWdU
MCwgZnVuY3Rpb24pOwotICAgIGVsc2UgaWYgKG9wY29kZUlEID09IG9wX25ld19hc3luY19mdW5j
X2V4cCkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdBc3luY0Z1bmN0aW9uLCBk
c3QsIHJlZ1QwLCBmdW5jdGlvbik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChvcGNvZGVJ
RCA9PSBvcF9uZXdfYXN5bmNfZ2VuZXJhdG9yX2Z1bmNfZXhwKTsKLSAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25OZXdBc3luY0dlbmVyYXRvckZ1bmN0aW9uLCBkc3QsIHJlZ1QwLCBmdW5j
dGlvbik7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXdfZnVuY19leHAoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0TmV3RnVuY0V4cHJDb21tb24o
Y3VycmVudEluc3RydWN0aW9uKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmV3X2dlbmVyYXRv
cl9mdW5jX2V4cChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRO
ZXdGdW5jRXhwckNvbW1vbihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9uZXdfYXN5bmNfZnVuY19leHAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBlbWl0TmV3RnVuY0V4cHJDb21tb24oY3VycmVudEluc3RydWN0aW9uKTsKLX0KLSAg
ICAKLXZvaWQgSklUOjplbWl0X29wX25ld19hc3luY19nZW5lcmF0b3JfZnVuY19leHAoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0TmV3RnVuY0V4cHJDb21tb24o
Y3VycmVudEluc3RydWN0aW9uKTsKLX0KLSAgICAKLXZvaWQgSklUOjplbWl0X29wX25ld19hcnJh
eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZXNJbmRleCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNpemUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIodmFsdWVzSW5kZXgg
KiBzaXplb2YoUmVnaXN0ZXIpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKLSAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFByb2ZpbGUsIGRzdCwKLSAgICAgICAgY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDAsIHNpemUp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXdfYXJyYXlfd2l0aF9zaXplKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNpemVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNpemVJbmRleCwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJy
YXlXaXRoU2l6ZUFuZFByb2ZpbGUsIGRzdCwKLSAgICAgICAgY3VycmVudEluc3RydWN0aW9uWzNd
LnUuYXJyYXlBbGxvY2F0aW9uUHJvZmlsZSwgcmVnVDApOwotI2Vsc2UKLSAgICBlbWl0TG9hZChz
aXplSW5kZXgsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplQW5kUHJvZmlsZSwgZHN0LAotICAgICAgICBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5hcnJheUFsbG9jYXRpb25Qcm9maWxlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsK
LSNlbmRpZgotfQotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLXZvaWQgSklUOjplbWl0X29wX2hhc19z
dHJ1Y3R1cmVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFz
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0b3Ig
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotCi0gICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcihiYXNlLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJh
dG9yLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKLQotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBB
ZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0cnVjdHVyZUlE
T2Zmc2V0KCkpKSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlW
YWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJy
YXlNb2RlIGFycmF5TW9kZSkKLXsKLSAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gJm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhd
OwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICAKLSAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIGxpa2UgVHlwZWRBcnJheXMgYW5kIEFyZ3VtZW50
cy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
NTAzMyBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTAzNC4K
LSAgICBKdW1wTGlzdCBzbG93Q2FzZXMgPSBlbWl0TG9hZEZvckFycmF5TW9kZShjdXJyZW50SW5z
dHJ1Y3Rpb24sIGFycmF5TW9kZSwgYmFkVHlwZSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0g
anVtcCgpOwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2sp
OwotICAgIAotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWw8
Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNs
b3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0
cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZh
bHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgp
KTsKLSAgICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7Ci0gICAgCi0g
ICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAg
ICAgICJCYXNlbGluZSBoYXNfaW5kZXhlZF9wcm9wZXJ0eSBzdHViIGZvciAlcywgcmV0dXJuIHBv
aW50ICVwIiwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZh
bHVlKCkpOwotICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoSnVtcChieVZhbEluZm8t
PmJhZFR5cGVKdW1wLCBDb2RlTG9jYXRpb25MYWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlW
YWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRy
VGFnPihvcGVyYXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwot
ICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygpOwot
ICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwg
cmVnVDEpOwotCi0gICAgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6
ZXJvLWV4dGVuZGluZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0
ZXIuCi0gICAgLy8gV2UgY2hlY2sgdGhlIHZhbHVlIGFzIGlmIGl0IHdhcyBhIHVpbnQzMiBhZ2Fp
bnN0IHRoZSBtX3ZlY3Rvckxlbmd0aCAtIHdoaWNoIHdpbGwgYWx3YXlzIGZhaWwgaWYKLSAgICAv
LyBudW1iZXIgd2FzIHNpZ25lZCBzaW5jZSBtX3ZlY3Rvckxlbmd0aCBpcyBhbHdheXMgbGVzcyB0
aGFuIGludG1heCAoc2luY2UgdGhlIHRvdGFsIGFsbG9jYXRpb24KLSAgICAvLyBzaXplIGlzIGFs
d2F5cyBsZXNzIHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVl
biBjb3JyZWN0IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQotICAgIC8vIHRvIDY0LWJpdHMgaXMg
bmVjZXNzYXJ5IHNpbmNlIGl0J3MgdXNlZCBpbiB0aGUgYWRkcmVzcyBjYWxjdWxhdGlvbi4gV2Ug
emVybyBleHRlbmQgcmF0aGVyIHRoYW4gc2lnbgotICAgIC8vIGV4dGVuZGluZyBzaW5jZSBpdCBt
YWtlcyBpdCBlYXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBjYXNlLgotICAg
IHplcm9FeHRlbmQzMlRvUHRyKHJlZ1QxLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwotICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRo
Q2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRl
eGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3Nl
QXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLQotICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igb3RoZXIgdHlwZXMgbGlrZSBUeXBlZEFycmF5cyBhbmQg
QXJndW1lbnRzLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM1MDMzIGFuZCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM1MDM0LgotICAgIEp1bXBMaXN0IHNsb3dDYXNlcyA9IGVtaXRMb2FkRm9yQXJyYXlNb2RlKGN1
cnJlbnRJbnN0cnVjdGlvbiwgbW9kZSwgYmFkVHlwZSk7Ci0gICAgCi0gICAgbW92ZShUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpLCByZWdUMCk7Ci0KLSAgICBh
ZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOwotICAgIAot
ICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKLQotICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbElu
Zm8sIG1fYnl0ZWNvZGVPZmZzZXQsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJv
ZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hh
c19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOwotCi0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwotICAg
IAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIGRzdCwgcmVnVDAsIHJl
Z1QxLCBieVZhbEluZm8pOwotCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2Fs
bDsKLSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwotfQotCi12b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZGlyZWN0X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJh
c2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1
cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGEgY2VsbAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7Ci0KLSAgICAvLyBDaGVjayB0
aGUgc3RydWN0dXJlCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdU
Mik7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIEFk
ZHJlc3MocmVnVDIsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6Y2FjaGVkU3RydWN0dXJlSURP
ZmZzZXQoKSkpKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldAotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW5kZXgsIHJlZ1QxKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRoYW4g
dGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBpbmxp
bmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBBZGRyZXNzKHJlZ1QyLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hl
ZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpTT2Jq
ZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBzaWduRXh0ZW5kMzJU
b1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0KSwgcmVnVDApOwotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKLQotICAg
IC8vIE90aGVyd2lzZSBpdCdzIG91dCBvZiBsaW5lCi0gICAgb3V0T2ZMaW5lQWNjZXNzLmxpbmso
dGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCByZWdUMCk7Ci0gICAgc3ViMzIoQWRkcmVzcyhyZWdUMiwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRJbmxpbmVDYXBhY2l0eU9mZnNldCgpKSwgcmVnVDEpOwotICAgIG5l
ZzMyKHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGlu
dDMyX3Qgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4ob2Zmc2V0
SW5CdXR0ZXJmbHkoZmlyc3RPdXRPZkxpbmVPZmZzZXQpKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSk7Ci0gICAgbG9hZDY0KEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIG9mZnNl
dE9mRmlyc3RQcm9wZXJ0eSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGlu
ZGV4LCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihlbnVtZXJhdG9yLCByZWdU
MSk7Ci0gICAgSnVtcCBpbkJvdW5kcyA9IGJyYW5jaDMyKEJlbG93LCByZWdUMCwgQWRkcmVzcyhy
ZWdUMSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjplbmRTdHJ1Y3R1cmVQcm9wZXJ0eUluZGV4
T2Zmc2V0KCkpKTsKLQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051
bGwoKSkpLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgaW5Cb3VuZHMu
bGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQcm9wZXJ0eU5hbWVF
bnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkpLCByZWdUMSk7Ci0g
ICAgc2lnbkV4dGVuZDMyVG9QdHIocmVnVDAsIHJlZ1QwKTsKLSAgICBsb2FkNjQoQmFzZUluZGV4
KHJlZ1QxLCByZWdUMCwgVGltZXNFaWdodCksIHJlZ1QwKTsKLQotICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihpbmRleCwgcmVnVDApOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihC
ZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvcjo6ZW5k
R2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKSksIHJlZ1QwKTsKLQotICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKLSAgICBpbkJvdW5kcy5saW5rKHRoaXMpOwotCi0gICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFByb3BlcnR5TmFtZXNWZWN0b3JP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBzaWduRXh0ZW5kMzJUb1B0cihyZWdUMCwgcmVnVDApOwot
ICAgIGxvYWQ2NChCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCBUaW1lc0VpZ2h0KSwgcmVnVDApOwot
ICAgIAotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9u
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUubG9jYXRpb247Ci0gICAgaW50IHZhbHVlVG9Qcm9m
aWxlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKLQotICAgIEp1bXBMaXN0IGp1bXBU
b0VuZDsKLQotICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwotCi0g
ICAgLy8gQ29tcGlsZSBpbiBhIHByZWRpY3RpdmUgdHlwZSBjaGVjaywgaWYgcG9zc2libGUsIHRv
IHNlZSBpZiB3ZSBjYW4gc2tpcCB3cml0aW5nIHRvIHRoZSBsb2cuCi0gICAgLy8gVGhlc2UgdHlw
ZWNoZWNrcyBhcmUgaW5saW5lZCB0byBtYXRjaCB0aG9zZSBvZiB0aGUgNjQtYml0IEpTVmFsdWUg
dHlwZSBjaGVja3MuCi0gICAgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2VlblR5cGUg
PT0gVHlwZVVuZGVmaW5lZCkKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlVuZGVm
aW5lZChyZWdUMCkpOwotICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlvbi0+bV9sYXN0U2Vl
blR5cGUgPT0gVHlwZU51bGwpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoSWZOdWxs
KHJlZ1QwKSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlw
ZSA9PSBUeXBlQm9vbGVhbikKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZkJvb2xl
YW4ocmVnVDAsIHJlZ1QxKSk7Ci0gICAgZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xh
c3RTZWVuVHlwZSA9PSBUeXBlQW55SW50KQotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5j
aElmSW50MzIocmVnVDApKTsKLSAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFz
dFNlZW5UeXBlID09IFR5cGVOdW1iZXIpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNo
SWZOdW1iZXIocmVnVDApKTsKLSAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9jYXRpb24tPm1fbGFz
dFNlZW5UeXBlID09IFR5cGVTdHJpbmcpIHsKLSAgICAgICAgSnVtcCBpc05vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmU3Ry
aW5nKHJlZ1QwKSk7Ci0gICAgICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIH0KLQotICAg
IC8vIExvYWQgdGhlIHR5cGUgcHJvZmlsaW5nIGxvZyBpbnRvIFQyLgotICAgIFR5cGVQcm9maWxl
ckxvZyogY2FjaGVkVHlwZVByb2ZpbGVyTG9nID0gbV92bS0+dHlwZVByb2ZpbGVyTG9nKCk7Ci0g
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5cGVQcm9maWxlckxvZyksIHJlZ1QyKTsKLSAg
ICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQxLgotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHJlZ1Qx
KTsKLQotICAgIC8vIFN0b3JlIHRoZSBKU1ZhbHVlIG9udG8gdGhlIGxvZyBlbnRyeS4KLSAgICBz
dG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2
YWx1ZU9mZnNldCgpKSk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNl
bGwgaWYgVDAgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4K
LSAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
c3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6
c3RydWN0dXJlSURPZmZzZXQoKSkpOwotICAgIEp1bXAgc2tpcElzQ2VsbCA9IGp1bXAoKTsKLSAg
ICBub3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMCksIEFkZHJl
c3MocmVnVDEsIFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
KTsKLSAgICBza2lwSXNDZWxsLmxpbmsodGhpcyk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgdHlwZUxv
Y2F0aW9uIG9uIHRoZSBsb2cgZW50cnkuCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKGNhY2hlZFR5
cGVMb2NhdGlvbiksIHJlZ1QwKTsKLSAgICBzdG9yZTY0KHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBU
eXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojpsb2NhdGlvbk9mZnNldCgpKSk7Ci0KLSAgICAvLyBJ
bmNyZW1lbnQgdGhlIGN1cnJlbnQgbG9nIGVudHJ5LgotICAgIGFkZFB0cihUcnVzdGVkSW1tMzIo
c2l6ZW9mKFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnkpKSwgcmVnVDEpOwotICAgIHN0b3JlNjQo
cmVnVDEsIEFkZHJlc3MocmVnVDIsIFR5cGVQcm9maWxlckxvZzo6Y3VycmVudExvZ0VudHJ5T2Zm
c2V0KCkpKTsKLSAgICBKdW1wIHNraXBDbGVhckxvZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgcmVn
VDEsIFRydXN0ZWRJbW1QdHIoY2FjaGVkVHlwZVByb2ZpbGVyTG9nLT5sb2dFbmRQdHIoKSkpOwot
ICAgIC8vIENsZWFyIHRoZSBsb2cgaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nLgotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZyk7Ci0gICAgc2tp
cENsZWFyTG9nLmxpbmsodGhpcyk7Ci0KLSAgICBqdW1wVG9FbmQubGluayh0aGlzKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAg
c3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIs
ICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwotICAgIEdQUlJlZyBz
aGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdH
UFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVn
IHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqdm0o
KSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwotICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDMp
OwotICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNj
cmF0Y2gxUmVnLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hp
Y2tlbl90YWlsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgdXBkYXRl
VG9wQ2FsbEZyYW1lKCk7Ci0gICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYm
IG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0
cnVlLiIpOwotICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcg
c2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQg
cmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hh
ZG93Q2hpY2tlblBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2Ny
YXRjaDJSZWcpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDMpOwotICAgIGxvZ1NoYWRvd0NoaWNrZW5U
YWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgSlNWYWx1ZVJlZ3MocmVnVDIpLCByZWdUMywgbV9j
b2RlQmxvY2ssIENhbGxTaXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCkpOwotfQotCi0jZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9jb250cm9sX2Zs
b3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBCYXNpY0Jsb2NrTG9j
YXRpb24qIGJhc2ljQmxvY2tMb2NhdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51LmJhc2lj
QmxvY2tMb2NhdGlvbjsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGJhc2ljQmxvY2tMb2NhdGlv
bi0+ZW1pdEV4ZWN1dGVDb2RlKCp0aGlzKTsKLSNlbHNlCi0gICAgYmFzaWNCbG9ja0xvY2F0aW9u
LT5lbWl0RXhlY3V0ZUNvZGUoKnRoaXMsIHJlZ1QwKTsKLSNlbmRpZgotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9hcmd1bWVudF9jb3VudChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGxv
YWQzMihwYXlsb2FkRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpLCByZWdUMCk7Ci0g
ICAgc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0
ID0gSlNWYWx1ZVJlZ3M6OndpdGhUd29BdmFpbGFibGVSZWdzKHJlZ1QwLCByZWdUMSk7Ci0gICAg
Ym94SW50MzIocmVnVDAsIHJlc3VsdCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlc3VsdCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2dldF9yZXN0X2xlbmd0aChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIG51bVBhcmFtc1RvU2tpcCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51LnVuc2lnbmVkVmFsdWU7Ci0gICAgbG9hZDMyKHBheWxvYWRGb3Io
Q2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QwKTsKLSAgICBzdWIzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QwKTsKLSAgICBKdW1wIHplcm9MZW5ndGggPSBicmFuY2gzMihMZXNzVGhh
bk9yRXF1YWwsIHJlZ1QwLCBJbW0zMihudW1QYXJhbXNUb1NraXApKTsKLSAgICBzdWIzMihJbW0z
MihudW1QYXJhbXNUb1NraXApLCByZWdUMCk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBib3hJ
bnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKLSNlbmRpZgotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKLQotICAgIHplcm9MZW5ndGgubGluayh0aGlzKTsKLSNpZiBVU0UoSlNWQUxVRTY0
KQotICAgIG1vdmUoVHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc051bWJlcigwKSkpLCBy
ZWdUMCk7Ci0jZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0jZW5kaWYK
LQotICAgIGRvbmUubGluayh0aGlzKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7Ci0jZWxzZQotICAgIG1vdmUoVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIo
ZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApKTsKLSNlbmRpZgotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYXJndW1lbnQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQg
aW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdUMCk7Ci0jZWxzZQotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MocmVnVDEsIHJlZ1QwKTsKLSNlbmRpZgotCi0gICAgbG9hZDMyKHBh
eWxvYWRGb3IoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCksIHJlZ1QyKTsKLSAgICBKdW1w
IGFyZ3VtZW50T3V0T2ZCb3VuZHMgPSBicmFuY2gzMihMZXNzVGhhbk9yRXF1YWwsIHJlZ1QyLCBU
cnVzdGVkSW1tMzIoaW5kZXgpKTsKLSAgICBsb2FkVmFsdWUoYWRkcmVzc0ZvcihDYWxsRnJhbWVT
bG90Ojp0aGlzQXJndW1lbnQgKyBpbmRleCksIHJlc3VsdFJlZ3MpOwotICAgIEp1bXAgZG9uZSA9
IGp1bXAoKTsKLQotICAgIGFyZ3VtZW50T3V0T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBtb3Zl
VmFsdWUoanNVbmRlZmluZWQoKSwgcmVzdWx0UmVncyk7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0LCByZXN1bHRSZWdzKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAv
LyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJf
NjQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZWU5ZDI4NDY1MjcyMzE1ZjM4
ZDk3MjI2ZWQ3MjI1ZTRiZDJkODBiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDEyODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMCBQYXRyaWNrIEdhbnN0ZXJlciA8cGFyb2dhQHBhcm9nYS5jb20+Ci0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShKSVQpCi0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSNpbmNsdWRlICJKSVQuaCIK
LQotI2luY2x1ZGUgIkJ5dGVjb2RlU3RydWN0cy5oIgotI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgotI2luY2x1ZGUgIkV4Y2VwdGlvbi5oIgotI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNs
dWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNDYXN0LmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlv
bi5oIgotI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgotI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKLSNpbmNsdWRlICJNYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbC5oIgot
I2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgotI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgotCi1uYW1l
c3BhY2UgSlNDIHsKLQotdm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgCi0gICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMpKQot
ICAgICAgICBlbWl0U3RvcmUoZHN0LCBnZXRDb25zdGFudE9wZXJhbmQoc3JjKSk7Ci0gICAgZWxz
ZSB7Ci0gICAgICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgZW1pdFN0
b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2Vu
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIEFTU0VSVChyZXR1cm5W
YWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdExvYWQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEsIHJldHVyblZhbHVlR1BSKTsKLSAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7Ci0gICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKLSAgICByZXQo
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLSAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOwotICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9
IEpTRmluYWxPYmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7Ci0gICAgQWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+
KCptX3ZtKS0+YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9y
Rm9yTW9kZTo6QWxsb2NhdG9ySWZFeGlzdHMpOwotCi0gICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcg
PSByZXR1cm5WYWx1ZUdQUjsKLSAgICBSZWdpc3RlcklEIGFsbG9jYXRvclJlZyA9IHJlZ1QxOwot
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaFJlZyA9IHJlZ1QzOwotCi0gICAgaWYgKCFhbGxvY2F0b3Ip
Ci0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKLSAgICAgICAgYXV0byBidXR0ZXJmbHkgPSBUcnVzdGVkSW1tUHRyKG51
bGxwdHIpOwotICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9j
YXRvcjo6Y29uc3RhbnQoYWxsb2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0
cnVjdHVyZSksIGJ1dHRlcmZseSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1p
dEluaXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKLSAgICAgICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFN0
b3JlQ2VsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOwotICAg
IH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7
Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QsIHN0cnVjdHVyZSk7Ci0gICAg
ZW1pdFN0b3JlQ2VsbChkc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3Bfb3ZlcnJpZGVzX2hhc19pbnN0YW5jZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGF1dG8mIGJ5dGVjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BPdmVycmlkZXNI
YXNJbnN0YW5jZSo+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLmNvbnN0cnVjdG9yKCk7Ci0g
ICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5oYXNJbnN0YW5jZVZhbHVlKCk7Ci0K
LSAgICBlbWl0TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwotICAgIC8vIFdl
IGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3VsZCBkby4K
LSAgICBKdW1wIGhhc0luc3RhbmNlVmFsdWVOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2VsbCho
YXNJbnN0YW5jZVZhbHVlKTsKLSAgICBKdW1wIGN1c3RvbWhhc0luc3RhbmNlVmFsdWUgPSBicmFu
Y2hQdHIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+ZnVuY3Rpb25Qcm90b0hhc0luc3RhbmNlU3ltYm9sRnVuY3Rpb24oKSkpOwotCi0g
ICAgLy8gV2Uga25vdyB0aGF0IGNvbnN0cnVjdG9yIGlzIGFuIG9iamVjdCBmcm9tIHRoZSB3YXkg
Ynl0ZWNvZGUgaXMgZW1pdHRlZCBmb3IgaW5zdGFuY2VvZiBleHByZXNzaW9ucy4KLSAgICBlbWl0
TG9hZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QwKTsKLQotICAgIC8vIENoZWNrIHRoYXQgY29u
c3RydWN0b3IgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnIGkuZS4gdGhlIG9iamVjdCBp
cyBub3QgYSBDLUFQSSB1c2VyIG5vciBhIGJvdW5kIGZ1bmN0aW9uLgotICAgIHRlc3Q4KFplcm8s
IEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25l
ID0ganVtcCgpOwotCi0gICAgaGFzSW5zdGFuY2VWYWx1ZU5vdENlbGwubGluayh0aGlzKTsKLSAg
ICBjdXN0b21oYXNJbnN0YW5jZVZhbHVlLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoMSksIHJlZ1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOwotCi19Ci0KLXZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBhdXRvJiBieXRlY29kZSA9ICpyZWlu
dGVycHJldF9jYXN0PE9wSW5zdGFuY2VvZio+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgaW50
IGRzdCA9IGJ5dGVjb2RlLmRzdCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7
Ci0gICAgaW50IHByb3RvID0gYnl0ZWNvZGUucHJvdG90eXBlKCk7Ci0KLSAgICAvLyBMb2FkIHRo
ZSBvcGVyYW5kcyBpbnRvIHJlZ2lzdGVycy4KLSAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VW
YWwgc2luY2Ugd2Ugd2lsbCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVu
IHVzZSBpdCBmb3IgdGhlIHJlc3VsdC4KLSAgICBlbWl0TG9hZFBheWxvYWQodmFsdWUsIHJlZ1Qy
KTsKLSAgICBlbWl0TG9hZFBheWxvYWQocHJvdG8sIHJlZ1QxKTsKLQotICAgIC8vIENoZWNrIHRo
YXQgcHJvdG8gYXJlIGNlbGxzLiBiYXNlVmFsIG11c3QgYmUgYSBjZWxsIC0gdGhpcyBpcyBjaGVj
a2VkIGJ5IHRoZSBnZXRfYnlfaWQgZm9yIFN5bWJvbC5oYXNJbnN0YW5jZS4KLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwodmFsdWUpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChwcm90byk7Ci0gICAgCi0gICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciBnZW4oCi0gICAg
ICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUlu
ZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLAotICAgICAgICBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHJlZ1QwLCAvLyByZXN1bHQKLSAgICAgICAgcmVnVDIs
IC8vIHZhbHVlCi0gICAgICAgIHJlZ1QxLCAvLyBwcm90bwotICAgICAgICByZWdUMywgcmVnVDQp
OyAvLyBzY3JhdGNoCi0gICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRoaXMpOwotICAgIG1faW5z
dGFuY2VPZnMuYXBwZW5kKGdlbik7Ci0gICAgCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1Qw
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20oSW5zdHJ1Y3Rpb24q
KQotewotICAgIC8vIFRoaXMgYWx3YXlzIGdvZXMgdG8gc2xvdyBwYXRoIHNpbmNlIHdlIGV4cGVj
dCBpdCB0byBiZSByYXJlLgotICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNs
b3dDYXNlcyhpdGVyKTsKLSAgICAKLSAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9j
YXN0PE9wSW5zdGFuY2VvZio+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgaW50IGRzdCA9IGJ5
dGVjb2RlLmRzdCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7Ci0gICAgaW50
IHByb3RvID0gYnl0ZWNvZGUucHJvdG90eXBlKCk7Ci0gICAgCi0gICAgSklUSW5zdGFuY2VPZkdl
bmVyYXRvciYgZ2VuID0gbV9pbnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKLSAgICAK
LSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKLSAgICBlbWl0TG9hZFRhZyh2YWx1
ZSwgcmVnVDApOwotICAgIGVtaXRMb2FkVGFnKHByb3RvLCByZWdUMyk7Ci0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9mT3B0aW1pemUsIGRzdCwgZ2VuLnN0
dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QwLCByZWdUMiksIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMSkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBhdXRvJiBieXRlY29k
ZSA9ICpyZWludGVycHJldF9jYXN0PE9wSW5zdGFuY2VvZkN1c3RvbSo+KGN1cnJlbnRJbnN0cnVj
dGlvbik7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdCgpOwotICAgIGludCB2YWx1ZSA9IGJ5
dGVjb2RlLnZhbHVlKCk7Ci0gICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3RydWN0
b3IoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFs
dWUoKTsKLQotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2Fk
UGF5bG9hZChjb25zdHJ1Y3RvciwgcmVnVDIpOwotICAgIGVtaXRMb2FkKGhhc0luc3RhbmNlVmFs
dWUsIHJlZ1Q0LCByZWdUMyk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbnN0YW5jZU9m
Q3VzdG9tLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVn
VDQsIHJlZ1QzKSk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKLX0K
LSAgICAKLXZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICAKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBjb21wYXJlMzIoRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHJlZ1QwKTsK
LQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X2lzX3VuZGVmaW5lZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgCi0gICAgZW1pdExvYWQodmFs
dWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDEp
OwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVu
ZGVmaW5lZFRhZyksIHJlZ1QwKTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAg
aXNDZWxsLmxpbmsodGhpcyk7Ci0gICAgSnVtcCBpc01hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBi
cmFuY2hUZXN0OChOb25aZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vdE1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQgPSBqdW1wKCk7Ci0gICAgCi0gICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmso
dGhpcyk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCByZWdUMSk7Ci0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9i
YWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCBy
ZWdUMCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIG5vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQubGlu
ayh0aGlzKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7Ci0gICAgCi0gICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICBjb21wYXJlMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlZ1QwKTsK
LSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9p
c19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIAotICAgIGVtaXRMb2FkVGFnKHZhbHVl
LCByZWdUMCk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgY29tcGFy
ZTMyKEJlbG93LCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZyArIDEpLCBy
ZWdUMCk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBp
bnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCB0eXBl
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHZhbHVl
LCByZWdUMSwgcmVnVDApOwotICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QxKTsKLQotICAgIGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKHR5cGUpLCByZWdUMCk7Ci0gICAgSnVtcCBk
b25lID0ganVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlZ1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0U3Rv
cmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotCi0gICAgY29tcGFy
ZTgoQWJvdmVPckVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0g
anVtcCgpOwotCi0gICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7Ci0gICAgbW92ZShUcnVzdGVkSW1t
MzIoMCksIHJlZ1QwKTsKLQotICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1
bXAgaXNJbW0gPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5j
aElmT2JqZWN0KHJlZ1QwKSk7Ci0gICAgaXNJbW0ubGluayh0aGlzKTsKLQotICAgIGlmIChkc3Qg
IT0gc3JjKQotICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIGludCBmdW5jID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgbmFtZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAg
ZW1pdExvYWRQYXlsb2FkKGZ1bmMsIHJlZ1QxKTsKLSAgICBlbWl0TG9hZChuYW1lLCByZWdUMywg
cmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCByZWdU
MSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25v
dChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWRUYWcoc3JjLCByZWdUMCk7Ci0KLSAg
ICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3RCb29sZWFuKHJlZ1QxLCBJbnZhbGlkR1BSUmVnKSk7Ci0gICAgeG9yMzIoVHJ1c3RlZEltbTMy
KDEpLCByZWdUMCk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDAsIChkc3QgPT0gc3Jj
KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2pmYWxzZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGludCBjb25kID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotCi0gICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEpTVmFsdWVS
ZWdzIHZhbHVlKHJlZ1QxLCByZWdUMCk7Ci0gICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKLSAg
ICBHUFJSZWcgcmVzdWx0ID0gcmVnVDM7Ci0gICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVz
QXNVbmRlZmluZWQgPSB0cnVlOwotICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oKnZtKCks
IHZhbHVlLCByZXN1bHQsIHNjcmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKLQotICAg
IGFkZEp1bXAoYnJhbmNoVGVzdDMyKFplcm8sIHJlc3VsdCksIHRhcmdldCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2p0cnVlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0g
ICAgaW50IGNvbmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0
TG9hZChjb25kLCByZWdUMSwgcmVnVDApOwotICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRl
c0FzVW5kZWZpbmVkID0gdHJ1ZTsKLSAgICBKU1ZhbHVlUmVncyB2YWx1ZShyZWdUMSwgcmVnVDAp
OwotICAgIEdQUlJlZyBzY3JhdGNoID0gcmVnVDI7Ci0gICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1Qz
OwotICAgIGVtaXRDb252ZXJ0VmFsdWVUb0Jvb2xlYW4oKnZtKCksIHZhbHVlLCByZXN1bHQsIHNj
cmF0Y2gsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKTsKLQotICAgIGFkZEp1bXAoYnJhbmNoVGVz
dDMyKE5vblplcm8sIHJlc3VsdCksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2pl
cV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IHNyYyA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVn
VDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDEpOwotCi0gICAgSnVtcCBpc05vdE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQgPSBicmFuY2hUZXN0
OChaZXJvLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIFRy
dXN0ZWRJbW0zMihNYXNxdWVyYWRlc0FzVW5kZWZpbmVkKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92ZShU
cnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAgICBh
ZGRKdW1wKGJyYW5jaFB0cihFcXVhbCwgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSksIHJlZ1QwKSwgdGFyZ2V0KTsKLSAgICBKdW1wIG1hc3F1ZXJhZGVzR2xv
YmFsT2JqZWN0SXNGb3JlaWduID0ganVtcCgpOwotCi0gICAgLy8gTm93IGhhbmRsZSB0aGUgaW1t
ZWRpYXRlIGNhc2VzIC0gdW5kZWZpbmVkICYgbnVsbAotICAgIGlzSW1tZWRpYXRlLmxpbmsodGhp
cyk7Ci0gICAgc3RhdGljX2Fzc2VydCgoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnICsgMSA9PSBKU1Zh
bHVlOjpOdWxsVGFnKSAmJiAoSlNWYWx1ZTo6TnVsbFRhZyAmIDB4MSksICIiKTsKLSAgICBvcjMy
KFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIGFkZEp1bXAoYnJhbmNoSWZOdWxsKHJlZ1Qx
KSwgdGFyZ2V0KTsKLQotICAgIGlzTm90TWFzcXVlcmFkZXNBc1VuZGVmaW5lZC5saW5rKHRoaXMp
OwotICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmsodGhpcyk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0K
LSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBKdW1wIGlzSW1tZWRpYXRl
ID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLQotICAgIGFkZEp1bXAoYnJhbmNoVGVzdDgoWmVy
bywgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpLCB0YXJnZXQpOwotICAgIGxvYWRQdHIoQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0g
ICAgYWRkSnVtcChicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpLCByZWdUMCksIHRhcmdldCk7Ci0gICAgSnVtcCB3YXNOb3RJ
bW1lZGlhdGUgPSBqdW1wKCk7Ci0KLSAgICAvLyBOb3cgaGFuZGxlIHRoZSBpbW1lZGlhdGUgY2Fz
ZXMgLSB1bmRlZmluZWQgJiBudWxsCi0gICAgaXNJbW1lZGlhdGUubGluayh0aGlzKTsKLQotICAg
IHN0YXRpY19hc3NlcnQoKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyArIDEgPT0gSlNWYWx1ZTo6TnVs
bFRhZykgJiYgKEpTVmFsdWU6Ok51bGxUYWcgJiAweDEpLCAiIik7Ci0gICAgb3IzMihUcnVzdGVk
SW1tMzIoMSksIHJlZ1QxKTsKLSAgICBhZGRKdW1wKGJyYW5jaElmTm90TnVsbChyZWdUMSksIHRh
cmdldCk7Ci0KLSAgICB3YXNOb3RJbW1lZGlhdGUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6
OmVtaXRfb3Bfam5lcV9wdHIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBTcGVjaWFs
OjpQb2ludGVyIHB0ciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LnNwZWNpYWxQb2ludGVyOwot
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0K
LSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBub3RDZWxsID0gYnJh
bmNoSWZOb3RDZWxsKHJlZ1QxKTsKLSAgICBKdW1wIGVxdWFsID0gYnJhbmNoUHRyKEVxdWFsLCBy
ZWdUMCwgVHJ1c3RlZEltbVB0cihhY3R1YWxQb2ludGVyRm9yKG1fY29kZUJsb2NrLCBwdHIpKSk7
Ci0gICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDEpLCAm
Y3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgYWRkSnVtcChqdW1wKCksIHRh
cmdldCk7Ci0gICAgZXF1YWwubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZXEo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVn
VDMsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJl
Z1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1QxKSk7Ci0gICAgYWRkU2xv
d0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0
VGFnKSkpOwotCi0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLQot
ICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotCi0gICAgSnVtcExpc3Qgc3RvcmVSZXN1bHQ7Ci0gICAgSnVtcExpc3Qg
Z2VuZXJpY0Nhc2U7Ci0KLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0U2xvd0Nhc2UoaXRlcikp
OyAvLyB0YWdzIG5vdCBlcXVhbAotCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyB0YWdzIGVx
dWFsIGFuZCBKU0NlbGwKLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmco
cmVnVDApKTsKLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoYnJhbmNoSWZOb3RTdHJpbmcocmVnVDIp
KTsKLQotICAgIC8vIFN0cmluZyBjYXNlLgotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29t
cGFyZVN0cmluZ0VxLCByZWdUMCwgcmVnVDIpOwotICAgIHN0b3JlUmVzdWx0LmFwcGVuZChqdW1w
KCkpOwotCi0gICAgLy8gR2VuZXJpYyBjYXNlLgotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRT
bG93Q2FzZShpdGVyKSk7IC8vIGRvdWJsZXMKLSAgICBnZW5lcmljQ2FzZS5saW5rKHRoaXMpOwot
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKLQotICAgIHN0b3JlUmVzdWx0Lmxp
bmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BSKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfamVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgaW50IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMy
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkMihzcmMx
LCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Q2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgIGFkZEp1bXAoYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCByZWdUMiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjpjb21waWxlT3BF
cUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIENvbXBpbGVP
cEVxVHlwZSB0eXBlLCBpbnQganVtcFRhcmdldCkKLXsKLSAgICBKdW1wTGlzdCBkb25lOwotICAg
IEp1bXBMaXN0IGdlbmVyaWNDYXNlOwotCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNsb3dD
YXNlKGl0ZXIpKTsgLy8gdGFncyBub3QgZXF1YWwKLQotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gdGFncyBlcXVhbCBhbmQgSlNDZWxsCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElm
Tm90U3RyaW5nKHJlZ1QwKSk7Ci0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGJyYW5jaElmTm90U3Ry
aW5nKHJlZ1QyKSk7Ci0KLSAgICAvLyBTdHJpbmcgY2FzZS4KLSAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNvbXBhcmVTdHJpbmdFcSwgcmVnVDAsIHJlZ1QyKTsKLSAgICBlbWl0SnVtcFNsb3dU
b0hvdChicmFuY2hUZXN0MzIodHlwZSA9PSBDb21waWxlT3BFcVR5cGU6OkVxID8gTm9uWmVybyA6
IFplcm8sIHJldHVyblZhbHVlR1BSKSwganVtcFRhcmdldCk7Ci0gICAgZG9uZS5hcHBlbmQoanVt
cCgpKTsKLQotICAgIC8vIEdlbmVyaWMgY2FzZS4KLSAgICBnZW5lcmljQ2FzZS5hcHBlbmQoZ2V0
U2xvd0Nhc2UoaXRlcikpOyAvLyBkb3VibGVzCi0gICAgZ2VuZXJpY0Nhc2UubGluayh0aGlzKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVFcSwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci0gICAgZW1pdEp1bXBTbG93VG9I
b3QoYnJhbmNoVGVzdDMyKHR5cGUgPT0gQ29tcGlsZU9wRXFUeXBlOjpFcSA/IE5vblplcm8gOiBa
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIGp1bXBUYXJnZXQpOwotCi0gICAgZG9uZS5saW5rKHRoaXMp
OwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfamVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAg
Y29tcGlsZU9wRXFKdW1wU2xvdyhpdGVyLCBDb21waWxlT3BFcVR5cGU6OkVxLCBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLQotICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCBy
ZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmQ2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykp
KTsKLQotICAgIGNvbXBhcmUzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0KLSAg
ICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
bmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0KLSAgICBKdW1wTGlzdCBzdG9yZVJlc3VsdDsKLSAgICBKdW1wTGlzdCBn
ZW5lcmljQ2FzZTsKLQotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChnZXRTbG93Q2FzZShpdGVyKSk7
IC8vIHRhZ3Mgbm90IGVxdWFsCi0KLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHRhZ3MgZXF1
YWwgYW5kIEpTQ2VsbAotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhy
ZWdUMCkpOwotICAgIGdlbmVyaWNDYXNlLmFwcGVuZChicmFuY2hJZk5vdFN0cmluZyhyZWdUMikp
OwotCi0gICAgLy8gU3RyaW5nIGNhc2UuCi0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21w
YXJlU3RyaW5nRXEsIHJlZ1QwLCByZWdUMik7Ci0gICAgc3RvcmVSZXN1bHQuYXBwZW5kKGp1bXAo
KSk7Ci0KLSAgICAvLyBHZW5lcmljIGNhc2UuCi0gICAgZ2VuZXJpY0Nhc2UuYXBwZW5kKGdldFNs
b3dDYXNlKGl0ZXIpKTsgLy8gZG91YmxlcwotICAgIGdlbmVyaWNDYXNlLmxpbmsodGhpcyk7Ci0g
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlRXEsIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwotCi0gICAgc3RvcmVSZXN1bHQubGlu
ayh0aGlzKTsKLSAgICB4b3IzMihUcnVzdGVkSW1tMzIoMHgxKSwgcmV0dXJuVmFsdWVHUFIpOwot
ICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2puZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQg
dGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzIgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotCi0gICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCBy
ZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RF
cXVhbCwgcmVnVDEsIHJlZ1QzKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZDZWxsKHJlZ1Qx
KSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoQmVsb3csIHJlZ1QxLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwotCi0gICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVP
cEVxVHlwZTo6TkVxLCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLX0KLQotdm9p
ZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywg
cmVnVDIpOwotCi0gICAgLy8gQmFpbCBpZiB0aGUgdGFncyBkaWZmZXIsIG9yIGFyZSBkb3VibGUu
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
Okxvd2VzdFRhZykpKTsKLQotICAgIC8vIEp1bXAgdG8gYSBzbG93IGNhc2UgaWYgYm90aCBhcmUg
c3RyaW5ncyBvciBzeW1ib2xzIChub24gb2JqZWN0KS4KLSAgICBKdW1wIG5vdENlbGwgPSBicmFu
Y2hJZk5vdENlbGwocmVnVDEpOwotICAgIEp1bXAgZmlyc3RJc09iamVjdCA9IGJyYW5jaElmT2Jq
ZWN0KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMikpOwot
ICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICBmaXJzdElzT2JqZWN0LmxpbmsodGhpcyk7Ci0K
LSAgICAvLyBTaW1wbHkgY29tcGFyZSB0aGUgcGF5bG9hZHMuCi0gICAgaWYgKHR5cGUgPT0gQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkKLSAgICAgICAgY29tcGFyZTMyKEVxdWFsLCBy
ZWdUMCwgcmVnVDIsIHJlZ1QwKTsKLSAgICBlbHNlCi0gICAgICAgIGNvbXBhcmUzMihOb3RFcXVh
bCwgcmVnVDAsIHJlZ1QyLCByZWdUMCk7Ci0KLSAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDAp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcFN0cmljdEVxKGN1cnJlbnRJbnN0cnVjdGlvbiwg
Q29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X25zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBp
bGVPcFN0cmljdEVxKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpO
U3RyaWN0RXEpOwotfQotCi12b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQotewot
ICAgIGludCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGlu
dCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMiA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZDIoc3JjMSwg
cmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwotCi0gICAgLy8gQmFpbCBpZiB0aGUg
dGFncyBkaWZmZXIsIG9yIGFyZSBkb3VibGUuCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QxLCByZWdUMykpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEJlbG93LCBy
ZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKLQotICAgIC8vIEp1bXAg
dG8gYSBzbG93IGNhc2UgaWYgYm90aCBhcmUgc3RyaW5ncyBvciBzeW1ib2xzIChub24gb2JqZWN0
KS4KLSAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwotICAgIEp1bXAg
Zmlyc3RJc09iamVjdCA9IGJyYW5jaElmT2JqZWN0KHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdE9iamVjdChyZWdUMikpOwotICAgIG5vdENlbGwubGluayh0aGlzKTsKLSAgICBm
aXJzdElzT2JqZWN0LmxpbmsodGhpcyk7Ci0KLSAgICAvLyBTaW1wbHkgY29tcGFyZSB0aGUgcGF5
bG9hZHMuCi0gICAgaWYgKHR5cGUgPT0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSkK
LSAgICAgICAgYWRkSnVtcChicmFuY2gzMihFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsK
LSAgICBlbHNlCi0gICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCByZWdU
MiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpOwotfQotCi12
b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29t
cGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfanN0cmljdGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVy
KTsKLQotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwotICAgIGVtaXRK
dW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdl
dCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwotICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMiha
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2Vx
X251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1Qw
KTsKLSAgICBKdW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKLQotICAg
IEp1bXAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0gYnJhbmNoVGVzdDgoTm9uWmVybywgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
TWFzcXVlcmFkZXNBc1VuZGVmaW5lZCkpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdU
MSk7Ci0gICAgSnVtcCB3YXNOb3RNYXNxdWVyYWRlc0FzVW5kZWZpbmVkID0ganVtcCgpOwotCi0g
ICAgaXNNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLmxpbmsodGhpcyk7Ci0gICAgbG9hZFB0cihBZGRy
ZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgbW92
ZShUcnVzdGVkSW1tUHRyKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSksIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkp
LCByZWdUMik7Ci0gICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAg
ICBKdW1wIHdhc05vdEltbWVkaWF0ZSA9IGp1bXAoKTsKLQotICAgIGlzSW1tZWRpYXRlLmxpbmso
dGhpcyk7Ci0KLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVnVDEpOwotICAgIG9yMzIocmVnVDIsIHJl
Z1QxKTsKLQotICAgIHdhc05vdEltbWVkaWF0ZS5saW5rKHRoaXMpOwotICAgIHdhc05vdE1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQubGluayh0aGlzKTsKLQotICAgIGVtaXRTdG9yZUJvb2woZHN0LCBy
ZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
Ci0KLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0gICAgSnVtcCBpc0ltbWVkaWF0
ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7Ci0KLSAgICBKdW1wIGlzTWFzcXVlcmFkZXNBc1Vu
ZGVmaW5lZCA9IGJyYW5jaFRlc3Q4KE5vblplcm8sIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlw
ZUluZm9GbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE1hc3F1ZXJhZGVzQXNVbmRlZmluZWQp
KTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIEp1bXAgd2FzTm90TWFz
cXVlcmFkZXNBc1VuZGVmaW5lZCA9IGp1bXAoKTsKLQotICAgIGlzTWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCkpLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qy
LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSwgcmVnVDIpOwotICAgIGNvbXBhcmUz
MihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyLCByZWdUMSk7Ci0gICAgSnVtcCB3YXNOb3RJbW1lZGlh
dGUgPSBqdW1wKCk7Ci0KLSAgICBpc0ltbWVkaWF0ZS5saW5rKHRoaXMpOwotCi0gICAgY29tcGFy
ZTMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpLCByZWdU
Mik7Ci0gICAgY29tcGFyZTMyKE5vdEVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlVuZGVmaW5lZFRhZyksIHJlZ1QxKTsKLSAgICBhbmQzMihyZWdUMiwgcmVnVDEpOwotCi0gICAg
d2FzTm90SW1tZWRpYXRlLmxpbmsodGhpcyk7Ci0gICAgd2FzTm90TWFzcXVlcmFkZXNBc1VuZGVm
aW5lZC5saW5rKHRoaXMpOwotCi0gICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QxKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwotICAgIGNvcHlDYWxsZWVT
YXZlc1RvRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOwot
ICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxLCByZWdU
MCk7Ci0gICAgY2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIEpT
VmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZt
KCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LQotICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIEp1bXAgaXNJbnQzMiA9
IGJyYW5jaElmSW50MzIocmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKEFib3ZlT3JF
cXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7Ci0gICAgaXNJ
bnQzMi5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGlm
IChzcmMgIT0gZHN0KQotICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQot
Ci12b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLQotICAgIGVt
aXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90
Q2VsbChyZWdUMSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKSk7
Ci0KLSAgICBpZiAoc3JjICE9IGRzdCkKLSAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
Ci0KLSAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBhZGRTbG93Q2FzZShi
cmFuY2hJZk5vdENlbGwocmVnVDEpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVj
dChyZWdUMCkpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGlmIChzcmMg
IT0gZHN0KQotICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS0+dG9wRW50cnlGcmFtZSk7Ci0KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1Qz
KTsKLSAgICAvLyBvcGVyYXRpb25UaHJvdyByZXR1cm5zIHRoZSBjYWxsRnJhbWUgZm9yIHRoZSBo
YW5kbGVyLgotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hP
ZmZzZXQoKSksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRy
KG51bGxwdHIpLCBBZGRyZXNzKHJlZ1QzLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hPZmZzZXQoKSkp
OwotCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzdGFja1BvaW50ZXJPZmZzZXRGb3IoY29kZUJs
b2NrKCkpICogc2l6ZW9mKFJlZ2lzdGVyKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0KLSAgICBjYWxsT3BlcmF0aW9uTm9FeGNlcHRpb25DaGVjayhvcGVyYXRp
b25DaGVja0lmRXhjZXB0aW9uSXNVbmNhdGNoYWJsZUFuZE5vdGlmeVByb2ZpbGVyKTsKLSAgICBK
dW1wIGlzQ2F0Y2hhYmxlRXhjZXB0aW9uID0gYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVl
R1BSKTsKLSAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsKLSAgICBpc0NhdGNoYWJs
ZUV4Y2VwdGlvbi5saW5rKHRoaXMpOwotCi0gICAgbW92ZShUcnVzdGVkSW1tUHRyKG1fdm0pLCBy
ZWdUMyk7Ci0KLSAgICAvLyBOb3cgc3RvcmUgdGhlIGV4Y2VwdGlvbiByZXR1cm5lZCBieSBvcGVy
YXRpb25UaHJvdy4KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBy
ZWdUMSk7Ci0KLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwgQWRkcmVzcyhyZWdUMywgVk06
OmV4Y2VwdGlvbk9mZnNldCgpKSk7Ci0KLSAgICB1bnNpZ25lZCBleGNlcHRpb24gPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1Qx
LCByZWdUMik7Ci0KLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVn
VDApOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkg
KyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKLQotICAg
IHVuc2lnbmVkIHRocm93blZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LSAgICBlbWl0U3RvcmUodGhyb3duVmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0KLSNpZiBFTkFCTEUo
REZHX0pJVCkKLSAgICAvLyBGSVhNRTogY29uc2lkZXIgaW5saW5lIGNhY2hpbmcgdGhlIHByb2Nl
c3Mgb2YgZG9pbmcgT1NSIGVudHJ5LCBpbmNsdWRpbmcKLSAgICAvLyBhcmd1bWVudCB0eXBlIHBy
b29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhlIGJ1ZmZlciwgZXRjCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NTU5OAotCi0gICAgVmFsdWVQcm9maWxl
QW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlQW5kT3Bl
cmFuZEJ1ZmZlcio+KGN1cnJlbnRJbnN0cnVjdGlvblszXS51LnBvaW50ZXIpOwotICAgIGlmIChi
dWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsIG1fYnl0ZWNvZGVPZmZzZXQpOwotICAgIGVsc2UK
LSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2hBbmRWYWx1
ZVByb2ZpbGUsIG1fYnl0ZWNvZGVPZmZzZXQpOwotICAgIGF1dG8gc2tpcE9TUkVudHJ5ID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZXR1cm5WYWx1ZUdQUik7Ci0gICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwotICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKLSAgICBza2lwT1NS
RW50cnkubGluayh0aGlzKTsKLSAgICBpZiAoYnVmZmVyICYmIHNob3VsZEVtaXRQcm9maWxpbmco
KSkgewotICAgICAgICBidWZmZXItPmZvckVhY2goWyZdIChWYWx1ZVByb2ZpbGVBbmRPcGVyYW5k
JiBwcm9maWxlKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlUmVncyByZWdzKHJlZ1QxLCByZWdUMCk7
Ci0gICAgICAgICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb2ZpbGUubV9vcGVyYW5kLCBy
ZWdzKTsKLSAgICAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUocHJvZmlsZS5tX3Byb2Zp
bGUpOwotICAgICAgICB9KTsKLSAgICB9Ci0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi19Ci0K
LXZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShJbnN0cnVjdGlvbiopCi17
Ci0gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLi4uCi19Ci0KLXZvaWQg
SklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBpbnQgY3VycmVudFNjb3BlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICBlbWl0TG9hZFBheWxvYWQoY3VycmVudFNjb3BlLCByZWdUMCk7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsK
LSAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1Qw
KTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0gICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9y
IHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KLSAgICBT
aW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpOwotICAgIG1fc3dpdGNoZXMuYXBwZW5kKFN3aXRjaFJlY29yZChqdW1wVGFi
bGUsIG1fYnl0ZWNvZGVPZmZzZXQsIGRlZmF1bHRPZmZzZXQsIFN3aXRjaFJlY29yZDo6SW1tZWRp
YXRlKSk7Ci0gICAganVtcFRhYmxlLT5lbnN1cmVDVElUYWJsZSgpOwotCi0gICAgZW1pdExvYWQo
c2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dp
dGNoSW1tV2l0aFVua25vd25LZXlUeXBlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJs
ZUluZGV4KTsKLSAgICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgc2l6ZV90IHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3Rp
bmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgotICAgIFNpbXBsZUp1bXBUYWJs
ZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7
Ci0gICAgbV9zd2l0Y2hlcy5hcHBlbmQoU3dpdGNoUmVjb3JkKGp1bXBUYWJsZSwgbV9ieXRlY29k
ZU9mZnNldCwgZGVmYXVsdE9mZnNldCwgU3dpdGNoUmVjb3JkOjpDaGFyYWN0ZXIpKTsKLSAgICBq
dW1wVGFibGUtPmVuc3VyZUNUSVRhYmxlKCk7Ci0KLSAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJl
Z1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hDaGFyV2l0aFVu
a25vd25LZXlUeXBlLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCB0YWJsZUluZGV4KTsKLSAg
ICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBz
aXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
dW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLQotICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0
cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCi0gICAgU3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFi
bGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKLSAg
ICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQoanVtcFRhYmxlLCBtX2J5dGVjb2RlT2Zm
c2V0LCBkZWZhdWx0T2Zmc2V0KSk7Ci0KLSAgICBlbWl0TG9hZChzY3J1dGluZWUsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdXaXRoVW5rbm93
bktleVR5cGUsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOwotICAgIGp1
bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZGVi
dWcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBsb2FkMzIoY29kZUJs
b2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCksIHJlZ1QwKTsKLSAgICBKdW1wIG5vRGVi
dWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25EZWJ1ZywgY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0g
ICAgbm9EZWJ1Z2dlclJlcXVlc3RzLmxpbmsodGhpcyk7Ci19Ci0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfZW50ZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0RW50
ZXJPcHRpbWl6YXRpb25DaGVjaygpOwotICAgIAotICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2Rl
IGRvZXNuJ3QgdXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50Ci0gICAgLy8gcmVn
aXN0ZXJzIHRvIHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9s
b25naW5nCi0gICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJl
LgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytpKQot
ICAgICAgICBlbWl0U3RvcmUodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCksIGpz
VW5kZWZpbmVkKCkpOwotCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9lbnRlcik7Ci0gICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xv
dDo6Y2FsbGVlLCByZWdUMCk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsKLSAgICBlbWl0U3RvcmVDZWxsKGRzdCwg
cmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBjYWxsZWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVu
Y3Rpb24gPSAmY3VycmVudEluc3RydWN0aW9uWzRdLnUuanNDZWxsOwotICAgIFJlZ2lzdGVySUQg
Y2FsbGVlUmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0Owot
ICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBhbGxvY2F0
b3JSZWcgPSByZWdUMTsKLSAgICBSZWdpc3RlcklEIHN0cnVjdHVyZVJlZyA9IHJlZ1QyOwotICAg
IFJlZ2lzdGVySUQgY2FjaGVkRnVuY3Rpb25SZWcgPSByZWdUNDsKLSAgICBSZWdpc3RlcklEIHNj
cmF0Y2hSZWcgPSByZWdUMzsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChjYWxsZWUsIGNhbGxlZVJl
Zyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RGdW5jdGlvbihjYWxsZWVSZWcpKTsKLSAg
ICBsb2FkUHRyKEFkZHJlc3MoY2FsbGVlUmVnLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlJhcmVEYXRh
KCkpLCByYXJlRGF0YVJlZyk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCBy
YXJlRGF0YVJlZykpOwotICAgIGxvYWQzMihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJh
cmVEYXRhOjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZTo6b2Zmc2V0T2ZBbGxvY2F0b3IoKSksIGFsbG9jYXRvclJlZyk7Ci0gICAgbG9h
ZFB0cihBZGRyZXNzKHJhcmVEYXRhUmVnLCBGdW5jdGlvblJhcmVEYXRhOjpvZmZzZXRPZk9iamVj
dEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTo6b2Zmc2V0T2ZT
dHJ1Y3R1cmUoKSksIHN0cnVjdHVyZVJlZyk7Ci0KLSAgICBsb2FkUHRyKGNhY2hlZEZ1bmN0aW9u
LCBjYWNoZWRGdW5jdGlvblJlZyk7Ci0gICAgSnVtcCBoYXNTZWVuTXVsdGlwbGVDYWxsZWVzID0g
YnJhbmNoUHRyKEVxdWFsLCBjYWNoZWRGdW5jdGlvblJlZywgVHJ1c3RlZEltbVB0cihKU0NlbGw6
OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFB0
cihOb3RFcXVhbCwgY2FsbGVlUmVnLCBjYWNoZWRGdW5jdGlvblJlZykpOwotICAgIGhhc1NlZW5N
dWx0aXBsZUNhbGxlZXMubGluayh0aGlzKTsKLQotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICBhdXRvIGJ1dHRlcmZseSA9IFRydXN0ZWRJbW1QdHIobnVsbHB0cik7Ci0gICAgZW1pdEFsbG9j
YXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OnZhcmlhYmxlKCksIGFsbG9jYXRv
clJlZywgc3RydWN0dXJlUmVnLCBidXR0ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7Ci0g
ICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3RvX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBXcml0ZUJh
cnJpZXJCYXNlPFN0cnVjdHVyZT4qIGNhY2hlZFN0cnVjdHVyZSA9ICZjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5zdHJ1Y3R1cmU7Ci0gICAgaW50IHRoaXNSZWdpc3RlciA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZCh0aGlzUmVnaXN0ZXIsIHJlZ1QzLCBy
ZWdUMik7Ci0KLSAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENlbGwocmVnVDMpKTsKLSAgICBh
ZGRTbG93Q2FzZShicmFuY2hJZk5vdFR5cGUocmVnVDIsIEZpbmFsT2JqZWN0VHlwZSkpOwotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVn
VDApOwotICAgIGxvYWRQdHIoY2FjaGVkU3RydWN0dXJlLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nh
c2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIpKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRfb3BfY2hlY2tfdGR6KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
ZW1pdExvYWRUYWcoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDApKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRf
b3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgZW51
bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChi
YXNlKTsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7Ci0KLSAgICBs
b2FkMzIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDAp
OwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgQWRkcmVzcyhyZWdU
MSwgSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRTdHJ1Y3R1cmVJRE9mZnNldCgpKSkp
OwotICAgIAotICAgIG1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3Jl
Qm9vbChkc3QsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhl
ZFByb3BlcnR5KEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCi17Ci0gICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9ICZtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnlWYWxJbmZvLT5i
eXRlY29kZUluZGV4XTsKLSAgICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgCi0g
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlz
IGFuZCBBcmd1bWVudHMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzUwMzMgYW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzUwMzQuCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1v
ZGUoY3VycmVudEluc3RydWN0aW9uLCBhcnJheU1vZGUsIGJhZFR5cGUpOwotICAgIG1vdmUoVHJ1
c3RlZEltbTMyKDEpLCByZWdUMCk7Ci0gICAgSnVtcCBkb25lID0ganVtcCgpOwotCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwotICAgIAotICAgIHBhdGNo
QnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNz
ZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1
cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVz
c1RvU2xvd1BhdGgpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0
aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0
ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zm
c2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAgICAKLSAgICBwYXRj
aEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChi
eVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7Ci0KLSAgICBieVZhbEluZm8tPnN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKLSAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgIkJhc2VsaW5lIGhhc19pbmRl
eGVkX3Byb3BlcnR5IHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJpbmcoKm1f
Y29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7Ci0gICAgCi0gICAgTWFj
cm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENvZGVMb2Nh
dGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5j
b2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2Nh
dGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJu
QWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eUdlbmVyaWMpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbElu
Zm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7Ci0gICAgCi0gICAgZW1pdExvYWRQYXls
b2FkKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7
Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQocHJvcGVydHksIHJlZ1QxKTsKLQotICAgIC8vIFRoaXMg
aXMgdGVjaG5pY2FsbHkgaW5jb3JyZWN0IC0gd2UncmUgemVyby1leHRlbmRpbmcgYW4gaW50MzIu
IE9uIHRoZSBob3QgcGF0aCB0aGlzIGRvZXNuJ3QgbWF0dGVyLgotICAgIC8vIFdlIGNoZWNrIHRo
ZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUgbV92ZWN0b3JMZW5ndGgg
LSB3aGljaCB3aWxsIGFsd2F5cyBmYWlsIGlmCi0gICAgLy8gbnVtYmVyIHdhcyBzaWduZWQgc2lu
Y2UgbV92ZWN0b3JMZW5ndGggaXMgYWx3YXlzIGxlc3MgdGhhbiBpbnRtYXggKHNpbmNlIHRoZSB0
b3RhbCBhbGxvY2F0aW9uCi0gICAgLy8gc2l6ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDRHYikuIEFz
IHN1Y2ggemVybyBleHRlbmRpbmcgd2lsbCBoYXZlIGJlZW4gY29ycmVjdCAoYW5kIGV4dGVuZGlu
ZyB0aGUgdmFsdWUKLSAgICAvLyB0byA2NC1iaXRzIGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVz
ZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24uIFdlIHplcm8gZXh0ZW5kIHJhdGhlciB0aGFu
IHNpZ24KLSAgICAvLyBleHRlbmRpbmcgc2luY2UgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIHJlLXRh
ZyB0aGUgdmFsdWUgaW4gdGhlIHNsb3cgY2FzZS4KLSAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdU
MSwgcmVnVDEpOwotCi0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCBy
ZWdUMiwgcHJvZmlsZSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNr
KSwgcmVnVDIpOwotCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJv
ZmlsZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwotCi0gICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBvdGhlciB0eXBlcyBsaWtlIFR5cGVkQXJyYXlzIGFuZCBBcmd1bWVudHMuCi0g
ICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzMg
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwMzQuCi0gICAg
SnVtcExpc3Qgc2xvd0Nhc2VzID0gZW1pdExvYWRGb3JBcnJheU1vZGUoY3VycmVudEluc3RydWN0
aW9uLCBtb2RlLCBiYWRUeXBlKTsKLSAgICBtb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVnVDApOwot
Ci0gICAgYWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsK
LSAgICAKLSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLSAgICAKLSAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOwotCi0gICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwotICAgIAot
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5
VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2Rl
LCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwot
ICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
QnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0
cnVjdGlvbkluZGV4XS5ieVZhbEluZm87Ci0KLSAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7
Ci0gICAgCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZChw
cm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkhhc0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQsIGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgYnlWYWxJbmZvKTsKLQotICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFy
Z2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1
Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7Ci0gICAgbV9ieVZhbEluc3RydWN0aW9u
SW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVy
YW5kOwotICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFu
ZDsKLQotICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhIGNlbGwKLSAgICBlbWl0TG9hZFBheWxv
YWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsK
LQotICAgIC8vIENoZWNrIHRoZSBzdHJ1Y3R1cmUKLSAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVy
YXRvciwgcmVnVDEpOwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMik7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNhY2hlZFN0
cnVjdHVyZUlET2Zmc2V0KCkpKSk7Ci0KLSAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQKLSAgICBl
bWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QyKTsKLSAgICAvLyBJZiBpbmRleCBpcyBsZXNzIHRo
YW4gdGhlIGVudW1lcmF0b3IncyBjYWNoZWQgaW5saW5lIHN0b3JhZ2UsIHRoZW4gaXQncyBhbiBp
bmxpbmUgYWNjZXNzCi0gICAgSnVtcCBvdXRPZkxpbmVBY2Nlc3MgPSBicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHJlZ1QyLCBBZGRyZXNzKHJlZ1QxLCBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3I6OmNh
Y2hlZElubGluZUNhcGFjaXR5T2Zmc2V0KCkpKTsKLSAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKEpT
T2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2UoKSksIHJlZ1QwKTsKLSAgICBsb2FkMzIoQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVn
VDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2Fk
KSksIHJlZ1QwKTsKLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICAvLyBPdGhl
cndpc2UgaXQncyBvdXQgb2YgbGluZQotICAgIG91dE9mTGluZUFjY2Vzcy5saW5rKHRoaXMpOwot
ICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwg
cmVnVDApOwotICAgIHN1YjMyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
cjo6Y2FjaGVkSW5saW5lQ2FwYWNpdHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBuZWczMihyZWdU
Mik7Ci0gICAgaW50MzJfdCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgPSBzdGF0aWNfY2FzdDxpbnQz
Ml90PihvZmZzZXRJbkJ1dHRlcmZseShmaXJzdE91dE9mTGluZU9mZnNldCkpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKTsKLSAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGltZXNF
aWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUu
YXNCaXRzLnRhZykpLCByZWdUMSk7Ci0gICAgbG9hZDMyKEJhc2VJbmRleChyZWdUMCwgcmVnVDIs
IFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9PRkZTRVRPRihKU1Zh
bHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhp
cyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJl
Z1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAg
aW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvcjo6ZW5kU3RydWN0dXJlUHJvcGVydHlJbmRleE9mZnNldCgpKSk7Ci0K
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSwgcmVnVDIpOwotICAgIG1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7Ci0KLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0g
ICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLQotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNQ
cm9wZXJ0eU5hbWVFbnVtZXJhdG9yOjpjYWNoZWRQcm9wZXJ0eU5hbWVzVmVjdG9yT2Zmc2V0KCkp
LCByZWdUMSk7Ci0gICAgbG9hZFB0cihCYXNlSW5kZXgocmVnVDEsIHJlZ1QwLCB0aW1lc1B0cigp
KSwgcmVnVDApOwotICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdU
Mik7Ci0KLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJl
Z1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsKLSAg
ICBlbWl0TG9hZFBheWxvYWQoZW51bWVyYXRvciwgcmVnVDEpOwotICAgIEp1bXAgaW5Cb3VuZHMg
PSBicmFuY2gzMihCZWxvdywgcmVnVDAsIEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1lRW51
bWVyYXRvcjo6ZW5kR2VuZXJpY1Byb3BlcnR5SW5kZXhPZmZzZXQoKSkpOwotCi0gICAgbW92ZShU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZyksIHJlZ1QyKTsKLSAgICBtb3ZlKFRydXN0ZWRJ
bW0zMigwKSwgcmVnVDApOwotCi0gICAgSnVtcCBkb25lID0ganVtcCgpOwotICAgIGluQm91bmRz
LmxpbmsodGhpcyk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvcjo6Y2FjaGVkUHJvcGVydHlOYW1lc1ZlY3Rvck9mZnNldCgpKSwgcmVnVDEpOwot
ICAgIGxvYWRQdHIoQmFzZUluZGV4KHJlZ1QxLCByZWdUMCwgdGltZXNQdHIoKSksIHJlZ1QwKTsK
LSAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDIpOwotICAgIAot
ICAgIGRvbmUubGluayh0aGlzKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOwot
fQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51LmxvY2F0aW9uOwotICAgIGludCB2YWx1ZVRvUHJvZmlsZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0KLSAgICAvLyBMb2FkIHBheWxvYWQg
aW4gVDAuIExvYWQgdGFnIGluIFQzLgotICAgIGVtaXRMb2FkUGF5bG9hZCh2YWx1ZVRvUHJvZmls
ZSwgcmVnVDApOwotICAgIGVtaXRMb2FkVGFnKHZhbHVlVG9Qcm9maWxlLCByZWdUMyk7Ci0KLSAg
ICBKdW1wTGlzdCBqdW1wVG9FbmQ7Ci0KLSAgICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmRW1w
dHkocmVnVDMpKTsKLQotICAgIC8vIENvbXBpbGUgaW4gYSBwcmVkaWN0aXZlIHR5cGUgY2hlY2ss
IGlmIHBvc3NpYmxlLCB0byBzZWUgaWYgd2UgY2FuIHNraXAgd3JpdGluZyB0byB0aGUgbG9nLgot
ICAgIC8vIFRoZXNlIHR5cGVjaGVja3MgYXJlIGlubGluZWQgdG8gbWF0Y2ggdGhvc2Ugb2YgdGhl
IDMyLWJpdCBKU1ZhbHVlIHR5cGUgY2hlY2tzLgotICAgIGlmIChjYWNoZWRUeXBlTG9jYXRpb24t
Pm1fbGFzdFNlZW5UeXBlID09IFR5cGVVbmRlZmluZWQpCi0gICAgICAgIGp1bXBUb0VuZC5hcHBl
bmQoYnJhbmNoSWZVbmRlZmluZWQocmVnVDMpKTsKLSAgICBlbHNlIGlmIChjYWNoZWRUeXBlTG9j
YXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdWxsKQotICAgICAgICBqdW1wVG9FbmQuYXBw
ZW5kKGJyYW5jaElmTnVsbChyZWdUMykpOwotICAgIGVsc2UgaWYgKGNhY2hlZFR5cGVMb2NhdGlv
bi0+bV9sYXN0U2VlblR5cGUgPT0gVHlwZUJvb2xlYW4pCi0gICAgICAgIGp1bXBUb0VuZC5hcHBl
bmQoYnJhbmNoSWZCb29sZWFuKHJlZ1QzLCBJbnZhbGlkR1BSUmVnKSk7Ci0gICAgZWxzZSBpZiAo
Y2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RTZWVuVHlwZSA9PSBUeXBlQW55SW50KQotICAgICAg
ICBqdW1wVG9FbmQuYXBwZW5kKGJyYW5jaElmSW50MzIocmVnVDMpKTsKLSAgICBlbHNlIGlmIChj
YWNoZWRUeXBlTG9jYXRpb24tPm1fbGFzdFNlZW5UeXBlID09IFR5cGVOdW1iZXIpIHsKLSAgICAg
ICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZk51bWJlcihKU1ZhbHVlUmVncyhyZWdUMywgcmVn
VDApLCByZWdUMSkpOwotICAgIH0gZWxzZSBpZiAoY2FjaGVkVHlwZUxvY2F0aW9uLT5tX2xhc3RT
ZWVuVHlwZSA9PSBUeXBlU3RyaW5nKSB7Ci0gICAgICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNo
SWZOb3RDZWxsKHJlZ1QzKTsKLSAgICAgICAganVtcFRvRW5kLmFwcGVuZChicmFuY2hJZlN0cmlu
ZyhyZWdUMCkpOwotICAgICAgICBpc05vdENlbGwubGluayh0aGlzKTsKLSAgICB9Ci0KLSAgICAv
LyBMb2FkIHRoZSB0eXBlIHByb2ZpbGluZyBsb2cgaW50byBUMi4KLSAgICBUeXBlUHJvZmlsZXJM
b2cqIGNhY2hlZFR5cGVQcm9maWxlckxvZyA9IG1fdm0tPnR5cGVQcm9maWxlckxvZygpOwotICAg
IG1vdmUoVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2cpLCByZWdUMik7Ci0KLSAg
ICAvLyBMb2FkIHRoZSBuZXh0IGxvZyBlbnRyeSBpbnRvIFQxLgotICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlPZmZzZXQoKSksIHJlZ1Qx
KTsKLQotICAgIC8vIFN0b3JlIHRoZSBKU1ZhbHVlIG9udG8gdGhlIGxvZyBlbnRyeS4KLSAgICBz
dG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5Ojp2
YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQp
KSk7Ci0gICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpM
b2dFbnRyeTo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy50YWcpKSk7Ci0KLSAgICAvLyBTdG9yZSB0aGUgc3RydWN0dXJlSUQgb2YgdGhlIGNlbGwgaWYg
YXJndW1lbnQgaXMgYSBjZWxsLCBvdGhlcndpc2UsIHN0b3JlIDAgb24gdGhlIGxvZyBlbnRyeS4K
LSAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDMpOwotICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAg
c3RvcmUzMihyZWdUMCwgQWRkcmVzcyhyZWdUMSwgVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeTo6
c3RydWN0dXJlSURPZmZzZXQoKSkpOwotICAgIEp1bXAgc2tpcE5vdENlbGwgPSBqdW1wKCk7Ci0g
ICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKDApLCBBZGRy
ZXNzKHJlZ1QxLCBUeXBlUHJvZmlsZXJMb2c6OkxvZ0VudHJ5OjpzdHJ1Y3R1cmVJRE9mZnNldCgp
KSk7Ci0gICAgc2tpcE5vdENlbGwubGluayh0aGlzKTsKLQotICAgIC8vIFN0b3JlIHRoZSB0eXBl
TG9jYXRpb24gb24gdGhlIGxvZyBlbnRyeS4KLSAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY2FjaGVk
VHlwZUxvY2F0aW9uKSwgcmVnVDApOwotICAgIHN0b3JlMzIocmVnVDAsIEFkZHJlc3MocmVnVDEs
IFR5cGVQcm9maWxlckxvZzo6TG9nRW50cnk6OmxvY2F0aW9uT2Zmc2V0KCkpKTsKLQotICAgIC8v
IEluY3JlbWVudCB0aGUgY3VycmVudCBsb2cgZW50cnkuCi0gICAgYWRkUHRyKFRydXN0ZWRJbW0z
MihzaXplb2YoVHlwZVByb2ZpbGVyTG9nOjpMb2dFbnRyeSkpLCByZWdUMSk7Ci0gICAgc3RvcmUz
MihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgVHlwZVByb2ZpbGVyTG9nOjpjdXJyZW50TG9nRW50cnlP
ZmZzZXQoKSkpOwotICAgIGp1bXBUb0VuZC5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdU
MSwgVHJ1c3RlZEltbVB0cihjYWNoZWRUeXBlUHJvZmlsZXJMb2ctPmxvZ0VuZFB0cigpKSkpOwot
ICAgIC8vIENsZWFyIHRoZSBsb2cgaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgbG9nLgotICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHJvY2Vzc1R5cGVQcm9maWxlckxvZyk7Ci0KLSAgICBq
dW1wVG9FbmQubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3Byb2xvZ3VlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAg
dXBkYXRlVG9wQ2FsbEZyYW1lKCk7Ci0gICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJl
Z1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhp
cyBpcyB0cnVlLiIpOwotICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBH
UFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJn
dW1lbnQgcmVnaXN0ZXIuCi0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5z
dXJlU2hhZG93Q2hpY2tlblBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJl
Zywgc2NyYXRjaDJSZWcpOwotCi0gICAgc2NyYXRjaDFSZWcgPSByZWdUNDsKLSAgICBlbWl0TG9h
ZFBheWxvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDMpOwotICAgIGxv
Z1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVn
LCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWls
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgdXBkYXRlVG9wQ2FsbEZy
YW1lKCk7Ci0gICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFyZ0dQ
UjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIpOwot
ICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKLSAgICBHUFJSZWcgc2NyYXRjaDFS
ZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIu
Ci0gICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7Ci0gICAgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcp
OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlZ1QyKTsKLSAgICBlbWl0TG9hZFRhZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCByZWdUMSk7Ci0gICAgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MocmVnVDEsIHJlZ1QyKTsKLSAgICBl
bWl0TG9hZFBheWxvYWQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDMpOwot
ICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJlZywgdGhpc1JlZ3Ms
IHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQot
I2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGY1MmRk
NGFjNzM3NGY2ZjVhOWE0YzM2YjlmYTU1MDY0ZjI4NjRmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTc3NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotCi0jaWYgRU5BQkxFKEpJVCkKLSNpbmNsdWRlICJKSVQuaCIKLQotI2luY2x1ZGUg
IkNvZGVCbG9jay5oIgotI2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgotI2luY2x1ZGUgIkdD
QXdhcmVKSVRTdHViUm91dGluZS5oIgotI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgotI2luY2x1
ZGUgIkludGVycHJldGVySW5saW5lcy5oIgotI2luY2x1ZGUgIkpJVElubGluZXMuaCIKLSNpbmNs
dWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpTTGV4
aWNhbEVudmlyb25tZW50LmgiCi0jaW5jbHVkZSAiTGlua0J1ZmZlci5oIgotI2luY2x1ZGUgIlJl
c3VsdFR5cGUuaCIKLSNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJTY29w
ZWRBcmd1bWVudHNUYWJsZS5oIgotI2luY2x1ZGUgIlNsb3dQYXRoQ2FsbC5oIgotI2luY2x1ZGUg
IlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgotI2lu
Y2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgotCi0KLW5hbWVzcGFjZSBKU0MgewotI2lm
IFVTRShKU1ZBTFVFNjQpCi0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQnlWYWxJbmZvKCk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1Qw
KTsKLSAgICBib29sIHByb3BlcnR5TmFtZUlzSW50ZWdlckNvbnN0YW50ID0gaXNPcGVyYW5kQ29u
c3RhbnRJbnQocHJvcGVydHkpOwotICAgIGlmIChwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFu
dCkKLSAgICAgICAgbW92ZShJbW0zMihnZXRPcGVyYW5kQ29uc3RhbnRJbnQocHJvcGVydHkpKSwg
cmVnVDEpOwotICAgIGVsc2UKLSAgICAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcihwcm9wZXJ0
eSwgcmVnVDEpOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKLQotICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXg7Ci0gICAgaWYgKCFwcm9wZXJ0eU5hbWVJ
c0ludGVnZXJDb25zdGFudCkgewotICAgICAgICBub3RJbmRleCA9IGVtaXRQYXRjaGFibGVKdW1w
SWZOb3RJbnQocmVnVDEpOwotICAgICAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7Ci0KLSAgICAg
ICAgLy8gVGhpcyBpcyB0ZWNobmljYWxseSBpbmNvcnJlY3QgLSB3ZSdyZSB6ZXJvLWV4dGVuZGlu
ZyBhbiBpbnQzMi4gT24gdGhlIGhvdCBwYXRoIHRoaXMgZG9lc24ndCBtYXR0ZXIuCi0gICAgICAg
IC8vIFdlIGNoZWNrIHRoZSB2YWx1ZSBhcyBpZiBpdCB3YXMgYSB1aW50MzIgYWdhaW5zdCB0aGUg
bV92ZWN0b3JMZW5ndGggLSB3aGljaCB3aWxsIGFsd2F5cyBmYWlsIGlmCi0gICAgICAgIC8vIG51
bWJlciB3YXMgc2lnbmVkIHNpbmNlIG1fdmVjdG9yTGVuZ3RoIGlzIGFsd2F5cyBsZXNzIHRoYW4g
aW50bWF4IChzaW5jZSB0aGUgdG90YWwgYWxsb2NhdGlvbgotICAgICAgICAvLyBzaXplIGlzIGFs
d2F5cyBsZXNzIHRoYW4gNEdiKS4gQXMgc3VjaCB6ZXJvIGV4dGVuZGluZyB3aWxsIGhhdmUgYmVl
biBjb3JyZWN0IChhbmQgZXh0ZW5kaW5nIHRoZSB2YWx1ZQotICAgICAgICAvLyB0byA2NC1iaXRz
IGlzIG5lY2Vzc2FyeSBzaW5jZSBpdCdzIHVzZWQgaW4gdGhlIGFkZHJlc3MgY2FsY3VsYXRpb24p
LiBXZSB6ZXJvIGV4dGVuZCByYXRoZXIgdGhhbiBzaWduCi0gICAgICAgIC8vIGV4dGVuZGluZyBz
aW5jZSBpdCBtYWtlcyBpdCBlYXNpZXIgdG8gcmUtdGFnIHRoZSB2YWx1ZSBpbiB0aGUgc2xvdyBj
YXNlLgotICAgICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIH0KLQot
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUp
OwotICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQot
ICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAg
ICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShwcm9maWxlKTsKLSAgICBzd2l0
Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEpJVEludDMyOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0
SW50MzJHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZUdl
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNH
ZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3Rv
cmFnZUdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICAKLSAgICBhZGRTbG93Q2FzZShiYWRUeXBlKTsKLSAgICBhZGRTbG93Q2FzZShzbG93Q2Fz
ZXMpOwotICAgIAotICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwotICAgIAotICAgIGlmICghQVNT
RVJUX0RJU0FCTEVEKSB7Ci0gICAgICAgIEp1bXAgcmVzdWx0T0sgPSBicmFuY2hJZk5vdEVtcHR5
KHJlZ1QwKTsKLSAgICAgICAgYWJvcnRXaXRoUmVhc29uKEpJVEdldEJ5VmFsUmVzdWx0SXNOb3RF
bXB0eSk7Ci0gICAgICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7Ci0gICAgfQotCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLQot
ICAgIExhYmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9m
ZnNldCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRo
KSk7Ci19Ci0KLUpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVk
SWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcCYgZmFzdERvbmVDYXNlLCBKdW1w
JiBzbG93RG9uZUNhc2UsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCi17Ci0gICAgLy8gYmFzZTogcmVn
VDAKLSAgICAvLyBwcm9wZXJ0eTogcmVnVDEKLSAgICAvLyBzY3JhdGNoOiByZWdUMwotCi0gICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0KLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwotICAgIGVtaXRCeVZhbElkZW50aWZp
ZXJDaGVjayhieVZhbEluZm8sIHJlZ1QxLCByZWdUMywgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMp
OwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBD
b2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZz
ZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIHBy
b3BlcnR5TmFtZS5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDAp
LCBBY2Nlc3NUeXBlOjpHZXQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQot
ICAgIGZhc3REb25lQ2FzZSA9IGp1bXAoKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwotICAgIGdlbi5zbG93UGF0aEp1bXAoKS5saW5rKHRoaXMpOwotCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
ZHN0LCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOwotICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci0gICAgc2xvd0RvbmVD
YXNlID0ganVtcCgpOwotCi0gICAgcmV0dXJuIGdlbjsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLSAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKLSAgICAKLSAgICBsaW5r
U2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCi0KLSAg
ICBpZiAoIWlzT3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5KSkKLSAgICAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawotICAgIEp1bXAgbm9uQ2VsbCA9IGp1
bXAoKTsKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKLSAgICBK
dW1wIG5vdFN0cmluZyA9IGJyYW5jaElmTm90U3RyaW5nKHJlZ1QwKTsKLSAgICBlbWl0TmFrZWRD
YWxsKENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihtX3ZtLT5nZXRDVElTdHViKHN0cmluZ0dl
dEJ5VmFsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpKTsKLSAgICBKdW1wIGZh
aWxlZCA9IGJyYW5jaFRlc3Q2NChaZXJvLCByZWdUMCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdp
c3Rlcihkc3QsIHJlZ1QwKTsKLSAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9M
RU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwotICAgIGZhaWxlZC5saW5rKHRoaXMpOwotICAgIG5vdFN0
cmluZy5saW5rKHRoaXMpOwotICAgIG5vbkNlbGwubGluayh0aGlzKTsKLSAgICAKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIGVtcHR5IHZhbHVlCi0gICAgCi0gICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgp
OwotICAgIAotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYmFzZSwgcmVnVDApOwotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUsIGRzdCwgcmVnVDAsIHJlZ1Qx
LCBieVZhbEluZm8pOwotCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1
Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGls
YXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsK
LSAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9u
WzRdLnUuYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxv
Y2stPmFkZEJ5VmFsSW5mbygpOwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlLCBy
ZWdUMCk7Ci0gICAgYm9vbCBwcm9wZXJ0eU5hbWVJc0ludGVnZXJDb25zdGFudCA9IGlzT3BlcmFu
ZENvbnN0YW50SW50KHByb3BlcnR5KTsKLSAgICBpZiAocHJvcGVydHlOYW1lSXNJbnRlZ2VyQ29u
c3RhbnQpCi0gICAgICAgIG1vdmUoSW1tMzIoZ2V0T3BlcmFuZENvbnN0YW50SW50KHByb3BlcnR5
KSksIHJlZ1QxKTsKLSAgICBlbHNlCi0gICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJv
cGVydHksIHJlZ1QxKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwg
YmFzZSk7Ci0gICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleDsKLSAgICBpZiAoIXByb3BlcnR5TmFt
ZUlzSW50ZWdlckNvbnN0YW50KSB7Ci0gICAgICAgIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1
bXBJZk5vdEludChyZWdUMSk7Ci0gICAgICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKLSAgICAg
ICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5X3ZhbC4KLSAgICAgICAgemVyb0V4dGVuZDMy
VG9QdHIocmVnVDEsIHJlZ1QxKTsKLSAgICB9Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdp
dGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7Ci0KLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5
cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgLy8gVE9ETzogTWF5YmUgd2Ugc2hv
dWxkIGRvIHRoaXMgaW5saW5lPwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRlc3QzMihOb25aZXJv
LCByZWdUMiwgVHJ1c3RlZEltbTMyKENvcHlPbldyaXRlKSkpOwotICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKLQotICAgIEpJVEFycmF5TW9kZSBtb2Rl
ID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNh
c2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGN1cnJl
bnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklURG91
YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoY3VycmVudEluc3Ry
dWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRDb250aWd1b3Vz
OgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGN1cnJlbnRJbnN0
cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUQXJyYXlTdG9y
YWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3VycmVu
dEluc3RydWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGFkZFNsb3dD
YXNlKGJhZFR5cGUpOwotICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgCi0gICAgTGFi
ZWwgZG9uZSA9IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBub3RJ
bmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOwotfQotCi1KSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nU2hhcGUpCi17Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5hcnJheVByb2ZpbGU7Ci0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAg
YmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMiwgVHJ1c3RlZEltbTMy
KGluZGV4aW5nU2hhcGUpKTsKLSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBKdW1wIG91dE9mQm91bmRzID0g
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0KLSAgICBMYWJlbCBzdG9yZVJlc3VsdCA9IGxhYmVs
KCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDMpOwotICAgIHN3aXRj
aCAoaW5kZXhpbmdTaGFwZSkgewotICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdEludDMyKHJlZ1QzKSk7Ci0gICAgICAgIHN0b3JlNjQocmVn
VDMsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBEb3VibGVTaGFwZTogewotICAgICAgICBKdW1wIG5vdEludCA9IGJyYW5jaElm
Tm90SW50MzIocmVnVDMpOwotICAgICAgICBjb252ZXJ0SW50MzJUb0RvdWJsZShyZWdUMywgZnBS
ZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVhZHkgPSBqdW1wKCk7Ci0gICAgICAgIG5vdEludC5saW5r
KHRoaXMpOwotICAgICAgICBhZGQ2NCh0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlZ1QzKTsKLSAg
ICAgICAgbW92ZTY0VG9Eb3VibGUocmVnVDMsIGZwUmVnVDApOwotICAgICAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaERvdWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBm
cFJlZ1QwKSk7Ci0gICAgICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0gICAgICAgIHN0b3JlRG91Ymxl
KGZwUmVnVDAsIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGNhc2UgQ29udGlndW91c1NoYXBlOgotICAgICAgICBzdG9yZTY0
KHJlZ1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAgIGVt
aXRXcml0ZUJhcnJpZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
Q1JBU0goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIEp1bXAgZG9uZSA9IGp1
bXAoKTsKLSAgICBvdXRPZkJvdW5kcy5saW5rKHRoaXMpOwotICAgIAotICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCByZWdUMSwgQWRkcmVzcyhyZWdUMiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwotICAgIAotICAgIGVtaXRBcnJheVByb2Zp
bGVTdG9yZVRvSG9sZVNwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIAotICAgIGFkZDMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEsIHJlZ1QzKTsKLSAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJl
Z1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLSAgICBqdW1wKCkubGlu
a1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAg
Ci0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0KLQotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJh
eVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFi
bGVKdW1wJiBiYWRUeXBlKQotewotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0
aW9uWzRdLnUuYXJyYXlQcm9maWxlOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QyLCBUcnVz
dGVkSW1tMzIoQXJyYXlTdG9yYWdlU2hhcGUpKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAs
IEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICBKdW1wIGVtcHR5ID0gYnJhbmNo
VGVzdDY0KFplcm8sIEJhc2VJbmRleChyZWdUMiwgcmVnVDEsIFRpbWVzRWlnaHQsIEFycmF5U3Rv
cmFnZTo6dmVjdG9yT2Zmc2V0KCkpKTsKLQotICAgIExhYmVsIHN0b3JlUmVzdWx0KHRoaXMpOwot
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QzKTsKLSAgICBzdG9yZTY0KHJl
Z1QzLCBCYXNlSW5kZXgocmVnVDIsIHJlZ1QxLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZl
Y3Rvck9mZnNldCgpKSk7Ci0gICAgZW1pdFdyaXRlQmFycmllcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgIEp1bXAgZW5kID0g
anVtcCgpOwotICAgIAotICAgIGVtcHR5LmxpbmsodGhpcyk7Ci0gICAgZW1pdEFycmF5UHJvZmls
ZVN0b3JlVG9Ib2xlU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAgYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBBZGRyZXNzKHJlZ1QyLCBBcnJheVN0b3JhZ2U6Om51bVZhbHVlc0luVmVjdG9yT2Zmc2V0
KCkpKTsKLSAgICBicmFuY2gzMihCZWxvdywgcmVnVDEsIEFkZHJlc3MocmVnVDIsIEFycmF5U3Rv
cmFnZTo6bGVuZ3RoT2Zmc2V0KCkpKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotCi0gICAg
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVz
cyhyZWdUMiwgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAgIHN1YjMyKFRydXN0
ZWRJbW0zMigxKSwgcmVnVDEpOwotICAgIGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMp
OwotCi0gICAgZW5kLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgcmV0dXJuIHNsb3dDYXNlczsKLX0K
LQotSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZh
bEluZm8qIGJ5VmFsSW5mbywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHV0S2lu
ZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBkb25l
Q2FzZXMsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCi17Ci0gICAgLy8gYmFzZTogcmVnVDAKLSAgICAv
LyBwcm9wZXJ0eTogcmVnVDEKLSAgICAvLyBzY3JhdGNoOiByZWdUMgotCi0gICAgaW50IGJhc2Ug
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbChyZWdUMSkpOwotICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZhbElu
Zm8sIHJlZ1QxLCByZWdUMSwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwotCi0gICAgLy8gV3Jp
dGUgYmFycmllciBicmVha3MgdGhlIHJlZ2lzdGVycy4gU28gYWZ0ZXIgaXNzdWluZyB0aGUgd3Jp
dGUgYmFycmllciwKLSAgICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4KLSAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKLQotICAgIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6
OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLCBwdXRL
aW5kKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgZW1pdFdyaXRlQmFy
cmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7Ci0gICAgZG9uZUNhc2VzLmFwcGVu
ZChqdW1wKCkpOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgZ2Vu
LnNsb3dQYXRoSnVtcCgpLmxpbmsodGhpcyk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAs
IHByb3BlcnR5TmFtZS5pbXBsKCkpOwotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBh
dGhCZWdpbiwgY2FsbCk7Ci0gICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwotCi0gICAgcmV0
dXJuIGdlbjsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIEJ5VmFs
SW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rp
b25JbmRleF0uYnlWYWxJbmZvOwotCi0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLSAgICBM
YWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJh
c2UsIHJlZ1QwKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7
Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwotICAgIGJvb2wgaXNE
aXJlY3QgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9w
Y29kZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRp
b25QdXRCeVZhbE9wdGltaXplLCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8pOwotCi0g
ICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1Bh
dGhUYXJnZXQgPSBzbG93UGF0aDsKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKLSAgICBtX2J5VmFsSW5zdHJ1
Y3Rpb25JbmRleCsrOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7Ci0gICAgaW50MzJf
dCBvcHRpb25zID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsIHJlZ1QxKTsK
LSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QwLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKS5pbXBsKCks
IG9wdGlvbnMsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9ieV9p
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOwotICAgIGlu
dDMyX3Qgb3B0aW9ucyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kLCByZWdU
MSk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMCwgbV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkuaW1w
bCgpLCBvcHRpb25zLCByZWdUMSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
c2V0dGVyX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1p
dEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdU
MCk7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzVdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0R2V0dGVyU2V0dGVyLCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QxLCByZWdUMik7
Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfdmFsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMSk7Ci0gICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQsIHJlZ1Qy
KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMCwgcmVn
VDEsIGF0dHJpYnV0ZXMsIHJlZ1QyKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBlbWl0R2V0
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQsIHJlZ1QxKTsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
U2V0dGVyQnlWYWwsIHJlZ1QwLCByZWdUMSwgYXR0cmlidXRlcywgcmVnVDIpOwotfQotCi12b2lk
IEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBp
bnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3Bl
cnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBlbWl0R2V0VmlydHVh
bFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0
ZUJ5SWRKU1Jlc3VsdCwgZHN0LCByZWdUMCwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVy
dHkpLmltcGwoKSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKLSAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7Ci0gICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBkc3QsIHJlZ1QwLCByZWdUMSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwotCi0gICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigK
LSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxT
aXRlSW5kZXgobV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVS
ZWdpc3RlcnMoKSwKLSAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEFjY2Vzc1R5cGU6OlRyeUdldCk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKLSAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7
Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeUdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0
VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKLSAgICAKLSAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKLQotICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLQotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0g
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0
ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVn
aXN0ZXJzKCksCi0gICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QwKSwgSlNW
YWx1ZVJlZ3MocmVnVDApLCBBY2Nlc3NUeXBlOjpHZXREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0
ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwot
ICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihyZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBs
aW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJiht
X2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7
Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwotCi0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9w
dGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgcmVnVDAsIGlkZW50LT5pbXBsKCkp
OwotCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIGludCBiYXNlVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKLQotICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoYmFzZVZSZWcsIHJlZ1QwKTsKLSAgICAKLSAgICBlbWl0SnVtcFNsb3dDYXNl
SWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLSAgICAKLSAgICBpZiAoKmlkZW50ID09IG1f
dm0tPnByb3BlcnR5TmFtZXMtPmxlbmd0aCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpCi0gICAg
ICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVGb3JCeXRlY29kZUluZGV4V2l0aENlbGwocmVnVDAs
IHJlZ1QxLCBtX2J5dGVjb2RlT2Zmc2V0KTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2Fs
bFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJs
ZVJlZ2lzdGVycygpLAotICAgICAgICBpZGVudC0+aW1wbCgpLCBKU1ZhbHVlUmVncyhyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsKLSAgICBnZW4uZ2VuZXJhdGVG
YXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgp
OwotICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0VlJlZyk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICBpbnQgdGhpc1ZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSk7Ci0KLSAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVyKGJhc2VWUmVnLCByZWdUMCk7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih0aGlz
VlJlZywgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMSwgdGhpc1ZSZWcp
OwotCi0gICAgSklUR2V0QnlJZFdpdGhUaGlzR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2Rl
QmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgobV9ieXRl
Y29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAg
ICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdU
MCksIEpTVmFsdWVSZWdzKHJlZ1QxKSwgQWNjZXNzVHlwZTo6R2V0V2l0aFRoaXMpOwotICAgIGdl
bi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhK
dW1wKCkpOwotICAgIG1fZ2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKHJlc3VsdFZS
ZWcpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
Ci17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGludCByZXN1bHRWUmVnID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpOwotCi0gICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1tt
X2dldEJ5SWRJbmRleCsrXTsKLSAgICAKLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgaWRlbnQt
PmltcGwoKSk7Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBpbnQgcmVz
dWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQpKTsKLQotICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYg
Z2VuID0gbV9nZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107Ci0gICAg
Ci0gICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUs
IHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCByZWdUMCwgcmVnVDEsIGlkZW50LT5pbXBsKCkp
OwotCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgaW50IGJhc2VWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgdmFsdWVWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLSAgICB1bnNpZ25lZCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlk
RmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7Ci0KLSAgICAvLyBJbiBvcmRlciB0byBiZSBhYmxlIHRv
IHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRoZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9y
ZSBvbmUgcG9pbnRlciwKLSAgICAvLyB0byBqdXN0IGFmdGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBi
ZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRl
IGNvZGUKLSAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVjdHVyZSAmIG9mZnNldCBhcmUgYWx3YXlz
IGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4KLQotICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXJzKGJhc2VWUmVnLCByZWdUMCwgdmFsdWVWUmVnLCByZWdUMSk7Ci0KLSAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKLQotICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2Rl
T2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnN0
dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLAotICAgICAg
ICBkaXJlY3QgPyBEaXJlY3QgOiBOb3REaXJlY3QpOwotICAgIAotICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAg
IAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZVZSZWcsIHZhbHVlVlJlZywgU2hvdWxkRmlsdGVy
QmFzZSk7Ci0KLSAgICBtX3B1dEJ5SWRzLmFwcGVuZChnZW4pOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKLQotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0KLSAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luKHRoaXMpOwotICAgIAotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3ImIGdl
biA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCByZWdUMSwg
cmVnVDAsIGlkZW50LT5pbXBsKCkpOwotCi0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2VWUmVnID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkp
OwotCi0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihiYXNlVlJlZywgcmVnVDApOwotCi0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7Ci0KLSAgICBKSVRJ
bkJ5SWRHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJT
ZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBpZGVudC0+aW1wbCgpLCBK
U1ZhbHVlUmVncyhyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QwKSk7Ci0gICAgZ2VuLmdlbmVyYXRl
RmFzdFBhdGgoKnRoaXMpOwotICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7Ci0g
ICAgbV9pbkJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRWUmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCi17Ci0gICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKLQotICAgIGludCByZXN1bHRW
UmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCkpOwotCi0gICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJ
ZHNbbV9pbkJ5SWRJbmRleCsrXTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgp
OwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihvcGVyYXRpb25JbkJ5SWRPcHRpbWl6
ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIHJlZ1QwLCBpZGVudC0+aW1wbCgpKTsKLQot
ICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNr
cykKLXsKLSAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKQotICAgICAgICByZXR1cm47
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKG1fY29kZUJs
b2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0Y2hwb2ludCgpLT5hZGRyZXNzT2ZT
dGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0
aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUsIHJlZ1QwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAg
ICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJl
Z1QwKTsKLSAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX3Jlc29sdmVfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQg
c2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KGNvcGllZEluc3RydWN0aW9u
KGN1cnJlbnRJbnN0cnVjdGlvbilbNF0udS5vcGVyYW5kKTsKLSAgICB1bnNpZ25lZCBkZXB0aCA9
IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7Ci0KLSAgICBhdXRvIGVtaXRDb2RlID0g
WyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVU
eXBlKSB7Ci0gICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgR2xvYmFs
VmFyOgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoK
LSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICBj
YXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUg
PSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVC
bG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAg
ICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNv
bHZlVHlwZSkpOwotICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGNvbnN0YW50U2NvcGUp
LCByZWdUMCk7Ci0gICAgICAgICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENsb3N1cmVWYXI6Ci0gICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBl
bWl0UmVzb2x2ZUNsb3N1cmUoZHN0LCBzY29wZSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpLCBkZXB0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1
bGVWYXI6Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9u
WzZdLnUuanNDZWxsLmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3Rlcihkc3QpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRHluYW1pYzoK
LSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3Bl
cnR5OgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVj
a3M6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9
Ci0gICAgfTsKLQotICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIFVucmVzb2x2
ZWRQcm9wZXJ0eToKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgSnVtcExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJmN1
cnJlbnRJbnN0cnVjdGlvbls0XSwgcmVnVDApOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJv
cGVydHkgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9w
ZXJ0eSkpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eSk7Ci0gICAgICAgIHNraXBU
b0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHkubGluayh0aGlz
KTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBi
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0K
LSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShH
bG9iYWxMZXhpY2FsVmFyKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBub3RH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykp
OwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cyk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFs
TGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgYWRkU2xv
d0Nhc2UoanVtcCgpKTsKLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEpJVDo6ZW1pdExvYWRXaXRoU3Ry
dWN0dXJlQ2hlY2soaW50IHNjb3BlLCBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90KQotewotICAg
IGxvYWRQdHIoc3RydWN0dXJlU2xvdCwgcmVnVDEpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QxKSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpKTsKLX0KLQot
dm9pZCBKSVQ6OmVtaXRHZXRWYXJGcm9tUG9pbnRlcihKU1ZhbHVlKiBvcGVyYW5kLCBHUFJSZWcg
cmVnKQotewotICAgIGxvYWRQdHIob3BlcmFuZCwgcmVnKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRH
ZXRWYXJGcm9tSW5kaXJlY3RQb2ludGVyKEpTVmFsdWUqKiBvcGVyYW5kLCBHUFJSZWcgcmVnKQot
ewotICAgIGxvYWRQdHIob3BlcmFuZCwgcmVnKTsKLSAgICBsb2FkUHRyKHJlZywgcmVnKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwKTsKLX0KLQotdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gR2V0UHV0SW5mbyhjb3BpZWRJbnN0cnVjdGlvbihjdXJyZW50
SW5zdHJ1Y3Rpb24pWzRdLnUub3BlcmFuZCkucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUq
KiBzdHJ1Y3R1cmVTbG90ID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUuc3RydWN0dXJlLnNsb3Qo
KTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3QqPigmY3VycmVudEluc3RydWN0aW9uWzZdLnUucG9pbnRlcik7Ci0KLSAgICBhdXRvIGVtaXRD
b2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JP
cGVyYW5kKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRMb2FkV2l0aFN0cnVjdHVyZUNoZWNrKHNjb3Bl
LCBzdHJ1Y3R1cmVTbG90KTsgLy8gU3RydWN0dXJlIGNoZWNrIGNvdmVycyB2YXIgaW5qZWN0aW9u
IHNpbmNlIHdlIGRvbid0IGNhY2hlIHN0cnVjdHVyZXMgZm9yIGFueXRoaW5nIGJ1dCB0aGUgR2xv
YmFsT2JqZWN0LiBBZGRpdGlvbmFsbHksIHJlc29sdmVfc2NvcGUgaGFuZGxlcyBjaGVja2luZyBm
b3IgdGhlIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcgYmFzZSA9IHJlZ1QwOwot
ICAgICAgICAgICAgR1BSUmVnIHJlc3VsdCA9IHJlZ1QwOwotICAgICAgICAgICAgR1BSUmVnIG9m
ZnNldCA9IHJlZ1QxOwotICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2ggPSByZWdUMjsKLQotICAg
ICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJkYTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVt
cCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJyYW5jaFB0cihFcXVhbCwgYmFzZSwgVHJ1c3Rl
ZEltbVB0cihtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKLSAgICAgICAgICAgIH0pKTsK
LQotICAgICAgICAgICAgbG9hZDMyKG9wZXJhbmRTbG90LCBvZmZzZXQpOwotICAgICAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKLSAgICAgICAgICAgICAgICBKdW1wIGlzT3V0T2ZMaW5l
ID0gYnJhbmNoMzIoR3JlYXRlclRoYW5PckVxdWFsLCBvZmZzZXQsIFRydXN0ZWRJbW0zMihmaXJz
dE91dE9mTGluZU9mZnNldCkpOwotICAgICAgICAgICAgICAgIGFib3J0V2l0aFJlYXNvbihKSVRP
ZmZzZXRJc05vdE91dE9mTGluZSk7Ci0gICAgICAgICAgICAgICAgaXNPdXRPZkxpbmUubGluayh0
aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBK
U09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICAgICAgICAgIG5lZzMy
KG9mZnNldCk7Ci0gICAgICAgICAgICBzaWduRXh0ZW5kMzJUb1B0cihvZmZzZXQsIG9mZnNldCk7
Ci0gICAgICAgICAgICBsb2FkNjQoQmFzZUluZGV4KHNjcmF0Y2gsIG9mZnNldCwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwg
cmVzdWx0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2xv
YmFsVmFyOgotICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0g
ICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2Fs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
aWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZy
b21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCBy
ZWdUMCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZW1pdEdldFZhckZyb21Q
b2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90KSwgcmVnVDApOwotICAg
ICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwgcmVzb2x2ZVR5
cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8vIFREWiBjaGVj
ay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QwKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAgICAgICBjYXNl
IENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgZW1pdFZhcklu
amVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAg
ICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTG9jYWxDbG9zdXJl
VmFyOgotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJv
cGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgVW5yZXNv
bHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigm
Y3VycmVudEluc3RydWN0aW9uWzRdLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRydXN0ZWRJbW0z
MihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZlVHlwZSBpbnRv
IFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIoRXF1YWwsIHJl
Z1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVtcCBub3RHbG9i
YWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBU
cnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAg
ICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFs
UHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAg
ICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAg
ICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1Qw
LCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwot
ICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAgICAgSnVtcCBu
b3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAg
bm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUo
cmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoZHN0KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewot
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0
aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGN1cnJlbnRJbnN0cnVjdGlvbik7Ci19Ci0KLXZvaWQgSklU
OjplbWl0UHV0R2xvYmFsVmFyaWFibGUoSlNWYWx1ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRj
aHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVn
VDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHN0b3JlUHRyKHJlZ1QwLCBvcGVy
YW5kKTsKLX0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChKU1ZhbHVl
KiogYWRkcmVzc09mT3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiogaW5kaXJlY3RX
YXRjaHBvaW50U2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1Qw
KTsKLSAgICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDEpOwotICAgIGVtaXRO
b3RpZnlXcml0ZShyZWdUMSk7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMSk7
Ci0gICAgc3RvcmVQdHIocmVnVDAsIHJlZ1QxKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRDbG9z
dXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2lu
dFNldCogc2V0KQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsK
LSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHNldCk7Ci0gICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdp
c3RlcikpKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IHNjb3BlID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oY29waWVk
SW5zdHJ1Y3Rpb24oY3VycmVudEluc3RydWN0aW9uKVs0XS51Lm9wZXJhbmQpOwotICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUu
c2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVyKTsKLQotICAgIGF1dG8g
ZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9h
ZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBj
YXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2so
c2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBTdHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmpl
Y3Rpb24gc2luY2Ugd2UgZG9uJ3QgY2FjaGUgc3RydWN0dXJlcyBmb3IgYW55dGhpbmcgYnV0IHRo
ZSBHbG9iYWxPYmplY3QuIEFkZGl0aW9uYWxseSwgcmVzb2x2ZV9zY29wZSBoYW5kbGVzIGNoZWNr
aW5nIGZvciB0aGUgdmFyIGluamVjdGlvbi4KLSAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIodmFsdWUsIHJlZ1QyKTsKLQotICAgICAgICAgICAgaml0QXNzZXJ0KHNjb3BlZExhbWJk
YTxKdW1wKHZvaWQpPihbJl0gKCkgLT4gSnVtcCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpKSk7Ci0gICAgICAgICAgICB9KSk7Ci0KLSAgICAgICAgICAgIGxvYWRQdHIoQWRkcmVz
cyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgcmVnVDApOwotICAgICAgICAg
ICAgbG9hZFB0cihvcGVyYW5kU2xvdCwgcmVnVDEpOwotICAgICAgICAgICAgbmVnUHRyKHJlZ1Qx
KTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBU
aW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgY2FzZSBHbG9iYWxMZXhpY2FsVmFy
OgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7
Ci0gICAgICAgICAgICBKU1Njb3BlKiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRT
Y29wZUZvckNvZGVCbG9jayhyZXNvbHZlVHlwZSwgbV9jb2RlQmxvY2spOwotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY29uc3RhbnRTY29wZSk7Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0
aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAg
ICAgIGlmICghaXNJbml0aWFsaXphdGlvbihnZXRQdXRJbmZvLmluaXRpYWxpemF0aW9uTW9kZSgp
KSAmJiAocmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCByZXNvbHZlVHlwZSA9PSBH
bG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcykpIHsKLSAgICAgICAgICAgICAg
ICAvLyBXZSBuZWVkIHRvIGRvIGEgVERaIGNoZWNrIGhlcmUgYmVjYXVzZSB3ZSBjYW4ndCBhbHdh
eXMgcHJvdmUgd2UgbmVlZCB0byBlbWl0IFREWiBjaGVja3Mgc3RhdGljYWxseS4KLSAgICAgICAg
ICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAgICAgICAgICAgICAgICAg
ZW1pdEdldFZhckZyb21JbmRpcmVjdFBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3Bl
cmFuZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFu
ZFNsb3QpLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0
eShyZWdUMCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGlyZWN0TG9hZEZv
ck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3Qo
Yml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2YWx1ZSwgYml0d2lzZV9jYXN0
PFdhdGNocG9pbnRTZXQqKj4oJmN1cnJlbnRJbnN0cnVjdGlvbls1XSkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8
SlNWYWx1ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53
YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29w
ZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIENsb3N1cmVW
YXI6Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAg
ICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVz
b2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFu
ZFNsb3QsIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKLSAg
ICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNb2R1bGVWYXI6Ci0gICAgICAg
IGNhc2UgRHluYW1pYzoKLSAgICAgICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH07Ci0KLSAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7Ci0gICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6Ci0gICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzOiB7Ci0gICAgICAgIEp1bXBMaXN0IHNraXBUb0VuZDsKLSAgICAgICAgbG9hZDMy
KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNF0sIHJlZ1QwKTsKLSAgICAgICAgYW5kMzIoVHJ1c3RlZElt
bTMyKEdldFB1dEluZm86OnR5cGVCaXRzKSwgcmVnVDApOyAvLyBMb2FkIFJlc29sdmVUeXBlIGlu
dG8gVDAKLQotICAgICAgICBKdW1wIGlzR2xvYmFsUHJvcGVydHkgPSBicmFuY2gzMihFcXVhbCwg
cmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eSkpOwotICAgICAgICBKdW1wIG5vdEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAs
IFRydXN0ZWRJbW0zMihHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAg
ICAgICAgaXNHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotICAgICAgICBlbWl0Q29kZShHbG9i
YWxQcm9wZXJ0eSwgZmFsc2UpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0g
ICAgICAgIG5vdEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQot
ICAgICAgICBKdW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVn
VDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEds
b2JhbExleGljYWxWYXIsIHRydWUpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7
Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1w
IG5vdEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAg
ICBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotCi0gICAgICAgIHNraXBUb0VuZC5saW5rKHRoaXMp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBlbWl0Q29k
ZShyZXNvbHZlVHlwZSwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0
SW5mbyhjb3BpZWRJbnN0cnVjdGlvbihjdXJyZW50SW5zdHJ1Y3Rpb24pWzRdLnUub3BlcmFuZCk7
Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7
Ci0gICAgaWYgKHJlc29sdmVUeXBlID09IE1vZHVsZVZhcikgewotICAgICAgICBKSVRTbG93UGF0
aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Ro
cm93X3N0cmljdF9tb2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKLSAgICAgICAg
c2xvd1BhdGhDYWxsLmNhbGwoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRUb1Njb3BlLCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQotCi12b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgYXJndW1lbnRzID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIAotICAgIGVt
aXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDY0KEFkZHJl
c3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSksIHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKCk7Ci0gICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwotfQotCi12b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCi17Ci0gICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIAotICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwotICAgIHN0b3JlNjQocmVnVDEsIEFkZHJlc3Mo
cmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSkpOwotCi0gICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVu
dHMsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0V3JpdGVC
YXJyaWVyKHVuc2lnbmVkIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwgV3JpdGVCYXJyaWVyTW9kZSBt
b2RlKQotewotICAgIEp1bXAgdmFsdWVOb3RDZWxsOwotICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSB7Ci0gICAgICAg
IGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RD
ZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICB9Ci0gICAgCi0gICAgZW1pdEdldFZp
cnR1YWxSZWdpc3Rlcihvd25lciwgcmVnVDApOwotICAgIEp1bXAgb3duZXJOb3RDZWxsOwotICAg
IGlmIChtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZp
bHRlckJhc2UpCi0gICAgICAgIG93bmVyTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0KLSAgICBKdW1wIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4gPSBiYXJyaWVyQnJhbmNoKCp2
bSgpLCByZWdUMCwgcmVnVDEpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uV3JpdGVCYXJy
aWVyU2xvd1BhdGgsIHJlZ1QwKTsKLSAgICBvd25lcklzUmVtZW1iZXJlZE9ySW5FZGVuLmxpbmso
dGhpcyk7Ci0KLSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUgfHwgbW9k
ZSA9PSBTaG91bGRGaWx0ZXJCYXNlKQotICAgICAgICBvd25lck5vdENlbGwubGluayh0aGlzKTsK
LSAgICBpZiAobW9kZSA9PSBTaG91bGRGaWx0ZXJWYWx1ZSB8fCBtb2RlID09IFNob3VsZEZpbHRl
ckJhc2VBbmRWYWx1ZSkgCi0gICAgICAgIHZhbHVlTm90Q2VsbC5saW5rKHRoaXMpOwotfQotCi12
b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCB2YWx1ZSwg
V3JpdGVCYXJyaWVyTW9kZSBtb2RlKQotewotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBKdW1wIHZhbHVlTm90Q2VsbDsKLSAgICBpZiAobW9kZSA9PSBTaG91
bGRGaWx0ZXJWYWx1ZSkKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJl
Z1QwKTsKLQotICAgIGVtaXRXcml0ZUJhcnJpZXIob3duZXIpOwotCi0gICAgaWYgKG1vZGUgPT0g
U2hvdWxkRmlsdGVyVmFsdWUpIAotICAgICAgICB2YWx1ZU5vdENlbGwubGluayh0aGlzKTsKLX0K
LQotI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkKLQotdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIo
dW5zaWduZWQgb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17
Ci0gICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpIHsKLSAgICAgICAgZW1pdExv
YWRUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVOb3RDZWxsID0gYnJhbmNoSWZOb3RD
ZWxsKHJlZ1QwKTsKLSAgICB9Ci0gICAgCi0gICAgZW1pdExvYWQob3duZXIsIHJlZ1QwLCByZWdU
MSk7Ci0gICAgSnVtcCBvd25lck5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVy
QmFzZSB8fCBtb2RlID09IFNob3VsZEZpbHRlckJhc2VBbmRWYWx1ZSkKLSAgICAgICAgb3duZXJO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLQotICAgIEp1bXAgb3duZXJJc1JlbWVt
YmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2goKnZtKCksIHJlZ1QxLCByZWdUMik7Ci0gICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93UGF0aCwgcmVnVDEpOwotICAg
IG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsKLQotICAgIGlmIChtb2RlID09
IFNob3VsZEZpbHRlckJhc2UgfHwgbW9kZSA9PSBTaG91bGRGaWx0ZXJCYXNlQW5kVmFsdWUpCi0g
ICAgICAgIG93bmVyTm90Q2VsbC5saW5rKHRoaXMpOwotICAgIGlmIChtb2RlID09IFNob3VsZEZp
bHRlclZhbHVlIHx8IG1vZGUgPT0gU2hvdWxkRmlsdGVyQmFzZUFuZFZhbHVlKSAKLSAgICAgICAg
dmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0V3JpdGVCYXJyaWVy
KEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIHZhbHVlLCBXcml0ZUJhcnJpZXJNb2RlIG1vZGUpCi17
Ci0gICAgSnVtcCB2YWx1ZU5vdENlbGw7Ci0gICAgaWYgKG1vZGUgPT0gU2hvdWxkRmlsdGVyVmFs
dWUpIHsKLSAgICAgICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKLSAgICAgICAgdmFsdWVO
b3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKLSAgICB9Ci0KLSAgICBlbWl0V3JpdGVC
YXJyaWVyKG93bmVyKTsKLQotICAgIGlmIChtb2RlID09IFNob3VsZEZpbHRlclZhbHVlKSAKLSAg
ICAgICAgdmFsdWVOb3RDZWxsLmxpbmsodGhpcyk7Ci19Ci0KLSNlbmRpZiAvLyBVU0UoSlNWQUxV
RTY0KQotCi12b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQotewotICAg
IEp1bXAgb3duZXJJc1JlbWVtYmVyZWRPckluRWRlbiA9IGJhcnJpZXJCcmFuY2goKnZtKCksIG93
bmVyLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Xcml0ZUJhcnJpZXJTbG93
UGF0aCwgb3duZXIpOwotICAgIG93bmVySXNSZW1lbWJlcmVkT3JJbkVkZW4ubGluayh0aGlzKTsK
LX0KLQotdm9pZCBKSVQ6OmVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhCeVZhbEluZm8qIGJ5VmFs
SW5mbywgUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIHNjcmF0Y2gsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgSnVtcExpc3QmIHNsb3dDYXNlcykKLXsKLSAgICBpZiAocHJvcGVy
dHlOYW1lLmlzU3ltYm9sKCkpCi0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoUHRyKE5v
dEVxdWFsLCBjZWxsLCBUcnVzdGVkSW1tUHRyKGJ5VmFsSW5mby0+Y2FjaGVkU3ltYm9sLmdldCgp
KSkpOwotICAgIGVsc2UgewotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90U3Ry
aW5nKGNlbGwpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNlbGwsIEpTU3RyaW5nOjpvZmZz
ZXRPZlZhbHVlKCkpLCBzY3JhdGNoKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hQ
dHIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9k
ZSBhcnJheU1vZGUpCi17Ci0gICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICZt
X2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4XTsKLSAg
ICAKLSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwot
ICAgIAotICAgIHN3aXRjaCAoYXJyYXlNb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdEludDMyR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRU
eXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXREb3VibGVHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNl
cyA9IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAgICAgIHNsb3dD
YXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVERpcmVjdEFyZ3VtZW50czoKLSAgICAg
ICAgc2xvd0Nhc2VzID0gZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSklUU2NvcGVkQXJndW1l
bnRzOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0U2NvcGVkQXJndW1lbnRzR2V0QnlWYWwoY3Vy
cmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgVHlwZWRBcnJheVR5cGUgdHlwZSA9IHR5cGVkQXJyYXlUeXBlRm9ySklUQXJyYXlN
b2RlKGFycmF5TW9kZSk7Ci0gICAgICAgIGlmIChpc0ludCh0eXBlKSkKLSAgICAgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlLCB0eXBlKTsKLSAgICAgICAgZWxzZSAKLSAgICAgICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5
cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgSnVtcCBkb25lID0ganVtcCgp
OwotCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdGhpcywgbV9jb2RlQmxvY2spOwotICAg
IAotICAgIHBhdGNoQnVmZmVyLmxpbmsoYmFkVHlwZSwgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJU
YWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxl
QWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+
cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
cywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0
clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkp
KS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAg
ICAKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGRvbmUsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFi
ZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7Ci0gICAgCi0gICAgYnlW
YWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1f
Y29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICJC
YXNlbGluZSBnZXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0b0NTdHJp
bmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7Ci0gICAgCi0g
ICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAsIENv
ZGVMb2NhdGlvbkxhYmVsPEpJVFN0dWJSb3V0aW5lUHRyVGFnPihieVZhbEluZm8tPnN0dWJSb3V0
aW5lLT5jb2RlKCkuY29kZSgpKSk7Ci0gICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENv
ZGVMb2NhdGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4o
cmV0dXJuQWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkdl
dEJ5VmFsR2VuZXJpYykpOwotfQotCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdp
dGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICZtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4XTsKLQotICAgIEp1bXAgZmFzdERvbmVDYXNlOwotICAgIEp1
bXAgc2xvd0RvbmVDYXNlOwotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLQotICAgIEpJVEdldEJ5
SWRHZW5lcmF0b3IgZ2VuID0gZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgY3Vy
cmVudEluc3RydWN0aW9uLCBwcm9wZXJ0eU5hbWUsIGZhc3REb25lQ2FzZSwgc2xvd0RvbmVDYXNl
LCBzbG93Q2FzZXMpOwotCi0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9j
ayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlvbkxhYmVsPE5v
UHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+OjpjcmVhdGVGcm9tRXhlY3V0
YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbElu
Zm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhmYXN0
RG9uZUNhc2UsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8t
PmJhZFR5cGVKdW1wVG9Eb25lKSk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhzbG93RG9uZUNhc2Us
IGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVK
dW1wVG9OZXh0SG90UGF0aCkpOwotICAgIGlmICghbV9leGNlcHRpb25DaGVja3MuZW1wdHkoKSkK
LSAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2V4Y2VwdGlvbkNoZWNrcywgYnlWYWxJbmZvLT5l
eGNlcHRpb25IYW5kbGVyKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2Nh
bGxzKSB7Ci0gICAgICAgIGlmIChjYWxsU2l0ZS5jYWxsZWUpCi0gICAgICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIGNhbGxTaXRlLmNhbGxlZSk7Ci0gICAgfQotICAgIGdl
bi5maW5hbGl6ZShwYXRjaEJ1ZmZlciwgcGF0Y2hCdWZmZXIpOwotCi0gICAgYnlWYWxJbmZvLT5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCi0gICAgICAgIG1fY29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwgSklUU3R1YlJvdXRpbmVQdHJUYWcsCi0gICAgICAgICJCYXNlbGluZSBn
ZXRfYnlfdmFsIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVzJyBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRmOCgpLmRhdGEoKSwgdG9DU3Ry
aW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwotICAgIGJ5
VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKLQotICAgIE1hY3JvQXNzZW1ibGVy
OjpyZXBhdGNoSnVtcChieVZhbEluZm8tPm5vdEluZGV4SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWw8
SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxO
b1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihyZXR1cm5BZGRyZXNzKSks
IEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4ob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKSk7
Ci19Ci0KLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1v
ZGUpCi17Ci0gICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9ICZtX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKClbYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4XTsKLSAgICAKLSAgICBQ
YXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotCi0gICAgYm9v
bCBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIgPSBmYWxzZTsKLQotICAgIHN3aXRjaCAoYXJyYXlN
b2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQzMjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMy
UHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZh
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlW
YWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgbmVlZHNMaW5rRm9yV3Jp
dGVCYXJyaWVyID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3Jh
Z2U6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOwotICAgICAgICBuZWVkc0xpbmtGb3JXcml0ZUJhcnJpZXIg
PSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBUeXBlZEFycmF5
VHlwZSB0eXBlID0gdHlwZWRBcnJheVR5cGVGb3JKSVRBcnJheU1vZGUoYXJyYXlNb2RlKTsKLSAg
ICAgICAgaWYgKGlzSW50KHR5cGUpKQotICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludFR5
cGVkQXJyYXlQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUsIHR5cGUpOwotICAg
ICAgICBlbHNlIAotICAgICAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEZsb2F0VHlwZWRBcnJheVB1
dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSwgdHlwZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0KLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCp0aGlzLCBtX2NvZGVCbG9jayk7Ci0gICAgcGF0Y2hCdWZmZXIubGluayhi
YWRUeXBlLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFs
dWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkp
OwotICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbDxOb1B0
clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPjo6Y3JlYXRlRnJvbUV4ZWN1dGFi
bGVBZGRyZXNzKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZv
LT5yZXR1cm5BZGRyZXNzVG9TbG93UGF0aCkpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZSwg
YnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1
bXBUb0RvbmUpKTsKLSAgICBpZiAobmVlZHNMaW5rRm9yV3JpdGVCYXJyaWVyKSB7Ci0gICAgICAg
IEFTU0VSVChyZW1vdmVDb2RlUHRyVGFnKG1fY2FsbHMubGFzdCgpLmNhbGxlZS5leGVjdXRhYmxl
QWRkcmVzcygpKSA9PSByZW1vdmVDb2RlUHRyVGFnKG9wZXJhdGlvbldyaXRlQmFycmllclNsb3dQ
YXRoKSk7Ci0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxscy5sYXN0KCkuZnJvbSwgbV9j
YWxscy5sYXN0KCkuY2FsbGVlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0RpcmVjdCA9IElu
dGVycHJldGVyOjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBpZiAoIWlzRGlyZWN0KSB7Ci0gICAgICAgIGJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAg
bV9jb2RlQmxvY2ssIHBhdGNoQnVmZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAg
ICAgICJCYXNlbGluZSBwdXRfYnlfdmFsIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCB0
b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7Ci0g
ICAgICAgIAotICAgIH0gZWxzZSB7Ci0gICAgICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBG
SU5BTElaRV9DT0RFX0ZPUl9TVFVCKAotICAgICAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNoQnVm
ZmVyLCBKSVRTdHViUm91dGluZVB0clRhZywKLSAgICAgICAgICAgICJCYXNlbGluZSBwdXRfYnlf
dmFsX2RpcmVjdCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgdG9DU3RyaW5nKCptX2Nv
ZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVlKCkpOwotICAgIH0KLSAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwYXRjaEp1bXAoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcCwgQ29kZUxvY2F0
aW9uTGFiZWw8SklUU3R1YlJvdXRpbmVQdHJUYWc+KGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKLSAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaENhbGwoQ29kZUxvY2F0
aW9uQ2FsbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPE5vUHRyVGFnPihyZXR1cm5B
ZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4oaXNEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLX0K
LQotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRL
aW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9ICZtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnlWYWxJ
bmZvLT5ieXRlY29kZUluZGV4XTsKLQotICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKLSAgICBKdW1w
TGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRC
eVZhbFdpdGhDYWNoZWRJZChieVZhbEluZm8sIGN1cnJlbnRJbnN0cnVjdGlvbiwgcHV0S2luZCwg
cHJvcGVydHlOYW1lLCBkb25lQ2FzZXMsIHNsb3dDYXNlcyk7Ci0KLSAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKnRoaXMsIG1fY29kZUJsb2NrKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNl
cywgQ29kZUxvY2F0aW9uTGFiZWw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0
clRhZz46OmNyZWF0ZUZyb21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkp
KS5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKLSAg
ICBwYXRjaEJ1ZmZlci5saW5rKGRvbmVDYXNlcywgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJl
bEF0T2Zmc2V0KGJ5VmFsSW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKLSAgICBpZiAoIW1fZXhj
ZXB0aW9uQ2hlY2tzLmVtcHR5KCkpCi0gICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9leGNlcHRp
b25DaGVja3MsIGJ5VmFsSW5mby0+ZXhjZXB0aW9uSGFuZGxlcik7Ci0KLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGNhbGxTaXRlIDogbV9jYWxscykgewotICAgICAgICBpZiAoY2FsbFNpdGUuY2FsbGVl
KQotICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBjYWxsU2l0ZS5j
YWxsZWUpOwotICAgIH0KLSAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIsIHBhdGNoQnVmZmVy
KTsKLQotICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTElaRV9DT0RFX0ZPUl9TVFVC
KAotICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsIEpJVFN0dWJSb3V0aW5lUHRyVGFn
LAotICAgICAgICAiQmFzZWxpbmUgcHV0X2J5X3ZhbCVzIHdpdGggY2FjaGVkIHByb3BlcnR5IG5h
bWUgJyVzJyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgKHB1dEtpbmQgPT0gRGlyZWN0
KSA/ICJfZGlyZWN0IiA6ICIiLCBwcm9wZXJ0eU5hbWUuaW1wbCgpLT51dGY4KCkuZGF0YSgpLCB0
b0NTdHJpbmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSk7Ci0g
ICAgYnlWYWxJbmZvLT5zdHViSW5mbyA9IGdlbi5zdHViSW5mbygpOwotCi0gICAgTWFjcm9Bc3Nl
bWJsZXI6OnJlcGF0Y2hKdW1wKGJ5VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbDxKSVRTdHViUm91dGluZVB0clRhZz4oYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgp
LmNvZGUoKSkpOwotICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNoQ2FsbChDb2RlTG9jYXRpb25D
YWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9QdHJUYWc+KHJldHVybkFkZHJl
c3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihwdXRLaW5kID09IERpcmVjdCA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykp
OwotfQotCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERvdWJsZUxvYWQoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKQotewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgUmVnaXN0
ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QxOwotICAg
IFJlZ2lzdGVySUQgaW5kZXhpbmcgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSBy
ZWdUMzsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJ
RCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgaW5kZXhpbmcgPSByZWdUMTsKLSAg
ICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKLSNlbmRpZgotCi0gICAgSnVtcExpc3Qgc2xv
d0Nhc2VzOwotCi0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBpbmRl
eGluZywgVHJ1c3RlZEltbTMyKERvdWJsZVNoYXBlKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIHNjcmF0Y2gpOwotICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRkcmVzcyhzY3JhdGNo
LCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKSk7Ci0gICAgbG9hZERvdWJsZShC
YXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRWlnaHQpLCBmcFJlZ1QwKTsKLSAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaERvdWJsZShEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkLCBm
cFJlZ1QwLCBmcFJlZ1QwKSk7Ci0KLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi1KSVQ6Okp1
bXBMaXN0IEpJVDo6ZW1pdENvbnRpZ3VvdXNMb2FkKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUpCi17Ci0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3Bl
cnR5ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBpbmRleGluZyA9IHJlZ1QyOwotICAgIEpTVmFs
dWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBSZWdpc3RlcklEIHNjcmF0
Y2ggPSByZWdUMzsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVn
aXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgaW5kZXhpbmcgPSByZWdU
MTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwot
ICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOwotI2VuZGlmCi0KLSAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7Ci0KLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGlu
ZGV4aW5nLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRTaGFwZSkpOwotICAgIGxvYWRQdHIoQWRkcmVz
cyhiYXNlLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3Moc2Ny
YXRjaCwgQnV0dGVyZmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSkpOwotICAgIGxvYWRWYWx1
ZShCYXNlSW5kZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRWlnaHQpLCByZXN1bHQpOwotICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZFbXB0eShyZXN1bHQpKTsKLQotICAgIHJldHVybiBz
bG93Q2FzZXM7Ci19Ci0KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlTG9hZChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCi17Ci0jaWYgVVNFKEpTVkFMVUU2
NCkKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5
ID0gcmVnVDE7Ci0gICAgUmVnaXN0ZXJJRCBpbmRleGluZyA9IHJlZ1QyOwotICAgIEpTVmFsdWVS
ZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2gg
PSByZWdUMzsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0
ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgaW5kZXhpbmcgPSByZWdUMTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApOwotICAg
IFJlZ2lzdGVySUQgc2NyYXRjaCA9IHJlZ1QzOwotI2VuZGlmCi0KLSAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7Ci0KLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoLUFycmF5U3RvcmFnZVNoYXBlKSwgaW5k
ZXhpbmcsIHNjcmF0Y2gpOwotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVCcmFuY2gzMihBYm92ZSwg
c2NyYXRjaCwgVHJ1c3RlZEltbTMyKFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZSAtIEFycmF5U3Rv
cmFnZVNoYXBlKSk7Ci0KLSAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgSlNPYmplY3Q6OmJ1dHRl
cmZseU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKHNjcmF0Y2gsIEFycmF5U3RvcmFnZTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKSk7Ci0KLSAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gs
IHByb3BlcnR5LCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpKSwgcmVz
dWx0KTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVzdWx0KSk7Ci0KLSAg
ICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERpcmVjdEFy
Z3VtZW50c0dldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKLXsK
LSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBS
ZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7
Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDApOwotICAgIFJlZ2lz
dGVySUQgc2NyYXRjaCA9IHJlZ1QzOwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaDIgPSByZWdUNDsK
LSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9w
ZXJ0eSA9IHJlZ1QyOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCk7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoMiA9IHJlZ1Q0OwotI2VuZGlmCi0KLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0
Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihEaXJlY3RBcmd1
bWVudHNUeXBlKSk7Ci0gICAgCi0gICAgbG9hZDMyKEFkZHJlc3MoYmFzZSwgRGlyZWN0QXJndW1l
bnRzOjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaDIpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgc2NyYXRjaDIpKTsKLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoTm9uWmVybywgQWRkcmVzcyhiYXNlLCBEaXJlY3RBcmd1
bWVudHM6Om9mZnNldE9mTWFwcGVkQXJndW1lbnRzKCkpKSk7Ci0gICAgCi0gICAgbG9hZFZhbHVl
KEJhc2VJbmRleChiYXNlLCBwcm9wZXJ0eSwgVGltZXNFaWdodCwgRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCkpLCByZXN1bHQpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19
Ci0KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0U2NvcGVkQXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1
Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQotewotICAgIEp1bXBMaXN0IHNsb3dDYXNl
czsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1Qw
OwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsKLSAgICBKU1ZhbHVlUmVncyByZXN1
bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7
Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJlZ1Q0OwotICAgIFJlZ2lzdGVySUQgc2NyYXRj
aDMgPSByZWdUNTsKLSNlbHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVn
aXN0ZXJJRCBwcm9wZXJ0eSA9IHJlZ1QyOwotICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCk7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7Ci0g
ICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJlZ1Q0OwotICAgIFJlZ2lzdGVySUQgc2NyYXRjaDMg
PSByZWdUNTsKLSNlbmRpZgotCi0gICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJ
bmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5j
aDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoU2NvcGVkQXJndW1lbnRzVHlwZSkp
OwotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU3Rv
cmFnZSgpKSwgc2NyYXRjaDMpOwotICAgIHhvclB0cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3Vt
ZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMyk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKHNjcmF0Y2gzLCBTY29wZWRBcmd1
bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGhJblN0b3JhZ2UoKSkpKTsKLSAgICAKLSAgICBsb2Fk
UHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3Jh
dGNoKTsKLSAgICB4b3JQdHIoVHJ1c3RlZEltbVB0cihTY29wZWRBcmd1bWVudHNQb2lzb246Omtl
eSgpKSwgc2NyYXRjaCk7Ci0gICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1l
bnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoMik7Ci0gICAgSnVtcCBvdmVyZmxv
d0Nhc2UgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBzY3JhdGNoMik7Ci0gICAg
bG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwg
c2NyYXRjaDIpOwotICAgIHhvclB0cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNv
bjo6a2V5KCkpLCBzY3JhdGNoMik7Ci0gICAgbG9hZFB0cihBZGRyZXNzKHNjcmF0Y2gsIFNjb3Bl
ZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwgc2NyYXRjaCk7Ci0gICAgbG9h
ZDMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3VyKSwgc2NyYXRjaCk7Ci0g
ICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMy
KFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOwotICAgIGxvYWRWYWx1ZShCYXNlSW5kZXgo
c2NyYXRjaDIsIHNjcmF0Y2gsIFRpbWVzRWlnaHQsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZz
ZXRPZlZhcmlhYmxlcygpKSwgcmVzdWx0KTsKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAg
b3ZlcmZsb3dDYXNlLmxpbmsodGhpcyk7Ci0gICAgc3ViMzIocHJvcGVydHksIHNjcmF0Y2gyKTsK
LSAgICBuZWczMihzY3JhdGNoMik7Ci0gICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3JhdGNoMywg
c2NyYXRjaDIsIFRpbWVzRWlnaHQpLCByZXN1bHQpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZFbXB0eShyZXN1bHQpKTsKLSAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgbG9h
ZDMyKEFkZHJlc3Moc2NyYXRjaDMsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0
aEluU3RvcmFnZSgpKSwgc2NyYXRjaCk7Ci0gICAgZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNr
MzIocHJvcGVydHksIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKLSAgICBhbmRQdHIoc2NyYXRjaDIsIHJl
c3VsdC5wYXlsb2FkR1BSKCkpOwotICAgIAotICAgIHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLUpJ
VDo6SnVtcExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUgdHlwZSkKLXsKLSAgICBBU1NF
UlQoaXNJbnQodHlwZSkpOwotICAgIAotICAgIC8vIFRoZSBiZXN0IHdheSB0byB0ZXN0IHRoZSBh
cnJheSB0eXBlIGlzIHRvIHVzZSB0aGUgY2xhc3NJbmZvLiBXZSBuZWVkIHRvIGRvIHNvIHdpdGhv
dXQKLSAgICAvLyBjbG9iYmVyaW5nIHRoZSByZWdpc3RlciB0aGF0IGhvbGRzIHRoZSBpbmRleGlu
ZyB0eXBlLCBiYXNlLCBhbmQgcHJvcGVydHkuCi0KLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIFJl
Z2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQgcHJvcGVydHkgPSByZWdUMTsK
LSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhyZWdUMCk7Ci0gICAgUmVnaXN0
ZXJJRCBzY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoMiA9IHJlZ1Q0Owot
I2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3Bl
cnR5ID0gcmVnVDI7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklE
IHNjcmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICBSZWdpc3RlcklEIHJlc3VsdFBheWxvYWQg
PSByZXN1bHQucGF5bG9hZEdQUigpOwotICAgIAotICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKLSAg
ICAKLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNj
cmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5cGUodHlwZSkpKTsKLSAgICBz
bG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwgcHJvcGVydHksIEFkZHJlc3Mo
YmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7Ci0gICAgbG9hZFB0
cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZlZlY3RvcigpKSwgc2Ny
YXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgc2NyYXRj
aCwgc2NyYXRjaDIpOwotCi0gICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBlKSkgewotICAgIGNh
c2UgMToKLSAgICAgICAgaWYgKEpTQzo6aXNTaWduZWQodHlwZSkpCi0gICAgICAgICAgICBsb2Fk
OFNpZ25lZEV4dGVuZFRvMzIoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc09uZSks
IHJlc3VsdFBheWxvYWQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2FkOChCYXNlSW5k
ZXgoc2NyYXRjaCwgcHJvcGVydHksIFRpbWVzT25lKSwgcmVzdWx0UGF5bG9hZCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgaWYgKEpTQzo6aXNTaWduZWQodHlwZSkpCi0g
ICAgICAgICAgICBsb2FkMTZTaWduZWRFeHRlbmRUbzMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9w
ZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQYXlsb2FkKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbG9hZDE2KEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNUd28pLCByZXN1bHRQ
YXlsb2FkKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBsb2FkMzIoQmFz
ZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpLCByZXN1bHRQYXlsb2FkKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAg
Ci0gICAgSnVtcCBkb25lOwotICAgIGlmICh0eXBlID09IFR5cGVVaW50MzIpIHsKLSAgICAgICAg
SnVtcCBjYW5CZUludCA9IGJyYW5jaDMyKEdyZWF0ZXJUaGFuT3JFcXVhbCwgcmVzdWx0UGF5bG9h
ZCwgVHJ1c3RlZEltbTMyKDApKTsKLSAgICAgICAgCi0gICAgICAgIGNvbnZlcnRJbnQzMlRvRG91
YmxlKHJlc3VsdFBheWxvYWQsIGZwUmVnVDApOwotICAgICAgICBhZGREb3VibGUoQWJzb2x1dGVB
ZGRyZXNzKCZ0d29Ub1RoZTMyKSwgZnBSZWdUMCk7Ci0gICAgICAgIGJveERvdWJsZShmcFJlZ1Qw
LCByZXN1bHQpOwotICAgICAgICBkb25lID0ganVtcCgpOwotICAgICAgICBjYW5CZUludC5saW5r
KHRoaXMpOwotICAgIH0KLQotICAgIGJveEludDMyKHJlc3VsdFBheWxvYWQsIHJlc3VsdCk7Ci0g
ICAgaWYgKGRvbmUuaXNTZXQoKSkKLSAgICAgICAgZG9uZS5saW5rKHRoaXMpOwotICAgIHJldHVy
biBzbG93Q2FzZXM7Ci19Ci0KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0RmxvYXRUeXBlZEFycmF5
R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5
VHlwZSB0eXBlKQotewotICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAKLSNpZiBVU0Uo
SlNWQUxVRTY0KQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lzdGVySUQg
cHJvcGVydHkgPSByZWdUMTsKLSAgICBKU1ZhbHVlUmVncyByZXN1bHQgPSBKU1ZhbHVlUmVncyhy
ZWdUMCk7Ci0gICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVnaXN0ZXJJRCBz
Y3JhdGNoMiA9IHJlZ1Q0OwotI2Vsc2UKLSAgICBSZWdpc3RlcklEIGJhc2UgPSByZWdUMDsKLSAg
ICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7Ci0gICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0g
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdU
MzsKLSAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0KLSAgICBsb2FkOChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJh
bmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5
cGUodHlwZSkpKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3ZlT3JFcXVhbCwg
cHJvcGVydHksIEFkZHJlc3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3Ro
KCkpKSk7Ci0gICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZz
ZXRPZlZlY3RvcigpKSwgc2NyYXRjaCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6
OlByaW1pdGl2ZSwgc2NyYXRjaCwgc2NyYXRjaDIpOwotICAgIAotICAgIHN3aXRjaCAoZWxlbWVu
dFNpemUodHlwZSkpIHsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIGxvYWRGbG9hdChCYXNlSW5kZXgo
c2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91ciksIGZwUmVnVDApOwotICAgICAgICBjb252ZXJ0
RmxvYXRUb0RvdWJsZShmcFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSA4OiB7Ci0gICAgICAgIGxvYWREb3VibGUoQmFzZUluZGV4KHNjcmF0Y2gsIHByb3BlcnR5LCBU
aW1lc0VpZ2h0KSwgZnBSZWdUMCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0
OgotICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAgICAKLSAgICBKdW1wIG5vdE5hTiA9IGJyYW5j
aERvdWJsZShEb3VibGVFcXVhbCwgZnBSZWdUMCwgZnBSZWdUMCk7Ci0gICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBOYU4gPSBQTmFOOwotICAgIGxvYWREb3VibGUoVHJ1c3RlZEltbVB0cigmTmFOKSwg
ZnBSZWdUMCk7Ci0gICAgbm90TmFOLmxpbmsodGhpcyk7Ci0gICAgCi0gICAgYm94RG91YmxlKGZw
UmVnVDAsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIHNsb3dDYXNlczsgICAgCi19Ci0KLUpJVDo6SnVt
cExpc3QgSklUOjplbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUp
Ci17Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUu
YXJyYXlQcm9maWxlOwotICAgIEFTU0VSVChpc0ludCh0eXBlKSk7Ci0gICAgCi0gICAgaW50IHZh
bHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLQotI2lmIFVTRShKU1ZBTFVF
NjQpCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0
eSA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVn
aXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gy
ID0gcmVnVDQ7Ci0jZWxzZQotICAgIFJlZ2lzdGVySUQgYmFzZSA9IHJlZ1QwOwotICAgIFJlZ2lz
dGVySUQgcHJvcGVydHkgPSByZWdUMjsKLSAgICBSZWdpc3RlcklEIGVhcmx5U2NyYXRjaCA9IHJl
Z1QzOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2ggPSByZWdUMTsKLSAgICBSZWdpc3RlcklE
IGxhdGVTY3JhdGNoMiA9IHJlZ1Q0OwotI2VuZGlmCi0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwotICAgIAotICAgIGxvYWQ4KEFkZHJlc3MoYmFzZSwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIGVhcmx5U2NyYXRjaCk7Ci0gICAgYmFkVHlwZSA9IHBhdGNoYWJsZUJyYW5jaDMy
KE5vdEVxdWFsLCBlYXJseVNjcmF0Y2gsIFRydXN0ZWRJbW0zMih0eXBlRm9yVHlwZWRBcnJheVR5
cGUodHlwZSkpKTsKLSAgICBKdW1wIGluQm91bmRzID0gYnJhbmNoMzIoQmVsb3csIHByb3BlcnR5
LCBBZGRyZXNzKGJhc2UsIEpTQXJyYXlCdWZmZXJWaWV3OjpvZmZzZXRPZkxlbmd0aCgpKSk7Ci0g
ICAgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UocHJvZmlsZSk7Ci0gICAg
c2xvd0Nhc2VzLmFwcGVuZChqdW1wKCkpOwotICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAg
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBl
YXJseVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihlYXJs
eVNjcmF0Y2gpKTsKLSNlbHNlCi0gICAgZW1pdExvYWQodmFsdWUsIGxhdGVTY3JhdGNoLCBlYXJs
eVNjcmF0Y2gpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RJbnQzMihsYXRlU2Ny
YXRjaCkpOwotI2VuZGlmCi0gICAgCi0gICAgLy8gV2Ugd291bGQgYmUgbG9hZGluZyB0aGlzIGlu
dG8gYmFzZSBhcyBpbiBnZXRfYnlfdmFsLCBleGNlcHQgdGhhdCB0aGUgc2xvdwotICAgIC8vIHBh
dGggZXhwZWN0cyB0aGUgYmFzZSB0byBiZSB1bmNsb2JiZXJlZC4KLSAgICBsb2FkUHRyKEFkZHJl
c3MoYmFzZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mVmVjdG9yKCkpLCBsYXRlU2NyYXRj
aCk7Ci0gICAgY2FnZUNvbmRpdGlvbmFsbHkoR2lnYWNhZ2U6OlByaW1pdGl2ZSwgbGF0ZVNjcmF0
Y2gsIGxhdGVTY3JhdGNoMik7Ci0gICAgCi0gICAgaWYgKGlzQ2xhbXBlZCh0eXBlKSkgewotICAg
ICAgICBBU1NFUlQoZWxlbWVudFNpemUodHlwZSkgPT0gMSk7Ci0gICAgICAgIEFTU0VSVCghSlND
Ojppc1NpZ25lZCh0eXBlKSk7Ci0gICAgICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxv
d09yRXF1YWwsIGVhcmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKDB4ZmYpKTsKLSAgICAgICAgSnVt
cCB0b29CaWcgPSBicmFuY2gzMihHcmVhdGVyVGhhbiwgZWFybHlTY3JhdGNoLCBUcnVzdGVkSW1t
MzIoMHhmZikpOwotICAgICAgICB4b3IzMihlYXJseVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0g
ICAgICAgIEp1bXAgY2xhbXBlZCA9IGp1bXAoKTsKLSAgICAgICAgdG9vQmlnLmxpbmsodGhpcyk7
Ci0gICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKDB4ZmYpLCBlYXJseVNjcmF0Y2gpOwotICAgICAg
ICBjbGFtcGVkLmxpbmsodGhpcyk7Ci0gICAgICAgIGluQm91bmRzLmxpbmsodGhpcyk7Ci0gICAg
fQotICAgIAotICAgIHN3aXRjaCAoZWxlbWVudFNpemUodHlwZSkpIHsKLSAgICBjYXNlIDE6Ci0g
ICAgICAgIHN0b3JlOChlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVy
dHksIFRpbWVzT25lKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgc3Rv
cmUxNihlYXJseVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVz
VHdvKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgc3RvcmUzMihlYXJs
eVNjcmF0Y2gsIEJhc2VJbmRleChsYXRlU2NyYXRjaCwgcHJvcGVydHksIFRpbWVzRm91cikpOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFTSCgpOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEZs
b2F0VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlIHR5cGUpCi17Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwot
ICAgIEFTU0VSVChpc0Zsb2F0KHR5cGUpKTsKLSAgICAKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBSZWdp
c3RlcklEIGJhc2UgPSByZWdUMDsKLSAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDE7Ci0g
ICAgUmVnaXN0ZXJJRCBlYXJseVNjcmF0Y2ggPSByZWdUMzsKLSAgICBSZWdpc3RlcklEIGxhdGVT
Y3JhdGNoID0gcmVnVDI7Ci0gICAgUmVnaXN0ZXJJRCBsYXRlU2NyYXRjaDIgPSByZWdUNDsKLSNl
bHNlCi0gICAgUmVnaXN0ZXJJRCBiYXNlID0gcmVnVDA7Ci0gICAgUmVnaXN0ZXJJRCBwcm9wZXJ0
eSA9IHJlZ1QyOwotICAgIFJlZ2lzdGVySUQgZWFybHlTY3JhdGNoID0gcmVnVDM7Ci0gICAgUmVn
aXN0ZXJJRCBsYXRlU2NyYXRjaCA9IHJlZ1QxOwotICAgIFJlZ2lzdGVySUQgbGF0ZVNjcmF0Y2gy
ID0gcmVnVDQ7Ci0jZW5kaWYKLSAgICAKLSAgICBKdW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0g
ICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgZWFy
bHlTY3JhdGNoKTsKLSAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIGVh
cmx5U2NyYXRjaCwgVHJ1c3RlZEltbTMyKHR5cGVGb3JUeXBlZEFycmF5VHlwZSh0eXBlKSkpOwot
ICAgIEp1bXAgaW5Cb3VuZHMgPSBicmFuY2gzMihCZWxvdywgcHJvcGVydHksIEFkZHJlc3MoYmFz
ZSwgSlNBcnJheUJ1ZmZlclZpZXc6Om9mZnNldE9mTGVuZ3RoKCkpKTsKLSAgICBlbWl0QXJyYXlQ
cm9maWxlT3V0T2ZCb3VuZHNTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBzbG93Q2FzZXMuYXBw
ZW5kKGp1bXAoKSk7Ci0gICAgaW5Cb3VuZHMubGluayh0aGlzKTsKLSAgICAKLSNpZiBVU0UoSlNW
QUxVRTY0KQotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIGVhcmx5U2NyYXRjaCk7
Ci0gICAgSnVtcCBkb3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQzMihlYXJseVNjcmF0Y2gpOwot
ICAgIGNvbnZlcnRJbnQzMlRvRG91YmxlKGVhcmx5U2NyYXRjaCwgZnBSZWdUMCk7Ci0gICAgSnVt
cCByZWFkeSA9IGp1bXAoKTsKLSAgICBkb3VibGVDYXNlLmxpbmsodGhpcyk7Ci0gICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihlYXJseVNjcmF0Y2gpKTsKLSAgICBhZGQ2NCh0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGVhcmx5U2NyYXRjaCk7Ci0gICAgbW92ZTY0VG9Eb3VibGUo
ZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICByZWFkeS5saW5rKHRoaXMpOwotI2Vsc2UKLSAg
ICBlbWl0TG9hZCh2YWx1ZSwgbGF0ZVNjcmF0Y2gsIGVhcmx5U2NyYXRjaCk7Ci0gICAgSnVtcCBk
b3VibGVDYXNlID0gYnJhbmNoSWZOb3RJbnQzMihsYXRlU2NyYXRjaCk7Ci0gICAgY29udmVydElu
dDMyVG9Eb3VibGUoZWFybHlTY3JhdGNoLCBmcFJlZ1QwKTsKLSAgICBKdW1wIHJlYWR5ID0ganVt
cCgpOwotICAgIGRvdWJsZUNhc2UubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaDMyKEFib3ZlLCBsYXRlU2NyYXRjaCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRh
ZykpKTsKLSAgICBtb3ZlSW50c1RvRG91YmxlKGVhcmx5U2NyYXRjaCwgbGF0ZVNjcmF0Y2gsIGZw
UmVnVDAsIGZwUmVnVDEpOwotICAgIHJlYWR5LmxpbmsodGhpcyk7Ci0jZW5kaWYKLSAgICAKLSAg
ICAvLyBXZSB3b3VsZCBiZSBsb2FkaW5nIHRoaXMgaW50byBiYXNlIGFzIGluIGdldF9ieV92YWws
IGV4Y2VwdCB0aGF0IHRoZSBzbG93Ci0gICAgLy8gcGF0aCBleHBlY3RzIHRoZSBiYXNlIHRvIGJl
IHVuY2xvYmJlcmVkLgotICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBKU0FycmF5QnVmZmVyVmll
dzo6b2Zmc2V0T2ZWZWN0b3IoKSksIGxhdGVTY3JhdGNoKTsKLSAgICBjYWdlQ29uZGl0aW9uYWxs
eShHaWdhY2FnZTo6UHJpbWl0aXZlLCBsYXRlU2NyYXRjaCwgbGF0ZVNjcmF0Y2gyKTsKLSAgICAK
LSAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7Ci0gICAgY2FzZSA0OgotICAgICAgICBj
b252ZXJ0RG91YmxlVG9GbG9hdChmcFJlZ1QwLCBmcFJlZ1QwKTsKLSAgICAgICAgc3RvcmVGbG9h
dChmcFJlZ1QwLCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0ZvdXIpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4OgotICAgICAgICBzdG9yZURvdWJsZShmcFJlZ1Qw
LCBCYXNlSW5kZXgobGF0ZVNjcmF0Y2gsIHByb3BlcnR5LCBUaW1lc0VpZ2h0KSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIENSQVNIKCk7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBzbG93Q2FzZXM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8g
RU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OTNhNTQ2
MTJhOTQ2MWIxNGM5ODE1Y2VmOWZhOWYwODJkNmI2MTM5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAyICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSklUKQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0j
aW5jbHVkZSAiSklULmgiCi0KLSNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlICJEaXJl
Y3RBcmd1bWVudHMuaCIKLSNpbmNsdWRlICJHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCIKLSNpbmNs
dWRlICJJbnRlcnByZXRlcklubGluZXMuaCIKLSNpbmNsdWRlICJKSVRJbmxpbmVzLmgiCi0jaW5j
bHVkZSAiSlNBcnJheS5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJKU0xl
eGljYWxFbnZpcm9ubWVudC5oIgotI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKLSNpbmNsdWRlICJS
ZXN1bHRUeXBlLmgiCi0jaW5jbHVkZSAiU2xvd1BhdGhDYWxsLmgiCi0jaW5jbHVkZSAiU3RydWN0
dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KLQotCi1u
YW1lc3BhY2UgSlNDIHsKLSAgICAKLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgYmFzZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgb3B0aW9ucyA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGdldHRlciA9IGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwotICAgIGVt
aXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
blB1dEdldHRlckJ5SWQsIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSku
aW1wbCgpLCBvcHRpb25zLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpbnQgYmFz
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgb3B0aW9ucyA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNldHRlciA9IGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEp
OwotICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKLSAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihw
cm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IGF0dHJpYnV0ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGdl
dHRlciA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNldHRlciA9
IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQo
YmFzZSwgcmVnVDEpOwotICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKLSAgICBl
bWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUNCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0
eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QzLCByZWdUNCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQg
Z2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2Fk
UGF5bG9hZChiYXNlLCByZWdUMik7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdU
MCk7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGJh
c2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVz
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgZ2V0dGVyID0gY3Vy
cmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChiYXNl
LCByZWdUMik7Ci0gICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1p
dExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UHV0U2V0dGVyQnlWYWwsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1
dGVzLCByZWdUMyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25EZWxldGVCeUlkSlNSZXN1bHQsIGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSk7Ci19Ci0KLXZv
aWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHBy
b3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBlbWl0TG9hZDIo
YmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAg
ICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFz
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7Ci0KLSAgICBlbWl0TG9h
ZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAKLSAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotICAgIFBhdGNoYWJs
ZUp1bXAgbm90SW5kZXggPSBwYXRjaGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsK
LSAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCBwcm9maWxl
KTsKLSAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMSk7Ci0K
LSAgICBQYXRjaGFibGVKdW1wIGJhZFR5cGU7Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAg
IAotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwotICAg
IHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnQzMkdldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0RG91
YmxlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGln
dW91c0dldEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJy
YXlTdG9yYWdlR2V0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICB9Ci0gICAgCi0gICAg
YWRkU2xvd0Nhc2UoYmFkVHlwZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAK
LSAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKLQotICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7
Ci0gICAgICAgIEp1bXAgcmVzdWx0T0sgPSBicmFuY2hJZk5vdEVtcHR5KHJlZ1QxKTsKLSAgICAg
ICAgYWJvcnRXaXRoUmVhc29uKEpJVEdldEJ5VmFsUmVzdWx0SXNOb3RFbXB0eSk7Ci0gICAgICAg
IHJlc3VsdE9LLmxpbmsodGhpcyk7Ci0gICAgfQotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZSgpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci0KLSAgICBMYWJlbCBuZXh0
SG90UGF0aCA9IGxhYmVsKCk7Ci0gICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBub3RJ
bmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKLX0KLQot
SklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wJiBmYXN0RG9uZUNhc2UsIEp1bXAmIHNsb3dEb25l
Q2FzZSwgSnVtcExpc3QmIHNsb3dDYXNlcykKLXsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLQotICAgIC8vIGJhc2U6IHRhZyhyZWdUMSksIHBheWxvYWQo
cmVnVDApCi0gICAgLy8gcHJvcGVydHk6IHRhZyhyZWdUMyksIHBheWxvYWQocmVnVDIpCi0gICAg
Ly8gc2NyYXRjaDogcmVnVDQKLQotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxs
KHJlZ1QzKSk7Ci0gICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDIs
IHJlZ1Q0LCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7Ci0KLSAgICBKSVRHZXRCeUlkR2VuZXJh
dG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNl
dCksIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJV
bmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpLCBKU1Zh
bHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBB
Y2Nlc3NUeXBlOjpHZXQpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLQotICAg
IGZhc3REb25lQ2FzZSA9IGp1bXAoKTsKLQotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwotICAgIGdlbi5zbG93UGF0aEp1bXAoKS5saW5rKHRoaXMpOwotCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcHJvcGVydHlOYW1l
LmltcGwoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKLSAgICBzbG93RG9uZUNhc2UgPSBqdW1wKCk7Ci0KLSAgICByZXR1cm4gZ2VuOwotfQotCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0g
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZv
OwotCi0gICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2Vs
bCBjaGVjawotICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sK
LQotICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IGJhc2UgYXJyYXkgY2hlY2sKLSAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaElmTm90U3RyaW5n
KHJlZ1QwKTsKLSAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiht
X3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKLSAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDAp
OwotICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3Qo
anVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKLSAgICBmYWlsZWQubGluayh0
aGlzKTsKLSAgICBub3RTdHJpbmcubGluayh0aGlzKTsKLSAgICBub25DZWxsLmxpbmsodGhpcyk7
Ci0KLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHZlY3RvciBsZW5ndGggY2hlY2sKLSAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIGVtcHR5IHZhbHVlCi0gICAgCi0gICAgTGFiZWwgc2xvd1Bh
dGggPSBsYWJlbCgpOwotICAgIAotICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7Ci0g
ICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QzLCByZWdUMik7Ci0gICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplLCBkc3QsIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIGJ5VmFsSW5mbyk7Ci0KLSAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0
aFRhcmdldCA9IHNsb3dQYXRoOwotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbElu
c3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwotICAgIG1fYnlWYWxJbnN0cnVj
dGlvbkluZGV4Kys7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
LXsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7
Ci0gICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7
Ci0gICAgCi0gICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1Qz
LCByZWdUMik7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKLSAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90
RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICBhZGRT
bG93Q2FzZShub3RJbmRleCk7Ci0gICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJl
Z1QwLCByZWdUMSwgcHJvZmlsZSk7Ci0gICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hh
cGVNYXNrKSwgcmVnVDEpOwotICAgIAotICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKLSAgICBK
dW1wTGlzdCBzbG93Q2FzZXM7Ci0gICAgCi0gICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VB
cnJheU1vZGUocHJvZmlsZSk7Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBKSVRJbnQz
MjoKLSAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoY3VycmVudEluc3RydWN0
aW9uLCBiYWRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVREb3VibGU6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6Ci0gICAg
ICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJhZFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBDUkFT
SCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgYWRkU2xvd0Nhc2UoYmFkVHlw
ZSk7Ci0gICAgYWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAKLSAgICBMYWJlbCBkb25lID0g
bGFiZWwoKTsKLSAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENv
bXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRU
eXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7Ci19Ci0KLUpJVDo6SnVtcExpc3QgSklU
OjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSkKLXsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7
Ci0gICAgCi0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGJhZFR5cGUgPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihDb250aWd1b3VzU2hh
cGUpKTsKLSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJm
bHlPZmZzZXQoKSksIHJlZ1QzKTsKLSAgICBKdW1wIG91dE9mQm91bmRzID0gYnJhbmNoMzIoQWJv
dmVPckVxdWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZzZXRPZlB1Ymxp
Y0xlbmd0aCgpKSk7Ci0gICAgCi0gICAgTGFiZWwgc3RvcmVSZXN1bHQgPSBsYWJlbCgpOwotICAg
IGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIHN3aXRjaCAoaW5kZXhpbmdTaGFw
ZSkgewotICAgIGNhc2UgSW50MzJTaGFwZToKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdEludDMyKHJlZ1QxKSk7Ci0gICAgICAgIHN0b3JlMzIocmVnVDAsIEJhc2VJbmRleChy
ZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy5wYXlsb2FkKSkpOwotICAgICAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJl
Z1QyLCBUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbnRpZ3VvdXNTaGFwZToKLSAgICAgICAgc3Rv
cmUzMihyZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCwgT0JKRUNUX09G
RlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgIHN0b3JlMzIocmVn
VDEsIEJhc2VJbmRleChyZWdUMywgcmVnVDIsIFRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihK
U1ZhbHVlLCB1LmFzQml0cy50YWcpKSk7Ci0gICAgICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QyLCBy
ZWdUMyk7Ci0gICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBEb3VibGVTaGFwZTogewotICAgICAg
ICBKdW1wIG5vdEludCA9IGJyYW5jaElmTm90SW50MzIocmVnVDEpOwotICAgICAgICBjb252ZXJ0
SW50MzJUb0RvdWJsZShyZWdUMCwgZnBSZWdUMCk7Ci0gICAgICAgIEp1bXAgcmVhZHkgPSBqdW1w
KCk7Ci0gICAgICAgIG5vdEludC5saW5rKHRoaXMpOwotICAgICAgICBtb3ZlSW50c1RvRG91Ymxl
KHJlZ1QwLCByZWdUMSwgZnBSZWdUMCwgZnBSZWdUMSk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoRG91YmxlKERvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVn
VDApKTsKLSAgICAgICAgcmVhZHkubGluayh0aGlzKTsKLSAgICAgICAgc3RvcmVEb3VibGUoZnBS
ZWdUMCwgQmFzZUluZGV4KHJlZ1QzLCByZWdUMiwgVGltZXNFaWdodCkpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgICAgICAKLSAgICBKdW1wIGRvbmUgPSBqdW1wKCk7Ci0gICAgCi0gICAgb3V0
T2ZCb3VuZHMubGluayh0aGlzKTsKLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKEFib3Zl
T3JFcXVhbCwgcmVnVDIsIEFkZHJlc3MocmVnVDMsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JM
ZW5ndGgoKSkpKTsKLSAgICAKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFs
Q2FzZShwcm9maWxlKTsKLSAgICAKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCBy
ZWdUMSk7Ci0gICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMywgQnV0dGVyZmx5OjpvZmZz
ZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0gICAganVtcCgpLmxpbmtUbyhzdG9yZVJlc3VsdCwgdGhp
cyk7Ci0gICAgCi0gICAgZG9uZS5saW5rKHRoaXMpOwotICAgIAotICAgIHJldHVybiBzbG93Q2Fz
ZXM7Ci19Ci0KLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKLXsK
LSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBBcnJheVByb2Zp
bGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7Ci0gICAg
Ci0gICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwotICAgIAotICAgIGJhZFR5cGUgPSBwYXRjaGFibGVC
cmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihBcnJheVN0b3JhZ2VTaGFwZSkp
OwotICAgIAotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgcmVnVDMpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVx
dWFsLCByZWdUMiwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjp2ZWN0b3JMZW5ndGhPZmZz
ZXQoKSkpKTsKLQotICAgIEp1bXAgZW1wdHkgPSBicmFuY2gzMihFcXVhbCwgQmFzZUluZGV4KHJl
Z1QzLCByZWdUMiwgVGltZXNFaWdodCwgQXJyYXlTdG9yYWdlOjp2ZWN0b3JPZmZzZXQoKSArIE9C
SkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcpKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkVtcHR5VmFsdWVUYWcpKTsKLSAgICAKLSAgICBMYWJlbCBzdG9yZVJlc3VsdCh0aGlzKTsK
LSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBzdG9yZTMyKHJlZ1QwLCBC
YXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9m
ZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSk7IC8v
IHBheWxvYWQKLSAgICBzdG9yZTMyKHJlZ1QxLCBCYXNlSW5kZXgocmVnVDMsIHJlZ1QyLCBUaW1l
c0VpZ2h0LCBBcnJheVN0b3JhZ2U6OnZlY3Rvck9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpT
VmFsdWUsIHUuYXNCaXRzLnRhZykpKTsgLy8gdGFnCi0gICAgSnVtcCBlbmQgPSBqdW1wKCk7Ci0g
ICAgCi0gICAgZW1wdHkubGluayh0aGlzKTsKLSAgICBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hv
bGVTcGVjaWFsQ2FzZShwcm9maWxlKTsKLSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJl
c3MocmVnVDMsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbnVtVmFsdWVzSW5WZWN0
b3IpKSk7Ci0gICAgYnJhbmNoMzIoQmVsb3csIHJlZ1QyLCBBZGRyZXNzKHJlZ1QzLCBBcnJheVN0
b3JhZ2U6Omxlbmd0aE9mZnNldCgpKSkubGlua1RvKHN0b3JlUmVzdWx0LCB0aGlzKTsKLSAgICAK
LSAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSksIHJlZ1QyLCByZWdUMCk7Ci0gICAgc3RvcmUzMihy
ZWdUMCwgQWRkcmVzcyhyZWdUMywgQXJyYXlTdG9yYWdlOjpsZW5ndGhPZmZzZXQoKSkpOwotICAg
IGp1bXAoKS5saW5rVG8oc3RvcmVSZXN1bHQsIHRoaXMpOwotICAgIAotICAgIGVuZC5saW5rKHRo
aXMpOwotICAgIAotICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKLSAgICAKLSAgICByZXR1cm4gc2xvd0Nhc2VzOwotfQotCi1KSVRQdXRCeUlkR2Vu
ZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcExpc3QmIGRvbmVDYXNlcywgSnVtcExpc3Qm
IHNsb3dDYXNlcykKLXsKLSAgICAvLyBiYXNlOiB0YWcocmVnVDEpLCBwYXlsb2FkKHJlZ1QwKQot
ICAgIC8vIHByb3BlcnR5OiB0YWcocmVnVDMpLCBwYXlsb2FkKHJlZ1QyKQotCi0gICAgaW50IGJh
c2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0KLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaElmTm90Q2VsbChyZWdUMykpOwotICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZh
bEluZm8sIHJlZ1QyLCByZWdUMiwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwotCi0gICAgLy8g
V3JpdGUgYmFycmllciBicmVha3MgdGhlIHJlZ2lzdGVycy4gU28gYWZ0ZXIgaXNzdWluZyB0aGUg
d3JpdGUgYmFycmllciwKLSAgICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4KLSAgICBlbWl0V3Jp
dGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJCYXNlKTsKLSAgICBlbWl0TG9hZFBh
eWxvYWQoYmFzZSwgcmVnVDApOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwot
Ci0gICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlv
biksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgSlNW
YWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwg
cmVnVDEsIG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLCBwdXRLaW5kKTsKLSAgICBnZW4uZ2VuZXJh
dGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOwotCi0gICAg
TGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0gICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxp
bmsodGhpcyk7Ci0KLSAgICAvLyBKSVRQdXRCeUlkR2VuZXJhdG9yIG9ubHkgcHJlc2VydmUgdGhl
IHZhbHVlIGFuZCB0aGUgYmFzZSdzIHBheWxvYWQsIHdlIGhhdmUgdG8gcmVsb2FkIHRoZSB0YWcu
Ci0gICAgZW1pdExvYWRUYWcoYmFzZSwgcmVnVDEpOwotCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJl
Z3MocmVnVDMsIHJlZ1QyKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcHJvcGVydHlOYW1l
LmltcGwoKSk7Ci0gICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKLSAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7Ci0KLSAgICByZXR1cm4gZ2VuOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJv
cGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9m
aWxlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlOwotICAgIEJ5VmFsSW5m
byogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0uYnlWYWxJbmZvOwotICAgIAotICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIs
IGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHBy
b3BlcnR5IGludDMyIGNoZWNrCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIG5vdCBh
cnJheSBjaGVjawotICAgIAotICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2Rl
KHByb2ZpbGUpOwotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgSklUSW50MzI6Ci0gICAg
Y2FzZSBKSVREb3VibGU6Ci0gICAgICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gdmFsdWUgdHlw
ZSBjaGVjawotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgSnVtcCBza2lwUHJvZmlsaW5nID0ganVtcCgpOwotICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gb3V0IG9mIGJvdW5kcwotICAgIGVtaXRBcnJheVByb2ZpbGVPdXRPZkJv
dW5kc1NwZWNpYWxDYXNlKHByb2ZpbGUpOwotICAgIHNraXBQcm9maWxpbmcubGluayh0aGlzKTsK
LQotICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKLSAgICAKLSAgICBib29sIGlzRGlyZWN0
ID0gSW50ZXJwcmV0ZXI6OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUp
ID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotCi0gICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlv
biBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KLSAg
ICAvLyBTd2FwcGluZyBzaG91bGRuJ3QgaGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KLSAgICBl
bWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDEpOwotICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdU
MywgcmVnVDApOwotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9w
dGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgSlNWYWx1ZVJlZ3MocmVnVDIsIHJl
Z1QxKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDUsIHJlZ1Q0
KSwgYnlWYWxJbmZvKTsKLQotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3Ry
dWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7Ci0gICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7
Ci0gICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3Bf
dHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpOwotCi0gICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwotCi0gICAgSklUR2V0QnlJZEdl
bmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVP
ZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0Ojpz
dHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgaWRlbnQtPmltcGwoKSwgSlNWYWx1
ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNj
ZXNzVHlwZTo6VHJ5R2V0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzLmFwcGVuZChn
ZW4pOwotICAgIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9i
eV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKLQotICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0
aEJlZ2luID0gbGFiZWwoKTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVHJ5R2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1
ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmltcGwoKSk7Ci0gICAgCi0gICAgZ2VuLnJlcG9y
dFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKLX0KLQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17
Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKSk7Ci0KLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwot
ICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0KLSAgICBKSVRH
ZXRCeUlkR2VuZXJhdG9yIGdlbigKLSAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9i
eXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0
ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygpLAotICAgICAgICBpZGVudC0+aW1wbCgp
LCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBBY2Nlc3NUeXBlOjpHZXREaXJlY3QpOwotICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0
aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwotICAgIG1fZ2V0QnlJ
ZHMuYXBwZW5kKGdlbik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgZW1p
dFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwotCi0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0KLSAgICBKSVRHZXRCeUlk
R2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotCi0gICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7Ci0KLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVn
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmltcGwo
KSk7Ci0KLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwot
fQotCi0KLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOwotICAgIAotICAgIGVtaXRMb2FkKGJhc2Us
IHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJl
Z1QxKTsKLQotICAgIGlmICgqaWRlbnQgPT0gbV92bS0+cHJvcGVydHlOYW1lcy0+bGVuZ3RoICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkKLSAgICAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZUZv
ckJ5dGVjb2RlSW5kZXhXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIG1fYnl0ZWNvZGVPZmZzZXQpOwot
Ci0gICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCi0gICAgICAgIG1fY29kZUJsb2NrLCBDb2Rl
T3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVjdGlv
biksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwKLSAgICAgICAgaWRl
bnQtPmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dl
dEJ5SWRzLmFwcGVuZChnZW4pOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAg
IGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIp
OwotCi0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0KLSAgICBKSVRHZXRCeUlkR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwotICAgIAotICAgIExh
YmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIAotICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdFZSZWcs
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBpZGVudC0+aW1wbCgp
KTsKLSAgICAKLSAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwotICAgIGludCB0aGlzVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKLSAgICAKLSAgICBlbWl0TG9h
ZChiYXNlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRMb2FkKHRoaXNWUmVnLCByZWdUNCwgcmVn
VDMpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0gICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHRoaXNWUmVnLCByZWdUNCk7Ci0KLSAgICBKSVRH
ZXRCeUlkV2l0aFRoaXNHZW5lcmF0b3IgZ2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24p
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIGlkZW50
LT5pbXBsKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIEFjY2Vzc1R5cGU6OkdldFdp
dGhUaGlzKTsKLSAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nh
c2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKLSAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBwZW5kKGdl
bik7Ci0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgZW1pdFN0b3JlKGRzdCwg
cmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0g
ICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSk7Ci0KLSAgICBKSVRHZXRCeUlkV2l0aFRoaXNH
ZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4
KytdOwotICAgIAotICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwotICAgIAotICAg
IENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0
aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIGlkZW50LT5pbXBsKCkpOwot
ICAgIAotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQotewotICAgIC8vIEluIG9yZGVyIHRvIGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUg
U3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAot
ICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8g
cmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2UgZ2VuZXJhdGUgY29kZQotICAgIC8vIHN1
Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlz
dGFuY2UgZnJvbSB0aGlzLgotICAgIAotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgIGludCBkaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlk
RmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7Ci0gICAgCi0gICAgZW1pdExvYWQyKGJhc2UsIHJlZ1Qx
LCByZWdUMCwgdmFsdWUsIHJlZ1QzLCByZWdUMik7Ci0gICAgCi0gICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2Vu
KAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2Fs
bFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksCi0gICAgICAgIHJlZ1QxLCBtX2NvZGVCbG9jay0+
ZWNtYU1vZGUoKSwgZGlyZWN0ID8gRGlyZWN0IDogTm90RGlyZWN0KTsKLSAgICAKLSAgICBnZW4u
Z2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7Ci0gICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVt
cCgpKTsKLSAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0
ZXJCYXNlKTsKLQotICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7Ci19Ci0KLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwotCi0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0KLSAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luKHRoaXMpOwotCi0gICAgLy8gSklUUHV0QnlJZEdlbmVyYXRvciBvbmx5IHByZXNl
cnZlIHRoZSB2YWx1ZSBhbmQgdGhlIGJhc2UncyBwYXlsb2FkLCB3ZSBoYXZlIHRvIHJlbG9hZCB0
aGUgdGFnLgotICAgIGVtaXRMb2FkVGFnKGJhc2UsIHJlZ1QxKTsKLQotICAgIEpJVFB1dEJ5SWRH
ZW5lcmF0b3ImIGdlbiA9IG1fcHV0QnlJZHNbbV9wdXRCeUlkSW5kZXgrK107Ci0gICAgCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKLSAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24o
KSwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIGlkZW50LT5pbXBsKCkpOwotICAgIAotICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2lu
X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KSk7Ci0KLSAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Ci0KLSAgICBKSVRJbkJ5SWRHZW5lcmF0b3Ig
Z2VuKAotICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwg
Q2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVuYXZh
aWxhYmxlUmVnaXN0ZXJzKCksCi0gICAgICAgIGlkZW50LT5pbXBsKCksIEpTVmFsdWVSZWdzOjpw
YXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCkpOwotICAgIGdlbi5n
ZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKLSAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwotICAgIG1faW5CeUlkcy5hcHBlbmQoZ2VuKTsKLQotICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAgICBpbnQgcmVzdWx0
VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpKTsKLQotICAgIEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5
SWRzW21faW5CeUlkSW5kZXgrK107Ci0KLSAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKLQotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSW5CeUlkT3B0aW1p
emUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBpZGVudC0+aW1wbCgpKTsKLQotICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhC
ZWdpbiwgY2FsbCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0VmFySW5qZWN0aW9uQ2hlY2soYm9vbCBu
ZWVkc1ZhckluamVjdGlvbkNoZWNrcykKLXsKLSAgICBpZiAoIW5lZWRzVmFySW5qZWN0aW9uQ2hl
Y2tzKQotICAgICAgICByZXR1cm47Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+dmFySW5qZWN0aW9uV2F0
Y2hwb2ludCgpLT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQp
KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwgaW50IHNjb3Bl
LCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1bnNpZ25lZCBkZXB0aCkKLXsKLSAgICBl
bWl0VmFySW5qZWN0aW9uQ2hlY2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MpOwotICAgIG1vdmUo
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0gICAgZW1pdExvYWRQYXls
b2FkKHNjb3BlLCByZWdUMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlcHRoOyAr
K2kpCi0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0
KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9p
ZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQotewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIGludCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgUmVz
b2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4oY3VycmVudElu
c3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNV0udS5vcGVyYW5kOwotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAg
ICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxWYXI6Ci0gICAgICAg
IGNhc2UgR2xvYmFsTGV4aWNhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogCi0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKLSAgICAgICAgICAgIEpTU2NvcGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpj
b25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJlc29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25zdGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRW
YXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwot
ICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1QxKTsK
LSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjb25zdGFudFNjb3BlKSwgcmVnVDApOwot
ICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIGVtaXRSZXNvbHZl
Q2xvc3VyZShkc3QsIHNjb3BlLCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSks
IGRlcHRoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1vZHVsZVZhcjoKLSAg
ICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCByZWdUMSk7Ci0g
ICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9uWzZdLnUuanND
ZWxsLmdldCgpKSwgcmVnVDApOwotICAgICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJl
Z1QwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAg
ICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgTG9jYWxDbG9zdXJlVmFyOgotICAgICAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAg
ICAgICAgY2FzZSBVbnJlc29sdmVkUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH07
Ci0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5
OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewot
ICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAgIGxvYWQzMigmY3VycmVudEluc3Ry
dWN0aW9uWzRdLCByZWdUMCk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxQcm9wZXJ0eSA9IGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5KSk7Ci0g
ICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5KTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVu
ZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eS5saW5rKHRoaXMpOwotCi0gICAg
ICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5v
dEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rp
b25DaGVja3MpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5v
dEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBK
dW1wIG5vdEdsb2JhbExleGljYWxWYXIgPSBicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIFRydXN0
ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyKSk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbExleGlj
YWxWYXIpOwotICAgICAgICBza2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEds
b2JhbExleGljYWxWYXIubGluayh0aGlzKTsKLQotICAgICAgICBKdW1wIG5vdEdsb2JhbExleGlj
YWxWYXJXaXRoVmFySW5qZWN0aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3Rl
ZEltbTMyKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSk7Ci0gICAgICAg
IGVtaXRDb2RlKEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKTsKLSAgICAg
ICAgc2tpcFRvRW5kLmFwcGVuZChqdW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFy
V2l0aFZhckluamVjdGlvbnMubGluayh0aGlzKTsKLQotICAgICAgICBhZGRTbG93Q2FzZShqdW1w
KCkpOwotICAgICAgICBza2lwVG9FbmQubGluayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgSklUOjplbWl0TG9hZFdpdGhTdHJ1Y3R1cmVDaGVj
ayhpbnQgc2NvcGUsIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QpCi17Ci0gICAgZW1pdExvYWQo
c2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbG9hZFB0cihzdHJ1Y3R1cmVTbG90LCByZWdUMik7
Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMikpOwotfQotCi12b2lkIEpJVDo6ZW1pdEdl
dFZhckZyb21Qb2ludGVyKEpTVmFsdWUqIG9wZXJhbmQsIEdQUlJlZyB0YWcsIEdQUlJlZyBwYXls
b2FkKQotewotICAgIHVpbnRwdHJfdCByYXdBZGRyZXNzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4ob3BlcmFuZCk7Ci0gICAgbG9hZDMyKGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRkcmVzcyAr
IFRhZ09mZnNldCksIHRhZyk7Ci0gICAgbG9hZDMyKGJpdHdpc2VfY2FzdDx2b2lkKj4ocmF3QWRk
cmVzcyArIFBheWxvYWRPZmZzZXQpLCBwYXlsb2FkKTsKLX0KLXZvaWQgSklUOjplbWl0R2V0VmFy
RnJvbUluZGlyZWN0UG9pbnRlcihKU1ZhbHVlKiogb3BlcmFuZCwgR1BSUmVnIHRhZywgR1BSUmVn
IHBheWxvYWQpCi17Ci0gICAgbG9hZFB0cihvcGVyYW5kLCBwYXlsb2FkKTsKLSAgICBsb2FkMzIo
QWRkcmVzcyhwYXlsb2FkLCBUYWdPZmZzZXQpLCB0YWcpOwotICAgIGxvYWQzMihBZGRyZXNzKHBh
eWxvYWQsIFBheWxvYWRPZmZzZXQpLCBwYXlsb2FkKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRHZXRD
bG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCi17Ci0gICAgZW1pdExvYWQo
c2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdp
c3RlcikgKyBUYWdPZmZzZXQpLCByZWdUMSk7Ci0gICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIEpT
TGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVv
ZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDApOwotfQotCi12b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBz
Y29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBHZXRQdXRJbmZvKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
LnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5zbG90KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5k
U2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJmN1cnJlbnRJbnN0cnVjdGlvbls2
XS51LnBvaW50ZXIpOwotICAgIAotICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBl
IHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKLSAgICAgICAgc3dp
dGNoIChyZXNvbHZlVHlwZSkgewotICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgotICAgICAg
ICBjYXNlIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBHUFJSZWcg
YmFzZSA9IHJlZ1QyOwotICAgICAgICAgICAgR1BSUmVnIHJlc3VsdFRhZyA9IHJlZ1QxOwotICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWQgPSByZWdUMDsKLSAgICAgICAgICAgIEdQUlJl
ZyBvZmZzZXQgPSByZWdUMzsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbW92ZShyZWdUMCwg
YmFzZSk7Ci0gICAgICAgICAgICBsb2FkMzIob3BlcmFuZFNsb3QsIG9mZnNldCk7Ci0gICAgICAg
ICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgewotICAgICAgICAgICAgICAgIEp1bXAgaXNPdXRP
ZkxpbmUgPSBicmFuY2gzMihHcmVhdGVyVGhhbk9yRXF1YWwsIG9mZnNldCwgVHJ1c3RlZEltbTMy
KGZpcnN0T3V0T2ZMaW5lT2Zmc2V0KSk7Ci0gICAgICAgICAgICAgICAgYWJvcnRXaXRoUmVhc29u
KEpJVE9mZnNldElzTm90T3V0T2ZMaW5lKTsKLSAgICAgICAgICAgICAgICBpc091dE9mTGluZS5s
aW5rKHRoaXMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGJh
c2UsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIGJhc2UpOwotICAgICAgICAgICAgbmVn
MzIob2Zmc2V0KTsKLSAgICAgICAgICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkgKyAo
Zmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCByZXN1
bHRQYXlsb2FkKTsKLSAgICAgICAgICAgIGxvYWQzMihCYXNlSW5kZXgoYmFzZSwgb2Zmc2V0LCBU
aW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMudGFnKSArIChmaXJz
dE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIHJlc3VsdFRh
Zyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdsb2JhbFZh
cjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAg
ICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xvYmFsTGV4aWNhbFZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hlY2so
bmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGlmIChp
bmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRHZXRWYXJGcm9tSW5k
aXJlY3RQb2ludGVyKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgcmVnVDEs
IHJlZ1QwKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0R2V0VmFyRnJv
bVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCByZWdUMSwgcmVn
VDApOwotICAgICAgICAgICAgaWYgKHJlc29sdmVUeXBlID09IEdsb2JhbExleGljYWxWYXIgfHwg
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpIC8v
IFREWiBjaGVjay4KLSAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QxKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgotICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAg
ZW1pdFZhckluamVjdGlvbkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBl
KSk7Ci0gICAgICAgICAgICBlbWl0R2V0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90KTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIER5bmFtaWM6Ci0gICAgICAgICAgICBh
ZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW9k
dWxlVmFyOgotICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBVbnJl
c29sdmVkUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewotICAgIGNh
c2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczogewotICAgICAgICBKdW1wTGlzdCBza2lwVG9FbmQ7Ci0gICAgICAg
IGxvYWQzMigmY3VycmVudEluc3RydWN0aW9uWzRdLCByZWdUMCk7Ci0gICAgICAgIGFuZDMyKFRy
dXN0ZWRJbW0zMihHZXRQdXRJbmZvOjp0eXBlQml0cyksIHJlZ1QwKTsgLy8gTG9hZCBSZXNvbHZl
VHlwZSBpbnRvIFQwCi0KLSAgICAgICAgSnVtcCBpc0dsb2JhbFByb3BlcnR5ID0gYnJhbmNoMzIo
RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHkpKTsKLSAgICAgICAgSnVt
cCBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSk7Ci0gICAgICAgIGlzR2xvYmFsUHJvcGVydHkubGluayh0aGlzKTsKLSAgICAgICAgZW1pdENv
ZGUoR2xvYmFsUHJvcGVydHksIGZhbHNlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChqdW1w
KCkpOwotICAgICAgICBub3RHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhp
cyk7Ci0KLSAgICAgICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyID0gYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xvYmFsTGV4aWNhbFZhcikpOwotICAgICAgICBlbWl0
Q29kZShHbG9iYWxMZXhpY2FsVmFyLCB0cnVlKTsKLSAgICAgICAgc2tpcFRvRW5kLmFwcGVuZChq
dW1wKCkpOwotICAgICAgICBub3RHbG9iYWxMZXhpY2FsVmFyLmxpbmsodGhpcyk7Ci0KLSAgICAg
ICAgSnVtcCBub3RHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVjdGlvbnMgPSBicmFuY2gzMihO
b3RFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW0zMihHbG9iYWxMZXhpY2FsVmFyV2l0aFZhckluamVj
dGlvbkNoZWNrcykpOwotICAgICAgICBlbWl0Q29kZShHbG9iYWxMZXhpY2FsVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrcywgdHJ1ZSk7Ci0gICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsK
LSAgICAgICAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25zLmxpbmsodGhpcyk7
Ci0KLSAgICAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKLQotICAgICAgICBza2lwVG9FbmQubGlu
ayh0aGlzKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZGVmYXVsdDoKLSAgICAgICAg
ZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZhbHNlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKLSAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVn
VDApOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwotCi0gICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9m
aWxlKG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwotfQot
Ci12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2
YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwg
cmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwotICAgIHVpbnRwdHJfdCByYXdBZGRy
ZXNzID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ob3BlcmFuZCk7Ci0gICAgc3RvcmUzMihyZWdU
MSwgYml0d2lzZV9jYXN0PHZvaWQqPihyYXdBZGRyZXNzICsgVGFnT2Zmc2V0KSk7Ci0gICAgc3Rv
cmUzMihyZWdUMCwgYml0d2lzZV9jYXN0PHZvaWQqPihyYXdBZGRyZXNzICsgUGF5bG9hZE9mZnNl
dCkpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoSlNWYWx1
ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCoqIGluZGlyZWN0
V2F0Y2hwb2ludFNldCkKLXsKLSAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAg
ICBsb2FkUHRyKGluZGlyZWN0V2F0Y2hwb2ludFNldCwgcmVnVDIpOwotICAgIGVtaXROb3RpZnlX
cml0ZShyZWdUMik7Ci0gICAgbG9hZFB0cihhZGRyZXNzT2ZPcGVyYW5kLCByZWdUMik7Ci0gICAg
c3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMiwgVGFnT2Zmc2V0KSk7Ci0gICAgc3RvcmUzMihy
ZWdUMCwgQWRkcmVzcyhyZWdUMiwgUGF5bG9hZE9mZnNldCkpOwotfQotCi12b2lkIEpJVDo6ZW1p
dFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBX
YXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7
Ci0gICAgZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRl
KHNldCk7Ci0gICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMCwgSlNMZXhpY2FsRW52aXJv
bm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IFRhZ09mZnNldCkpOwotICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIEpTTGV4aWNh
bEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdp
c3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX3B1dF90b19z
Y29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBzY29wZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBH
ZXRQdXRJbmZvKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwotICAgIFJlc29sdmVU
eXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVjdHVy
ZSoqIHN0cnVjdHVyZVNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUuc2xv
dCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdCo+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVyKTsKLSAgICAKLSAgICBhdXRv
IGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRpcmVjdExv
YWRGb3JPcGVyYW5kKSB7Ci0gICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKLSAgICAgICAg
Y2FzZSBHbG9iYWxQcm9wZXJ0eToKLSAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwotICAgICAgICAg
ICAgZW1pdExvYWRXaXRoU3RydWN0dXJlQ2hlY2soc2NvcGUsIHN0cnVjdHVyZVNsb3QpOyAvLyBT
dHJ1Y3R1cmUgY2hlY2sgY292ZXJzIHZhciBpbmplY3Rpb24uCi0gICAgICAgICAgICBlbWl0TG9h
ZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCByZWdUMCk7Ci0g
ICAgICAgICAgICBsb2FkUHRyKG9wZXJhbmRTbG90LCByZWdUMSk7Ci0gICAgICAgICAgICBuZWdQ
dHIocmVnVDEpOwotICAgICAgICAgICAgc3RvcmUzMihyZWdUMywgQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy50YWcpKSk7Ci0gICAgICAgICAgICBzdG9yZTMyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwg
YXNCaXRzLnBheWxvYWQpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
ICBjYXNlIEdsb2JhbFZhcjoKLSAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzOgotICAgICAgICBjYXNlIEdsb2JhbExleGljYWxWYXI6Ci0gICAgICAgIGNhc2UgR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgIEpTU2Nv
cGUqIGNvbnN0YW50U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKHJl
c29sdmVUeXBlLCBtX2NvZGVCbG9jayk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjb25z
dGFudFNjb3BlKTsKLSAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoY29uc3RhbnRTY29wZSwg
dmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25D
aGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAg
aWYgKCFpc0luaXRpYWxpemF0aW9uKGdldFB1dEluZm8uaW5pdGlhbGl6YXRpb25Nb2RlKCkpICYm
IChyZXNvbHZlVHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2Jh
bExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSkgewotICAgICAgICAgICAgICAgIC8v
IFdlIG5lZWQgdG8gZG8gYSBURFogY2hlY2sgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGFsd2F5cyBw
cm92ZSB3ZSBuZWVkIHRvIGVtaXQgVERaIGNoZWNrcyBzdGF0aWNhbGx5LgotICAgICAgICAgICAg
ICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgICAgICBlbWl0
R2V0VmFyRnJvbUluZGlyZWN0UG9pbnRlcihiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5k
U2xvdCksIHJlZ1QxLCByZWdUMCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgICAgICBlbWl0R2V0VmFyRnJvbVBvaW50ZXIoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3Bl
cmFuZFNsb3QpLCByZWdUMSwgcmVnVDApOwotICAgICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJy
YW5jaElmRW1wdHkocmVnVDEpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJs
ZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsIGJp
dHdpc2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNV0pKTsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0
d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgY3VycmVudEluc3RydWN0
aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKLSAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgot
ICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAg
ICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAg
ICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhy
ZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVy
YW5kU2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTW9kdWxlVmFyOgotICAgICAgICBjYXNl
IER5bmFtaWM6Ci0gICAgICAgICAgICBhZGRTbG93Q2FzZShqdW1wKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgVW5yZXNvbHZlZFByb3BlcnR5OgotICAgICAgICBjYXNlIFVu
cmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHN3aXRj
aCAocmVzb2x2ZVR5cGUpIHsKLSAgICBjYXNlIFVucmVzb2x2ZWRQcm9wZXJ0eToKLSAgICBjYXNl
IFVucmVzb2x2ZWRQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgSnVt
cExpc3Qgc2tpcFRvRW5kOwotICAgICAgICBsb2FkMzIoJmN1cnJlbnRJbnN0cnVjdGlvbls0XSwg
cmVnVDApOwotICAgICAgICBhbmQzMihUcnVzdGVkSW1tMzIoR2V0UHV0SW5mbzo6dHlwZUJpdHMp
LCByZWdUMCk7IC8vIExvYWQgUmVzb2x2ZVR5cGUgaW50byBUMAotCi0gICAgICAgIEp1bXAgaXNH
bG9iYWxQcm9wZXJ0eSA9IGJyYW5jaDMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2Jh
bFByb3BlcnR5KSk7Ci0gICAgICAgIEp1bXAgbm90R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0
aW9ucyA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbFByb3Bl
cnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykpOwotICAgICAgICBpc0dsb2JhbFByb3BlcnR5Lmxp
bmsodGhpcyk7Ci0gICAgICAgIGVtaXRDb2RlKEdsb2JhbFByb3BlcnR5LCBmYWxzZSk7Ci0gICAg
ICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4
aWNhbFZhciA9IGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEdsb2JhbExl
eGljYWxWYXIpKTsKLSAgICAgICAgZW1pdENvZGUoR2xvYmFsTGV4aWNhbFZhciwgdHJ1ZSk7Ci0g
ICAgICAgIHNraXBUb0VuZC5hcHBlbmQoanVtcCgpKTsKLSAgICAgICAgbm90R2xvYmFsTGV4aWNh
bFZhci5saW5rKHRoaXMpOwotCi0gICAgICAgIEp1bXAgbm90R2xvYmFsTGV4aWNhbFZhcldpdGhW
YXJJbmplY3Rpb25zID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1tMzIoR2xv
YmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpKTsKLSAgICAgICAgZW1pdENvZGUo
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIHRydWUpOwotICAgICAgICBz
a2lwVG9FbmQuYXBwZW5kKGp1bXAoKSk7Ci0gICAgICAgIG5vdEdsb2JhbExleGljYWxWYXJXaXRo
VmFySW5qZWN0aW9ucy5saW5rKHRoaXMpOwotCi0gICAgICAgIGFkZFNsb3dDYXNlKGp1bXAoKSk7
Ci0KLSAgICAgICAgc2tpcFRvRW5kLmxpbmsodGhpcyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBlLCBmYWxzZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90b19z
Y29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQotewotICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7Ci0KLSAg
ICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmQpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5y
ZXNvbHZlVHlwZSgpOwotICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKLSAgICAg
ICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24s
IHNsb3dfcGF0aF90aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJv
cik7Ci0gICAgICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwgY3VycmVudEluc3RydWN0aW9uKTsKLX0K
LQotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
LSAgICAKLSAgICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXgg
KiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlZ1QxKTsKLSAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkg
KyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCks
IHJlZ1QwKTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50
cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGludCBhcmd1bWVudHMg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICAKLSAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50
cywgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKLSAgICAKLSAgICBlbWl0TG9hZFBheWxvYWQo
YXJndW1lbnRzLCByZWdUMCk7Ci0gICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMik7Ci0g
ICAgc3RvcmUzMihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdl
T2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zm
c2V0KSk7Ci0gICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRz
OjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4p
ICsgUGF5bG9hZE9mZnNldCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8v
IFVTRShKU1ZBTFVFMzJfNjQpCi0jZW5kaWYgLy8gRU5BQkxFKEpJVCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>