<?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>213491</bug_id>
          
          <creation_ts>2020-06-22 15:52:37 -0700</creation_ts>
          <short_desc>Introduce BaseAudioContext interface</short_desc>
          <delta_ts>2020-06-22 20:27:26 -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>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>https://www.w3.org/TR/webaudio/#BaseAudioContext</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>212611</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>clark_wang</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mkwst</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1665203</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-06-22 15:52:37 -0700</bug_when>
    <thetext>Introduce BaseAudioContext interface:
https://www.w3.org/TR/webaudio/#BaseAudioContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665240</commentid>
    <comment_count>1</comment_count>
      <attachid>402523</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-06-22 17:28:26 -0700</bug_when>
    <thetext>Created attachment 402523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665255</commentid>
    <comment_count>2</comment_count>
      <attachid>402524</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-06-22 18:49:26 -0700</bug_when>
    <thetext>Created attachment 402524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665265</commentid>
    <comment_count>3</comment_count>
      <attachid>402524</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-06-22 19:37:57 -0700</bug_when>
    <thetext>Comment on attachment 402524
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665274</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-22 20:26:00 -0700</bug_when>
    <thetext>Committed r263381: &lt;https://trac.webkit.org/changeset/263381&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 402524.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665275</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-22 20:27:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/64621910&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402523</attachid>
            <date>2020-06-22 17:28:26 -0700</date>
            <delta_ts>2020-06-22 18:49:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213491-20200622172826.patch</filename>
            <type>text/plain</type>
            <size>177590</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRmODI5ODBmNmFiNzk1
NDU2ZGIwYzgyMDY3YWUwNDEyODc4ZjNiOS4uNjBjOTA2ZTA5NTJkNmMxMTFkODQ5MjJiZGFjZmU1
NWZlMGYzMTllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MSBAQAorMjAyMC0wNi0yMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEludHJvZHVjZSBCYXNlQXVk
aW9Db250ZXh0IGludGVyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjEzNDkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW50cm9kdWNlIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlIGFzIHBlciBX
M0MgV2ViQXVkaW8gc3BlY2lmaWNhdGlvbjoKKyAgICAgICAgLSBodHRwczovL3d3dy53My5vcmcv
VFIvd2ViYXVkaW8vI0Jhc2VBdWRpb0NvbnRleHQKKworICAgICAgICBObyBuZXcgdGVzdHMsIHJl
YmFzZWxpbmVkIGV4aXN0aW5nIHRlc3QuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1h
a2U6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Db250ZXh0OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6
OmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29u
dGV4dDo6Y3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbik6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Q29udGV4dC5pZGw6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjpjb250ZXh0Rm9yQmluZGluZ3MgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmg6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb05vZGUuaWRsOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQmFz
ZUF1ZGlvQ29udGV4dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQ6OmlzU2FtcGxlUmF0ZVJhbmdlR29vZCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHRCYXNlOjpBdWRpb0NvbnRleHRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0Nv
bnRleHQ6OkJhc2VBdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29u
dGV4dDo6Y29uc3RydWN0Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQ6On5CYXNlQXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQ6OmxhenlJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojppc0luaXRpYWxpemVkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmFkZFJlYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OnNldFN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6QmFz
ZUF1ZGlvQ29udGV4dDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250
ZXh0OjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6YWN0aXZl
RE9NT2JqZWN0TmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHRCYXNl
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojpo
b3N0aW5nRG9jdW1lbnRJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VB
dWRpb0NvbnRleHQ6OmlzU3VzcGVuZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VB
dWRpb0NvbnRleHQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUF1ZGlvQ29udGV4dDo6d291bGRUYWludE9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXNlQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUF1ZGlvQ29udGV4dDo6ZGVjb2RlQXVkaW9EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlQXVkaW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlQmlxdWFkRmlsdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2VBdWRpb0NvbnRleHQ6OmNyZWF0ZVdhdmVTaGFwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlUGFubmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VBdWRpb0NvbnRleHQ6OmNyZWF0ZUNvbnZvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
QXVkaW9Db250ZXh0OjpjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlQW5hbHlzZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlR2Fpbik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpjcmVhdGVEZWxheSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250
ZXh0OjpjcmVhdGVDaGFubmVsU3BsaXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlv
Q29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRp
b0NvbnRleHQ6OmNyZWF0ZVBlcmlvZGljV2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2VBdWRpb0NvbnRleHQ6OmRlcmVmRmluaXNoZWRTb3VyY2VOb2Rlcyk6CisgICAgICAg
IChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpyZWZOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJhc2VBdWRpb0NvbnRleHQ6OmRlcmVmTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXNlQXVkaW9Db250ZXh0Ojpsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0Nv
bnRleHQ6OnRyeUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6dW5s
b2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmlzQXVkaW9UaHJlYWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aXNHcmFwaE93bmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmFkZERlZmVycmVk
RmluaXNoRGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aGFuZGxl
UHJlUmVuZGVyVGFza3MpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aGFu
ZGxlUG9zdFJlbmRlclRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6
OmhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRp
b0NvbnRleHQ6Om1hcmtGb3JEZWxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9D
b250ZXh0OjpzY2hlZHVsZU5vZGVEZWxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpkZWxldGVNYXJrZWROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjptYXJrU3VtbWluZ0p1bmN0aW9uRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUF1ZGlvQ29udGV4dDo6cmVtb3ZlTWFya2VkU3VtbWluZ0p1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6Om1hcmtBdWRpb05vZGVPdXRwdXRE
aXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1
ZGlvU3VtbWluZ0p1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0
OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1
ZGlvQ29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QmFz
ZUF1ZGlvQ29udGV4dDo6cmVtb3ZlQXV0b21hdGljUHVsbE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUF1ZGlvQ29udGV4dDo6dXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OnByb2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0QmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojpub2RlV2lsbEJl
Z2luUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkRG9jdW1lbnRBbGxvd1dlYkF1
ZGlvVG9BdXRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojp3aWxs
QmVnaW5QbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojp3aWxs
UGF1c2VQbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpzdGFy
dFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjptZWRpYUNh
blN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6Om1lZGlhU3RhdGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6cGFnZU11dGVkU3Rh
dGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aXNQbGF5
aW5nQXVkaW9EaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6
ZmluaXNoZWRSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6
ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjppbmNy
ZW1lbnRBY3RpdmVTb3VyY2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250
ZXh0OjpkZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
QXVkaW9Db250ZXh0OjpzdXNwZW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VB
dWRpb0NvbnRleHQ6OnJlc3VtZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpzdXNwZW5kUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlv
Q29udGV4dDo6bWF5UmVzdW1lUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlv
Q29udGV4dDo6cG9zdFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6
b3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmFkZENv
bnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmNsZWFy
UGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6Om1h
a2VQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6
bG9nQ2hhbm5lbCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9CYXNlQXVkaW9D
b250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmguCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHRCYXNlOjpBdXRvTG9j
a2VyOjpBdXRvTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dEJhc2U6OkF1
dG9Mb2NrZXI6On5BdXRvTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQ6OmRlc3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmFj
dGl2ZVNvdXJjZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQ6Omxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OnN0YXRl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmlzQ2xvc2VkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmNvbm5lY3Rpb25Db3Vu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjphdWRpb1RocmVh
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjptYXhOdW1iZXJP
ZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmRlc3RpbmF0
aW9uTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojp1c2Vy
R2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlQXVkaW9Db250ZXh0OjpwYWdlQ29uc2VudFJlcXVpcmVkRm9yQXVkaW9TdGFydCBjb25zdCk6
CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlv
Q29udGV4dC5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvQ29udGV4dDo6T2Zm
bGluZUF1ZGlvQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVk
aW9Db250ZXh0Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db250
ZXh0LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFubmVyTm9kZTo6UGFubmVyTm9kZSk6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9QYW5uZXJOb2RlLmg6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXRGYWN0
b3J5LmluOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKToKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwog
MjAyMC0wNi0yMiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVcGRhdGUgbWFjT1MgdmVyc2lvbiBtYWNyb3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
Mzk5YTZiZDNmZDA5NmM1MTE3ODgxYzkyNTc2OTE1MDUxMzNjMzAxMS4uMDIyN2Y4MDM4ZGMzZDI4
NmNjNDc3MWM5YmJmYzAwMTI4ZTFlNTY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTQzOSw2
ICs0MzksNyBAQCBzZXQoV2ViQ29yZV9OT05fU1ZHX0lETF9GSUxFUwogICAgIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Ob2RlLmlkbAogICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwK
ICAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbAorICAgIE1vZHVs
ZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5pZGwKICAgICBNb2R1bGVzL3dlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuaWRsCiAgICAgTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsTWVyZ2VyTm9k
ZS5pZGwKICAgICBNb2R1bGVzL3dlYmF1ZGlvL0NoYW5uZWxTcGxpdHRlck5vZGUuaWRsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCBmN2Q2
NGMxOTNkMGU3ZGYyODE2NWJkZDc0YTQwZDNmOTBlNmE4MjEwLi5iNDdkMjU3YzY3NjdmZmRiMjY1
MWUwNmU1ZjI2ZGYyZDJmNTk2ZjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTMwNiw2ICszMDYsNyBAQCAkKFBST0pFQ1RfRElSKS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsCiAkKFBST0pFQ1RfRElSKS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwKICQoUFJPSkVDVF9ESVIpL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9QYXJhbS5pZGwKICQoUFJPSkVDVF9ESVIpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9j
ZXNzaW5nRXZlbnQuaWRsCiskKFBST0pFQ1RfRElSKS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRp
b0NvbnRleHQuaWRsCiAkKFBST0pFQ1RfRElSKS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRl
ck5vZGUuaWRsCiAkKFBST0pFQ1RfRElSKS9Nb2R1bGVzL3dlYmF1ZGlvL0NoYW5uZWxNZXJnZXJO
b2RlLmlkbAogJChQUk9KRUNUX0RJUikvTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsU3BsaXR0ZXJO
b2RlLmlkbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxl
bGlzdAppbmRleCBjYmM2NDhhZmY4NzJlMTdjOGFlYjJmM2RjNmU5YmM2Yjc4YzA0NDkzLi41NTFj
ZGIxNTRkMTIzNDdhNTBiODU3NDkyOTFjODQ1ODM5OGQxMjYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTg3LDYgKzE4Nyw4IEBA
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXV0aGVudGlj
YXRvclRyYW5zcG9ydC5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTQXV0aGVudGljYXRvclRyYW5zcG9ydC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0JhclByb3AuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0JhclByb3AuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNCYXNlQXVkaW9Db250ZXh0LmNwcAorJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNCYXNlQXVkaW9Db250ZXh0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQmFzaWND
cmVkZW50aWFsLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNCYXNpY0NyZWRlbnRpYWwuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNCZWZvcmVMb2FkRXZlbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQppbmRleCBiMjdjNzljZTY2M2UyYzhiOGVhNDYwYWUwODFlYmYxZGRlNzAzM2JhLi5mM2Y5
YTQxNGZkMjY0YWJmZmM4MTE1ZDgwYWFjOWY3ODA0YmQxZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKQEAgLTM4OSw2ICszODksNyBAQCBKU19CSU5ESU5HX0lETFMgPSBcCiAgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwgXAogICAgICQoV2ViQ29y
ZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbCBcCisgICAgJChXZWJDb3JlKS9N
b2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaWRsIFwKICAgICAkKFdlYkNvcmUpL01v
ZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9k
dWxlcy93ZWJhdWRpby9DaGFubmVsTWVyZ2VyTm9kZS5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9k
dWxlcy93ZWJhdWRpby9DaGFubmVsU3BsaXR0ZXJOb2RlLmlkbCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggMjZlMWZjN2NjYWIx
NDM0ZDA1YWYxYWJhYTFjNDhlMDAyZTJiMzFjMy4uMzgzZTFmZGI2OGZiNjkyNTUwZmIyY2VmNGFm
MDMwMzk2ZjUwMTYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmNwcApAQCAtMjgsNDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCX0FVRElP
KQogCiAjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0KLSNpbmNsdWRlICJBbmFseXNlck5vZGUu
aCIKLSNpbmNsdWRlICJBc3luY0F1ZGlvRGVjb2Rlci5oIgotI2luY2x1ZGUgIkF1ZGlvQnVmZmVy
LmgiCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXJDYWxsYmFjay5oIgotI2luY2x1ZGUgIkF1ZGlvQnVm
ZmVyU291cmNlTm9kZS5oIgotI2luY2x1ZGUgIkF1ZGlvTGlzdGVuZXIuaCIKLSNpbmNsdWRlICJB
dWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1ZGUg
IkF1ZGlvU2Vzc2lvbi5oIgotI2luY2x1ZGUgIkJpcXVhZEZpbHRlck5vZGUuaCIKLSNpbmNsdWRl
ICJDaGFubmVsTWVyZ2VyTm9kZS5oIgotI2luY2x1ZGUgIkNoYW5uZWxTcGxpdHRlck5vZGUuaCIK
LSNpbmNsdWRlICJDb252b2x2ZXJOb2RlLmgiCi0jaW5jbHVkZSAiRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgiCi0jaW5jbHVkZSAiRGVsYXlOb2RlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJEeW5hbWljc0NvbXByZXNzb3JOb2RlLmgiCi0jaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgotI2luY2x1ZGUgIkZGVEZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkdhaW5Ob2RlLmgiCi0jaW5jbHVkZSAiR2Vu
ZXJpY0V2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJIUlRGRGF0YWJhc2VMb2FkZXIuaCIKLSNpbmNs
dWRlICJIUlRGUGFubmVyLmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKLSNpbmNs
dWRlICJPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJPZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGUuaCIKLSNpbmNsdWRlICJPc2NpbGxhdG9yTm9kZS5oIgotI2luY2x1
ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYW5uZXJOb2RlLmgiCi0jaW5jbHVkZSAiUGVyaW9kaWNX
YXZlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVk
ZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2Nlc3Nvck5vZGUuaCIK
LSNpbmNsdWRlICJXYXZlU2hhcGVyTm9kZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nj
cmlwdENhbGxTdGFjay5oPgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbmNsdWRlICJN
ZWRpYVN0cmVhbS5oIgpAQCAtODEsNDkgKzQyLDE0IEBACiAjaW5jbHVkZSAiTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmgiCiAjZW5kaWYKIAotI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVO
Q0VTCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1FUikKLSNp
bmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KLSNp
bmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotY29uc3QgdW5zaWduZWQgTWF4UGVyaW9kaWNXYXZl
TGVuZ3RoID0gNDA5NjsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoQXVkaW9Db250ZXh0QmFzZSk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoQXVkaW9Db250ZXh0KTsKLQotI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwg
Li4uKSBSRUxFQVNFX0xPR19JRihkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKSAmJiBk
b2N1bWVudCgpLT5wYWdlKCktPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBNZWRpYSwgIiVw
IC0gQXVkaW9Db250ZXh0OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKLSAgICAKLWJvb2wg
QXVkaW9Db250ZXh0Ojppc1NhbXBsZVJhdGVSYW5nZUdvb2QoZmxvYXQgc2FtcGxlUmF0ZSkKLXsK
LSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB0aGUgbWluaW11bSBzYW1wbGUtcmF0
ZSBjb3VsZCBiZSBsZXNzIHRoYW4gNDQuMUtIeiwKLSAgICAvLyBidXQgdGhhdCB3aWxsIHJlcXVp
cmUgc29tZSBmaXhlcyBpbiBIUlRGUGFubmVyOjpmZnRTaXplRm9yU2FtcGxlUmF0ZSgpLCBhbmQg
c29tZSB0ZXN0aW5nIHRoZXJlLgotICAgIHJldHVybiBzYW1wbGVSYXRlID49IDQ0MTAwICYmIHNh
bXBsZVJhdGUgPD0gOTYwMDA7Ci19Ci0KICNpZiBPUyhXSU5ET1dTKQogLy8gRG9uJ3QgYWxsb3cg
bW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBBdWRpb0NvbnRleHRzIHRhbGtp
bmcgdG8gaGFyZHdhcmUuCiBjb25zdGV4cHIgdW5zaWduZWQgbWF4SGFyZHdhcmVDb250ZXh0cyA9
IDQ7CiAjZW5kaWYKLXVuc2lnbmVkIEF1ZGlvQ29udGV4dDo6c19oYXJkd2FyZUNvbnRleHRDb3Vu
dCA9IDA7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChBdWRpb0NvbnRleHQpOwogICAg
IAogRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQ29udGV4dD4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlKERv
Y3VtZW50JiBkb2N1bWVudCkKIHsKQEAgLTEzOCwzMjYgKzY0LDM4IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxBdWRpb0NvbnRleHQ+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQp
CiAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dDsKIH0KIAotQXVkaW9Db250ZXh0QmFzZTo6QXVkaW9D
b250ZXh0QmFzZShEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBBY3RpdmVET01PYmplY3QoZG9j
dW1lbnQpCi17Ci19Ci0KIC8vIENvbnN0cnVjdG9yIGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlv
IGhhcmR3YXJlLgogQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQmIGRvY3VtZW50
KQotICAgIDogQXVkaW9Db250ZXh0QmFzZShkb2N1bWVudCkKLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKLSAgICAsIG1fbG9nZ2VyKGRvY3VtZW50LmxvZ2dlcigpKQotICAgICwgbV9sb2dJZGVu
dGlmaWVyKHVuaXF1ZUxvZ0lkZW50aWZpZXIoKSkKLSNlbmRpZgotICAgICwgbV9tZWRpYVNlc3Np
b24oUGxhdGZvcm1NZWRpYVNlc3Npb246OmNyZWF0ZShQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFn
ZXI6OnNoYXJlZE1hbmFnZXIoKSwgKnRoaXMpKQotICAgICwgbV9ldmVudFF1ZXVlKE1haW5UaHJl
YWRHZW5lcmljRXZlbnRRdWV1ZTo6Y3JlYXRlKCp0aGlzKSkKKyAgICA6IEJhc2VBdWRpb0NvbnRl
eHQoZG9jdW1lbnQpCiB7Ci0gICAgLy8gQWNjb3JkaW5nIHRvIHNwZWMgQXVkaW9Db250ZXh0IG11
c3QgZGllIG9ubHkgYWZ0ZXIgcGFnZSBuYXZpZ2F0ZS4KLSAgICAvLyBMZXRzIG1hcmsgaXQgYXMg
QWN0aXZlRE9NT2JqZWN0IHdpdGggcGVuZGluZyBhY3Rpdml0eSBhbmQgdW5tYXJrIGl0IGluIGNs
ZWFyIG1ldGhvZC4KLSAgICBtYWtlUGVuZGluZ0FjdGl2aXR5KCk7Ci0KLSAgICBjb25zdHJ1Y3RD
b21tb24oKTsKLQotICAgIG1fZGVzdGluYXRpb25Ob2RlID0gRGVmYXVsdEF1ZGlvRGVzdGluYXRp
b25Ob2RlOjpjcmVhdGUoKnRoaXMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRp
b24gbm9kZSdzIG11dGVkIHN0YXRlIHRvIG1hdGNoIHRoZSBwYWdlJ3MgY3VycmVudCBtdXRlZCBz
dGF0ZS4KLSAgICBwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpOwotCi0gICAgZG9jdW1lbnQuYWRk
QXVkaW9Qcm9kdWNlcigqdGhpcyk7Ci0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JWaXNpYmlsaXR5
U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogLy8gQ29uc3RydWN0b3IgZm9yIG9m
ZmxpbmUgKG5vbi1yZWFsdGltZSkgcmVuZGVyaW5nLgogQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRl
eHQoRG9jdW1lbnQmIGRvY3VtZW50LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQotICAgIDog
QXVkaW9Db250ZXh0QmFzZShkb2N1bWVudCkKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAg
ICAsIG1fbG9nZ2VyKGRvY3VtZW50LmxvZ2dlcigpKQotICAgICwgbV9sb2dJZGVudGlmaWVyKHVu
aXF1ZUxvZ0lkZW50aWZpZXIoKSkKLSNlbmRpZgotICAgICwgbV9pc09mZmxpbmVDb250ZXh0KHRy
dWUpCi0gICAgLCBtX21lZGlhU2Vzc2lvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBs
YXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLCAqdGhpcykpCi0gICAg
LCBtX2V2ZW50UXVldWUoTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMp
KQotICAgICwgbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotewotICAgIGNvbnN0cnVjdENv
bW1vbigpOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGRlc3RpbmF0aW9uIGZvciBvZmZsaW5lIHJl
bmRlcmluZy4KLSAgICBtX2Rlc3RpbmF0aW9uTm9kZSA9IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6Y3JlYXRlKCp0aGlzLCBtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci19Ci0KLXZvaWQgQXVk
aW9Db250ZXh0Ojpjb25zdHJ1Y3RDb21tb24oKQotewotICAgIEZGVEZyYW1lOjppbml0aWFsaXpl
KCk7Ci0gICAgCi0gICAgbV9saXN0ZW5lciA9IEF1ZGlvTGlzdGVuZXI6OmNyZWF0ZSgpOwotCi0g
ICAgQVNTRVJUKGRvY3VtZW50KCkpOwotICAgIGlmIChkb2N1bWVudCgpLT5hdWRpb1BsYXliYWNr
UmVxdWlyZXNVc2VyR2VzdHVyZSgpKQotICAgICAgICBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKFJl
cXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7Ci0gICAgZWxzZQotICAg
ICAgICBtX3Jlc3RyaWN0aW9ucyA9IE5vUmVzdHJpY3Rpb25zOwotCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRp
b1N0YXJ0UmVzdHJpY3Rpb24pOwotI2VuZGlmCi19Ci0KLUF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29u
dGV4dCgpCi17Ci0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSAgICBmcHJpbnRmKHN0
ZGVyciwgIiVwOiBBdWRpb0NvbnRleHQ6On5BdWRpb0NvbnRleHQoKVxuIiwgdGhpcyk7Ci0jZW5k
aWYKLSAgICBBU1NFUlQoIW1faXNJbml0aWFsaXplZCk7Ci0gICAgQVNTRVJUKG1faXNTdG9wU2No
ZWR1bGVkKTsKLSAgICBBU1NFUlQobV9ub2Rlc1RvRGVsZXRlLmlzRW1wdHkoKSk7Ci0gICAgQVNT
RVJUKG1fcmVmZXJlbmNlZE5vZGVzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fZmluaXNoZWRO
b2Rlcy5pc0VtcHR5KCkpOyAvLyBGSVhNRSAoYnVnIDEwNTg3MCk6IFRoaXMgYXNzZXJ0aW9uIGZh
aWxzIG9uIHRlc3RzIHNvbWV0aW1lcy4KLSAgICBBU1NFUlQobV9hdXRvbWF0aWNQdWxsTm9kZXMu
aXNFbXB0eSgpKTsKLSAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcpCi0g
ICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLnJlc2l6ZShtX2F1dG9tYXRpY1B1
bGxOb2Rlcy5zaXplKCkpOwotICAgIEFTU0VSVChtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rl
cy5pc0VtcHR5KCkpOwotICAgIC8vIEZJWE1FOiBDYW4gd2UgYXNzZXJ0IHRoYXQgbV9kZWZlcnJl
ZEZpbmlzaERlcmVmTGlzdCBpcyBlbXB0eT8KLQotICAgIGlmICghaXNPZmZsaW5lQ29udGV4dCgp
ICYmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICBkb2N1bWVudCgpLT5yZW1v
dmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZv
clZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwotICAgIH0KLX0KLQotdm9p
ZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKLXsKLSAgICBBU1NFUlQoIW1faXNTdG9w
U2NoZWR1bGVkKTsKLQotICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIERvbid0IGFsbG93IHRoZSBjb250ZXh0IHRvIGluaXRpYWxpemUgYSBzZWNvbmQg
dGltZSBhZnRlciBpdCdzIGFscmVhZHkgYmVlbiBleHBsaWNpdGx5IHVuaW5pdGlhbGl6ZWQuCi0g
ICAgQVNTRVJUKCFtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZCk7Ci0gICAgaWYgKG1faXNBdWRpb1Ro
cmVhZEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kZXN0aW5hdGlvbk5v
ZGUpIHsKLSAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKLQotICAgICAg
ICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBzdGFydHMg
dGhlIGF1ZGlvIHRocmVhZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRlSW5wdXQoKSBt
ZXRob2Qgd2lsbCBub3cgYmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1ZGlvLgotICAg
ICAgICAgICAgLy8gRWFjaCB0aW1lIHByb3ZpZGVJbnB1dCgpIGlzIGNhbGxlZCwgYSBwb3J0aW9u
IG9mIHRoZSBhdWRpbyBzdHJlYW0gaXMgcmVuZGVyZWQuIExldCdzIGNhbGwgdGhpcyB0aW1lIHBl
cmlvZCBhICJyZW5kZXIgcXVhbnR1bSIuCi0gICAgICAgICAgICAvLyBOT1RFOiBmb3Igbm93IGRl
ZmF1bHQgQXVkaW9Db250ZXh0IGRvZXMgbm90IG5lZWQgYW4gZXhwbGljaXQgc3RhcnRSZW5kZXJp
bmcoKSBjYWxsIGZyb20gSmF2YVNjcmlwdC4KLSAgICAgICAgICAgIC8vIFdlIG1heSB3YW50IHRv
IGNvbnNpZGVyIHJlcXVpcmluZyBpdCBmb3Igc3ltbWV0cnkgd2l0aCBPZmZsaW5lQXVkaW9Db250
ZXh0LgotICAgICAgICAgICAgc3RhcnRSZW5kZXJpbmcoKTsKLSAgICAgICAgICAgICsrc19oYXJk
d2FyZUNvbnRleHRDb3VudDsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX2lzSW5pdGlhbGl6ZWQg
PSB0cnVlOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6Y2xlYXIoKQorICAgIDogQmFzZUF1ZGlv
Q29udGV4dChkb2N1bWVudCwgcmVuZGVyVGFyZ2V0KQogewotICAgIFJlZjxBdWRpb0NvbnRleHQ+
IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotCi0gICAgLy8gV2UgaGF2ZSB0byByZWxlYXNlIG91ciBy
ZWZlcmVuY2UgdG8gdGhlIGRlc3RpbmF0aW9uIG5vZGUgYmVmb3JlIHRoZSBjb250ZXh0IHdpbGwg
ZXZlciBiZSBkZWxldGVkIHNpbmNlIHRoZSBkZXN0aW5hdGlvbiBub2RlIGhvbGRzIGEgcmVmZXJl
bmNlIHRvIHRoZSBjb250ZXh0LgotICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZSkKLSAgICAgICAg
bV9kZXN0aW5hdGlvbk5vZGUgPSBudWxscHRyOwotCi0gICAgLy8gQXVkaW8gdGhyZWFkIGlzIGRl
YWQuIE5vYm9keSB3aWxsIHNjaGVkdWxlIG5vZGUgZGVsZXRpb24gYWN0aW9uLiBMZXQncyBkbyBp
dCBvdXJzZWx2ZXMuCi0gICAgZG8gewotICAgICAgICBkZWxldGVNYXJrZWROb2RlcygpOwotICAg
ICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kVmVjdG9yKG1fbm9kZXNNYXJrZWRGb3JEZWxldGlv
bik7Ci0gICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5jbGVhcigpOwotICAgIH0gd2hp
bGUgKG1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpOwotCi0gICAgY2xlYXJQZW5kaW5nQWN0aXZpdHko
KTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCit2b2lkIEF1ZGlvQ29u
dGV4dDo6Y2xvc2UoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHsKLSAgICBB
TFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwotICAgIAotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKKyAgICBpZiAoaXNPZmZsaW5lQ29udGV4
dCgpIHx8IGlzU3RvcHBlZCgpKSB7CisgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0
ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhpcyBzdG9wcyB0aGUgYXVkaW8g
dGhyZWFkIGFuZCBhbGwgYXVkaW8gcmVuZGVyaW5nLgotICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9k
ZSkKLSAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnVuaW5pdGlhbGl6ZSgpOwotCi0gICAgLy8g
RG9uJ3QgYWxsb3cgdGhlIGNvbnRleHQgdG8gaW5pdGlhbGl6ZSBhIHNlY29uZCB0aW1lIGFmdGVy
IGl0J3MgYWxyZWFkeSBiZWVuIGV4cGxpY2l0bHkgdW5pbml0aWFsaXplZC4KLSAgICBtX2lzQXVk
aW9UaHJlYWRGaW5pc2hlZCA9IHRydWU7Ci0KLSAgICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSkg
ewotICAgICAgICBBU1NFUlQoc19oYXJkd2FyZUNvbnRleHRDb3VudCk7Ci0gICAgICAgIC0tc19o
YXJkd2FyZUNvbnRleHRDb3VudDsKLQotICAgICAgICAvLyBPZmZsaW5lIGNvbnRleHRzIG1vdmUg
dG8gJ0Nsb3NlZCcgc3RhdGUgd2hlbiBkaXNwYXRjaGluZyB0aGUgY29tcGxldGlvbiBldmVudC4K
LSAgICAgICAgc2V0U3RhdGUoU3RhdGU6OkNsb3NlZCk7CiAgICAgfQogCi0gICAgLy8gR2V0IHJp
ZCBvZiB0aGUgc291cmNlcyB3aGljaCBtYXkgc3RpbGwgYmUgcGxheWluZy4KLSAgICBkZXJlZlVu
ZmluaXNoZWRTb3VyY2VOb2RlcygpOwotCi0gICAgbV9pc0luaXRpYWxpemVkID0gZmFsc2U7Ci19
Ci0KLWJvb2wgQXVkaW9Db250ZXh0Ojppc0luaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9pc0luaXRpYWxpemVkOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6YWRkUmVhY3Rpb24o
U3RhdGUgc3RhdGUsIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCi17Ci0gICAg
c2l6ZV90IHN0YXRlSW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0YXRlKTsKLSAgICBpZiAo
c3RhdGVJbmRleCA+PSBtX3N0YXRlUmVhY3Rpb25zLnNpemUoKSkKLSAgICAgICAgbV9zdGF0ZVJl
YWN0aW9ucy5ncm93KHN0YXRlSW5kZXggKyAxKTsKLQotICAgIG1fc3RhdGVSZWFjdGlvbnNbc3Rh
dGVJbmRleF0uYXBwZW5kKFdURk1vdmUocHJvbWlzZSkpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4
dDo6c2V0U3RhdGUoU3RhdGUgc3RhdGUpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gc3RhdGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUgPSBzdGF0ZTsKLSAgICBtX2V2ZW50UXVldWUt
PmVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdGF0ZWNoYW5nZUV2ZW50
LCBFdmVudDo6Q2FuQnViYmxlOjpZZXMsIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7Ci0KLSAg
ICBzaXplX3Qgc3RhdGVJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc3RhdGUpOwotICAgIGlm
IChzdGF0ZUluZGV4ID49IG1fc3RhdGVSZWFjdGlvbnMuc2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBWZWN0b3I8RE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+PiByZWFjdGlvbnM7Ci0gICAg
bV9zdGF0ZVJlYWN0aW9uc1tzdGF0ZUluZGV4XS5zd2FwKHJlYWN0aW9ucyk7Ci0KLSAgICBmb3Ig
KGF1dG8mIHByb21pc2UgOiByZWFjdGlvbnMpCisgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkNs
b3NlZCB8fCAhZGVzdGluYXRpb25Ob2RlKCkpIHsKICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7
Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpzdG9wKCkKLXsKLSAgICBBTFdBWVNfTE9HKExPR0lE
RU5USUZJRVIpOwotICAgIAotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBV
c3VhbGx5IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgY2FsbHMgc3RvcCB0d2ljZS4KLSAgICBpZiAo
bV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2lzU3RvcFNjaGVkdWxl
ZCA9IHRydWU7Ci0KLSAgICBBU1NFUlQoZG9jdW1lbnQoKSk7Ci0gICAgZG9jdW1lbnQoKS0+dXBk
YXRlSXNQbGF5aW5nTWVkaWEoKTsKLQotICAgIHVuaW5pdGlhbGl6ZSgpOwotICAgIGNsZWFyKCk7
Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pCi17
Ci0gICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OlJ1bm5pbmcpIHsKLSAgICAgICAgbV9tZWRpYVNl
c3Npb24tPmJlZ2luSW50ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpQbGF5YmFja1N1
c3BlbmRlZCk7Ci0gICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7Ci0g
ICAgfQotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6cmVzdW1lKCkKLXsKLSAgICBpZiAoc3RhdGUo
KSA9PSBTdGF0ZTo6SW50ZXJydXB0ZWQpIHsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZElu
dGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZyk7Ci0gICAg
ICAgIGRvY3VtZW50KCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7Ci0gICAgfQotfQotCi1jb25z
dCBjaGFyKiBBdWRpb0NvbnRleHQ6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAg
IHJldHVybiAiQXVkaW9Db250ZXh0IjsKLX0KLQotRG9jdW1lbnQqIEF1ZGlvQ29udGV4dEJhc2U6
OmRvY3VtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7Ci19Ci0KLURvY3VtZW50SWRlbnRpZmllciBBdWRpb0NvbnRl
eHQ6Omhvc3RpbmdEb2N1bWVudElkZW50aWZpZXIoKSBjb25zdAotewotICAgIGF1dG8qIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAg
cmV0dXJuIGRvY3VtZW50ID8gZG9jdW1lbnQtPmlkZW50aWZpZXIoKSA6IERvY3VtZW50SWRlbnRp
ZmllciB7IH07Ci19Ci0KLWJvb2wgQXVkaW9Db250ZXh0Ojppc1N1c3BlbmRlZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuICFkb2N1bWVudCgpIHx8IGRvY3VtZW50KCktPmFjdGl2ZURPTU9iamVjdHNB
cmVTdXNwZW5kZWQoKSB8fCBkb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgp
OwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgpCi17Ci0g
ICAgLy8gRG8gbm90IHN1c3BlbmQgaWYgYXVkaW8gaXMgYXVkaWJsZS4KLSAgICBpZiAoIWRvY3Vt
ZW50KCkgfHwgbWVkaWFTdGF0ZSgpID09IE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ0F1ZGlvIHx8
IG1faXNTdG9wU2NoZWR1bGVkKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZG9jdW1lbnQo
KS0+aGlkZGVuKCkpIHsKLSAgICAgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OlJ1bm5pbmcpIHsK
LSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInZpc2liaWxpdHlTdGF0ZUNoYW5n
ZWQoKSBTdXNwZW5kaW5nIHBsYXliYWNrIGFmdGVyIGdvaW5nIHRvIHRoZSBiYWNrZ3JvdW5kIik7
Ci0gICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1N
ZWRpYVNlc3Npb246OkVudGVyaW5nQmFja2dyb3VuZCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6SW50ZXJydXB0ZWQpIHsKLSAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKSBSZXN1
bWluZyBwbGF5YmFjayBhZnRlciBlbnRlcmluZyBmb3JlZ3JvdW5kIik7Ci0gICAgICAgICAgICBt
X21lZGlhU2Vzc2lvbi0+ZW5kSW50ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNYXlS
ZXN1bWVQbGF5aW5nKTsKLSAgICAgICAgfQogICAgIH0KLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6
OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgVVJMJiB1cmwpIGNvbnN0Ci17Ci0gICAgaWYgKHVybC5w
cm90b2NvbElzRGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byog
ZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gIWRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLmNhblJlcXVlc3QodXJsKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZm
ZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9h
dCBzYW1wbGVSYXRlKQotewotICAgIGF1dG8gYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3Jl
YXRlKG51bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKTsKLSAgICBp
ZiAoIWF1ZGlvQnVmZmVyKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVk
RXJyb3IgfTsKLSAgICByZXR1cm4gYXVkaW9CdWZmZXIucmVsZWFzZU5vbk51bGwoKTsKLX0KLQot
RXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIo
QXJyYXlCdWZmZXImIGFycmF5QnVmZmVyLCBib29sIG1peFRvTW9ubykKLXsKLSAgICBhdXRvIGF1
ZGlvQnVmZmVyID0gQXVkaW9CdWZmZXI6OmNyZWF0ZUZyb21BdWRpb0ZpbGVEYXRhKGFycmF5QnVm
ZmVyLmRhdGEoKSwgYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCgpLCBtaXhUb01vbm8sIHNhbXBsZVJh
dGUoKSk7Ci0gICAgaWYgKCFhdWRpb0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yIH07Ci0gICAgcmV0dXJuIGF1ZGlvQnVmZmVyLnJlbGVhc2VOb25OdWxsKCk7
Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZWNvZGVBdWRpb0RhdGEoUmVmPEFycmF5QnVmZmVy
PiYmIGF1ZGlvRGF0YSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxi
YWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNrKQotewotICAg
IGlmICghbV9hdWRpb0RlY29kZXIpCi0gICAgICAgIG1fYXVkaW9EZWNvZGVyID0gbWFrZVVuaXF1
ZTxBc3luY0F1ZGlvRGVjb2Rlcj4oKTsKLSAgICBtX2F1ZGlvRGVjb2Rlci0+ZGVjb2RlQXN5bmMo
V1RGTW92ZShhdWRpb0RhdGEpLCBzYW1wbGVSYXRlKCksIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNr
KSwgV1RGTW92ZShlcnJvckNhbGxiYWNrKSk7Ci19CiAKLUV4Y2VwdGlvbk9yPFJlZjxBdWRpb0J1
ZmZlclNvdXJjZU5vZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlclNvdXJjZSgpCi17Ci0g
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLQotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworICAgIGFkZFJlYWN0aW9uKFN0YXRlOjpDbG9zZWQs
IFdURk1vdmUocHJvbWlzZSkpOwogCiAgICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICBSZWY8QXVk
aW9CdWZmZXJTb3VyY2VOb2RlPiBub2RlID0gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUo
KnRoaXMsIHNhbXBsZVJhdGUoKSk7Ci0KLSAgICAvLyBCZWNhdXNlIHRoaXMgaXMgYW4gQXVkaW9T
Y2hlZHVsZWRTb3VyY2VOb2RlLCB0aGUgY29udGV4dCBrZWVwcyBhIHJlZmVyZW5jZSB1bnRpbCBp
dCBoYXMgZmluaXNoZWQgcGxheWluZy4KLSAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgQXVkaW9T
Y2hlZHVsZWRTb3VyY2VOb2RlOjpmaW5pc2goKSBjYWxscyBBdWRpb0NvbnRleHQ6Om5vdGlmeU5v
ZGVGaW5pc2hlZFByb2Nlc3NpbmcoKS4KLSAgICByZWZOb2RlKG5vZGUpOwogCi0gICAgcmV0dXJu
IG5vZGU7CisgICAgZGVzdGluYXRpb25Ob2RlKCktPmNsb3NlKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgc2V0U3RhdGUoU3RhdGU6OkNsb3NlZCk7Cisg
ICAgICAgIHVuaW5pdGlhbGl6ZSgpOworICAgIH0pOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpA
QCAtNDY4LDcgKzEwNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxlbWVudFNvCiAKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkIHx8IG1lZGlhRWxl
bWVudC5hdWRpb1NvdXJjZU5vZGUoKSkKKyAgICBpZiAoaXNTdG9wcGVkKCkgfHwgbWVkaWFFbGVt
ZW50LmF1ZGlvU291cmNlTm9kZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IgfTsKIAogICAgIGxhenlJbml0aWFsaXplKCk7CkBAIC00ODgsMTAgKzEyNiwx
MCBAQCBFeGNlcHRpb25PcjxSZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPj4gQXVkaW9D
b250ZXh0OjpjcmVhdGVNZWRpYUVsZW1lbnRTbwogRXhjZXB0aW9uT3I8UmVmPE1lZGlhU3RyZWFt
QXVkaW9Tb3VyY2VOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShN
ZWRpYVN0cmVhbSYgbWVkaWFTdHJlYW0pCiB7CiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVS
KTsKLSAgICAKKwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAobV9pc1N0
b3BTY2hlZHVsZWQpCisgICAgaWYgKGlzU3RvcHBlZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGF1dG8gYXVkaW9UcmFja3MgPSBtZWRp
YVN0cmVhbS5nZXRBdWRpb1RyYWNrcygpOwpAQCAtNTE5LDcgKzE1Nyw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVk
aWFTdHJlYW1Tb3VyCiAKIEV4Y2VwdGlvbk9yPFJlZjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b25Ob2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCkKIHsK
LSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAgaWYgKGlzU3RvcHBlZCgpKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgYW4gb3B0aW9uYWwgYXJndW1lbnQgd2hpY2ggc3BlY2lmaWVzIHRo
ZSBudW1iZXIgb2YgY2hhbm5lbHMuCkBAIC01MjksODkwICsxNjcsNiBAQCBFeGNlcHRpb25PcjxS
ZWY8TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
TWVkaWFTdHJlYQogCiAjZW5kaWYKIAotRXhjZXB0aW9uT3I8UmVmPFNjcmlwdFByb2Nlc3Nvck5v
ZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6
ZSwgc2l6ZV90IG51bWJlck9mSW5wdXRDaGFubmVscywgc2l6ZV90IG51bWJlck9mT3V0cHV0Q2hh
bm5lbHMpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICAKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKLQotICAgIGxhenlJbml0
aWFsaXplKCk7Ci0KLSAgICAvLyBXM0MgRWRpdG9yJ3MgRHJhZnQgMDYgSnVuZSAyMDE3Ci0gICAg
Ly8gIGh0dHBzOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3dpZGwtQmFzZUF1
ZGlvQ29udGV4dC1jcmVhdGVTY3JpcHRQcm9jZXNzb3ItU2NyaXB0UHJvY2Vzc29yTm9kZS11bnNp
Z25lZC1sb25nLWJ1ZmZlclNpemUtdW5zaWduZWQtbG9uZy1udW1iZXJPZklucHV0Q2hhbm5lbHMt
dW5zaWduZWQtbG9uZy1udW1iZXJPZk91dHB1dENoYW5uZWxzCi0KLSAgICAvLyBUaGUgYnVmZmVy
U2l6ZSBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgYnVmZmVyIHNpemUgaW4gdW5pdHMgb2Ygc2Ft
cGxlLWZyYW1lcy4gSWYgaXQncyBub3QgcGFzc2VkIGluLAotICAgIC8vIG9yIGlmIHRoZSB2YWx1
ZSBpcyAwLCB0aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGNob29zZSB0aGUgYmVzdCBidWZm
ZXIgc2l6ZSBmb3IgdGhlIGdpdmVuIGVudmlyb25tZW50LAotICAgIC8vIHdoaWNoIHdpbGwgYmUg
Y29uc3RhbnQgcG93ZXIgb2YgMiB0aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZiB0aGUgbm9kZS4g
Li4uIElmIHRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlcgotICAgIC8vIGlzIG5vdCBvbmUgb2Yg
dGhlIGFsbG93ZWQgcG93ZXItb2YtMiB2YWx1ZXMgbGlzdGVkIGFib3ZlLCBhbiBJbmRleFNpemVF
cnJvciBtdXN0IGJlIHRocm93bi4KLSAgICBzd2l0Y2ggKGJ1ZmZlclNpemUpIHsKLSAgICBjYXNl
IDA6Ci0jaWYgVVNFKEFVRElPX1NFU1NJT04pCi0gICAgICAgIC8vIFBpY2sgYSB2YWx1ZSBiZXR3
ZWVuIDI1NiAoMl44KSBhbmQgMTYzODQgKDJeMTQpLCBiYXNlZCBvbiB0aGUgYnVmZmVyIHNpemUg
b2YgdGhlIGN1cnJlbnQgQXVkaW9TZXNzaW9uOgotICAgICAgICBidWZmZXJTaXplID0gMSA8PCBz
dGQ6Om1heDxzaXplX3Q+KDgsIHN0ZDo6bWluPHNpemVfdD4oMTQsIHN0ZDo6bG9nMihBdWRpb1Nl
c3Npb246OnNoYXJlZFNlc3Npb24oKS5idWZmZXJTaXplKCkpKSk7Ci0jZWxzZQotICAgICAgICBi
dWZmZXJTaXplID0gMjA0ODsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI1NjoK
LSAgICBjYXNlIDUxMjoKLSAgICBjYXNlIDEwMjQ6Ci0gICAgY2FzZSAyMDQ4OgotICAgIGNhc2Ug
NDA5NjoKLSAgICBjYXNlIDgxOTI6Ci0gICAgY2FzZSAxNjM4NDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07
Ci0gICAgfQotCi0gICAgLy8gQW4gSW5kZXhTaXplRXJyb3IgZXhjZXB0aW9uIG11c3QgYmUgdGhy
b3duIGlmIGJ1ZmZlclNpemUgb3IgbnVtYmVyT2ZJbnB1dENoYW5uZWxzIG9yIG51bWJlck9mT3V0
cHV0Q2hhbm5lbHMKLSAgICAvLyBhcmUgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UuIEl0IGlzIGlu
dmFsaWQgZm9yIGJvdGggbnVtYmVyT2ZJbnB1dENoYW5uZWxzIGFuZCBudW1iZXJPZk91dHB1dENo
YW5uZWxzIHRvIGJlIHplcm8uCi0gICAgLy8gSW4gdGhpcyBjYXNlIGFuIEluZGV4U2l6ZUVycm9y
IG11c3QgYmUgdGhyb3duLgotCi0gICAgaWYgKCFudW1iZXJPZklucHV0Q2hhbm5lbHMgJiYgIW51
bWJlck9mT3V0cHV0Q2hhbm5lbHMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBw
b3J0ZWRFcnJvciB9OwotCi0gICAgLy8gVGhpcyBwYXJhbWV0ZXIgW251bWJlck9mSW5wdXRDaGFu
bmVsc10gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGlzIG5vZGUncyBp
bnB1dC4gVmFsdWVzIG9mCi0gICAgLy8gdXAgdG8gMzIgbXVzdCBiZSBzdXBwb3J0ZWQuIEEgTm90
U3VwcG9ydGVkRXJyb3IgbXVzdCBiZSB0aHJvd24gaWYgdGhlIG51bWJlciBvZiBjaGFubmVscyBp
cyBub3Qgc3VwcG9ydGVkLgotCi0gICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscyA+IG1heE51
bWJlck9mQ2hhbm5lbHMoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRl
ZEVycm9yIH07Ci0KLSAgICAvLyBUaGlzIHBhcmFtZXRlciBbbnVtYmVyT2ZPdXRwdXRDaGFubmVs
c10gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGlzIG5vZGUncyBvdXRw
dXQuIFZhbHVlcyBvZgotICAgIC8vIHVwIHRvIDMyIG11c3QgYmUgc3VwcG9ydGVkLiBBIE5vdFN1
cHBvcnRlZEVycm9yIG11c3QgYmUgdGhyb3duIGlmIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaXMg
bm90IHN1cHBvcnRlZC4KLQotICAgIGlmIChudW1iZXJPZk91dHB1dENoYW5uZWxzID4gbWF4TnVt
YmVyT2ZDaGFubmVscygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVk
RXJyb3IgfTsKLQotICAgIGF1dG8gbm9kZSA9IFNjcmlwdFByb2Nlc3Nvck5vZGU6OmNyZWF0ZSgq
dGhpcywgc2FtcGxlUmF0ZSgpLCBidWZmZXJTaXplLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51
bWJlck9mT3V0cHV0Q2hhbm5lbHMpOwotCi0gICAgcmVmTm9kZShub2RlKTsgLy8gY29udGV4dCBr
ZWVwcyByZWZlcmVuY2UgdW50aWwgd2Ugc3RvcCBtYWtpbmcgamF2YXNjcmlwdCByZW5kZXJpbmcg
Y2FsbGJhY2tzCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZjxCaXF1YWRG
aWx0ZXJOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCaXF1YWRGaWx0ZXIoKQotewotICAgIEFM
V0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0gICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciB9OwotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLQotICAgIHJl
dHVybiBCaXF1YWRGaWx0ZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7Ci19Ci0K
LUV4Y2VwdGlvbk9yPFJlZjxXYXZlU2hhcGVyTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlV2F2
ZVNoYXBlcigpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICAKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07Ci0KLSAgICBsYXp5SW5p
dGlhbGl6ZSgpOwotICAgIHJldHVybiBXYXZlU2hhcGVyTm9kZTo6Y3JlYXRlKCp0aGlzKTsKLX0K
LQotRXhjZXB0aW9uT3I8UmVmPFBhbm5lck5vZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVBhbm5l
cigpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICAKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07Ci0KLSAgICBsYXp5SW5pdGlhbGl6
ZSgpOwotICAgIHJldHVybiBQYW5uZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7
Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZjxDb252b2x2ZXJOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVh
dGVDb252b2x2ZXIoKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0gICAgCi0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotCi0gICAgbGF6
eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gQ29udm9sdmVyTm9kZTo6Y3JlYXRlKCp0aGlzLCBz
YW1wbGVSYXRlKCkpOwotfQotCi1FeGNlcHRpb25PcjxSZWY8RHluYW1pY3NDb21wcmVzc29yTm9k
ZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCkKLXsKLSAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIpOwotICAgIAotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKLQotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJu
IER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmNyZWF0ZSgqdGhpcywgc2FtcGxlUmF0ZSgpKTsKLX0K
LQotRXhjZXB0aW9uT3I8UmVmPEFuYWx5c2VyTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQW5h
bHlzZXIoKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0gICAgCi0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotCi0gICAgbGF6eUluaXRp
YWxpemUoKTsKLSAgICByZXR1cm4gQW5hbHlzZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJh
dGUoKSk7Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZjxHYWluTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3Jl
YXRlR2FpbigpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICAKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07Ci0KLSAgICBsYXp5SW5p
dGlhbGl6ZSgpOwotICAgIHJldHVybiBHYWluTm9kZTo6Y3JlYXRlKCp0aGlzLCBzYW1wbGVSYXRl
KCkpOwotfQotCi1FeGNlcHRpb25PcjxSZWY8RGVsYXlOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVh
dGVEZWxheShkb3VibGUgbWF4RGVsYXlUaW1lKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUik7Ci0gICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0
b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciB9OwotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gRGVsYXlOb2RlOjpjcmVh
dGUoKnRoaXMsIHNhbXBsZVJhdGUoKSwgbWF4RGVsYXlUaW1lKTsKLX0KLQotRXhjZXB0aW9uT3I8
UmVmPENoYW5uZWxTcGxpdHRlck5vZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxTcGxp
dHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUik7Ci0gICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0
b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciB9OwotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICBhdXRvIG5vZGUgPSBDaGFubmVsU3Bs
aXR0ZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSwgbnVtYmVyT2ZPdXRwdXRzKTsK
LSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJv
ciB9OwotICAgIHJldHVybiBub2RlLnJlbGVhc2VOb25OdWxsKCk7Ci19Ci0KLUV4Y2VwdGlvbk9y
PFJlZjxDaGFubmVsTWVyZ2VyTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdl
cihzaXplX3QgbnVtYmVyT2ZJbnB1dHMpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVS
KTsKLSAgICAKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNj
aGVkdWxlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07
Ci0KLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIGF1dG8gbm9kZSA9IENoYW5uZWxNZXJnZXJO
b2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSwgbnVtYmVyT2ZJbnB1dHMpOwotICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07Ci0g
ICAgcmV0dXJuIG5vZGUucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmPE9z
Y2lsbGF0b3JOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKCkKLXsKLSAgICBB
TFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwotICAgIAotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKLQotICAgIGxhenlJbml0aWFsaXplKCk7Ci0KLSAgICBS
ZWY8T3NjaWxsYXRvck5vZGU+IG5vZGUgPSBPc2NpbGxhdG9yTm9kZTo6Y3JlYXRlKCp0aGlzLCBz
YW1wbGVSYXRlKCkpOwotCi0gICAgLy8gQmVjYXVzZSB0aGlzIGlzIGFuIEF1ZGlvU2NoZWR1bGVk
U291cmNlTm9kZSwgdGhlIGNvbnRleHQga2VlcHMgYSByZWZlcmVuY2UgdW50aWwgaXQgaGFzIGZp
bmlzaGVkIHBsYXlpbmcuCi0gICAgLy8gV2hlbiB0aGlzIGhhcHBlbnMsIEF1ZGlvU2NoZWR1bGVk
U291cmNlTm9kZTo6ZmluaXNoKCkgY2FsbHMgQXVkaW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNo
ZWRQcm9jZXNzaW5nKCkuCi0gICAgcmVmTm9kZShub2RlKTsKLQotICAgIHJldHVybiBub2RlOwot
fQotCi1FeGNlcHRpb25PcjxSZWY8UGVyaW9kaWNXYXZlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVQ
ZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5JiByZWFsLCBGbG9hdDMyQXJyYXkmIGltYWdpbmFyeSkK
LXsKLSAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwotICAgIAotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKLQotICAgIGlmIChyZWFsLmxlbmd0aCgp
ICE9IGltYWdpbmFyeS5sZW5ndGgoKSB8fCAocmVhbC5sZW5ndGgoKSA+IE1heFBlcmlvZGljV2F2
ZUxlbmd0aCkgfHwgIXJlYWwubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bmRleFNpemVFcnJvciB9OwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIFBlcmlv
ZGljV2F2ZTo6Y3JlYXRlKHNhbXBsZVJhdGUoKSwgcmVhbCwgaW1hZ2luYXJ5KTsKLX0KLQotdm9p
ZCBBdWRpb0NvbnRleHQ6Om5vdGlmeU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcoQXVkaW9Ob2RlKiBu
b2RlKQotewotICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkpOwotICAgIG1fZmluaXNoZWROb2Rl
cy5hcHBlbmQobm9kZSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZkZpbmlzaGVkU291
cmNlTm9kZXMoKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0gICAgQVNTRVJUKGlz
QXVkaW9UaHJlYWQoKSB8fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7Ci0gICAgZm9yIChhdXRv
JiBub2RlIDogbV9maW5pc2hlZE5vZGVzKQotICAgICAgICBkZXJlZk5vZGUoKm5vZGUpOwotCi0g
ICAgbV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpyZWZO
b2RlKEF1ZGlvTm9kZSYgbm9kZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IEF1dG9Mb2NrZXIgbG9ja2VyKCp0aGlzKTsKLSAgICAKLSAgICBub2RlLnJlZihBdWRpb05vZGU6
OlJlZlR5cGVDb25uZWN0aW9uKTsKLSAgICBtX3JlZmVyZW5jZWROb2Rlcy5hcHBlbmQoJm5vZGUp
OwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZOb2RlKEF1ZGlvTm9kZSYgbm9kZSkKLXsK
LSAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwotICAgIAotICAgIG5vZGUuZGVyZWYoQXVkaW9O
b2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0KLSAgICBBU1NFUlQobV9yZWZlcmVuY2VkTm9kZXMu
Y29udGFpbnMoJm5vZGUpKTsKLSAgICBtX3JlZmVyZW5jZWROb2Rlcy5yZW1vdmVGaXJzdCgmbm9k
ZSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2Rlcygp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpICYmIGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgp
KTsKLSAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3JlZmVyZW5jZWROb2RlcykKLSAgICAgICAgbm9k
ZS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0KLSAgICBtX3JlZmVyZW5j
ZWROb2Rlcy5jbGVhcigpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6bG9jayhib29sJiBtdXN0
UmVsZWFzZUxvY2spCi17Ci0gICAgLy8gRG9uJ3QgYWxsb3cgcmVndWxhciBsb2NrIGluIHJlYWwt
dGltZSBhdWRpbyB0aHJlYWQuCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIFRo
cmVhZCYgdGhpc1RocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwotCi0gICAgaWYgKCZ0aGlzVGhy
ZWFkID09IG1fZ3JhcGhPd25lclRocmVhZCkgewotICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUg
dGhlIGxvY2suCi0gICAgICAgIG11c3RSZWxlYXNlTG9jayA9IGZhbHNlOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIEFjcXVpcmUgdGhlIGxvY2suCi0gICAgICAgIG1fY29udGV4dEdyYXBoTXV0
ZXgubG9jaygpOwotICAgICAgICBtX2dyYXBoT3duZXJUaHJlYWQgPSAmdGhpc1RocmVhZDsKLSAg
ICAgICAgbXVzdFJlbGVhc2VMb2NrID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQXVkaW9Db250
ZXh0Ojp0cnlMb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jaykKLXsKLSAgICBUaHJlYWQmIHRoaXNU
aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKLSAgICBib29sIGlzQXVkaW9UaHJlYWQgPSAmdGhp
c1RocmVhZCA9PSBhdWRpb1RocmVhZCgpOwotCi0gICAgLy8gVHJ5IHRvIGNhdGNoIGNhc2VzIG9m
IHVzaW5nIHRyeSBsb2NrIG9uIG1haW4gdGhyZWFkIC0gaXQgc2hvdWxkIHVzZSByZWd1bGFyIGxv
Y2suCi0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQgfHwgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkp
OwotICAgIAotICAgIGlmICghaXNBdWRpb1RocmVhZCkgewotICAgICAgICAvLyBJbiByZWxlYXNl
IGJ1aWxkIHRyZWF0IHRyeUxvY2soKSBhcyBsb2NrKCkgKHNpbmNlIGFib3ZlIEFTU0VSVChpc0F1
ZGlvVGhyZWFkKSBuZXZlciBmaXJlcykgLSB0aGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkby4KLSAg
ICAgICAgbG9jayhtdXN0UmVsZWFzZUxvY2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgYm9vbCBoYXNMb2NrOwotICAgIAotICAgIGlmICgmdGhpc1RocmVhZCA9PSBt
X2dyYXBoT3duZXJUaHJlYWQpIHsKLSAgICAgICAgLy8gVGhyZWFkIGFscmVhZHkgaGFzIHRoZSBs
b2NrLgotICAgICAgICBoYXNMb2NrID0gdHJ1ZTsKLSAgICAgICAgbXVzdFJlbGVhc2VMb2NrID0g
ZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRG9uJ3QgYWxyZWFkeSBoYXZlIHRoZSBs
b2NrIC0gdHJ5IHRvIGFjcXVpcmUgaXQuCi0gICAgICAgIGhhc0xvY2sgPSBtX2NvbnRleHRHcmFw
aE11dGV4LnRyeUxvY2soKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChoYXNMb2NrKQotICAgICAg
ICAgICAgbV9ncmFwaE93bmVyVGhyZWFkID0gJnRoaXNUaHJlYWQ7Ci0KLSAgICAgICAgbXVzdFJl
bGVhc2VMb2NrID0gaGFzTG9jazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGhhc0xvY2s7Ci19
Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojp1bmxvY2soKQotewotICAgIEFTU0VSVChtX2dyYXBoT3du
ZXJUaHJlYWQgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKLQotICAgIG1fZ3JhcGhPd25lclRocmVh
ZCA9IG51bGxwdHI7Ci0gICAgbV9jb250ZXh0R3JhcGhNdXRleC51bmxvY2soKTsKLX0KLQotYm9v
bCBBdWRpb0NvbnRleHQ6OmlzQXVkaW9UaHJlYWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2F1
ZGlvVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKTsKLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6
OmlzR3JhcGhPd25lcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ3JhcGhPd25lclRocmVhZCA9
PSAmVGhyZWFkOjpjdXJyZW50KCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjphZGREZWZlcnJl
ZEZpbmlzaERlcmVmKEF1ZGlvTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlQoaXNBdWRpb1RocmVh
ZCgpKTsKLSAgICBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0LmFwcGVuZChub2RlKTsKLX0KLQot
dm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZVByZVJlbmRlclRhc2tzKCkKLXsKLSAgICBBU1NFUlQo
aXNBdWRpb1RocmVhZCgpKTsKLQotICAgIC8vIEF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgcmVu
ZGVyIHF1YW50dW0sIHRyeSB0byB1cGRhdGUgdGhlIGludGVybmFsIHJlbmRlcmluZyBncmFwaCBz
dGF0ZSAoZnJvbSBtYWluIHRocmVhZCBjaGFuZ2VzKS4KLSAgICAvLyBJdCdzIE9LIGlmIHRoZSB0
cnlMb2NrKCkgZmFpbHMsIHdlJ2xsIGp1c3QgdGFrZSBzbGlnaHRseSBsb25nZXIgdG8gcGljayB1
cCB0aGUgY2hhbmdlcy4KLSAgICBib29sIG11c3RSZWxlYXNlTG9jazsKLSAgICBpZiAodHJ5TG9j
ayhtdXN0UmVsZWFzZUxvY2spKSB7Ci0gICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0ZSBvZiBhbnkg
ZGlydHkgQXVkaW9TdW1taW5nSnVuY3Rpb25zIGFuZCBBdWRpb05vZGVPdXRwdXRzLgotICAgICAg
ICBoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpOwotICAgICAgICBoYW5kbGVEaXJ0
eUF1ZGlvTm9kZU91dHB1dHMoKTsKLQotICAgICAgICB1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMo
KTsKLQotICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQotICAgICAgICAgICAgdW5sb2NrKCk7
Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUG9zdFJlbmRlclRhc2tzKCkK
LXsKLSAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKLQotICAgIC8vIE11c3QgdXNlIGEgdHJ5
TG9jaygpIGhlcmUgdG9vLiBEb24ndCB3b3JyeSwgdGhlIGxvY2sgd2lsbCB2ZXJ5IHJhcmVseSBi
ZSBjb250ZW5kZWQgYW5kIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcmVxdWVudGx5LgotICAgIC8v
IFRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCB0aGVyZSB3aWxsIGJlIHNvbWUgbm9k
ZXMgd2hpY2ggd2lsbCB0YWtlIHNsaWdodGx5IGxvbmdlciB0aGFuIHVzdWFsIHRvIGJlIGRlbGV0
ZWQgb3IgcmVtb3ZlZAotICAgIC8vIGZyb20gdGhlIHJlbmRlciBncmFwaCAoaW4gd2hpY2ggY2Fz
ZSB0aGV5J2xsIHJlbmRlciBzaWxlbmNlKS4KLSAgICBib29sIG11c3RSZWxlYXNlTG9jazsKLSAg
ICBpZiAodHJ5TG9jayhtdXN0UmVsZWFzZUxvY2spKSB7Ci0gICAgICAgIC8vIFRha2UgY2FyZSBv
ZiBmaW5pc2hpbmcgYW55IGRlcmVmcyB3aGVyZSB0aGUgdHJ5TG9jaygpIGZhaWxlZCBwcmV2aW91
c2x5LgotICAgICAgICBoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVmcygpOwotCi0gICAgICAgIC8v
IER5bmFtaWNhbGx5IGNsZWFuIHVwIG5vZGVzIHdoaWNoIGFyZSBubyBsb25nZXIgbmVlZGVkLgot
ICAgICAgICBkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKTsKLQotICAgICAgICAvLyBEb24ndCBk
ZWxldGUgaW4gdGhlIHJlYWwtdGltZSB0aHJlYWQuIExldCB0aGUgbWFpbiB0aHJlYWQgZG8gaXQu
Ci0gICAgICAgIC8vIFJlZi1jb3VudGVkIG9iamVjdHMgaGVsZCBieSBjZXJ0YWluIEF1ZGlvTm9k
ZXMgbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS4KLSAgICAgICAgc2NoZWR1bGVOb2RlRGVsZXRpb24o
KTsKLQotICAgICAgICAvLyBGaXh1cCB0aGUgc3RhdGUgb2YgYW55IGRpcnR5IEF1ZGlvU3VtbWlu
Z0p1bmN0aW9ucyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KLSAgICAgICAgaGFuZGxlRGlydHlBdWRp
b1N1bW1pbmdKdW5jdGlvbnMoKTsKLSAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRz
KCk7Ci0KLSAgICAgICAgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCk7Ci0KLSAgICAgICAgaWYg
KG11c3RSZWxlYXNlTG9jaykKLSAgICAgICAgICAgIHVubG9jaygpOwotICAgIH0KLX0KLQotdm9p
ZCBBdWRpb0NvbnRleHQ6OmhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCkKLXsKLSAgICBBU1NF
UlQoaXNBdWRpb1RocmVhZCgpICYmIGlzR3JhcGhPd25lcigpKTsKLSAgICBmb3IgKGF1dG8mIG5v
ZGUgOiBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0KQotICAgICAgICBub2RlLT5maW5pc2hEZXJl
ZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsKLSAgICAKLSAgICBtX2RlZmVycmVkRmlu
aXNoRGVyZWZMaXN0LmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjptYXJrRm9yRGVs
ZXRpb24oQXVkaW9Ob2RlJiBub2RlKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0K
LSAgICBpZiAoaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpCi0gICAgICAgIG1fbm9kZXNUb0RlbGV0
ZS5hcHBlbmQoJm5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgbV9ub2Rlc01hcmtlZEZvckRlbGV0
aW9uLmFwcGVuZCgmbm9kZSk7Ci0KLSAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHRoZSBiZXN0IHRp
bWUgZm9yIHVzIHRvIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGF1dG9tYXRpYyBwdWxsIGxpc3QsCi0g
ICAgLy8gc2luY2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFuZCB3ZSBob2xkIHRoZSBncmFw
aCBsb2NrLiBUaGVuIHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzKCkKLSAgICAvLyBnZXRzIGEg
Y2hhbmNlIHRvIHNjaGVkdWxlIHRoZSBkZWxldGlvbiB3b3JrLCB1cGRhdGVBdXRvbWF0aWNQdWxs
Tm9kZXMoKSBhbHNvIGdldHMgYSBjaGFuY2UgdG8KLSAgICAvLyBtb2RpZnkgbV9yZW5kZXJpbmdB
dXRvbWF0aWNQdWxsTm9kZXMuCi0gICAgcmVtb3ZlQXV0b21hdGljUHVsbE5vZGUobm9kZSk7Ci19
Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpzY2hlZHVsZU5vZGVEZWxldGlvbigpCi17Ci0gICAgYm9v
bCBpc0dvb2QgPSBtX2lzSW5pdGlhbGl6ZWQgJiYgaXNHcmFwaE93bmVyKCk7Ci0gICAgQVNTRVJU
KGlzR29vZCk7Ci0gICAgaWYgKCFpc0dvb2QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1h
a2Ugc3VyZSB0byBjYWxsIGRlbGV0ZU1hcmtlZE5vZGVzKCkgb24gbWFpbiB0aHJlYWQuICAgIAot
ICAgIGlmIChtX25vZGVzTWFya2VkRm9yRGVsZXRpb24uc2l6ZSgpICYmICFtX2lzRGVsZXRpb25T
Y2hlZHVsZWQpIHsKLSAgICAgICAgbV9ub2Rlc1RvRGVsZXRlLmFwcGVuZFZlY3RvcihtX25vZGVz
TWFya2VkRm9yRGVsZXRpb24pOwotICAgICAgICBtX25vZGVzTWFya2VkRm9yRGVsZXRpb24uY2xl
YXIoKTsKLQotICAgICAgICBtX2lzRGVsZXRpb25TY2hlZHVsZWQgPSB0cnVlOwotCi0gICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmRlbGV0ZU1hcmtlZE5vZGVzKCk7Ci0g
ICAgICAgIH0pOwotICAgIH0KLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmRlbGV0ZU1hcmtlZE5v
ZGVzKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gUHJvdGVjdCB0
aGlzIG9iamVjdCBmcm9tIGJlaW5nIGRlbGV0ZWQgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIG11dGV4
IGxvY2tlZCBieSBBdXRvTG9ja2VyLgotICAgIFJlZjxBdWRpb0NvbnRleHQ+IHByb3RlY3RlZFRo
aXMoKnRoaXMpOwotICAgIHsKLSAgICAgICAgQXV0b0xvY2tlciBsb2NrZXIoKnRoaXMpOwotCi0g
ICAgICAgIHdoaWxlIChtX25vZGVzVG9EZWxldGUuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBBdWRp
b05vZGUqIG5vZGUgPSBtX25vZGVzVG9EZWxldGUudGFrZUxhc3QoKTsKLQotICAgICAgICAgICAg
Ly8gQmVmb3JlIGRlbGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9kZUlucHV0
cyBmcm9tIG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLgotICAgICAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZJbnB1dHMgPSBub2RlLT5udW1iZXJPZklucHV0cygpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRzOyArK2kpCi0gICAgICAgICAgICAgICAg
bV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMucmVtb3ZlKG5vZGUtPmlucHV0KGkpKTsKLQotICAgICAg
ICAgICAgLy8gQmVmb3JlIGRlbGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9k
ZU91dHB1dHMgZnJvbSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy4KLSAgICAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mT3V0cHV0cyA9IG5vZGUtPm51bWJlck9mT3V0cHV0cygpOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mT3V0cHV0czsgKytpKQotICAgICAg
ICAgICAgICAgIG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLnJlbW92ZShub2RlLT5vdXRwdXQoaSkp
OwotCi0gICAgICAgICAgICAvLyBGaW5hbGx5LCBkZWxldGUgaXQuCi0gICAgICAgICAgICBkZWxl
dGUgbm9kZTsKLSAgICAgICAgfQotICAgICAgICBtX2lzRGVsZXRpb25TY2hlZHVsZWQgPSBmYWxz
ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjptYXJrU3VtbWluZ0p1bmN0aW9uRGly
dHkoQXVkaW9TdW1taW5nSnVuY3Rpb24qIHN1bW1pbmdKdW5jdGlvbikKLXsKLSAgICBBU1NFUlQo
aXNHcmFwaE93bmVyKCkpOyAgICAKLSAgICBtX2RpcnR5U3VtbWluZ0p1bmN0aW9ucy5hZGQoc3Vt
bWluZ0p1bmN0aW9uKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnJlbW92ZU1hcmtlZFN1bW1p
bmdKdW5jdGlvbihBdWRpb1N1bW1pbmdKdW5jdGlvbiogc3VtbWluZ0p1bmN0aW9uKQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQXV0b0xvY2tlciBsb2NrZXIoKnRoaXMpOwot
ICAgIG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLnJlbW92ZShzdW1taW5nSnVuY3Rpb24pOwotfQot
Ci1FdmVudFRhcmdldEludGVyZmFjZSBBdWRpb0NvbnRleHQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQXVkaW9Db250ZXh0RXZlbnRUYXJnZXRJbnRlcmZhY2VU
eXBlOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6bWFya0F1ZGlvTm9kZU91dHB1dERpcnR5KEF1
ZGlvTm9kZU91dHB1dCogb3V0cHV0KQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0g
ICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuYWRkKG91dHB1dCk7Ci19Ci0KLXZvaWQgQXVkaW9D
b250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpCi17Ci0gICAgQVNTRVJU
KGlzR3JhcGhPd25lcigpKTsgICAgCi0KLSAgICBmb3IgKGF1dG8mIGp1bmN0aW9uIDogbV9kaXJ0
eVN1bW1pbmdKdW5jdGlvbnMpCi0gICAgICAgIGp1bmN0aW9uLT51cGRhdGVSZW5kZXJpbmdTdGF0
ZSgpOwotCi0gICAgbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMuY2xlYXIoKTsKLX0KLQotdm9pZCBB
dWRpb0NvbnRleHQ6OmhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpCi17Ci0gICAgQVNTRVJU
KGlzR3JhcGhPd25lcigpKTsgICAgCi0KLSAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fZGlydHlB
dWRpb05vZGVPdXRwdXRzKQotICAgICAgICBvdXRwdXQtPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7
Ci0KLSAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwotfQotCi12b2lkIEF1ZGlv
Q29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJiBub2RlKQotewotICAgIEFT
U0VSVChpc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXMuYWRk
KCZub2RlKS5pc05ld0VudHJ5KQotICAgICAgICBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRh
dGluZyA9IHRydWU7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpyZW1vdmVBdXRvbWF0aWNQdWxs
Tm9kZShBdWRpb05vZGUmIG5vZGUpCi17Ci0gICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKLQot
ICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5yZW1vdmUoJm5vZGUpKQotICAgICAgICBtX2F1
dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyA9IHRydWU7Ci19Ci0KLXZvaWQgQXVkaW9Db250
ZXh0Ojp1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKQotewotICAgIEFTU0VSVChpc0dyYXBoT3du
ZXIoKSk7Ci0KLSAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcpIHsKLSAg
ICAgICAgLy8gQ29weSBmcm9tIG1fYXV0b21hdGljUHVsbE5vZGVzIHRvIG1fcmVuZGVyaW5nQXV0
b21hdGljUHVsbE5vZGVzLgotICAgICAgICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy5y
ZXNpemUobV9hdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgpKTsKLQotICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX2F1dG9tYXRpY1B1bGxOb2RlcykK
LSAgICAgICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2krK10gPSBvdXRwdXQ7
Ci0KLSAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSBmYWxzZTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNp
emVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2RlcykKLSAg
ICAgICAgbm9kZS0+cHJvY2Vzc0lmTmVjZXNzYXJ5KGZyYW1lc1RvUHJvY2Vzcyk7Ci19Ci0KLVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIEF1ZGlvQ29udGV4dEJhc2U6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6Om5vZGVXaWxsQmVnaW5QbGF5
YmFjaygpCi17Ci0gICAgLy8gQ2FsbGVkIGJ5IHNjaGVkdWxlZCBBdWRpb05vZGVzIHdoZW4gY2xp
ZW50cyBzY2hlZHVsZSB0aGVpciBzdGFydCB0aW1lcy4KLSAgICAvLyBQcmlvciB0byB0aGUgaW50
cm9kdWN0aW9uIG9mIHN1c3BlbmQoKSwgcmVzdW1lKCksIGFuZCBzdG9wKCksIHN0YXJ0aW5nCi0g
ICAgLy8gYSBzY2hlZHVsZWQgQXVkaW9Ob2RlIHdvdWxkIHJlbW92ZSB0aGUgdXNlci1nZXN0dXJl
IHJlc3RyaWN0aW9uLCBpZiBwcmVzZW50LAotICAgIC8vIGFuZCB3b3VsZCB0aHVzIHVubXV0ZSB0
aGUgY29udGV4dC4gTm93IHRoYXQgQXVkaW9Db250ZXh0IHN0YXlzIGluIHRoZQotICAgIC8vICJz
dXNwZW5kZWQiIHN0YXRlIGlmIGEgdXNlci1nZXN0dXJlIHJlc3RyaWN0aW9uIGlzIHByZXNlbnQs
IHN0YXJ0aW5nIGEKLSAgICAvLyBzY2hlZHVsZSBBdWRpb05vZGUgc2hvdWxkIHNldCB0aGUgc3Rh
dGUgdG8gInJ1bm5pbmciLCBidXQgb25seSBpZiB0aGUKLSAgICAvLyB1c2VyLWdlc3R1cmUgcmVz
dHJpY3Rpb24gaXMgc2V0LgotICAgIGlmICh1c2VyR2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFy
dCgpKQotICAgICAgICBzdGFydFJlbmRlcmluZygpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRE
b2N1bWVudEFsbG93V2ViQXVkaW9Ub0F1dG9QbGF5KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkK
LXsKLSAgICBpZiAoZG9jdW1lbnQucHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSB8fCBk
b2N1bWVudC5pc0NhcHR1cmluZygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4g
ZG9jdW1lbnQucXVpcmtzKCkuc2hvdWxkQXV0b3BsYXlXZWJBdWRpb0ZvckFyYml0cmFyeVVzZXJH
ZXN0dXJlKCkgJiYgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24o
KTsKLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6OndpbGxCZWdpblBsYXliYWNrKCkKLXsKLSAgICBh
dXRvKiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRp
b1N0YXJ0KCkpIHsKLSAgICAgICAgaWYgKCFzaG91bGREb2N1bWVudEFsbG93V2ViQXVkaW9Ub0F1
dG9QbGF5KCpkb2N1bWVudCkpIHsKLSAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
UiwgInJldHVybmluZyBmYWxzZSwgbm90IHByb2Nlc3NpbmcgdXNlciBnZXN0dXJlIG9yIGNhcHR1
cmluZyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJl
bW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQXVkaW9Db250ZXh0OjpSZXF1aXJlVXNlckdlc3R1cmVG
b3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChwYWdlQ29uc2VudFJl
cXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+
cGFnZSgpOwotICAgICAgICBpZiAocGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0g
ICAgICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKLSAg
ICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBmYWxzZSwgcGFn
ZSBkb2Vzbid0IGFsbG93IG1lZGlhIHRvIHN0YXJ0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihBdWRpb0Nv
bnRleHQ6OlJlcXVpcmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7Ci0gICAg
fQotICAgIAotICAgIGF1dG8gd2lsbEJlZ2luID0gbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxC
ZWdpblBsYXliYWNrKCk7Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5n
ICIsIHdpbGxCZWdpbik7Ci0gICAgCi0gICAgcmV0dXJuIHdpbGxCZWdpbjsKLX0KLQotYm9vbCBB
dWRpb0NvbnRleHQ6OndpbGxQYXVzZVBsYXliYWNrKCkKLXsKLSAgICBhdXRvKiBkb2N1bWVudCA9
IHRoaXMtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKLSAg
ICAgICAgaWYgKCFkb2N1bWVudC0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlv
bihBdWRpb0NvbnRleHQ6OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlv
bik7Ci0gICAgfQotCi0gICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkp
IHsKLSAgICAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7Ci0gICAgICAgIGlmIChw
YWdlICYmICFwYWdlLT5jYW5TdGFydE1lZGlhKCkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LT5h
ZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQXVkaW9Db250
ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxQYXVzZVBsYXliYWNr
KCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpzdGFydFJlbmRlcmluZygpCi17Ci0gICAgQUxX
QVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQgfHwgIXdp
bGxCZWdpblBsYXliYWNrKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VQZW5kaW5nQWN0
aXZpdHkoKTsKLQotICAgIGRlc3RpbmF0aW9uKCktPnN0YXJ0UmVuZGVyaW5nKCk7Ci0gICAgc2V0
U3RhdGUoU3RhdGU6OlJ1bm5pbmcpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6bWVkaWFDYW5T
dGFydChEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChkb2N1bWVudCwg
JmRvY3VtZW50ID09IHRoaXMtPmRvY3VtZW50KCkpOwotICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJp
Y3Rpb24oQXVkaW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJp
Y3Rpb24pOwotICAgIG1heVJlc3VtZVBsYXliYWNrKHRydWUpOwotfQotCi1NZWRpYVByb2R1Y2Vy
OjpNZWRpYVN0YXRlRmxhZ3MgQXVkaW9Db250ZXh0OjptZWRpYVN0YXRlKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1faXNTdG9wU2NoZWR1bGVkICYmIG1fZGVzdGluYXRpb25Ob2RlICYmIG1fZGVzdGlu
YXRpb25Ob2RlLT5pc1BsYXlpbmdBdWRpbygpKQotICAgICAgICByZXR1cm4gTWVkaWFQcm9kdWNl
cjo6SXNQbGF5aW5nQXVkaW87Ci0KLSAgICByZXR1cm4gTWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5
aW5nOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6cGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UoKQot
ewotICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZSAmJiBkb2N1bWVudCgpICYmIGRvY3VtZW50KCkt
PnBhZ2UoKSkKLSAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnNldE11dGVkKGRvY3VtZW50KCkt
PnBhZ2UoKS0+aXNBdWRpb011dGVkKCkpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6aXNQbGF5
aW5nQXVkaW9EaWRDaGFuZ2UoKQotewotICAgIC8vIE1ha2Ugc3VyZSB0byBjYWxsIERvY3VtZW50
Ojp1cGRhdGVJc1BsYXlpbmdNZWRpYSgpIG9uIHRoZSBtYWluIHRocmVhZCwgc2luY2UKLSAgICAv
LyB3ZSBjb3VsZCBiZSBvbiB0aGUgYXVkaW8gSS9PIHRocmVhZCBoZXJlIGFuZCB0aGUgY2FsbCBp
bnRvIFdlYkNvcmUgY291bGQgYmxvY2suCi0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5kb2N1
bWVudCgpKQotICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZG9jdW1lbnQoKS0+dXBkYXRlSXNQ
bGF5aW5nTWVkaWEoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmZpbmlzaGVk
UmVuZGVyaW5nKGJvb2wgZGlkUmVuZGVyaW5nKQotewotICAgIEFTU0VSVChpc09mZmxpbmVDb250
ZXh0KCkpOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFpc01haW5UaHJl
YWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjbGVhclBlbmRpbmdBY3Rpdml0eUlm
RXhpdEVhcmx5ID0gV1RGOjptYWtlU2NvcGVFeGl0KFt0aGlzXSB7Ci0gICAgICAgIGNsZWFyUGVu
ZGluZ0FjdGl2aXR5KCk7Ci0gICAgfSk7Ci0KLQotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
Uik7Ci0KLSAgICBpZiAoIWRpZFJlbmRlcmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQXVk
aW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyID0gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7Ci0gICAgc2V0
U3RhdGUoU3RhdGU6OkNsb3NlZCk7Ci0KLSAgICBBU1NFUlQocmVuZGVyZWRCdWZmZXIpOwotICAg
IGlmICghcmVuZGVyZWRCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEF2b2lkIGZp
cmluZyB0aGUgZXZlbnQgaWYgdGhlIGRvY3VtZW50IGhhcyBhbHJlYWR5IGdvbmUgYXdheS4KLSAg
ICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFyUGVu
ZGluZ0FjdGl2aXR5SWZFeGl0RWFybHkucmVsZWFzZSgpOwotICAgIG1fZXZlbnRRdWV1ZS0+ZW5x
dWV1ZUV2ZW50KE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKHJlbmRlcmVkQnVm
ZmVyKSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVu
dCkKLXsKLSAgICBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudCk7Ci0gICAgaWYgKGV2
ZW50LmV2ZW50SW50ZXJmYWNlKCkgPT0gT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50SW50ZXJm
YWNlVHlwZSkKLSAgICAgICAgY2xlYXJQZW5kaW5nQWN0aXZpdHkoKTsKLX0KLQotdm9pZCBBdWRp
b0NvbnRleHQ6OmluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkKLXsKLSAgICArK21fYWN0aXZl
U291cmNlQ291bnQ7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZWNyZW1lbnRBY3RpdmVTb3Vy
Y2VDb3VudCgpCi17Ci0gICAgLS1tX2FjdGl2ZVNvdXJjZUNvdW50OwotfQotCi12b2lkIEF1ZGlv
Q29udGV4dDo6c3VzcGVuZFJlbmRlcmluZyhET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9t
aXNlKQotewotICAgIGlmIChpc09mZmxpbmVDb250ZXh0KCkgfHwgbV9pc1N0b3BTY2hlZHVsZWQp
IHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZCkgewot
ICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6SW50ZXJy
dXB0ZWQgfHwgIW1fZGVzdGluYXRpb25Ob2RlKSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0KCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRSZWFjdGlvbihTdGF0ZTo6U3VzcGVu
ZGVkLCBXVEZNb3ZlKHByb21pc2UpKTsKLQotICAgIGlmICghd2lsbFBhdXNlUGxheWJhY2soKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLQotICAgIG1fZGVzdGlu
YXRpb25Ob2RlLT5zdXNwZW5kKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
IHsKLSAgICAgICAgc2V0U3RhdGUoU3RhdGU6OlN1c3BlbmRlZCk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgQXVkaW9Db250ZXh0OjpyZXN1bWVSZW5kZXJpbmcoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+
JiYgcHJvbWlzZSkKLXsKLSAgICBpZiAoaXNPZmZsaW5lQ29udGV4dCgpIHx8IG1faXNTdG9wU2No
ZWR1bGVkKSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpSdW5uaW5n
KSB7Ci0gICAgICAgIHByb21pc2UucmVzb2x2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCB8fCAhbV9kZXN0aW5hdGlvbk5vZGUp
IHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGFkZFJlYWN0aW9uKFN0YXRlOjpSdW5uaW5nLCBXVEZNb3ZlKHByb21pc2UpKTsKLQotICAg
IGlmICghd2lsbEJlZ2luUGxheWJhY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF6eUlu
aXRpYWxpemUoKTsKLQotICAgIG1fZGVzdGluYXRpb25Ob2RlLT5yZXN1bWUoW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6UnVu
bmluZyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpjbG9zZShET01Qcm9taXNl
RGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQotewotICAgIGlmIChpc09mZmxpbmVDb250ZXh0KCkg
fHwgbV9pc1N0b3BTY2hlZHVsZWQpIHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0
YXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc3RhdGUgPT0g
U3RhdGU6OkNsb3NlZCB8fCAhbV9kZXN0aW5hdGlvbk5vZGUpIHsKLSAgICAgICAgcHJvbWlzZS5y
ZXNvbHZlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRSZWFjdGlvbihTdGF0
ZTo6Q2xvc2VkLCBXVEZNb3ZlKHByb21pc2UpKTsKLQotICAgIGxhenlJbml0aWFsaXplKCk7Ci0K
LSAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+Y2xvc2UoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKV0gewotICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6Q2xvc2VkKTsKLSAgICAgICAg
dW5pbml0aWFsaXplKCk7Ci0gICAgfSk7Ci19Ci0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnN1c3Bl
bmRQbGF5YmFjaygpCi17Ci0gICAgaWYgKCFtX2Rlc3RpbmF0aW9uTm9kZSB8fCBtX3N0YXRlID09
IFN0YXRlOjpDbG9zZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXRlID09IFN0
YXRlOjpTdXNwZW5kZWQpIHsKLSAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5zdGF0ZSgpID09
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZCkKLSAgICAgICAgICAgIHNldFN0YXRl
KFN0YXRlOjpJbnRlcnJ1cHRlZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsYXp5
SW5pdGlhbGl6ZSgpOwotCi0gICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN1c3BlbmQoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBib29sIGludGVycnVwdGVk
ID0gbV9tZWRpYVNlc3Npb24tPnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVy
cnVwdGVkOwotICAgICAgICBzZXRTdGF0ZShpbnRlcnJ1cHRlZCA/IFN0YXRlOjpJbnRlcnJ1cHRl
ZCA6IFN0YXRlOjpTdXNwZW5kZWQpOwotICAgIH0pOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6
bWF5UmVzdW1lUGxheWJhY2soYm9vbCBzaG91bGRSZXN1bWUpCi17Ci0gICAgaWYgKCFtX2Rlc3Rp
bmF0aW9uTm9kZSB8fCBtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQgfHwgbV9zdGF0ZSA9PSBTdGF0
ZTo6UnVubmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzaG91bGRSZXN1bWUpIHsK
LSAgICAgICAgc2V0U3RhdGUoU3RhdGU6OlN1c3BlbmRlZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIXdpbGxCZWdpblBsYXliYWNrKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGxhenlJbml0aWFsaXplKCk7Ci0KLSAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+cmVzdW1lKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgc2V0U3RhdGUo
U3RhdGU6OlJ1bm5pbmcpOwotICAgIH0pOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6cG9zdFRh
c2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgdGFzaykKLXsKLSAgICBpZiAobV9pc1N0b3BTY2hl
ZHVsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soV1RGTW92ZSh0YXNrKSk7Ci19Ci0KLWNvbnN0IFNlY3VyaXR5T3JpZ2luKiBBdWRp
b0NvbnRleHQ6Om9yaWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA/IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSA6IG51
bGxwdHI7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAgICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdl
KTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmNsZWFyUGVuZGluZ0FjdGl2aXR5KCkKLXsKLSAg
ICBpZiAoIW1fcGVuZGluZ0FjdGl2aXR5KQotICAgICAgICByZXR1cm47Ci0gICAgbV9wZW5kaW5n
QWN0aXZpdHkgPSBudWxscHRyOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBzcGVjaWZpYyBk
ZXJlZigpIGFuZCByZWYoKSBjYWxsIGluIG1ha2VQZW5kaW5nQWN0aXZpdHkoKS4KLSAgICBkZXJl
ZigpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6bWFrZVBlbmRpbmdBY3Rpdml0eSgpCi17Ci0g
ICAgaWYgKG1fcGVuZGluZ0FjdGl2aXR5KQotICAgICAgICByZXR1cm47Ci0gICAgbV9wZW5kaW5n
QWN0aXZpdHkgPSBBY3RpdmVET01PYmplY3Q6Om1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwot
ICAgIHJlZigpOwotfQotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi1XVEZMb2dDaGFubmVs
JiBBdWRpb0NvbnRleHQ6OmxvZ0NoYW5uZWwoKSBjb25zdAotewotICAgIHJldHVybiBMb2dNZWRp
YTsKLX0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmgKaW5kZXggNTA1OTIxZmY1ZTM1ZDI0OTUzMzgwMjAzYTQ3OTVmNjRjYWMyZDVkMS4u
YmZhODA0MDA5NDlmYjNjYjUzOThlY2IxMjlmOTk1NTk4OGIwY2IzMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBAIC0yNSwyMjUgKzI1LDE4
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dFN0YXRlLmgiCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUu
aCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0
ZW5lci5oIgotI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNs
dWRlICJWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
Q29uc29sZVR5cGVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRmxvYXQzMkFycmF5Lmg+
Ci0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8
d3RmL0xvZ2dlckhlbHBlci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNo
Lmg+CisjaW5jbHVkZSAiQmFzZUF1ZGlvQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEFuYWx5c2VyTm9kZTsKLWNsYXNzIEF1ZGlvQnVmZmVyOwotY2xhc3MgQXVkaW9C
dWZmZXJDYWxsYmFjazsKLWNsYXNzIEF1ZGlvQnVmZmVyU291cmNlTm9kZTsKLWNsYXNzIEF1ZGlv
TGlzdGVuZXI7Ci1jbGFzcyBBdWRpb1N1bW1pbmdKdW5jdGlvbjsKLWNsYXNzIEJpcXVhZEZpbHRl
ck5vZGU7Ci1jbGFzcyBDaGFubmVsTWVyZ2VyTm9kZTsKLWNsYXNzIENoYW5uZWxTcGxpdHRlck5v
ZGU7Ci1jbGFzcyBDb252b2x2ZXJOb2RlOwotY2xhc3MgRGVsYXlOb2RlOwotY2xhc3MgRG9jdW1l
bnQ7Ci1jbGFzcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlOwotY2xhc3MgR2Fpbk5vZGU7Ci1jbGFz
cyBIVE1MTWVkaWFFbGVtZW50OwotY2xhc3MgTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOwot
Y2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOwotY2xhc3MgTWVkaWFTdHJlYW07Ci1j
bGFzcyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOwotY2xhc3MgTWVkaWFTdHJlYW1B
dWRpb1NvdXJjZU5vZGU7Ci1jbGFzcyBPc2NpbGxhdG9yTm9kZTsKLWNsYXNzIFBhbm5lck5vZGU7
Ci1jbGFzcyBQZXJpb2RpY1dhdmU7Ci1jbGFzcyBTY3JpcHRQcm9jZXNzb3JOb2RlOwotY2xhc3Mg
U2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBXYXZlU2hhcGVyTm9kZTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4gY2xhc3MgRE9NUHJvbWlzZURlZmVycmVkOwotCi1jbGFzcyBBdWRpb0NvbnRl
eHRCYXNlCi0gICAgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0Ci0gICAgLCBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8QXVkaW9Db250ZXh0PgotICAgICwgcHVibGljIEV2ZW50VGFyZ2V0V2l0
aElubGluZURhdGEKLSAgICAsIHB1YmxpYyBNZWRpYUNhblN0YXJ0TGlzdGVuZXIKLSAgICAsIHB1
YmxpYyBNZWRpYVByb2R1Y2VyCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgLCBwdWJs
aWMgTG9nZ2VySGVscGVyCi0jZW5kaWYKLXsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEF1
ZGlvQ29udGV4dEJhc2UpOwotcHVibGljOgotICAgIHZpcnR1YWwgfkF1ZGlvQ29udGV4dEJhc2Uo
KSA9IGRlZmF1bHQ7Ci0KLSAgICAvLyBSZWNvbmNpbGUgcmVmL2RlcmVmIHdoaWNoIGFyZSBkZWZp
bmVkIGJvdGggaW4gVGhyZWFkU2FmZVJlZkNvdW50ZWQgYW5kIEV2ZW50VGFyZ2V0LgotICAgIHVz
aW5nIFRocmVhZFNhZmVSZWZDb3VudGVkOjpyZWY7Ci0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ6OmRlcmVmOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgc2l6
ZV90IGN1cnJlbnRTYW1wbGVGcmFtZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGZsb2F0IHNh
bXBsZVJhdGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgY3VycmVudFRpbWUoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzR3JhcGhPd25lcigpIGNvbnN0ID0gMDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRBdWRpb1RocmVhZChUaHJlYWQmKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGlzQXVkaW9UaHJlYWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQXVk
aW9UaHJlYWRGaW5pc2hlZCgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBpc1BsYXlpbmdBdWRp
b0RpZENoYW5nZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbm9kZVdpbGxCZWdpblBsYXliYWNr
KCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFdURjo6RnVuY3Rpb248dm9pZCgp
PiYmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzU3RvcHBlZCgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4oKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvckRl
bGV0aW9uKEF1ZGlvTm9kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlTWFya2VkTm9k
ZXMoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUHJlUmVuZGVyVGFza3MoKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZERlZmVycmVkRmluaXNoRGVyZWYoQXVkaW9Ob2Rl
KikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZU1hcmtlZFN1bW1pbmdKdW5jdGlvbihB
dWRpb1N1bW1pbmdKdW5jdGlvbiopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya1N1bW1pbmdK
dW5jdGlvbkRpcnR5KEF1ZGlvU3VtbWluZ0p1bmN0aW9uKikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBtYXJrQXVkaW9Ob2RlT3V0cHV0RGlydHkoQXVkaW9Ob2RlT3V0cHV0KikgPSAwOwotCi0gICAg
ZW51bSBCZWhhdmlvclJlc3RyaWN0aW9uRmxhZ3MgewotICAgICAgICBOb1Jlc3RyaWN0aW9ucyA9
IDAsCi0gICAgICAgIFJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbiA9
IDEgPDwgMCwKLSAgICAgICAgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0
aW9uID0gMSA8PCAxLAotICAgIH07Ci0gICAgdHlwZWRlZiB1bnNpZ25lZCBCZWhhdmlvclJlc3Ry
aWN0aW9uczsKLSAgICB2aXJ0dWFsIEJlaGF2aW9yUmVzdHJpY3Rpb25zIGJlaGF2aW9yUmVzdHJp
Y3Rpb25zKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0
aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUJl
aGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMpID0gMDsKLQotI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAotICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogbmV4dEF1ZGlvTm9kZUxv
Z0lkZW50aWZpZXIoKSA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCB2b2lkKiBuZXh0QXVkaW9QYXJh
bWV0ZXJMb2dJZGVudGlmaWVyKCkgPSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgYWRk
QXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05vZGUqKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoZWRSZW5kZXJpbmcoYm9vbCBkaWRSZW5kZXJpbmcpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBpbmNyZW1lbnRDb25uZWN0aW9uQ291bnQoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBkZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBp
c09mZmxpbmVDb250ZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0F1ZGlvQ29u
dGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNXZWJLaXRBdWRpb0NvbnRleHQo
KSBjb25zdCA9IDA7Ci0KLSAgICAvLyBtdXN0UmVsZWFzZUxvY2sgaXMgc2V0IHRvIHRydWUgaWYg
d2UgYWNxdWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRob2QgY2FsbCBhbmQgY2FsbGVyIG11c3Qg
dW5sb2NrKCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjcXVpcmVkLgotICAgIHZpcnR1
YWwgdm9pZCBsb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jaykgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCB0cnlMb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1
bmxvY2soKSA9IDA7Ci0KLSAgICBjbGFzcyBBdXRvTG9ja2VyIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIGV4cGxpY2l0IEF1dG9Mb2NrZXIoQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCkKLSAgICAg
ICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC5sb2NrKG1fbXVzdFJlbGVhc2VMb2NrKTsKLSAgICAgICAgfQotCi0gICAgICAgIH5BdXRv
TG9ja2VyKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fbXVzdFJlbGVhc2VMb2NrKQot
ICAgICAgICAgICAgICAgIG1fY29udGV4dC51bmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgQXVkaW9Db250ZXh0QmFzZSYgbV9jb250ZXh0OwotICAgICAgICBib29s
IG1fbXVzdFJlbGVhc2VMb2NrOwotICAgIH07Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5h
bDsKLSAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQotICAgIHZv
aWQgZGVyZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgZXhwbGljaXQgQXVkaW9Db250ZXh0QmFzZShEb2N1bWVudCYpOwotfTsKLQotLy8gQXVk
aW9Db250ZXh0IGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB0aGUgd2ViIGF1ZGlvIEFQSSBhbmQgYWxs
IEF1ZGlvTm9kZXMgYXJlIGNyZWF0ZWQgZnJvbSBpdC4KLS8vIEZvciB0aHJlYWQgc2FmZXR5IGJl
dHdlZW4gdGhlIGF1ZGlvIHRocmVhZCBhbmQgdGhlIG1haW4gdGhyZWFkLCBpdCBoYXMgYSByZW5k
ZXJpbmcgZ3JhcGggbG9ja2luZyBtZWNoYW5pc20uIAotCi1jbGFzcyBBdWRpb0NvbnRleHQKLSAg
ICA6IHB1YmxpYyBBdWRpb0NvbnRleHRCYXNlCi0gICAgLCBwcml2YXRlIFBsYXRmb3JtTWVkaWFT
ZXNzaW9uQ2xpZW50Ci0gICAgLCBwcml2YXRlIFZpc2liaWxpdHlDaGFuZ2VDbGllbnQKLXsKK2Ns
YXNzIEF1ZGlvQ29udGV4dCA6IHB1YmxpYyBCYXNlQXVkaW9Db250ZXh0IHsKICAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKEF1ZGlvQ29udGV4dCk7CiBwdWJsaWM6CiAgICAgLy8gQ3JlYXRlIGFu
IEF1ZGlvQ29udGV4dCBmb3IgcmVuZGVyaW5nIHRvIHRoZSBhdWRpbyBoYXJkd2FyZS4KICAgICBz
dGF0aWMgRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQ29udGV4dD4+IGNyZWF0ZShEb2N1bWVudCYpOwog
Ci0gICAgdmlydHVhbCB+QXVkaW9Db250ZXh0KCk7Ci0KLSAgICBib29sIGlzSW5pdGlhbGl6ZWQo
KSBjb25zdCBmaW5hbDsKLSAgICAKLSAgICBib29sIGlzT2ZmbGluZUNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2lzT2ZmbGluZUNvbnRleHQ7IH0KLQotICAgIERvY3VtZW50SWRlbnRp
ZmllciBob3N0aW5nRG9jdW1lbnRJZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Ci0KLSAgICBBdWRp
b0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9k
ZS5nZXQoKTsgfQotICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50U2Ft
cGxlRnJhbWUoKSA6IDA7IH0KLSAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50VGlt
ZSgpIDogMC47IH0KLSAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpIDogMC5m
OyB9Ci0gICAgdW5zaWduZWQgbG9uZyBhY3RpdmVTb3VyY2VDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fYWN0aXZlU291cmNlQ291bnQpOyB9Ci0KLSAg
ICB2b2lkIGluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkgZmluYWw7Ci0gICAgdm9pZCBkZWNy
ZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpIGZpbmFsOwotICAgIAotICAgIEV4Y2VwdGlvbk9yPFJl
ZjxBdWRpb0J1ZmZlcj4+IGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBz
aXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUpOwotICAgIEV4Y2VwdGlvbk9y
PFJlZjxBdWRpb0J1ZmZlcj4+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciYsIGJvb2wgbWl4VG9N
b25vKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBhdWRpbyBmaWxlIGRhdGEgZGVjb2RpbmcuCi0g
ICAgdm9pZCBkZWNvZGVBdWRpb0RhdGEoUmVmPEFycmF5QnVmZmVyPiYmLCBSZWZQdHI8QXVkaW9C
dWZmZXJDYWxsYmFjaz4mJiwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYpOwotCi0gICAg
QXVkaW9MaXN0ZW5lciogbGlzdGVuZXIoKSB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9Ci0K
LSAgICB2b2lkIHN1c3BlbmRSZW5kZXJpbmcoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpOwot
ICAgIHZvaWQgcmVzdW1lUmVuZGVyaW5nKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmKTsKICAg
ICB2b2lkIGNsb3NlKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmKTsKIAotICAgIHVzaW5nIFN0
YXRlID0gQXVkaW9Db250ZXh0U3RhdGU7Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdDsKLSAgICBi
b29sIGlzQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkOyB9
Ci0KLSAgICBib29sIHdvdWxkVGFpbnRPcmlnaW4oY29uc3QgVVJMJikgY29uc3Q7Ci0KLSAgICAv
LyBUaGUgQXVkaW9Ob2RlIGNyZWF0ZSBtZXRob2RzIGFyZSBjYWxsZWQgb24gdGhlIG1haW4gdGhy
ZWFkIChmcm9tIEphdmFTY3JpcHQpLgotICAgIEV4Y2VwdGlvbk9yPFJlZjxBdWRpb0J1ZmZlclNv
dXJjZU5vZGU+PiBjcmVhdGVCdWZmZXJTb3VyY2UoKTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAg
RXhjZXB0aW9uT3I8UmVmPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4+IGNyZWF0ZU1lZGlh
RWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50Jik7CiAjZW5kaWYKQEAgLTI1MSwyODAgKzQ0
LDEwIEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWY8TWVkaWFTdHJlYW1BdWRpb1NvdXJj
ZU5vZGU+PiBjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWRpYVN0cmVhbSYpOwogICAgIEV4Y2Vw
dGlvbk9yPFJlZjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPj4gY3JlYXRlTWVkaWFT
dHJlYW1EZXN0aW5hdGlvbigpOwogI2VuZGlmCi0gICAgRXhjZXB0aW9uT3I8UmVmPEdhaW5Ob2Rl
Pj4gY3JlYXRlR2FpbigpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxCaXF1YWRGaWx0ZXJOb2RlPj4g
Y3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPFdhdmVTaGFwZXJOb2Rl
Pj4gY3JlYXRlV2F2ZVNoYXBlcigpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxEZWxheU5vZGU+PiBj
cmVhdGVEZWxheShkb3VibGUgbWF4RGVsYXlUaW1lKTsKLSAgICBFeGNlcHRpb25PcjxSZWY8UGFu
bmVyTm9kZT4+IGNyZWF0ZVBhbm5lcigpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxDb252b2x2ZXJO
b2RlPj4gY3JlYXRlQ29udm9sdmVyKCk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPER5bmFtaWNzQ29t
cHJlc3Nvck5vZGU+PiBjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKTsKLSAgICBFeGNlcHRpb25P
cjxSZWY8QW5hbHlzZXJOb2RlPj4gY3JlYXRlQW5hbHlzZXIoKTsKLSAgICBFeGNlcHRpb25PcjxS
ZWY8U2NyaXB0UHJvY2Vzc29yTm9kZT4+IGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVm
ZmVyU2l6ZSwgc2l6ZV90IG51bWJlck9mSW5wdXRDaGFubmVscywgc2l6ZV90IG51bWJlck9mT3V0
cHV0Q2hhbm5lbHMpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxDaGFubmVsU3BsaXR0ZXJOb2RlPj4g
Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKHNpemVfdCBudW1iZXJPZk91dHB1dHMpOwotICAgIEV4Y2Vw
dGlvbk9yPFJlZjxDaGFubmVsTWVyZ2VyTm9kZT4+IGNyZWF0ZUNoYW5uZWxNZXJnZXIoc2l6ZV90
IG51bWJlck9mSW5wdXRzKTsKLSAgICBFeGNlcHRpb25PcjxSZWY8T3NjaWxsYXRvck5vZGU+PiBj
cmVhdGVPc2NpbGxhdG9yKCk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPFBlcmlvZGljV2F2ZT4+IGNy
ZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkmIHJlYWwsIEZsb2F0MzJBcnJheSYgaW1hZ2lu
YXJ5KTsKLQotICAgIC8vIFdoZW4gYSBzb3VyY2Ugbm9kZSBoYXMgbm8gbW9yZSBwcm9jZXNzaW5n
IHRvIGRvIChoYXMgZmluaXNoZWQgcGxheWluZyksIHRoZW4gaXQgdGVsbHMgdGhlIGNvbnRleHQg
dG8gZGVyZWZlcmVuY2UgaXQuCi0gICAgdm9pZCBub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5n
KEF1ZGlvTm9kZSopIGZpbmFsOwotCi0gICAgLy8gQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNo
IHJlbmRlciBxdWFudHVtLgotICAgIHZvaWQgaGFuZGxlUHJlUmVuZGVyVGFza3MoKSBmaW5hbDsK
LQotICAgIC8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCi0gICAg
dm9pZCBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKSBmaW5hbDsKLQotICAgIC8vIENhbGxlZCBwZXJp
b2RpY2FsbHkgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIHRvIGRlcmVmZXJlbmNl
IGZpbmlzaGVkIHNvdXJjZSBub2Rlcy4KLSAgICB2b2lkIGRlcmVmRmluaXNoZWRTb3VyY2VOb2Rl
cygpOwotCi0gICAgLy8gV2Ugc2NoZWR1bGUgZGVsZXRpb24gb2YgYWxsIG1hcmtlZCBub2RlcyBh
dCB0aGUgZW5kIG9mIGVhY2ggcmVhbHRpbWUgcmVuZGVyIHF1YW50dW0uCi0gICAgdm9pZCBtYXJr
Rm9yRGVsZXRpb24oQXVkaW9Ob2RlJikgZmluYWw7Ci0gICAgdm9pZCBkZWxldGVNYXJrZWROb2Rl
cygpIGZpbmFsOwotCi0gICAgLy8gQXVkaW9Db250ZXh0IGNhbiBwdWxsIG5vZGUocykgYXQgdGhl
IGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVj
dGVkIHRvIGFueSBkb3duc3RyZWFtIG5vZGVzLgotICAgIC8vIFRoZXNlIHR3byBtZXRob2RzIGFy
ZSBjYWxsZWQgYnkgdGhlIG5vZGVzIHdobyB3YW50IHRvIGFkZC9yZW1vdmUgdGhlbXNlbHZlcyBp
bnRvL2Zyb20gdGhlIGF1dG9tYXRpYyBwdWxsIGxpc3RzLgotICAgIHZvaWQgYWRkQXV0b21hdGlj
UHVsbE5vZGUoQXVkaW9Ob2RlJikgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVBdXRvbWF0aWNQdWxs
Tm9kZShBdWRpb05vZGUmKSBmaW5hbDsKLQotICAgIC8vIENhbGxlZCByaWdodCBiZWZvcmUgaGFu
ZGxlUG9zdFJlbmRlclRhc2tzKCkgdG8gaGFuZGxlIG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgcHVs
bGVkIGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nLgotICAgIHZv
aWQgcHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBmaW5h
bDsKLQotICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgbWFk
ZS4KLSAgICB2b2lkIGluY3JlbWVudENvbm5lY3Rpb25Db3VudCgpIGZpbmFsCi0gICAgewotICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgICAgICBtX2Nvbm5lY3Rpb25Db3VudCsr
OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNvbm5lY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29ubmVjdGlvbkNvdW50OyB9Ci0KLSAgICAvLwotICAgIC8vIFRocmVhZCBTYWZldHkgYW5k
IEdyYXBoIExvY2tpbmc6Ci0gICAgLy8KLSAgICAKLSAgICB2b2lkIHNldEF1ZGlvVGhyZWFkKFRo
cmVhZCYgdGhyZWFkKSBmaW5hbCB7IG1fYXVkaW9UaHJlYWQgPSAmdGhyZWFkOyB9IC8vIEZJWE1F
OiBjaGVjayBlaXRoZXIgbm90IGluaXRpYWxpemVkIG9yIHRoZSBzYW1lCi0gICAgVGhyZWFkKiBh
dWRpb1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9UaHJlYWQ7IH0KLSAgICBib29sIGlz
QXVkaW9UaHJlYWQoKSBjb25zdCBmaW5hbDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5IGFm
dGVyIHRoZSBhdWRpbyB0aHJlYWQgaGFzIGJlZW4gc3RhcnRlZCBhbmQgdGhlbiBzaHV0ZG93bi4K
LSAgICBib29sIGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpIGZpbmFsIHsgcmV0dXJuIG1faXNBdWRp
b1RocmVhZEZpbmlzaGVkOyB9Ci0gICAgCi0gICAgLy8gbXVzdFJlbGVhc2VMb2NrIGlzIHNldCB0
byB0cnVlIGlmIHdlIGFjcXVpcmVkIHRoZSBsb2NrIGluIHRoaXMgbWV0aG9kIGNhbGwgYW5kIGNh
bGxlciBtdXN0IHVubG9jaygpLCBmYWxzZSBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3F1aXJlZC4K
LSAgICB2b2lkIGxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKSBmaW5hbDsKLQotICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB3ZSBvd24gdGhlIGxvY2suCi0gICAgLy8gbXVzdFJlbGVhc2VMb2NrIGlz
IHNldCB0byB0cnVlIGlmIHdlIGFjcXVpcmVkIHRoZSBsb2NrIGluIHRoaXMgbWV0aG9kIGNhbGwg
YW5kIGNhbGxlciBtdXN0IHVubG9jaygpLCBmYWxzZSBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3F1
aXJlZC4KLSAgICBib29sIHRyeUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKSBmaW5hbDsKLQot
ICAgIHZvaWQgdW5sb2NrKCkgZmluYWw7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB0
aHJlYWQgb3ducyB0aGUgY29udGV4dCdzIGxvY2suCi0gICAgYm9vbCBpc0dyYXBoT3duZXIoKSBj
b25zdCBmaW5hbDsKLQotICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYW5u
ZWxzIHdlIGNhbiBzdXBwb3J0LgotICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhOdW1iZXJPZkNoYW5u
ZWxzKCkgeyByZXR1cm4gTWF4TnVtYmVyT2ZDaGFubmVsczsgfQotICAgIAotICAgIC8vIEluIEF1
ZGlvTm9kZTo6ZGVyZWYoKSBhIHRyeUxvY2soKSBpcyB1c2VkIGZvciBjYWxsaW5nIGZpbmlzaERl
cmVmKCksIGJ1dCBpZiBpdCBmYWlscyBrZWVwIHRyYWNrIGhlcmUuCi0gICAgdm9pZCBhZGREZWZl
cnJlZEZpbmlzaERlcmVmKEF1ZGlvTm9kZSopIGZpbmFsOwotCi0gICAgLy8gSW4gdGhlIGF1ZGlv
IHRocmVhZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgY3ljbGUsIHdlJ2xsIGNhbGwgaGFu
ZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKS4KLSAgICB2b2lkIGhhbmRsZURlZmVycmVkRmluaXNo
RGVyZWZzKCk7Ci0KLSAgICAvLyBPbmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGdyYXBoIGxvY2sgaXMg
aGVsZC4KLSAgICB2b2lkIG1hcmtTdW1taW5nSnVuY3Rpb25EaXJ0eShBdWRpb1N1bW1pbmdKdW5j
dGlvbiopIGZpbmFsOwotICAgIHZvaWQgbWFya0F1ZGlvTm9kZU91dHB1dERpcnR5KEF1ZGlvTm9k
ZU91dHB1dCopIGZpbmFsOwotCi0gICAgLy8gTXVzdCBiZSBjYWxsZWQgb24gbWFpbiB0aHJlYWQu
Ci0gICAgdm9pZCByZW1vdmVNYXJrZWRTdW1taW5nSnVuY3Rpb24oQXVkaW9TdW1taW5nSnVuY3Rp
b24qKSBmaW5hbDsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgc3RhcnRS
ZW5kZXJpbmcoKTsKLSAgICB2b2lkIGZpbmlzaGVkUmVuZGVyaW5nKGJvb2wgZGlkUmVuZGVyaW5n
KSBmaW5hbDsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBzX2hhcmR3YXJlQ29udGV4dENvdW50Owot
Ci0gICAgLy8gUmVzdHJpY3Rpb25zIHRvIGNoYW5nZSBkZWZhdWx0IGJlaGF2aW9ycy4KLSAgICBC
ZWhhdmlvclJlc3RyaWN0aW9ucyBiZWhhdmlvclJlc3RyaWN0aW9ucygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fcmVzdHJpY3Rpb25zOyB9Ci0gICAgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9u
KEJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKSBmaW5hbCB7IG1fcmVzdHJpY3Rpb25z
IHw9IHJlc3RyaWN0aW9uOyB9Ci0gICAgdm9pZCByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJl
aGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKSBmaW5hbCB7IG1fcmVzdHJpY3Rpb25zICY9
IH5yZXN0cmljdGlvbjsgfQotCi0gICAgdm9pZCBpc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpIGZp
bmFsOwotCi0gICAgdm9pZCBub2RlV2lsbEJlZ2luUGxheWJhY2soKSBmaW5hbDsKLQotI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KLSAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlm
aWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9Ci0gICAgV1RGTG9n
Q2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IHZvaWQqIG5leHRB
dWRpb05vZGVMb2dJZGVudGlmaWVyKCkgZmluYWwgeyByZXR1cm4gY2hpbGRMb2dJZGVudGlmaWVy
KG1fbG9nSWRlbnRpZmllciwgKyttX25leHRBdWRpb05vZGVJZGVudGlmaWVyKTsgfQotICAgIGNv
bnN0IHZvaWQqIG5leHRBdWRpb1BhcmFtZXRlckxvZ0lkZW50aWZpZXIoKSBmaW5hbCB7IHJldHVy
biBjaGlsZExvZ0lkZW50aWZpZXIobV9sb2dJZGVudGlmaWVyLCArK21fbmV4dEF1ZGlvUGFyYW1l
dGVySWRlbnRpZmllcik7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBwb3N0VGFzayhXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJikgZmluYWw7Ci0gICAgYm9vbCBpc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2lzU3RvcFNjaGVkdWxlZDsgfQotICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4oKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBmaW5hbDsKIAotcHJv
dGVjdGVkOgorcHJpdmF0ZToKICAgICBleHBsaWNpdCBBdWRpb0NvbnRleHQoRG9jdW1lbnQmKTsK
ICAgICBBdWRpb0NvbnRleHQoRG9jdW1lbnQmLCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KTsK
LSAgICAKLSAgICBzdGF0aWMgYm9vbCBpc1NhbXBsZVJhdGVSYW5nZUdvb2QoZmxvYXQgc2FtcGxl
UmF0ZSk7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdBY3Rpdml0eSgpOwotICAgIHZvaWQgbWFrZVBl
bmRpbmdBY3Rpdml0eSgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY29uc3RydWN0Q29tbW9uKCk7
Ci0KLSAgICB2b2lkIGxhenlJbml0aWFsaXplKCk7Ci0gICAgdm9pZCB1bmluaXRpYWxpemUoKTsK
LQotICAgIGJvb2wgd2lsbEJlZ2luUGxheWJhY2soKTsKLSAgICBib29sIHdpbGxQYXVzZVBsYXli
YWNrKCk7Ci0KLSAgICBib29sIHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkgY29u
c3QgeyByZXR1cm4gIWlzT2ZmbGluZUNvbnRleHQoKSAmJiBtX3Jlc3RyaWN0aW9ucyAmIFJlcXVp
cmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsgfQotICAgIGJvb2wgcGFnZUNv
bnNlbnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSBjb25zdCB7IHJldHVybiAhaXNPZmZsaW5lQ29u
dGV4dCgpICYmIG1fcmVzdHJpY3Rpb25zICYgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFy
dFJlc3RyaWN0aW9uOyB9Ci0KLSAgICB2b2lkIHNldFN0YXRlKFN0YXRlKTsKLQotICAgIHZvaWQg
Y2xlYXIoKTsKLQotICAgIHZvaWQgc2NoZWR1bGVOb2RlRGVsZXRpb24oKTsKLQotICAgIHZvaWQg
bWVkaWFDYW5TdGFydChEb2N1bWVudCYpIG92ZXJyaWRlOwotCi0gICAgLy8gRXZlbnRUYXJnZXQK
LSAgICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBmaW5hbDsKLQotICAgIC8vIE1lZGlhUHJv
ZHVjZXIKLSAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbWVkaWFTdGF0ZSgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UoKSBvdmVycmlk
ZTsKLQotICAgIC8vIFRoZSBjb250ZXh0IGl0c2VsZiBrZWVwcyBhIHJlZmVyZW5jZSB0byBhbGwg
c291cmNlIG5vZGVzLiAgVGhlIHNvdXJjZSBub2RlcywgdGhlbiByZWZlcmVuY2UgYWxsIG5vZGVz
IHRoZXkncmUgY29ubmVjdGVkIHRvLgotICAgIC8vIEluIHR1cm4sIHRoZXNlIG5vZGVzIHJlZmVy
ZW5jZSBhbGwgbm9kZXMgdGhleSdyZSBjb25uZWN0ZWQgdG8uICBBbGwgbm9kZXMgYXJlIHVsdGlt
YXRlbHkgY29ubmVjdGVkIHRvIHRoZSBBdWRpb0Rlc3RpbmF0aW9uTm9kZS4KLSAgICAvLyBXaGVu
IHRoZSBjb250ZXh0IGRlcmVmZXJlbmNlcyBhIHNvdXJjZSBub2RlLCBpdCB3aWxsIGJlIGRlYWN0
aXZhdGVkIGZyb20gdGhlIHJlbmRlcmluZyBncmFwaCBhbG9uZyB3aXRoIGFsbCBvdGhlciBub2Rl
cyBpdCBpcwotICAgIC8vIHVuaXF1ZWx5IGNvbm5lY3RlZCB0by4gIFNlZSB0aGUgQXVkaW9Ob2Rl
OjpyZWYoKSBhbmQgQXVkaW9Ob2RlOjpkZXJlZigpIG1ldGhvZHMgZm9yIG1vcmUgZGV0YWlscy4K
LSAgICB2b2lkIHJlZk5vZGUoQXVkaW9Ob2RlJik7Ci0gICAgdm9pZCBkZXJlZk5vZGUoQXVkaW9O
b2RlJik7Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QgQVBJLgotICAgIHZvaWQgc3VzcGVuZChS
ZWFzb25Gb3JTdXNwZW5zaW9uKSBmaW5hbDsKLSAgICB2b2lkIHJlc3VtZSgpIGZpbmFsOwotICAg
IHZvaWQgc3RvcCgpIG92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5h
bWUoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIC8vIFdoZW4gdGhlIGNvbnRleHQgZ29lcyBhd2F5
LCB0aGVyZSBtaWdodCBzdGlsbCBiZSBzb21lIHNvdXJjZXMgd2hpY2ggaGF2ZW4ndCBmaW5pc2hl
ZCBwbGF5aW5nLgotICAgIC8vIE1ha2Ugc3VyZSB0byBkZXJlZmVyZW5jZSB0aGVtIGhlcmUuCi0g
ICAgdm9pZCBkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpOwotCi0gICAgLy8gUGxhdGZvcm1N
ZWRpYVNlc3Npb25DbGllbnQKLSAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIG1l
ZGlhVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpN
ZWRpYVR5cGU6OldlYkF1ZGlvOyB9Ci0gICAgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlw
ZSBwcmVzZW50YXRpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1NZWRp
YVNlc3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW87IH0KLSAgICB2b2lkIG1heVJlc3VtZVBsYXli
YWNrKGJvb2wgc2hvdWxkUmVzdW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHN1c3BlbmRQbGF5YmFj
aygpIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kcygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVt
b3RlQ29udHJvbENvbW1hbmQoUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21t
YW5kVHlwZSwgY29uc3QgUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbW1hbmRBcmd1bWVu
dCopIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgc3VwcG9ydHNTZWVraW5nKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZE92ZXJyaWRlQmFja2dyb3VuZFBs
YXliYWNrUmVzdHJpY3Rpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBjYW5Qcm9kdWNlQXVk
aW8oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBpc1N1c3BlbmRlZCgp
IGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCB2aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCkgZmluYWw7
Ci0KLSAgICBib29sIGlzQXVkaW9Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIGJvb2wgaXNXZWJLaXRBdWRpb0NvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQotCi0gICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpOwot
ICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7Ci0KLSAgICB2b2lkIGFkZFJl
YWN0aW9uKFN0YXRlLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJik7Ci0gICAgdm9pZCB1cGRh
dGVBdXRvbWF0aWNQdWxsTm9kZXMoKTsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAg
IGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJBdWRpb0Nv
bnRleHQiOyB9Ci0KLSAgICBSZWY8TG9nZ2VyPiBtX2xvZ2dlcjsKLSAgICBjb25zdCB2b2lkKiBt
X2xvZ0lkZW50aWZpZXI7Ci0gICAgdWludDY0X3QgbV9uZXh0QXVkaW9Ob2RlSWRlbnRpZmllciB7
IDAgfTsKLSAgICB1aW50NjRfdCBtX25leHRBdWRpb1BhcmFtZXRlcklkZW50aWZpZXIgeyAwIH07
Ci0jZW5kaWYKLQotICAgIC8vIE9ubHkgYWNjZXNzZWQgaW4gdGhlIGF1ZGlvIHRocmVhZC4KLSAg
ICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9maW5pc2hlZE5vZGVzOwotCi0gICAgLy8gV2UgZG9uJ3Qg
dXNlIFJlZlB0cjxBdWRpb05vZGU+IGhlcmUgYmVjYXVzZSBBdWRpb05vZGUgaGFzIGEgbW9yZSBj
b21wbGV4IHJlZigpIC8gZGVyZWYoKSBpbXBsZW1lbnRhdGlvbgotICAgIC8vIHdpdGggYW4gb3B0
aW9uYWwgYXJndW1lbnQgZm9yIHJlZlR5cGUuICBXZSBuZWVkIHRvIHVzZSB0aGUgc3BlY2lhbCBy
ZWZUeXBlOiBSZWZUeXBlQ29ubmVjdGlvbgotICAgIC8vIEVpdGhlciBhY2Nlc3NlZCB3aGVuIHRo
ZSBncmFwaCBsb2NrIGlzIGhlbGQsIG9yIG9uIHRoZSBtYWluIHRocmVhZCB3aGVuIHRoZSBhdWRp
byB0aHJlYWQgaGFzIGZpbmlzaGVkLgotICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX3JlZmVyZW5j
ZWROb2RlczsKLQotICAgIC8vIEFjY3VtdWxhdGUgbm9kZXMgd2hpY2ggbmVlZCB0byBiZSBkZWxl
dGVkIGhlcmUuCi0gICAgLy8gVGhpcyBpcyBjb3BpZWQgdG8gbV9ub2Rlc1RvRGVsZXRlIGF0IHRo
ZSBlbmQgb2YgYSByZW5kZXIgY3ljbGUgaW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzKCksIHdoZXJl
IHdlJ3JlIGFzc3VyZWQgb2YgYSBzdGFibGUgZ3JhcGgKLSAgICAvLyBzdGF0ZSB3aGljaCB3aWxs
IGhhdmUgbm8gcmVmZXJlbmNlcyB0byBhbnkgb2YgdGhlIG5vZGVzIGluIG1fbm9kZXNUb0RlbGV0
ZSBvbmNlIHRoZSBjb250ZXh0IGxvY2sgaXMgcmVsZWFzZWQKLSAgICAvLyAod2hlbiBoYW5kbGVQ
b3N0UmVuZGVyVGFza3MoKSBoYXMgY29tcGxldGVkKS4KLSAgICBWZWN0b3I8QXVkaW9Ob2RlKj4g
bV9ub2Rlc01hcmtlZEZvckRlbGV0aW9uOwotCi0gICAgLy8gVGhleSB3aWxsIGJlIHNjaGVkdWxl
ZCBmb3IgZGVsZXRpb24gKG9uIHRoZSBtYWluIHRocmVhZCkgYXQgdGhlIGVuZCBvZiBhIHJlbmRl
ciBjeWNsZSAoaW4gcmVhbHRpbWUgdGhyZWFkKS4KLSAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9u
b2Rlc1RvRGVsZXRlOwotCi0gICAgYm9vbCBtX2lzRGVsZXRpb25TY2hlZHVsZWQgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9pc1N0b3BTY2hlZHVsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0lu
aXRpYWxpemVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nIHsgZmFs
c2UgfTsKLSAgICBib29sIG1faXNPZmZsaW5lQ29udGV4dCB7IGZhbHNlIH07Ci0KLSAgICAvLyBP
bmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGdyYXBoIGxvY2sgaXMgaGVsZC4KLSAgICBIYXNoU2V0PEF1
ZGlvU3VtbWluZ0p1bmN0aW9uKj4gbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnM7Ci0gICAgSGFzaFNl
dDxBdWRpb05vZGVPdXRwdXQqPiBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0czsKLQotICAgIC8vIEZv
ciB0aGUgc2FrZSBvZiB0aHJlYWQgc2FmZXR5LCB3ZSBtYWludGFpbiBhIHNlcGVyYXRlIFZlY3Rv
ciBvZiBhdXRvbWF0aWMgcHVsbCBub2RlcyBmb3IgcmVuZGVyaW5nIGluIG1fcmVuZGVyaW5nQXV0
b21hdGljUHVsbE5vZGVzLgotICAgIC8vIEl0IHdpbGwgYmUgY29waWVkIGZyb20gbV9hdXRvbWF0
aWNQdWxsTm9kZXMgYnkgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCkgYXQgdGhlIHZlcnkgc3Rh
cnQgb3IgZW5kIG9mIHRoZSByZW5kZXJpbmcgcXVhbnR1bS4KLSAgICBIYXNoU2V0PEF1ZGlvTm9k
ZSo+IG1fYXV0b21hdGljUHVsbE5vZGVzOwotICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX3JlbmRl
cmluZ0F1dG9tYXRpY1B1bGxOb2RlczsKLSAgICAvLyBPbmx5IGFjY2Vzc2VkIGluIHRoZSBhdWRp
byB0aHJlYWQuCi0gICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxp
c3Q7Ci0gICAgVmVjdG9yPFZlY3RvcjxET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4+PiBtX3N0YXRl
UmVhY3Rpb25zOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVkaWFTZXNzaW9uPiBt
X21lZGlhU2Vzc2lvbjsKLSAgICBVbmlxdWVSZWY8TWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVl
PiBtX2V2ZW50UXVldWU7Ci0KLSAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyVGFyZ2V0
OwotICAgIFJlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gbV9kZXN0aW5hdGlvbk5vZGU7Ci0g
ICAgUmVmUHRyPEF1ZGlvTGlzdGVuZXI+IG1fbGlzdGVuZXI7Ci0KLSAgICB1bnNpZ25lZCBtX2Nv
bm5lY3Rpb25Db3VudCB7IDAgfTsKLQotICAgIC8vIEdyYXBoIGxvY2tpbmcuCi0gICAgTG9jayBt
X2NvbnRleHRHcmFwaE11dGV4OwotICAgIC8vIEZJWE1FOiBVc2luZyB2b2xhdGlsZSBzZWVtcyBp
bmNvcnJlY3QuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4MDMzMgotICAgIFRocmVhZCogdm9sYXRpbGUgbV9hdWRpb1RocmVhZCB7IG51bGxwdHIgfTsK
LSAgICBUaHJlYWQqIHZvbGF0aWxlIG1fZ3JhcGhPd25lclRocmVhZCB7IG51bGxwdHIgfTsgLy8g
aWYgdGhlIGxvY2sgaXMgaGVsZCB0aGVuIHRoaXMgaXMgdGhlIHRocmVhZCB3aGljaCBvd25zIGl0
LCBvdGhlcndpc2UgPT0gbnVsbHB0ci4KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxBc3luY0F1ZGlv
RGVjb2Rlcj4gbV9hdWRpb0RlY29kZXI7Ci0KLSAgICAvLyBUaGlzIGlzIGNvbnNpZGVyaW5nIDMy
IGlzIGxhcmdlIGVub3VnaCBmb3IgbXVsdGlwbGUgY2hhbm5lbHMgYXVkaW8uIAotICAgIC8vIEl0
IGlzIHNvbWV3aGF0IGFyYml0cmFyeSBhbmQgY291bGQgYmUgaW5jcmVhc2VkIGlmIG5lY2Vzc2Fy
eS4KLSAgICBlbnVtIHsgTWF4TnVtYmVyT2ZDaGFubmVscyA9IDMyIH07Ci0KLSAgICAvLyBOdW1i
ZXIgb2YgQXVkaW9CdWZmZXJTb3VyY2VOb2RlcyB0aGF0IGFyZSBhY3RpdmUgKHBsYXlpbmcpLgot
ICAgIHN0ZDo6YXRvbWljPGludD4gbV9hY3RpdmVTb3VyY2VDb3VudCB7IDAgfTsKLQotICAgIEJl
aGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zIHsgTm9SZXN0cmljdGlvbnMgfTsKLQot
ICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07Ci0gICAgUmVmUHRyPFBlbmRp
bmdBY3Rpdml0eTxBdWRpb0NvbnRleHQ+PiBtX3BlbmRpbmdBY3Rpdml0eTsKIH07CiAKLWlubGlu
ZSBBdWRpb0NvbnRleHQ6OlN0YXRlIEF1ZGlvQ29udGV4dDo6c3RhdGUoKSBjb25zdAotewotICAg
IHJldHVybiBtX3N0YXRlOwotfQotCiB9IC8vIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpBdWRpb0NvbnRleHQpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQpIHsgcmV0dXJuIGNvbnRl
eHQuaXNBdWRpb0NvbnRleHQoKTsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCmluZGV4
IDllMzUyNDYwOTE3ZTUyYzM0MjAzZGFlZGIwMGI5MzI4NDA2OWU1NWYuLjY5OTNhMGFiN2E5YjY0
NmI5YzZlOTE0ZWJmZTQ0MTc1NTUwMTFhODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKQEAgLTI4LDY1ICsyOCwyMiBAQAogICAgIENv
bmRpdGlvbmFsPVdFQl9BVURJTywKICAgICBFbmFibGVkQnlTZXR0aW5nPVdlYkF1ZGlvJk1vZGVy
blVucHJlZml4ZWRXZWJBdWRpbywKICAgICBFeHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVCwKLV0g
aW50ZXJmYWNlIEF1ZGlvQ29udGV4dCA6IEV2ZW50VGFyZ2V0IHsKK10gaW50ZXJmYWNlIEF1ZGlv
Q29udGV4dCA6IEJhc2VBdWRpb0NvbnRleHQgewogICAgIFtDYWxsV2l0aD1Eb2N1bWVudCwgTWF5
VGhyb3dFeGNlcHRpb25dIGNvbnN0cnVjdG9yKCk7CiAKLSAgICAvLyBBbGwgcmVuZGVyZWQgYXVk
aW8gdWx0aW1hdGVseSBjb25uZWN0cyB0byBkZXN0aW5hdGlvbiwgd2hpY2ggcmVwcmVzZW50cyB0
aGUgYXVkaW8gaGFyZHdhcmUuCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvRGVzdGluYXRp
b25Ob2RlIGRlc3RpbmF0aW9uOwotCi0gICAgLy8gQWxsIHNjaGVkdWxlZCB0aW1lcyBhcmUgcmVs
YXRpdmUgdG8gdGhpcyB0aW1lIGluIHNlY29uZHMuCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
cmVzdHJpY3RlZCBkb3VibGUgY3VycmVudFRpbWU7Ci0KLSAgICAvLyBBbGwgQXVkaW9Ob2RlcyBp
biB0aGUgY29udGV4dCBydW4gYXQgdGhpcyBzYW1wbGUtcmF0ZSAoc2FtcGxlLWZyYW1lcyBwZXIg
c2Vjb25kKS4KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGZsb2F0IHNhbXBs
ZVJhdGU7Ci0KLSAgICAvLyBBbGwgcGFubmluZyBpcyByZWxhdGl2ZSB0byB0aGlzIGxpc3RlbmVy
LgotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0xpc3RlbmVyIGxpc3RlbmVyOworICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydC4KKyAgICAvLyByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIGJh
c2VMYXRlbmN5OworICAgIC8vIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgb3V0cHV0TGF0ZW5j
eTsKKyAgICAvLyBBdWRpb1RpbWVzdGFtcCBnZXRPdXRwdXRUaW1lc3RhbXAoKTsKIAogICAgIFtJ
bXBsZW1lbnRlZEFzPXN1c3BlbmRSZW5kZXJpbmddIFByb21pc2U8dm9pZD4gc3VzcGVuZCgpOwog
ICAgIFtJbXBsZW1lbnRlZEFzPXJlc3VtZVJlbmRlcmluZ10gUHJvbWlzZTx2b2lkPiByZXN1bWUo
KTsKICAgICBQcm9taXNlPHZvaWQ+IGNsb3NlKCk7CiAKLSAgICByZWFkb25seSBhdHRyaWJ1dGUg
QXVkaW9Db250ZXh0U3RhdGUgc3RhdGU7Ci0gICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbnN0
YXRlY2hhbmdlOwotCi0gICAgLy8gTnVtYmVyIG9mIEF1ZGlvQnVmZmVyU291cmNlTm9kZXMgdGhh
dCBhcmUgY3VycmVudGx5IHBsYXlpbmcuCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgYWN0aXZlU291cmNlQ291bnQ7Ci0gICAgCi0gICAgW01heVRocm93RXhjZXB0aW9uXSBB
dWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIodW5zaWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzLCB1
bnNpZ25lZCBsb25nIG51bWJlck9mRnJhbWVzLCB1bnJlc3RyaWN0ZWQgZmxvYXQgc2FtcGxlUmF0
ZSk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoQXJy
YXlCdWZmZXIgYnVmZmVyLCBib29sZWFuIG1peFRvTW9ubyk7Ci0KLSAgICAvLyBBc3luY2hyb25v
dXMgYXVkaW8gZmlsZSBkYXRhIGRlY29kaW5nLgotICAgIC8vIEZJWE1FOiBzdWNjZXNzQ2FsbGJh
Y2sgc2hvdWxkIGJlIG9wdGlvbmFsIGFuZCB0aGUgY2FsbGJhY2tzIHNob3VsZCBub3QgYmUgbnVs
bGFibGUuIFRoaXMgc2hvdWxkIGFsc28gcmV0dXJuIGEgUHJvbWlzZS4KLSAgICB2b2lkIGRlY29k
ZUF1ZGlvRGF0YShBcnJheUJ1ZmZlciBhdWRpb0RhdGEsIEF1ZGlvQnVmZmVyQ2FsbGJhY2s/IHN1
Y2Nlc3NDYWxsYmFjaywgb3B0aW9uYWwgQXVkaW9CdWZmZXJDYWxsYmFjaz8gZXJyb3JDYWxsYmFj
ayk7Ci0KLSAgICAvLyBTb3VyY2VzCi0gICAgW01heVRocm93RXhjZXB0aW9uXSBBdWRpb0J1ZmZl
clNvdXJjZU5vZGUgY3JlYXRlQnVmZmVyU291cmNlKCk7Ci0KICAgICBbQ29uZGl0aW9uYWw9VklE
RU8sIE1heVRocm93RXhjZXB0aW9uXSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgY3JlYXRl
TWVkaWFFbGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQgbWVkaWFFbGVtZW50KTsKLQogICAg
IFtDb25kaXRpb25hbD1NRURJQV9TVFJFQU0sIE1heVRocm93RXhjZXB0aW9uXSBNZWRpYVN0cmVh
bUF1ZGlvU291cmNlTm9kZSBjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWRpYVN0cmVhbSBtZWRp
YVN0cmVhbSk7CiAgICAgW0NvbmRpdGlvbmFsPU1FRElBX1NUUkVBTSwgTWF5VGhyb3dFeGNlcHRp
b25dIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUgY3JlYXRlTWVkaWFTdHJlYW1EZXN0
aW5hdGlvbigpOwogCi0gICAgLy8gUHJvY2Vzc2luZyBub2RlcwotICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gR2Fpbk5vZGUgY3JlYXRlR2FpbigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRGVs
YXlOb2RlIGNyZWF0ZURlbGF5KG9wdGlvbmFsIHVucmVzdHJpY3RlZCBkb3VibGUgbWF4RGVsYXlU
aW1lID0gMSk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBCaXF1YWRGaWx0ZXJOb2RlIGNyZWF0
ZUJpcXVhZEZpbHRlcigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gV2F2ZVNoYXBlck5vZGUg
Y3JlYXRlV2F2ZVNoYXBlcigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gUGFubmVyTm9kZSBj
cmVhdGVQYW5uZXIoKTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIENvbnZvbHZlck5vZGUgY3Jl
YXRlQ29udm9sdmVyKCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBEeW5hbWljc0NvbXByZXNz
b3JOb2RlIGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlv
bl0gQW5hbHlzZXJOb2RlIGNyZWF0ZUFuYWx5c2VyKCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9u
XSBTY3JpcHRQcm9jZXNzb3JOb2RlIGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihvcHRpb25hbCB1bnNp
Z25lZCBsb25nIGJ1ZmZlclNpemUgPSAwLCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG51bWJlck9m
SW5wdXRDaGFubmVscyA9IDIsIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZPdXRwdXRD
aGFubmVscyA9IDIpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gT3NjaWxsYXRvck5vZGUgY3Jl
YXRlT3NjaWxsYXRvcigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gUGVyaW9kaWNXYXZlIGNy
ZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkgcmVhbCwgRmxvYXQzMkFycmF5IGltYWcpOwot
Ci0gICAgLy8gQ2hhbm5lbCBzcGxpdHRpbmcgYW5kIG1lcmdpbmcKLSAgICBbTWF5VGhyb3dFeGNl
cHRpb25dIENoYW5uZWxTcGxpdHRlck5vZGUgY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZPdXRwdXRzID0gNik7Ci0gICAgW01heVRocm93RXhjZXB0
aW9uXSBDaGFubmVsTWVyZ2VyTm9kZSBjcmVhdGVDaGFubmVsTWVyZ2VyKG9wdGlvbmFsIHVuc2ln
bmVkIGxvbmcgbnVtYmVyT2ZJbnB1dHMgPSA2KTsKLQotICAgIC8vIE9mZmxpbmUgcmVuZGVyaW5n
Ci0gICAgLy8gdm9pZCBwcmVwYXJlT2ZmbGluZUJ1ZmZlclJlbmRlcmluZyh1bnNpZ25lZCBsb25n
IG51bWJlck9mQ2hhbm5lbHMsIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZGcmFtZXMsIHVucmVzdHJp
Y3RlZCBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uY29t
cGxldGU7Ci0gICAgdm9pZCBzdGFydFJlbmRlcmluZygpOworICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydC4KKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlh
U3RyZWFtVHJhY2tTb3VyY2UoTWVkaWFTdHJlYW1UcmFjayBtZWRpYVN0cmVhbVRyYWNrKTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXgg
ZTU1NDM3NzlkNTFhNTA4Y2U2MWE2YTA4MzExMmU4ZDJkMGE4N2QwZC4uMjJlMDU0NjgyOTRjNjc1
NGU2MGVmMjg0MTI3NDExOGQwMTEwODFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Ob2RlLmNwcApAQCAtNTMxLDExICs1MzEsMTEgQEAgdm9pZCBBdWRpb05v
ZGU6OmRlcmVmKFJlZlR5cGUgcmVmVHlwZSkKICAgICAgICAgY29udGV4dCgpLmRlbGV0ZU1hcmtl
ZE5vZGVzKCk7CiB9CiAKLVZhcmlhbnQ8UmVmUHRyPEF1ZGlvQ29udGV4dD4sIFJlZlB0cjxXZWJL
aXRBdWRpb0NvbnRleHQ+PiBBdWRpb05vZGU6OmNvbnRleHRGb3JCaW5kaW5ncygpIGNvbnN0CitW
YXJpYW50PFJlZlB0cjxCYXNlQXVkaW9Db250ZXh0PiwgUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4
dD4+IEF1ZGlvTm9kZTo6Y29udGV4dEZvckJpbmRpbmdzKCkgY29uc3QKIHsKICAgICBpZiAobV9j
b250ZXh0LT5pc1dlYktpdEF1ZGlvQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gbWFrZVJlZlB0
cihzdGF0aWNfY2FzdDxXZWJLaXRBdWRpb0NvbnRleHQmPihtX2NvbnRleHQuZ2V0KCkpKTsKLSAg
ICByZXR1cm4gbWFrZVJlZlB0cihzdGF0aWNfY2FzdDxBdWRpb0NvbnRleHQmPihtX2NvbnRleHQu
Z2V0KCkpKTsKKyAgICByZXR1cm4gbWFrZVJlZlB0cihzdGF0aWNfY2FzdDxCYXNlQXVkaW9Db250
ZXh0Jj4obV9jb250ZXh0LmdldCgpKSk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjpmaW5pc2hEZXJl
ZihSZWZUeXBlIHJlZlR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGUuaAppbmRleCBhOTg4MWJkNGI4ZGI0YzNiMTBmOWQ3NzExNjU2MjYwMGMxODBmYzkxLi5i
ZmQ5MTdiNDNmN2FmODQ4MmFjMmY0NmVhN2I5YTdjZjg3MzMzY2I0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKQEAgLTM1LDExICszNSwxMSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF1ZGlvQ29udGV4dDsKIGNsYXNzIEF1ZGlvQ29u
dGV4dEJhc2U7CiBjbGFzcyBBdWRpb05vZGVJbnB1dDsKIGNsYXNzIEF1ZGlvTm9kZU91dHB1dDsK
IGNsYXNzIEF1ZGlvUGFyYW07CitjbGFzcyBCYXNlQXVkaW9Db250ZXh0OwogY2xhc3MgV2ViS2l0
QXVkaW9Db250ZXh0OwogCiAvLyBBbiBBdWRpb05vZGUgaXMgdGhlIGJhc2ljIGJ1aWxkaW5nIGJs
b2NrIGZvciBoYW5kbGluZyBhdWRpbyB3aXRoaW4gYW4gQXVkaW9Db250ZXh0LgpAQCAtNjUsNyAr
NjUsNyBAQCBwdWJsaWM6CiAgICAgQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCgpIHsgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsgfQogICAgIGNvbnN0IEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAotICAgIFZhcmlhbnQ8UmVmUHRy
PEF1ZGlvQ29udGV4dD4sIFJlZlB0cjxXZWJLaXRBdWRpb0NvbnRleHQ+PiBjb250ZXh0Rm9yQmlu
ZGluZ3MoKSBjb25zdDsKKyAgICBWYXJpYW50PFJlZlB0cjxCYXNlQXVkaW9Db250ZXh0PiwgUmVm
UHRyPFdlYktpdEF1ZGlvQ29udGV4dD4+IGNvbnRleHRGb3JCaW5kaW5ncygpIGNvbnN0OwogCiAg
ICAgZW51bSBOb2RlVHlwZSB7CiAgICAgICAgIE5vZGVUeXBlVW5rbm93biwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbAppbmRleCA3MTkzOWM4MzE3MTRi
ZmJmMzZkZmJhZTUyZmJjM2QzZDIwMmY2NjIxLi42MzZhOTVjMzg5ZDcwOGRhNDlmNzZiMTc2N2Q3
YmEyYTQ4OTJhNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTm9kZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGUuaWRsCkBAIC0yNSw3ICsyNSw3IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElP
LAogXSBpbnRlcmZhY2UgQXVkaW9Ob2RlIDogRXZlbnRUYXJnZXQgewotICAgIFtJbXBsZW1lbnRl
ZEFzPWNvbnRleHRGb3JCaW5kaW5nc10gcmVhZG9ubHkgYXR0cmlidXRlIChBdWRpb0NvbnRleHQg
b3IgV2ViS2l0QXVkaW9Db250ZXh0KSBjb250ZXh0OworICAgIFtJbXBsZW1lbnRlZEFzPWNvbnRl
eHRGb3JCaW5kaW5nc10gcmVhZG9ubHkgYXR0cmlidXRlIChCYXNlQXVkaW9Db250ZXh0IG9yIFdl
YktpdEF1ZGlvQ29udGV4dCkgY29udGV4dDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBudW1iZXJPZklucHV0czsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBudW1iZXJPZk91dHB1dHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4MWZlOWE4YTQ0NjQ4
ODEwNTdlZDc1YzhlZDUxZGIxZmRkMzdjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTI5
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVE
SU8pCisKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKworI2luY2x1ZGUgIkFuYWx5c2VyTm9k
ZS5oIgorI2luY2x1ZGUgIkFzeW5jQXVkaW9EZWNvZGVyLmgiCisjaW5jbHVkZSAiQXVkaW9CdWZm
ZXIuaCIKKyNpbmNsdWRlICJBdWRpb0J1ZmZlckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmgiCisjaW5jbHVkZSAiQXVkaW9MaXN0ZW5lci5oIgorI2luY2x1ZGUg
IkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVk
ZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAiQmlxdWFkRmlsdGVyTm9kZS5oIgorI2luY2x1
ZGUgIkNoYW5uZWxNZXJnZXJOb2RlLmgiCisjaW5jbHVkZSAiQ2hhbm5lbFNwbGl0dGVyTm9kZS5o
IgorI2luY2x1ZGUgIkNvbnZvbHZlck5vZGUuaCIKKyNpbmNsdWRlICJEZWZhdWx0QXVkaW9EZXN0
aW5hdGlvbk5vZGUuaCIKKyNpbmNsdWRlICJEZWxheU5vZGUuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRkZURnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiR2Fpbk5vZGUuaCIKKyNpbmNsdWRlICJH
ZW5lcmljRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkhSVEZQYW5uZXIuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUgIk9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIk9zY2lsbGF0b3JOb2RlLmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhbm5lck5vZGUuaCIKKyNpbmNsdWRlICJQZXJpb2Rp
Y1dhdmUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNs
dWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2NyaXB0UHJvY2Vzc29yTm9kZS5o
IgorI2luY2x1ZGUgIldhdmVTaGFwZXJOb2RlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U2NyaXB0Q2FsbFN0YWNrLmg+CisKKyNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUworI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworI2lmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAi
R1N0cmVhbWVyQ29tbW9uLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisj
aW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjZW5k
aWYKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8
d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK2NvbnN0IHVuc2lnbmVkIE1heFBlcmlvZGljV2F2ZUxlbmd0aCA9
IDQwOTY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKEF1ZGlvQ29udGV4dEJhc2UpOworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEJhc2VB
dWRpb0NvbnRleHQpOworCisjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAuLi4p
IFJFTEVBU0VfTE9HX0lGKGRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpICYmIGRvY3Vt
ZW50KCktPnBhZ2UoKS0+aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE1lZGlhLCAiJXAgLSBC
YXNlQXVkaW9Db250ZXh0OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyAgICAKK2Jvb2wg
QmFzZUF1ZGlvQ29udGV4dDo6aXNTYW1wbGVSYXRlUmFuZ2VHb29kKGZsb2F0IHNhbXBsZVJhdGUp
Cit7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlIG1pbmltdW0gc2FtcGxl
LXJhdGUgY291bGQgYmUgbGVzcyB0aGFuIDQ0LjFLSHosCisgICAgLy8gYnV0IHRoYXQgd2lsbCBy
ZXF1aXJlIHNvbWUgZml4ZXMgaW4gSFJURlBhbm5lcjo6ZmZ0U2l6ZUZvclNhbXBsZVJhdGUoKSwg
YW5kIHNvbWUgdGVzdGluZyB0aGVyZS4KKyAgICByZXR1cm4gc2FtcGxlUmF0ZSA+PSA0NDEwMCAm
JiBzYW1wbGVSYXRlIDw9IDk2MDAwOworfQorCit1bnNpZ25lZCBCYXNlQXVkaW9Db250ZXh0Ojpz
X2hhcmR3YXJlQ29udGV4dENvdW50ID0gMDsKKworQXVkaW9Db250ZXh0QmFzZTo6QXVkaW9Db250
ZXh0QmFzZShEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1l
bnQpCit7Cit9CisKKy8vIENvbnN0cnVjdG9yIGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlvIGhh
cmR3YXJlLgorQmFzZUF1ZGlvQ29udGV4dDo6QmFzZUF1ZGlvQ29udGV4dChEb2N1bWVudCYgZG9j
dW1lbnQpCisgICAgOiBBdWRpb0NvbnRleHRCYXNlKGRvY3VtZW50KQorI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAorICAgICwgbV9sb2dnZXIoZG9jdW1lbnQubG9nZ2VyKCkpCisgICAgLCBtX2xv
Z0lkZW50aWZpZXIodW5pcXVlTG9nSWRlbnRpZmllcigpKQorI2VuZGlmCisgICAgLCBtX21lZGlh
U2Vzc2lvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBsYXRmb3JtTWVkaWFTZXNzaW9u
TWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLCAqdGhpcykpCisgICAgLCBtX2V2ZW50UXVldWUoTWFp
blRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQoreworICAgIC8vIEFjY29y
ZGluZyB0byBzcGVjIEF1ZGlvQ29udGV4dCBtdXN0IGRpZSBvbmx5IGFmdGVyIHBhZ2UgbmF2aWdh
dGUuCisgICAgLy8gTGV0cyBtYXJrIGl0IGFzIEFjdGl2ZURPTU9iamVjdCB3aXRoIHBlbmRpbmcg
YWN0aXZpdHkgYW5kIHVubWFyayBpdCBpbiBjbGVhciBtZXRob2QuCisgICAgbWFrZVBlbmRpbmdB
Y3Rpdml0eSgpOworCisgICAgY29uc3RydWN0Q29tbW9uKCk7CisKKyAgICBtX2Rlc3RpbmF0aW9u
Tm9kZSA9IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKCp0aGlzKTsKKworICAg
IC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIG5vZGUncyBtdXRlZCBzdGF0ZSB0byBtYXRj
aCB0aGUgcGFnZSdzIGN1cnJlbnQgbXV0ZWQgc3RhdGUuCisgICAgcGFnZU11dGVkU3RhdGVEaWRD
aGFuZ2UoKTsKKworICAgIGRvY3VtZW50LmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOworICAgIGRv
Y3VtZW50LnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7
Cit9CisKKy8vIENvbnN0cnVjdG9yIGZvciBvZmZsaW5lIChub24tcmVhbHRpbWUpIHJlbmRlcmlu
Zy4KK0Jhc2VBdWRpb0NvbnRleHQ6OkJhc2VBdWRpb0NvbnRleHQoRG9jdW1lbnQmIGRvY3VtZW50
LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQorICAgIDogQXVkaW9Db250ZXh0QmFzZShkb2N1
bWVudCkKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAsIG1fbG9nZ2VyKGRvY3VtZW50
LmxvZ2dlcigpKQorICAgICwgbV9sb2dJZGVudGlmaWVyKHVuaXF1ZUxvZ0lkZW50aWZpZXIoKSkK
KyNlbmRpZgorICAgICwgbV9pc09mZmxpbmVDb250ZXh0KHRydWUpCisgICAgLCBtX21lZGlhU2Vz
c2lvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFu
YWdlcjo6c2hhcmVkTWFuYWdlcigpLCAqdGhpcykpCisgICAgLCBtX2V2ZW50UXVldWUoTWFpblRo
cmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQorICAgICwgbV9yZW5kZXJUYXJn
ZXQocmVuZGVyVGFyZ2V0KQoreworICAgIGNvbnN0cnVjdENvbW1vbigpOworCisgICAgLy8gQ3Jl
YXRlIGEgbmV3IGRlc3RpbmF0aW9uIGZvciBvZmZsaW5lIHJlbmRlcmluZy4KKyAgICBtX2Rlc3Rp
bmF0aW9uTm9kZSA9IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKCp0aGlzLCBt
X3JlbmRlclRhcmdldC5nZXQoKSk7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6Y29uc3Ry
dWN0Q29tbW9uKCkKK3sKKyAgICBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgpOworICAgIAorICAgIG1f
bGlzdGVuZXIgPSBBdWRpb0xpc3RlbmVyOjpjcmVhdGUoKTsKKworICAgIEFTU0VSVChkb2N1bWVu
dCgpKTsKKyAgICBpZiAoZG9jdW1lbnQoKS0+YXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmUoKSkKKyAgICAgICAgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlVXNlckdlc3R1cmVG
b3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgbV9yZXN0cmljdGlv
bnMgPSBOb1Jlc3RyaWN0aW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGFkZEJlaGF2
aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9u
KTsKKyNlbmRpZgorfQorCitCYXNlQXVkaW9Db250ZXh0Ojp+QmFzZUF1ZGlvQ29udGV4dCgpCit7
CisjaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVw
OiBCYXNlQXVkaW9Db250ZXh0Ojp+QXVkaW9Db250ZXh0KClcbiIsIHRoaXMpOworI2VuZGlmCisg
ICAgQVNTRVJUKCFtX2lzSW5pdGlhbGl6ZWQpOworICAgIEFTU0VSVChtX2lzU3RvcFNjaGVkdWxl
ZCk7CisgICAgQVNTRVJUKG1fbm9kZXNUb0RlbGV0ZS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCht
X3JlZmVyZW5jZWROb2Rlcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2ZpbmlzaGVkTm9kZXMu
aXNFbXB0eSgpKTsgLy8gRklYTUUgKGJ1ZyAxMDU4NzApOiBUaGlzIGFzc2VydGlvbiBmYWlscyBv
biB0ZXN0cyBzb21ldGltZXMuCisgICAgQVNTRVJUKG1fYXV0b21hdGljUHVsbE5vZGVzLmlzRW1w
dHkoKSk7CisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nKQorICAgICAg
ICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy5yZXNpemUobV9hdXRvbWF0aWNQdWxsTm9k
ZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuaXNF
bXB0eSgpKTsKKyAgICAvLyBGSVhNRTogQ2FuIHdlIGFzc2VydCB0aGF0IG1fZGVmZXJyZWRGaW5p
c2hEZXJlZkxpc3QgaXMgZW1wdHk/CisKKyAgICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSAmJiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVk
aW9Qcm9kdWNlcigqdGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JWaXNp
YmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgQmFz
ZUF1ZGlvQ29udGV4dDo6bGF6eUluaXRpYWxpemUoKQoreworICAgIEFTU0VSVCghbV9pc1N0b3BT
Y2hlZHVsZWQpOworCisgICAgaWYgKG1faXNJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGNvbnRleHQgdG8gaW5pdGlhbGl6ZSBhIHNlY29uZCB0
aW1lIGFmdGVyIGl0J3MgYWxyZWFkeSBiZWVuIGV4cGxpY2l0bHkgdW5pbml0aWFsaXplZC4KKyAg
ICBBU1NFUlQoIW1faXNBdWRpb1RocmVhZEZpbmlzaGVkKTsKKyAgICBpZiAobV9pc0F1ZGlvVGhy
ZWFkRmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9k
ZSkgeworICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+aW5pdGlhbGl6ZSgpOworCisgICAgICAg
IGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHN0YXJ0cyB0
aGUgYXVkaW8gdGhyZWFkLiBUaGUgZGVzdGluYXRpb24gbm9kZSdzIHByb3ZpZGVJbnB1dCgpIG1l
dGhvZCB3aWxsIG5vdyBiZSBjYWxsZWQgcmVwZWF0ZWRseSB0byByZW5kZXIgYXVkaW8uCisgICAg
ICAgICAgICAvLyBFYWNoIHRpbWUgcHJvdmlkZUlucHV0KCkgaXMgY2FsbGVkLCBhIHBvcnRpb24g
b2YgdGhlIGF1ZGlvIHN0cmVhbSBpcyByZW5kZXJlZC4gTGV0J3MgY2FsbCB0aGlzIHRpbWUgcGVy
aW9kIGEgInJlbmRlciBxdWFudHVtIi4KKyAgICAgICAgICAgIC8vIE5PVEU6IGZvciBub3cgZGVm
YXVsdCBBdWRpb0NvbnRleHQgZG9lcyBub3QgbmVlZCBhbiBleHBsaWNpdCBzdGFydFJlbmRlcmlu
ZygpIGNhbGwgZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICAgICAgLy8gV2UgbWF5IHdhbnQgdG8g
Y29uc2lkZXIgcmVxdWlyaW5nIGl0IGZvciBzeW1tZXRyeSB3aXRoIE9mZmxpbmVBdWRpb0NvbnRl
eHQuCisgICAgICAgICAgICBzdGFydFJlbmRlcmluZygpOworICAgICAgICAgICAgKytzX2hhcmR3
YXJlQ29udGV4dENvdW50OworICAgICAgICB9CisgICAgfQorICAgIG1faXNJbml0aWFsaXplZCA9
IHRydWU7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6Y2xlYXIoKQoreworICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOworCisgICAgLy8gV2UgaGF2ZSB0byByZWxl
YXNlIG91ciByZWZlcmVuY2UgdG8gdGhlIGRlc3RpbmF0aW9uIG5vZGUgYmVmb3JlIHRoZSBjb250
ZXh0IHdpbGwgZXZlciBiZSBkZWxldGVkIHNpbmNlIHRoZSBkZXN0aW5hdGlvbiBub2RlIGhvbGRz
IGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0LgorICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZSkK
KyAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUgPSBudWxscHRyOworCisgICAgLy8gQXVkaW8gdGhy
ZWFkIGlzIGRlYWQuIE5vYm9keSB3aWxsIHNjaGVkdWxlIG5vZGUgZGVsZXRpb24gYWN0aW9uLiBM
ZXQncyBkbyBpdCBvdXJzZWx2ZXMuCisgICAgZG8geworICAgICAgICBkZWxldGVNYXJrZWROb2Rl
cygpOworICAgICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kVmVjdG9yKG1fbm9kZXNNYXJrZWRG
b3JEZWxldGlvbik7CisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5jbGVhcigpOwor
ICAgIH0gd2hpbGUgKG1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpOworCisgICAgY2xlYXJQZW5kaW5n
QWN0aXZpdHkoKTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0Ojp1bmluaXRpYWxpemUoKQor
eworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIGlmICghbV9pc0luaXRpYWxpemVkKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBUaGlzIHN0b3BzIHRoZSBhdWRpbyB0aHJlYWQgYW5kIGFsbCBhdWRpbyByZW5k
ZXJpbmcuCisgICAgaWYgKG1fZGVzdGluYXRpb25Ob2RlKQorICAgICAgICBtX2Rlc3RpbmF0aW9u
Tm9kZS0+dW5pbml0aWFsaXplKCk7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgY29udGV4dCB0
byBpbml0aWFsaXplIGEgc2Vjb25kIHRpbWUgYWZ0ZXIgaXQncyBhbHJlYWR5IGJlZW4gZXhwbGlj
aXRseSB1bmluaXRpYWxpemVkLgorICAgIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkID0gdHJ1ZTsK
KworICAgIGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7CisgICAgICAgIEFTU0VSVChzX2hhcmR3
YXJlQ29udGV4dENvdW50KTsKKyAgICAgICAgLS1zX2hhcmR3YXJlQ29udGV4dENvdW50OworCisg
ICAgICAgIC8vIE9mZmxpbmUgY29udGV4dHMgbW92ZSB0byAnQ2xvc2VkJyBzdGF0ZSB3aGVuIGRp
c3BhdGNoaW5nIHRoZSBjb21wbGV0aW9uIGV2ZW50LgorICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6
Q2xvc2VkKTsKKyAgICB9CisKKyAgICAvLyBHZXQgcmlkIG9mIHRoZSBzb3VyY2VzIHdoaWNoIG1h
eSBzdGlsbCBiZSBwbGF5aW5nLgorICAgIGRlcmVmVW5maW5pc2hlZFNvdXJjZU5vZGVzKCk7CisK
KyAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKK30KKworYm9vbCBCYXNlQXVkaW9Db250ZXh0
Ojppc0luaXRpYWxpemVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0luaXRpYWxpemVkOwor
fQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmFkZFJlYWN0aW9uKFN0YXRlIHN0YXRlLCBET01Q
cm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQoreworICAgIHNpemVfdCBzdGF0ZUluZGV4
ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0ZSk7CisgICAgaWYgKHN0YXRlSW5kZXggPj0gbV9z
dGF0ZVJlYWN0aW9ucy5zaXplKCkpCisgICAgICAgIG1fc3RhdGVSZWFjdGlvbnMuZ3JvdyhzdGF0
ZUluZGV4ICsgMSk7CisKKyAgICBtX3N0YXRlUmVhY3Rpb25zW3N0YXRlSW5kZXhdLmFwcGVuZChX
VEZNb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjpzZXRTdGF0ZShT
dGF0ZSBzdGF0ZSkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBzdGF0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zdGF0ZSA9IHN0YXRlOworICAgIG1fZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0YXRlY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5C
dWJibGU6OlllcywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKworICAgIHNpemVfdCBzdGF0
ZUluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0ZSk7CisgICAgaWYgKHN0YXRlSW5kZXgg
Pj0gbV9zdGF0ZVJlYWN0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rv
cjxET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4+IHJlYWN0aW9uczsKKyAgICBtX3N0YXRlUmVhY3Rp
b25zW3N0YXRlSW5kZXhdLnN3YXAocmVhY3Rpb25zKTsKKworICAgIGZvciAoYXV0byYgcHJvbWlz
ZSA6IHJlYWN0aW9ucykKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7Cit9CisKK3ZvaWQgQmFz
ZUF1ZGlvQ29udGV4dDo6c3RvcCgpCit7CisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsK
KyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gVXN1YWxseSBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0IGNhbGxzIHN0b3AgdHdpY2UuCisgICAgaWYgKG1faXNTdG9wU2No
ZWR1bGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9pc1N0b3BTY2hlZHVsZWQgPSB0cnVlOwor
CisgICAgQVNTRVJUKGRvY3VtZW50KCkpOworICAgIGRvY3VtZW50KCktPnVwZGF0ZUlzUGxheWlu
Z01lZGlhKCk7CisKKyAgICB1bmluaXRpYWxpemUoKTsKKyAgICBjbGVhcigpOworfQorCit2b2lk
IEJhc2VBdWRpb0NvbnRleHQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbikKK3sKKyAgICBp
ZiAoc3RhdGUoKSA9PSBTdGF0ZTo6UnVubmluZykgeworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+
YmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXliYWNrU3VzcGVuZGVk
KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKKyAgICB9Cit9
CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6cmVzdW1lKCkKK3sKKyAgICBpZiAoc3RhdGUoKSA9
PSBTdGF0ZTo6SW50ZXJydXB0ZWQpIHsKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZEludGVy
cnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZyk7CisgICAgICAg
IGRvY3VtZW50KCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CisgICAgfQorfQorCitjb25zdCBj
aGFyKiBCYXNlQXVkaW9Db250ZXh0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gIkF1ZGlvQ29udGV4dCI7Cit9CisKK0RvY3VtZW50KiBBdWRpb0NvbnRleHRCYXNl
Ojpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50PihtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOworfQorCitEb2N1bWVudElkZW50aWZpZXIgQmFzZUF1ZGlv
Q29udGV4dDo6aG9zdGluZ0RvY3VtZW50SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgYXV0byog
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
KyAgICByZXR1cm4gZG9jdW1lbnQgPyBkb2N1bWVudC0+aWRlbnRpZmllcigpIDogRG9jdW1lbnRJ
ZGVudGlmaWVyIHsgfTsKK30KKworYm9vbCBCYXNlQXVkaW9Db250ZXh0Ojppc1N1c3BlbmRlZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICFkb2N1bWVudCgpIHx8IGRvY3VtZW50KCktPmFjdGl2ZURP
TU9iamVjdHNBcmVTdXNwZW5kZWQoKSB8fCBkb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJl
U3RvcHBlZCgpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnZpc2liaWxpdHlTdGF0ZUNo
YW5nZWQoKQoreworICAgIC8vIERvIG5vdCBzdXNwZW5kIGlmIGF1ZGlvIGlzIGF1ZGlibGUuCisg
ICAgaWYgKCFkb2N1bWVudCgpIHx8IG1lZGlhU3RhdGUoKSA9PSBNZWRpYVByb2R1Y2VyOjpJc1Bs
YXlpbmdBdWRpbyB8fCBtX2lzU3RvcFNjaGVkdWxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGRvY3VtZW50KCktPmhpZGRlbigpKSB7CisgICAgICAgIGlmIChzdGF0ZSgpID09IFN0YXRl
OjpSdW5uaW5nKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ2aXNpYmls
aXR5U3RhdGVDaGFuZ2VkKCkgU3VzcGVuZGluZyBwbGF5YmFjayBhZnRlciBnb2luZyB0byB0aGUg
YmFja2dyb3VuZCIpOworICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmJlZ2luSW50ZXJydXB0
aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpFbnRlcmluZ0JhY2tncm91bmQpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkludGVycnVwdGVk
KSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ2aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCkgUmVzdW1pbmcgcGxheWJhY2sgYWZ0ZXIgZW50ZXJpbmcgZm9yZWdyb3VuZCIpOwor
ICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZEludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlh
U2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
QmFzZUF1ZGlvQ29udGV4dDo6d291bGRUYWludE9yaWdpbihjb25zdCBVUkwmIHVybCkgY29uc3QK
K3sKKyAgICBpZiAodXJsLnByb3RvY29sSXNEYXRhKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpCisgICAgICAgIHJl
dHVybiAhZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkuY2FuUmVxdWVzdCh1cmwpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitFeGNlcHRpb25PcjxSZWY8QXVkaW9CdWZmZXI+PiBCYXNlQXVk
aW9Db250ZXh0OjpjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90
IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIGF1dG8gYXVkaW9CdWZm
ZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVz
LCBzYW1wbGVSYXRlKTsKKyAgICBpZiAoIWF1ZGlvQnVmZmVyKQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKKyAgICByZXR1cm4gYXVkaW9CdWZmZXIucmVs
ZWFzZU5vbk51bGwoKTsKK30KKworRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyPj4gQmFzZUF1
ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyJiBhcnJheUJ1ZmZlciwgYm9vbCBt
aXhUb01vbm8pCit7CisgICAgYXV0byBhdWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGVG
cm9tQXVkaW9GaWxlRGF0YShhcnJheUJ1ZmZlci5kYXRhKCksIGFycmF5QnVmZmVyLmJ5dGVMZW5n
dGgoKSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlKCkpOworICAgIGlmICghYXVkaW9CdWZmZXIpCisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworICAgIHJldHVybiBhdWRp
b0J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmRl
Y29kZUF1ZGlvRGF0YShSZWY8QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBSZWZQdHI8QXVkaW9C
dWZmZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ssIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxi
YWNrPiYmIGVycm9yQ2FsbGJhY2spCit7CisgICAgaWYgKCFtX2F1ZGlvRGVjb2RlcikKKyAgICAg
ICAgbV9hdWRpb0RlY29kZXIgPSBtYWtlVW5pcXVlPEFzeW5jQXVkaW9EZWNvZGVyPigpOworICAg
IG1fYXVkaW9EZWNvZGVyLT5kZWNvZGVBc3luYyhXVEZNb3ZlKGF1ZGlvRGF0YSksIHNhbXBsZVJh
dGUoKSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spKTsK
K30KKworRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4+IEJhc2VBdWRpb0Nv
bnRleHQ6OmNyZWF0ZUJ1ZmZlclNvdXJjZSgpCit7CisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSKTsKKworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAobV9pc1N0b3BT
Y2hlZHVsZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9
OworCisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBSZWY8QXVkaW9CdWZmZXJTb3VyY2VOb2Rl
PiBub2RlID0gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUo
KSk7CisKKyAgICAvLyBCZWNhdXNlIHRoaXMgaXMgYW4gQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2Rl
LCB0aGUgY29udGV4dCBrZWVwcyBhIHJlZmVyZW5jZSB1bnRpbCBpdCBoYXMgZmluaXNoZWQgcGxh
eWluZy4KKyAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2Rl
OjpmaW5pc2goKSBjYWxscyBCYXNlQXVkaW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNoZWRQcm9j
ZXNzaW5nKCkuCisgICAgcmVmTm9kZShub2RlKTsKKworICAgIHJldHVybiBub2RlOworfQorCitF
eGNlcHRpb25PcjxSZWY8U2NyaXB0UHJvY2Vzc29yTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6OmNy
ZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51bWJlck9mSW5w
dXRDaGFubmVscywgc2l6ZV90IG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpCit7CisgICAgQUxXQVlT
X0xPRyhMT0dJREVOVElGSUVSKTsKKyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
CisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKKworICAgIGxhenlJbml0aWFsaXplKCk7CisKKyAgICAvLyBX
M0MgRWRpdG9yJ3MgRHJhZnQgMDYgSnVuZSAyMDE3CisgICAgLy8gIGh0dHBzOi8vd2ViYXVkaW8u
Z2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3dpZGwtQmFzZUF1ZGlvQ29udGV4dC1jcmVhdGVTY3Jp
cHRQcm9jZXNzb3ItU2NyaXB0UHJvY2Vzc29yTm9kZS11bnNpZ25lZC1sb25nLWJ1ZmZlclNpemUt
dW5zaWduZWQtbG9uZy1udW1iZXJPZklucHV0Q2hhbm5lbHMtdW5zaWduZWQtbG9uZy1udW1iZXJP
Zk91dHB1dENoYW5uZWxzCisKKyAgICAvLyBUaGUgYnVmZmVyU2l6ZSBwYXJhbWV0ZXIgZGV0ZXJt
aW5lcyB0aGUgYnVmZmVyIHNpemUgaW4gdW5pdHMgb2Ygc2FtcGxlLWZyYW1lcy4gSWYgaXQncyBu
b3QgcGFzc2VkIGluLAorICAgIC8vIG9yIGlmIHRoZSB2YWx1ZSBpcyAwLCB0aGVuIHRoZSBpbXBs
ZW1lbnRhdGlvbiB3aWxsIGNob29zZSB0aGUgYmVzdCBidWZmZXIgc2l6ZSBmb3IgdGhlIGdpdmVu
IGVudmlyb25tZW50LAorICAgIC8vIHdoaWNoIHdpbGwgYmUgY29uc3RhbnQgcG93ZXIgb2YgMiB0
aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZiB0aGUgbm9kZS4gLi4uIElmIHRoZSB2YWx1ZSBvZiB0
aGlzIHBhcmFtZXRlcgorICAgIC8vIGlzIG5vdCBvbmUgb2YgdGhlIGFsbG93ZWQgcG93ZXItb2Yt
MiB2YWx1ZXMgbGlzdGVkIGFib3ZlLCBhbiBJbmRleFNpemVFcnJvciBtdXN0IGJlIHRocm93bi4K
KyAgICBzd2l0Y2ggKGJ1ZmZlclNpemUpIHsKKyAgICBjYXNlIDA6CisjaWYgVVNFKEFVRElPX1NF
U1NJT04pCisgICAgICAgIC8vIFBpY2sgYSB2YWx1ZSBiZXR3ZWVuIDI1NiAoMl44KSBhbmQgMTYz
ODQgKDJeMTQpLCBiYXNlZCBvbiB0aGUgYnVmZmVyIHNpemUgb2YgdGhlIGN1cnJlbnQgQXVkaW9T
ZXNzaW9uOgorICAgICAgICBidWZmZXJTaXplID0gMSA8PCBzdGQ6Om1heDxzaXplX3Q+KDgsIHN0
ZDo6bWluPHNpemVfdD4oMTQsIHN0ZDo6bG9nMihBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24o
KS5idWZmZXJTaXplKCkpKSk7CisjZWxzZQorICAgICAgICBidWZmZXJTaXplID0gMjA0ODsKKyNl
bmRpZgorICAgICAgICBicmVhazsKKyAgICBjYXNlIDI1NjoKKyAgICBjYXNlIDUxMjoKKyAgICBj
YXNlIDEwMjQ6CisgICAgY2FzZSAyMDQ4OgorICAgIGNhc2UgNDA5NjoKKyAgICBjYXNlIDgxOTI6
CisgICAgY2FzZSAxNjM4NDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CisgICAgfQorCisgICAgLy8gQW4g
SW5kZXhTaXplRXJyb3IgZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIGlmIGJ1ZmZlclNpemUgb3Ig
bnVtYmVyT2ZJbnB1dENoYW5uZWxzIG9yIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMKKyAgICAvLyBh
cmUgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UuIEl0IGlzIGludmFsaWQgZm9yIGJvdGggbnVtYmVy
T2ZJbnB1dENoYW5uZWxzIGFuZCBudW1iZXJPZk91dHB1dENoYW5uZWxzIHRvIGJlIHplcm8uCisg
ICAgLy8gSW4gdGhpcyBjYXNlIGFuIEluZGV4U2l6ZUVycm9yIG11c3QgYmUgdGhyb3duLgorCisg
ICAgaWYgKCFudW1iZXJPZklucHV0Q2hhbm5lbHMgJiYgIW51bWJlck9mT3V0cHV0Q2hhbm5lbHMp
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OworCisgICAg
Ly8gVGhpcyBwYXJhbWV0ZXIgW251bWJlck9mSW5wdXRDaGFubmVsc10gZGV0ZXJtaW5lcyB0aGUg
bnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGlzIG5vZGUncyBpbnB1dC4gVmFsdWVzIG9mCisgICAg
Ly8gdXAgdG8gMzIgbXVzdCBiZSBzdXBwb3J0ZWQuIEEgTm90U3VwcG9ydGVkRXJyb3IgbXVzdCBi
ZSB0aHJvd24gaWYgdGhlIG51bWJlciBvZiBjaGFubmVscyBpcyBub3Qgc3VwcG9ydGVkLgorCisg
ICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscyA+IG1heE51bWJlck9mQ2hhbm5lbHMoKSkKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CisKKyAgICAvLyBU
aGlzIHBhcmFtZXRlciBbbnVtYmVyT2ZPdXRwdXRDaGFubmVsc10gZGV0ZXJtaW5lcyB0aGUgbnVt
YmVyIG9mIGNoYW5uZWxzIGZvciB0aGlzIG5vZGUncyBvdXRwdXQuIFZhbHVlcyBvZgorICAgIC8v
IHVwIHRvIDMyIG11c3QgYmUgc3VwcG9ydGVkLiBBIE5vdFN1cHBvcnRlZEVycm9yIG11c3QgYmUg
dGhyb3duIGlmIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaXMgbm90IHN1cHBvcnRlZC4KKworICAg
IGlmIChudW1iZXJPZk91dHB1dENoYW5uZWxzID4gbWF4TnVtYmVyT2ZDaGFubmVscygpKQorICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKKworICAgIGF1dG8g
bm9kZSA9IFNjcmlwdFByb2Nlc3Nvck5vZGU6OmNyZWF0ZSgqdGhpcywgc2FtcGxlUmF0ZSgpLCBi
dWZmZXJTaXplLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMp
OworCisgICAgcmVmTm9kZShub2RlKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwg
d2Ugc3RvcCBtYWtpbmcgamF2YXNjcmlwdCByZW5kZXJpbmcgY2FsbGJhY2tzCisgICAgcmV0dXJu
IG5vZGU7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxCaXF1YWRGaWx0ZXJOb2RlPj4gQmFzZUF1ZGlv
Q29udGV4dDo6Y3JlYXRlQmlxdWFkRmlsdGVyKCkKK3sKKyAgICBBTFdBWVNfTE9HKExPR0lERU5U
SUZJRVIpOworICAgIAorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1faXNT
dG9wU2NoZWR1bGVkKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJy
b3IgfTsKKworICAgIGxhenlJbml0aWFsaXplKCk7CisKKyAgICByZXR1cm4gQmlxdWFkRmlsdGVy
Tm9kZTo6Y3JlYXRlKCp0aGlzLCBzYW1wbGVSYXRlKCkpOworfQorCitFeGNlcHRpb25PcjxSZWY8
V2F2ZVNoYXBlck5vZGU+PiBCYXNlQXVkaW9Db250ZXh0OjpjcmVhdGVXYXZlU2hhcGVyKCkKK3sK
KyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworICAgIAorICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKKworICAgIGxhenlJbml0aWFsaXplKCk7Cisg
ICAgcmV0dXJuIFdhdmVTaGFwZXJOb2RlOjpjcmVhdGUoKnRoaXMpOworfQorCitFeGNlcHRpb25P
cjxSZWY8UGFubmVyTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6OmNyZWF0ZVBhbm5lcigpCit7Cisg
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKKyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CisKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAg
IHJldHVybiBQYW5uZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7Cit9CisKK0V4
Y2VwdGlvbk9yPFJlZjxDb252b2x2ZXJOb2RlPj4gQmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlQ29u
dm9sdmVyKCkKK3sKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworICAgIAorICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQorICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKKworICAgIGxhenlJbml0
aWFsaXplKCk7CisgICAgcmV0dXJuIENvbnZvbHZlck5vZGU6OmNyZWF0ZSgqdGhpcywgc2FtcGxl
UmF0ZSgpKTsKK30KKworRXhjZXB0aW9uT3I8UmVmPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+PiBC
YXNlQXVkaW9Db250ZXh0OjpjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKQoreworICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICByZXR1cm4g
RHluYW1pY3NDb21wcmVzc29yTm9kZTo6Y3JlYXRlKCp0aGlzLCBzYW1wbGVSYXRlKCkpOworfQor
CitFeGNlcHRpb25PcjxSZWY8QW5hbHlzZXJOb2RlPj4gQmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRl
QW5hbHlzZXIoKQoreworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgbGF6eUlu
aXRpYWxpemUoKTsKKyAgICByZXR1cm4gQW5hbHlzZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBs
ZVJhdGUoKSk7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxHYWluTm9kZT4+IEJhc2VBdWRpb0NvbnRl
eHQ6OmNyZWF0ZUdhaW4oKQoreworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CisgICAg
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQp
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworCisgICAg
bGF6eUluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gR2Fpbk5vZGU6OmNyZWF0ZSgqdGhpcywgc2Ft
cGxlUmF0ZSgpKTsKK30KKworRXhjZXB0aW9uT3I8UmVmPERlbGF5Tm9kZT4+IEJhc2VBdWRpb0Nv
bnRleHQ6OmNyZWF0ZURlbGF5KGRvdWJsZSBtYXhEZWxheVRpbWUpCit7CisgICAgQUxXQVlTX0xP
RyhMT0dJREVOVElGSUVSKTsKKyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yIH07CisKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBEZWxh
eU5vZGU6OmNyZWF0ZSgqdGhpcywgc2FtcGxlUmF0ZSgpLCBtYXhEZWxheVRpbWUpOworfQorCitF
eGNlcHRpb25PcjxSZWY8Q2hhbm5lbFNwbGl0dGVyTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6OmNy
ZWF0ZUNoYW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzKQoreworICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBhdXRvIG5v
ZGUgPSBDaGFubmVsU3BsaXR0ZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSwgbnVt
YmVyT2ZPdXRwdXRzKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbmRleFNpemVFcnJvciB9OworICAgIHJldHVybiBub2RlLnJlbGVhc2VOb25OdWxsKCk7Cit9
CisKK0V4Y2VwdGlvbk9yPFJlZjxDaGFubmVsTWVyZ2VyTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6
OmNyZWF0ZUNoYW5uZWxNZXJnZXIoc2l6ZV90IG51bWJlck9mSW5wdXRzKQoreworICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBhdXRvIG5v
ZGUgPSBDaGFubmVsTWVyZ2VyTm9kZTo6Y3JlYXRlKCp0aGlzLCBzYW1wbGVSYXRlKCksIG51bWJl
ck9mSW5wdXRzKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bmRleFNpemVFcnJvciB9OworICAgIHJldHVybiBub2RlLnJlbGVhc2VOb25OdWxsKCk7Cit9CisK
K0V4Y2VwdGlvbk9yPFJlZjxPc2NpbGxhdG9yTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6OmNyZWF0
ZU9zY2lsbGF0b3IoKQoreworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgbGF6
eUluaXRpYWxpemUoKTsKKworICAgIFJlZjxPc2NpbGxhdG9yTm9kZT4gbm9kZSA9IE9zY2lsbGF0
b3JOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7CisKKyAgICAvLyBCZWNhdXNlIHRo
aXMgaXMgYW4gQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLCB0aGUgY29udGV4dCBrZWVwcyBhIHJl
ZmVyZW5jZSB1bnRpbCBpdCBoYXMgZmluaXNoZWQgcGxheWluZy4KKyAgICAvLyBXaGVuIHRoaXMg
aGFwcGVucywgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlOjpmaW5pc2goKSBjYWxscyBCYXNlQXVk
aW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKCkuCisgICAgcmVmTm9kZShu
b2RlKTsKKworICAgIHJldHVybiBub2RlOworfQorCitFeGNlcHRpb25PcjxSZWY8UGVyaW9kaWNX
YXZlPj4gQmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlUGVyaW9kaWNXYXZlKEZsb2F0MzJBcnJheSYg
cmVhbCwgRmxvYXQzMkFycmF5JiBpbWFnaW5hcnkpCit7CisgICAgQUxXQVlTX0xPRyhMT0dJREVO
VElGSUVSKTsKKyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2lz
U3RvcFNjaGVkdWxlZCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CisKKyAgICBpZiAocmVhbC5sZW5ndGgoKSAhPSBpbWFnaW5hcnkubGVuZ3RoKCkgfHwg
KHJlYWwubGVuZ3RoKCkgPiBNYXhQZXJpb2RpY1dhdmVMZW5ndGgpIHx8ICFyZWFsLmxlbmd0aCgp
KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKKyAgICBsYXp5
SW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBQZXJpb2RpY1dhdmU6OmNyZWF0ZShzYW1wbGVSYXRl
KCksIHJlYWwsIGltYWdpbmFyeSk7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6bm90aWZ5
Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKGlz
QXVkaW9UaHJlYWQoKSk7CisgICAgbV9maW5pc2hlZE5vZGVzLmFwcGVuZChub2RlKTsKK30KKwor
dm9pZCBCYXNlQXVkaW9Db250ZXh0OjpkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKQoreworICAg
IEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CisgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSB8fCBp
c0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9maW5pc2hl
ZE5vZGVzKQorICAgICAgICBkZXJlZk5vZGUoKm5vZGUpOworCisgICAgbV9maW5pc2hlZE5vZGVz
LmNsZWFyKCk7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6cmVmTm9kZShBdWRpb05vZGUm
IG5vZGUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBdXRvTG9ja2VyIGxv
Y2tlcigqdGhpcyk7CisgICAgCisgICAgbm9kZS5yZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVj
dGlvbik7CisgICAgbV9yZWZlcmVuY2VkTm9kZXMuYXBwZW5kKCZub2RlKTsKK30KKwordm9pZCBC
YXNlQXVkaW9Db250ZXh0OjpkZXJlZk5vZGUoQXVkaW9Ob2RlJiBub2RlKQoreworICAgIEFTU0VS
VChpc0dyYXBoT3duZXIoKSk7CisgICAgCisgICAgbm9kZS5kZXJlZihBdWRpb05vZGU6OlJlZlR5
cGVDb25uZWN0aW9uKTsKKworICAgIEFTU0VSVChtX3JlZmVyZW5jZWROb2Rlcy5jb250YWlucygm
bm9kZSkpOworICAgIG1fcmVmZXJlbmNlZE5vZGVzLnJlbW92ZUZpcnN0KCZub2RlKTsKK30KKwor
dm9pZCBCYXNlQXVkaW9Db250ZXh0OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpICYmIGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKTsKKyAg
ICBmb3IgKGF1dG8mIG5vZGUgOiBtX3JlZmVyZW5jZWROb2RlcykKKyAgICAgICAgbm9kZS0+ZGVy
ZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7CisKKyAgICBtX3JlZmVyZW5jZWROb2Rl
cy5jbGVhcigpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmxvY2soYm9vbCYgbXVzdFJl
bGVhc2VMb2NrKQoreworICAgIC8vIERvbid0IGFsbG93IHJlZ3VsYXIgbG9jayBpbiByZWFsLXRp
bWUgYXVkaW8gdGhyZWFkLgorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBUaHJl
YWQmIHRoaXNUaHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKKworICAgIGlmICgmdGhpc1RocmVh
ZCA9PSBtX2dyYXBoT3duZXJUaHJlYWQpIHsKKyAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIHRo
ZSBsb2NrLgorICAgICAgICBtdXN0UmVsZWFzZUxvY2sgPSBmYWxzZTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBBY3F1aXJlIHRoZSBsb2NrLgorICAgICAgICBtX2NvbnRleHRHcmFwaE11dGV4
LmxvY2soKTsKKyAgICAgICAgbV9ncmFwaE93bmVyVGhyZWFkID0gJnRoaXNUaHJlYWQ7CisgICAg
ICAgIG11c3RSZWxlYXNlTG9jayA9IHRydWU7CisgICAgfQorfQorCitib29sIEJhc2VBdWRpb0Nv
bnRleHQ6OnRyeUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKQoreworICAgIFRocmVhZCYgdGhp
c1RocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOworICAgIGJvb2wgaXNBdWRpb1RocmVhZCA9ICZ0
aGlzVGhyZWFkID09IGF1ZGlvVGhyZWFkKCk7CisKKyAgICAvLyBUcnkgdG8gY2F0Y2ggY2FzZXMg
b2YgdXNpbmcgdHJ5IGxvY2sgb24gbWFpbiB0aHJlYWQgLSBpdCBzaG91bGQgdXNlIHJlZ3VsYXIg
bG9jay4KKyAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCB8fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQo
KSk7CisgICAgCisgICAgaWYgKCFpc0F1ZGlvVGhyZWFkKSB7CisgICAgICAgIC8vIEluIHJlbGVh
c2UgYnVpbGQgdHJlYXQgdHJ5TG9jaygpIGFzIGxvY2soKSAoc2luY2UgYWJvdmUgQVNTRVJUKGlz
QXVkaW9UaHJlYWQpIG5ldmVyIGZpcmVzKSAtIHRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvLgor
ICAgICAgICBsb2NrKG11c3RSZWxlYXNlTG9jayk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICBib29sIGhhc0xvY2s7CisgICAgCisgICAgaWYgKCZ0aGlzVGhyZWFkID09
IG1fZ3JhcGhPd25lclRocmVhZCkgeworICAgICAgICAvLyBUaHJlYWQgYWxyZWFkeSBoYXMgdGhl
IGxvY2suCisgICAgICAgIGhhc0xvY2sgPSB0cnVlOworICAgICAgICBtdXN0UmVsZWFzZUxvY2sg
PSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBEb24ndCBhbHJlYWR5IGhhdmUgdGhl
IGxvY2sgLSB0cnkgdG8gYWNxdWlyZSBpdC4KKyAgICAgICAgaGFzTG9jayA9IG1fY29udGV4dEdy
YXBoTXV0ZXgudHJ5TG9jaygpOworICAgICAgICAKKyAgICAgICAgaWYgKGhhc0xvY2spCisgICAg
ICAgICAgICBtX2dyYXBoT3duZXJUaHJlYWQgPSAmdGhpc1RocmVhZDsKKworICAgICAgICBtdXN0
UmVsZWFzZUxvY2sgPSBoYXNMb2NrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaGFzTG9jazsK
K30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0Ojp1bmxvY2soKQoreworICAgIEFTU0VSVChtX2dy
YXBoT3duZXJUaHJlYWQgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKworICAgIG1fZ3JhcGhPd25l
clRocmVhZCA9IG51bGxwdHI7CisgICAgbV9jb250ZXh0R3JhcGhNdXRleC51bmxvY2soKTsKK30K
KworYm9vbCBCYXNlQXVkaW9Db250ZXh0Ojppc0F1ZGlvVGhyZWFkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9hdWRpb1RocmVhZCA9PSAmVGhyZWFkOjpjdXJyZW50KCk7Cit9CisKK2Jvb2wgQmFz
ZUF1ZGlvQ29udGV4dDo6aXNHcmFwaE93bmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ncmFw
aE93bmVyVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKTsKK30KKwordm9pZCBCYXNlQXVkaW9D
b250ZXh0OjphZGREZWZlcnJlZEZpbmlzaERlcmVmKEF1ZGlvTm9kZSogbm9kZSkKK3sKKyAgICBB
U1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKKyAgICBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0LmFw
cGVuZChub2RlKTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjpoYW5kbGVQcmVSZW5kZXJU
YXNrcygpCit7CisgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7CisKKyAgICAvLyBBdCB0aGUg
YmVnaW5uaW5nIG9mIGV2ZXJ5IHJlbmRlciBxdWFudHVtLCB0cnkgdG8gdXBkYXRlIHRoZSBpbnRl
cm5hbCByZW5kZXJpbmcgZ3JhcGggc3RhdGUgKGZyb20gbWFpbiB0aHJlYWQgY2hhbmdlcykuCisg
ICAgLy8gSXQncyBPSyBpZiB0aGUgdHJ5TG9jaygpIGZhaWxzLCB3ZSdsbCBqdXN0IHRha2Ugc2xp
Z2h0bHkgbG9uZ2VyIHRvIHBpY2sgdXAgdGhlIGNoYW5nZXMuCisgICAgYm9vbCBtdXN0UmVsZWFz
ZUxvY2s7CisgICAgaWYgKHRyeUxvY2sobXVzdFJlbGVhc2VMb2NrKSkgeworICAgICAgICAvLyBG
aXh1cCB0aGUgc3RhdGUgb2YgYW55IGRpcnR5IEF1ZGlvU3VtbWluZ0p1bmN0aW9ucyBhbmQgQXVk
aW9Ob2RlT3V0cHV0cy4KKyAgICAgICAgaGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMo
KTsKKyAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7CisKKyAgICAgICAgdXBk
YXRlQXV0b21hdGljUHVsbE5vZGVzKCk7CisKKyAgICAgICAgaWYgKG11c3RSZWxlYXNlTG9jaykK
KyAgICAgICAgICAgIHVubG9jaygpOworICAgIH0KK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0
OjpoYW5kbGVQb3N0UmVuZGVyVGFza3MoKQoreworICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkp
OworCisgICAgLy8gTXVzdCB1c2UgYSB0cnlMb2NrKCkgaGVyZSB0b28uIERvbid0IHdvcnJ5LCB0
aGUgbG9jayB3aWxsIHZlcnkgcmFyZWx5IGJlIGNvbnRlbmRlZCBhbmQgdGhpcyBtZXRob2QgaXMg
Y2FsbGVkIGZyZXF1ZW50bHkuCisgICAgLy8gVGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbiBpcyB0
aGF0IHRoZXJlIHdpbGwgYmUgc29tZSBub2RlcyB3aGljaCB3aWxsIHRha2Ugc2xpZ2h0bHkgbG9u
Z2VyIHRoYW4gdXN1YWwgdG8gYmUgZGVsZXRlZCBvciByZW1vdmVkCisgICAgLy8gZnJvbSB0aGUg
cmVuZGVyIGdyYXBoIChpbiB3aGljaCBjYXNlIHRoZXknbGwgcmVuZGVyIHNpbGVuY2UpLgorICAg
IGJvb2wgbXVzdFJlbGVhc2VMb2NrOworICAgIGlmICh0cnlMb2NrKG11c3RSZWxlYXNlTG9jaykp
IHsKKyAgICAgICAgLy8gVGFrZSBjYXJlIG9mIGZpbmlzaGluZyBhbnkgZGVyZWZzIHdoZXJlIHRo
ZSB0cnlMb2NrKCkgZmFpbGVkIHByZXZpb3VzbHkuCisgICAgICAgIGhhbmRsZURlZmVycmVkRmlu
aXNoRGVyZWZzKCk7CisKKyAgICAgICAgLy8gRHluYW1pY2FsbHkgY2xlYW4gdXAgbm9kZXMgd2hp
Y2ggYXJlIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIGRlcmVmRmluaXNoZWRTb3VyY2VOb2Rl
cygpOworCisgICAgICAgIC8vIERvbid0IGRlbGV0ZSBpbiB0aGUgcmVhbC10aW1lIHRocmVhZC4g
TGV0IHRoZSBtYWluIHRocmVhZCBkbyBpdC4KKyAgICAgICAgLy8gUmVmLWNvdW50ZWQgb2JqZWN0
cyBoZWxkIGJ5IGNlcnRhaW4gQXVkaW9Ob2RlcyBtYXkgbm90IGJlIHRocmVhZC1zYWZlLgorICAg
ICAgICBzY2hlZHVsZU5vZGVEZWxldGlvbigpOworCisgICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0
ZSBvZiBhbnkgZGlydHkgQXVkaW9TdW1taW5nSnVuY3Rpb25zIGFuZCBBdWRpb05vZGVPdXRwdXRz
LgorICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpOworICAgICAgICBo
YW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsKKworICAgICAgICB1cGRhdGVBdXRvbWF0aWNQ
dWxsTm9kZXMoKTsKKworICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQorICAgICAgICAgICAg
dW5sb2NrKCk7CisgICAgfQorfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmhhbmRsZURlZmVy
cmVkRmluaXNoRGVyZWZzKCkKK3sKKyAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpICYmIGlzR3Jh
cGhPd25lcigpKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX2RlZmVycmVkRmluaXNoRGVyZWZM
aXN0KQorICAgICAgICBub2RlLT5maW5pc2hEZXJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0
aW9uKTsKKyAgICAKKyAgICBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0LmNsZWFyKCk7Cit9CisK
K3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSYgbm9kZSkK
K3sKKyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKGlzQXVkaW9UaHJlYWRG
aW5pc2hlZCgpKQorICAgICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKCZub2RlKTsKKyAgICBl
bHNlCisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQoJm5vZGUpOworCisg
ICAgLy8gVGhpcyBpcyBwcm9iYWJseSB0aGUgYmVzdCB0aW1lIGZvciB1cyB0byByZW1vdmUgdGhl
IG5vZGUgZnJvbSBhdXRvbWF0aWMgcHVsbCBsaXN0LAorICAgIC8vIHNpbmNlIGFsbCBjb25uZWN0
aW9ucyBhcmUgZ29uZSBhbmQgd2UgaG9sZCB0aGUgZ3JhcGggbG9jay4gVGhlbiB3aGVuIGhhbmRs
ZVBvc3RSZW5kZXJUYXNrcygpCisgICAgLy8gZ2V0cyBhIGNoYW5jZSB0byBzY2hlZHVsZSB0aGUg
ZGVsZXRpb24gd29yaywgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCkgYWxzbyBnZXRzIGEgY2hh
bmNlIHRvCisgICAgLy8gbW9kaWZ5IG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLgorICAg
IHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKG5vZGUpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRl
eHQ6OnNjaGVkdWxlTm9kZURlbGV0aW9uKCkKK3sKKyAgICBib29sIGlzR29vZCA9IG1faXNJbml0
aWFsaXplZCAmJiBpc0dyYXBoT3duZXIoKTsKKyAgICBBU1NFUlQoaXNHb29kKTsKKyAgICBpZiAo
IWlzR29vZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFrZSBzdXJlIHRvIGNhbGwgZGVs
ZXRlTWFya2VkTm9kZXMoKSBvbiBtYWluIHRocmVhZC4gICAgCisgICAgaWYgKG1fbm9kZXNNYXJr
ZWRGb3JEZWxldGlvbi5zaXplKCkgJiYgIW1faXNEZWxldGlvblNjaGVkdWxlZCkgeworICAgICAg
ICBtX25vZGVzVG9EZWxldGUuYXBwZW5kVmVjdG9yKG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbik7
CisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5jbGVhcigpOworCisgICAgICAgIG1f
aXNEZWxldGlvblNjaGVkdWxlZCA9IHRydWU7CisKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIG11dGFibGUgeworICAgICAgICAgICAg
cHJvdGVjdGVkVGhpcy0+ZGVsZXRlTWFya2VkTm9kZXMoKTsKKyAgICAgICAgfSk7CisgICAgfQor
fQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmRlbGV0ZU1hcmtlZE5vZGVzKCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gUHJvdGVjdCB0aGlzIG9iamVjdCBmcm9t
IGJlaW5nIGRlbGV0ZWQgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIG11dGV4IGxvY2tlZCBieSBBdXRv
TG9ja2VyLgorICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOworICAgIHsK
KyAgICAgICAgQXV0b0xvY2tlciBsb2NrZXIoKnRoaXMpOworCisgICAgICAgIHdoaWxlIChtX25v
ZGVzVG9EZWxldGUuc2l6ZSgpKSB7CisgICAgICAgICAgICBBdWRpb05vZGUqIG5vZGUgPSBtX25v
ZGVzVG9EZWxldGUudGFrZUxhc3QoKTsKKworICAgICAgICAgICAgLy8gQmVmb3JlIGRlbGV0aW5n
IHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9kZUlucHV0cyBmcm9tIG1fZGlydHlTdW1t
aW5nSnVuY3Rpb25zLgorICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMgPSBub2Rl
LT5udW1iZXJPZklucHV0cygpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mSW5wdXRzOyArK2kpCisgICAgICAgICAgICAgICAgbV9kaXJ0eVN1bW1pbmdKdW5j
dGlvbnMucmVtb3ZlKG5vZGUtPmlucHV0KGkpKTsKKworICAgICAgICAgICAgLy8gQmVmb3JlIGRl
bGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9kZU91dHB1dHMgZnJvbSBtX2Rp
cnR5QXVkaW9Ob2RlT3V0cHV0cy4KKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0
cyA9IG5vZGUtPm51bWJlck9mT3V0cHV0cygpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mT3V0cHV0czsgKytpKQorICAgICAgICAgICAgICAgIG1fZGlydHlB
dWRpb05vZGVPdXRwdXRzLnJlbW92ZShub2RlLT5vdXRwdXQoaSkpOworCisgICAgICAgICAgICAv
LyBGaW5hbGx5LCBkZWxldGUgaXQuCisgICAgICAgICAgICBkZWxldGUgbm9kZTsKKyAgICAgICAg
fQorICAgICAgICBtX2lzRGVsZXRpb25TY2hlZHVsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3Zv
aWQgQmFzZUF1ZGlvQ29udGV4dDo6bWFya1N1bW1pbmdKdW5jdGlvbkRpcnR5KEF1ZGlvU3VtbWlu
Z0p1bmN0aW9uKiBzdW1taW5nSnVuY3Rpb24pCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigp
KTsgICAgCisgICAgbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMuYWRkKHN1bW1pbmdKdW5jdGlvbik7
Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6cmVtb3ZlTWFya2VkU3VtbWluZ0p1bmN0aW9u
KEF1ZGlvU3VtbWluZ0p1bmN0aW9uKiBzdW1taW5nSnVuY3Rpb24pCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBdXRvTG9ja2VyIGxvY2tlcigqdGhpcyk7CisgICAgbV9kaXJ0
eVN1bW1pbmdKdW5jdGlvbnMucmVtb3ZlKHN1bW1pbmdKdW5jdGlvbik7Cit9CisKK0V2ZW50VGFy
Z2V0SW50ZXJmYWNlIEJhc2VBdWRpb0NvbnRleHQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQmFzZUF1ZGlvQ29udGV4dEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlw
ZTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjptYXJrQXVkaW9Ob2RlT3V0cHV0RGlydHko
QXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsK
KyAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5hZGQob3V0cHV0KTsKK30KKwordm9pZCBCYXNl
QXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpCit7CisgICAg
QVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCisKKyAgICBmb3IgKGF1dG8mIGp1bmN0aW9uIDog
bV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMpCisgICAgICAgIGp1bmN0aW9uLT51cGRhdGVSZW5kZXJp
bmdTdGF0ZSgpOworCisgICAgbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMuY2xlYXIoKTsKK30KKwor
dm9pZCBCYXNlQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKQorewor
ICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7ICAgIAorCisgICAgZm9yIChhdXRvJiBvdXRwdXQg
OiBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cykKKyAgICAgICAgb3V0cHV0LT51cGRhdGVSZW5kZXJp
bmdTdGF0ZSgpOworCisgICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuY2xlYXIoKTsKK30KKwor
dm9pZCBCYXNlQXVkaW9Db250ZXh0OjphZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmIG5v
ZGUpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKKworICAgIGlmIChtX2F1dG9tYXRp
Y1B1bGxOb2Rlcy5hZGQoJm5vZGUpLmlzTmV3RW50cnkpCisgICAgICAgIG1fYXV0b21hdGljUHVs
bE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0Ojpy
ZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUKGlz
R3JhcGhPd25lcigpKTsKKworICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5yZW1vdmUoJm5v
ZGUpKQorICAgICAgICBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyA9IHRydWU7Cit9
CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6dXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCkKK3sK
KyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5v
ZGVzTmVlZFVwZGF0aW5nKSB7CisgICAgICAgIC8vIENvcHkgZnJvbSBtX2F1dG9tYXRpY1B1bGxO
b2RlcyB0byBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy4KKyAgICAgICAgbV9yZW5kZXJp
bmdBdXRvbWF0aWNQdWxsTm9kZXMucmVzaXplKG1fYXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7
CisKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGZvciAoYXV0byYgb3V0cHV0IDog
bV9hdXRvbWF0aWNQdWxsTm9kZXMpCisgICAgICAgICAgICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1
bGxOb2Rlc1tpKytdID0gb3V0cHV0OworCisgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVl
ZFVwZGF0aW5nID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnBy
b2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBB
U1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKKworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fcmVuZGVy
aW5nQXV0b21hdGljUHVsbE5vZGVzKQorICAgICAgICBub2RlLT5wcm9jZXNzSWZOZWNlc3Nhcnko
ZnJhbWVzVG9Qcm9jZXNzKTsKK30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogQXVkaW9Db250
ZXh0QmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFj
dGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkIEJhc2VB
dWRpb0NvbnRleHQ6Om5vZGVXaWxsQmVnaW5QbGF5YmFjaygpCit7CisgICAgLy8gQ2FsbGVkIGJ5
IHNjaGVkdWxlZCBBdWRpb05vZGVzIHdoZW4gY2xpZW50cyBzY2hlZHVsZSB0aGVpciBzdGFydCB0
aW1lcy4KKyAgICAvLyBQcmlvciB0byB0aGUgaW50cm9kdWN0aW9uIG9mIHN1c3BlbmQoKSwgcmVz
dW1lKCksIGFuZCBzdG9wKCksIHN0YXJ0aW5nCisgICAgLy8gYSBzY2hlZHVsZWQgQXVkaW9Ob2Rl
IHdvdWxkIHJlbW92ZSB0aGUgdXNlci1nZXN0dXJlIHJlc3RyaWN0aW9uLCBpZiBwcmVzZW50LAor
ICAgIC8vIGFuZCB3b3VsZCB0aHVzIHVubXV0ZSB0aGUgY29udGV4dC4gTm93IHRoYXQgQXVkaW9D
b250ZXh0IHN0YXlzIGluIHRoZQorICAgIC8vICJzdXNwZW5kZWQiIHN0YXRlIGlmIGEgdXNlci1n
ZXN0dXJlIHJlc3RyaWN0aW9uIGlzIHByZXNlbnQsIHN0YXJ0aW5nIGEKKyAgICAvLyBzY2hlZHVs
ZSBBdWRpb05vZGUgc2hvdWxkIHNldCB0aGUgc3RhdGUgdG8gInJ1bm5pbmciLCBidXQgb25seSBp
ZiB0aGUKKyAgICAvLyB1c2VyLWdlc3R1cmUgcmVzdHJpY3Rpb24gaXMgc2V0LgorICAgIGlmICh1
c2VyR2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFydCgpKQorICAgICAgICBzdGFydFJlbmRlcmlu
ZygpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGREb2N1bWVudEFsbG93V2ViQXVkaW9Ub0F1dG9Q
bGF5KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBpZiAoZG9jdW1lbnQucHJvY2Vz
c2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSB8fCBkb2N1bWVudC5pc0NhcHR1cmluZygpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzKCkuc2hvdWxkQXV0
b3BsYXlXZWJBdWRpb0ZvckFyYml0cmFyeVVzZXJHZXN0dXJlKCkgJiYgZG9jdW1lbnQudG9wRG9j
dW1lbnQoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24oKTsKK30KKworYm9vbCBCYXNlQXVkaW9Db250
ZXh0Ojp3aWxsQmVnaW5QbGF5YmFjaygpCit7CisgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5k
b2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICh1c2VyR2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7CisgICAgICAgIGlm
ICghc2hvdWxkRG9jdW1lbnRBbGxvd1dlYkF1ZGlvVG9BdXRvUGxheSgqZG9jdW1lbnQpKSB7Cisg
ICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJyZXR1cm5pbmcgZmFsc2UsIG5v
dCBwcm9jZXNzaW5nIHVzZXIgZ2VzdHVyZSBvciBjYXB0dXJpbmciKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9u
KEJhc2VBdWRpb0NvbnRleHQ6OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmlj
dGlvbik7CisgICAgfQorCisgICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0
KCkpIHsKKyAgICAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CisgICAgICAgIGlm
IChwYWdlICYmICFwYWdlLT5jYW5TdGFydE1lZGlhKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50
LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOworICAgICAgICAgICAgQUxXQVlTX0xP
RyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5nIGZhbHNlLCBwYWdlIGRvZXNuJ3QgYWxsb3cgbWVk
aWEgdG8gc3RhcnQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJhc2VBdWRpb0NvbnRleHQ6OlJlcXVpcmVQ
YWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7CisgICAgfQorICAgIAorICAgIGF1
dG8gd2lsbEJlZ2luID0gbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCk7
CisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5nICIsIHdpbGxCZWdpbik7
CisgICAgCisgICAgcmV0dXJuIHdpbGxCZWdpbjsKK30KKworYm9vbCBCYXNlQXVkaW9Db250ZXh0
Ojp3aWxsUGF1c2VQbGF5YmFjaygpCit7CisgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1
bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICh1c2VyR2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7CisgICAgICAgIGlmICgh
ZG9jdW1lbnQtPnByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQmFzZUF1ZGlv
Q29udGV4dDo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKKyAg
ICB9CisKKyAgICBpZiAocGFnZUNvbnNlbnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgeworICAg
ICAgICBhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgJiYg
IXBhZ2UtPmNhblN0YXJ0TWVkaWEoKSkgeworICAgICAgICAgICAgZG9jdW1lbnQtPmFkZE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCYXNlQXVkaW9Db250ZXh0
OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxQYXVzZVBsYXliYWNrKCk7
Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6c3RhcnRSZW5kZXJpbmcoKQoreworICAgIEFM
V0FZU19MT0coTE9HSURFTlRJRklFUik7CisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkIHx8ICF3
aWxsQmVnaW5QbGF5YmFjaygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYWtlUGVuZGluZ0Fj
dGl2aXR5KCk7CisKKyAgICBkZXN0aW5hdGlvbigpLT5zdGFydFJlbmRlcmluZygpOworICAgIHNl
dFN0YXRlKFN0YXRlOjpSdW5uaW5nKTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjptZWRp
YUNhblN0YXJ0KERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGRvY3Vt
ZW50LCAmZG9jdW1lbnQgPT0gdGhpcy0+ZG9jdW1lbnQoKSk7CisgICAgcmVtb3ZlQmVoYXZpb3JS
ZXN0cmljdGlvbihCYXNlQXVkaW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0
YXJ0UmVzdHJpY3Rpb24pOworICAgIG1heVJlc3VtZVBsYXliYWNrKHRydWUpOworfQorCitNZWRp
YVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgQmFzZUF1ZGlvQ29udGV4dDo6bWVkaWFTdGF0ZSgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2lzU3RvcFNjaGVkdWxlZCAmJiBtX2Rlc3RpbmF0aW9uTm9k
ZSAmJiBtX2Rlc3RpbmF0aW9uTm9kZS0+aXNQbGF5aW5nQXVkaW8oKSkKKyAgICAgICAgcmV0dXJu
IE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ0F1ZGlvOworCisgICAgcmV0dXJuIE1lZGlhUHJvZHVj
ZXI6OklzTm90UGxheWluZzsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjpwYWdlTXV0ZWRT
dGF0ZURpZENoYW5nZSgpCit7CisgICAgaWYgKG1fZGVzdGluYXRpb25Ob2RlICYmIGRvY3VtZW50
KCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+c2V0
TXV0ZWQoZG9jdW1lbnQoKS0+cGFnZSgpLT5pc0F1ZGlvTXV0ZWQoKSk7Cit9CisKK3ZvaWQgQmFz
ZUF1ZGlvQ29udGV4dDo6aXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKQoreworICAgIC8vIE1ha2Ug
c3VyZSB0byBjYWxsIERvY3VtZW50Ojp1cGRhdGVJc1BsYXlpbmdNZWRpYSgpIG9uIHRoZSBtYWlu
IHRocmVhZCwgc2luY2UKKyAgICAvLyB3ZSBjb3VsZCBiZSBvbiB0aGUgYXVkaW8gSS9PIHRocmVh
ZCBoZXJlIGFuZCB0aGUgY2FsbCBpbnRvIFdlYkNvcmUgY291bGQgYmxvY2suCisgICAgY2FsbE9u
TWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIGlm
IChwcm90ZWN0ZWRUaGlzLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+
ZG9jdW1lbnQoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKKyAgICB9KTsKK30KKwordm9pZCBC
YXNlQXVkaW9Db250ZXh0OjpmaW5pc2hlZFJlbmRlcmluZyhib29sIGRpZFJlbmRlcmluZykKK3sK
KyAgICBBU1NFUlQoaXNPZmZsaW5lQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gY2xlYXJQZW5kaW5nQWN0aXZpdHlJZkV4aXRFYXJseSA9IFdURjo6bWFrZVNjb3BlRXhpdChb
dGhpc10geworICAgICAgICBjbGVhclBlbmRpbmdBY3Rpdml0eSgpOworICAgIH0pOworCisKKyAg
ICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgaWYgKCFkaWRSZW5kZXJpbmcpCisg
ICAgICAgIHJldHVybjsKKworICAgIEF1ZGlvQnVmZmVyKiByZW5kZXJlZEJ1ZmZlciA9IG1fcmVu
ZGVyVGFyZ2V0LmdldCgpOworICAgIHNldFN0YXRlKFN0YXRlOjpDbG9zZWQpOworCisgICAgQVNT
RVJUKHJlbmRlcmVkQnVmZmVyKTsKKyAgICBpZiAoIXJlbmRlcmVkQnVmZmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBBdm9pZCBmaXJpbmcgdGhlIGV2ZW50IGlmIHRoZSBkb2N1bWVudCBo
YXMgYWxyZWFkeSBnb25lIGF3YXkuCisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjbGVhclBlbmRpbmdBY3Rpdml0eUlmRXhpdEVhcmx5LnJlbGVhc2Uo
KTsKKyAgICBtX2V2ZW50UXVldWUtPmVucXVldWVFdmVudChPZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQ6OmNyZWF0ZShyZW5kZXJlZEJ1ZmZlcikpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRl
eHQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQoreworICAgIEV2ZW50VGFyZ2V0OjpkaXNw
YXRjaEV2ZW50KGV2ZW50KTsKKyAgICBpZiAoZXZlbnQuZXZlbnRJbnRlcmZhY2UoKSA9PSBPZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnRJbnRlcmZhY2VUeXBlKQorICAgICAgICBjbGVhclBlbmRp
bmdBY3Rpdml0eSgpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmluY3JlbWVudEFjdGl2
ZVNvdXJjZUNvdW50KCkKK3sKKyAgICArK21fYWN0aXZlU291cmNlQ291bnQ7Cit9CisKK3ZvaWQg
QmFzZUF1ZGlvQ29udGV4dDo6ZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKQoreworICAgIC0t
bV9hY3RpdmVTb3VyY2VDb3VudDsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjpzdXNwZW5k
UmVuZGVyaW5nKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCit7CisgICAgaWYg
KGlzT2ZmbGluZUNvbnRleHQoKSB8fCBtX2lzU3RvcFNjaGVkdWxlZCkgeworICAgICAgICBwcm9t
aXNlLnJlamVjdChJbnZhbGlkU3RhdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgIHByb21pc2Uu
cmVzb2x2ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc3RhdGUgPT0g
U3RhdGU6OkNsb3NlZCB8fCBtX3N0YXRlID09IFN0YXRlOjpJbnRlcnJ1cHRlZCB8fCAhbV9kZXN0
aW5hdGlvbk5vZGUpIHsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGFkZFJlYWN0aW9uKFN0YXRlOjpTdXNwZW5kZWQsIFdURk1vdmUocHJv
bWlzZSkpOworCisgICAgaWYgKCF3aWxsUGF1c2VQbGF5YmFjaygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworCisgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN1c3Bl
bmQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICBzZXRT
dGF0ZShTdGF0ZTo6U3VzcGVuZGVkKTsKKyAgICB9KTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250
ZXh0OjpyZXN1bWVSZW5kZXJpbmcoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkK
K3sKKyAgICBpZiAoaXNPZmZsaW5lQ29udGV4dCgpIHx8IG1faXNTdG9wU2NoZWR1bGVkKSB7Cisg
ICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpSdW5uaW5nKSB7CisgICAgICAg
IHByb21pc2UucmVzb2x2ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNsb3NlZCB8fCAhbV9kZXN0aW5hdGlvbk5vZGUpIHsKKyAgICAgICAg
cHJvbWlzZS5yZWplY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFkZFJlYWN0
aW9uKFN0YXRlOjpSdW5uaW5nLCBXVEZNb3ZlKHByb21pc2UpKTsKKworICAgIGlmICghd2lsbEJl
Z2luUGxheWJhY2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF6eUluaXRpYWxpemUoKTsK
KworICAgIG1fZGVzdGluYXRpb25Ob2RlLT5yZXN1bWUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKV0geworICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6UnVubmluZyk7CisgICAg
fSk7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6c3VzcGVuZFBsYXliYWNrKCkKK3sKKyAg
ICBpZiAoIW1fZGVzdGluYXRpb25Ob2RlIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZCkgewor
ICAgICAgICBpZiAobV9tZWRpYVNlc3Npb24tPnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Np
b246OkludGVycnVwdGVkKQorICAgICAgICAgICAgc2V0U3RhdGUoU3RhdGU6OkludGVycnVwdGVk
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxhenlJbml0aWFsaXplKCk7CisKKyAg
ICBtX2Rlc3RpbmF0aW9uTm9kZS0+c3VzcGVuZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSB7CisgICAgICAgIGJvb2wgaW50ZXJydXB0ZWQgPSBtX21lZGlhU2Vzc2lvbi0+
c3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQ7CisgICAgICAgIHNl
dFN0YXRlKGludGVycnVwdGVkID8gU3RhdGU6OkludGVycnVwdGVkIDogU3RhdGU6OlN1c3BlbmRl
ZCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6bWF5UmVzdW1lUGxheWJh
Y2soYm9vbCBzaG91bGRSZXN1bWUpCit7CisgICAgaWYgKCFtX2Rlc3RpbmF0aW9uTm9kZSB8fCBt
X3N0YXRlID09IFN0YXRlOjpDbG9zZWQgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6UnVubmluZykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG91bGRSZXN1bWUpIHsKKyAgICAgICAgc2V0U3Rh
dGUoU3RhdGU6OlN1c3BlbmRlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IXdpbGxCZWdpblBsYXliYWNrKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGxhenlJbml0aWFs
aXplKCk7CisKKyAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+cmVzdW1lKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgc2V0U3RhdGUoU3RhdGU6OlJ1bm5pbmcp
OworICAgIH0pOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnBvc3RUYXNrKFdURjo6RnVu
Y3Rpb248dm9pZCgpPiYmIHRhc2spCit7CisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFdU
Rk1vdmUodGFzaykpOworfQorCitjb25zdCBTZWN1cml0eU9yaWdpbiogQmFzZUF1ZGlvQ29udGV4
dDo6b3JpZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
ID8gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpIDogbnVsbHB0cjsK
K30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7
CisgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlKTsK
K30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjpjbGVhclBlbmRpbmdBY3Rpdml0eSgpCit7Cisg
ICAgaWYgKCFtX3BlbmRpbmdBY3Rpdml0eSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGVuZGlu
Z0FjdGl2aXR5ID0gbnVsbHB0cjsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgc3BlY2lmaWMg
ZGVyZWYoKSBhbmQgcmVmKCkgY2FsbCBpbiBtYWtlUGVuZGluZ0FjdGl2aXR5KCkuCisgICAgZGVy
ZWYoKTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjptYWtlUGVuZGluZ0FjdGl2aXR5KCkK
K3sKKyAgICBpZiAobV9wZW5kaW5nQWN0aXZpdHkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Bl
bmRpbmdBY3Rpdml0eSA9IEFjdGl2ZURPTU9iamVjdDo6bWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhp
cyk7CisgICAgcmVmKCk7Cit9CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK1dURkxvZ0No
YW5uZWwmIEJhc2VBdWRpb0NvbnRleHQ6OmxvZ0NoYW5uZWwoKSBjb25zdAoreworICAgIHJldHVy
biBMb2dNZWRpYTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9CYXNlQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDczNzNmYTVmZTdmYTNhMDJi
NjM4Y2U3YjFlNDczYTNhMjZhZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9CYXNlQXVkaW9Db250ZXh0LmgKQEAgLTAsMCArMSw1MTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
CisjaW5jbHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgor
I2luY2x1ZGUgIkF1ZGlvQ29udGV4dFN0YXRlLmgiCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlv
bk5vZGUuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIk1lZGlhQ2FuU3Rh
cnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybU1lZGlhU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
KyNpbmNsdWRlICJWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQ29uc29sZVR5cGVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRmxvYXQzMkFy
cmF5Lmg+CisjaW5jbHVkZSA8YXRvbWljPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL0xvZ2dlckhlbHBlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJp
bmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQW5hbHlzZXJOb2RlOwor
Y2xhc3MgQXVkaW9CdWZmZXI7CitjbGFzcyBBdWRpb0J1ZmZlckNhbGxiYWNrOworY2xhc3MgQXVk
aW9CdWZmZXJTb3VyY2VOb2RlOworY2xhc3MgQXVkaW9MaXN0ZW5lcjsKK2NsYXNzIEF1ZGlvU3Vt
bWluZ0p1bmN0aW9uOworY2xhc3MgQmlxdWFkRmlsdGVyTm9kZTsKK2NsYXNzIENoYW5uZWxNZXJn
ZXJOb2RlOworY2xhc3MgQ2hhbm5lbFNwbGl0dGVyTm9kZTsKK2NsYXNzIENvbnZvbHZlck5vZGU7
CitjbGFzcyBEZWxheU5vZGU7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIER5bmFtaWNzQ29tcHJl
c3Nvck5vZGU7CitjbGFzcyBHYWluTm9kZTsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFz
cyBNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU7CitjbGFzcyBNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGU7CitjbGFzcyBNZWRpYVN0cmVhbTsKK2NsYXNzIE1lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGU7CitjbGFzcyBNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZTsKK2NsYXNzIE9z
Y2lsbGF0b3JOb2RlOworY2xhc3MgUGFubmVyTm9kZTsKK2NsYXNzIFBlcmlvZGljV2F2ZTsKK2Ns
YXNzIFNjcmlwdFByb2Nlc3Nvck5vZGU7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFdh
dmVTaGFwZXJOb2RlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiBjbGFzcyBET01Qcm9t
aXNlRGVmZXJyZWQ7CisKKy8vIEZJWE1FOiBXZSBuZWVkIHRvIHJlbmFtZSB0aGlzIG5vdyB0aGF0
IHRoZXJlIGlzIGFsc28gQmFzZUF1ZGlvQ29udGV4dC4KK2NsYXNzIEF1ZGlvQ29udGV4dEJhc2UK
KyAgICA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QKKyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxBdWRpb0NvbnRleHRCYXNlPgorICAgICwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElu
bGluZURhdGEKKyAgICAsIHB1YmxpYyBNZWRpYUNhblN0YXJ0TGlzdGVuZXIKKyAgICAsIHB1Ymxp
YyBNZWRpYVByb2R1Y2VyCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwdWJsaWMg
TG9nZ2VySGVscGVyCisjZW5kaWYKK3sKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEF1ZGlv
Q29udGV4dEJhc2UpOworcHVibGljOgorICAgIHZpcnR1YWwgfkF1ZGlvQ29udGV4dEJhc2UoKSA9
IGRlZmF1bHQ7CisKKyAgICAvLyBSZWNvbmNpbGUgcmVmL2RlcmVmIHdoaWNoIGFyZSBkZWZpbmVk
IGJvdGggaW4gVGhyZWFkU2FmZVJlZkNvdW50ZWQgYW5kIEV2ZW50VGFyZ2V0LgorICAgIHVzaW5n
IFRocmVhZFNhZmVSZWZDb3VudGVkOjpyZWY7CisgICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ6OmRlcmVmOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgc2l6ZV90
IGN1cnJlbnRTYW1wbGVGcmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHNhbXBs
ZVJhdGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgY3VycmVudFRpbWUoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzR3JhcGhPd25lcigpIGNvbnN0ID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRBdWRpb1RocmVhZChUaHJlYWQmKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzQXVkaW9UaHJlYWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzQXVkaW9U
aHJlYWRGaW5pc2hlZCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBpc1BsYXlpbmdBdWRpb0Rp
ZENoYW5nZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbm9kZVdpbGxCZWdpblBsYXliYWNrKCkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU3RvcHBlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4oKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvckRlbGV0
aW9uKEF1ZGlvTm9kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlTWFya2VkTm9kZXMo
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUHJlUmVuZGVyVGFza3MoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGFkZERlZmVycmVkRmluaXNoRGVyZWYoQXVkaW9Ob2RlKikg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZU1hcmtlZFN1bW1pbmdKdW5jdGlvbihBdWRp
b1N1bW1pbmdKdW5jdGlvbiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1N1bW1pbmdKdW5j
dGlvbkRpcnR5KEF1ZGlvU3VtbWluZ0p1bmN0aW9uKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBt
YXJrQXVkaW9Ob2RlT3V0cHV0RGlydHkoQXVkaW9Ob2RlT3V0cHV0KikgPSAwOworCisgICAgZW51
bSBCZWhhdmlvclJlc3RyaWN0aW9uRmxhZ3MgeworICAgICAgICBOb1Jlc3RyaWN0aW9ucyA9IDAs
CisgICAgICAgIFJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbiA9IDEg
PDwgMCwKKyAgICAgICAgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9u
ID0gMSA8PCAxLAorICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBCZWhhdmlvclJlc3RyaWN0
aW9uczsKKyAgICB2aXJ0dWFsIEJlaGF2aW9yUmVzdHJpY3Rpb25zIGJlaGF2aW9yUmVzdHJpY3Rp
b25zKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9u
KEJlaGF2aW9yUmVzdHJpY3Rpb25zKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUJlaGF2
aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMpID0gMDsKKworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogbmV4dEF1ZGlvTm9kZUxvZ0lk
ZW50aWZpZXIoKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCB2b2lkKiBuZXh0QXVkaW9QYXJhbWV0
ZXJMb2dJZGVudGlmaWVyKCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQXV0
b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVB
dXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05vZGUqKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZmluaXNoZWRSZW5kZXJpbmcoYm9vbCBkaWRSZW5kZXJpbmcpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBpbmNyZW1lbnRDb25uZWN0aW9uQ291bnQoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
ZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc09m
ZmxpbmVDb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0F1ZGlvQ29udGV4
dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNXZWJLaXRBdWRpb0NvbnRleHQoKSBj
b25zdCA9IDA7CisKKyAgICAvLyBtdXN0UmVsZWFzZUxvY2sgaXMgc2V0IHRvIHRydWUgaWYgd2Ug
YWNxdWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRob2QgY2FsbCBhbmQgY2FsbGVyIG11c3QgdW5s
b2NrKCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjcXVpcmVkLgorICAgIHZpcnR1YWwg
dm9pZCBsb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jaykgPSAwOworICAgIHZpcnR1YWwgYm9vbCB0
cnlMb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1bmxv
Y2soKSA9IDA7CisKKyAgICBjbGFzcyBBdXRvTG9ja2VyIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IGV4cGxpY2l0IEF1dG9Mb2NrZXIoQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCkKKyAgICAgICAg
ICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC5sb2NrKG1fbXVzdFJlbGVhc2VMb2NrKTsKKyAgICAgICAgfQorCisgICAgICAgIH5BdXRvTG9j
a2VyKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fbXVzdFJlbGVhc2VMb2NrKQorICAg
ICAgICAgICAgICAgIG1fY29udGV4dC51bmxvY2soKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgQXVkaW9Db250ZXh0QmFzZSYgbV9jb250ZXh0OworICAgICAgICBib29sIG1f
bXVzdFJlbGVhc2VMb2NrOworICAgIH07CisKKyAgICAvLyBFdmVudFRhcmdldAorICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQorICAgIHZvaWQg
ZGVyZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgZXhwbGljaXQgQXVkaW9Db250ZXh0QmFzZShEb2N1bWVudCYpOworfTsKKworLy8gQXVkaW9D
b250ZXh0IGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB0aGUgd2ViIGF1ZGlvIEFQSSBhbmQgYWxsIEF1
ZGlvTm9kZXMgYXJlIGNyZWF0ZWQgZnJvbSBpdC4KKy8vIEZvciB0aHJlYWQgc2FmZXR5IGJldHdl
ZW4gdGhlIGF1ZGlvIHRocmVhZCBhbmQgdGhlIG1haW4gdGhyZWFkLCBpdCBoYXMgYSByZW5kZXJp
bmcgZ3JhcGggbG9ja2luZyBtZWNoYW5pc20uIAorCitjbGFzcyBCYXNlQXVkaW9Db250ZXh0Cisg
ICAgOiBwdWJsaWMgQXVkaW9Db250ZXh0QmFzZQorICAgICwgcHJpdmF0ZSBQbGF0Zm9ybU1lZGlh
U2Vzc2lvbkNsaWVudAorICAgICwgcHJpdmF0ZSBWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50Cit7Cisg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChCYXNlQXVkaW9Db250ZXh0KTsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5CYXNlQXVkaW9Db250ZXh0KCk7CisKKyAgICBib29sIGlzSW5pdGlhbGl6ZWQo
KSBjb25zdCBmaW5hbDsKKyAgICAKKyAgICBib29sIGlzT2ZmbGluZUNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2lzT2ZmbGluZUNvbnRleHQ7IH0KKworICAgIERvY3VtZW50SWRlbnRp
ZmllciBob3N0aW5nRG9jdW1lbnRJZGVudGlmaWVyKCkgY29uc3QgZmluYWw7CisKKyAgICBBdWRp
b0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9k
ZS5nZXQoKTsgfQorICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50U2Ft
cGxlRnJhbWUoKSA6IDA7IH0KKyAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50VGlt
ZSgpIDogMC47IH0KKyAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpIDogMC5m
OyB9CisgICAgdW5zaWduZWQgbG9uZyBhY3RpdmVTb3VyY2VDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fYWN0aXZlU291cmNlQ291bnQpOyB9CisKKyAg
ICB2b2lkIGluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkgZmluYWw7CisgICAgdm9pZCBkZWNy
ZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpIGZpbmFsOworICAgIAorICAgIEV4Y2VwdGlvbk9yPFJl
ZjxBdWRpb0J1ZmZlcj4+IGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBz
aXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUpOworICAgIEV4Y2VwdGlvbk9y
PFJlZjxBdWRpb0J1ZmZlcj4+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciYsIGJvb2wgbWl4VG9N
b25vKTsKKworICAgIC8vIEFzeW5jaHJvbm91cyBhdWRpbyBmaWxlIGRhdGEgZGVjb2RpbmcuCisg
ICAgdm9pZCBkZWNvZGVBdWRpb0RhdGEoUmVmPEFycmF5QnVmZmVyPiYmLCBSZWZQdHI8QXVkaW9C
dWZmZXJDYWxsYmFjaz4mJiwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYpOworCisgICAg
QXVkaW9MaXN0ZW5lciogbGlzdGVuZXIoKSB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9CisK
KyAgICB2b2lkIHN1c3BlbmRSZW5kZXJpbmcoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpOwor
ICAgIHZvaWQgcmVzdW1lUmVuZGVyaW5nKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmKTsKKwor
ICAgIHVzaW5nIFN0YXRlID0gQXVkaW9Db250ZXh0U3RhdGU7CisgICAgU3RhdGUgc3RhdGUoKSBj
b25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgYm9vbCBpc0Nsb3NlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZDsgfQorCisgICAgYm9vbCB3b3VsZFRhaW50T3Jp
Z2luKGNvbnN0IFVSTCYpIGNvbnN0OworCisgICAgLy8gVGhlIEF1ZGlvTm9kZSBjcmVhdGUgbWV0
aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCAoZnJvbSBKYXZhU2NyaXB0KS4KKyAg
ICBFeGNlcHRpb25PcjxSZWY8QXVkaW9CdWZmZXJTb3VyY2VOb2RlPj4gY3JlYXRlQnVmZmVyU291
cmNlKCk7CisgICAgRXhjZXB0aW9uT3I8UmVmPEdhaW5Ob2RlPj4gY3JlYXRlR2FpbigpOworICAg
IEV4Y2VwdGlvbk9yPFJlZjxCaXF1YWRGaWx0ZXJOb2RlPj4gY3JlYXRlQmlxdWFkRmlsdGVyKCk7
CisgICAgRXhjZXB0aW9uT3I8UmVmPFdhdmVTaGFwZXJOb2RlPj4gY3JlYXRlV2F2ZVNoYXBlcigp
OworICAgIEV4Y2VwdGlvbk9yPFJlZjxEZWxheU5vZGU+PiBjcmVhdGVEZWxheShkb3VibGUgbWF4
RGVsYXlUaW1lKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8UGFubmVyTm9kZT4+IGNyZWF0ZVBhbm5l
cigpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxDb252b2x2ZXJOb2RlPj4gY3JlYXRlQ29udm9sdmVy
KCk7CisgICAgRXhjZXB0aW9uT3I8UmVmPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+PiBjcmVhdGVE
eW5hbWljc0NvbXByZXNzb3IoKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8QW5hbHlzZXJOb2RlPj4g
Y3JlYXRlQW5hbHlzZXIoKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8U2NyaXB0UHJvY2Vzc29yTm9k
ZT4+IGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51bWJl
ck9mSW5wdXRDaGFubmVscywgc2l6ZV90IG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpOworICAgIEV4
Y2VwdGlvbk9yPFJlZjxDaGFubmVsU3BsaXR0ZXJOb2RlPj4gY3JlYXRlQ2hhbm5lbFNwbGl0dGVy
KHNpemVfdCBudW1iZXJPZk91dHB1dHMpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxDaGFubmVsTWVy
Z2VyTm9kZT4+IGNyZWF0ZUNoYW5uZWxNZXJnZXIoc2l6ZV90IG51bWJlck9mSW5wdXRzKTsKKyAg
ICBFeGNlcHRpb25PcjxSZWY8T3NjaWxsYXRvck5vZGU+PiBjcmVhdGVPc2NpbGxhdG9yKCk7Cisg
ICAgRXhjZXB0aW9uT3I8UmVmPFBlcmlvZGljV2F2ZT4+IGNyZWF0ZVBlcmlvZGljV2F2ZShGbG9h
dDMyQXJyYXkmIHJlYWwsIEZsb2F0MzJBcnJheSYgaW1hZ2luYXJ5KTsKKworICAgIC8vIFdoZW4g
YSBzb3VyY2Ugbm9kZSBoYXMgbm8gbW9yZSBwcm9jZXNzaW5nIHRvIGRvIChoYXMgZmluaXNoZWQg
cGxheWluZyksIHRoZW4gaXQgdGVsbHMgdGhlIGNvbnRleHQgdG8gZGVyZWZlcmVuY2UgaXQuCisg
ICAgdm9pZCBub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKEF1ZGlvTm9kZSopIGZpbmFsOwor
CisgICAgLy8gQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNoIHJlbmRlciBxdWFudHVtLgorICAg
IHZvaWQgaGFuZGxlUHJlUmVuZGVyVGFza3MoKSBmaW5hbDsKKworICAgIC8vIENhbGxlZCBhdCB0
aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCisgICAgdm9pZCBoYW5kbGVQb3N0UmVuZGVy
VGFza3MoKSBmaW5hbDsKKworICAgIC8vIENhbGxlZCBwZXJpb2RpY2FsbHkgYXQgdGhlIGVuZCBv
ZiBlYWNoIHJlbmRlciBxdWFudHVtIHRvIGRlcmVmZXJlbmNlIGZpbmlzaGVkIHNvdXJjZSBub2Rl
cy4KKyAgICB2b2lkIGRlcmVmRmluaXNoZWRTb3VyY2VOb2RlcygpOworCisgICAgLy8gV2Ugc2No
ZWR1bGUgZGVsZXRpb24gb2YgYWxsIG1hcmtlZCBub2RlcyBhdCB0aGUgZW5kIG9mIGVhY2ggcmVh
bHRpbWUgcmVuZGVyIHF1YW50dW0uCisgICAgdm9pZCBtYXJrRm9yRGVsZXRpb24oQXVkaW9Ob2Rl
JikgZmluYWw7CisgICAgdm9pZCBkZWxldGVNYXJrZWROb2RlcygpIGZpbmFsOworCisgICAgLy8g
QXVkaW9Db250ZXh0IGNhbiBwdWxsIG5vZGUocykgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBx
dWFudHVtIGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVjdGVkIHRvIGFueSBkb3duc3RyZWFt
IG5vZGVzLgorICAgIC8vIFRoZXNlIHR3byBtZXRob2RzIGFyZSBjYWxsZWQgYnkgdGhlIG5vZGVz
IHdobyB3YW50IHRvIGFkZC9yZW1vdmUgdGhlbXNlbHZlcyBpbnRvL2Zyb20gdGhlIGF1dG9tYXRp
YyBwdWxsIGxpc3RzLgorICAgIHZvaWQgYWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJikg
ZmluYWw7CisgICAgdm9pZCByZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKSBmaW5h
bDsKKworICAgIC8vIENhbGxlZCByaWdodCBiZWZvcmUgaGFuZGxlUG9zdFJlbmRlclRhc2tzKCkg
dG8gaGFuZGxlIG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgcHVsbGVkIGV2ZW4gd2hlbiB0aGV5IGFy
ZSBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nLgorICAgIHZvaWQgcHJvY2Vzc0F1dG9tYXRpY1B1
bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBmaW5hbDsKKworICAgIC8vIEtlZXBzIHRy
YWNrIG9mIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgbWFkZS4KKyAgICB2b2lkIGluY3JlbWVu
dENvbm5lY3Rpb25Db3VudCgpIGZpbmFsCisgICAgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgICAgICBtX2Nvbm5lY3Rpb25Db3VudCsrOworICAgIH0KKworICAgIHVuc2ln
bmVkIGNvbm5lY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbkNvdW50OyB9
CisKKyAgICAvLworICAgIC8vIFRocmVhZCBTYWZldHkgYW5kIEdyYXBoIExvY2tpbmc6CisgICAg
Ly8KKyAgICAKKyAgICB2b2lkIHNldEF1ZGlvVGhyZWFkKFRocmVhZCYgdGhyZWFkKSBmaW5hbCB7
IG1fYXVkaW9UaHJlYWQgPSAmdGhyZWFkOyB9IC8vIEZJWE1FOiBjaGVjayBlaXRoZXIgbm90IGlu
aXRpYWxpemVkIG9yIHRoZSBzYW1lCisgICAgVGhyZWFkKiBhdWRpb1RocmVhZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXVkaW9UaHJlYWQ7IH0KKyAgICBib29sIGlzQXVkaW9UaHJlYWQoKSBjb25zdCBm
aW5hbDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5IGFmdGVyIHRoZSBhdWRpbyB0aHJlYWQg
aGFzIGJlZW4gc3RhcnRlZCBhbmQgdGhlbiBzaHV0ZG93bi4KKyAgICBib29sIGlzQXVkaW9UaHJl
YWRGaW5pc2hlZCgpIGZpbmFsIHsgcmV0dXJuIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkOyB9Cisg
ICAgCisgICAgLy8gbXVzdFJlbGVhc2VMb2NrIGlzIHNldCB0byB0cnVlIGlmIHdlIGFjcXVpcmVk
IHRoZSBsb2NrIGluIHRoaXMgbWV0aG9kIGNhbGwgYW5kIGNhbGxlciBtdXN0IHVubG9jaygpLCBm
YWxzZSBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3F1aXJlZC4KKyAgICB2b2lkIGxvY2soYm9vbCYg
bXVzdFJlbGVhc2VMb2NrKSBmaW5hbDsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBvd24g
dGhlIGxvY2suCisgICAgLy8gbXVzdFJlbGVhc2VMb2NrIGlzIHNldCB0byB0cnVlIGlmIHdlIGFj
cXVpcmVkIHRoZSBsb2NrIGluIHRoaXMgbWV0aG9kIGNhbGwgYW5kIGNhbGxlciBtdXN0IHVubG9j
aygpLCBmYWxzZSBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3F1aXJlZC4KKyAgICBib29sIHRyeUxv
Y2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKSBmaW5hbDsKKworICAgIHZvaWQgdW5sb2NrKCkgZmlu
YWw7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB0aHJlYWQgb3ducyB0aGUgY29udGV4
dCdzIGxvY2suCisgICAgYm9vbCBpc0dyYXBoT3duZXIoKSBjb25zdCBmaW5hbDsKKworICAgIC8v
IFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYW5uZWxzIHdlIGNhbiBzdXBwb3J0Lgor
ICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhOdW1iZXJPZkNoYW5uZWxzKCkgeyByZXR1cm4gTWF4TnVt
YmVyT2ZDaGFubmVsczsgfQorICAgIAorICAgIC8vIEluIEF1ZGlvTm9kZTo6ZGVyZWYoKSBhIHRy
eUxvY2soKSBpcyB1c2VkIGZvciBjYWxsaW5nIGZpbmlzaERlcmVmKCksIGJ1dCBpZiBpdCBmYWls
cyBrZWVwIHRyYWNrIGhlcmUuCisgICAgdm9pZCBhZGREZWZlcnJlZEZpbmlzaERlcmVmKEF1ZGlv
Tm9kZSopIGZpbmFsOworCisgICAgLy8gSW4gdGhlIGF1ZGlvIHRocmVhZCBhdCB0aGUgc3RhcnQg
b2YgZWFjaCByZW5kZXIgY3ljbGUsIHdlJ2xsIGNhbGwgaGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJl
ZnMoKS4KKyAgICB2b2lkIGhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCk7CisKKyAgICAvLyBP
bmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGdyYXBoIGxvY2sgaXMgaGVsZC4KKyAgICB2b2lkIG1hcmtT
dW1taW5nSnVuY3Rpb25EaXJ0eShBdWRpb1N1bW1pbmdKdW5jdGlvbiopIGZpbmFsOworICAgIHZv
aWQgbWFya0F1ZGlvTm9kZU91dHB1dERpcnR5KEF1ZGlvTm9kZU91dHB1dCopIGZpbmFsOworCisg
ICAgLy8gTXVzdCBiZSBjYWxsZWQgb24gbWFpbiB0aHJlYWQuCisgICAgdm9pZCByZW1vdmVNYXJr
ZWRTdW1taW5nSnVuY3Rpb24oQXVkaW9TdW1taW5nSnVuY3Rpb24qKSBmaW5hbDsKKworICAgIC8v
IEV2ZW50VGFyZ2V0CisgICAgRXZlbnRUYXJnZXRJbnRlcmZhY2UgZXZlbnRUYXJnZXRJbnRlcmZh
Y2UoKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKyAgICB2b2lk
IGZpbmlzaGVkUmVuZGVyaW5nKGJvb2wgZGlkUmVuZGVyaW5nKSBmaW5hbDsKKworICAgIHN0YXRp
YyB1bnNpZ25lZCBzX2hhcmR3YXJlQ29udGV4dENvdW50OworCisgICAgLy8gUmVzdHJpY3Rpb25z
IHRvIGNoYW5nZSBkZWZhdWx0IGJlaGF2aW9ycy4KKyAgICBCZWhhdmlvclJlc3RyaWN0aW9ucyBi
ZWhhdmlvclJlc3RyaWN0aW9ucygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fcmVzdHJpY3Rpb25z
OyB9CisgICAgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25z
IHJlc3RyaWN0aW9uKSBmaW5hbCB7IG1fcmVzdHJpY3Rpb25zIHw9IHJlc3RyaWN0aW9uOyB9Cisg
ICAgdm9pZCByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zIHJl
c3RyaWN0aW9uKSBmaW5hbCB7IG1fcmVzdHJpY3Rpb25zICY9IH5yZXN0cmljdGlvbjsgfQorCisg
ICAgdm9pZCBpc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpIGZpbmFsOworCisgICAgdm9pZCBub2Rl
V2lsbEJlZ2luUGxheWJhY2soKSBmaW5hbDsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAor
ICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dnZXIu
Z2V0KCk7IH0KKyAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgp
IGNvbnN0IGZpbmFsOworICAgIGNvbnN0IHZvaWQqIG5leHRBdWRpb05vZGVMb2dJZGVudGlmaWVy
KCkgZmluYWwgeyByZXR1cm4gY2hpbGRMb2dJZGVudGlmaWVyKG1fbG9nSWRlbnRpZmllciwgKytt
X25leHRBdWRpb05vZGVJZGVudGlmaWVyKTsgfQorICAgIGNvbnN0IHZvaWQqIG5leHRBdWRpb1Bh
cmFtZXRlckxvZ0lkZW50aWZpZXIoKSBmaW5hbCB7IHJldHVybiBjaGlsZExvZ0lkZW50aWZpZXIo
bV9sb2dJZGVudGlmaWVyLCArK21fbmV4dEF1ZGlvUGFyYW1ldGVySWRlbnRpZmllcik7IH0KKyNl
bmRpZgorCisgICAgdm9pZCBwb3N0VGFzayhXVEY6OkZ1bmN0aW9uPHZvaWQoKT4mJikgZmluYWw7
CisgICAgYm9vbCBpc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzU3RvcFNjaGVk
dWxlZDsgfQorICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4oKSBjb25zdCBmaW5hbDsK
KyAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKSBmaW5hbDsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0
IEJhc2VBdWRpb0NvbnRleHQoRG9jdW1lbnQmKTsKKyAgICBCYXNlQXVkaW9Db250ZXh0KERvY3Vt
ZW50JiwgQXVkaW9CdWZmZXIqIHJlbmRlclRhcmdldCk7CisgICAgCisgICAgc3RhdGljIGJvb2wg
aXNTYW1wbGVSYXRlUmFuZ2VHb29kKGZsb2F0IHNhbXBsZVJhdGUpOworICAgIHZvaWQgY2xlYXJQ
ZW5kaW5nQWN0aXZpdHkoKTsKKyAgICB2b2lkIG1ha2VQZW5kaW5nQWN0aXZpdHkoKTsKKworICAg
IEF1ZGlvRGVzdGluYXRpb25Ob2RlKiBkZXN0aW5hdGlvbk5vZGUoKSBjb25zdCB7IHJldHVybiBt
X2Rlc3RpbmF0aW9uTm9kZS5nZXQoKTsgfQorCisgICAgdm9pZCBsYXp5SW5pdGlhbGl6ZSgpOwor
ICAgIHZvaWQgdW5pbml0aWFsaXplKCk7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAg
ICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiQmFzZUF1
ZGlvQ29udGV4dCI7IH0KKyNlbmRpZgorCisgICAgLy8gVGhlIGNvbnRleHQgaXRzZWxmIGtlZXBz
IGEgcmVmZXJlbmNlIHRvIGFsbCBzb3VyY2Ugbm9kZXMuICBUaGUgc291cmNlIG5vZGVzLCB0aGVu
IHJlZmVyZW5jZSBhbGwgbm9kZXMgdGhleSdyZSBjb25uZWN0ZWQgdG8uCisgICAgLy8gSW4gdHVy
biwgdGhlc2Ugbm9kZXMgcmVmZXJlbmNlIGFsbCBub2RlcyB0aGV5J3JlIGNvbm5lY3RlZCB0by4g
IEFsbCBub2RlcyBhcmUgdWx0aW1hdGVseSBjb25uZWN0ZWQgdG8gdGhlIEF1ZGlvRGVzdGluYXRp
b25Ob2RlLgorICAgIC8vIFdoZW4gdGhlIGNvbnRleHQgZGVyZWZlcmVuY2VzIGEgc291cmNlIG5v
ZGUsIGl0IHdpbGwgYmUgZGVhY3RpdmF0ZWQgZnJvbSB0aGUgcmVuZGVyaW5nIGdyYXBoIGFsb25n
IHdpdGggYWxsIG90aGVyIG5vZGVzIGl0IGlzCisgICAgLy8gdW5pcXVlbHkgY29ubmVjdGVkIHRv
LiAgU2VlIHRoZSBBdWRpb05vZGU6OnJlZigpIGFuZCBBdWRpb05vZGU6OmRlcmVmKCkgbWV0aG9k
cyBmb3IgbW9yZSBkZXRhaWxzLgorICAgIHZvaWQgcmVmTm9kZShBdWRpb05vZGUmKTsKKyAgICB2
b2lkIGRlcmVmTm9kZShBdWRpb05vZGUmKTsKKworICAgIHZvaWQgYWRkUmVhY3Rpb24oU3RhdGUs
IERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmKTsKKyAgICB2b2lkIHNldFN0YXRlKFN0YXRlKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIGNvbnN0cnVjdENvbW1vbigpOworCisgICAgYm9vbCB3aWxs
QmVnaW5QbGF5YmFjaygpOworICAgIGJvb2wgd2lsbFBhdXNlUGxheWJhY2soKTsKKworICAgIGJv
b2wgdXNlckdlc3R1cmVSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSBjb25zdCB7IHJldHVybiAhaXNP
ZmZsaW5lQ29udGV4dCgpICYmIG1fcmVzdHJpY3Rpb25zICYgUmVxdWlyZVVzZXJHZXN0dXJlRm9y
QXVkaW9TdGFydFJlc3RyaWN0aW9uOyB9CisgICAgYm9vbCBwYWdlQ29uc2VudFJlcXVpcmVkRm9y
QXVkaW9TdGFydCgpIGNvbnN0IHsgcmV0dXJuICFpc09mZmxpbmVDb250ZXh0KCkgJiYgbV9yZXN0
cmljdGlvbnMgJiBSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb247IH0K
KworICAgIHZvaWQgY2xlYXIoKTsKKworICAgIHZvaWQgc2NoZWR1bGVOb2RlRGVsZXRpb24oKTsK
KworICAgIHZvaWQgbWVkaWFDYW5TdGFydChEb2N1bWVudCYpIG92ZXJyaWRlOworCisgICAgLy8g
RXZlbnRUYXJnZXQKKyAgICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBmaW5hbDsKKworICAg
IC8vIE1lZGlhUHJvZHVjZXIKKyAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbWVk
aWFTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcGFnZU11dGVkU3RhdGVEaWRDaGFu
Z2UoKSBvdmVycmlkZTsKKworICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCisgICAgdm9pZCBz
dXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pIGZpbmFsOworICAgIHZvaWQgcmVzdW1lKCkgZmlu
YWw7CisgICAgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CisgICAgY29uc3QgY2hhciogYWN0aXZlRE9N
T2JqZWN0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gV2hlbiB0aGUgY29udGV4dCBn
b2VzIGF3YXksIHRoZXJlIG1pZ2h0IHN0aWxsIGJlIHNvbWUgc291cmNlcyB3aGljaCBoYXZlbid0
IGZpbmlzaGVkIHBsYXlpbmcuCisgICAgLy8gTWFrZSBzdXJlIHRvIGRlcmVmZXJlbmNlIHRoZW0g
aGVyZS4KKyAgICB2b2lkIGRlcmVmVW5maW5pc2hlZFNvdXJjZU5vZGVzKCk7CisKKyAgICAvLyBQ
bGF0Zm9ybU1lZGlhU2Vzc2lvbkNsaWVudAorICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNZWRp
YVR5cGUgbWVkaWFUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1NZWRpYVNl
c3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW87IH0KKyAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6
TWVkaWFUeXBlIHByZXNlbnRhdGlvblR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBQbGF0
Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlOjpXZWJBdWRpbzsgfQorICAgIHZvaWQgbWF5UmVz
dW1lUGxheWJhY2soYm9vbCBzaG91bGRSZXN1bWUpIG92ZXJyaWRlOworICAgIHZvaWQgc3VzcGVu
ZFBsYXliYWNrKCkgb3ZlcnJpZGU7CisgICAgYm9vbCBjYW5SZWNlaXZlUmVtb3RlQ29udHJvbENv
bW1hbmRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2b2lkIGRpZFJl
Y2VpdmVSZW1vdGVDb250cm9sQ29tbWFuZChQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UmVtb3RlQ29u
dHJvbENvbW1hbmRUeXBlLCBjb25zdCBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UmVtb3RlQ29tbWFu
ZEFyZ3VtZW50Kikgb3ZlcnJpZGUgeyB9CisgICAgYm9vbCBzdXBwb3J0c1NlZWtpbmcoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgc2hvdWxkT3ZlcnJpZGVCYWNr
Z3JvdW5kUGxheWJhY2tSZXN0cmljdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0
aW9uVHlwZSkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGNhblBy
b2R1Y2VBdWRpbygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGlzU3Vz
cGVuZGVkKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHZpc2liaWxpdHlTdGF0ZUNoYW5nZWQo
KSBmaW5hbDsKKworICAgIGJvb2wgaXNBdWRpb0NvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CisgICAgYm9vbCBpc1dlYktpdEF1ZGlvQ29udGV4dCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIGZhbHNlOyB9CisKKyAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9TdW1taW5nSnVuY3Rp
b25zKCk7CisgICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsKKworICAgIHZv
aWQgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCk7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKKyAgICBSZWY8TG9nZ2VyPiBtX2xvZ2dlcjsKKyAgICBjb25zdCB2b2lkKiBtX2xvZ0lkZW50
aWZpZXI7CisgICAgdWludDY0X3QgbV9uZXh0QXVkaW9Ob2RlSWRlbnRpZmllciB7IDAgfTsKKyAg
ICB1aW50NjRfdCBtX25leHRBdWRpb1BhcmFtZXRlcklkZW50aWZpZXIgeyAwIH07CisjZW5kaWYK
KworICAgIC8vIE9ubHkgYWNjZXNzZWQgaW4gdGhlIGF1ZGlvIHRocmVhZC4KKyAgICBWZWN0b3I8
QXVkaW9Ob2RlKj4gbV9maW5pc2hlZE5vZGVzOworCisgICAgLy8gV2UgZG9uJ3QgdXNlIFJlZlB0
cjxBdWRpb05vZGU+IGhlcmUgYmVjYXVzZSBBdWRpb05vZGUgaGFzIGEgbW9yZSBjb21wbGV4IHJl
ZigpIC8gZGVyZWYoKSBpbXBsZW1lbnRhdGlvbgorICAgIC8vIHdpdGggYW4gb3B0aW9uYWwgYXJn
dW1lbnQgZm9yIHJlZlR5cGUuICBXZSBuZWVkIHRvIHVzZSB0aGUgc3BlY2lhbCByZWZUeXBlOiBS
ZWZUeXBlQ29ubmVjdGlvbgorICAgIC8vIEVpdGhlciBhY2Nlc3NlZCB3aGVuIHRoZSBncmFwaCBs
b2NrIGlzIGhlbGQsIG9yIG9uIHRoZSBtYWluIHRocmVhZCB3aGVuIHRoZSBhdWRpbyB0aHJlYWQg
aGFzIGZpbmlzaGVkLgorICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX3JlZmVyZW5jZWROb2RlczsK
KworICAgIC8vIEFjY3VtdWxhdGUgbm9kZXMgd2hpY2ggbmVlZCB0byBiZSBkZWxldGVkIGhlcmUu
CisgICAgLy8gVGhpcyBpcyBjb3BpZWQgdG8gbV9ub2Rlc1RvRGVsZXRlIGF0IHRoZSBlbmQgb2Yg
YSByZW5kZXIgY3ljbGUgaW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzKCksIHdoZXJlIHdlJ3JlIGFz
c3VyZWQgb2YgYSBzdGFibGUgZ3JhcGgKKyAgICAvLyBzdGF0ZSB3aGljaCB3aWxsIGhhdmUgbm8g
cmVmZXJlbmNlcyB0byBhbnkgb2YgdGhlIG5vZGVzIGluIG1fbm9kZXNUb0RlbGV0ZSBvbmNlIHRo
ZSBjb250ZXh0IGxvY2sgaXMgcmVsZWFzZWQKKyAgICAvLyAod2hlbiBoYW5kbGVQb3N0UmVuZGVy
VGFza3MoKSBoYXMgY29tcGxldGVkKS4KKyAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9ub2Rlc01h
cmtlZEZvckRlbGV0aW9uOworCisgICAgLy8gVGhleSB3aWxsIGJlIHNjaGVkdWxlZCBmb3IgZGVs
ZXRpb24gKG9uIHRoZSBtYWluIHRocmVhZCkgYXQgdGhlIGVuZCBvZiBhIHJlbmRlciBjeWNsZSAo
aW4gcmVhbHRpbWUgdGhyZWFkKS4KKyAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9ub2Rlc1RvRGVs
ZXRlOworCisgICAgYm9vbCBtX2lzRGVsZXRpb25TY2hlZHVsZWQgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pc1N0b3BTY2hlZHVsZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0luaXRpYWxpemVk
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkIHsgZmFsc2UgfTsK
KyAgICBib29sIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nIHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faXNPZmZsaW5lQ29udGV4dCB7IGZhbHNlIH07CisKKyAgICAvLyBPbmx5IGFjY2Vz
c2VkIHdoZW4gdGhlIGdyYXBoIGxvY2sgaXMgaGVsZC4KKyAgICBIYXNoU2V0PEF1ZGlvU3VtbWlu
Z0p1bmN0aW9uKj4gbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnM7CisgICAgSGFzaFNldDxBdWRpb05v
ZGVPdXRwdXQqPiBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0czsKKworICAgIC8vIEZvciB0aGUgc2Fr
ZSBvZiB0aHJlYWQgc2FmZXR5LCB3ZSBtYWludGFpbiBhIHNlcGVyYXRlIFZlY3RvciBvZiBhdXRv
bWF0aWMgcHVsbCBub2RlcyBmb3IgcmVuZGVyaW5nIGluIG1fcmVuZGVyaW5nQXV0b21hdGljUHVs
bE5vZGVzLgorICAgIC8vIEl0IHdpbGwgYmUgY29waWVkIGZyb20gbV9hdXRvbWF0aWNQdWxsTm9k
ZXMgYnkgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCkgYXQgdGhlIHZlcnkgc3RhcnQgb3IgZW5k
IG9mIHRoZSByZW5kZXJpbmcgcXVhbnR1bS4KKyAgICBIYXNoU2V0PEF1ZGlvTm9kZSo+IG1fYXV0
b21hdGljUHVsbE5vZGVzOworICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX3JlbmRlcmluZ0F1dG9t
YXRpY1B1bGxOb2RlczsKKyAgICAvLyBPbmx5IGFjY2Vzc2VkIGluIHRoZSBhdWRpbyB0aHJlYWQu
CisgICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3Q7CisgICAg
VmVjdG9yPFZlY3RvcjxET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4+PiBtX3N0YXRlUmVhY3Rpb25z
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVkaWFTZXNzaW9uPiBtX21lZGlhU2Vz
c2lvbjsKKyAgICBVbmlxdWVSZWY8TWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlPiBtX2V2ZW50
UXVldWU7CisKKyAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyVGFyZ2V0OworICAgIFJl
ZlB0cjxBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gbV9kZXN0aW5hdGlvbk5vZGU7CisgICAgUmVmUHRy
PEF1ZGlvTGlzdGVuZXI+IG1fbGlzdGVuZXI7CisKKyAgICB1bnNpZ25lZCBtX2Nvbm5lY3Rpb25D
b3VudCB7IDAgfTsKKworICAgIC8vIEdyYXBoIGxvY2tpbmcuCisgICAgTG9jayBtX2NvbnRleHRH
cmFwaE11dGV4OworICAgIC8vIEZJWE1FOiBVc2luZyB2b2xhdGlsZSBzZWVtcyBpbmNvcnJlY3Qu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDMzMgor
ICAgIFRocmVhZCogdm9sYXRpbGUgbV9hdWRpb1RocmVhZCB7IG51bGxwdHIgfTsKKyAgICBUaHJl
YWQqIHZvbGF0aWxlIG1fZ3JhcGhPd25lclRocmVhZCB7IG51bGxwdHIgfTsgLy8gaWYgdGhlIGxv
Y2sgaXMgaGVsZCB0aGVuIHRoaXMgaXMgdGhlIHRocmVhZCB3aGljaCBvd25zIGl0LCBvdGhlcndp
c2UgPT0gbnVsbHB0ci4KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxBc3luY0F1ZGlvRGVjb2Rlcj4g
bV9hdWRpb0RlY29kZXI7CisKKyAgICAvLyBUaGlzIGlzIGNvbnNpZGVyaW5nIDMyIGlzIGxhcmdl
IGVub3VnaCBmb3IgbXVsdGlwbGUgY2hhbm5lbHMgYXVkaW8uIAorICAgIC8vIEl0IGlzIHNvbWV3
aGF0IGFyYml0cmFyeSBhbmQgY291bGQgYmUgaW5jcmVhc2VkIGlmIG5lY2Vzc2FyeS4KKyAgICBl
bnVtIHsgTWF4TnVtYmVyT2ZDaGFubmVscyA9IDMyIH07CisKKyAgICAvLyBOdW1iZXIgb2YgQXVk
aW9CdWZmZXJTb3VyY2VOb2RlcyB0aGF0IGFyZSBhY3RpdmUgKHBsYXlpbmcpLgorICAgIHN0ZDo6
YXRvbWljPGludD4gbV9hY3RpdmVTb3VyY2VDb3VudCB7IDAgfTsKKworICAgIEJlaGF2aW9yUmVz
dHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zIHsgTm9SZXN0cmljdGlvbnMgfTsKKworICAgIFN0YXRl
IG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CisgICAgUmVmUHRyPFBlbmRpbmdBY3Rpdml0
eTxCYXNlQXVkaW9Db250ZXh0Pj4gbV9wZW5kaW5nQWN0aXZpdHk7Cit9OworCit9IC8vIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpCYXNlQXVkaW9Db250
ZXh0KQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpBdWRpb0NvbnRleHRC
YXNlJiBjb250ZXh0KSB7IHJldHVybiBjb250ZXh0LmlzQXVkaW9Db250ZXh0KCk7IH0KK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyOTFjOTU4ZTg1Yjg1
M2M5YTRhNGIwZDkzODU2NzA4Y2QyZDdlZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaWRsCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworWworICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICBDb25kaXRpb25hbD1X
RUJfQVVESU8sCisgICAgRW5hYmxlZEJ5U2V0dGluZz1XZWJBdWRpbyZNb2Rlcm5VbnByZWZpeGVk
V2ViQXVkaW8sCisgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCitdIGludGVyZmFjZSBC
YXNlQXVkaW9Db250ZXh0IDogRXZlbnRUYXJnZXQgeworICAgIC8vIEFsbCByZW5kZXJlZCBhdWRp
byB1bHRpbWF0ZWx5IGNvbm5lY3RzIHRvIGRlc3RpbmF0aW9uLCB3aGljaCByZXByZXNlbnRzIHRo
ZSBhdWRpbyBoYXJkd2FyZS4KKyAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9EZXN0aW5hdGlv
bk5vZGUgZGVzdGluYXRpb247CisKKyAgICAvLyBBbGwgc2NoZWR1bGVkIHRpbWVzIGFyZSByZWxh
dGl2ZSB0byB0aGlzIHRpbWUgaW4gc2Vjb25kcy4KKyAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5y
ZXN0cmljdGVkIGRvdWJsZSBjdXJyZW50VGltZTsKKworICAgIC8vIEFsbCBBdWRpb05vZGVzIGlu
IHRoZSBjb250ZXh0IHJ1biBhdCB0aGlzIHNhbXBsZS1yYXRlIChzYW1wbGUtZnJhbWVzIHBlciBz
ZWNvbmQpLgorICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnJlc3RyaWN0ZWQgZmxvYXQgc2FtcGxl
UmF0ZTsKKworICAgIC8vIEFsbCBwYW5uaW5nIGlzIHJlbGF0aXZlIHRvIHRoaXMgbGlzdGVuZXIu
CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvTGlzdGVuZXIgbGlzdGVuZXI7CisKKyAgICBy
ZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9Db250ZXh0U3RhdGUgc3RhdGU7CisgICAgYXR0cmlidXRl
IEV2ZW50SGFuZGxlciBvbnN0YXRlY2hhbmdlOworICAgIAorICAgIFtNYXlUaHJvd0V4Y2VwdGlv
bl0gQXVkaW9CdWZmZXIgY3JlYXRlQnVmZmVyKHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZDaGFubmVs
cywgdW5zaWduZWQgbG9uZyBudW1iZXJPZkZyYW1lcywgdW5yZXN0cmljdGVkIGZsb2F0IHNhbXBs
ZVJhdGUpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gQXVkaW9CdWZmZXIgY3JlYXRlQnVmZmVy
KEFycmF5QnVmZmVyIGJ1ZmZlciwgYm9vbGVhbiBtaXhUb01vbm8pOworCisgICAgLy8gQXN5bmNo
cm9ub3VzIGF1ZGlvIGZpbGUgZGF0YSBkZWNvZGluZy4KKyAgICAvLyBGSVhNRTogc3VjY2Vzc0Nh
bGxiYWNrIHNob3VsZCBiZSBvcHRpb25hbCBhbmQgdGhlIGNhbGxiYWNrcyBzaG91bGQgbm90IGJl
IG51bGxhYmxlLiBUaGlzIHNob3VsZCBhbHNvIHJldHVybiBhIFByb21pc2UuCisgICAgdm9pZCBk
ZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIgYXVkaW9EYXRhLCBBdWRpb0J1ZmZlckNhbGxiYWNr
PyBzdWNjZXNzQ2FsbGJhY2ssIG9wdGlvbmFsIEF1ZGlvQnVmZmVyQ2FsbGJhY2s/IGVycm9yQ2Fs
bGJhY2spOworCisgICAgLy8gU291cmNlcworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gQXVkaW9C
dWZmZXJTb3VyY2VOb2RlIGNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworCisgICAgLy8gUHJvY2Vzc2lu
ZyBub2RlcworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gR2Fpbk5vZGUgY3JlYXRlR2FpbigpOwor
ICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRGVsYXlOb2RlIGNyZWF0ZURlbGF5KG9wdGlvbmFsIHVu
cmVzdHJpY3RlZCBkb3VibGUgbWF4RGVsYXlUaW1lID0gMSk7CisgICAgW01heVRocm93RXhjZXB0
aW9uXSBCaXF1YWRGaWx0ZXJOb2RlIGNyZWF0ZUJpcXVhZEZpbHRlcigpOworICAgIFtNYXlUaHJv
d0V4Y2VwdGlvbl0gV2F2ZVNoYXBlck5vZGUgY3JlYXRlV2F2ZVNoYXBlcigpOworICAgIFtNYXlU
aHJvd0V4Y2VwdGlvbl0gUGFubmVyTm9kZSBjcmVhdGVQYW5uZXIoKTsKKyAgICBbTWF5VGhyb3dF
eGNlcHRpb25dIENvbnZvbHZlck5vZGUgY3JlYXRlQ29udm9sdmVyKCk7CisgICAgW01heVRocm93
RXhjZXB0aW9uXSBEeW5hbWljc0NvbXByZXNzb3JOb2RlIGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3Nv
cigpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gQW5hbHlzZXJOb2RlIGNyZWF0ZUFuYWx5c2Vy
KCk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSBTY3JpcHRQcm9jZXNzb3JOb2RlIGNyZWF0ZVNj
cmlwdFByb2Nlc3NvcihvcHRpb25hbCB1bnNpZ25lZCBsb25nIGJ1ZmZlclNpemUgPSAwLCBvcHRp
b25hbCB1bnNpZ25lZCBsb25nIG51bWJlck9mSW5wdXRDaGFubmVscyA9IDIsIG9wdGlvbmFsIHVu
c2lnbmVkIGxvbmcgbnVtYmVyT2ZPdXRwdXRDaGFubmVscyA9IDIpOworICAgIFtNYXlUaHJvd0V4
Y2VwdGlvbl0gT3NjaWxsYXRvck5vZGUgY3JlYXRlT3NjaWxsYXRvcigpOworICAgIFtNYXlUaHJv
d0V4Y2VwdGlvbl0gUGVyaW9kaWNXYXZlIGNyZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkg
cmVhbCwgRmxvYXQzMkFycmF5IGltYWcpOworCisgICAgLy8gQ2hhbm5lbCBzcGxpdHRpbmcgYW5k
IG1lcmdpbmcKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIENoYW5uZWxTcGxpdHRlck5vZGUgY3Jl
YXRlQ2hhbm5lbFNwbGl0dGVyKG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZPdXRwdXRz
ID0gNik7CisgICAgW01heVRocm93RXhjZXB0aW9uXSBDaGFubmVsTWVyZ2VyTm9kZSBjcmVhdGVD
aGFubmVsTWVyZ2VyKG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZJbnB1dHMgPSA2KTsK
K307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5l
QXVkaW9Db250ZXh0LmNwcAppbmRleCA2OGZjOGQ2OGI1MWQxNzJkZWMzZGVlMTc1ZTA2YjFkMDFm
ODFhZjU4Li4xN2E3OWZlYTk5MjBkNjVkNWM1Yjc3NmJlNDY1ZThjYjczNTM3MmM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29u
dGV4dC5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKE9mZmxpbmVBdWRpb0NvbnRleHQpOwogCiBpbmxpbmUgT2ZmbGlu
ZUF1ZGlvQ29udGV4dDo6T2ZmbGluZUF1ZGlvQ29udGV4dChEb2N1bWVudCYgZG9jdW1lbnQsIEF1
ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpCi0gICAgOiBBdWRpb0NvbnRleHQoZG9jdW1lbnQsIHJl
bmRlclRhcmdldCkKKyAgICA6IEJhc2VBdWRpb0NvbnRleHQoZG9jdW1lbnQsIHJlbmRlclRhcmdl
dCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9P
ZmZsaW5lQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0NvbnRleHQuaAppbmRleCA4NWE1OTVmN2JjYzI0OWY1YmM5MDE2Yzc4OTdlODg3
NjMwNWVjZDkyLi5hY2JhYmI3YjM1YTAxYmNhNjRhYzNiNGQ4MzY0MDczOWIzMWVhMzk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0Nv
bnRleHQuaApAQCAtMjQsMTEgKzI0LDExIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
QXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQmFzZUF1ZGlvQ29udGV4dC5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIE9mZmxpbmVBdWRpb0NvbnRleHQgZmluYWwgOiBwdWJsaWMg
QXVkaW9Db250ZXh0IHsKK2NsYXNzIE9mZmxpbmVBdWRpb0NvbnRleHQgZmluYWwgOiBwdWJsaWMg
QmFzZUF1ZGlvQ29udGV4dCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChPZmZsaW5lQXVk
aW9Db250ZXh0KTsKIHB1YmxpYzoKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPE9mZmxpbmVB
dWRpb0NvbnRleHQ+PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51
bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQgc2FtcGxlUmF0ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0NvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVk
aW9Db250ZXh0LmlkbAppbmRleCAwZTcxYTA2YmMzZmEyZjhlODYyOTlmM2MyNDU4N2U2Y2JhOWM0
MTExLi43MjljNzU5ZjQ2MTdmMDc4MDEwMGEyMWM3Y2I5MzE1YjE1NmUwZTIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4
dC5pZGwKQEAgLTI2LDYgKzI2LDE2IEBACiAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElPLAogICAg
IEVuYWJsZWRCeVNldHRpbmc9TW9kZXJuVW5wcmVmaXhlZFdlYkF1ZGlvLAogICAgIEpTR2VuZXJh
dGVUb0pTT2JqZWN0LAotXSBpbnRlcmZhY2UgT2ZmbGluZUF1ZGlvQ29udGV4dCA6IEF1ZGlvQ29u
dGV4dCB7CitdIGludGVyZmFjZSBPZmZsaW5lQXVkaW9Db250ZXh0IDogQmFzZUF1ZGlvQ29udGV4
dCB7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIE1heVRocm93RXhjZXB0
aW9uXSBjb25zdHJ1Y3Rvcih1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5lbHMsIHVuc2lnbmVk
IGxvbmcgbnVtYmVyT2ZGcmFtZXMsIHVucmVzdHJpY3RlZCBmbG9hdCBzYW1wbGVSYXRlKTsKKwor
ICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKworICAgIFtJbXBsZW1lbnRlZEFzPXJlc3VtZVJl
bmRlcmluZ10gUHJvbWlzZTx2b2lkPiByZXN1bWUoKTsKKyAgICBbSW1wbGVtZW50ZWRBcz1zdXNw
ZW5kUmVuZGVyaW5nXSBQcm9taXNlPHZvaWQ+IHN1c3BlbmQoKTsgLy8gRklYTUU6IE1pc3Npbmcg
c3VzcGVuZFRpbWUgcGFyYW1ldGVyLgorCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0LgorICAg
IC8vIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKKworICAgIGF0dHJp
YnV0ZSBFdmVudEhhbmRsZXIgb25jb21wbGV0ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmNwcAppbmRleCBmMzgwMGYxY2VjNGM3MDJjYmI4MGI5
NGJiMmRhMTE4MzNlOGQ3YWMzLi45OWViYzVjZGFjYjk0YmMyMzIyYWMyYTQ5OGVjNmViOTcyNzlk
MTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5v
ZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5j
cHAKQEAgLTUzLDcgKzUzLDcgQEAgUGFubmVyTm9kZUJhc2U6OlBhbm5lck5vZGVCYXNlKEF1ZGlv
Q29udGV4dEJhc2UmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiB9CiAKLVBhbm5lck5v
ZGU6OlBhbm5lck5vZGUoQXVkaW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQor
UGFubmVyTm9kZTo6UGFubmVyTm9kZShCYXNlQXVkaW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBz
YW1wbGVSYXRlKQogICAgIDogUGFubmVyTm9kZUJhc2UoY29udGV4dCwgc2FtcGxlUmF0ZSkKICAg
ICAsIG1fcGFubmluZ01vZGVsKFBhbm5pbmdNb2RlbFR5cGU6OkhSVEYpCiAgICAgLCBtX2xhc3RH
YWluKC0xLjApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bh
bm5lck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5o
CmluZGV4IGYyZmYyZDIwOTYyNDQ0NDE1ODFmMTVjOTlkZjRkNTQ5YWRmOTNkMTAuLjQwN2NhNDFm
MTg3YTNiYzAxY2MyNTkyMDQ1ZjRkYzI3ZTc1YWE1ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oCkBAIC02MiwxNSArNjIsMTUgQEAgcHJvdGVjdGVk
OgogY2xhc3MgUGFubmVyTm9kZSBmaW5hbCA6IHB1YmxpYyBQYW5uZXJOb2RlQmFzZSB7CiAgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChQYW5uZXJOb2RlKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPFBhbm5lck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQmIGNvbnRleHQsIGZsb2F0IHNhbXBs
ZVJhdGUpCisgICAgc3RhdGljIFJlZjxQYW5uZXJOb2RlPiBjcmVhdGUoQmFzZUF1ZGlvQ29udGV4
dCYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFBhbm5lck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwogICAgIH0KIAogICAg
IHZpcnR1YWwgflBhbm5lck5vZGUoKTsKIAotICAgIEF1ZGlvQ29udGV4dCYgY29udGV4dCgpIHsg
cmV0dXJuIGRvd25jYXN0PEF1ZGlvQ29udGV4dD4oQXVkaW9Ob2RlOjpjb250ZXh0KCkpOyB9Ci0g
ICAgY29uc3QgQXVkaW9Db250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8
QXVkaW9Db250ZXh0PihBdWRpb05vZGU6OmNvbnRleHQoKSk7IH0KKyAgICBCYXNlQXVkaW9Db250
ZXh0JiBjb250ZXh0KCkgeyByZXR1cm4gZG93bmNhc3Q8QmFzZUF1ZGlvQ29udGV4dD4oQXVkaW9O
b2RlOjpjb250ZXh0KCkpOyB9CisgICAgY29uc3QgQmFzZUF1ZGlvQ29udGV4dCYgY29udGV4dCgp
IGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJhc2VBdWRpb0NvbnRleHQ+KEF1ZGlvTm9kZTo6Y29u
dGV4dCgpKTsgfQogCiAgICAgLy8gQXVkaW9Ob2RlCiAgICAgdm9pZCBwcm9jZXNzKHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpIG92ZXJyaWRlOwpAQCAtMTM0LDcgKzEzNCw3IEBAIHB1YmxpYzoKICAg
ICBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Bhbm5lciA/
IG1fcGFubmVyLT5sYXRlbmN5VGltZSgpIDogMDsgfQogCiBwcml2YXRlOgotICAgIFBhbm5lck5v
ZGUoQXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgUGFubmVyTm9kZShCYXNl
QXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBj
b21iaW5lZCBkaXN0YW5jZSBhbmQgY29uZSBnYWluIGF0dGVudWF0aW9uLgogICAgIGZsb2F0IGRp
c3RhbmNlQ29uZUdhaW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMjBhMjAxZGE1NDJlODNmMDliZTYx
YzhiYmYzNDY1NmNjOGQ2NDIzZC4uMDYzZjhlMDRhMTZmMDE4MjBlNDc1OTAzMWYxNzIwZTc3MTcy
ZWJmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTI0Miw2ICsyNDIsNyBAQCBNb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAKIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9jZXNzaW5n
RXZlbnQuY3BwCiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU2NoZWR1bGVkU291cmNlTm9kZS5jcHAK
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwCitNb2R1bGVzL3dlYmF1
ZGlvL0Jhc2VBdWRpb0NvbnRleHQuY3BwCiBNb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5l
bC5jcHAKIE1vZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAKIE1vZHVsZXMvd2Vi
YXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcApAQCAtMjc2Miw2ICsyNzYzLDcgQEAgSlNBdXRoZW50
aWNhdG9yQXR0ZXN0YXRpb25SZXNwb25zZS5jcHAKIEpTQXV0aGVudGljYXRvclJlc3BvbnNlLmNw
cAogSlNBdXRoZW50aWNhdG9yVHJhbnNwb3J0LmNwcAogSlNCYXJQcm9wLmNwcAorSlNCYXNlQXVk
aW9Db250ZXh0LmNwcAogSlNCYXNpY0NyZWRlbnRpYWwuY3BwCiBKU0JlZm9yZUxvYWRFdmVudC5j
cHAKIEpTQmVmb3JlVW5sb2FkRXZlbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjJkMGY5NTllMzRhNWExZTEyY2VhZDMw
Yjc0OWQzNjE3MGVjNjAwMy4uMjE1MjhmMjZkM2MzYWNiMjliODZmOTU3YWE1NzM5OTk3YjllZDc5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMjQxNSw2ICsyNDE1LDcgQEAKIAkJODMxMDJCMjcxRjlFQUREOTAwRTQwNEI5IC8q
IEpTRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODMxMDJCMjMxRjlFQURDMjAwRTQwNEI5IC8qIEpTRXh0ZW5kYWJs
ZU1lc3NhZ2VFdmVudC5oICovOyB9OwogCQk4MzExQzAwMzFGQUEyRTk1MDBFM0M4RTUgLyogU1dT
ZXJ2ZXJKb2JRdWV1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gODMxMUMwMDIxRkFBMkU4OTAwRTNDOEU1IC8qIFNXU2VydmVySm9iUXVldWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4MzEyMEM3MTFD
NTZGM0ZCMDAxQ0IxMTIgLyogSFRNTERhdGFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzRCODZBNzFDNTZFODNBMDBGM0YwRTMgLyogSFRN
TERhdGFFbGVtZW50LmggKi87IH07CisJCTgzMTk4RkJGMjRBMTYwREQwMDQyMEIwNSAvKiBCYXNl
QXVkaW9Db250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA4MzE5OEZCRTI0QTE2MEMxMDA0MjBCMDUgLyogQmFzZUF1ZGlvQ29udGV4dC5oICovOyB9
OwogCQk4MzFCNjE3NjI0OTlBNUJCMDBDMDdDNzkgLyogV2ViS2l0QXVkaW9QYW5uZXJOb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzFCNjE3NDI0
OTlBNTlDMDBDMDdDNzkgLyogV2ViS2l0QXVkaW9QYW5uZXJOb2RlLmggKi87IH07CiAJCTgzMUI2
MTc3MjQ5OUE1QkYwMEMwN0M3OSAvKiBXZWJLaXRPZmZsaW5lQXVkaW9Db250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzFCNjE3NTI0OTlBNTlE
MDBDMDdDNzkgLyogV2ViS2l0T2ZmbGluZUF1ZGlvQ29udGV4dC5oICovOyB9OwogCQk4MzIxNTA3
RTFGMjdFQTFCMDA5NUIxMzYgLyogTmF2aWdhdG9yQmVhY29uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzIxNTA3QjFGMjdFQTE1MDA5NUIxMzYgLyog
TmF2aWdhdG9yQmVhY29uLmggKi87IH07CkBAIC0xMDMyNyw2ICsxMDMyOCw5IEBACiAJCTgzMTAy
QjI1MUY5RUFEQzIwMEU0MDRCOSAvKiBKU0V4dGVuZGFibGVNZXNzYWdlRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFeHRlbmRhYmxlTWVzc2FnZUV2ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMxMUMwMDAxRkFBMkU4OTAwRTND
OEU1IC8qIFNXU2VydmVySm9iUXVldWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1dTZXJ2ZXJKb2JRdWV1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTgzMTFDMDAyMUZBQTJFODkwMEUzQzhFNSAvKiBTV1NlcnZlckpvYlF1ZXVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNXU2VydmVySm9iUXVldWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODMxOThGQkIyNEExNjBDMTAwNDIwQjA1IC8qIEJhc2VBdWRp
b0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmFzZUF1
ZGlvQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgzMTk4RkJEMjRB
MTYwQzEwMDQyMEIwNSAvKiBCYXNlQXVkaW9Db250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBCYXNlQXVkaW9Db250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODMxOThGQkUyNEExNjBDMTAwNDIwQjA1IC8qIEJhc2VBdWRpb0NvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZUF1ZGlvQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4MzFCNjE2RjI0OTlBNTk4MDBDMDdDNzkgLyogV2ViS2l0QXVkaW9Q
YW5uZXJOb2RlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRBdWRpb1Bhbm5lck5v
ZGUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MzFCNjE3MTI0OTlBNTk5MDBD
MDdDNzkgLyogV2ViS2l0QXVkaW9QYW5uZXJOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdlYktpdEF1ZGlvUGFubmVyTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTgzMUI2MTcyMjQ5OUE1OUEwMEMwN0M3OSAvKiBXZWJLaXRPZmZsaW5l
QXVkaW9Db250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRPZmZsaW5lQXVk
aW9Db250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI5MjkxLDYgKzI5
Mjk1LDkgQEAKIAkJCQlGRDhDNDZFQTE1NDYwOEU3MDBBNTkxMEMgLyogQXVkaW9TY2hlZHVsZWRT
b3VyY2VOb2RlLmggKi8sCiAJCQkJRkRCMDUyREQxNTYxQTQyQzAwQjUwMEQ2IC8qIEF1ZGlvU3Vt
bWluZ0p1bmN0aW9uLmNwcCAqLywKIAkJCQlGREIwNTJERTE1NjFBNDJDMDBCNTAwRDYgLyogQXVk
aW9TdW1taW5nSnVuY3Rpb24uaCAqLywKKwkJCQk4MzE5OEZCQjI0QTE2MEMxMDA0MjBCMDUgLyog
QmFzZUF1ZGlvQ29udGV4dC5jcHAgKi8sCisJCQkJODMxOThGQkUyNEExNjBDMTAwNDIwQjA1IC8q
IEJhc2VBdWRpb0NvbnRleHQuaCAqLywKKwkJCQk4MzE5OEZCRDI0QTE2MEMxMDA0MjBCMDUgLyog
QmFzZUF1ZGlvQ29udGV4dC5pZGwgKi8sCiAJCQkJRkQzMTVGREExMkIwMjY3NjAwQzFBMzU5IC8q
IEJpcXVhZERTUEtlcm5lbC5jcHAgKi8sCiAJCQkJRkQzMTVGREIxMkIwMjY3NjAwQzFBMzU5IC8q
IEJpcXVhZERTUEtlcm5lbC5oICovLAogCQkJCUZEQzU0RjAxMTM5OUIwREEwMDhEOTExNyAvKiBC
aXF1YWRGaWx0ZXJOb2RlLmNwcCAqLywKQEAgLTI5ODU1LDYgKzI5ODYyLDcgQEAKIAkJCQk1MUEx
Qjg3RDIwODdDNEMwMDA5NzlBNzUgLyogQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxMjRFRTgwQzI2NDFDRDAwOUUyMzQ5IC8qIEJhclByb3AuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ2MEJCNjE2MUQwQTFCRjAwMDIyMTgxMiAvKiBCYXNlNjRVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTgzMTk4RkJGMjRBMTYwREQwMDQyMEIwNSAvKiBCYXNl
QXVkaW9Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTJERUYxRjIzQTkxOEEzMDBEODQw
RjYgLyogQmFzZUF1ZGlvU2hhcmVkVW5pdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5RTYxQ0Ex
MjZDQTVDNDAwQjYzRThEIC8qIEJhc2VCdXR0b25JbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTM3OUU2MUNDMTI2Q0E1QzQwMEI2M0U4RCAvKiBCYXNlQ2hlY2thYmxlSW5wdXRUeXBlLmgg
aW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dl
YkNvcmVCdWlsdGluTmFtZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNvcmVC
dWlsdGluTmFtZXMuaAppbmRleCA2NzAzMzQ3OWEyMmJiYjJmM2NhMWE2ZGM0NzA4YzYxYTJlMTdj
MzBlLi44NGM5OGU2ZjQ0ZGIwZDRkNGNhNTU3MGU3NTkwNzNkMWY4MWFjZTI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3JlQnVpbHRpbk5hbWVzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oCkBAIC01Myw2
ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBtYWNybyhBdXRoZW50aWNhdG9yQXNz
ZXJ0aW9uUmVzcG9uc2UpIFwKICAgICBtYWNybyhBdXRoZW50aWNhdG9yQXR0ZXN0YXRpb25SZXNw
b25zZSkgXAogICAgIG1hY3JvKEF1dGhlbnRpY2F0b3JSZXNwb25zZSkgXAorICAgIG1hY3JvKEJh
c2VBdWRpb0NvbnRleHQpIFwKICAgICBtYWNybyhCZWZvcmVMb2FkRXZlbnQpIFwKICAgICBtYWNy
byhCbG9iRXZlbnQpIFwKICAgICBtYWNybyhDYWNoZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbiBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFRhcmdldEZhY3RvcnkuaW4KaW5kZXggYTE1NGI0NDVhMTNhZDQ3Njk2MjlkOWY3ZDkzNzdhOWRm
MTUwZjdhYy4uZTViNGFlZGUxMzE1ODQ4ZGJhZThhODQ4OGYwMjdiZDM1NjZmYjVmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbgorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluCkBAIC01LDggKzUsOCBAQCB1c2VO
YW1lc3BhY2VBc1N1ZmZpeD10cnVlCiBBYm9ydFNpZ25hbAogQXBwbGVQYXlTZXNzaW9uIGNvbmRp
dGlvbmFsPUFQUExFX1BBWQogQXVkaW9Ob2RlIGNvbmRpdGlvbmFsPVdFQl9BVURJTwotQXVkaW9D
b250ZXh0IGNvbmRpdGlvbmFsPVdFQl9BVURJTwogQXVkaW9UcmFja0xpc3QgY29uZGl0aW9uYWw9
VklERU8KK0Jhc2VBdWRpb0NvbnRleHQgY29uZGl0aW9uYWw9V0VCX0FVRElPCiBDbGlwYm9hcmQK
IERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlCiBET01BcHBsaWNhdGlvbkNhY2hlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggMzQxZmVmMWE3MDk1MTM4MjM4ZTAxNGU0Yzhj
ZjRjM2M5MTU5MTg1ZC4uNjcyMTg3MjBhNmFhYzNkMmJmZDNiNTMyMTIwMWEyYTU3ZDE2MmE3NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMjc5LDcgKzI3OSw3IEBACiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCi0jaW5jbHVkZSAiQXVkaW9Db250ZXh0Lmgi
CisjaW5jbHVkZSAiQmFzZUF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYktpdEF1ZGlvQ29u
dGV4dC5oIgogI2VuZGlmCiAKQEAgLTQyOTksMTAgKzQyOTksMTAgQEAgdm9pZCBJbnRlcm5hbHM6
OnNlbmRNZWRpYUNvbnRyb2xFdmVudChNZWRpYUNvbnRyb2xFdmVudCBldmVudCkKICNlbmRpZiAv
LyBFTkFCTEUoTUVESUFfU0VTU0lPTikKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCi12b2lkIElu
dGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKGNvbnN0IFZhcmlhbnQ8UmVmUHRy
PEF1ZGlvQ29udGV4dD4sIFJlZlB0cjxXZWJLaXRBdWRpb0NvbnRleHQ+PiYgY29udGV4dFZhcmlh
bnQsIFN0cmluZ1ZpZXcgcmVzdHJpY3Rpb25zU3RyaW5nKQordm9pZCBJbnRlcm5hbHM6OnNldEF1
ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhjb25zdCBWYXJpYW50PFJlZlB0cjxCYXNlQXVkaW9Db250
ZXh0PiwgUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4dD4+JiBjb250ZXh0VmFyaWFudCwgU3RyaW5n
VmlldyByZXN0cmljdGlvbnNTdHJpbmcpCiB7CiAgICAgUmVmUHRyPEF1ZGlvQ29udGV4dEJhc2U+
IGNvbnRleHQ7Ci0gICAgc3dpdGNoT24oY29udGV4dFZhcmlhbnQsIFsmXShSZWZQdHI8QXVkaW9D
b250ZXh0PiBlbnRyeSkgeworICAgIHN3aXRjaE9uKGNvbnRleHRWYXJpYW50LCBbJl0oUmVmUHRy
PEJhc2VBdWRpb0NvbnRleHQ+IGVudHJ5KSB7CiAgICAgICAgIGNvbnRleHQgPSBlbnRyeTsKICAg
ICB9LCBbJl0oUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4dD4gZW50cnkpIHsKICAgICAgICAgY29u
dGV4dCA9IGVudHJ5OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggZGRhOWM4OTA1
NmNmYmQxMWNkYjc2NzdlN2JlMjlhNjNkMmI2NmQ5Ni4uZGFhOTRjODNlZWY4NzAxMDdlNTE3MGVm
MzZmYjk2NzdmZGFhMjE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC01MSw4
ICs1MSw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFuaW1hdGlvblRpbWVsaW5l
OwotY2xhc3MgQXVkaW9Db250ZXh0OwogY2xhc3MgQXVkaW9UcmFjazsKK2NsYXNzIEJhc2VBdWRp
b0NvbnRleHQ7CiBjbGFzcyBDYWNoZVN0b3JhZ2VDb25uZWN0aW9uOwogY2xhc3MgRE9NUmVjdDsK
IGNsYXNzIERPTVJlY3RMaXN0OwpAQCAtNjc2LDcgKzY3Niw3IEBAIHB1YmxpYzoKICNlbmRpZgog
CiAjaWYgRU5BQkxFKFdFQl9BVURJTykKLSAgICB2b2lkIHNldEF1ZGlvQ29udGV4dFJlc3RyaWN0
aW9ucyhjb25zdCBWYXJpYW50PFJlZlB0cjxBdWRpb0NvbnRleHQ+LCBSZWZQdHI8V2ViS2l0QXVk
aW9Db250ZXh0Pj4mLCBTdHJpbmdWaWV3IHJlc3RyaWN0aW9uc1N0cmluZyk7CisgICAgdm9pZCBz
ZXRBdWRpb0NvbnRleHRSZXN0cmljdGlvbnMoY29uc3QgVmFyaWFudDxSZWZQdHI8QmFzZUF1ZGlv
Q29udGV4dD4sIFJlZlB0cjxXZWJLaXRBdWRpb0NvbnRleHQ+PiYsIFN0cmluZ1ZpZXcgcmVzdHJp
Y3Rpb25zU3RyaW5nKTsKICAgICB2b2lkIHVzZU1vY2tBdWRpb0Rlc3RpbmF0aW9uQ29jb2EoKTsK
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggMGViMGYxNWFi
ZDBjODU0MDdjMDExNTgzMTg0NmI2ZGExNzBjYjkxNi4uYTU2MWI5N2VjMDVjNTA3ODNjYTBmZTdh
YTUxOGVlM2E0OTIzMDI0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAt
Njc3LDcgKzY3Nyw3IEBAIGVudW0gQ29tcG9zaXRpbmdQb2xpY3kgewogICAgIFtDb25kaXRpb25h
bD1WSURFTywgTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc2V0TWVkaWFTZXNzaW9uUmVzdHJpY3Rp
b25zKERPTVN0cmluZyBtZWRpYVR5cGUsIERPTVN0cmluZyByZXN0cmljdGlvbnMpOwogICAgIFtD
b25kaXRpb25hbD1WSURFTywgTWF5VGhyb3dFeGNlcHRpb25dIERPTVN0cmluZyBtZWRpYVNlc3Np
b25SZXN0cmljdGlvbnMoRE9NU3RyaW5nIG1lZGlhVHlwZSk7CiAgICAgW0NvbmRpdGlvbmFsPVZJ
REVPXSB2b2lkIHNldE1lZGlhRWxlbWVudFJlc3RyaWN0aW9ucyhIVE1MTWVkaWFFbGVtZW50IGVs
ZW1lbnQsIERPTVN0cmluZyByZXN0cmljdGlvbnMpOwotICAgIFtDb25kaXRpb25hbD1XRUJfQVVE
SU9dIHZvaWQgc2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKChBdWRpb0NvbnRleHQgb3IgV2Vi
S2l0QXVkaW9Db250ZXh0KSBjb250ZXh0LCBET01TdHJpbmcgcmVzdHJpY3Rpb25zKTsKKyAgICBb
Q29uZGl0aW9uYWw9V0VCX0FVRElPXSB2b2lkIHNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucygo
QmFzZUF1ZGlvQ29udGV4dCBvciBXZWJLaXRBdWRpb0NvbnRleHQpIGNvbnRleHQsIERPTVN0cmlu
ZyByZXN0cmljdGlvbnMpOwogICAgIFtDb25kaXRpb25hbD1WSURFTywgTWF5VGhyb3dFeGNlcHRp
b25dIHZvaWQgcG9zdFJlbW90ZUNvbnRyb2xDb21tYW5kKERPTVN0cmluZyBjb21tYW5kLCBvcHRp
b25hbCB1bnJlc3RyaWN0ZWQgZmxvYXQgYXJndW1lbnQgPSAwKTsKICAgICBbQ29uZGl0aW9uYWw9
V0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUXSB2b2lkIHNldE1vY2tNZWRpYVBsYXliYWNrVGFyZ2V0
UGlja2VyRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwogICAgIFtDb25kaXRpb25hbD1XSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQsIE1heVRocm93RXhjZXB0aW9uXSB2b2lkIHNldE1vY2tNZWRpYVBs
YXliYWNrVGFyZ2V0UGlja2VyU3RhdGUoRE9NU3RyaW5nIGRldmljZU5hbWUsIERPTVN0cmluZyBk
ZXZpY2VTdGF0ZSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwppbmRleCBhN2UyNDFiOWE5
M2Q1NTEyNTBkYWFhNzcxNWQ1ZTkxMjMxMjMzMWExLi4xZjI1YTdkYWM5MGNiZmE3NmNkYjU2MDVh
OWI1MTA1ZmI0NWMzYzRjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNCBAQAorMjAyMC0wNi0yMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisg
ICAgICAgIEludHJvZHVjZSBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNDkxCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmViYXNlbGluZSBXUFQgdGVzdCBu
b3cgdGhhdCBtb3JlIGNoZWNrcyBhcmUgcGFzc2luZy4KKworICAgICAgICAqIHdlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJhdWRpby9pZGxoYXJuZXNzLmh0dHBzLndpbmRvdy1leHBlY3RlZC50eHQ6CisK
IDIwMjAtMDYtMjIgIENsYXJrIFdhbmcgIDxjbGFya193YW5nQGFwcGxlLmNvbT4KIAogICAgICAg
ICBBZGRlZCBnZXRGbG9hdFRpbWVEb21haW5EYXRhIG1ldGhvZCB0byBBbmFseXNlck5vZGUKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vi
YXVkaW8vaWRsaGFybmVzcy5odHRwcy53aW5kb3ctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJhdWRpby9pZGxoYXJuZXNzLmh0dHBz
LndpbmRvdy1leHBlY3RlZC50eHQKaW5kZXggYzY4YTRjYjQzOWYxNjc5NDNiNTI1NDBiYjJmODJm
MTY0OTFmMzM4ZS4uY2Q5NGQ1NzY2YTczODNmYWZmYmY2ZjZhN2M2OTNmNzk5ZWZjYWYzMyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJh
dWRpby9pZGxoYXJuZXNzLmh0dHBzLndpbmRvdy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVz
dHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJhdWRpby9pZGxoYXJuZXNzLmh0
dHBzLndpbmRvdy1leHBlY3RlZC50eHQKQEAgLTksNDIgKzksNDIgQEAgUEFTUyBFbGVtZW50IGlu
Y2x1ZGVzIFBhcmVudE5vZGU6IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlCiBQQVNTIEVsZW1lbnQg
aW5jbHVkZXMgTm9uRG9jdW1lbnRUeXBlQ2hpbGROb2RlOiBtZW1iZXIgbmFtZXMgYXJlIHVuaXF1
ZSAKIFBBU1MgRWxlbWVudCBpbmNsdWRlcyBDaGlsZE5vZGU6IG1lbWJlciBuYW1lcyBhcmUgdW5p
cXVlIAogUEFTUyBFbGVtZW50IGluY2x1ZGVzIFNsb3R0YWJsZTogbWVtYmVyIG5hbWVzIGFyZSB1
bmlxdWUgCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHBy
b3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRv
ZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9w
ZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGlu
dGVyZmFjZSBvYmplY3QgbGVuZ3RoIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3Qg
aGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJC
YXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNl
IG9iamVjdCBuYW1lIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24g
cHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9D
b250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBleGlzdGVu
Y2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgYXNzZXJ0X293
bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29u
dGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZBSUwg
QmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBp
bnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzICJjb25zdHJ1Y3RvciIgcHJvcGVydHkgYXNzZXJ0
X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlv
Q29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZB
SUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBv
ZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIEBAdW5zY29wYWJsZXMgcHJvcGVydHkgYXNz
ZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1
ZGlvQ29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcK
LUZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBkZXN0aW5hdGlvbiBh
c3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNl
QXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2lu
ZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogYXR0cmlidXRlIHNhbXBsZVJhdGUg
YXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFz
ZUF1ZGlvQ29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3Np
bmcKLUZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBjdXJyZW50VGlt
ZSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJC
YXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlz
c2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogYXR0cmlidXRlIGxpc3RlbmVy
IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJh
c2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNz
aW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgc3RhdGUgYXNz
ZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1
ZGlvQ29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcK
LUZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBhdWRpb1dvcmtsZXQg
YXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFz
ZUF1ZGlvQ29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3Np
bmcKLUZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBvbnN0YXRlY2hh
bmdlIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkg
IkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBt
aXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRl
QW5hbHlzZXIoKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHBy
b3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29u
dGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9u
IGNyZWF0ZUJpcXVhZEZpbHRlcigpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3Qg
aGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJC
YXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNl
OiBvcGVyYXRpb24gY3JlYXRlQnVmZmVyKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGZs
b2F0KSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5
ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIg
bWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0
ZUJ1ZmZlclNvdXJjZSgpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBv
d24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVk
aW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVy
YXRpb24gY3JlYXRlQ2hhbm5lbE1lcmdlcihvcHRpb25hbCB1bnNpZ25lZCBsb25nKSBhc3NlcnRf
b3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9D
b250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJ
TCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUNoYW5uZWxTcGxp
dHRlcihvcHRpb25hbCB1bnNpZ25lZCBsb25nKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRv
ZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9w
ZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGlu
dGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUNvbnN0YW50U291cmNlKCkgYXNzZXJ0X293bl9wcm9w
ZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIg
ZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZBSUwgQmFzZUF1
ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBjcmVhdGVDb252b2x2ZXIoKSBhc3NlcnRf
b3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9D
b250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJ
TCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZURlbGF5KG9wdGlv
bmFsIGRvdWJsZSkgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBw
cm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0Nv
bnRleHQiIG1pc3NpbmcKLUZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlv
biBjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRv
ZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9w
ZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGlu
dGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUdhaW4oKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxm
IGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBw
cm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0
IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUlJUkZpbHRlcihzZXF1ZW5jZTxkb3VibGU+LCBz
ZXF1ZW5jZTxkb3VibGU+KSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUg
b3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1
ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3Bl
cmF0aW9uIGNyZWF0ZU9zY2lsbGF0b3IoKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMg
bm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0
eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVy
ZmFjZTogb3BlcmF0aW9uIGNyZWF0ZVBhbm5lcigpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYg
ZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHBy
b3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQg
aW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlUGVyaW9kaWNXYXZlKHNlcXVlbmNlPGZsb2F0Piwg
c2VxdWVuY2U8ZmxvYXQ+LCBvcHRpb25hbCBQZXJpb2RpY1dhdmVDb25zdHJhaW50cykgYXNzZXJ0
X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlv
Q29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZB
SUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBjcmVhdGVTY3JpcHRQcm9j
ZXNzb3Iob3B0aW9uYWwgdW5zaWduZWQgbG9uZywgb3B0aW9uYWwgdW5zaWduZWQgbG9uZywgb3B0
aW9uYWwgdW5zaWduZWQgbG9uZykgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBo
YXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJh
c2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6
IG9wZXJhdGlvbiBjcmVhdGVTdGVyZW9QYW5uZXIoKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxm
IGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBw
cm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0
IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZVdhdmVTaGFwZXIoKSBhc3NlcnRfb3duX3Byb3Bl
cnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBl
eHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVk
aW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGRlY29kZUF1ZGlvRGF0YShBcnJheUJ1ZmZl
ciwgb3B0aW9uYWwgRGVjb2RlU3VjY2Vzc0NhbGxiYWNrPywgb3B0aW9uYWwgRGVjb2RlRXJyb3JD
YWxsYmFjaz8pIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJv
cGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250
ZXh0IiBtaXNzaW5nCi1GQUlMIEF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQg
cHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYg
ZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHBy
b3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCitQQVNTIEJhc2VBdWRpb0NvbnRleHQg
aW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCAK
K1BBU1MgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCAKK1BBU1MgQmFz
ZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUgCitQQVNTIEJhc2VBdWRpb0NvbnRl
eHQgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3Rv
dHlwZSBvYmplY3QgCitQQVNTIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBleGlzdGVuY2Ug
YW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3RydWN0
b3IiIHByb3BlcnR5IAorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogZXhpc3RlbmNl
IGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3Bh
YmxlcyBwcm9wZXJ0eSAKK1BBU1MgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGF0dHJpYnV0
ZSBkZXN0aW5hdGlvbiAKK1BBU1MgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGF0dHJpYnV0
ZSBzYW1wbGVSYXRlIAorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogYXR0cmlidXRl
IGN1cnJlbnRUaW1lIAorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogYXR0cmlidXRl
IGxpc3RlbmVyIAorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogYXR0cmlidXRlIHN0
YXRlIAorRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogYXR0cmlidXRlIGF1ZGlvV29y
a2xldCBhc3NlcnRfdHJ1ZTogVGhlIHByb3RvdHlwZSBvYmplY3QgbXVzdCBoYXZlIGEgcHJvcGVy
dHkgImF1ZGlvV29ya2xldCIgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKK1BBU1MgQmFzZUF1ZGlv
Q29udGV4dCBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBvbnN0YXRlY2hhbmdlIAorUEFTUyBCYXNlQXVk
aW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUFuYWx5c2VyKCkgCitQQVNTIEJh
c2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlQmlxdWFkRmlsdGVyKCkg
CitGQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlQnVmZmVy
KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGZsb2F0KSBhc3NlcnRfZXF1YWxzOiBwcm9w
ZXJ0eSBoYXMgd3JvbmcgLmxlbmd0aCBleHBlY3RlZCAzIGJ1dCBnb3QgMgorUEFTUyBCYXNlQXVk
aW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUJ1ZmZlclNvdXJjZSgpIAorUEFT
UyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUNoYW5uZWxNZXJn
ZXIob3B0aW9uYWwgdW5zaWduZWQgbG9uZykgCitQQVNTIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJm
YWNlOiBvcGVyYXRpb24gY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKG9wdGlvbmFsIHVuc2lnbmVkIGxv
bmcpIAorRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUNv
bnN0YW50U291cmNlKCkgYXNzZXJ0X293bl9wcm9wZXJ0eTogaW50ZXJmYWNlIHByb3RvdHlwZSBv
YmplY3QgbWlzc2luZyBub24tc3RhdGljIG9wZXJhdGlvbiBleHBlY3RlZCBwcm9wZXJ0eSAiY3Jl
YXRlQ29uc3RhbnRTb3VyY2UiIG1pc3NpbmcKK1BBU1MgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZh
Y2U6IG9wZXJhdGlvbiBjcmVhdGVDb252b2x2ZXIoKSAKK1BBU1MgQmFzZUF1ZGlvQ29udGV4dCBp
bnRlcmZhY2U6IG9wZXJhdGlvbiBjcmVhdGVEZWxheShvcHRpb25hbCBkb3VibGUpIAorUEFTUyBC
YXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUR5bmFtaWNzQ29tcHJl
c3NvcigpIAorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0
ZUdhaW4oKSAKK0ZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBjcmVh
dGVJSVJGaWx0ZXIoc2VxdWVuY2U8ZG91YmxlPiwgc2VxdWVuY2U8ZG91YmxlPikgYXNzZXJ0X293
bl9wcm9wZXJ0eTogaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgbWlzc2luZyBub24tc3RhdGlj
IG9wZXJhdGlvbiBleHBlY3RlZCBwcm9wZXJ0eSAiY3JlYXRlSUlSRmlsdGVyIiBtaXNzaW5nCitQ
QVNTIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlT3NjaWxsYXRv
cigpIAorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZVBh
bm5lcigpIAorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0
ZVBlcmlvZGljV2F2ZShzZXF1ZW5jZTxmbG9hdD4sIHNlcXVlbmNlPGZsb2F0Piwgb3B0aW9uYWwg
UGVyaW9kaWNXYXZlQ29uc3RyYWludHMpIAorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFj
ZTogb3BlcmF0aW9uIGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihvcHRpb25hbCB1bnNpZ25lZCBsb25n
LCBvcHRpb25hbCB1bnNpZ25lZCBsb25nLCBvcHRpb25hbCB1bnNpZ25lZCBsb25nKSAKK0ZBSUwg
QmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBjcmVhdGVTdGVyZW9QYW5uZXIo
KSBhc3NlcnRfb3duX3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBtaXNzaW5n
IG5vbi1zdGF0aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJjcmVhdGVTdGVyZW9QYW5u
ZXIiIG1pc3NpbmcKK1BBU1MgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBj
cmVhdGVXYXZlU2hhcGVyKCkgCitGQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVy
YXRpb24gZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyLCBvcHRpb25hbCBEZWNvZGVTdWNjZXNz
Q2FsbGJhY2s/LCBvcHRpb25hbCBEZWNvZGVFcnJvckNhbGxiYWNrPykgYXNzZXJ0X2VxdWFsczog
cHJvcGVydHkgaGFzIHdyb25nIC5sZW5ndGggZXhwZWN0ZWQgMSBidXQgZ290IDIKK1BBU1MgQXVk
aW9Db250ZXh0IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFj
ZSBvYmplY3QgCiBQQVNTIEF1ZGlvQ29udGV4dCBpbnRlcmZhY2Ugb2JqZWN0IGxlbmd0aCAKIFBB
U1MgQXVkaW9Db250ZXh0IGludGVyZmFjZSBvYmplY3QgbmFtZSAKLUZBSUwgQXVkaW9Db250ZXh0
IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5
cGUgb2JqZWN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJv
cGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250
ZXh0IiBtaXNzaW5nCitQQVNTIEF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQg
cHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAKIFBBU1MgQXVkaW9Db250
ZXh0IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90
b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSAKIFBBU1MgQXVkaW9Db250ZXh0
IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5
cGUgb2JqZWN0J3MgQEB1bnNjb3BhYmxlcyBwcm9wZXJ0eSAKIEZBSUwgQXVkaW9Db250ZXh0IGlu
dGVyZmFjZTogYXR0cmlidXRlIGJhc2VMYXRlbmN5IGFzc2VydF90cnVlOiBUaGUgcHJvdG90eXBl
IG9iamVjdCBtdXN0IGhhdmUgYSBwcm9wZXJ0eSAiYmFzZUxhdGVuY3kiIGV4cGVjdGVkIHRydWUg
Z290IGZhbHNlCkBAIC0xMDYsMTcgKzEwNiwxNyBAQCBGQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50
ZXJmYWNlOiBjb250ZXh0IG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiY3JlYXRlU3RlcmVvUGFubgog
UEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogY29udGV4dCBtdXN0IGluaGVyaXQgcHJv
cGVydHkgImNyZWF0ZVdhdmVTaGFwZXIoKSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCiBQQVNTIEJh
c2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBjb250ZXh0IG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAi
ZGVjb2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyLCBvcHRpb25hbCBEZWNvZGVTdWNjZXNzQ2FsbGJh
Y2s/LCBvcHRpb25hbCBEZWNvZGVFcnJvckNhbGxiYWNrPykiIHdpdGggdGhlIHByb3BlciB0eXBl
IAogRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogY2FsbGluZyBkZWNvZGVBdWRpb0Rh
dGEoQXJyYXlCdWZmZXIsIG9wdGlvbmFsIERlY29kZVN1Y2Nlc3NDYWxsYmFjaz8sIG9wdGlvbmFs
IERlY29kZUVycm9yQ2FsbGJhY2s/KSBvbiBjb250ZXh0IHdpdGggdG9vIGZldyBhcmd1bWVudHMg
bXVzdCB0aHJvdyBUeXBlRXJyb3IgYXNzZXJ0X3VucmVhY2hlZDogVGhyb3dzICJUeXBlRXJyb3I6
IE5vdCBlbm91Z2ggYXJndW1lbnRzIiBpbnN0ZWFkIG9mIHJlamVjdGluZyBwcm9taXNlIFJlYWNo
ZWQgdW5yZWFjaGFibGUgY29kZQotRkFJTCBPZmZsaW5lQXVkaW9Db250ZXh0IGludGVyZmFjZTog
ZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QgYXNzZXJ0X293bl9w
cm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4
dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKK1BBU1MgT2Zm
bGluZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBp
bnRlcmZhY2Ugb2JqZWN0IAogRkFJTCBPZmZsaW5lQXVkaW9Db250ZXh0IGludGVyZmFjZSBvYmpl
Y3QgbGVuZ3RoIGFzc2VydF9lcXVhbHM6IHdyb25nIHZhbHVlIGZvciBPZmZsaW5lQXVkaW9Db250
ZXh0Lmxlbmd0aCBleHBlY3RlZCAxIGJ1dCBnb3QgMwogUEFTUyBPZmZsaW5lQXVkaW9Db250ZXh0
IGludGVyZmFjZSBvYmplY3QgbmFtZSAKLUZBSUwgT2ZmbGluZUF1ZGlvQ29udGV4dCBpbnRlcmZh
Y2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVj
dCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJC
YXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlz
c2luZworUEFTUyBPZmZsaW5lQXVkaW9Db250ZXh0IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBw
cm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IAogUEFTUyBPZmZsaW5lQXVk
aW9Db250ZXh0IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFj
ZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0cnVjdG9yIiBwcm9wZXJ0eSAKIFBBU1MgT2ZmbGlu
ZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRl
cmZhY2UgcHJvdG90eXBlIG9iamVjdCdzIEBAdW5zY29wYWJsZXMgcHJvcGVydHkgCi1GQUlMIE9m
ZmxpbmVBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gc3RhcnRSZW5kZXJpbmcoKSBh
c3NlcnRfb3duX3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBtaXNzaW5nIG5v
bi1zdGF0aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJzdGFydFJlbmRlcmluZyIgbWlz
c2luZwotRkFJTCBPZmZsaW5lQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIHJlc3Vt
ZSgpIGFzc2VydF9vd25fcHJvcGVydHk6IGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IG1pc3Np
bmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJvcGVydHkgInJlc3VtZSIgbWlzc2lu
ZwotRkFJTCBPZmZsaW5lQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIHN1c3BlbmQo
ZG91YmxlKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBt
aXNzaW5nIG5vbi1zdGF0aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJzdXNwZW5kIiBt
aXNzaW5nCitGQUlMIE9mZmxpbmVBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gc3Rh
cnRSZW5kZXJpbmcoKSBhc3NlcnRfdW5yZWFjaGVkOiBUaHJvd3MgIlR5cGVFcnJvcjogQ2FuIG9u
bHkgY2FsbCBPZmZsaW5lQXVkaW9Db250ZXh0LnN0YXJ0UmVuZGVyaW5nIG9uIGluc3RhbmNlcyBv
ZiBPZmZsaW5lQXVkaW9Db250ZXh0IiBpbnN0ZWFkIG9mIHJlamVjdGluZyBwcm9taXNlIFJlYWNo
ZWQgdW5yZWFjaGFibGUgY29kZQorUEFTUyBPZmZsaW5lQXVkaW9Db250ZXh0IGludGVyZmFjZTog
b3BlcmF0aW9uIHJlc3VtZSgpIAorRkFJTCBPZmZsaW5lQXVkaW9Db250ZXh0IGludGVyZmFjZTog
b3BlcmF0aW9uIHN1c3BlbmQoZG91YmxlKSBhc3NlcnRfZXF1YWxzOiBwcm9wZXJ0eSBoYXMgd3Jv
bmcgLmxlbmd0aCBleHBlY3RlZCAxIGJ1dCBnb3QgMAogRkFJTCBPZmZsaW5lQXVkaW9Db250ZXh0
IGludGVyZmFjZTogYXR0cmlidXRlIGxlbmd0aCBhc3NlcnRfdHJ1ZTogVGhlIHByb3RvdHlwZSBv
YmplY3QgbXVzdCBoYXZlIGEgcHJvcGVydHkgImxlbmd0aCIgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFs
c2UKLUZBSUwgT2ZmbGluZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGF0dHJpYnV0ZSBvbmNvbXBs
ZXRlIGFzc2VydF9vd25fcHJvcGVydHk6IGV4cGVjdGVkIHByb3BlcnR5ICJvbmNvbXBsZXRlIiBt
aXNzaW5nCitQQVNTIE9mZmxpbmVBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgb25j
b21wbGV0ZSAKIFBBU1MgT2ZmbGluZUF1ZGlvQ29udGV4dCBtdXN0IGJlIHByaW1hcnkgaW50ZXJm
YWNlIG9mIG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIHNhbXBsZV9yYXRlKSAKIFBBU1Mg
U3RyaW5naWZpY2F0aW9uIG9mIG5ldyBPZmZsaW5lQXVkaW9Db250ZXh0KDEsIDEsIHNhbXBsZV9y
YXRlKSAKIFBBU1MgT2ZmbGluZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG5ldyBPZmZsaW5lQXVk
aW9Db250ZXh0KDEsIDEsIHNhbXBsZV9yYXRlKSBtdXN0IGluaGVyaXQgcHJvcGVydHkgInN0YXJ0
UmVuZGVyaW5nKCkiIHdpdGggdGhlIHByb3BlciB0eXBlIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402524</attachid>
            <date>2020-06-22 18:49:26 -0700</date>
            <delta_ts>2020-06-22 20:26:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213491-20200622184925.patch</filename>
            <type>text/plain</type>
            <size>178240</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYzMzczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmRmODI5ODBmNmFiNzk1
NDU2ZGIwYzgyMDY3YWUwNDEyODc4ZjNiOS4uNjBjOTA2ZTA5NTJkNmMxMTFkODQ5MjJiZGFjZmU1
NWZlMGYzMTllOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1MSBAQAorMjAyMC0wNi0yMiAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEludHJvZHVjZSBCYXNlQXVk
aW9Db250ZXh0IGludGVyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjEzNDkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW50cm9kdWNlIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlIGFzIHBlciBX
M0MgV2ViQXVkaW8gc3BlY2lmaWNhdGlvbjoKKyAgICAgICAgLSBodHRwczovL3d3dy53My5vcmcv
VFIvd2ViYXVkaW8vI0Jhc2VBdWRpb0NvbnRleHQKKworICAgICAgICBObyBuZXcgdGVzdHMsIHJl
YmFzZWxpbmVkIGV4aXN0aW5nIHRlc3QuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1h
a2U6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Db250ZXh0OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6
OmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHQ6OmNyZWF0ZU1lZGlhU3RyZWFtU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29u
dGV4dDo6Y3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbik6CisgICAgICAgICogTW9kdWxlcy93
ZWJhdWRpby9BdWRpb0NvbnRleHQuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlv
Q29udGV4dC5pZGw6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjpjb250ZXh0Rm9yQmluZGluZ3MgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmg6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9BdWRpb05vZGUuaWRsOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQmFz
ZUF1ZGlvQ29udGV4dC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQ6OmlzU2FtcGxlUmF0ZVJhbmdlR29vZCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRl
eHRCYXNlOjpBdWRpb0NvbnRleHRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0Nv
bnRleHQ6OkJhc2VBdWRpb0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29u
dGV4dDo6Y29uc3RydWN0Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQ6On5CYXNlQXVkaW9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQ6OmxhenlJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojppc0luaXRpYWxpemVkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmFkZFJlYWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OnNldFN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6QmFz
ZUF1ZGlvQ29udGV4dDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250
ZXh0OjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6YWN0aXZl
RE9NT2JqZWN0TmFtZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHRCYXNl
Ojpkb2N1bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojpo
b3N0aW5nRG9jdW1lbnRJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VB
dWRpb0NvbnRleHQ6OmlzU3VzcGVuZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VB
dWRpb0NvbnRleHQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUF1ZGlvQ29udGV4dDo6d291bGRUYWludE9yaWdpbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXNlQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUF1ZGlvQ29udGV4dDo6ZGVjb2RlQXVkaW9EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlQXVkaW9Db250ZXh0OjpjcmVhdGVTY3JpcHRQcm9jZXNzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlQmlxdWFkRmlsdGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2VBdWRpb0NvbnRleHQ6OmNyZWF0ZVdhdmVTaGFwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlUGFubmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJh
c2VBdWRpb0NvbnRleHQ6OmNyZWF0ZUNvbnZvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
QXVkaW9Db250ZXh0OjpjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlQW5hbHlzZXIpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlR2Fpbik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpjcmVhdGVEZWxheSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250
ZXh0OjpjcmVhdGVDaGFubmVsU3BsaXR0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlv
Q29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdlcik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRp
b0NvbnRleHQ6OmNyZWF0ZVBlcmlvZGljV2F2ZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2VBdWRpb0NvbnRleHQ6OmRlcmVmRmluaXNoZWRTb3VyY2VOb2Rlcyk6CisgICAgICAg
IChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpyZWZOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJhc2VBdWRpb0NvbnRleHQ6OmRlcmVmTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXNlQXVkaW9Db250ZXh0Ojpsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0Nv
bnRleHQ6OnRyeUxvY2spOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6dW5s
b2NrKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmlzQXVkaW9UaHJlYWQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aXNHcmFwaE93bmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmFkZERlZmVycmVk
RmluaXNoRGVyZWYpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aGFuZGxl
UHJlUmVuZGVyVGFza3MpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aGFu
ZGxlUG9zdFJlbmRlclRhc2tzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6
OmhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRp
b0NvbnRleHQ6Om1hcmtGb3JEZWxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9D
b250ZXh0OjpzY2hlZHVsZU5vZGVEZWxldGlvbik6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpkZWxldGVNYXJrZWROb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjptYXJrU3VtbWluZ0p1bmN0aW9uRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6
QmFzZUF1ZGlvQ29udGV4dDo6cmVtb3ZlTWFya2VkU3VtbWluZ0p1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6Om1hcmtBdWRpb05vZGVPdXRwdXRE
aXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1
ZGlvU3VtbWluZ0p1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0
OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1
ZGlvQ29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QmFz
ZUF1ZGlvQ29udGV4dDo6cmVtb3ZlQXV0b21hdGljUHVsbE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6QmFzZUF1ZGlvQ29udGV4dDo6dXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OnByb2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0QmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojpub2RlV2lsbEJl
Z2luUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkRG9jdW1lbnRBbGxvd1dlYkF1
ZGlvVG9BdXRvUGxheSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojp3aWxs
QmVnaW5QbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojp3aWxs
UGF1c2VQbGF5YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjpzdGFy
dFJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjptZWRpYUNh
blN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6Om1lZGlhU3RhdGUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6cGFnZU11dGVkU3Rh
dGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6aXNQbGF5
aW5nQXVkaW9EaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6
ZmluaXNoZWRSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6
ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjppbmNy
ZW1lbnRBY3RpdmVTb3VyY2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250
ZXh0OjpkZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNl
QXVkaW9Db250ZXh0OjpzdXNwZW5kUmVuZGVyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VB
dWRpb0NvbnRleHQ6OnJlc3VtZVJlbmRlcmluZyk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVk
aW9Db250ZXh0OjpzdXNwZW5kUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlv
Q29udGV4dDo6bWF5UmVzdW1lUGxheWJhY2spOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlv
Q29udGV4dDo6cG9zdFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6
b3JpZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmFkZENv
bnNvbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmNsZWFy
UGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6Om1h
a2VQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUF1ZGlvQ29udGV4dDo6
bG9nQ2hhbm5lbCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9CYXNlQXVkaW9D
b250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmguCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHRCYXNlOjpBdXRvTG9j
a2VyOjpBdXRvTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dEJhc2U6OkF1
dG9Mb2NrZXI6On5BdXRvTG9ja2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQ6OmRlc3RpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmFj
dGl2ZVNvdXJjZUNvdW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRl
eHQ6Omxpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OnN0YXRl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmlzQ2xvc2VkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmNvbm5lY3Rpb25Db3Vu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjphdWRpb1RocmVh
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0OjptYXhOdW1iZXJP
ZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VBdWRpb0NvbnRleHQ6OmRlc3RpbmF0
aW9uTm9kZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQXVkaW9Db250ZXh0Ojp1c2Vy
R2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFydCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNlQXVkaW9Db250ZXh0OjpwYWdlQ29uc2VudFJlcXVpcmVkRm9yQXVkaW9TdGFydCBjb25zdCk6
CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlv
Q29udGV4dC5pZGw6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmlkbC4KKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2ZmbGluZUF1ZGlvQ29udGV4dDo6T2Zm
bGluZUF1ZGlvQ29udGV4dCk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVk
aW9Db250ZXh0Lmg6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db250
ZXh0LmlkbDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFubmVyTm9kZTo6UGFubmVyTm9kZSk6CisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9QYW5uZXJOb2RlLmg6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdz
L2pzL1dlYkNvcmVCdWlsdGluTmFtZXMuaDoKKyAgICAgICAgKiBkb20vRXZlbnRUYXJnZXRGYWN0
b3J5LmluOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKToKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwog
MjAyMC0wNi0yMiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVcGRhdGUgbWFjT1MgdmVyc2lvbiBtYWNyb3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
Mzk5YTZiZDNmZDA5NmM1MTE3ODgxYzkyNTc2OTE1MDUxMzNjMzAxMS4uMDIyN2Y4MDM4ZGMzZDI4
NmNjNDc3MWM5YmJmYzAwMTI4ZTFlNTY4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTQzOSw2
ICs0MzksNyBAQCBzZXQoV2ViQ29yZV9OT05fU1ZHX0lETF9GSUxFUwogICAgIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9Ob2RlLmlkbAogICAgIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5pZGwK
ICAgICBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbAorICAgIE1vZHVs
ZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5pZGwKICAgICBNb2R1bGVzL3dlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuaWRsCiAgICAgTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsTWVyZ2VyTm9k
ZS5pZGwKICAgICBNb2R1bGVzL3dlYmF1ZGlvL0NoYW5uZWxTcGxpdHRlck5vZGUuaWRsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIv
U291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCBmN2Q2
NGMxOTNkMGU3ZGYyODE2NWJkZDc0YTQwZDNmOTBlNmE4MjEwLi5iNDdkMjU3YzY3NjdmZmRiMjY1
MWUwNmU1ZjI2ZGYyZDJmNTk2ZjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTMwNiw2ICszMDYsNyBAQCAkKFBST0pFQ1RfRElSKS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTGlzdGVuZXIuaWRsCiAkKFBST0pFQ1RfRElSKS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwKICQoUFJPSkVDVF9ESVIpL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9QYXJhbS5pZGwKICQoUFJPSkVDVF9ESVIpL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Qcm9j
ZXNzaW5nRXZlbnQuaWRsCiskKFBST0pFQ1RfRElSKS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRp
b0NvbnRleHQuaWRsCiAkKFBST0pFQ1RfRElSKS9Nb2R1bGVzL3dlYmF1ZGlvL0JpcXVhZEZpbHRl
ck5vZGUuaWRsCiAkKFBST0pFQ1RfRElSKS9Nb2R1bGVzL3dlYmF1ZGlvL0NoYW5uZWxNZXJnZXJO
b2RlLmlkbAogJChQUk9KRUNUX0RJUikvTW9kdWxlcy93ZWJhdWRpby9DaGFubmVsU3BsaXR0ZXJO
b2RlLmlkbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxl
bGlzdAppbmRleCBjYmM2NDhhZmY4NzJlMTdjOGFlYjJmM2RjNmU5YmM2Yjc4YzA0NDkzLi41NTFj
ZGIxNTRkMTIzNDdhNTBiODU3NDkyOTFjODQ1ODM5OGQxMjYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTg3LDYgKzE4Nyw4IEBA
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQXV0aGVudGlj
YXRvclRyYW5zcG9ydC5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJDb3JlL0pTQXV0aGVudGljYXRvclRyYW5zcG9ydC5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0JhclByb3AuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0JhclByb3AuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNCYXNlQXVkaW9Db250ZXh0LmNwcAorJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNCYXNlQXVkaW9Db250ZXh0
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJDb3JlL0pTQmFzaWND
cmVkZW50aWFsLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNCYXNpY0NyZWRlbnRpYWwuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYkNvcmUvSlNCZWZvcmVMb2FkRXZlbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMu
bWFrZQppbmRleCBiMjdjNzljZTY2M2UyYzhiOGVhNDYwYWUwODFlYmYxZGRlNzAzM2JhLi5mM2Y5
YTQxNGZkMjY0YWJmZmM4MTE1ZDgwYWFjOWY3ODA0YmQxZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKQEAgLTM4OSw2ICszODksNyBAQCBKU19CSU5ESU5HX0lETFMgPSBcCiAgICAg
JChXZWJDb3JlKS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5pZGwgXAogICAgICQoV2ViQ29y
ZSkvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmlkbCBcCiAgICAgJChXZWJDb3JlKS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvUHJvY2Vzc2luZ0V2ZW50LmlkbCBcCisgICAgJChXZWJDb3JlKS9N
b2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaWRsIFwKICAgICAkKFdlYkNvcmUpL01v
ZHVsZXMvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9k
dWxlcy93ZWJhdWRpby9DaGFubmVsTWVyZ2VyTm9kZS5pZGwgXAogICAgICQoV2ViQ29yZSkvTW9k
dWxlcy93ZWJhdWRpby9DaGFubmVsU3BsaXR0ZXJOb2RlLmlkbCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggMjZlMWZjN2NjYWIx
NDM0ZDA1YWYxYWJhYTFjNDhlMDAyZTJiMzFjMy4uMzgzZTFmZGI2OGZiNjkyNTUwZmIyY2VmNGFm
MDMwMzk2ZjUwMTYyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmNwcApAQCAtMjgsNDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCX0FVRElP
KQogCiAjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCi0KLSNpbmNsdWRlICJBbmFseXNlck5vZGUu
aCIKLSNpbmNsdWRlICJBc3luY0F1ZGlvRGVjb2Rlci5oIgotI2luY2x1ZGUgIkF1ZGlvQnVmZmVy
LmgiCi0jaW5jbHVkZSAiQXVkaW9CdWZmZXJDYWxsYmFjay5oIgotI2luY2x1ZGUgIkF1ZGlvQnVm
ZmVyU291cmNlTm9kZS5oIgotI2luY2x1ZGUgIkF1ZGlvTGlzdGVuZXIuaCIKLSNpbmNsdWRlICJB
dWRpb05vZGVJbnB1dC5oIgotI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgotI2luY2x1ZGUg
IkF1ZGlvU2Vzc2lvbi5oIgotI2luY2x1ZGUgIkJpcXVhZEZpbHRlck5vZGUuaCIKLSNpbmNsdWRl
ICJDaGFubmVsTWVyZ2VyTm9kZS5oIgotI2luY2x1ZGUgIkNoYW5uZWxTcGxpdHRlck5vZGUuaCIK
LSNpbmNsdWRlICJDb252b2x2ZXJOb2RlLmgiCi0jaW5jbHVkZSAiRGVmYXVsdEF1ZGlvRGVzdGlu
YXRpb25Ob2RlLmgiCi0jaW5jbHVkZSAiRGVsYXlOb2RlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJEeW5hbWljc0NvbXByZXNzb3JOb2RlLmgiCi0jaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgotI2luY2x1ZGUgIkZGVEZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkdhaW5Ob2RlLmgiCi0jaW5jbHVkZSAiR2Vu
ZXJpY0V2ZW50UXVldWUuaCIKLSNpbmNsdWRlICJIUlRGRGF0YWJhc2VMb2FkZXIuaCIKLSNpbmNs
dWRlICJIUlRGUGFubmVyLmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKLSNp
bmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTmV0d29ya2luZ0NvbnRleHQuaCIKLSNpbmNs
dWRlICJPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJPZmZsaW5lQXVk
aW9EZXN0aW5hdGlvbk5vZGUuaCIKLSNpbmNsdWRlICJPc2NpbGxhdG9yTm9kZS5oIgotI2luY2x1
ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJQYW5uZXJOb2RlLmgiCi0jaW5jbHVkZSAiUGVyaW9kaWNX
YXZlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyLmgiCi0jaW5jbHVk
ZSAiU2NyaXB0Q29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNjcmlwdFByb2Nlc3Nvck5vZGUuaCIK
LSNpbmNsdWRlICJXYXZlU2hhcGVyTm9kZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Nj
cmlwdENhbGxTdGFjay5oPgogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbmNsdWRlICJN
ZWRpYVN0cmVhbS5oIgpAQCAtODEsNDkgKzQyLDE0IEBACiAjaW5jbHVkZSAiTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmgiCiAjZW5kaWYKIAotI2lmIERFQlVHX0FVRElPTk9ERV9SRUZFUkVO
Q0VTCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNlbmRpZgotCi0jaWYgVVNFKEdTVFJFQU1FUikKLSNp
bmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KLSNp
bmNsdWRlIDx3dGYvQXRvbWljcy5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotY29uc3QgdW5zaWduZWQgTWF4UGVyaW9kaWNXYXZl
TGVuZ3RoID0gNDA5NjsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoQXVkaW9Db250ZXh0QmFzZSk7Ci1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoQXVkaW9Db250ZXh0KTsKLQotI2RlZmluZSBSRUxFQVNFX0xPR19JRl9BTExPV0VEKGZtdCwg
Li4uKSBSRUxFQVNFX0xPR19JRihkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnBhZ2UoKSAmJiBk
b2N1bWVudCgpLT5wYWdlKCktPmlzQWx3YXlzT25Mb2dnaW5nQWxsb3dlZCgpLCBNZWRpYSwgIiVw
IC0gQXVkaW9Db250ZXh0OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKLSAgICAKLWJvb2wg
QXVkaW9Db250ZXh0Ojppc1NhbXBsZVJhdGVSYW5nZUdvb2QoZmxvYXQgc2FtcGxlUmF0ZSkKLXsK
LSAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZSBpZiB0aGUgbWluaW11bSBzYW1wbGUtcmF0
ZSBjb3VsZCBiZSBsZXNzIHRoYW4gNDQuMUtIeiwKLSAgICAvLyBidXQgdGhhdCB3aWxsIHJlcXVp
cmUgc29tZSBmaXhlcyBpbiBIUlRGUGFubmVyOjpmZnRTaXplRm9yU2FtcGxlUmF0ZSgpLCBhbmQg
c29tZSB0ZXN0aW5nIHRoZXJlLgotICAgIHJldHVybiBzYW1wbGVSYXRlID49IDQ0MTAwICYmIHNh
bXBsZVJhdGUgPD0gOTYwMDA7Ci19Ci0KICNpZiBPUyhXSU5ET1dTKQogLy8gRG9uJ3QgYWxsb3cg
bW9yZSB0aGFuIHRoaXMgbnVtYmVyIG9mIHNpbXVsdGFuZW91cyBBdWRpb0NvbnRleHRzIHRhbGtp
bmcgdG8gaGFyZHdhcmUuCiBjb25zdGV4cHIgdW5zaWduZWQgbWF4SGFyZHdhcmVDb250ZXh0cyA9
IDQ7CiAjZW5kaWYKLXVuc2lnbmVkIEF1ZGlvQ29udGV4dDo6c19oYXJkd2FyZUNvbnRleHRDb3Vu
dCA9IDA7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChBdWRpb0NvbnRleHQpOwogICAg
IAogRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQ29udGV4dD4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlKERv
Y3VtZW50JiBkb2N1bWVudCkKIHsKQEAgLTEzOCwzMjYgKzY0LDM4IEBAIEV4Y2VwdGlvbk9yPFJl
ZjxBdWRpb0NvbnRleHQ+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQp
CiAgICAgcmV0dXJuIGF1ZGlvQ29udGV4dDsKIH0KIAotQXVkaW9Db250ZXh0QmFzZTo6QXVkaW9D
b250ZXh0QmFzZShEb2N1bWVudCYgZG9jdW1lbnQpCi0gICAgOiBBY3RpdmVET01PYmplY3QoZG9j
dW1lbnQpCi17Ci19Ci0KIC8vIENvbnN0cnVjdG9yIGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlv
IGhhcmR3YXJlLgogQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRleHQoRG9jdW1lbnQmIGRvY3VtZW50
KQotICAgIDogQXVkaW9Db250ZXh0QmFzZShkb2N1bWVudCkKLSNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKLSAgICAsIG1fbG9nZ2VyKGRvY3VtZW50LmxvZ2dlcigpKQotICAgICwgbV9sb2dJZGVu
dGlmaWVyKHVuaXF1ZUxvZ0lkZW50aWZpZXIoKSkKLSNlbmRpZgotICAgICwgbV9tZWRpYVNlc3Np
b24oUGxhdGZvcm1NZWRpYVNlc3Npb246OmNyZWF0ZShQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFn
ZXI6OnNoYXJlZE1hbmFnZXIoKSwgKnRoaXMpKQotICAgICwgbV9ldmVudFF1ZXVlKE1haW5UaHJl
YWRHZW5lcmljRXZlbnRRdWV1ZTo6Y3JlYXRlKCp0aGlzKSkKKyAgICA6IEJhc2VBdWRpb0NvbnRl
eHQoZG9jdW1lbnQpCiB7Ci0gICAgLy8gQWNjb3JkaW5nIHRvIHNwZWMgQXVkaW9Db250ZXh0IG11
c3QgZGllIG9ubHkgYWZ0ZXIgcGFnZSBuYXZpZ2F0ZS4KLSAgICAvLyBMZXRzIG1hcmsgaXQgYXMg
QWN0aXZlRE9NT2JqZWN0IHdpdGggcGVuZGluZyBhY3Rpdml0eSBhbmQgdW5tYXJrIGl0IGluIGNs
ZWFyIG1ldGhvZC4KLSAgICBtYWtlUGVuZGluZ0FjdGl2aXR5KCk7Ci0KLSAgICBjb25zdHJ1Y3RD
b21tb24oKTsKLQotICAgIG1fZGVzdGluYXRpb25Ob2RlID0gRGVmYXVsdEF1ZGlvRGVzdGluYXRp
b25Ob2RlOjpjcmVhdGUoKnRoaXMpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRp
b24gbm9kZSdzIG11dGVkIHN0YXRlIHRvIG1hdGNoIHRoZSBwYWdlJ3MgY3VycmVudCBtdXRlZCBz
dGF0ZS4KLSAgICBwYWdlTXV0ZWRTdGF0ZURpZENoYW5nZSgpOwotCi0gICAgZG9jdW1lbnQuYWRk
QXVkaW9Qcm9kdWNlcigqdGhpcyk7Ci0gICAgZG9jdW1lbnQucmVnaXN0ZXJGb3JWaXNpYmlsaXR5
U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKIH0KIAogLy8gQ29uc3RydWN0b3IgZm9yIG9m
ZmxpbmUgKG5vbi1yZWFsdGltZSkgcmVuZGVyaW5nLgogQXVkaW9Db250ZXh0OjpBdWRpb0NvbnRl
eHQoRG9jdW1lbnQmIGRvY3VtZW50LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQotICAgIDog
QXVkaW9Db250ZXh0QmFzZShkb2N1bWVudCkKLSNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKLSAg
ICAsIG1fbG9nZ2VyKGRvY3VtZW50LmxvZ2dlcigpKQotICAgICwgbV9sb2dJZGVudGlmaWVyKHVu
aXF1ZUxvZ0lkZW50aWZpZXIoKSkKLSNlbmRpZgotICAgICwgbV9pc09mZmxpbmVDb250ZXh0KHRy
dWUpCi0gICAgLCBtX21lZGlhU2Vzc2lvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBs
YXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLCAqdGhpcykpCi0gICAg
LCBtX2V2ZW50UXVldWUoTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMp
KQotICAgICwgbV9yZW5kZXJUYXJnZXQocmVuZGVyVGFyZ2V0KQotewotICAgIGNvbnN0cnVjdENv
bW1vbigpOwotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGRlc3RpbmF0aW9uIGZvciBvZmZsaW5lIHJl
bmRlcmluZy4KLSAgICBtX2Rlc3RpbmF0aW9uTm9kZSA9IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9u
Tm9kZTo6Y3JlYXRlKCp0aGlzLCBtX3JlbmRlclRhcmdldC5nZXQoKSk7Ci19Ci0KLXZvaWQgQXVk
aW9Db250ZXh0Ojpjb25zdHJ1Y3RDb21tb24oKQotewotICAgIEZGVEZyYW1lOjppbml0aWFsaXpl
KCk7Ci0gICAgCi0gICAgbV9saXN0ZW5lciA9IEF1ZGlvTGlzdGVuZXI6OmNyZWF0ZSgpOwotCi0g
ICAgQVNTRVJUKGRvY3VtZW50KCkpOwotICAgIGlmIChkb2N1bWVudCgpLT5hdWRpb1BsYXliYWNr
UmVxdWlyZXNVc2VyR2VzdHVyZSgpKQotICAgICAgICBhZGRCZWhhdmlvclJlc3RyaWN0aW9uKFJl
cXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7Ci0gICAgZWxzZQotICAg
ICAgICBtX3Jlc3RyaWN0aW9ucyA9IE5vUmVzdHJpY3Rpb25zOwotCi0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRp
b1N0YXJ0UmVzdHJpY3Rpb24pOwotI2VuZGlmCi19Ci0KLUF1ZGlvQ29udGV4dDo6fkF1ZGlvQ29u
dGV4dCgpCi17Ci0jaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKLSAgICBmcHJpbnRmKHN0
ZGVyciwgIiVwOiBBdWRpb0NvbnRleHQ6On5BdWRpb0NvbnRleHQoKVxuIiwgdGhpcyk7Ci0jZW5k
aWYKLSAgICBBU1NFUlQoIW1faXNJbml0aWFsaXplZCk7Ci0gICAgQVNTRVJUKG1faXNTdG9wU2No
ZWR1bGVkKTsKLSAgICBBU1NFUlQobV9ub2Rlc1RvRGVsZXRlLmlzRW1wdHkoKSk7Ci0gICAgQVNT
RVJUKG1fcmVmZXJlbmNlZE5vZGVzLmlzRW1wdHkoKSk7Ci0gICAgQVNTRVJUKG1fZmluaXNoZWRO
b2Rlcy5pc0VtcHR5KCkpOyAvLyBGSVhNRSAoYnVnIDEwNTg3MCk6IFRoaXMgYXNzZXJ0aW9uIGZh
aWxzIG9uIHRlc3RzIHNvbWV0aW1lcy4KLSAgICBBU1NFUlQobV9hdXRvbWF0aWNQdWxsTm9kZXMu
aXNFbXB0eSgpKTsKLSAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcpCi0g
ICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLnJlc2l6ZShtX2F1dG9tYXRpY1B1
bGxOb2Rlcy5zaXplKCkpOwotICAgIEFTU0VSVChtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rl
cy5pc0VtcHR5KCkpOwotICAgIC8vIEZJWE1FOiBDYW4gd2UgYXNzZXJ0IHRoYXQgbV9kZWZlcnJl
ZEZpbmlzaERlcmVmTGlzdCBpcyBlbXB0eT8KLQotICAgIGlmICghaXNPZmZsaW5lQ29udGV4dCgp
ICYmIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkgewotICAgICAgICBkb2N1bWVudCgpLT5yZW1v
dmVBdWRpb1Byb2R1Y2VyKCp0aGlzKTsKLSAgICAgICAgZG9jdW1lbnQoKS0+dW5yZWdpc3RlckZv
clZpc2liaWxpdHlTdGF0ZUNoYW5nZWRDYWxsYmFja3MoKnRoaXMpOwotICAgIH0KLX0KLQotdm9p
ZCBBdWRpb0NvbnRleHQ6OmxhenlJbml0aWFsaXplKCkKLXsKLSAgICBBU1NFUlQoIW1faXNTdG9w
U2NoZWR1bGVkKTsKLQotICAgIGlmIChtX2lzSW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIERvbid0IGFsbG93IHRoZSBjb250ZXh0IHRvIGluaXRpYWxpemUgYSBzZWNvbmQg
dGltZSBhZnRlciBpdCdzIGFscmVhZHkgYmVlbiBleHBsaWNpdGx5IHVuaW5pdGlhbGl6ZWQuCi0g
ICAgQVNTRVJUKCFtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZCk7Ci0gICAgaWYgKG1faXNBdWRpb1Ro
cmVhZEZpbmlzaGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9kZXN0aW5hdGlvbk5v
ZGUpIHsKLSAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPmluaXRpYWxpemUoKTsKLQotICAgICAg
ICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBzdGFydHMg
dGhlIGF1ZGlvIHRocmVhZC4gVGhlIGRlc3RpbmF0aW9uIG5vZGUncyBwcm92aWRlSW5wdXQoKSBt
ZXRob2Qgd2lsbCBub3cgYmUgY2FsbGVkIHJlcGVhdGVkbHkgdG8gcmVuZGVyIGF1ZGlvLgotICAg
ICAgICAgICAgLy8gRWFjaCB0aW1lIHByb3ZpZGVJbnB1dCgpIGlzIGNhbGxlZCwgYSBwb3J0aW9u
IG9mIHRoZSBhdWRpbyBzdHJlYW0gaXMgcmVuZGVyZWQuIExldCdzIGNhbGwgdGhpcyB0aW1lIHBl
cmlvZCBhICJyZW5kZXIgcXVhbnR1bSIuCi0gICAgICAgICAgICAvLyBOT1RFOiBmb3Igbm93IGRl
ZmF1bHQgQXVkaW9Db250ZXh0IGRvZXMgbm90IG5lZWQgYW4gZXhwbGljaXQgc3RhcnRSZW5kZXJp
bmcoKSBjYWxsIGZyb20gSmF2YVNjcmlwdC4KLSAgICAgICAgICAgIC8vIFdlIG1heSB3YW50IHRv
IGNvbnNpZGVyIHJlcXVpcmluZyBpdCBmb3Igc3ltbWV0cnkgd2l0aCBPZmZsaW5lQXVkaW9Db250
ZXh0LgotICAgICAgICAgICAgc3RhcnRSZW5kZXJpbmcoKTsKLSAgICAgICAgICAgICsrc19oYXJk
d2FyZUNvbnRleHRDb3VudDsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX2lzSW5pdGlhbGl6ZWQg
PSB0cnVlOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6Y2xlYXIoKQorICAgIDogQmFzZUF1ZGlv
Q29udGV4dChkb2N1bWVudCwgcmVuZGVyVGFyZ2V0KQogewotICAgIFJlZjxBdWRpb0NvbnRleHQ+
IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotCi0gICAgLy8gV2UgaGF2ZSB0byByZWxlYXNlIG91ciBy
ZWZlcmVuY2UgdG8gdGhlIGRlc3RpbmF0aW9uIG5vZGUgYmVmb3JlIHRoZSBjb250ZXh0IHdpbGwg
ZXZlciBiZSBkZWxldGVkIHNpbmNlIHRoZSBkZXN0aW5hdGlvbiBub2RlIGhvbGRzIGEgcmVmZXJl
bmNlIHRvIHRoZSBjb250ZXh0LgotICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZSkKLSAgICAgICAg
bV9kZXN0aW5hdGlvbk5vZGUgPSBudWxscHRyOwotCi0gICAgLy8gQXVkaW8gdGhyZWFkIGlzIGRl
YWQuIE5vYm9keSB3aWxsIHNjaGVkdWxlIG5vZGUgZGVsZXRpb24gYWN0aW9uLiBMZXQncyBkbyBp
dCBvdXJzZWx2ZXMuCi0gICAgZG8gewotICAgICAgICBkZWxldGVNYXJrZWROb2RlcygpOwotICAg
ICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kVmVjdG9yKG1fbm9kZXNNYXJrZWRGb3JEZWxldGlv
bik7Ci0gICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5jbGVhcigpOwotICAgIH0gd2hp
bGUgKG1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpOwotCi0gICAgY2xlYXJQZW5kaW5nQWN0aXZpdHko
KTsKIH0KIAotdm9pZCBBdWRpb0NvbnRleHQ6OnVuaW5pdGlhbGl6ZSgpCit2b2lkIEF1ZGlvQ29u
dGV4dDo6Y2xvc2UoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHsKLSAgICBB
TFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwotICAgIAotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBpZiAoIW1faXNJbml0aWFsaXplZCkKKyAgICBpZiAoaXNPZmZsaW5lQ29udGV4
dCgpIHx8IGlzU3RvcHBlZCgpKSB7CisgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0
ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhpcyBzdG9wcyB0aGUgYXVkaW8g
dGhyZWFkIGFuZCBhbGwgYXVkaW8gcmVuZGVyaW5nLgotICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9k
ZSkKLSAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnVuaW5pdGlhbGl6ZSgpOwotCi0gICAgLy8g
RG9uJ3QgYWxsb3cgdGhlIGNvbnRleHQgdG8gaW5pdGlhbGl6ZSBhIHNlY29uZCB0aW1lIGFmdGVy
IGl0J3MgYWxyZWFkeSBiZWVuIGV4cGxpY2l0bHkgdW5pbml0aWFsaXplZC4KLSAgICBtX2lzQXVk
aW9UaHJlYWRGaW5pc2hlZCA9IHRydWU7Ci0KLSAgICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSkg
ewotICAgICAgICBBU1NFUlQoc19oYXJkd2FyZUNvbnRleHRDb3VudCk7Ci0gICAgICAgIC0tc19o
YXJkd2FyZUNvbnRleHRDb3VudDsKLQotICAgICAgICAvLyBPZmZsaW5lIGNvbnRleHRzIG1vdmUg
dG8gJ0Nsb3NlZCcgc3RhdGUgd2hlbiBkaXNwYXRjaGluZyB0aGUgY29tcGxldGlvbiBldmVudC4K
LSAgICAgICAgc2V0U3RhdGUoU3RhdGU6OkNsb3NlZCk7CiAgICAgfQogCi0gICAgLy8gR2V0IHJp
ZCBvZiB0aGUgc291cmNlcyB3aGljaCBtYXkgc3RpbGwgYmUgcGxheWluZy4KLSAgICBkZXJlZlVu
ZmluaXNoZWRTb3VyY2VOb2RlcygpOwotCi0gICAgbV9pc0luaXRpYWxpemVkID0gZmFsc2U7Ci19
Ci0KLWJvb2wgQXVkaW9Db250ZXh0Ojppc0luaXRpYWxpemVkKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV9pc0luaXRpYWxpemVkOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6YWRkUmVhY3Rpb24o
U3RhdGUgc3RhdGUsIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCi17Ci0gICAg
c2l6ZV90IHN0YXRlSW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0YXRlKTsKLSAgICBpZiAo
c3RhdGVJbmRleCA+PSBtX3N0YXRlUmVhY3Rpb25zLnNpemUoKSkKLSAgICAgICAgbV9zdGF0ZVJl
YWN0aW9ucy5ncm93KHN0YXRlSW5kZXggKyAxKTsKLQotICAgIG1fc3RhdGVSZWFjdGlvbnNbc3Rh
dGVJbmRleF0uYXBwZW5kKFdURk1vdmUocHJvbWlzZSkpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4
dDo6c2V0U3RhdGUoU3RhdGUgc3RhdGUpCi17Ci0gICAgaWYgKG1fc3RhdGUgPT0gc3RhdGUpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc3RhdGUgPSBzdGF0ZTsKLSAgICBtX2V2ZW50UXVldWUt
PmVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdGF0ZWNoYW5nZUV2ZW50
LCBFdmVudDo6Q2FuQnViYmxlOjpZZXMsIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vKSk7Ci0KLSAg
ICBzaXplX3Qgc3RhdGVJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc3RhdGUpOwotICAgIGlm
IChzdGF0ZUluZGV4ID49IG1fc3RhdGVSZWFjdGlvbnMuc2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBWZWN0b3I8RE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+PiByZWFjdGlvbnM7Ci0gICAg
bV9zdGF0ZVJlYWN0aW9uc1tzdGF0ZUluZGV4XS5zd2FwKHJlYWN0aW9ucyk7Ci0KLSAgICBmb3Ig
KGF1dG8mIHByb21pc2UgOiByZWFjdGlvbnMpCisgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkNs
b3NlZCB8fCAhZGVzdGluYXRpb25Ob2RlKCkpIHsKICAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7
Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpzdG9wKCkKLXsKLSAgICBBTFdBWVNfTE9HKExPR0lE
RU5USUZJRVIpOwotICAgIAotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBV
c3VhbGx5IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgY2FsbHMgc3RvcCB0d2ljZS4KLSAgICBpZiAo
bV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2lzU3RvcFNjaGVkdWxl
ZCA9IHRydWU7Ci0KLSAgICBBU1NFUlQoZG9jdW1lbnQoKSk7Ci0gICAgZG9jdW1lbnQoKS0+dXBk
YXRlSXNQbGF5aW5nTWVkaWEoKTsKLQotICAgIHVuaW5pdGlhbGl6ZSgpOwotICAgIGNsZWFyKCk7
Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pCi17
Ci0gICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OlJ1bm5pbmcpIHsKLSAgICAgICAgbV9tZWRpYVNl
c3Npb24tPmJlZ2luSW50ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpQbGF5YmFja1N1
c3BlbmRlZCk7Ci0gICAgICAgIGRvY3VtZW50KCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7Ci0g
ICAgfQotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6cmVzdW1lKCkKLXsKLSAgICBpZiAoc3RhdGUo
KSA9PSBTdGF0ZTo6SW50ZXJydXB0ZWQpIHsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZElu
dGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZyk7Ci0gICAg
ICAgIGRvY3VtZW50KCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7Ci0gICAgfQotfQotCi1jb25z
dCBjaGFyKiBBdWRpb0NvbnRleHQ6OmFjdGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdAotewotICAg
IHJldHVybiAiQXVkaW9Db250ZXh0IjsKLX0KLQotRG9jdW1lbnQqIEF1ZGlvQ29udGV4dEJhc2U6
OmRvY3VtZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCk7Ci19Ci0KLURvY3VtZW50SWRlbnRpZmllciBBdWRpb0NvbnRl
eHQ6Omhvc3RpbmdEb2N1bWVudElkZW50aWZpZXIoKSBjb25zdAotewotICAgIGF1dG8qIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCk7Ci0gICAg
cmV0dXJuIGRvY3VtZW50ID8gZG9jdW1lbnQtPmlkZW50aWZpZXIoKSA6IERvY3VtZW50SWRlbnRp
ZmllciB7IH07Ci19Ci0KLWJvb2wgQXVkaW9Db250ZXh0Ojppc1N1c3BlbmRlZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuICFkb2N1bWVudCgpIHx8IGRvY3VtZW50KCktPmFjdGl2ZURPTU9iamVjdHNB
cmVTdXNwZW5kZWQoKSB8fCBkb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJlU3RvcHBlZCgp
OwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgpCi17Ci0g
ICAgLy8gRG8gbm90IHN1c3BlbmQgaWYgYXVkaW8gaXMgYXVkaWJsZS4KLSAgICBpZiAoIWRvY3Vt
ZW50KCkgfHwgbWVkaWFTdGF0ZSgpID09IE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ0F1ZGlvIHx8
IG1faXNTdG9wU2NoZWR1bGVkKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZG9jdW1lbnQo
KS0+aGlkZGVuKCkpIHsKLSAgICAgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OlJ1bm5pbmcpIHsK
LSAgICAgICAgICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInZpc2liaWxpdHlTdGF0ZUNoYW5n
ZWQoKSBTdXNwZW5kaW5nIHBsYXliYWNrIGFmdGVyIGdvaW5nIHRvIHRoZSBiYWNrZ3JvdW5kIik7
Ci0gICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1N
ZWRpYVNlc3Npb246OkVudGVyaW5nQmFja2dyb3VuZCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoc3RhdGUoKSA9PSBTdGF0ZTo6SW50ZXJydXB0ZWQpIHsKLSAgICAgICAg
ICAgIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoInZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKSBSZXN1
bWluZyBwbGF5YmFjayBhZnRlciBlbnRlcmluZyBmb3JlZ3JvdW5kIik7Ci0gICAgICAgICAgICBt
X21lZGlhU2Vzc2lvbi0+ZW5kSW50ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNYXlS
ZXN1bWVQbGF5aW5nKTsKLSAgICAgICAgfQogICAgIH0KLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6
OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgVVJMJiB1cmwpIGNvbnN0Ci17Ci0gICAgaWYgKHVybC5w
cm90b2NvbElzRGF0YSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoYXV0byog
ZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gIWRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLmNhblJlcXVlc3QodXJsKTsKLQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZm
ZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9h
dCBzYW1wbGVSYXRlKQotewotICAgIGF1dG8gYXVkaW9CdWZmZXIgPSBBdWRpb0J1ZmZlcjo6Y3Jl
YXRlKG51bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVzLCBzYW1wbGVSYXRlKTsKLSAgICBp
ZiAoIWF1ZGlvQnVmZmVyKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVk
RXJyb3IgfTsKLSAgICByZXR1cm4gYXVkaW9CdWZmZXIucmVsZWFzZU5vbk51bGwoKTsKLX0KLQot
RXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXIo
QXJyYXlCdWZmZXImIGFycmF5QnVmZmVyLCBib29sIG1peFRvTW9ubykKLXsKLSAgICBhdXRvIGF1
ZGlvQnVmZmVyID0gQXVkaW9CdWZmZXI6OmNyZWF0ZUZyb21BdWRpb0ZpbGVEYXRhKGFycmF5QnVm
ZmVyLmRhdGEoKSwgYXJyYXlCdWZmZXIuYnl0ZUxlbmd0aCgpLCBtaXhUb01vbm8sIHNhbXBsZVJh
dGUoKSk7Ci0gICAgaWYgKCFhdWRpb0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFN5bnRheEVycm9yIH07Ci0gICAgcmV0dXJuIGF1ZGlvQnVmZmVyLnJlbGVhc2VOb25OdWxsKCk7
Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZWNvZGVBdWRpb0RhdGEoUmVmPEFycmF5QnVmZmVy
PiYmIGF1ZGlvRGF0YSwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYgc3VjY2Vzc0NhbGxi
YWNrLCBSZWZQdHI8QXVkaW9CdWZmZXJDYWxsYmFjaz4mJiBlcnJvckNhbGxiYWNrKQotewotICAg
IGlmICghbV9hdWRpb0RlY29kZXIpCi0gICAgICAgIG1fYXVkaW9EZWNvZGVyID0gbWFrZVVuaXF1
ZTxBc3luY0F1ZGlvRGVjb2Rlcj4oKTsKLSAgICBtX2F1ZGlvRGVjb2Rlci0+ZGVjb2RlQXN5bmMo
V1RGTW92ZShhdWRpb0RhdGEpLCBzYW1wbGVSYXRlKCksIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNr
KSwgV1RGTW92ZShlcnJvckNhbGxiYWNrKSk7Ci19CiAKLUV4Y2VwdGlvbk9yPFJlZjxBdWRpb0J1
ZmZlclNvdXJjZU5vZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlclNvdXJjZSgpCi17Ci0g
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLQotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0KLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworICAgIGFkZFJlYWN0aW9uKFN0YXRlOjpDbG9zZWQs
IFdURk1vdmUocHJvbWlzZSkpOwogCiAgICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICBSZWY8QXVk
aW9CdWZmZXJTb3VyY2VOb2RlPiBub2RlID0gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUo
KnRoaXMsIHNhbXBsZVJhdGUoKSk7Ci0KLSAgICAvLyBCZWNhdXNlIHRoaXMgaXMgYW4gQXVkaW9T
Y2hlZHVsZWRTb3VyY2VOb2RlLCB0aGUgY29udGV4dCBrZWVwcyBhIHJlZmVyZW5jZSB1bnRpbCBp
dCBoYXMgZmluaXNoZWQgcGxheWluZy4KLSAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgQXVkaW9T
Y2hlZHVsZWRTb3VyY2VOb2RlOjpmaW5pc2goKSBjYWxscyBBdWRpb0NvbnRleHQ6Om5vdGlmeU5v
ZGVGaW5pc2hlZFByb2Nlc3NpbmcoKS4KLSAgICByZWZOb2RlKG5vZGUpOwogCi0gICAgcmV0dXJu
IG5vZGU7CisgICAgZGVzdGluYXRpb25Ob2RlKCktPmNsb3NlKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgc2V0U3RhdGUoU3RhdGU6OkNsb3NlZCk7Cisg
ICAgICAgIHVuaW5pdGlhbGl6ZSgpOworICAgIH0pOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpA
QCAtNDY4LDcgKzEwNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxlbWVudFNvCiAKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCi0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkIHx8IG1lZGlhRWxl
bWVudC5hdWRpb1NvdXJjZU5vZGUoKSkKKyAgICBpZiAoaXNTdG9wcGVkKCkgfHwgbWVkaWFFbGVt
ZW50LmF1ZGlvU291cmNlTm9kZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxp
ZFN0YXRlRXJyb3IgfTsKIAogICAgIGxhenlJbml0aWFsaXplKCk7CkBAIC00ODgsMTAgKzEyNiwx
MCBAQCBFeGNlcHRpb25PcjxSZWY8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPj4gQXVkaW9D
b250ZXh0OjpjcmVhdGVNZWRpYUVsZW1lbnRTbwogRXhjZXB0aW9uT3I8UmVmPE1lZGlhU3RyZWFt
QXVkaW9Tb3VyY2VOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShN
ZWRpYVN0cmVhbSYgbWVkaWFTdHJlYW0pCiB7CiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVS
KTsKLSAgICAKKwogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKLSAgICBpZiAobV9pc1N0
b3BTY2hlZHVsZWQpCisgICAgaWYgKGlzU3RvcHBlZCgpKQogICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIGF1dG8gYXVkaW9UcmFja3MgPSBtZWRp
YVN0cmVhbS5nZXRBdWRpb1RyYWNrcygpOwpAQCAtNTE5LDcgKzE1Nyw3IEBAIEV4Y2VwdGlvbk9y
PFJlZjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVk
aWFTdHJlYW1Tb3VyCiAKIEV4Y2VwdGlvbk9yPFJlZjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRp
b25Ob2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uKCkKIHsK
LSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAgaWYgKGlzU3RvcHBlZCgpKQogICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKIAogICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgYW4gb3B0aW9uYWwgYXJndW1lbnQgd2hpY2ggc3BlY2lmaWVzIHRo
ZSBudW1iZXIgb2YgY2hhbm5lbHMuCkBAIC01MjksODkwICsxNjcsNiBAQCBFeGNlcHRpb25PcjxS
ZWY8TWVkaWFTdHJlYW1BdWRpb0Rlc3RpbmF0aW9uTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRl
TWVkaWFTdHJlYQogCiAjZW5kaWYKIAotRXhjZXB0aW9uT3I8UmVmPFNjcmlwdFByb2Nlc3Nvck5v
ZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6
ZSwgc2l6ZV90IG51bWJlck9mSW5wdXRDaGFubmVscywgc2l6ZV90IG51bWJlck9mT3V0cHV0Q2hh
bm5lbHMpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICAKLSAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKLQotICAgIGxhenlJbml0
aWFsaXplKCk7Ci0KLSAgICAvLyBXM0MgRWRpdG9yJ3MgRHJhZnQgMDYgSnVuZSAyMDE3Ci0gICAg
Ly8gIGh0dHBzOi8vd2ViYXVkaW8uZ2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3dpZGwtQmFzZUF1
ZGlvQ29udGV4dC1jcmVhdGVTY3JpcHRQcm9jZXNzb3ItU2NyaXB0UHJvY2Vzc29yTm9kZS11bnNp
Z25lZC1sb25nLWJ1ZmZlclNpemUtdW5zaWduZWQtbG9uZy1udW1iZXJPZklucHV0Q2hhbm5lbHMt
dW5zaWduZWQtbG9uZy1udW1iZXJPZk91dHB1dENoYW5uZWxzCi0KLSAgICAvLyBUaGUgYnVmZmVy
U2l6ZSBwYXJhbWV0ZXIgZGV0ZXJtaW5lcyB0aGUgYnVmZmVyIHNpemUgaW4gdW5pdHMgb2Ygc2Ft
cGxlLWZyYW1lcy4gSWYgaXQncyBub3QgcGFzc2VkIGluLAotICAgIC8vIG9yIGlmIHRoZSB2YWx1
ZSBpcyAwLCB0aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiB3aWxsIGNob29zZSB0aGUgYmVzdCBidWZm
ZXIgc2l6ZSBmb3IgdGhlIGdpdmVuIGVudmlyb25tZW50LAotICAgIC8vIHdoaWNoIHdpbGwgYmUg
Y29uc3RhbnQgcG93ZXIgb2YgMiB0aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZiB0aGUgbm9kZS4g
Li4uIElmIHRoZSB2YWx1ZSBvZiB0aGlzIHBhcmFtZXRlcgotICAgIC8vIGlzIG5vdCBvbmUgb2Yg
dGhlIGFsbG93ZWQgcG93ZXItb2YtMiB2YWx1ZXMgbGlzdGVkIGFib3ZlLCBhbiBJbmRleFNpemVF
cnJvciBtdXN0IGJlIHRocm93bi4KLSAgICBzd2l0Y2ggKGJ1ZmZlclNpemUpIHsKLSAgICBjYXNl
IDA6Ci0jaWYgVVNFKEFVRElPX1NFU1NJT04pCi0gICAgICAgIC8vIFBpY2sgYSB2YWx1ZSBiZXR3
ZWVuIDI1NiAoMl44KSBhbmQgMTYzODQgKDJeMTQpLCBiYXNlZCBvbiB0aGUgYnVmZmVyIHNpemUg
b2YgdGhlIGN1cnJlbnQgQXVkaW9TZXNzaW9uOgotICAgICAgICBidWZmZXJTaXplID0gMSA8PCBz
dGQ6Om1heDxzaXplX3Q+KDgsIHN0ZDo6bWluPHNpemVfdD4oMTQsIHN0ZDo6bG9nMihBdWRpb1Nl
c3Npb246OnNoYXJlZFNlc3Npb24oKS5idWZmZXJTaXplKCkpKSk7Ci0jZWxzZQotICAgICAgICBi
dWZmZXJTaXplID0gMjA0ODsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI1NjoK
LSAgICBjYXNlIDUxMjoKLSAgICBjYXNlIDEwMjQ6Ci0gICAgY2FzZSAyMDQ4OgotICAgIGNhc2Ug
NDA5NjoKLSAgICBjYXNlIDgxOTI6Ci0gICAgY2FzZSAxNjM4NDoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07
Ci0gICAgfQotCi0gICAgLy8gQW4gSW5kZXhTaXplRXJyb3IgZXhjZXB0aW9uIG11c3QgYmUgdGhy
b3duIGlmIGJ1ZmZlclNpemUgb3IgbnVtYmVyT2ZJbnB1dENoYW5uZWxzIG9yIG51bWJlck9mT3V0
cHV0Q2hhbm5lbHMKLSAgICAvLyBhcmUgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UuIEl0IGlzIGlu
dmFsaWQgZm9yIGJvdGggbnVtYmVyT2ZJbnB1dENoYW5uZWxzIGFuZCBudW1iZXJPZk91dHB1dENo
YW5uZWxzIHRvIGJlIHplcm8uCi0gICAgLy8gSW4gdGhpcyBjYXNlIGFuIEluZGV4U2l6ZUVycm9y
IG11c3QgYmUgdGhyb3duLgotCi0gICAgaWYgKCFudW1iZXJPZklucHV0Q2hhbm5lbHMgJiYgIW51
bWJlck9mT3V0cHV0Q2hhbm5lbHMpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBw
b3J0ZWRFcnJvciB9OwotCi0gICAgLy8gVGhpcyBwYXJhbWV0ZXIgW251bWJlck9mSW5wdXRDaGFu
bmVsc10gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGlzIG5vZGUncyBp
bnB1dC4gVmFsdWVzIG9mCi0gICAgLy8gdXAgdG8gMzIgbXVzdCBiZSBzdXBwb3J0ZWQuIEEgTm90
U3VwcG9ydGVkRXJyb3IgbXVzdCBiZSB0aHJvd24gaWYgdGhlIG51bWJlciBvZiBjaGFubmVscyBp
cyBub3Qgc3VwcG9ydGVkLgotCi0gICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscyA+IG1heE51
bWJlck9mQ2hhbm5lbHMoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRl
ZEVycm9yIH07Ci0KLSAgICAvLyBUaGlzIHBhcmFtZXRlciBbbnVtYmVyT2ZPdXRwdXRDaGFubmVs
c10gZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGlzIG5vZGUncyBvdXRw
dXQuIFZhbHVlcyBvZgotICAgIC8vIHVwIHRvIDMyIG11c3QgYmUgc3VwcG9ydGVkLiBBIE5vdFN1
cHBvcnRlZEVycm9yIG11c3QgYmUgdGhyb3duIGlmIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaXMg
bm90IHN1cHBvcnRlZC4KLQotICAgIGlmIChudW1iZXJPZk91dHB1dENoYW5uZWxzID4gbWF4TnVt
YmVyT2ZDaGFubmVscygpKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVk
RXJyb3IgfTsKLQotICAgIGF1dG8gbm9kZSA9IFNjcmlwdFByb2Nlc3Nvck5vZGU6OmNyZWF0ZSgq
dGhpcywgc2FtcGxlUmF0ZSgpLCBidWZmZXJTaXplLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51
bWJlck9mT3V0cHV0Q2hhbm5lbHMpOwotCi0gICAgcmVmTm9kZShub2RlKTsgLy8gY29udGV4dCBr
ZWVwcyByZWZlcmVuY2UgdW50aWwgd2Ugc3RvcCBtYWtpbmcgamF2YXNjcmlwdCByZW5kZXJpbmcg
Y2FsbGJhY2tzCi0gICAgcmV0dXJuIG5vZGU7Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZjxCaXF1YWRG
aWx0ZXJOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVCaXF1YWRGaWx0ZXIoKQotewotICAgIEFM
V0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0gICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciB9OwotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLQotICAgIHJl
dHVybiBCaXF1YWRGaWx0ZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7Ci19Ci0K
LUV4Y2VwdGlvbk9yPFJlZjxXYXZlU2hhcGVyTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlV2F2
ZVNoYXBlcigpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICAKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07Ci0KLSAgICBsYXp5SW5p
dGlhbGl6ZSgpOwotICAgIHJldHVybiBXYXZlU2hhcGVyTm9kZTo6Y3JlYXRlKCp0aGlzKTsKLX0K
LQotRXhjZXB0aW9uT3I8UmVmPFBhbm5lck5vZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZVBhbm5l
cigpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICAKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07Ci0KLSAgICBsYXp5SW5pdGlhbGl6
ZSgpOwotICAgIHJldHVybiBQYW5uZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7
Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZjxDb252b2x2ZXJOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVh
dGVDb252b2x2ZXIoKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0gICAgCi0g
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0g
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotCi0gICAgbGF6
eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gQ29udm9sdmVyTm9kZTo6Y3JlYXRlKCp0aGlzLCBz
YW1wbGVSYXRlKCkpOwotfQotCi1FeGNlcHRpb25PcjxSZWY8RHluYW1pY3NDb21wcmVzc29yTm9k
ZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCkKLXsKLSAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIpOwotICAgIAotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Ci0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKLQotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJu
IER5bmFtaWNzQ29tcHJlc3Nvck5vZGU6OmNyZWF0ZSgqdGhpcywgc2FtcGxlUmF0ZSgpKTsKLX0K
LQotRXhjZXB0aW9uT3I8UmVmPEFuYWx5c2VyTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQW5h
bHlzZXIoKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7Ci0gICAgCi0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OwotCi0gICAgbGF6eUluaXRp
YWxpemUoKTsKLSAgICByZXR1cm4gQW5hbHlzZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJh
dGUoKSk7Ci19Ci0KLUV4Y2VwdGlvbk9yPFJlZjxHYWluTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3Jl
YXRlR2FpbigpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICAKLSAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07Ci0KLSAgICBsYXp5SW5p
dGlhbGl6ZSgpOwotICAgIHJldHVybiBHYWluTm9kZTo6Y3JlYXRlKCp0aGlzLCBzYW1wbGVSYXRl
KCkpOwotfQotCi1FeGNlcHRpb25PcjxSZWY8RGVsYXlOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVh
dGVEZWxheShkb3VibGUgbWF4RGVsYXlUaW1lKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUik7Ci0gICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0
b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciB9OwotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICByZXR1cm4gRGVsYXlOb2RlOjpjcmVh
dGUoKnRoaXMsIHNhbXBsZVJhdGUoKSwgbWF4RGVsYXlUaW1lKTsKLX0KLQotRXhjZXB0aW9uT3I8
UmVmPENoYW5uZWxTcGxpdHRlck5vZGU+PiBBdWRpb0NvbnRleHQ6OmNyZWF0ZUNoYW5uZWxTcGxp
dHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzKQotewotICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUik7Ci0gICAgCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBpZiAobV9pc1N0
b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciB9OwotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLSAgICBhdXRvIG5vZGUgPSBDaGFubmVsU3Bs
aXR0ZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSwgbnVtYmVyT2ZPdXRwdXRzKTsK
LSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbmRleFNpemVFcnJv
ciB9OwotICAgIHJldHVybiBub2RlLnJlbGVhc2VOb25OdWxsKCk7Ci19Ci0KLUV4Y2VwdGlvbk9y
PFJlZjxDaGFubmVsTWVyZ2VyTm9kZT4+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlQ2hhbm5lbE1lcmdl
cihzaXplX3QgbnVtYmVyT2ZJbnB1dHMpCi17Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVS
KTsKLSAgICAKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIGlmIChtX2lzU3RvcFNj
aGVkdWxlZCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07
Ci0KLSAgICBsYXp5SW5pdGlhbGl6ZSgpOwotICAgIGF1dG8gbm9kZSA9IENoYW5uZWxNZXJnZXJO
b2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSwgbnVtYmVyT2ZJbnB1dHMpOwotICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07Ci0g
ICAgcmV0dXJuIG5vZGUucmVsZWFzZU5vbk51bGwoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmPE9z
Y2lsbGF0b3JOb2RlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVPc2NpbGxhdG9yKCkKLXsKLSAgICBB
TFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwotICAgIAotICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKLQotICAgIGxhenlJbml0aWFsaXplKCk7Ci0KLSAgICBS
ZWY8T3NjaWxsYXRvck5vZGU+IG5vZGUgPSBPc2NpbGxhdG9yTm9kZTo6Y3JlYXRlKCp0aGlzLCBz
YW1wbGVSYXRlKCkpOwotCi0gICAgLy8gQmVjYXVzZSB0aGlzIGlzIGFuIEF1ZGlvU2NoZWR1bGVk
U291cmNlTm9kZSwgdGhlIGNvbnRleHQga2VlcHMgYSByZWZlcmVuY2UgdW50aWwgaXQgaGFzIGZp
bmlzaGVkIHBsYXlpbmcuCi0gICAgLy8gV2hlbiB0aGlzIGhhcHBlbnMsIEF1ZGlvU2NoZWR1bGVk
U291cmNlTm9kZTo6ZmluaXNoKCkgY2FsbHMgQXVkaW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNo
ZWRQcm9jZXNzaW5nKCkuCi0gICAgcmVmTm9kZShub2RlKTsKLQotICAgIHJldHVybiBub2RlOwot
fQotCi1FeGNlcHRpb25PcjxSZWY8UGVyaW9kaWNXYXZlPj4gQXVkaW9Db250ZXh0OjpjcmVhdGVQ
ZXJpb2RpY1dhdmUoRmxvYXQzMkFycmF5JiByZWFsLCBGbG9hdDMyQXJyYXkmIGltYWdpbmFyeSkK
LXsKLSAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwotICAgIAotICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKLQotICAgIGlmIChyZWFsLmxlbmd0aCgp
ICE9IGltYWdpbmFyeS5sZW5ndGgoKSB8fCAocmVhbC5sZW5ndGgoKSA+IE1heFBlcmlvZGljV2F2
ZUxlbmd0aCkgfHwgIXJlYWwubGVuZ3RoKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bmRleFNpemVFcnJvciB9OwotICAgIGxhenlJbml0aWFsaXplKCk7Ci0gICAgcmV0dXJuIFBlcmlv
ZGljV2F2ZTo6Y3JlYXRlKHNhbXBsZVJhdGUoKSwgcmVhbCwgaW1hZ2luYXJ5KTsKLX0KLQotdm9p
ZCBBdWRpb0NvbnRleHQ6Om5vdGlmeU5vZGVGaW5pc2hlZFByb2Nlc3NpbmcoQXVkaW9Ob2RlKiBu
b2RlKQotewotICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkpOwotICAgIG1fZmluaXNoZWROb2Rl
cy5hcHBlbmQobm9kZSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZkZpbmlzaGVkU291
cmNlTm9kZXMoKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0gICAgQVNTRVJUKGlz
QXVkaW9UaHJlYWQoKSB8fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7Ci0gICAgZm9yIChhdXRv
JiBub2RlIDogbV9maW5pc2hlZE5vZGVzKQotICAgICAgICBkZXJlZk5vZGUoKm5vZGUpOwotCi0g
ICAgbV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpyZWZO
b2RlKEF1ZGlvTm9kZSYgbm9kZSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IEF1dG9Mb2NrZXIgbG9ja2VyKCp0aGlzKTsKLSAgICAKLSAgICBub2RlLnJlZihBdWRpb05vZGU6
OlJlZlR5cGVDb25uZWN0aW9uKTsKLSAgICBtX3JlZmVyZW5jZWROb2Rlcy5hcHBlbmQoJm5vZGUp
OwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZOb2RlKEF1ZGlvTm9kZSYgbm9kZSkKLXsK
LSAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwotICAgIAotICAgIG5vZGUuZGVyZWYoQXVkaW9O
b2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0KLSAgICBBU1NFUlQobV9yZWZlcmVuY2VkTm9kZXMu
Y29udGFpbnMoJm5vZGUpKTsKLSAgICBtX3JlZmVyZW5jZWROb2Rlcy5yZW1vdmVGaXJzdCgmbm9k
ZSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2Rlcygp
Ci17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpICYmIGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgp
KTsKLSAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3JlZmVyZW5jZWROb2RlcykKLSAgICAgICAgbm9k
ZS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0KLSAgICBtX3JlZmVyZW5j
ZWROb2Rlcy5jbGVhcigpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6bG9jayhib29sJiBtdXN0
UmVsZWFzZUxvY2spCi17Ci0gICAgLy8gRG9uJ3QgYWxsb3cgcmVndWxhciBsb2NrIGluIHJlYWwt
dGltZSBhdWRpbyB0aHJlYWQuCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIFRo
cmVhZCYgdGhpc1RocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOwotCi0gICAgaWYgKCZ0aGlzVGhy
ZWFkID09IG1fZ3JhcGhPd25lclRocmVhZCkgewotICAgICAgICAvLyBXZSBhbHJlYWR5IGhhdmUg
dGhlIGxvY2suCi0gICAgICAgIG11c3RSZWxlYXNlTG9jayA9IGZhbHNlOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIEFjcXVpcmUgdGhlIGxvY2suCi0gICAgICAgIG1fY29udGV4dEdyYXBoTXV0
ZXgubG9jaygpOwotICAgICAgICBtX2dyYXBoT3duZXJUaHJlYWQgPSAmdGhpc1RocmVhZDsKLSAg
ICAgICAgbXVzdFJlbGVhc2VMb2NrID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLWJvb2wgQXVkaW9Db250
ZXh0Ojp0cnlMb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jaykKLXsKLSAgICBUaHJlYWQmIHRoaXNU
aHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKLSAgICBib29sIGlzQXVkaW9UaHJlYWQgPSAmdGhp
c1RocmVhZCA9PSBhdWRpb1RocmVhZCgpOwotCi0gICAgLy8gVHJ5IHRvIGNhdGNoIGNhc2VzIG9m
IHVzaW5nIHRyeSBsb2NrIG9uIG1haW4gdGhyZWFkIC0gaXQgc2hvdWxkIHVzZSByZWd1bGFyIGxv
Y2suCi0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQgfHwgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkp
OwotICAgIAotICAgIGlmICghaXNBdWRpb1RocmVhZCkgewotICAgICAgICAvLyBJbiByZWxlYXNl
IGJ1aWxkIHRyZWF0IHRyeUxvY2soKSBhcyBsb2NrKCkgKHNpbmNlIGFib3ZlIEFTU0VSVChpc0F1
ZGlvVGhyZWFkKSBuZXZlciBmaXJlcykgLSB0aGlzIGlzIHRoZSBiZXN0IHdlIGNhbiBkby4KLSAg
ICAgICAgbG9jayhtdXN0UmVsZWFzZUxvY2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgCi0gICAgYm9vbCBoYXNMb2NrOwotICAgIAotICAgIGlmICgmdGhpc1RocmVhZCA9PSBt
X2dyYXBoT3duZXJUaHJlYWQpIHsKLSAgICAgICAgLy8gVGhyZWFkIGFscmVhZHkgaGFzIHRoZSBs
b2NrLgotICAgICAgICBoYXNMb2NrID0gdHJ1ZTsKLSAgICAgICAgbXVzdFJlbGVhc2VMb2NrID0g
ZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gRG9uJ3QgYWxyZWFkeSBoYXZlIHRoZSBs
b2NrIC0gdHJ5IHRvIGFjcXVpcmUgaXQuCi0gICAgICAgIGhhc0xvY2sgPSBtX2NvbnRleHRHcmFw
aE11dGV4LnRyeUxvY2soKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChoYXNMb2NrKQotICAgICAg
ICAgICAgbV9ncmFwaE93bmVyVGhyZWFkID0gJnRoaXNUaHJlYWQ7Ci0KLSAgICAgICAgbXVzdFJl
bGVhc2VMb2NrID0gaGFzTG9jazsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGhhc0xvY2s7Ci19
Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojp1bmxvY2soKQotewotICAgIEFTU0VSVChtX2dyYXBoT3du
ZXJUaHJlYWQgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKLQotICAgIG1fZ3JhcGhPd25lclRocmVh
ZCA9IG51bGxwdHI7Ci0gICAgbV9jb250ZXh0R3JhcGhNdXRleC51bmxvY2soKTsKLX0KLQotYm9v
bCBBdWRpb0NvbnRleHQ6OmlzQXVkaW9UaHJlYWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2F1
ZGlvVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKTsKLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6
OmlzR3JhcGhPd25lcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZ3JhcGhPd25lclRocmVhZCA9
PSAmVGhyZWFkOjpjdXJyZW50KCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjphZGREZWZlcnJl
ZEZpbmlzaERlcmVmKEF1ZGlvTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlQoaXNBdWRpb1RocmVh
ZCgpKTsKLSAgICBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0LmFwcGVuZChub2RlKTsKLX0KLQot
dm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZVByZVJlbmRlclRhc2tzKCkKLXsKLSAgICBBU1NFUlQo
aXNBdWRpb1RocmVhZCgpKTsKLQotICAgIC8vIEF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgcmVu
ZGVyIHF1YW50dW0sIHRyeSB0byB1cGRhdGUgdGhlIGludGVybmFsIHJlbmRlcmluZyBncmFwaCBz
dGF0ZSAoZnJvbSBtYWluIHRocmVhZCBjaGFuZ2VzKS4KLSAgICAvLyBJdCdzIE9LIGlmIHRoZSB0
cnlMb2NrKCkgZmFpbHMsIHdlJ2xsIGp1c3QgdGFrZSBzbGlnaHRseSBsb25nZXIgdG8gcGljayB1
cCB0aGUgY2hhbmdlcy4KLSAgICBib29sIG11c3RSZWxlYXNlTG9jazsKLSAgICBpZiAodHJ5TG9j
ayhtdXN0UmVsZWFzZUxvY2spKSB7Ci0gICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0ZSBvZiBhbnkg
ZGlydHkgQXVkaW9TdW1taW5nSnVuY3Rpb25zIGFuZCBBdWRpb05vZGVPdXRwdXRzLgotICAgICAg
ICBoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpOwotICAgICAgICBoYW5kbGVEaXJ0
eUF1ZGlvTm9kZU91dHB1dHMoKTsKLQotICAgICAgICB1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMo
KTsKLQotICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQotICAgICAgICAgICAgdW5sb2NrKCk7
Ci0gICAgfQotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlUG9zdFJlbmRlclRhc2tzKCkK
LXsKLSAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKLQotICAgIC8vIE11c3QgdXNlIGEgdHJ5
TG9jaygpIGhlcmUgdG9vLiBEb24ndCB3b3JyeSwgdGhlIGxvY2sgd2lsbCB2ZXJ5IHJhcmVseSBi
ZSBjb250ZW5kZWQgYW5kIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcmVxdWVudGx5LgotICAgIC8v
IFRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCB0aGVyZSB3aWxsIGJlIHNvbWUgbm9k
ZXMgd2hpY2ggd2lsbCB0YWtlIHNsaWdodGx5IGxvbmdlciB0aGFuIHVzdWFsIHRvIGJlIGRlbGV0
ZWQgb3IgcmVtb3ZlZAotICAgIC8vIGZyb20gdGhlIHJlbmRlciBncmFwaCAoaW4gd2hpY2ggY2Fz
ZSB0aGV5J2xsIHJlbmRlciBzaWxlbmNlKS4KLSAgICBib29sIG11c3RSZWxlYXNlTG9jazsKLSAg
ICBpZiAodHJ5TG9jayhtdXN0UmVsZWFzZUxvY2spKSB7Ci0gICAgICAgIC8vIFRha2UgY2FyZSBv
ZiBmaW5pc2hpbmcgYW55IGRlcmVmcyB3aGVyZSB0aGUgdHJ5TG9jaygpIGZhaWxlZCBwcmV2aW91
c2x5LgotICAgICAgICBoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVmcygpOwotCi0gICAgICAgIC8v
IER5bmFtaWNhbGx5IGNsZWFuIHVwIG5vZGVzIHdoaWNoIGFyZSBubyBsb25nZXIgbmVlZGVkLgot
ICAgICAgICBkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKTsKLQotICAgICAgICAvLyBEb24ndCBk
ZWxldGUgaW4gdGhlIHJlYWwtdGltZSB0aHJlYWQuIExldCB0aGUgbWFpbiB0aHJlYWQgZG8gaXQu
Ci0gICAgICAgIC8vIFJlZi1jb3VudGVkIG9iamVjdHMgaGVsZCBieSBjZXJ0YWluIEF1ZGlvTm9k
ZXMgbWF5IG5vdCBiZSB0aHJlYWQtc2FmZS4KLSAgICAgICAgc2NoZWR1bGVOb2RlRGVsZXRpb24o
KTsKLQotICAgICAgICAvLyBGaXh1cCB0aGUgc3RhdGUgb2YgYW55IGRpcnR5IEF1ZGlvU3VtbWlu
Z0p1bmN0aW9ucyBhbmQgQXVkaW9Ob2RlT3V0cHV0cy4KLSAgICAgICAgaGFuZGxlRGlydHlBdWRp
b1N1bW1pbmdKdW5jdGlvbnMoKTsKLSAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRz
KCk7Ci0KLSAgICAgICAgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCk7Ci0KLSAgICAgICAgaWYg
KG11c3RSZWxlYXNlTG9jaykKLSAgICAgICAgICAgIHVubG9jaygpOwotICAgIH0KLX0KLQotdm9p
ZCBBdWRpb0NvbnRleHQ6OmhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCkKLXsKLSAgICBBU1NF
UlQoaXNBdWRpb1RocmVhZCgpICYmIGlzR3JhcGhPd25lcigpKTsKLSAgICBmb3IgKGF1dG8mIG5v
ZGUgOiBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0KQotICAgICAgICBub2RlLT5maW5pc2hEZXJl
ZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsKLSAgICAKLSAgICBtX2RlZmVycmVkRmlu
aXNoRGVyZWZMaXN0LmNsZWFyKCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjptYXJrRm9yRGVs
ZXRpb24oQXVkaW9Ob2RlJiBub2RlKQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0K
LSAgICBpZiAoaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpCi0gICAgICAgIG1fbm9kZXNUb0RlbGV0
ZS5hcHBlbmQoJm5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgbV9ub2Rlc01hcmtlZEZvckRlbGV0
aW9uLmFwcGVuZCgmbm9kZSk7Ci0KLSAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHRoZSBiZXN0IHRp
bWUgZm9yIHVzIHRvIHJlbW92ZSB0aGUgbm9kZSBmcm9tIGF1dG9tYXRpYyBwdWxsIGxpc3QsCi0g
ICAgLy8gc2luY2UgYWxsIGNvbm5lY3Rpb25zIGFyZSBnb25lIGFuZCB3ZSBob2xkIHRoZSBncmFw
aCBsb2NrLiBUaGVuIHdoZW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzKCkKLSAgICAvLyBnZXRzIGEg
Y2hhbmNlIHRvIHNjaGVkdWxlIHRoZSBkZWxldGlvbiB3b3JrLCB1cGRhdGVBdXRvbWF0aWNQdWxs
Tm9kZXMoKSBhbHNvIGdldHMgYSBjaGFuY2UgdG8KLSAgICAvLyBtb2RpZnkgbV9yZW5kZXJpbmdB
dXRvbWF0aWNQdWxsTm9kZXMuCi0gICAgcmVtb3ZlQXV0b21hdGljUHVsbE5vZGUobm9kZSk7Ci19
Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpzY2hlZHVsZU5vZGVEZWxldGlvbigpCi17Ci0gICAgYm9v
bCBpc0dvb2QgPSBtX2lzSW5pdGlhbGl6ZWQgJiYgaXNHcmFwaE93bmVyKCk7Ci0gICAgQVNTRVJU
KGlzR29vZCk7Ci0gICAgaWYgKCFpc0dvb2QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1h
a2Ugc3VyZSB0byBjYWxsIGRlbGV0ZU1hcmtlZE5vZGVzKCkgb24gbWFpbiB0aHJlYWQuICAgIAot
ICAgIGlmIChtX25vZGVzTWFya2VkRm9yRGVsZXRpb24uc2l6ZSgpICYmICFtX2lzRGVsZXRpb25T
Y2hlZHVsZWQpIHsKLSAgICAgICAgbV9ub2Rlc1RvRGVsZXRlLmFwcGVuZFZlY3RvcihtX25vZGVz
TWFya2VkRm9yRGVsZXRpb24pOwotICAgICAgICBtX25vZGVzTWFya2VkRm9yRGVsZXRpb24uY2xl
YXIoKTsKLQotICAgICAgICBtX2lzRGVsZXRpb25TY2hlZHVsZWQgPSB0cnVlOwotCi0gICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmRlbGV0ZU1hcmtlZE5vZGVzKCk7Ci0g
ICAgICAgIH0pOwotICAgIH0KLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmRlbGV0ZU1hcmtlZE5v
ZGVzKCkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotCi0gICAgLy8gUHJvdGVjdCB0
aGlzIG9iamVjdCBmcm9tIGJlaW5nIGRlbGV0ZWQgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIG11dGV4
IGxvY2tlZCBieSBBdXRvTG9ja2VyLgotICAgIFJlZjxBdWRpb0NvbnRleHQ+IHByb3RlY3RlZFRo
aXMoKnRoaXMpOwotICAgIHsKLSAgICAgICAgQXV0b0xvY2tlciBsb2NrZXIoKnRoaXMpOwotCi0g
ICAgICAgIHdoaWxlIChtX25vZGVzVG9EZWxldGUuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBBdWRp
b05vZGUqIG5vZGUgPSBtX25vZGVzVG9EZWxldGUudGFrZUxhc3QoKTsKLQotICAgICAgICAgICAg
Ly8gQmVmb3JlIGRlbGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9kZUlucHV0
cyBmcm9tIG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLgotICAgICAgICAgICAgdW5zaWduZWQgbnVt
YmVyT2ZJbnB1dHMgPSBub2RlLT5udW1iZXJPZklucHV0cygpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mSW5wdXRzOyArK2kpCi0gICAgICAgICAgICAgICAg
bV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMucmVtb3ZlKG5vZGUtPmlucHV0KGkpKTsKLQotICAgICAg
ICAgICAgLy8gQmVmb3JlIGRlbGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9k
ZU91dHB1dHMgZnJvbSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy4KLSAgICAgICAgICAgIHVuc2ln
bmVkIG51bWJlck9mT3V0cHV0cyA9IG5vZGUtPm51bWJlck9mT3V0cHV0cygpOwotICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mT3V0cHV0czsgKytpKQotICAgICAg
ICAgICAgICAgIG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLnJlbW92ZShub2RlLT5vdXRwdXQoaSkp
OwotCi0gICAgICAgICAgICAvLyBGaW5hbGx5LCBkZWxldGUgaXQuCi0gICAgICAgICAgICBkZWxl
dGUgbm9kZTsKLSAgICAgICAgfQotICAgICAgICBtX2lzRGVsZXRpb25TY2hlZHVsZWQgPSBmYWxz
ZTsKLSAgICB9Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjptYXJrU3VtbWluZ0p1bmN0aW9uRGly
dHkoQXVkaW9TdW1taW5nSnVuY3Rpb24qIHN1bW1pbmdKdW5jdGlvbikKLXsKLSAgICBBU1NFUlQo
aXNHcmFwaE93bmVyKCkpOyAgICAKLSAgICBtX2RpcnR5U3VtbWluZ0p1bmN0aW9ucy5hZGQoc3Vt
bWluZ0p1bmN0aW9uKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnJlbW92ZU1hcmtlZFN1bW1p
bmdKdW5jdGlvbihBdWRpb1N1bW1pbmdKdW5jdGlvbiogc3VtbWluZ0p1bmN0aW9uKQotewotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgQXV0b0xvY2tlciBsb2NrZXIoKnRoaXMpOwot
ICAgIG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLnJlbW92ZShzdW1taW5nSnVuY3Rpb24pOwotfQot
Ci1FdmVudFRhcmdldEludGVyZmFjZSBBdWRpb0NvbnRleHQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQXVkaW9Db250ZXh0RXZlbnRUYXJnZXRJbnRlcmZhY2VU
eXBlOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6bWFya0F1ZGlvTm9kZU91dHB1dERpcnR5KEF1
ZGlvTm9kZU91dHB1dCogb3V0cHV0KQotewotICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7Ci0g
ICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuYWRkKG91dHB1dCk7Ci19Ci0KLXZvaWQgQXVkaW9D
b250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpCi17Ci0gICAgQVNTRVJU
KGlzR3JhcGhPd25lcigpKTsgICAgCi0KLSAgICBmb3IgKGF1dG8mIGp1bmN0aW9uIDogbV9kaXJ0
eVN1bW1pbmdKdW5jdGlvbnMpCi0gICAgICAgIGp1bmN0aW9uLT51cGRhdGVSZW5kZXJpbmdTdGF0
ZSgpOwotCi0gICAgbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMuY2xlYXIoKTsKLX0KLQotdm9pZCBB
dWRpb0NvbnRleHQ6OmhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpCi17Ci0gICAgQVNTRVJU
KGlzR3JhcGhPd25lcigpKTsgICAgCi0KLSAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fZGlydHlB
dWRpb05vZGVPdXRwdXRzKQotICAgICAgICBvdXRwdXQtPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7
Ci0KLSAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5jbGVhcigpOwotfQotCi12b2lkIEF1ZGlv
Q29udGV4dDo6YWRkQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJiBub2RlKQotewotICAgIEFT
U0VSVChpc0dyYXBoT3duZXIoKSk7Ci0KLSAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXMuYWRk
KCZub2RlKS5pc05ld0VudHJ5KQotICAgICAgICBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRh
dGluZyA9IHRydWU7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpyZW1vdmVBdXRvbWF0aWNQdWxs
Tm9kZShBdWRpb05vZGUmIG5vZGUpCi17Ci0gICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKLQot
ICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5yZW1vdmUoJm5vZGUpKQotICAgICAgICBtX2F1
dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyA9IHRydWU7Ci19Ci0KLXZvaWQgQXVkaW9Db250
ZXh0Ojp1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKQotewotICAgIEFTU0VSVChpc0dyYXBoT3du
ZXIoKSk7Ci0KLSAgICBpZiAobV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcpIHsKLSAg
ICAgICAgLy8gQ29weSBmcm9tIG1fYXV0b21hdGljUHVsbE5vZGVzIHRvIG1fcmVuZGVyaW5nQXV0
b21hdGljUHVsbE5vZGVzLgotICAgICAgICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy5y
ZXNpemUobV9hdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgpKTsKLQotICAgICAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX2F1dG9tYXRpY1B1bGxOb2RlcykK
LSAgICAgICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2krK10gPSBvdXRwdXQ7
Ci0KLSAgICAgICAgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgPSBmYWxzZTsKLSAg
ICB9Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNp
emVfdCBmcmFtZXNUb1Byb2Nlc3MpCi17Ci0gICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7Ci0K
LSAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2RlcykKLSAg
ICAgICAgbm9kZS0+cHJvY2Vzc0lmTmVjZXNzYXJ5KGZyYW1lc1RvUHJvY2Vzcyk7Ci19Ci0KLVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIEF1ZGlvQ29udGV4dEJhc2U6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdAotewotICAgIHJldHVybiBBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6Om5vZGVXaWxsQmVnaW5QbGF5
YmFjaygpCi17Ci0gICAgLy8gQ2FsbGVkIGJ5IHNjaGVkdWxlZCBBdWRpb05vZGVzIHdoZW4gY2xp
ZW50cyBzY2hlZHVsZSB0aGVpciBzdGFydCB0aW1lcy4KLSAgICAvLyBQcmlvciB0byB0aGUgaW50
cm9kdWN0aW9uIG9mIHN1c3BlbmQoKSwgcmVzdW1lKCksIGFuZCBzdG9wKCksIHN0YXJ0aW5nCi0g
ICAgLy8gYSBzY2hlZHVsZWQgQXVkaW9Ob2RlIHdvdWxkIHJlbW92ZSB0aGUgdXNlci1nZXN0dXJl
IHJlc3RyaWN0aW9uLCBpZiBwcmVzZW50LAotICAgIC8vIGFuZCB3b3VsZCB0aHVzIHVubXV0ZSB0
aGUgY29udGV4dC4gTm93IHRoYXQgQXVkaW9Db250ZXh0IHN0YXlzIGluIHRoZQotICAgIC8vICJz
dXNwZW5kZWQiIHN0YXRlIGlmIGEgdXNlci1nZXN0dXJlIHJlc3RyaWN0aW9uIGlzIHByZXNlbnQs
IHN0YXJ0aW5nIGEKLSAgICAvLyBzY2hlZHVsZSBBdWRpb05vZGUgc2hvdWxkIHNldCB0aGUgc3Rh
dGUgdG8gInJ1bm5pbmciLCBidXQgb25seSBpZiB0aGUKLSAgICAvLyB1c2VyLWdlc3R1cmUgcmVz
dHJpY3Rpb24gaXMgc2V0LgotICAgIGlmICh1c2VyR2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFy
dCgpKQotICAgICAgICBzdGFydFJlbmRlcmluZygpOwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRE
b2N1bWVudEFsbG93V2ViQXVkaW9Ub0F1dG9QbGF5KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkK
LXsKLSAgICBpZiAoZG9jdW1lbnQucHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSB8fCBk
b2N1bWVudC5pc0NhcHR1cmluZygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICByZXR1cm4g
ZG9jdW1lbnQucXVpcmtzKCkuc2hvdWxkQXV0b3BsYXlXZWJBdWRpb0ZvckFyYml0cmFyeVVzZXJH
ZXN0dXJlKCkgJiYgZG9jdW1lbnQudG9wRG9jdW1lbnQoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24o
KTsKLX0KLQotYm9vbCBBdWRpb0NvbnRleHQ6OndpbGxCZWdpblBsYXliYWNrKCkKLXsKLSAgICBh
dXRvKiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRp
b1N0YXJ0KCkpIHsKLSAgICAgICAgaWYgKCFzaG91bGREb2N1bWVudEFsbG93V2ViQXVkaW9Ub0F1
dG9QbGF5KCpkb2N1bWVudCkpIHsKLSAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
UiwgInJldHVybmluZyBmYWxzZSwgbm90IHByb2Nlc3NpbmcgdXNlciBnZXN0dXJlIG9yIGNhcHR1
cmluZyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJl
bW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQXVkaW9Db250ZXh0OjpSZXF1aXJlVXNlckdlc3R1cmVG
b3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIH0KLQotICAgIGlmIChwYWdlQ29uc2VudFJl
cXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBkb2N1bWVudC0+
cGFnZSgpOwotICAgICAgICBpZiAocGFnZSAmJiAhcGFnZS0+Y2FuU3RhcnRNZWRpYSgpKSB7Ci0g
ICAgICAgICAgICBkb2N1bWVudC0+YWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKLSAg
ICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBmYWxzZSwgcGFn
ZSBkb2Vzbid0IGFsbG93IG1lZGlhIHRvIHN0YXJ0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihBdWRpb0Nv
bnRleHQ6OlJlcXVpcmVQYWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7Ci0gICAg
fQotICAgIAotICAgIGF1dG8gd2lsbEJlZ2luID0gbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxC
ZWdpblBsYXliYWNrKCk7Ci0gICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5n
ICIsIHdpbGxCZWdpbik7Ci0gICAgCi0gICAgcmV0dXJuIHdpbGxCZWdpbjsKLX0KLQotYm9vbCBB
dWRpb0NvbnRleHQ6OndpbGxQYXVzZVBsYXliYWNrKCkKLXsKLSAgICBhdXRvKiBkb2N1bWVudCA9
IHRoaXMtPmRvY3VtZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkpIHsKLSAg
ICAgICAgaWYgKCFkb2N1bWVudC0+cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlv
bihBdWRpb0NvbnRleHQ6OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlv
bik7Ci0gICAgfQotCi0gICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkp
IHsKLSAgICAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7Ci0gICAgICAgIGlmIChw
YWdlICYmICFwYWdlLT5jYW5TdGFydE1lZGlhKCkpIHsKLSAgICAgICAgICAgIGRvY3VtZW50LT5h
ZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQXVkaW9Db250
ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOwotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxQYXVzZVBsYXliYWNr
KCk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpzdGFydFJlbmRlcmluZygpCi17Ci0gICAgQUxX
QVlTX0xPRyhMT0dJREVOVElGSUVSKTsKLSAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQgfHwgIXdp
bGxCZWdpblBsYXliYWNrKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VQZW5kaW5nQWN0
aXZpdHkoKTsKLQotICAgIGRlc3RpbmF0aW9uKCktPnN0YXJ0UmVuZGVyaW5nKCk7Ci0gICAgc2V0
U3RhdGUoU3RhdGU6OlJ1bm5pbmcpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6bWVkaWFDYW5T
dGFydChEb2N1bWVudCYgZG9jdW1lbnQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChkb2N1bWVudCwg
JmRvY3VtZW50ID09IHRoaXMtPmRvY3VtZW50KCkpOwotICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJp
Y3Rpb24oQXVkaW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJp
Y3Rpb24pOwotICAgIG1heVJlc3VtZVBsYXliYWNrKHRydWUpOwotfQotCi1NZWRpYVByb2R1Y2Vy
OjpNZWRpYVN0YXRlRmxhZ3MgQXVkaW9Db250ZXh0OjptZWRpYVN0YXRlKCkgY29uc3QKLXsKLSAg
ICBpZiAoIW1faXNTdG9wU2NoZWR1bGVkICYmIG1fZGVzdGluYXRpb25Ob2RlICYmIG1fZGVzdGlu
YXRpb25Ob2RlLT5pc1BsYXlpbmdBdWRpbygpKQotICAgICAgICByZXR1cm4gTWVkaWFQcm9kdWNl
cjo6SXNQbGF5aW5nQXVkaW87Ci0KLSAgICByZXR1cm4gTWVkaWFQcm9kdWNlcjo6SXNOb3RQbGF5
aW5nOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6cGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UoKQot
ewotICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZSAmJiBkb2N1bWVudCgpICYmIGRvY3VtZW50KCkt
PnBhZ2UoKSkKLSAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnNldE11dGVkKGRvY3VtZW50KCkt
PnBhZ2UoKS0+aXNBdWRpb011dGVkKCkpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6aXNQbGF5
aW5nQXVkaW9EaWRDaGFuZ2UoKQotewotICAgIC8vIE1ha2Ugc3VyZSB0byBjYWxsIERvY3VtZW50
Ojp1cGRhdGVJc1BsYXlpbmdNZWRpYSgpIG9uIHRoZSBtYWluIHRocmVhZCwgc2luY2UKLSAgICAv
LyB3ZSBjb3VsZCBiZSBvbiB0aGUgYXVkaW8gSS9PIHRocmVhZCBoZXJlIGFuZCB0aGUgY2FsbCBp
bnRvIFdlYkNvcmUgY291bGQgYmxvY2suCi0gICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7Ci0gICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5kb2N1
bWVudCgpKQotICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+ZG9jdW1lbnQoKS0+dXBkYXRlSXNQ
bGF5aW5nTWVkaWEoKTsKLSAgICB9KTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmZpbmlzaGVk
UmVuZGVyaW5nKGJvb2wgZGlkUmVuZGVyaW5nKQotewotICAgIEFTU0VSVChpc09mZmxpbmVDb250
ZXh0KCkpOwotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgaWYgKCFpc01haW5UaHJl
YWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjbGVhclBlbmRpbmdBY3Rpdml0eUlm
RXhpdEVhcmx5ID0gV1RGOjptYWtlU2NvcGVFeGl0KFt0aGlzXSB7Ci0gICAgICAgIGNsZWFyUGVu
ZGluZ0FjdGl2aXR5KCk7Ci0gICAgfSk7Ci0KLQotICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
Uik7Ci0KLSAgICBpZiAoIWRpZFJlbmRlcmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQXVk
aW9CdWZmZXIqIHJlbmRlcmVkQnVmZmVyID0gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7Ci0gICAgc2V0
U3RhdGUoU3RhdGU6OkNsb3NlZCk7Ci0KLSAgICBBU1NFUlQocmVuZGVyZWRCdWZmZXIpOwotICAg
IGlmICghcmVuZGVyZWRCdWZmZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEF2b2lkIGZp
cmluZyB0aGUgZXZlbnQgaWYgdGhlIGRvY3VtZW50IGhhcyBhbHJlYWR5IGdvbmUgYXdheS4KLSAg
ICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFyUGVu
ZGluZ0FjdGl2aXR5SWZFeGl0RWFybHkucmVsZWFzZSgpOwotICAgIG1fZXZlbnRRdWV1ZS0+ZW5x
dWV1ZUV2ZW50KE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDo6Y3JlYXRlKHJlbmRlcmVkQnVm
ZmVyKSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkaXNwYXRjaEV2ZW50KEV2ZW50JiBldmVu
dCkKLXsKLSAgICBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudCk7Ci0gICAgaWYgKGV2
ZW50LmV2ZW50SW50ZXJmYWNlKCkgPT0gT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50SW50ZXJm
YWNlVHlwZSkKLSAgICAgICAgY2xlYXJQZW5kaW5nQWN0aXZpdHkoKTsKLX0KLQotdm9pZCBBdWRp
b0NvbnRleHQ6OmluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkKLXsKLSAgICArK21fYWN0aXZl
U291cmNlQ291bnQ7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpkZWNyZW1lbnRBY3RpdmVTb3Vy
Y2VDb3VudCgpCi17Ci0gICAgLS1tX2FjdGl2ZVNvdXJjZUNvdW50OwotfQotCi12b2lkIEF1ZGlv
Q29udGV4dDo6c3VzcGVuZFJlbmRlcmluZyhET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9t
aXNlKQotewotICAgIGlmIChpc09mZmxpbmVDb250ZXh0KCkgfHwgbV9pc1N0b3BTY2hlZHVsZWQp
IHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZCkgewot
ICAgICAgICBwcm9taXNlLnJlc29sdmUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmIChtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6SW50ZXJy
dXB0ZWQgfHwgIW1fZGVzdGluYXRpb25Ob2RlKSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0KCk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRSZWFjdGlvbihTdGF0ZTo6U3VzcGVu
ZGVkLCBXVEZNb3ZlKHByb21pc2UpKTsKLQotICAgIGlmICghd2lsbFBhdXNlUGxheWJhY2soKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF6eUluaXRpYWxpemUoKTsKLQotICAgIG1fZGVzdGlu
YXRpb25Ob2RlLT5zdXNwZW5kKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyld
IHsKLSAgICAgICAgc2V0U3RhdGUoU3RhdGU6OlN1c3BlbmRlZCk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgQXVkaW9Db250ZXh0OjpyZXN1bWVSZW5kZXJpbmcoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+
JiYgcHJvbWlzZSkKLXsKLSAgICBpZiAoaXNPZmZsaW5lQ29udGV4dCgpIHx8IG1faXNTdG9wU2No
ZWR1bGVkKSB7Ci0gICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpSdW5uaW5n
KSB7Ci0gICAgICAgIHByb21pc2UucmVzb2x2ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCB8fCAhbV9kZXN0aW5hdGlvbk5vZGUp
IHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGFkZFJlYWN0aW9uKFN0YXRlOjpSdW5uaW5nLCBXVEZNb3ZlKHByb21pc2UpKTsKLQotICAg
IGlmICghd2lsbEJlZ2luUGxheWJhY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbGF6eUlu
aXRpYWxpemUoKTsKLQotICAgIG1fZGVzdGluYXRpb25Ob2RlLT5yZXN1bWUoW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6UnVu
bmluZyk7Ci0gICAgfSk7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjpjbG9zZShET01Qcm9taXNl
RGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQotewotICAgIGlmIChpc09mZmxpbmVDb250ZXh0KCkg
fHwgbV9pc1N0b3BTY2hlZHVsZWQpIHsKLSAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0
YXRlRXJyb3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fc3RhdGUgPT0g
U3RhdGU6OkNsb3NlZCB8fCAhbV9kZXN0aW5hdGlvbk5vZGUpIHsKLSAgICAgICAgcHJvbWlzZS5y
ZXNvbHZlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRSZWFjdGlvbihTdGF0
ZTo6Q2xvc2VkLCBXVEZNb3ZlKHByb21pc2UpKTsKLQotICAgIGxhenlJbml0aWFsaXplKCk7Ci0K
LSAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+Y2xvc2UoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKV0gewotICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6Q2xvc2VkKTsKLSAgICAgICAg
dW5pbml0aWFsaXplKCk7Ci0gICAgfSk7Ci19Ci0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OnN1c3Bl
bmRQbGF5YmFjaygpCi17Ci0gICAgaWYgKCFtX2Rlc3RpbmF0aW9uTm9kZSB8fCBtX3N0YXRlID09
IFN0YXRlOjpDbG9zZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3N0YXRlID09IFN0
YXRlOjpTdXNwZW5kZWQpIHsKLSAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5zdGF0ZSgpID09
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZCkKLSAgICAgICAgICAgIHNldFN0YXRl
KFN0YXRlOjpJbnRlcnJ1cHRlZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsYXp5
SW5pdGlhbGl6ZSgpOwotCi0gICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN1c3BlbmQoW3RoaXMsIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0gewotICAgICAgICBib29sIGludGVycnVwdGVk
ID0gbV9tZWRpYVNlc3Npb24tPnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVy
cnVwdGVkOwotICAgICAgICBzZXRTdGF0ZShpbnRlcnJ1cHRlZCA/IFN0YXRlOjpJbnRlcnJ1cHRl
ZCA6IFN0YXRlOjpTdXNwZW5kZWQpOwotICAgIH0pOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6
bWF5UmVzdW1lUGxheWJhY2soYm9vbCBzaG91bGRSZXN1bWUpCi17Ci0gICAgaWYgKCFtX2Rlc3Rp
bmF0aW9uTm9kZSB8fCBtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQgfHwgbV9zdGF0ZSA9PSBTdGF0
ZTo6UnVubmluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFzaG91bGRSZXN1bWUpIHsK
LSAgICAgICAgc2V0U3RhdGUoU3RhdGU6OlN1c3BlbmRlZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIXdpbGxCZWdpblBsYXliYWNrKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGxhenlJbml0aWFsaXplKCk7Ci0KLSAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+cmVzdW1lKFt0
aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIHsKLSAgICAgICAgc2V0U3RhdGUo
U3RhdGU6OlJ1bm5pbmcpOwotICAgIH0pOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6cG9zdFRh
c2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYgdGFzaykKLXsKLSAgICBpZiAobV9pc1N0b3BTY2hl
ZHVsZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+
cG9zdFRhc2soV1RGTW92ZSh0YXNrKSk7Ci19Ci0KLWNvbnN0IFNlY3VyaXR5T3JpZ2luKiBBdWRp
b0NvbnRleHQ6Om9yaWdpbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA/IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlPcmlnaW4oKSA6IG51
bGxwdHI7Ci19Ci0KLXZvaWQgQXVkaW9Db250ZXh0OjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdl
U291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKLSAgICAgICAgbV9zY3JpcHRF
eGVjdXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdl
KTsKLX0KLQotdm9pZCBBdWRpb0NvbnRleHQ6OmNsZWFyUGVuZGluZ0FjdGl2aXR5KCkKLXsKLSAg
ICBpZiAoIW1fcGVuZGluZ0FjdGl2aXR5KQotICAgICAgICByZXR1cm47Ci0gICAgbV9wZW5kaW5n
QWN0aXZpdHkgPSBudWxscHRyOwotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBzcGVjaWZpYyBk
ZXJlZigpIGFuZCByZWYoKSBjYWxsIGluIG1ha2VQZW5kaW5nQWN0aXZpdHkoKS4KLSAgICBkZXJl
ZigpOwotfQotCi12b2lkIEF1ZGlvQ29udGV4dDo6bWFrZVBlbmRpbmdBY3Rpdml0eSgpCi17Ci0g
ICAgaWYgKG1fcGVuZGluZ0FjdGl2aXR5KQotICAgICAgICByZXR1cm47Ci0gICAgbV9wZW5kaW5n
QWN0aXZpdHkgPSBBY3RpdmVET01PYmplY3Q6Om1ha2VQZW5kaW5nQWN0aXZpdHkoKnRoaXMpOwot
ICAgIHJlZigpOwotfQotCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi1XVEZMb2dDaGFubmVs
JiBBdWRpb0NvbnRleHQ6OmxvZ0NoYW5uZWwoKSBjb25zdAotewotICAgIHJldHVybiBMb2dNZWRp
YTsKLX0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmgKaW5kZXggNTA1OTIxZmY1ZTM1ZDI0OTUzMzgwMjAzYTQ3OTVmNjRjYWMyZDVkMS4u
YmZhODA0MDA5NDlmYjNjYjUzOThlY2IxMjlmOTk1NTk4OGIwY2IzMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBAIC0yNSwyMjUgKzI1LDE4
IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCi0jaW5j
bHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKLSNpbmNsdWRlICJBdWRpb0J1cy5oIgotI2luY2x1
ZGUgIkF1ZGlvQ29udGV4dFN0YXRlLmgiCi0jaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbk5vZGUu
aCIKLSNpbmNsdWRlICJFdmVudFRhcmdldC5oIgotI2luY2x1ZGUgIk1lZGlhQ2FuU3RhcnRMaXN0
ZW5lci5oIgotI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbi5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKLSNpbmNs
dWRlICJWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
Q29uc29sZVR5cGVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRmxvYXQzMkFycmF5Lmg+
Ci0jaW5jbHVkZSA8YXRvbWljPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8
d3RmL0xvZ2dlckhlbHBlci5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNo
Lmg+CisjaW5jbHVkZSAiQmFzZUF1ZGlvQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEFuYWx5c2VyTm9kZTsKLWNsYXNzIEF1ZGlvQnVmZmVyOwotY2xhc3MgQXVkaW9C
dWZmZXJDYWxsYmFjazsKLWNsYXNzIEF1ZGlvQnVmZmVyU291cmNlTm9kZTsKLWNsYXNzIEF1ZGlv
TGlzdGVuZXI7Ci1jbGFzcyBBdWRpb1N1bW1pbmdKdW5jdGlvbjsKLWNsYXNzIEJpcXVhZEZpbHRl
ck5vZGU7Ci1jbGFzcyBDaGFubmVsTWVyZ2VyTm9kZTsKLWNsYXNzIENoYW5uZWxTcGxpdHRlck5v
ZGU7Ci1jbGFzcyBDb252b2x2ZXJOb2RlOwotY2xhc3MgRGVsYXlOb2RlOwotY2xhc3MgRG9jdW1l
bnQ7Ci1jbGFzcyBEeW5hbWljc0NvbXByZXNzb3JOb2RlOwotY2xhc3MgR2Fpbk5vZGU7Ci1jbGFz
cyBIVE1MTWVkaWFFbGVtZW50OwotY2xhc3MgTWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOwot
Y2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOwotY2xhc3MgTWVkaWFTdHJlYW07Ci1j
bGFzcyBNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlOwotY2xhc3MgTWVkaWFTdHJlYW1B
dWRpb1NvdXJjZU5vZGU7Ci1jbGFzcyBPc2NpbGxhdG9yTm9kZTsKLWNsYXNzIFBhbm5lck5vZGU7
Ci1jbGFzcyBQZXJpb2RpY1dhdmU7Ci1jbGFzcyBTY3JpcHRQcm9jZXNzb3JOb2RlOwotY2xhc3Mg
U2VjdXJpdHlPcmlnaW47Ci1jbGFzcyBXYXZlU2hhcGVyTm9kZTsKLQotdGVtcGxhdGU8dHlwZW5h
bWUgSURMVHlwZT4gY2xhc3MgRE9NUHJvbWlzZURlZmVycmVkOwotCi1jbGFzcyBBdWRpb0NvbnRl
eHRCYXNlCi0gICAgOiBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0Ci0gICAgLCBwdWJsaWMgVGhyZWFk
U2FmZVJlZkNvdW50ZWQ8QXVkaW9Db250ZXh0PgotICAgICwgcHVibGljIEV2ZW50VGFyZ2V0V2l0
aElubGluZURhdGEKLSAgICAsIHB1YmxpYyBNZWRpYUNhblN0YXJ0TGlzdGVuZXIKLSAgICAsIHB1
YmxpYyBNZWRpYVByb2R1Y2VyCi0jaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECi0gICAgLCBwdWJs
aWMgTG9nZ2VySGVscGVyCi0jZW5kaWYKLXsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEF1
ZGlvQ29udGV4dEJhc2UpOwotcHVibGljOgotICAgIHZpcnR1YWwgfkF1ZGlvQ29udGV4dEJhc2Uo
KSA9IGRlZmF1bHQ7Ci0KLSAgICAvLyBSZWNvbmNpbGUgcmVmL2RlcmVmIHdoaWNoIGFyZSBkZWZp
bmVkIGJvdGggaW4gVGhyZWFkU2FmZVJlZkNvdW50ZWQgYW5kIEV2ZW50VGFyZ2V0LgotICAgIHVz
aW5nIFRocmVhZFNhZmVSZWZDb3VudGVkOjpyZWY7Ci0gICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ6OmRlcmVmOwotCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgc2l6
ZV90IGN1cnJlbnRTYW1wbGVGcmFtZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGZsb2F0IHNh
bXBsZVJhdGUoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgY3VycmVudFRpbWUoKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzR3JhcGhPd25lcigpIGNvbnN0ID0gMDsKLQot
ICAgIHZpcnR1YWwgdm9pZCBzZXRBdWRpb1RocmVhZChUaHJlYWQmKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIGlzQXVkaW9UaHJlYWQoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzQXVk
aW9UaHJlYWRGaW5pc2hlZCgpID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBpc1BsYXlpbmdBdWRp
b0RpZENoYW5nZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbm9kZVdpbGxCZWdpblBsYXliYWNr
KCkgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFdURjo6RnVuY3Rpb248dm9pZCgp
PiYmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGlzU3RvcHBlZCgpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4oKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvckRl
bGV0aW9uKEF1ZGlvTm9kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlTWFya2VkTm9k
ZXMoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUHJlUmVuZGVyVGFza3MoKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgcHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNz
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGFkZERlZmVycmVkRmluaXNoRGVyZWYoQXVkaW9Ob2Rl
KikgPSAwOwotCi0gICAgdmlydHVhbCB2b2lkIHJlbW92ZU1hcmtlZFN1bW1pbmdKdW5jdGlvbihB
dWRpb1N1bW1pbmdKdW5jdGlvbiopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbWFya1N1bW1pbmdK
dW5jdGlvbkRpcnR5KEF1ZGlvU3VtbWluZ0p1bmN0aW9uKikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBtYXJrQXVkaW9Ob2RlT3V0cHV0RGlydHkoQXVkaW9Ob2RlT3V0cHV0KikgPSAwOwotCi0gICAg
ZW51bSBCZWhhdmlvclJlc3RyaWN0aW9uRmxhZ3MgewotICAgICAgICBOb1Jlc3RyaWN0aW9ucyA9
IDAsCi0gICAgICAgIFJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbiA9
IDEgPDwgMCwKLSAgICAgICAgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0
aW9uID0gMSA8PCAxLAotICAgIH07Ci0gICAgdHlwZWRlZiB1bnNpZ25lZCBCZWhhdmlvclJlc3Ry
aWN0aW9uczsKLSAgICB2aXJ0dWFsIEJlaGF2aW9yUmVzdHJpY3Rpb25zIGJlaGF2aW9yUmVzdHJp
Y3Rpb25zKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0
aW9uKEJlaGF2aW9yUmVzdHJpY3Rpb25zKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUJl
aGF2aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMpID0gMDsKLQotI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAotICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogbmV4dEF1ZGlvTm9kZUxv
Z0lkZW50aWZpZXIoKSA9IDA7Ci0gICAgdmlydHVhbCBjb25zdCB2b2lkKiBuZXh0QXVkaW9QYXJh
bWV0ZXJMb2dJZGVudGlmaWVyKCkgPSAwOwotI2VuZGlmCi0KLSAgICB2aXJ0dWFsIHZvaWQgYWRk
QXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05vZGUqKSA9IDA7Ci0KLSAgICB2aXJ0
dWFsIHZvaWQgZmluaXNoZWRSZW5kZXJpbmcoYm9vbCBkaWRSZW5kZXJpbmcpID0gMDsKLQotICAg
IHZpcnR1YWwgdm9pZCBpbmNyZW1lbnRDb25uZWN0aW9uQ291bnQoKSA9IDA7Ci0gICAgdmlydHVh
bCB2b2lkIGluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBkZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBp
c09mZmxpbmVDb250ZXh0KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBpc0F1ZGlvQ29u
dGV4dCgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNXZWJLaXRBdWRpb0NvbnRleHQo
KSBjb25zdCA9IDA7Ci0KLSAgICAvLyBtdXN0UmVsZWFzZUxvY2sgaXMgc2V0IHRvIHRydWUgaWYg
d2UgYWNxdWlyZWQgdGhlIGxvY2sgaW4gdGhpcyBtZXRob2QgY2FsbCBhbmQgY2FsbGVyIG11c3Qg
dW5sb2NrKCksIGZhbHNlIGlmIGl0IHdhcyBwcmV2aW91c2x5IGFjcXVpcmVkLgotICAgIHZpcnR1
YWwgdm9pZCBsb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jaykgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCB0cnlMb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCB1
bmxvY2soKSA9IDA7Ci0KLSAgICBjbGFzcyBBdXRvTG9ja2VyIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIGV4cGxpY2l0IEF1dG9Mb2NrZXIoQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCkKLSAgICAg
ICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC5sb2NrKG1fbXVzdFJlbGVhc2VMb2NrKTsKLSAgICAgICAgfQotCi0gICAgICAgIH5BdXRv
TG9ja2VyKCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fbXVzdFJlbGVhc2VMb2NrKQot
ICAgICAgICAgICAgICAgIG1fY29udGV4dC51bmxvY2soKTsKLSAgICAgICAgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgQXVkaW9Db250ZXh0QmFzZSYgbV9jb250ZXh0OwotICAgICAgICBib29s
IG1fbXVzdFJlbGVhc2VMb2NrOwotICAgIH07Ci0KLSAgICAvLyBFdmVudFRhcmdldAotICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdCBmaW5h
bDsKLSAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQotICAgIHZv
aWQgZGVyZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIHsgZGVyZWYoKTsgfQotCi1wcm90ZWN0ZWQ6
Ci0gICAgZXhwbGljaXQgQXVkaW9Db250ZXh0QmFzZShEb2N1bWVudCYpOwotfTsKLQotLy8gQXVk
aW9Db250ZXh0IGlzIHRoZSBjb3JuZXJzdG9uZSBvZiB0aGUgd2ViIGF1ZGlvIEFQSSBhbmQgYWxs
IEF1ZGlvTm9kZXMgYXJlIGNyZWF0ZWQgZnJvbSBpdC4KLS8vIEZvciB0aHJlYWQgc2FmZXR5IGJl
dHdlZW4gdGhlIGF1ZGlvIHRocmVhZCBhbmQgdGhlIG1haW4gdGhyZWFkLCBpdCBoYXMgYSByZW5k
ZXJpbmcgZ3JhcGggbG9ja2luZyBtZWNoYW5pc20uIAotCi1jbGFzcyBBdWRpb0NvbnRleHQKLSAg
ICA6IHB1YmxpYyBBdWRpb0NvbnRleHRCYXNlCi0gICAgLCBwcml2YXRlIFBsYXRmb3JtTWVkaWFT
ZXNzaW9uQ2xpZW50Ci0gICAgLCBwcml2YXRlIFZpc2liaWxpdHlDaGFuZ2VDbGllbnQKLXsKK2Ns
YXNzIEF1ZGlvQ29udGV4dCA6IHB1YmxpYyBCYXNlQXVkaW9Db250ZXh0IHsKICAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKEF1ZGlvQ29udGV4dCk7CiBwdWJsaWM6CiAgICAgLy8gQ3JlYXRlIGFu
IEF1ZGlvQ29udGV4dCBmb3IgcmVuZGVyaW5nIHRvIHRoZSBhdWRpbyBoYXJkd2FyZS4KICAgICBz
dGF0aWMgRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQ29udGV4dD4+IGNyZWF0ZShEb2N1bWVudCYpOwog
Ci0gICAgdmlydHVhbCB+QXVkaW9Db250ZXh0KCk7Ci0KLSAgICBib29sIGlzSW5pdGlhbGl6ZWQo
KSBjb25zdCBmaW5hbDsKLSAgICAKLSAgICBib29sIGlzT2ZmbGluZUNvbnRleHQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2lzT2ZmbGluZUNvbnRleHQ7IH0KLQotICAgIERvY3VtZW50SWRlbnRp
ZmllciBob3N0aW5nRG9jdW1lbnRJZGVudGlmaWVyKCkgY29uc3QgZmluYWw7Ci0KLSAgICBBdWRp
b0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb24oKSB7IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9k
ZS5nZXQoKTsgfQotICAgIHNpemVfdCBjdXJyZW50U2FtcGxlRnJhbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50U2Ft
cGxlRnJhbWUoKSA6IDA7IH0KLSAgICBkb3VibGUgY3VycmVudFRpbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2Rlc3RpbmF0aW9uTm9kZSA/IG1fZGVzdGluYXRpb25Ob2RlLT5jdXJyZW50VGlt
ZSgpIDogMC47IH0KLSAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9kZXN0aW5hdGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+c2FtcGxlUmF0ZSgpIDogMC5m
OyB9Ci0gICAgdW5zaWduZWQgbG9uZyBhY3RpdmVTb3VyY2VDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fYWN0aXZlU291cmNlQ291bnQpOyB9Ci0KLSAg
ICB2b2lkIGluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkgZmluYWw7Ci0gICAgdm9pZCBkZWNy
ZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpIGZpbmFsOwotICAgIAotICAgIEV4Y2VwdGlvbk9yPFJl
ZjxBdWRpb0J1ZmZlcj4+IGNyZWF0ZUJ1ZmZlcih1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzLCBz
aXplX3QgbnVtYmVyT2ZGcmFtZXMsIGZsb2F0IHNhbXBsZVJhdGUpOwotICAgIEV4Y2VwdGlvbk9y
PFJlZjxBdWRpb0J1ZmZlcj4+IGNyZWF0ZUJ1ZmZlcihBcnJheUJ1ZmZlciYsIGJvb2wgbWl4VG9N
b25vKTsKLQotICAgIC8vIEFzeW5jaHJvbm91cyBhdWRpbyBmaWxlIGRhdGEgZGVjb2RpbmcuCi0g
ICAgdm9pZCBkZWNvZGVBdWRpb0RhdGEoUmVmPEFycmF5QnVmZmVyPiYmLCBSZWZQdHI8QXVkaW9C
dWZmZXJDYWxsYmFjaz4mJiwgUmVmUHRyPEF1ZGlvQnVmZmVyQ2FsbGJhY2s+JiYpOwotCi0gICAg
QXVkaW9MaXN0ZW5lciogbGlzdGVuZXIoKSB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9Ci0K
LSAgICB2b2lkIHN1c3BlbmRSZW5kZXJpbmcoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpOwot
ICAgIHZvaWQgcmVzdW1lUmVuZGVyaW5nKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmKTsKICAg
ICB2b2lkIGNsb3NlKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmKTsKIAotICAgIHVzaW5nIFN0
YXRlID0gQXVkaW9Db250ZXh0U3RhdGU7Ci0gICAgU3RhdGUgc3RhdGUoKSBjb25zdDsKLSAgICBi
b29sIGlzQ2xvc2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTdGF0ZTo6Q2xvc2VkOyB9
Ci0KLSAgICBib29sIHdvdWxkVGFpbnRPcmlnaW4oY29uc3QgVVJMJikgY29uc3Q7Ci0KLSAgICAv
LyBUaGUgQXVkaW9Ob2RlIGNyZWF0ZSBtZXRob2RzIGFyZSBjYWxsZWQgb24gdGhlIG1haW4gdGhy
ZWFkIChmcm9tIEphdmFTY3JpcHQpLgotICAgIEV4Y2VwdGlvbk9yPFJlZjxBdWRpb0J1ZmZlclNv
dXJjZU5vZGU+PiBjcmVhdGVCdWZmZXJTb3VyY2UoKTsKICNpZiBFTkFCTEUoVklERU8pCiAgICAg
RXhjZXB0aW9uT3I8UmVmPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4+IGNyZWF0ZU1lZGlh
RWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50Jik7CiAjZW5kaWYKQEAgLTI1MSwyODAgKzQ0
LDEwIEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWY8TWVkaWFTdHJlYW1BdWRpb1NvdXJj
ZU5vZGU+PiBjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWRpYVN0cmVhbSYpOwogICAgIEV4Y2Vw
dGlvbk9yPFJlZjxNZWRpYVN0cmVhbUF1ZGlvRGVzdGluYXRpb25Ob2RlPj4gY3JlYXRlTWVkaWFT
dHJlYW1EZXN0aW5hdGlvbigpOwogI2VuZGlmCi0gICAgRXhjZXB0aW9uT3I8UmVmPEdhaW5Ob2Rl
Pj4gY3JlYXRlR2FpbigpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxCaXF1YWRGaWx0ZXJOb2RlPj4g
Y3JlYXRlQmlxdWFkRmlsdGVyKCk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPFdhdmVTaGFwZXJOb2Rl
Pj4gY3JlYXRlV2F2ZVNoYXBlcigpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxEZWxheU5vZGU+PiBj
cmVhdGVEZWxheShkb3VibGUgbWF4RGVsYXlUaW1lKTsKLSAgICBFeGNlcHRpb25PcjxSZWY8UGFu
bmVyTm9kZT4+IGNyZWF0ZVBhbm5lcigpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxDb252b2x2ZXJO
b2RlPj4gY3JlYXRlQ29udm9sdmVyKCk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPER5bmFtaWNzQ29t
cHJlc3Nvck5vZGU+PiBjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKTsKLSAgICBFeGNlcHRpb25P
cjxSZWY8QW5hbHlzZXJOb2RlPj4gY3JlYXRlQW5hbHlzZXIoKTsKLSAgICBFeGNlcHRpb25PcjxS
ZWY8U2NyaXB0UHJvY2Vzc29yTm9kZT4+IGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVm
ZmVyU2l6ZSwgc2l6ZV90IG51bWJlck9mSW5wdXRDaGFubmVscywgc2l6ZV90IG51bWJlck9mT3V0
cHV0Q2hhbm5lbHMpOwotICAgIEV4Y2VwdGlvbk9yPFJlZjxDaGFubmVsU3BsaXR0ZXJOb2RlPj4g
Y3JlYXRlQ2hhbm5lbFNwbGl0dGVyKHNpemVfdCBudW1iZXJPZk91dHB1dHMpOwotICAgIEV4Y2Vw
dGlvbk9yPFJlZjxDaGFubmVsTWVyZ2VyTm9kZT4+IGNyZWF0ZUNoYW5uZWxNZXJnZXIoc2l6ZV90
IG51bWJlck9mSW5wdXRzKTsKLSAgICBFeGNlcHRpb25PcjxSZWY8T3NjaWxsYXRvck5vZGU+PiBj
cmVhdGVPc2NpbGxhdG9yKCk7Ci0gICAgRXhjZXB0aW9uT3I8UmVmPFBlcmlvZGljV2F2ZT4+IGNy
ZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkmIHJlYWwsIEZsb2F0MzJBcnJheSYgaW1hZ2lu
YXJ5KTsKLQotICAgIC8vIFdoZW4gYSBzb3VyY2Ugbm9kZSBoYXMgbm8gbW9yZSBwcm9jZXNzaW5n
IHRvIGRvIChoYXMgZmluaXNoZWQgcGxheWluZyksIHRoZW4gaXQgdGVsbHMgdGhlIGNvbnRleHQg
dG8gZGVyZWZlcmVuY2UgaXQuCi0gICAgdm9pZCBub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5n
KEF1ZGlvTm9kZSopIGZpbmFsOwotCi0gICAgLy8gQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiBlYWNo
IHJlbmRlciBxdWFudHVtLgotICAgIHZvaWQgaGFuZGxlUHJlUmVuZGVyVGFza3MoKSBmaW5hbDsK
LQotICAgIC8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcmVuZGVyIHF1YW50dW0uCi0gICAg
dm9pZCBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKSBmaW5hbDsKLQotICAgIC8vIENhbGxlZCBwZXJp
b2RpY2FsbHkgYXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIHRvIGRlcmVmZXJlbmNl
IGZpbmlzaGVkIHNvdXJjZSBub2Rlcy4KLSAgICB2b2lkIGRlcmVmRmluaXNoZWRTb3VyY2VOb2Rl
cygpOwotCi0gICAgLy8gV2Ugc2NoZWR1bGUgZGVsZXRpb24gb2YgYWxsIG1hcmtlZCBub2RlcyBh
dCB0aGUgZW5kIG9mIGVhY2ggcmVhbHRpbWUgcmVuZGVyIHF1YW50dW0uCi0gICAgdm9pZCBtYXJr
Rm9yRGVsZXRpb24oQXVkaW9Ob2RlJikgZmluYWw7Ci0gICAgdm9pZCBkZWxldGVNYXJrZWROb2Rl
cygpIGZpbmFsOwotCi0gICAgLy8gQXVkaW9Db250ZXh0IGNhbiBwdWxsIG5vZGUocykgYXQgdGhl
IGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVj
dGVkIHRvIGFueSBkb3duc3RyZWFtIG5vZGVzLgotICAgIC8vIFRoZXNlIHR3byBtZXRob2RzIGFy
ZSBjYWxsZWQgYnkgdGhlIG5vZGVzIHdobyB3YW50IHRvIGFkZC9yZW1vdmUgdGhlbXNlbHZlcyBp
bnRvL2Zyb20gdGhlIGF1dG9tYXRpYyBwdWxsIGxpc3RzLgotICAgIHZvaWQgYWRkQXV0b21hdGlj
UHVsbE5vZGUoQXVkaW9Ob2RlJikgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVBdXRvbWF0aWNQdWxs
Tm9kZShBdWRpb05vZGUmKSBmaW5hbDsKLQotICAgIC8vIENhbGxlZCByaWdodCBiZWZvcmUgaGFu
ZGxlUG9zdFJlbmRlclRhc2tzKCkgdG8gaGFuZGxlIG5vZGVzIHdoaWNoIG5lZWQgdG8gYmUgcHVs
bGVkIGV2ZW4gd2hlbiB0aGV5IGFyZSBub3QgY29ubmVjdGVkIHRvIGFueXRoaW5nLgotICAgIHZv
aWQgcHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSBmaW5h
bDsKLQotICAgIC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgbWFk
ZS4KLSAgICB2b2lkIGluY3JlbWVudENvbm5lY3Rpb25Db3VudCgpIGZpbmFsCi0gICAgewotICAg
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgICAgICBtX2Nvbm5lY3Rpb25Db3VudCsr
OwotICAgIH0KLQotICAgIHVuc2lnbmVkIGNvbm5lY3Rpb25Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fY29ubmVjdGlvbkNvdW50OyB9Ci0KLSAgICAvLwotICAgIC8vIFRocmVhZCBTYWZldHkgYW5k
IEdyYXBoIExvY2tpbmc6Ci0gICAgLy8KLSAgICAKLSAgICB2b2lkIHNldEF1ZGlvVGhyZWFkKFRo
cmVhZCYgdGhyZWFkKSBmaW5hbCB7IG1fYXVkaW9UaHJlYWQgPSAmdGhyZWFkOyB9IC8vIEZJWE1F
OiBjaGVjayBlaXRoZXIgbm90IGluaXRpYWxpemVkIG9yIHRoZSBzYW1lCi0gICAgVGhyZWFkKiBh
dWRpb1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXVkaW9UaHJlYWQ7IH0KLSAgICBib29sIGlz
QXVkaW9UaHJlYWQoKSBjb25zdCBmaW5hbDsKLQotICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5IGFm
dGVyIHRoZSBhdWRpbyB0aHJlYWQgaGFzIGJlZW4gc3RhcnRlZCBhbmQgdGhlbiBzaHV0ZG93bi4K
LSAgICBib29sIGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpIGZpbmFsIHsgcmV0dXJuIG1faXNBdWRp
b1RocmVhZEZpbmlzaGVkOyB9Ci0gICAgCi0gICAgLy8gbXVzdFJlbGVhc2VMb2NrIGlzIHNldCB0
byB0cnVlIGlmIHdlIGFjcXVpcmVkIHRoZSBsb2NrIGluIHRoaXMgbWV0aG9kIGNhbGwgYW5kIGNh
bGxlciBtdXN0IHVubG9jaygpLCBmYWxzZSBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3F1aXJlZC4K
LSAgICB2b2lkIGxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKSBmaW5hbDsKLQotICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB3ZSBvd24gdGhlIGxvY2suCi0gICAgLy8gbXVzdFJlbGVhc2VMb2NrIGlz
IHNldCB0byB0cnVlIGlmIHdlIGFjcXVpcmVkIHRoZSBsb2NrIGluIHRoaXMgbWV0aG9kIGNhbGwg
YW5kIGNhbGxlciBtdXN0IHVubG9jaygpLCBmYWxzZSBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3F1
aXJlZC4KLSAgICBib29sIHRyeUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKSBmaW5hbDsKLQot
ICAgIHZvaWQgdW5sb2NrKCkgZmluYWw7Ci0KLSAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyB0
aHJlYWQgb3ducyB0aGUgY29udGV4dCdzIGxvY2suCi0gICAgYm9vbCBpc0dyYXBoT3duZXIoKSBj
b25zdCBmaW5hbDsKLQotICAgIC8vIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYW5u
ZWxzIHdlIGNhbiBzdXBwb3J0LgotICAgIHN0YXRpYyB1bnNpZ25lZCBtYXhOdW1iZXJPZkNoYW5u
ZWxzKCkgeyByZXR1cm4gTWF4TnVtYmVyT2ZDaGFubmVsczsgfQotICAgIAotICAgIC8vIEluIEF1
ZGlvTm9kZTo6ZGVyZWYoKSBhIHRyeUxvY2soKSBpcyB1c2VkIGZvciBjYWxsaW5nIGZpbmlzaERl
cmVmKCksIGJ1dCBpZiBpdCBmYWlscyBrZWVwIHRyYWNrIGhlcmUuCi0gICAgdm9pZCBhZGREZWZl
cnJlZEZpbmlzaERlcmVmKEF1ZGlvTm9kZSopIGZpbmFsOwotCi0gICAgLy8gSW4gdGhlIGF1ZGlv
IHRocmVhZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgY3ljbGUsIHdlJ2xsIGNhbGwgaGFu
ZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKS4KLSAgICB2b2lkIGhhbmRsZURlZmVycmVkRmluaXNo
RGVyZWZzKCk7Ci0KLSAgICAvLyBPbmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGdyYXBoIGxvY2sgaXMg
aGVsZC4KLSAgICB2b2lkIG1hcmtTdW1taW5nSnVuY3Rpb25EaXJ0eShBdWRpb1N1bW1pbmdKdW5j
dGlvbiopIGZpbmFsOwotICAgIHZvaWQgbWFya0F1ZGlvTm9kZU91dHB1dERpcnR5KEF1ZGlvTm9k
ZU91dHB1dCopIGZpbmFsOwotCi0gICAgLy8gTXVzdCBiZSBjYWxsZWQgb24gbWFpbiB0aHJlYWQu
Ci0gICAgdm9pZCByZW1vdmVNYXJrZWRTdW1taW5nSnVuY3Rpb24oQXVkaW9TdW1taW5nSnVuY3Rp
b24qKSBmaW5hbDsKLQotICAgIC8vIEV2ZW50VGFyZ2V0Ci0gICAgRXZlbnRUYXJnZXRJbnRlcmZh
Y2UgZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgc3RhcnRS
ZW5kZXJpbmcoKTsKLSAgICB2b2lkIGZpbmlzaGVkUmVuZGVyaW5nKGJvb2wgZGlkUmVuZGVyaW5n
KSBmaW5hbDsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBzX2hhcmR3YXJlQ29udGV4dENvdW50Owot
Ci0gICAgLy8gUmVzdHJpY3Rpb25zIHRvIGNoYW5nZSBkZWZhdWx0IGJlaGF2aW9ycy4KLSAgICBC
ZWhhdmlvclJlc3RyaWN0aW9ucyBiZWhhdmlvclJlc3RyaWN0aW9ucygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fcmVzdHJpY3Rpb25zOyB9Ci0gICAgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9u
KEJlaGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKSBmaW5hbCB7IG1fcmVzdHJpY3Rpb25z
IHw9IHJlc3RyaWN0aW9uOyB9Ci0gICAgdm9pZCByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJl
aGF2aW9yUmVzdHJpY3Rpb25zIHJlc3RyaWN0aW9uKSBmaW5hbCB7IG1fcmVzdHJpY3Rpb25zICY9
IH5yZXN0cmljdGlvbjsgfQotCi0gICAgdm9pZCBpc1BsYXlpbmdBdWRpb0RpZENoYW5nZSgpIGZp
bmFsOwotCi0gICAgdm9pZCBub2RlV2lsbEJlZ2luUGxheWJhY2soKSBmaW5hbDsKLQotI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAotICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KLSAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlm
aWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9Ci0gICAgV1RGTG9n
Q2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOwotICAgIGNvbnN0IHZvaWQqIG5leHRB
dWRpb05vZGVMb2dJZGVudGlmaWVyKCkgZmluYWwgeyByZXR1cm4gY2hpbGRMb2dJZGVudGlmaWVy
KG1fbG9nSWRlbnRpZmllciwgKyttX25leHRBdWRpb05vZGVJZGVudGlmaWVyKTsgfQotICAgIGNv
bnN0IHZvaWQqIG5leHRBdWRpb1BhcmFtZXRlckxvZ0lkZW50aWZpZXIoKSBmaW5hbCB7IHJldHVy
biBjaGlsZExvZ0lkZW50aWZpZXIobV9sb2dJZGVudGlmaWVyLCArK21fbmV4dEF1ZGlvUGFyYW1l
dGVySWRlbnRpZmllcik7IH0KLSNlbmRpZgotCi0gICAgdm9pZCBwb3N0VGFzayhXVEY6OkZ1bmN0
aW9uPHZvaWQoKT4mJikgZmluYWw7Ci0gICAgYm9vbCBpc1N0b3BwZWQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2lzU3RvcFNjaGVkdWxlZDsgfQotICAgIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBv
cmlnaW4oKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VT
b3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBmaW5hbDsKIAotcHJv
dGVjdGVkOgorcHJpdmF0ZToKICAgICBleHBsaWNpdCBBdWRpb0NvbnRleHQoRG9jdW1lbnQmKTsK
ICAgICBBdWRpb0NvbnRleHQoRG9jdW1lbnQmLCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KTsK
LSAgICAKLSAgICBzdGF0aWMgYm9vbCBpc1NhbXBsZVJhdGVSYW5nZUdvb2QoZmxvYXQgc2FtcGxl
UmF0ZSk7Ci0gICAgdm9pZCBjbGVhclBlbmRpbmdBY3Rpdml0eSgpOwotICAgIHZvaWQgbWFrZVBl
bmRpbmdBY3Rpdml0eSgpOwotCi1wcml2YXRlOgotICAgIHZvaWQgY29uc3RydWN0Q29tbW9uKCk7
Ci0KLSAgICB2b2lkIGxhenlJbml0aWFsaXplKCk7Ci0gICAgdm9pZCB1bmluaXRpYWxpemUoKTsK
LQotICAgIGJvb2wgd2lsbEJlZ2luUGxheWJhY2soKTsKLSAgICBib29sIHdpbGxQYXVzZVBsYXli
YWNrKCk7Ci0KLSAgICBib29sIHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkgY29u
c3QgeyByZXR1cm4gIWlzT2ZmbGluZUNvbnRleHQoKSAmJiBtX3Jlc3RyaWN0aW9ucyAmIFJlcXVp
cmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsgfQotICAgIGJvb2wgcGFnZUNv
bnNlbnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSBjb25zdCB7IHJldHVybiAhaXNPZmZsaW5lQ29u
dGV4dCgpICYmIG1fcmVzdHJpY3Rpb25zICYgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFy
dFJlc3RyaWN0aW9uOyB9Ci0KLSAgICB2b2lkIHNldFN0YXRlKFN0YXRlKTsKLQotICAgIHZvaWQg
Y2xlYXIoKTsKLQotICAgIHZvaWQgc2NoZWR1bGVOb2RlRGVsZXRpb24oKTsKLQotICAgIHZvaWQg
bWVkaWFDYW5TdGFydChEb2N1bWVudCYpIG92ZXJyaWRlOwotCi0gICAgLy8gRXZlbnRUYXJnZXQK
LSAgICB2b2lkIGRpc3BhdGNoRXZlbnQoRXZlbnQmKSBmaW5hbDsKLQotICAgIC8vIE1lZGlhUHJv
ZHVjZXIKLSAgICBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgbWVkaWFTdGF0ZSgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZvaWQgcGFnZU11dGVkU3RhdGVEaWRDaGFuZ2UoKSBvdmVycmlk
ZTsKLQotICAgIC8vIFRoZSBjb250ZXh0IGl0c2VsZiBrZWVwcyBhIHJlZmVyZW5jZSB0byBhbGwg
c291cmNlIG5vZGVzLiAgVGhlIHNvdXJjZSBub2RlcywgdGhlbiByZWZlcmVuY2UgYWxsIG5vZGVz
IHRoZXkncmUgY29ubmVjdGVkIHRvLgotICAgIC8vIEluIHR1cm4sIHRoZXNlIG5vZGVzIHJlZmVy
ZW5jZSBhbGwgbm9kZXMgdGhleSdyZSBjb25uZWN0ZWQgdG8uICBBbGwgbm9kZXMgYXJlIHVsdGlt
YXRlbHkgY29ubmVjdGVkIHRvIHRoZSBBdWRpb0Rlc3RpbmF0aW9uTm9kZS4KLSAgICAvLyBXaGVu
IHRoZSBjb250ZXh0IGRlcmVmZXJlbmNlcyBhIHNvdXJjZSBub2RlLCBpdCB3aWxsIGJlIGRlYWN0
aXZhdGVkIGZyb20gdGhlIHJlbmRlcmluZyBncmFwaCBhbG9uZyB3aXRoIGFsbCBvdGhlciBub2Rl
cyBpdCBpcwotICAgIC8vIHVuaXF1ZWx5IGNvbm5lY3RlZCB0by4gIFNlZSB0aGUgQXVkaW9Ob2Rl
OjpyZWYoKSBhbmQgQXVkaW9Ob2RlOjpkZXJlZigpIG1ldGhvZHMgZm9yIG1vcmUgZGV0YWlscy4K
LSAgICB2b2lkIHJlZk5vZGUoQXVkaW9Ob2RlJik7Ci0gICAgdm9pZCBkZXJlZk5vZGUoQXVkaW9O
b2RlJik7Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QgQVBJLgotICAgIHZvaWQgc3VzcGVuZChS
ZWFzb25Gb3JTdXNwZW5zaW9uKSBmaW5hbDsKLSAgICB2b2lkIHJlc3VtZSgpIGZpbmFsOwotICAg
IHZvaWQgc3RvcCgpIG92ZXJyaWRlOwotICAgIGNvbnN0IGNoYXIqIGFjdGl2ZURPTU9iamVjdE5h
bWUoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIC8vIFdoZW4gdGhlIGNvbnRleHQgZ29lcyBhd2F5
LCB0aGVyZSBtaWdodCBzdGlsbCBiZSBzb21lIHNvdXJjZXMgd2hpY2ggaGF2ZW4ndCBmaW5pc2hl
ZCBwbGF5aW5nLgotICAgIC8vIE1ha2Ugc3VyZSB0byBkZXJlZmVyZW5jZSB0aGVtIGhlcmUuCi0g
ICAgdm9pZCBkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpOwotCi0gICAgLy8gUGxhdGZvcm1N
ZWRpYVNlc3Npb25DbGllbnQKLSAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWVkaWFUeXBlIG1l
ZGlhVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpN
ZWRpYVR5cGU6OldlYkF1ZGlvOyB9Ci0gICAgUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlw
ZSBwcmVzZW50YXRpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gUGxhdGZvcm1NZWRp
YVNlc3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW87IH0KLSAgICB2b2lkIG1heVJlc3VtZVBsYXli
YWNrKGJvb2wgc2hvdWxkUmVzdW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHN1c3BlbmRQbGF5YmFj
aygpIG92ZXJyaWRlOwotICAgIGJvb2wgY2FuUmVjZWl2ZVJlbW90ZUNvbnRyb2xDb21tYW5kcygp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdm9pZCBkaWRSZWNlaXZlUmVt
b3RlQ29udHJvbENvbW1hbmQoUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbnRyb2xDb21t
YW5kVHlwZSwgY29uc3QgUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNvbW1hbmRBcmd1bWVu
dCopIG92ZXJyaWRlIHsgfQotICAgIGJvb2wgc3VwcG9ydHNTZWVraW5nKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZmFsc2U7IH0KLSAgICBib29sIHNob3VsZE92ZXJyaWRlQmFja2dyb3VuZFBs
YXliYWNrUmVzdHJpY3Rpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGlvblR5cGUp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBjYW5Qcm9kdWNlQXVk
aW8oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBpc1N1c3BlbmRlZCgp
IGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCB2aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCkgZmluYWw7
Ci0KLSAgICBib29sIGlzQXVkaW9Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIGJvb2wgaXNXZWJLaXRBdWRpb0NvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBm
YWxzZTsgfQotCi0gICAgdm9pZCBoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpOwot
ICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7Ci0KLSAgICB2b2lkIGFkZFJl
YWN0aW9uKFN0YXRlLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJik7Ci0gICAgdm9pZCB1cGRh
dGVBdXRvbWF0aWNQdWxsTm9kZXMoKTsKLQotI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAotICAg
IGNvbnN0IGNoYXIqIGxvZ0NsYXNzTmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJBdWRpb0Nv
bnRleHQiOyB9Ci0KLSAgICBSZWY8TG9nZ2VyPiBtX2xvZ2dlcjsKLSAgICBjb25zdCB2b2lkKiBt
X2xvZ0lkZW50aWZpZXI7Ci0gICAgdWludDY0X3QgbV9uZXh0QXVkaW9Ob2RlSWRlbnRpZmllciB7
IDAgfTsKLSAgICB1aW50NjRfdCBtX25leHRBdWRpb1BhcmFtZXRlcklkZW50aWZpZXIgeyAwIH07
Ci0jZW5kaWYKLQotICAgIC8vIE9ubHkgYWNjZXNzZWQgaW4gdGhlIGF1ZGlvIHRocmVhZC4KLSAg
ICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9maW5pc2hlZE5vZGVzOwotCi0gICAgLy8gV2UgZG9uJ3Qg
dXNlIFJlZlB0cjxBdWRpb05vZGU+IGhlcmUgYmVjYXVzZSBBdWRpb05vZGUgaGFzIGEgbW9yZSBj
b21wbGV4IHJlZigpIC8gZGVyZWYoKSBpbXBsZW1lbnRhdGlvbgotICAgIC8vIHdpdGggYW4gb3B0
aW9uYWwgYXJndW1lbnQgZm9yIHJlZlR5cGUuICBXZSBuZWVkIHRvIHVzZSB0aGUgc3BlY2lhbCBy
ZWZUeXBlOiBSZWZUeXBlQ29ubmVjdGlvbgotICAgIC8vIEVpdGhlciBhY2Nlc3NlZCB3aGVuIHRo
ZSBncmFwaCBsb2NrIGlzIGhlbGQsIG9yIG9uIHRoZSBtYWluIHRocmVhZCB3aGVuIHRoZSBhdWRp
byB0aHJlYWQgaGFzIGZpbmlzaGVkLgotICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX3JlZmVyZW5j
ZWROb2RlczsKLQotICAgIC8vIEFjY3VtdWxhdGUgbm9kZXMgd2hpY2ggbmVlZCB0byBiZSBkZWxl
dGVkIGhlcmUuCi0gICAgLy8gVGhpcyBpcyBjb3BpZWQgdG8gbV9ub2Rlc1RvRGVsZXRlIGF0IHRo
ZSBlbmQgb2YgYSByZW5kZXIgY3ljbGUgaW4gaGFuZGxlUG9zdFJlbmRlclRhc2tzKCksIHdoZXJl
IHdlJ3JlIGFzc3VyZWQgb2YgYSBzdGFibGUgZ3JhcGgKLSAgICAvLyBzdGF0ZSB3aGljaCB3aWxs
IGhhdmUgbm8gcmVmZXJlbmNlcyB0byBhbnkgb2YgdGhlIG5vZGVzIGluIG1fbm9kZXNUb0RlbGV0
ZSBvbmNlIHRoZSBjb250ZXh0IGxvY2sgaXMgcmVsZWFzZWQKLSAgICAvLyAod2hlbiBoYW5kbGVQ
b3N0UmVuZGVyVGFza3MoKSBoYXMgY29tcGxldGVkKS4KLSAgICBWZWN0b3I8QXVkaW9Ob2RlKj4g
bV9ub2Rlc01hcmtlZEZvckRlbGV0aW9uOwotCi0gICAgLy8gVGhleSB3aWxsIGJlIHNjaGVkdWxl
ZCBmb3IgZGVsZXRpb24gKG9uIHRoZSBtYWluIHRocmVhZCkgYXQgdGhlIGVuZCBvZiBhIHJlbmRl
ciBjeWNsZSAoaW4gcmVhbHRpbWUgdGhyZWFkKS4KLSAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9u
b2Rlc1RvRGVsZXRlOwotCi0gICAgYm9vbCBtX2lzRGVsZXRpb25TY2hlZHVsZWQgeyBmYWxzZSB9
OwotICAgIGJvb2wgbV9pc1N0b3BTY2hlZHVsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9pc0lu
aXRpYWxpemVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nIHsgZmFs
c2UgfTsKLSAgICBib29sIG1faXNPZmZsaW5lQ29udGV4dCB7IGZhbHNlIH07Ci0KLSAgICAvLyBP
bmx5IGFjY2Vzc2VkIHdoZW4gdGhlIGdyYXBoIGxvY2sgaXMgaGVsZC4KLSAgICBIYXNoU2V0PEF1
ZGlvU3VtbWluZ0p1bmN0aW9uKj4gbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnM7Ci0gICAgSGFzaFNl
dDxBdWRpb05vZGVPdXRwdXQqPiBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0czsKLQotICAgIC8vIEZv
ciB0aGUgc2FrZSBvZiB0aHJlYWQgc2FmZXR5LCB3ZSBtYWludGFpbiBhIHNlcGVyYXRlIFZlY3Rv
ciBvZiBhdXRvbWF0aWMgcHVsbCBub2RlcyBmb3IgcmVuZGVyaW5nIGluIG1fcmVuZGVyaW5nQXV0
b21hdGljUHVsbE5vZGVzLgotICAgIC8vIEl0IHdpbGwgYmUgY29waWVkIGZyb20gbV9hdXRvbWF0
aWNQdWxsTm9kZXMgYnkgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCkgYXQgdGhlIHZlcnkgc3Rh
cnQgb3IgZW5kIG9mIHRoZSByZW5kZXJpbmcgcXVhbnR1bS4KLSAgICBIYXNoU2V0PEF1ZGlvTm9k
ZSo+IG1fYXV0b21hdGljUHVsbE5vZGVzOwotICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX3JlbmRl
cmluZ0F1dG9tYXRpY1B1bGxOb2RlczsKLSAgICAvLyBPbmx5IGFjY2Vzc2VkIGluIHRoZSBhdWRp
byB0aHJlYWQuCi0gICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxp
c3Q7Ci0gICAgVmVjdG9yPFZlY3RvcjxET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4+PiBtX3N0YXRl
UmVhY3Rpb25zOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtTWVkaWFTZXNzaW9uPiBt
X21lZGlhU2Vzc2lvbjsKLSAgICBVbmlxdWVSZWY8TWFpblRocmVhZEdlbmVyaWNFdmVudFF1ZXVl
PiBtX2V2ZW50UXVldWU7Ci0KLSAgICBSZWZQdHI8QXVkaW9CdWZmZXI+IG1fcmVuZGVyVGFyZ2V0
OwotICAgIFJlZlB0cjxBdWRpb0Rlc3RpbmF0aW9uTm9kZT4gbV9kZXN0aW5hdGlvbk5vZGU7Ci0g
ICAgUmVmUHRyPEF1ZGlvTGlzdGVuZXI+IG1fbGlzdGVuZXI7Ci0KLSAgICB1bnNpZ25lZCBtX2Nv
bm5lY3Rpb25Db3VudCB7IDAgfTsKLQotICAgIC8vIEdyYXBoIGxvY2tpbmcuCi0gICAgTG9jayBt
X2NvbnRleHRHcmFwaE11dGV4OwotICAgIC8vIEZJWE1FOiBVc2luZyB2b2xhdGlsZSBzZWVtcyBp
bmNvcnJlY3QuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4MDMzMgotICAgIFRocmVhZCogdm9sYXRpbGUgbV9hdWRpb1RocmVhZCB7IG51bGxwdHIgfTsK
LSAgICBUaHJlYWQqIHZvbGF0aWxlIG1fZ3JhcGhPd25lclRocmVhZCB7IG51bGxwdHIgfTsgLy8g
aWYgdGhlIGxvY2sgaXMgaGVsZCB0aGVuIHRoaXMgaXMgdGhlIHRocmVhZCB3aGljaCBvd25zIGl0
LCBvdGhlcndpc2UgPT0gbnVsbHB0ci4KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxBc3luY0F1ZGlv
RGVjb2Rlcj4gbV9hdWRpb0RlY29kZXI7Ci0KLSAgICAvLyBUaGlzIGlzIGNvbnNpZGVyaW5nIDMy
IGlzIGxhcmdlIGVub3VnaCBmb3IgbXVsdGlwbGUgY2hhbm5lbHMgYXVkaW8uIAotICAgIC8vIEl0
IGlzIHNvbWV3aGF0IGFyYml0cmFyeSBhbmQgY291bGQgYmUgaW5jcmVhc2VkIGlmIG5lY2Vzc2Fy
eS4KLSAgICBlbnVtIHsgTWF4TnVtYmVyT2ZDaGFubmVscyA9IDMyIH07Ci0KLSAgICAvLyBOdW1i
ZXIgb2YgQXVkaW9CdWZmZXJTb3VyY2VOb2RlcyB0aGF0IGFyZSBhY3RpdmUgKHBsYXlpbmcpLgot
ICAgIHN0ZDo6YXRvbWljPGludD4gbV9hY3RpdmVTb3VyY2VDb3VudCB7IDAgfTsKLQotICAgIEJl
aGF2aW9yUmVzdHJpY3Rpb25zIG1fcmVzdHJpY3Rpb25zIHsgTm9SZXN0cmljdGlvbnMgfTsKLQot
ICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07Ci0gICAgUmVmUHRyPFBlbmRp
bmdBY3Rpdml0eTxBdWRpb0NvbnRleHQ+PiBtX3BlbmRpbmdBY3Rpdml0eTsKIH07CiAKLWlubGlu
ZSBBdWRpb0NvbnRleHQ6OlN0YXRlIEF1ZGlvQ29udGV4dDo6c3RhdGUoKSBjb25zdAotewotICAg
IHJldHVybiBtX3N0YXRlOwotfQotCiB9IC8vIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpBdWRpb0NvbnRleHQpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6OkF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQpIHsgcmV0dXJuIGNvbnRl
eHQuaXNBdWRpb0NvbnRleHQoKTsgfQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCmluZGV4
IDllMzUyNDYwOTE3ZTUyYzM0MjAzZGFlZGIwMGI5MzI4NDA2OWU1NWYuLjY5OTNhMGFiN2E5YjY0
NmI5YzZlOTE0ZWJmZTQ0MTc1NTUwMTFhODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKQEAgLTI4LDY1ICsyOCwyMiBAQAogICAgIENv
bmRpdGlvbmFsPVdFQl9BVURJTywKICAgICBFbmFibGVkQnlTZXR0aW5nPVdlYkF1ZGlvJk1vZGVy
blVucHJlZml4ZWRXZWJBdWRpbywKICAgICBFeHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVCwKLV0g
aW50ZXJmYWNlIEF1ZGlvQ29udGV4dCA6IEV2ZW50VGFyZ2V0IHsKK10gaW50ZXJmYWNlIEF1ZGlv
Q29udGV4dCA6IEJhc2VBdWRpb0NvbnRleHQgewogICAgIFtDYWxsV2l0aD1Eb2N1bWVudCwgTWF5
VGhyb3dFeGNlcHRpb25dIGNvbnN0cnVjdG9yKCk7CiAKLSAgICAvLyBBbGwgcmVuZGVyZWQgYXVk
aW8gdWx0aW1hdGVseSBjb25uZWN0cyB0byBkZXN0aW5hdGlvbiwgd2hpY2ggcmVwcmVzZW50cyB0
aGUgYXVkaW8gaGFyZHdhcmUuCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvRGVzdGluYXRp
b25Ob2RlIGRlc3RpbmF0aW9uOwotCi0gICAgLy8gQWxsIHNjaGVkdWxlZCB0aW1lcyBhcmUgcmVs
YXRpdmUgdG8gdGhpcyB0aW1lIGluIHNlY29uZHMuCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
cmVzdHJpY3RlZCBkb3VibGUgY3VycmVudFRpbWU7Ci0KLSAgICAvLyBBbGwgQXVkaW9Ob2RlcyBp
biB0aGUgY29udGV4dCBydW4gYXQgdGhpcyBzYW1wbGUtcmF0ZSAoc2FtcGxlLWZyYW1lcyBwZXIg
c2Vjb25kKS4KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5yZXN0cmljdGVkIGZsb2F0IHNhbXBs
ZVJhdGU7Ci0KLSAgICAvLyBBbGwgcGFubmluZyBpcyByZWxhdGl2ZSB0byB0aGlzIGxpc3RlbmVy
LgotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBdWRpb0xpc3RlbmVyIGxpc3RlbmVyOworICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydC4KKyAgICAvLyByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIGJh
c2VMYXRlbmN5OworICAgIC8vIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgb3V0cHV0TGF0ZW5j
eTsKKyAgICAvLyBBdWRpb1RpbWVzdGFtcCBnZXRPdXRwdXRUaW1lc3RhbXAoKTsKIAogICAgIFtJ
bXBsZW1lbnRlZEFzPXN1c3BlbmRSZW5kZXJpbmddIFByb21pc2U8dm9pZD4gc3VzcGVuZCgpOwog
ICAgIFtJbXBsZW1lbnRlZEFzPXJlc3VtZVJlbmRlcmluZ10gUHJvbWlzZTx2b2lkPiByZXN1bWUo
KTsKICAgICBQcm9taXNlPHZvaWQ+IGNsb3NlKCk7CiAKLSAgICByZWFkb25seSBhdHRyaWJ1dGUg
QXVkaW9Db250ZXh0U3RhdGUgc3RhdGU7Ci0gICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbnN0
YXRlY2hhbmdlOwotCi0gICAgLy8gTnVtYmVyIG9mIEF1ZGlvQnVmZmVyU291cmNlTm9kZXMgdGhh
dCBhcmUgY3VycmVudGx5IHBsYXlpbmcuCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IGxvbmcgYWN0aXZlU291cmNlQ291bnQ7Ci0gICAgCi0gICAgW01heVRocm93RXhjZXB0aW9uXSBB
dWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIodW5zaWduZWQgbG9uZyBudW1iZXJPZkNoYW5uZWxzLCB1
bnNpZ25lZCBsb25nIG51bWJlck9mRnJhbWVzLCB1bnJlc3RyaWN0ZWQgZmxvYXQgc2FtcGxlUmF0
ZSk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBBdWRpb0J1ZmZlciBjcmVhdGVCdWZmZXIoQXJy
YXlCdWZmZXIgYnVmZmVyLCBib29sZWFuIG1peFRvTW9ubyk7Ci0KLSAgICAvLyBBc3luY2hyb25v
dXMgYXVkaW8gZmlsZSBkYXRhIGRlY29kaW5nLgotICAgIC8vIEZJWE1FOiBzdWNjZXNzQ2FsbGJh
Y2sgc2hvdWxkIGJlIG9wdGlvbmFsIGFuZCB0aGUgY2FsbGJhY2tzIHNob3VsZCBub3QgYmUgbnVs
bGFibGUuIFRoaXMgc2hvdWxkIGFsc28gcmV0dXJuIGEgUHJvbWlzZS4KLSAgICB2b2lkIGRlY29k
ZUF1ZGlvRGF0YShBcnJheUJ1ZmZlciBhdWRpb0RhdGEsIEF1ZGlvQnVmZmVyQ2FsbGJhY2s/IHN1
Y2Nlc3NDYWxsYmFjaywgb3B0aW9uYWwgQXVkaW9CdWZmZXJDYWxsYmFjaz8gZXJyb3JDYWxsYmFj
ayk7Ci0KLSAgICAvLyBTb3VyY2VzCi0gICAgW01heVRocm93RXhjZXB0aW9uXSBBdWRpb0J1ZmZl
clNvdXJjZU5vZGUgY3JlYXRlQnVmZmVyU291cmNlKCk7Ci0KICAgICBbQ29uZGl0aW9uYWw9VklE
RU8sIE1heVRocm93RXhjZXB0aW9uXSBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgY3JlYXRl
TWVkaWFFbGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQgbWVkaWFFbGVtZW50KTsKLQogICAg
IFtDb25kaXRpb25hbD1NRURJQV9TVFJFQU0sIE1heVRocm93RXhjZXB0aW9uXSBNZWRpYVN0cmVh
bUF1ZGlvU291cmNlTm9kZSBjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWRpYVN0cmVhbSBtZWRp
YVN0cmVhbSk7CiAgICAgW0NvbmRpdGlvbmFsPU1FRElBX1NUUkVBTSwgTWF5VGhyb3dFeGNlcHRp
b25dIE1lZGlhU3RyZWFtQXVkaW9EZXN0aW5hdGlvbk5vZGUgY3JlYXRlTWVkaWFTdHJlYW1EZXN0
aW5hdGlvbigpOwogCi0gICAgLy8gUHJvY2Vzc2luZyBub2RlcwotICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gR2Fpbk5vZGUgY3JlYXRlR2FpbigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRGVs
YXlOb2RlIGNyZWF0ZURlbGF5KG9wdGlvbmFsIHVucmVzdHJpY3RlZCBkb3VibGUgbWF4RGVsYXlU
aW1lID0gMSk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBCaXF1YWRGaWx0ZXJOb2RlIGNyZWF0
ZUJpcXVhZEZpbHRlcigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gV2F2ZVNoYXBlck5vZGUg
Y3JlYXRlV2F2ZVNoYXBlcigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gUGFubmVyTm9kZSBj
cmVhdGVQYW5uZXIoKTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIENvbnZvbHZlck5vZGUgY3Jl
YXRlQ29udm9sdmVyKCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBEeW5hbWljc0NvbXByZXNz
b3JOb2RlIGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlv
bl0gQW5hbHlzZXJOb2RlIGNyZWF0ZUFuYWx5c2VyKCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9u
XSBTY3JpcHRQcm9jZXNzb3JOb2RlIGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihvcHRpb25hbCB1bnNp
Z25lZCBsb25nIGJ1ZmZlclNpemUgPSAwLCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG51bWJlck9m
SW5wdXRDaGFubmVscyA9IDIsIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZPdXRwdXRD
aGFubmVscyA9IDIpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gT3NjaWxsYXRvck5vZGUgY3Jl
YXRlT3NjaWxsYXRvcigpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gUGVyaW9kaWNXYXZlIGNy
ZWF0ZVBlcmlvZGljV2F2ZShGbG9hdDMyQXJyYXkgcmVhbCwgRmxvYXQzMkFycmF5IGltYWcpOwot
Ci0gICAgLy8gQ2hhbm5lbCBzcGxpdHRpbmcgYW5kIG1lcmdpbmcKLSAgICBbTWF5VGhyb3dFeGNl
cHRpb25dIENoYW5uZWxTcGxpdHRlck5vZGUgY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZPdXRwdXRzID0gNik7Ci0gICAgW01heVRocm93RXhjZXB0
aW9uXSBDaGFubmVsTWVyZ2VyTm9kZSBjcmVhdGVDaGFubmVsTWVyZ2VyKG9wdGlvbmFsIHVuc2ln
bmVkIGxvbmcgbnVtYmVyT2ZJbnB1dHMgPSA2KTsKLQotICAgIC8vIE9mZmxpbmUgcmVuZGVyaW5n
Ci0gICAgLy8gdm9pZCBwcmVwYXJlT2ZmbGluZUJ1ZmZlclJlbmRlcmluZyh1bnNpZ25lZCBsb25n
IG51bWJlck9mQ2hhbm5lbHMsIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZGcmFtZXMsIHVucmVzdHJp
Y3RlZCBmbG9hdCBzYW1wbGVSYXRlKTsKLSAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uY29t
cGxldGU7Ci0gICAgdm9pZCBzdGFydFJlbmRlcmluZygpOworICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydC4KKyAgICAvLyBNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlh
U3RyZWFtVHJhY2tTb3VyY2UoTWVkaWFTdHJlYW1UcmFjayBtZWRpYVN0cmVhbVRyYWNrKTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXgg
ZTU1NDM3NzlkNTFhNTA4Y2U2MWE2YTA4MzExMmU4ZDJkMGE4N2QwZC4uMjJlMDU0NjgyOTRjNjc1
NGU2MGVmMjg0MTI3NDExOGQwMTEwODFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9Ob2RlLmNwcApAQCAtNTMxLDExICs1MzEsMTEgQEAgdm9pZCBBdWRpb05v
ZGU6OmRlcmVmKFJlZlR5cGUgcmVmVHlwZSkKICAgICAgICAgY29udGV4dCgpLmRlbGV0ZU1hcmtl
ZE5vZGVzKCk7CiB9CiAKLVZhcmlhbnQ8UmVmUHRyPEF1ZGlvQ29udGV4dD4sIFJlZlB0cjxXZWJL
aXRBdWRpb0NvbnRleHQ+PiBBdWRpb05vZGU6OmNvbnRleHRGb3JCaW5kaW5ncygpIGNvbnN0CitW
YXJpYW50PFJlZlB0cjxCYXNlQXVkaW9Db250ZXh0PiwgUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4
dD4+IEF1ZGlvTm9kZTo6Y29udGV4dEZvckJpbmRpbmdzKCkgY29uc3QKIHsKICAgICBpZiAobV9j
b250ZXh0LT5pc1dlYktpdEF1ZGlvQ29udGV4dCgpKQogICAgICAgICByZXR1cm4gbWFrZVJlZlB0
cihzdGF0aWNfY2FzdDxXZWJLaXRBdWRpb0NvbnRleHQmPihtX2NvbnRleHQuZ2V0KCkpKTsKLSAg
ICByZXR1cm4gbWFrZVJlZlB0cihzdGF0aWNfY2FzdDxBdWRpb0NvbnRleHQmPihtX2NvbnRleHQu
Z2V0KCkpKTsKKyAgICByZXR1cm4gbWFrZVJlZlB0cihzdGF0aWNfY2FzdDxCYXNlQXVkaW9Db250
ZXh0Jj4obV9jb250ZXh0LmdldCgpKSk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjpmaW5pc2hEZXJl
ZihSZWZUeXBlIHJlZlR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0F1ZGlvTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGUuaAppbmRleCBhOTg4MWJkNGI4ZGI0YzNiMTBmOWQ3NzExNjU2MjYwMGMxODBmYzkxLi5i
ZmQ5MTdiNDNmN2FmODQ4MmFjMmY0NmVhN2I5YTdjZjg3MzMzY2I0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmgKQEAgLTM1LDExICszNSwxMSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEF1ZGlvQ29udGV4dDsKIGNsYXNzIEF1ZGlvQ29u
dGV4dEJhc2U7CiBjbGFzcyBBdWRpb05vZGVJbnB1dDsKIGNsYXNzIEF1ZGlvTm9kZU91dHB1dDsK
IGNsYXNzIEF1ZGlvUGFyYW07CitjbGFzcyBCYXNlQXVkaW9Db250ZXh0OwogY2xhc3MgV2ViS2l0
QXVkaW9Db250ZXh0OwogCiAvLyBBbiBBdWRpb05vZGUgaXMgdGhlIGJhc2ljIGJ1aWxkaW5nIGJs
b2NrIGZvciBoYW5kbGluZyBhdWRpbyB3aXRoaW4gYW4gQXVkaW9Db250ZXh0LgpAQCAtNjUsNyAr
NjUsNyBAQCBwdWJsaWM6CiAgICAgQXVkaW9Db250ZXh0QmFzZSYgY29udGV4dCgpIHsgcmV0dXJu
IG1fY29udGV4dC5nZXQoKTsgfQogICAgIGNvbnN0IEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KIAotICAgIFZhcmlhbnQ8UmVmUHRy
PEF1ZGlvQ29udGV4dD4sIFJlZlB0cjxXZWJLaXRBdWRpb0NvbnRleHQ+PiBjb250ZXh0Rm9yQmlu
ZGluZ3MoKSBjb25zdDsKKyAgICBWYXJpYW50PFJlZlB0cjxCYXNlQXVkaW9Db250ZXh0PiwgUmVm
UHRyPFdlYktpdEF1ZGlvQ29udGV4dD4+IGNvbnRleHRGb3JCaW5kaW5ncygpIGNvbnN0OwogCiAg
ICAgZW51bSBOb2RlVHlwZSB7CiAgICAgICAgIE5vZGVUeXBlVW5rbm93biwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmlkbAppbmRleCA3MTkzOWM4MzE3MTRi
ZmJmMzZkZmJhZTUyZmJjM2QzZDIwMmY2NjIxLi42MzZhOTVjMzg5ZDcwOGRhNDlmNzZiMTc2N2Q3
YmEyYTQ4OTJhNjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTm9kZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGUuaWRsCkBAIC0yNSw3ICsyNSw3IEBACiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCX0FVRElP
LAogXSBpbnRlcmZhY2UgQXVkaW9Ob2RlIDogRXZlbnRUYXJnZXQgewotICAgIFtJbXBsZW1lbnRl
ZEFzPWNvbnRleHRGb3JCaW5kaW5nc10gcmVhZG9ubHkgYXR0cmlidXRlIChBdWRpb0NvbnRleHQg
b3IgV2ViS2l0QXVkaW9Db250ZXh0KSBjb250ZXh0OworICAgIFtJbXBsZW1lbnRlZEFzPWNvbnRl
eHRGb3JCaW5kaW5nc10gcmVhZG9ubHkgYXR0cmlidXRlIChCYXNlQXVkaW9Db250ZXh0IG9yIFdl
YktpdEF1ZGlvQ29udGV4dCkgY29udGV4dDsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZyBudW1iZXJPZklucHV0czsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBudW1iZXJPZk91dHB1dHM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4MWZlOWE4YTQ0NjQ4
ODEwNTdlZDc1YzhlZDUxZGIxZmRkMzdjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuY3BwCkBAIC0wLDAgKzEsMTI5
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMK
KyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVE
SU8pCisKKyNpbmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKworI2luY2x1ZGUgIkFuYWx5c2VyTm9k
ZS5oIgorI2luY2x1ZGUgIkFzeW5jQXVkaW9EZWNvZGVyLmgiCisjaW5jbHVkZSAiQXVkaW9CdWZm
ZXIuaCIKKyNpbmNsdWRlICJBdWRpb0J1ZmZlckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiQXVkaW9C
dWZmZXJTb3VyY2VOb2RlLmgiCisjaW5jbHVkZSAiQXVkaW9MaXN0ZW5lci5oIgorI2luY2x1ZGUg
IkF1ZGlvTm9kZUlucHV0LmgiCisjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVk
ZSAiQXVkaW9TZXNzaW9uLmgiCisjaW5jbHVkZSAiQmlxdWFkRmlsdGVyTm9kZS5oIgorI2luY2x1
ZGUgIkNoYW5uZWxNZXJnZXJOb2RlLmgiCisjaW5jbHVkZSAiQ2hhbm5lbFNwbGl0dGVyTm9kZS5o
IgorI2luY2x1ZGUgIkNvbnZvbHZlck5vZGUuaCIKKyNpbmNsdWRlICJEZWZhdWx0QXVkaW9EZXN0
aW5hdGlvbk5vZGUuaCIKKyNpbmNsdWRlICJEZWxheU5vZGUuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkR5bmFtaWNzQ29tcHJlc3Nvck5vZGUuaCIKKyNpbmNsdWRlICJFdmVu
dE5hbWVzLmgiCisjaW5jbHVkZSAiRkZURnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiR2Fpbk5vZGUuaCIKKyNpbmNsdWRlICJH
ZW5lcmljRXZlbnRRdWV1ZS5oIgorI2luY2x1ZGUgIkhSVEZEYXRhYmFzZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkhSVEZQYW5uZXIuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJOZXR3b3JraW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIk9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudC5oIgorI2luY2x1ZGUgIk9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIk9zY2lsbGF0b3JOb2RlLmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBhbm5lck5vZGUuaCIKKyNpbmNsdWRlICJQZXJpb2Rp
Y1dhdmUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXIuaCIKKyNpbmNs
dWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiU2NyaXB0UHJvY2Vzc29yTm9kZS5o
IgorI2luY2x1ZGUgIldhdmVTaGFwZXJOb2RlLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
U2NyaXB0Q2FsbFN0YWNrLmg+CisKKyNpZiBERUJVR19BVURJT05PREVfUkVGRVJFTkNFUworI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjZW5kaWYKKworI2lmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSAi
R1N0cmVhbWVyQ29tbW9uLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisj
aW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjZW5k
aWYKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8
d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK2NvbnN0IHVuc2lnbmVkIE1heFBlcmlvZGljV2F2ZUxlbmd0aCA9
IDQwOTY7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKEF1ZGlvQ29udGV4dEJhc2UpOworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEJhc2VB
dWRpb0NvbnRleHQpOworCisjZGVmaW5lIFJFTEVBU0VfTE9HX0lGX0FMTE9XRUQoZm10LCAuLi4p
IFJFTEVBU0VfTE9HX0lGKGRvY3VtZW50KCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpICYmIGRvY3Vt
ZW50KCktPnBhZ2UoKS0+aXNBbHdheXNPbkxvZ2dpbmdBbGxvd2VkKCksIE1lZGlhLCAiJXAgLSBC
YXNlQXVkaW9Db250ZXh0OjoiIGZtdCwgdGhpcywgIyNfX1ZBX0FSR1NfXykKKyAgICAKK2Jvb2wg
QmFzZUF1ZGlvQ29udGV4dDo6aXNTYW1wbGVSYXRlUmFuZ2VHb29kKGZsb2F0IHNhbXBsZVJhdGUp
Cit7CisgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhlIG1pbmltdW0gc2FtcGxl
LXJhdGUgY291bGQgYmUgbGVzcyB0aGFuIDQ0LjFLSHosCisgICAgLy8gYnV0IHRoYXQgd2lsbCBy
ZXF1aXJlIHNvbWUgZml4ZXMgaW4gSFJURlBhbm5lcjo6ZmZ0U2l6ZUZvclNhbXBsZVJhdGUoKSwg
YW5kIHNvbWUgdGVzdGluZyB0aGVyZS4KKyAgICByZXR1cm4gc2FtcGxlUmF0ZSA+PSA0NDEwMCAm
JiBzYW1wbGVSYXRlIDw9IDk2MDAwOworfQorCit1bnNpZ25lZCBCYXNlQXVkaW9Db250ZXh0Ojpz
X2hhcmR3YXJlQ29udGV4dENvdW50ID0gMDsKKworQXVkaW9Db250ZXh0QmFzZTo6QXVkaW9Db250
ZXh0QmFzZShEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBBY3RpdmVET01PYmplY3QoZG9jdW1l
bnQpCit7Cit9CisKKy8vIENvbnN0cnVjdG9yIGZvciByZW5kZXJpbmcgdG8gdGhlIGF1ZGlvIGhh
cmR3YXJlLgorQmFzZUF1ZGlvQ29udGV4dDo6QmFzZUF1ZGlvQ29udGV4dChEb2N1bWVudCYgZG9j
dW1lbnQpCisgICAgOiBBdWRpb0NvbnRleHRCYXNlKGRvY3VtZW50KQorI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAorICAgICwgbV9sb2dnZXIoZG9jdW1lbnQubG9nZ2VyKCkpCisgICAgLCBtX2xv
Z0lkZW50aWZpZXIodW5pcXVlTG9nSWRlbnRpZmllcigpKQorI2VuZGlmCisgICAgLCBtX21lZGlh
U2Vzc2lvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBsYXRmb3JtTWVkaWFTZXNzaW9u
TWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpLCAqdGhpcykpCisgICAgLCBtX2V2ZW50UXVldWUoTWFp
blRocmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQoreworICAgIC8vIEFjY29y
ZGluZyB0byBzcGVjIEF1ZGlvQ29udGV4dCBtdXN0IGRpZSBvbmx5IGFmdGVyIHBhZ2UgbmF2aWdh
dGUuCisgICAgLy8gTGV0cyBtYXJrIGl0IGFzIEFjdGl2ZURPTU9iamVjdCB3aXRoIHBlbmRpbmcg
YWN0aXZpdHkgYW5kIHVubWFyayBpdCBpbiBjbGVhciBtZXRob2QuCisgICAgbWFrZVBlbmRpbmdB
Y3Rpdml0eSgpOworCisgICAgY29uc3RydWN0Q29tbW9uKCk7CisKKyAgICBtX2Rlc3RpbmF0aW9u
Tm9kZSA9IERlZmF1bHRBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKCp0aGlzKTsKKworICAg
IC8vIEluaXRpYWxpemUgdGhlIGRlc3RpbmF0aW9uIG5vZGUncyBtdXRlZCBzdGF0ZSB0byBtYXRj
aCB0aGUgcGFnZSdzIGN1cnJlbnQgbXV0ZWQgc3RhdGUuCisgICAgcGFnZU11dGVkU3RhdGVEaWRD
aGFuZ2UoKTsKKworICAgIGRvY3VtZW50LmFkZEF1ZGlvUHJvZHVjZXIoKnRoaXMpOworICAgIGRv
Y3VtZW50LnJlZ2lzdGVyRm9yVmlzaWJpbGl0eVN0YXRlQ2hhbmdlZENhbGxiYWNrcygqdGhpcyk7
Cit9CisKKy8vIENvbnN0cnVjdG9yIGZvciBvZmZsaW5lIChub24tcmVhbHRpbWUpIHJlbmRlcmlu
Zy4KK0Jhc2VBdWRpb0NvbnRleHQ6OkJhc2VBdWRpb0NvbnRleHQoRG9jdW1lbnQmIGRvY3VtZW50
LCBBdWRpb0J1ZmZlciogcmVuZGVyVGFyZ2V0KQorICAgIDogQXVkaW9Db250ZXh0QmFzZShkb2N1
bWVudCkKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAsIG1fbG9nZ2VyKGRvY3VtZW50
LmxvZ2dlcigpKQorICAgICwgbV9sb2dJZGVudGlmaWVyKHVuaXF1ZUxvZ0lkZW50aWZpZXIoKSkK
KyNlbmRpZgorICAgICwgbV9pc09mZmxpbmVDb250ZXh0KHRydWUpCisgICAgLCBtX21lZGlhU2Vz
c2lvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6Y3JlYXRlKFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFu
YWdlcjo6c2hhcmVkTWFuYWdlcigpLCAqdGhpcykpCisgICAgLCBtX2V2ZW50UXVldWUoTWFpblRo
cmVhZEdlbmVyaWNFdmVudFF1ZXVlOjpjcmVhdGUoKnRoaXMpKQorICAgICwgbV9yZW5kZXJUYXJn
ZXQocmVuZGVyVGFyZ2V0KQoreworICAgIGNvbnN0cnVjdENvbW1vbigpOworCisgICAgLy8gQ3Jl
YXRlIGEgbmV3IGRlc3RpbmF0aW9uIGZvciBvZmZsaW5lIHJlbmRlcmluZy4KKyAgICBtX2Rlc3Rp
bmF0aW9uTm9kZSA9IE9mZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZTo6Y3JlYXRlKCp0aGlzLCBt
X3JlbmRlclRhcmdldC5nZXQoKSk7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6Y29uc3Ry
dWN0Q29tbW9uKCkKK3sKKyAgICBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgpOworICAgIAorICAgIG1f
bGlzdGVuZXIgPSBBdWRpb0xpc3RlbmVyOjpjcmVhdGUoKTsKKworICAgIEFTU0VSVChkb2N1bWVu
dCgpKTsKKyAgICBpZiAoZG9jdW1lbnQoKS0+YXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmUoKSkKKyAgICAgICAgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihSZXF1aXJlVXNlckdlc3R1cmVG
b3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOworICAgIGVsc2UKKyAgICAgICAgbV9yZXN0cmljdGlv
bnMgPSBOb1Jlc3RyaWN0aW9uczsKKworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGFkZEJlaGF2
aW9yUmVzdHJpY3Rpb24oUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9u
KTsKKyNlbmRpZgorfQorCitCYXNlQXVkaW9Db250ZXh0Ojp+QmFzZUF1ZGlvQ29udGV4dCgpCit7
CisjaWYgREVCVUdfQVVESU9OT0RFX1JFRkVSRU5DRVMKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVw
OiBCYXNlQXVkaW9Db250ZXh0Ojp+QXVkaW9Db250ZXh0KClcbiIsIHRoaXMpOworI2VuZGlmCisg
ICAgQVNTRVJUKCFtX2lzSW5pdGlhbGl6ZWQpOworICAgIEFTU0VSVChtX2lzU3RvcFNjaGVkdWxl
ZCk7CisgICAgQVNTRVJUKG1fbm9kZXNUb0RlbGV0ZS5pc0VtcHR5KCkpOworICAgIEFTU0VSVCht
X3JlZmVyZW5jZWROb2Rlcy5pc0VtcHR5KCkpOworICAgIEFTU0VSVChtX2ZpbmlzaGVkTm9kZXMu
aXNFbXB0eSgpKTsgLy8gRklYTUUgKGJ1ZyAxMDU4NzApOiBUaGlzIGFzc2VydGlvbiBmYWlscyBv
biB0ZXN0cyBzb21ldGltZXMuCisgICAgQVNTRVJUKG1fYXV0b21hdGljUHVsbE5vZGVzLmlzRW1w
dHkoKSk7CisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nKQorICAgICAg
ICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy5yZXNpemUobV9hdXRvbWF0aWNQdWxsTm9k
ZXMuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuaXNF
bXB0eSgpKTsKKyAgICAvLyBGSVhNRTogQ2FuIHdlIGFzc2VydCB0aGF0IG1fZGVmZXJyZWRGaW5p
c2hEZXJlZkxpc3QgaXMgZW1wdHk/CisKKyAgICBpZiAoIWlzT2ZmbGluZUNvbnRleHQoKSAmJiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIHsKKyAgICAgICAgZG9jdW1lbnQoKS0+cmVtb3ZlQXVk
aW9Qcm9kdWNlcigqdGhpcyk7CisgICAgICAgIGRvY3VtZW50KCktPnVucmVnaXN0ZXJGb3JWaXNp
YmlsaXR5U3RhdGVDaGFuZ2VkQ2FsbGJhY2tzKCp0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgQmFz
ZUF1ZGlvQ29udGV4dDo6bGF6eUluaXRpYWxpemUoKQoreworICAgIEFTU0VSVCghbV9pc1N0b3BT
Y2hlZHVsZWQpOworCisgICAgaWYgKG1faXNJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGNvbnRleHQgdG8gaW5pdGlhbGl6ZSBhIHNlY29uZCB0
aW1lIGFmdGVyIGl0J3MgYWxyZWFkeSBiZWVuIGV4cGxpY2l0bHkgdW5pbml0aWFsaXplZC4KKyAg
ICBBU1NFUlQoIW1faXNBdWRpb1RocmVhZEZpbmlzaGVkKTsKKyAgICBpZiAobV9pc0F1ZGlvVGhy
ZWFkRmluaXNoZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9k
ZSkgeworICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+aW5pdGlhbGl6ZSgpOworCisgICAgICAg
IGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHN0YXJ0cyB0
aGUgYXVkaW8gdGhyZWFkLiBUaGUgZGVzdGluYXRpb24gbm9kZSdzIHByb3ZpZGVJbnB1dCgpIG1l
dGhvZCB3aWxsIG5vdyBiZSBjYWxsZWQgcmVwZWF0ZWRseSB0byByZW5kZXIgYXVkaW8uCisgICAg
ICAgICAgICAvLyBFYWNoIHRpbWUgcHJvdmlkZUlucHV0KCkgaXMgY2FsbGVkLCBhIHBvcnRpb24g
b2YgdGhlIGF1ZGlvIHN0cmVhbSBpcyByZW5kZXJlZC4gTGV0J3MgY2FsbCB0aGlzIHRpbWUgcGVy
aW9kIGEgInJlbmRlciBxdWFudHVtIi4KKyAgICAgICAgICAgIC8vIE5PVEU6IGZvciBub3cgZGVm
YXVsdCBBdWRpb0NvbnRleHQgZG9lcyBub3QgbmVlZCBhbiBleHBsaWNpdCBzdGFydFJlbmRlcmlu
ZygpIGNhbGwgZnJvbSBKYXZhU2NyaXB0LgorICAgICAgICAgICAgLy8gV2UgbWF5IHdhbnQgdG8g
Y29uc2lkZXIgcmVxdWlyaW5nIGl0IGZvciBzeW1tZXRyeSB3aXRoIE9mZmxpbmVBdWRpb0NvbnRl
eHQuCisgICAgICAgICAgICBzdGFydFJlbmRlcmluZygpOworICAgICAgICAgICAgKytzX2hhcmR3
YXJlQ29udGV4dENvdW50OworICAgICAgICB9CisgICAgfQorICAgIG1faXNJbml0aWFsaXplZCA9
IHRydWU7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6Y2xlYXIoKQoreworICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOworCisgICAgLy8gV2UgaGF2ZSB0byByZWxl
YXNlIG91ciByZWZlcmVuY2UgdG8gdGhlIGRlc3RpbmF0aW9uIG5vZGUgYmVmb3JlIHRoZSBjb250
ZXh0IHdpbGwgZXZlciBiZSBkZWxldGVkIHNpbmNlIHRoZSBkZXN0aW5hdGlvbiBub2RlIGhvbGRz
IGEgcmVmZXJlbmNlIHRvIHRoZSBjb250ZXh0LgorICAgIGlmIChtX2Rlc3RpbmF0aW9uTm9kZSkK
KyAgICAgICAgbV9kZXN0aW5hdGlvbk5vZGUgPSBudWxscHRyOworCisgICAgLy8gQXVkaW8gdGhy
ZWFkIGlzIGRlYWQuIE5vYm9keSB3aWxsIHNjaGVkdWxlIG5vZGUgZGVsZXRpb24gYWN0aW9uLiBM
ZXQncyBkbyBpdCBvdXJzZWx2ZXMuCisgICAgZG8geworICAgICAgICBkZWxldGVNYXJrZWROb2Rl
cygpOworICAgICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kVmVjdG9yKG1fbm9kZXNNYXJrZWRG
b3JEZWxldGlvbik7CisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5jbGVhcigpOwor
ICAgIH0gd2hpbGUgKG1fbm9kZXNUb0RlbGV0ZS5zaXplKCkpOworCisgICAgY2xlYXJQZW5kaW5n
QWN0aXZpdHkoKTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0Ojp1bmluaXRpYWxpemUoKQor
eworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKworICAgIGlmICghbV9pc0luaXRpYWxpemVkKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBUaGlzIHN0b3BzIHRoZSBhdWRpbyB0aHJlYWQgYW5kIGFsbCBhdWRpbyByZW5k
ZXJpbmcuCisgICAgaWYgKG1fZGVzdGluYXRpb25Ob2RlKQorICAgICAgICBtX2Rlc3RpbmF0aW9u
Tm9kZS0+dW5pbml0aWFsaXplKCk7CisKKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgY29udGV4dCB0
byBpbml0aWFsaXplIGEgc2Vjb25kIHRpbWUgYWZ0ZXIgaXQncyBhbHJlYWR5IGJlZW4gZXhwbGlj
aXRseSB1bmluaXRpYWxpemVkLgorICAgIG1faXNBdWRpb1RocmVhZEZpbmlzaGVkID0gdHJ1ZTsK
KworICAgIGlmICghaXNPZmZsaW5lQ29udGV4dCgpKSB7CisgICAgICAgIEFTU0VSVChzX2hhcmR3
YXJlQ29udGV4dENvdW50KTsKKyAgICAgICAgLS1zX2hhcmR3YXJlQ29udGV4dENvdW50OworCisg
ICAgICAgIC8vIE9mZmxpbmUgY29udGV4dHMgbW92ZSB0byAnQ2xvc2VkJyBzdGF0ZSB3aGVuIGRp
c3BhdGNoaW5nIHRoZSBjb21wbGV0aW9uIGV2ZW50LgorICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6
Q2xvc2VkKTsKKyAgICB9CisKKyAgICAvLyBHZXQgcmlkIG9mIHRoZSBzb3VyY2VzIHdoaWNoIG1h
eSBzdGlsbCBiZSBwbGF5aW5nLgorICAgIGRlcmVmVW5maW5pc2hlZFNvdXJjZU5vZGVzKCk7CisK
KyAgICBtX2lzSW5pdGlhbGl6ZWQgPSBmYWxzZTsKK30KKworYm9vbCBCYXNlQXVkaW9Db250ZXh0
Ojppc0luaXRpYWxpemVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pc0luaXRpYWxpemVkOwor
fQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmFkZFJlYWN0aW9uKFN0YXRlIHN0YXRlLCBET01Q
cm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQoreworICAgIHNpemVfdCBzdGF0ZUluZGV4
ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0ZSk7CisgICAgaWYgKHN0YXRlSW5kZXggPj0gbV9z
dGF0ZVJlYWN0aW9ucy5zaXplKCkpCisgICAgICAgIG1fc3RhdGVSZWFjdGlvbnMuZ3JvdyhzdGF0
ZUluZGV4ICsgMSk7CisKKyAgICBtX3N0YXRlUmVhY3Rpb25zW3N0YXRlSW5kZXhdLmFwcGVuZChX
VEZNb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjpzZXRTdGF0ZShT
dGF0ZSBzdGF0ZSkKK3sKKyAgICBpZiAobV9zdGF0ZSA9PSBzdGF0ZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgbV9zdGF0ZSA9IHN0YXRlOworICAgIG1fZXZlbnRRdWV1ZS0+ZW5xdWV1ZUV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN0YXRlY2hhbmdlRXZlbnQsIEV2ZW50OjpDYW5C
dWJibGU6OlllcywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8pKTsKKworICAgIHNpemVfdCBzdGF0
ZUluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGF0ZSk7CisgICAgaWYgKHN0YXRlSW5kZXgg
Pj0gbV9zdGF0ZVJlYWN0aW9ucy5zaXplKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rv
cjxET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4+IHJlYWN0aW9uczsKKyAgICBtX3N0YXRlUmVhY3Rp
b25zW3N0YXRlSW5kZXhdLnN3YXAocmVhY3Rpb25zKTsKKworICAgIGZvciAoYXV0byYgcHJvbWlz
ZSA6IHJlYWN0aW9ucykKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCk7Cit9CisKK3ZvaWQgQmFz
ZUF1ZGlvQ29udGV4dDo6c3RvcCgpCit7CisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsK
KyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gVXN1YWxseSBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0IGNhbGxzIHN0b3AgdHdpY2UuCisgICAgaWYgKG1faXNTdG9wU2No
ZWR1bGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9pc1N0b3BTY2hlZHVsZWQgPSB0cnVlOwor
CisgICAgQVNTRVJUKGRvY3VtZW50KCkpOworICAgIGRvY3VtZW50KCktPnVwZGF0ZUlzUGxheWlu
Z01lZGlhKCk7CisKKyAgICB1bmluaXRpYWxpemUoKTsKKyAgICBjbGVhcigpOworfQorCit2b2lk
IEJhc2VBdWRpb0NvbnRleHQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbikKK3sKKyAgICBp
ZiAoc3RhdGUoKSA9PSBTdGF0ZTo6UnVubmluZykgeworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+
YmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXliYWNrU3VzcGVuZGVk
KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKKyAgICB9Cit9
CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6cmVzdW1lKCkKK3sKKyAgICBpZiAoc3RhdGUoKSA9
PSBTdGF0ZTo6SW50ZXJydXB0ZWQpIHsKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZEludGVy
cnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZyk7CisgICAgICAg
IGRvY3VtZW50KCktPnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CisgICAgfQorfQorCitjb25zdCBj
aGFyKiBCYXNlQXVkaW9Db250ZXh0OjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gIkF1ZGlvQ29udGV4dCI7Cit9CisKK0RvY3VtZW50KiBBdWRpb0NvbnRleHRCYXNl
Ojpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50PihtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQpOworfQorCitEb2N1bWVudElkZW50aWZpZXIgQmFzZUF1ZGlv
Q29udGV4dDo6aG9zdGluZ0RvY3VtZW50SWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgYXV0byog
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4obV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KTsK
KyAgICByZXR1cm4gZG9jdW1lbnQgPyBkb2N1bWVudC0+aWRlbnRpZmllcigpIDogRG9jdW1lbnRJ
ZGVudGlmaWVyIHsgfTsKK30KKworYm9vbCBCYXNlQXVkaW9Db250ZXh0Ojppc1N1c3BlbmRlZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICFkb2N1bWVudCgpIHx8IGRvY3VtZW50KCktPmFjdGl2ZURP
TU9iamVjdHNBcmVTdXNwZW5kZWQoKSB8fCBkb2N1bWVudCgpLT5hY3RpdmVET01PYmplY3RzQXJl
U3RvcHBlZCgpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnZpc2liaWxpdHlTdGF0ZUNo
YW5nZWQoKQoreworICAgIC8vIERvIG5vdCBzdXNwZW5kIGlmIGF1ZGlvIGlzIGF1ZGlibGUuCisg
ICAgaWYgKCFkb2N1bWVudCgpIHx8IG1lZGlhU3RhdGUoKSA9PSBNZWRpYVByb2R1Y2VyOjpJc1Bs
YXlpbmdBdWRpbyB8fCBtX2lzU3RvcFNjaGVkdWxlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGRvY3VtZW50KCktPmhpZGRlbigpKSB7CisgICAgICAgIGlmIChzdGF0ZSgpID09IFN0YXRl
OjpSdW5uaW5nKSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ2aXNpYmls
aXR5U3RhdGVDaGFuZ2VkKCkgU3VzcGVuZGluZyBwbGF5YmFjayBhZnRlciBnb2luZyB0byB0aGUg
YmFja2dyb3VuZCIpOworICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmJlZ2luSW50ZXJydXB0
aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpFbnRlcmluZ0JhY2tncm91bmQpOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHN0YXRlKCkgPT0gU3RhdGU6OkludGVycnVwdGVk
KSB7CisgICAgICAgICAgICBSRUxFQVNFX0xPR19JRl9BTExPV0VEKCJ2aXNpYmlsaXR5U3RhdGVD
aGFuZ2VkKCkgUmVzdW1pbmcgcGxheWJhY2sgYWZ0ZXIgZW50ZXJpbmcgZm9yZWdyb3VuZCIpOwor
ICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZEludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlh
U2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wg
QmFzZUF1ZGlvQ29udGV4dDo6d291bGRUYWludE9yaWdpbihjb25zdCBVUkwmIHVybCkgY29uc3QK
K3sKKyAgICBpZiAodXJsLnByb3RvY29sSXNEYXRhKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IHRoaXMtPmRvY3VtZW50KCkpCisgICAgICAgIHJl
dHVybiAhZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkuY2FuUmVxdWVzdCh1cmwpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCitFeGNlcHRpb25PcjxSZWY8QXVkaW9CdWZmZXI+PiBCYXNlQXVk
aW9Db250ZXh0OjpjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscywgc2l6ZV90
IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIGF1dG8gYXVkaW9CdWZm
ZXIgPSBBdWRpb0J1ZmZlcjo6Y3JlYXRlKG51bWJlck9mQ2hhbm5lbHMsIG51bWJlck9mRnJhbWVz
LCBzYW1wbGVSYXRlKTsKKyAgICBpZiAoIWF1ZGlvQnVmZmVyKQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKKyAgICByZXR1cm4gYXVkaW9CdWZmZXIucmVs
ZWFzZU5vbk51bGwoKTsKK30KKworRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyPj4gQmFzZUF1
ZGlvQ29udGV4dDo6Y3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyJiBhcnJheUJ1ZmZlciwgYm9vbCBt
aXhUb01vbm8pCit7CisgICAgYXV0byBhdWRpb0J1ZmZlciA9IEF1ZGlvQnVmZmVyOjpjcmVhdGVG
cm9tQXVkaW9GaWxlRGF0YShhcnJheUJ1ZmZlci5kYXRhKCksIGFycmF5QnVmZmVyLmJ5dGVMZW5n
dGgoKSwgbWl4VG9Nb25vLCBzYW1wbGVSYXRlKCkpOworICAgIGlmICghYXVkaW9CdWZmZXIpCisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciB9OworICAgIHJldHVybiBhdWRp
b0J1ZmZlci5yZWxlYXNlTm9uTnVsbCgpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmRl
Y29kZUF1ZGlvRGF0YShSZWY8QXJyYXlCdWZmZXI+JiYgYXVkaW9EYXRhLCBSZWZQdHI8QXVkaW9C
dWZmZXJDYWxsYmFjaz4mJiBzdWNjZXNzQ2FsbGJhY2ssIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxi
YWNrPiYmIGVycm9yQ2FsbGJhY2spCit7CisgICAgaWYgKCFtX2F1ZGlvRGVjb2RlcikKKyAgICAg
ICAgbV9hdWRpb0RlY29kZXIgPSBtYWtlVW5pcXVlPEFzeW5jQXVkaW9EZWNvZGVyPigpOworICAg
IG1fYXVkaW9EZWNvZGVyLT5kZWNvZGVBc3luYyhXVEZNb3ZlKGF1ZGlvRGF0YSksIHNhbXBsZVJh
dGUoKSwgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGVycm9yQ2FsbGJhY2spKTsK
K30KKworRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4+IEJhc2VBdWRpb0Nv
bnRleHQ6OmNyZWF0ZUJ1ZmZlclNvdXJjZSgpCit7CisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSKTsKKworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBpZiAobV9pc1N0b3BT
Y2hlZHVsZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9
OworCisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBSZWY8QXVkaW9CdWZmZXJTb3VyY2VOb2Rl
PiBub2RlID0gQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUo
KSk7CisKKyAgICAvLyBCZWNhdXNlIHRoaXMgaXMgYW4gQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2Rl
LCB0aGUgY29udGV4dCBrZWVwcyBhIHJlZmVyZW5jZSB1bnRpbCBpdCBoYXMgZmluaXNoZWQgcGxh
eWluZy4KKyAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2Rl
OjpmaW5pc2goKSBjYWxscyBCYXNlQXVkaW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNoZWRQcm9j
ZXNzaW5nKCkuCisgICAgcmVmTm9kZShub2RlKTsKKworICAgIHJldHVybiBub2RlOworfQorCitF
eGNlcHRpb25PcjxSZWY8U2NyaXB0UHJvY2Vzc29yTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6OmNy
ZWF0ZVNjcmlwdFByb2Nlc3NvcihzaXplX3QgYnVmZmVyU2l6ZSwgc2l6ZV90IG51bWJlck9mSW5w
dXRDaGFubmVscywgc2l6ZV90IG51bWJlck9mT3V0cHV0Q2hhbm5lbHMpCit7CisgICAgQUxXQVlT
X0xPRyhMT0dJREVOVElGSUVSKTsKKyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
CisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZFN0YXRlRXJyb3IgfTsKKworICAgIGxhenlJbml0aWFsaXplKCk7CisKKyAgICAvLyBX
M0MgRWRpdG9yJ3MgRHJhZnQgMDYgSnVuZSAyMDE3CisgICAgLy8gIGh0dHBzOi8vd2ViYXVkaW8u
Z2l0aHViLmlvL3dlYi1hdWRpby1hcGkvI3dpZGwtQmFzZUF1ZGlvQ29udGV4dC1jcmVhdGVTY3Jp
cHRQcm9jZXNzb3ItU2NyaXB0UHJvY2Vzc29yTm9kZS11bnNpZ25lZC1sb25nLWJ1ZmZlclNpemUt
dW5zaWduZWQtbG9uZy1udW1iZXJPZklucHV0Q2hhbm5lbHMtdW5zaWduZWQtbG9uZy1udW1iZXJP
Zk91dHB1dENoYW5uZWxzCisKKyAgICAvLyBUaGUgYnVmZmVyU2l6ZSBwYXJhbWV0ZXIgZGV0ZXJt
aW5lcyB0aGUgYnVmZmVyIHNpemUgaW4gdW5pdHMgb2Ygc2FtcGxlLWZyYW1lcy4gSWYgaXQncyBu
b3QgcGFzc2VkIGluLAorICAgIC8vIG9yIGlmIHRoZSB2YWx1ZSBpcyAwLCB0aGVuIHRoZSBpbXBs
ZW1lbnRhdGlvbiB3aWxsIGNob29zZSB0aGUgYmVzdCBidWZmZXIgc2l6ZSBmb3IgdGhlIGdpdmVu
IGVudmlyb25tZW50LAorICAgIC8vIHdoaWNoIHdpbGwgYmUgY29uc3RhbnQgcG93ZXIgb2YgMiB0
aHJvdWdob3V0IHRoZSBsaWZldGltZSBvZiB0aGUgbm9kZS4gLi4uIElmIHRoZSB2YWx1ZSBvZiB0
aGlzIHBhcmFtZXRlcgorICAgIC8vIGlzIG5vdCBvbmUgb2YgdGhlIGFsbG93ZWQgcG93ZXItb2Yt
MiB2YWx1ZXMgbGlzdGVkIGFib3ZlLCBhbiBJbmRleFNpemVFcnJvciBtdXN0IGJlIHRocm93bi4K
KyAgICBzd2l0Y2ggKGJ1ZmZlclNpemUpIHsKKyAgICBjYXNlIDA6CisjaWYgVVNFKEFVRElPX1NF
U1NJT04pCisgICAgICAgIC8vIFBpY2sgYSB2YWx1ZSBiZXR3ZWVuIDI1NiAoMl44KSBhbmQgMTYz
ODQgKDJeMTQpLCBiYXNlZCBvbiB0aGUgYnVmZmVyIHNpemUgb2YgdGhlIGN1cnJlbnQgQXVkaW9T
ZXNzaW9uOgorICAgICAgICBidWZmZXJTaXplID0gMSA8PCBzdGQ6Om1heDxzaXplX3Q+KDgsIHN0
ZDo6bWluPHNpemVfdD4oMTQsIHN0ZDo6bG9nMihBdWRpb1Nlc3Npb246OnNoYXJlZFNlc3Npb24o
KS5idWZmZXJTaXplKCkpKSk7CisjZWxzZQorICAgICAgICBidWZmZXJTaXplID0gMjA0ODsKKyNl
bmRpZgorICAgICAgICBicmVhazsKKyAgICBjYXNlIDI1NjoKKyAgICBjYXNlIDUxMjoKKyAgICBj
YXNlIDEwMjQ6CisgICAgY2FzZSAyMDQ4OgorICAgIGNhc2UgNDA5NjoKKyAgICBjYXNlIDgxOTI6
CisgICAgY2FzZSAxNjM4NDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEluZGV4U2l6ZUVycm9yIH07CisgICAgfQorCisgICAgLy8gQW4g
SW5kZXhTaXplRXJyb3IgZXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIGlmIGJ1ZmZlclNpemUgb3Ig
bnVtYmVyT2ZJbnB1dENoYW5uZWxzIG9yIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMKKyAgICAvLyBh
cmUgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UuIEl0IGlzIGludmFsaWQgZm9yIGJvdGggbnVtYmVy
T2ZJbnB1dENoYW5uZWxzIGFuZCBudW1iZXJPZk91dHB1dENoYW5uZWxzIHRvIGJlIHplcm8uCisg
ICAgLy8gSW4gdGhpcyBjYXNlIGFuIEluZGV4U2l6ZUVycm9yIG11c3QgYmUgdGhyb3duLgorCisg
ICAgaWYgKCFudW1iZXJPZklucHV0Q2hhbm5lbHMgJiYgIW51bWJlck9mT3V0cHV0Q2hhbm5lbHMp
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBOb3RTdXBwb3J0ZWRFcnJvciB9OworCisgICAg
Ly8gVGhpcyBwYXJhbWV0ZXIgW251bWJlck9mSW5wdXRDaGFubmVsc10gZGV0ZXJtaW5lcyB0aGUg
bnVtYmVyIG9mIGNoYW5uZWxzIGZvciB0aGlzIG5vZGUncyBpbnB1dC4gVmFsdWVzIG9mCisgICAg
Ly8gdXAgdG8gMzIgbXVzdCBiZSBzdXBwb3J0ZWQuIEEgTm90U3VwcG9ydGVkRXJyb3IgbXVzdCBi
ZSB0aHJvd24gaWYgdGhlIG51bWJlciBvZiBjaGFubmVscyBpcyBub3Qgc3VwcG9ydGVkLgorCisg
ICAgaWYgKG51bWJlck9mSW5wdXRDaGFubmVscyA+IG1heE51bWJlck9mQ2hhbm5lbHMoKSkKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdFN1cHBvcnRlZEVycm9yIH07CisKKyAgICAvLyBU
aGlzIHBhcmFtZXRlciBbbnVtYmVyT2ZPdXRwdXRDaGFubmVsc10gZGV0ZXJtaW5lcyB0aGUgbnVt
YmVyIG9mIGNoYW5uZWxzIGZvciB0aGlzIG5vZGUncyBvdXRwdXQuIFZhbHVlcyBvZgorICAgIC8v
IHVwIHRvIDMyIG11c3QgYmUgc3VwcG9ydGVkLiBBIE5vdFN1cHBvcnRlZEVycm9yIG11c3QgYmUg
dGhyb3duIGlmIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaXMgbm90IHN1cHBvcnRlZC4KKworICAg
IGlmIChudW1iZXJPZk91dHB1dENoYW5uZWxzID4gbWF4TnVtYmVyT2ZDaGFubmVscygpKQorICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90U3VwcG9ydGVkRXJyb3IgfTsKKworICAgIGF1dG8g
bm9kZSA9IFNjcmlwdFByb2Nlc3Nvck5vZGU6OmNyZWF0ZSgqdGhpcywgc2FtcGxlUmF0ZSgpLCBi
dWZmZXJTaXplLCBudW1iZXJPZklucHV0Q2hhbm5lbHMsIG51bWJlck9mT3V0cHV0Q2hhbm5lbHMp
OworCisgICAgcmVmTm9kZShub2RlKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwg
d2Ugc3RvcCBtYWtpbmcgamF2YXNjcmlwdCByZW5kZXJpbmcgY2FsbGJhY2tzCisgICAgcmV0dXJu
IG5vZGU7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxCaXF1YWRGaWx0ZXJOb2RlPj4gQmFzZUF1ZGlv
Q29udGV4dDo6Y3JlYXRlQmlxdWFkRmlsdGVyKCkKK3sKKyAgICBBTFdBWVNfTE9HKExPR0lERU5U
SUZJRVIpOworICAgIAorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1faXNT
dG9wU2NoZWR1bGVkKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJy
b3IgfTsKKworICAgIGxhenlJbml0aWFsaXplKCk7CisKKyAgICByZXR1cm4gQmlxdWFkRmlsdGVy
Tm9kZTo6Y3JlYXRlKCp0aGlzLCBzYW1wbGVSYXRlKCkpOworfQorCitFeGNlcHRpb25PcjxSZWY8
V2F2ZVNoYXBlck5vZGU+PiBCYXNlQXVkaW9Db250ZXh0OjpjcmVhdGVXYXZlU2hhcGVyKCkKK3sK
KyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworICAgIAorICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKKworICAgIGxhenlJbml0aWFsaXplKCk7Cisg
ICAgcmV0dXJuIFdhdmVTaGFwZXJOb2RlOjpjcmVhdGUoKnRoaXMpOworfQorCitFeGNlcHRpb25P
cjxSZWY8UGFubmVyTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6OmNyZWF0ZVBhbm5lcigpCit7Cisg
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKKyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKKyAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IEludmFsaWRTdGF0ZUVycm9yIH07CisKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAg
IHJldHVybiBQYW5uZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7Cit9CisKK0V4
Y2VwdGlvbk9yPFJlZjxDb252b2x2ZXJOb2RlPj4gQmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlQ29u
dm9sdmVyKCkKK3sKKyAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworICAgIAorICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQorICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKKworICAgIGxhenlJbml0
aWFsaXplKCk7CisgICAgcmV0dXJuIENvbnZvbHZlck5vZGU6OmNyZWF0ZSgqdGhpcywgc2FtcGxl
UmF0ZSgpKTsKK30KKworRXhjZXB0aW9uT3I8UmVmPER5bmFtaWNzQ29tcHJlc3Nvck5vZGU+PiBC
YXNlQXVkaW9Db250ZXh0OjpjcmVhdGVEeW5hbWljc0NvbXByZXNzb3IoKQoreworICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICByZXR1cm4g
RHluYW1pY3NDb21wcmVzc29yTm9kZTo6Y3JlYXRlKCp0aGlzLCBzYW1wbGVSYXRlKCkpOworfQor
CitFeGNlcHRpb25PcjxSZWY8QW5hbHlzZXJOb2RlPj4gQmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRl
QW5hbHlzZXIoKQoreworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgbGF6eUlu
aXRpYWxpemUoKTsKKyAgICByZXR1cm4gQW5hbHlzZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBs
ZVJhdGUoKSk7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxHYWluTm9kZT4+IEJhc2VBdWRpb0NvbnRl
eHQ6OmNyZWF0ZUdhaW4oKQoreworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CisgICAg
CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQp
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworCisgICAg
bGF6eUluaXRpYWxpemUoKTsKKyAgICByZXR1cm4gR2Fpbk5vZGU6OmNyZWF0ZSgqdGhpcywgc2Ft
cGxlUmF0ZSgpKTsKK30KKworRXhjZXB0aW9uT3I8UmVmPERlbGF5Tm9kZT4+IEJhc2VBdWRpb0Nv
bnRleHQ6OmNyZWF0ZURlbGF5KGRvdWJsZSBtYXhEZWxheVRpbWUpCit7CisgICAgQUxXQVlTX0xP
RyhMT0dJREVOVElGSUVSKTsKKyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IGlmIChtX2lzU3RvcFNjaGVkdWxlZCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yIH07CisKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBEZWxh
eU5vZGU6OmNyZWF0ZSgqdGhpcywgc2FtcGxlUmF0ZSgpLCBtYXhEZWxheVRpbWUpOworfQorCitF
eGNlcHRpb25PcjxSZWY8Q2hhbm5lbFNwbGl0dGVyTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6OmNy
ZWF0ZUNoYW5uZWxTcGxpdHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzKQoreworICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBhdXRvIG5v
ZGUgPSBDaGFubmVsU3BsaXR0ZXJOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSwgbnVt
YmVyT2ZPdXRwdXRzKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbmRleFNpemVFcnJvciB9OworICAgIHJldHVybiBub2RlLnJlbGVhc2VOb25OdWxsKCk7Cit9
CisKK0V4Y2VwdGlvbk9yPFJlZjxDaGFubmVsTWVyZ2VyTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6
OmNyZWF0ZUNoYW5uZWxNZXJnZXIoc2l6ZV90IG51bWJlck9mSW5wdXRzKQoreworICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgbGF6eUluaXRpYWxpemUoKTsKKyAgICBhdXRvIG5v
ZGUgPSBDaGFubmVsTWVyZ2VyTm9kZTo6Y3JlYXRlKCp0aGlzLCBzYW1wbGVSYXRlKCksIG51bWJl
ck9mSW5wdXRzKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bmRleFNpemVFcnJvciB9OworICAgIHJldHVybiBub2RlLnJlbGVhc2VOb25OdWxsKCk7Cit9CisK
K0V4Y2VwdGlvbk9yPFJlZjxPc2NpbGxhdG9yTm9kZT4+IEJhc2VBdWRpb0NvbnRleHQ6OmNyZWF0
ZU9zY2lsbGF0b3IoKQoreworICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CisgICAgCisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9pc1N0b3BTY2hlZHVsZWQpCisg
ICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciB9OworCisgICAgbGF6
eUluaXRpYWxpemUoKTsKKworICAgIFJlZjxPc2NpbGxhdG9yTm9kZT4gbm9kZSA9IE9zY2lsbGF0
b3JOb2RlOjpjcmVhdGUoKnRoaXMsIHNhbXBsZVJhdGUoKSk7CisKKyAgICAvLyBCZWNhdXNlIHRo
aXMgaXMgYW4gQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlLCB0aGUgY29udGV4dCBrZWVwcyBhIHJl
ZmVyZW5jZSB1bnRpbCBpdCBoYXMgZmluaXNoZWQgcGxheWluZy4KKyAgICAvLyBXaGVuIHRoaXMg
aGFwcGVucywgQXVkaW9TY2hlZHVsZWRTb3VyY2VOb2RlOjpmaW5pc2goKSBjYWxscyBCYXNlQXVk
aW9Db250ZXh0Ojpub3RpZnlOb2RlRmluaXNoZWRQcm9jZXNzaW5nKCkuCisgICAgcmVmTm9kZShu
b2RlKTsKKworICAgIHJldHVybiBub2RlOworfQorCitFeGNlcHRpb25PcjxSZWY8UGVyaW9kaWNX
YXZlPj4gQmFzZUF1ZGlvQ29udGV4dDo6Y3JlYXRlUGVyaW9kaWNXYXZlKEZsb2F0MzJBcnJheSYg
cmVhbCwgRmxvYXQzMkFycmF5JiBpbWFnaW5hcnkpCit7CisgICAgQUxXQVlTX0xPRyhMT0dJREVO
VElGSUVSKTsKKyAgICAKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmIChtX2lz
U3RvcFNjaGVkdWxlZCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yIH07CisKKyAgICBpZiAocmVhbC5sZW5ndGgoKSAhPSBpbWFnaW5hcnkubGVuZ3RoKCkgfHwg
KHJlYWwubGVuZ3RoKCkgPiBNYXhQZXJpb2RpY1dhdmVMZW5ndGgpIHx8ICFyZWFsLmxlbmd0aCgp
KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW5kZXhTaXplRXJyb3IgfTsKKyAgICBsYXp5
SW5pdGlhbGl6ZSgpOworICAgIHJldHVybiBQZXJpb2RpY1dhdmU6OmNyZWF0ZShzYW1wbGVSYXRl
KCksIHJlYWwsIGltYWdpbmFyeSk7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6bm90aWZ5
Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKGlz
QXVkaW9UaHJlYWQoKSk7CisgICAgbV9maW5pc2hlZE5vZGVzLmFwcGVuZChub2RlKTsKK30KKwor
dm9pZCBCYXNlQXVkaW9Db250ZXh0OjpkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKQoreworICAg
IEFTU0VSVChpc0dyYXBoT3duZXIoKSk7CisgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSB8fCBp
c0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9maW5pc2hl
ZE5vZGVzKQorICAgICAgICBkZXJlZk5vZGUoKm5vZGUpOworCisgICAgbV9maW5pc2hlZE5vZGVz
LmNsZWFyKCk7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6cmVmTm9kZShBdWRpb05vZGUm
IG5vZGUpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBdXRvTG9ja2VyIGxv
Y2tlcigqdGhpcyk7CisgICAgCisgICAgbm9kZS5yZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVj
dGlvbik7CisgICAgbV9yZWZlcmVuY2VkTm9kZXMuYXBwZW5kKCZub2RlKTsKK30KKwordm9pZCBC
YXNlQXVkaW9Db250ZXh0OjpkZXJlZk5vZGUoQXVkaW9Ob2RlJiBub2RlKQoreworICAgIEFTU0VS
VChpc0dyYXBoT3duZXIoKSk7CisgICAgCisgICAgbm9kZS5kZXJlZihBdWRpb05vZGU6OlJlZlR5
cGVDb25uZWN0aW9uKTsKKworICAgIEFTU0VSVChtX3JlZmVyZW5jZWROb2Rlcy5jb250YWlucygm
bm9kZSkpOworICAgIG1fcmVmZXJlbmNlZE5vZGVzLnJlbW92ZUZpcnN0KCZub2RlKTsKK30KKwor
dm9pZCBCYXNlQXVkaW9Db250ZXh0OjpkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpCit7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpICYmIGlzQXVkaW9UaHJlYWRGaW5pc2hlZCgpKTsKKyAg
ICBmb3IgKGF1dG8mIG5vZGUgOiBtX3JlZmVyZW5jZWROb2RlcykKKyAgICAgICAgbm9kZS0+ZGVy
ZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7CisKKyAgICBtX3JlZmVyZW5jZWROb2Rl
cy5jbGVhcigpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmxvY2soYm9vbCYgbXVzdFJl
bGVhc2VMb2NrKQoreworICAgIC8vIERvbid0IGFsbG93IHJlZ3VsYXIgbG9jayBpbiByZWFsLXRp
bWUgYXVkaW8gdGhyZWFkLgorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBUaHJl
YWQmIHRoaXNUaHJlYWQgPSBUaHJlYWQ6OmN1cnJlbnQoKTsKKworICAgIGlmICgmdGhpc1RocmVh
ZCA9PSBtX2dyYXBoT3duZXJUaHJlYWQpIHsKKyAgICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIHRo
ZSBsb2NrLgorICAgICAgICBtdXN0UmVsZWFzZUxvY2sgPSBmYWxzZTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBBY3F1aXJlIHRoZSBsb2NrLgorICAgICAgICBtX2NvbnRleHRHcmFwaE11dGV4
LmxvY2soKTsKKyAgICAgICAgbV9ncmFwaE93bmVyVGhyZWFkID0gJnRoaXNUaHJlYWQ7CisgICAg
ICAgIG11c3RSZWxlYXNlTG9jayA9IHRydWU7CisgICAgfQorfQorCitib29sIEJhc2VBdWRpb0Nv
bnRleHQ6OnRyeUxvY2soYm9vbCYgbXVzdFJlbGVhc2VMb2NrKQoreworICAgIFRocmVhZCYgdGhp
c1RocmVhZCA9IFRocmVhZDo6Y3VycmVudCgpOworICAgIGJvb2wgaXNBdWRpb1RocmVhZCA9ICZ0
aGlzVGhyZWFkID09IGF1ZGlvVGhyZWFkKCk7CisKKyAgICAvLyBUcnkgdG8gY2F0Y2ggY2FzZXMg
b2YgdXNpbmcgdHJ5IGxvY2sgb24gbWFpbiB0aHJlYWQgLSBpdCBzaG91bGQgdXNlIHJlZ3VsYXIg
bG9jay4KKyAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCB8fCBpc0F1ZGlvVGhyZWFkRmluaXNoZWQo
KSk7CisgICAgCisgICAgaWYgKCFpc0F1ZGlvVGhyZWFkKSB7CisgICAgICAgIC8vIEluIHJlbGVh
c2UgYnVpbGQgdHJlYXQgdHJ5TG9jaygpIGFzIGxvY2soKSAoc2luY2UgYWJvdmUgQVNTRVJUKGlz
QXVkaW9UaHJlYWQpIG5ldmVyIGZpcmVzKSAtIHRoaXMgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvLgor
ICAgICAgICBsb2NrKG11c3RSZWxlYXNlTG9jayk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICAKKyAgICBib29sIGhhc0xvY2s7CisgICAgCisgICAgaWYgKCZ0aGlzVGhyZWFkID09
IG1fZ3JhcGhPd25lclRocmVhZCkgeworICAgICAgICAvLyBUaHJlYWQgYWxyZWFkeSBoYXMgdGhl
IGxvY2suCisgICAgICAgIGhhc0xvY2sgPSB0cnVlOworICAgICAgICBtdXN0UmVsZWFzZUxvY2sg
PSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBEb24ndCBhbHJlYWR5IGhhdmUgdGhl
IGxvY2sgLSB0cnkgdG8gYWNxdWlyZSBpdC4KKyAgICAgICAgaGFzTG9jayA9IG1fY29udGV4dEdy
YXBoTXV0ZXgudHJ5TG9jaygpOworICAgICAgICAKKyAgICAgICAgaWYgKGhhc0xvY2spCisgICAg
ICAgICAgICBtX2dyYXBoT3duZXJUaHJlYWQgPSAmdGhpc1RocmVhZDsKKworICAgICAgICBtdXN0
UmVsZWFzZUxvY2sgPSBoYXNMb2NrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaGFzTG9jazsK
K30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0Ojp1bmxvY2soKQoreworICAgIEFTU0VSVChtX2dy
YXBoT3duZXJUaHJlYWQgPT0gJlRocmVhZDo6Y3VycmVudCgpKTsKKworICAgIG1fZ3JhcGhPd25l
clRocmVhZCA9IG51bGxwdHI7CisgICAgbV9jb250ZXh0R3JhcGhNdXRleC51bmxvY2soKTsKK30K
KworYm9vbCBCYXNlQXVkaW9Db250ZXh0Ojppc0F1ZGlvVGhyZWFkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9hdWRpb1RocmVhZCA9PSAmVGhyZWFkOjpjdXJyZW50KCk7Cit9CisKK2Jvb2wgQmFz
ZUF1ZGlvQ29udGV4dDo6aXNHcmFwaE93bmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ncmFw
aE93bmVyVGhyZWFkID09ICZUaHJlYWQ6OmN1cnJlbnQoKTsKK30KKwordm9pZCBCYXNlQXVkaW9D
b250ZXh0OjphZGREZWZlcnJlZEZpbmlzaERlcmVmKEF1ZGlvTm9kZSogbm9kZSkKK3sKKyAgICBB
U1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKKyAgICBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0LmFw
cGVuZChub2RlKTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjpoYW5kbGVQcmVSZW5kZXJU
YXNrcygpCit7CisgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7CisKKyAgICAvLyBBdCB0aGUg
YmVnaW5uaW5nIG9mIGV2ZXJ5IHJlbmRlciBxdWFudHVtLCB0cnkgdG8gdXBkYXRlIHRoZSBpbnRl
cm5hbCByZW5kZXJpbmcgZ3JhcGggc3RhdGUgKGZyb20gbWFpbiB0aHJlYWQgY2hhbmdlcykuCisg
ICAgLy8gSXQncyBPSyBpZiB0aGUgdHJ5TG9jaygpIGZhaWxzLCB3ZSdsbCBqdXN0IHRha2Ugc2xp
Z2h0bHkgbG9uZ2VyIHRvIHBpY2sgdXAgdGhlIGNoYW5nZXMuCisgICAgYm9vbCBtdXN0UmVsZWFz
ZUxvY2s7CisgICAgaWYgKHRyeUxvY2sobXVzdFJlbGVhc2VMb2NrKSkgeworICAgICAgICAvLyBG
aXh1cCB0aGUgc3RhdGUgb2YgYW55IGRpcnR5IEF1ZGlvU3VtbWluZ0p1bmN0aW9ucyBhbmQgQXVk
aW9Ob2RlT3V0cHV0cy4KKyAgICAgICAgaGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMo
KTsKKyAgICAgICAgaGFuZGxlRGlydHlBdWRpb05vZGVPdXRwdXRzKCk7CisKKyAgICAgICAgdXBk
YXRlQXV0b21hdGljUHVsbE5vZGVzKCk7CisKKyAgICAgICAgaWYgKG11c3RSZWxlYXNlTG9jaykK
KyAgICAgICAgICAgIHVubG9jaygpOworICAgIH0KK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0
OjpoYW5kbGVQb3N0UmVuZGVyVGFza3MoKQoreworICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkp
OworCisgICAgLy8gTXVzdCB1c2UgYSB0cnlMb2NrKCkgaGVyZSB0b28uIERvbid0IHdvcnJ5LCB0
aGUgbG9jayB3aWxsIHZlcnkgcmFyZWx5IGJlIGNvbnRlbmRlZCBhbmQgdGhpcyBtZXRob2QgaXMg
Y2FsbGVkIGZyZXF1ZW50bHkuCisgICAgLy8gVGhlIHdvcnN0IHRoYXQgY2FuIGhhcHBlbiBpcyB0
aGF0IHRoZXJlIHdpbGwgYmUgc29tZSBub2RlcyB3aGljaCB3aWxsIHRha2Ugc2xpZ2h0bHkgbG9u
Z2VyIHRoYW4gdXN1YWwgdG8gYmUgZGVsZXRlZCBvciByZW1vdmVkCisgICAgLy8gZnJvbSB0aGUg
cmVuZGVyIGdyYXBoIChpbiB3aGljaCBjYXNlIHRoZXknbGwgcmVuZGVyIHNpbGVuY2UpLgorICAg
IGJvb2wgbXVzdFJlbGVhc2VMb2NrOworICAgIGlmICh0cnlMb2NrKG11c3RSZWxlYXNlTG9jaykp
IHsKKyAgICAgICAgLy8gVGFrZSBjYXJlIG9mIGZpbmlzaGluZyBhbnkgZGVyZWZzIHdoZXJlIHRo
ZSB0cnlMb2NrKCkgZmFpbGVkIHByZXZpb3VzbHkuCisgICAgICAgIGhhbmRsZURlZmVycmVkRmlu
aXNoRGVyZWZzKCk7CisKKyAgICAgICAgLy8gRHluYW1pY2FsbHkgY2xlYW4gdXAgbm9kZXMgd2hp
Y2ggYXJlIG5vIGxvbmdlciBuZWVkZWQuCisgICAgICAgIGRlcmVmRmluaXNoZWRTb3VyY2VOb2Rl
cygpOworCisgICAgICAgIC8vIERvbid0IGRlbGV0ZSBpbiB0aGUgcmVhbC10aW1lIHRocmVhZC4g
TGV0IHRoZSBtYWluIHRocmVhZCBkbyBpdC4KKyAgICAgICAgLy8gUmVmLWNvdW50ZWQgb2JqZWN0
cyBoZWxkIGJ5IGNlcnRhaW4gQXVkaW9Ob2RlcyBtYXkgbm90IGJlIHRocmVhZC1zYWZlLgorICAg
ICAgICBzY2hlZHVsZU5vZGVEZWxldGlvbigpOworCisgICAgICAgIC8vIEZpeHVwIHRoZSBzdGF0
ZSBvZiBhbnkgZGlydHkgQXVkaW9TdW1taW5nSnVuY3Rpb25zIGFuZCBBdWRpb05vZGVPdXRwdXRz
LgorICAgICAgICBoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpOworICAgICAgICBo
YW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKTsKKworICAgICAgICB1cGRhdGVBdXRvbWF0aWNQ
dWxsTm9kZXMoKTsKKworICAgICAgICBpZiAobXVzdFJlbGVhc2VMb2NrKQorICAgICAgICAgICAg
dW5sb2NrKCk7CisgICAgfQorfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmhhbmRsZURlZmVy
cmVkRmluaXNoRGVyZWZzKCkKK3sKKyAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpICYmIGlzR3Jh
cGhPd25lcigpKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX2RlZmVycmVkRmluaXNoRGVyZWZM
aXN0KQorICAgICAgICBub2RlLT5maW5pc2hEZXJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0
aW9uKTsKKyAgICAKKyAgICBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0LmNsZWFyKCk7Cit9CisK
K3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6bWFya0ZvckRlbGV0aW9uKEF1ZGlvTm9kZSYgbm9kZSkK
K3sKKyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKGlzQXVkaW9UaHJlYWRG
aW5pc2hlZCgpKQorICAgICAgICBtX25vZGVzVG9EZWxldGUuYXBwZW5kKCZub2RlKTsKKyAgICBl
bHNlCisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5hcHBlbmQoJm5vZGUpOworCisg
ICAgLy8gVGhpcyBpcyBwcm9iYWJseSB0aGUgYmVzdCB0aW1lIGZvciB1cyB0byByZW1vdmUgdGhl
IG5vZGUgZnJvbSBhdXRvbWF0aWMgcHVsbCBsaXN0LAorICAgIC8vIHNpbmNlIGFsbCBjb25uZWN0
aW9ucyBhcmUgZ29uZSBhbmQgd2UgaG9sZCB0aGUgZ3JhcGggbG9jay4gVGhlbiB3aGVuIGhhbmRs
ZVBvc3RSZW5kZXJUYXNrcygpCisgICAgLy8gZ2V0cyBhIGNoYW5jZSB0byBzY2hlZHVsZSB0aGUg
ZGVsZXRpb24gd29yaywgdXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCkgYWxzbyBnZXRzIGEgY2hh
bmNlIHRvCisgICAgLy8gbW9kaWZ5IG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLgorICAg
IHJlbW92ZUF1dG9tYXRpY1B1bGxOb2RlKG5vZGUpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRl
eHQ6OnNjaGVkdWxlTm9kZURlbGV0aW9uKCkKK3sKKyAgICBib29sIGlzR29vZCA9IG1faXNJbml0
aWFsaXplZCAmJiBpc0dyYXBoT3duZXIoKTsKKyAgICBBU1NFUlQoaXNHb29kKTsKKyAgICBpZiAo
IWlzR29vZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gTWFrZSBzdXJlIHRvIGNhbGwgZGVs
ZXRlTWFya2VkTm9kZXMoKSBvbiBtYWluIHRocmVhZC4gICAgCisgICAgaWYgKG1fbm9kZXNNYXJr
ZWRGb3JEZWxldGlvbi5zaXplKCkgJiYgIW1faXNEZWxldGlvblNjaGVkdWxlZCkgeworICAgICAg
ICBtX25vZGVzVG9EZWxldGUuYXBwZW5kVmVjdG9yKG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbik7
CisgICAgICAgIG1fbm9kZXNNYXJrZWRGb3JEZWxldGlvbi5jbGVhcigpOworCisgICAgICAgIG1f
aXNEZWxldGlvblNjaGVkdWxlZCA9IHRydWU7CisKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSgpIG11dGFibGUgeworICAgICAgICAgICAg
cHJvdGVjdGVkVGhpcy0+ZGVsZXRlTWFya2VkTm9kZXMoKTsKKyAgICAgICAgfSk7CisgICAgfQor
fQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmRlbGV0ZU1hcmtlZE5vZGVzKCkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgLy8gUHJvdGVjdCB0aGlzIG9iamVjdCBmcm9t
IGJlaW5nIGRlbGV0ZWQgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIG11dGV4IGxvY2tlZCBieSBBdXRv
TG9ja2VyLgorICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOworICAgIHsK
KyAgICAgICAgQXV0b0xvY2tlciBsb2NrZXIoKnRoaXMpOworCisgICAgICAgIHdoaWxlIChtX25v
ZGVzVG9EZWxldGUuc2l6ZSgpKSB7CisgICAgICAgICAgICBBdWRpb05vZGUqIG5vZGUgPSBtX25v
ZGVzVG9EZWxldGUudGFrZUxhc3QoKTsKKworICAgICAgICAgICAgLy8gQmVmb3JlIGRlbGV0aW5n
IHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9kZUlucHV0cyBmcm9tIG1fZGlydHlTdW1t
aW5nSnVuY3Rpb25zLgorICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZJbnB1dHMgPSBub2Rl
LT5udW1iZXJPZklucHV0cygpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG51bWJlck9mSW5wdXRzOyArK2kpCisgICAgICAgICAgICAgICAgbV9kaXJ0eVN1bW1pbmdKdW5j
dGlvbnMucmVtb3ZlKG5vZGUtPmlucHV0KGkpKTsKKworICAgICAgICAgICAgLy8gQmVmb3JlIGRl
bGV0aW5nIHRoZSBub2RlLCBjbGVhciBvdXQgYW55IEF1ZGlvTm9kZU91dHB1dHMgZnJvbSBtX2Rp
cnR5QXVkaW9Ob2RlT3V0cHV0cy4KKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mT3V0cHV0
cyA9IG5vZGUtPm51bWJlck9mT3V0cHV0cygpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bWJlck9mT3V0cHV0czsgKytpKQorICAgICAgICAgICAgICAgIG1fZGlydHlB
dWRpb05vZGVPdXRwdXRzLnJlbW92ZShub2RlLT5vdXRwdXQoaSkpOworCisgICAgICAgICAgICAv
LyBGaW5hbGx5LCBkZWxldGUgaXQuCisgICAgICAgICAgICBkZWxldGUgbm9kZTsKKyAgICAgICAg
fQorICAgICAgICBtX2lzRGVsZXRpb25TY2hlZHVsZWQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3Zv
aWQgQmFzZUF1ZGlvQ29udGV4dDo6bWFya1N1bW1pbmdKdW5jdGlvbkRpcnR5KEF1ZGlvU3VtbWlu
Z0p1bmN0aW9uKiBzdW1taW5nSnVuY3Rpb24pCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigp
KTsgICAgCisgICAgbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMuYWRkKHN1bW1pbmdKdW5jdGlvbik7
Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6cmVtb3ZlTWFya2VkU3VtbWluZ0p1bmN0aW9u
KEF1ZGlvU3VtbWluZ0p1bmN0aW9uKiBzdW1taW5nSnVuY3Rpb24pCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBBdXRvTG9ja2VyIGxvY2tlcigqdGhpcyk7CisgICAgbV9kaXJ0
eVN1bW1pbmdKdW5jdGlvbnMucmVtb3ZlKHN1bW1pbmdKdW5jdGlvbik7Cit9CisKK0V2ZW50VGFy
Z2V0SW50ZXJmYWNlIEJhc2VBdWRpb0NvbnRleHQ6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gQmFzZUF1ZGlvQ29udGV4dEV2ZW50VGFyZ2V0SW50ZXJmYWNlVHlw
ZTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjptYXJrQXVkaW9Ob2RlT3V0cHV0RGlydHko
QXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsK
KyAgICBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5hZGQob3V0cHV0KTsKK30KKwordm9pZCBCYXNl
QXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpCit7CisgICAg
QVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCisKKyAgICBmb3IgKGF1dG8mIGp1bmN0aW9uIDog
bV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMpCisgICAgICAgIGp1bmN0aW9uLT51cGRhdGVSZW5kZXJp
bmdTdGF0ZSgpOworCisgICAgbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMuY2xlYXIoKTsKK30KKwor
dm9pZCBCYXNlQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMoKQorewor
ICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7ICAgIAorCisgICAgZm9yIChhdXRvJiBvdXRwdXQg
OiBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cykKKyAgICAgICAgb3V0cHV0LT51cGRhdGVSZW5kZXJp
bmdTdGF0ZSgpOworCisgICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuY2xlYXIoKTsKK30KKwor
dm9pZCBCYXNlQXVkaW9Db250ZXh0OjphZGRBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmIG5v
ZGUpCit7CisgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsKKworICAgIGlmIChtX2F1dG9tYXRp
Y1B1bGxOb2Rlcy5hZGQoJm5vZGUpLmlzTmV3RW50cnkpCisgICAgICAgIG1fYXV0b21hdGljUHVs
bE5vZGVzTmVlZFVwZGF0aW5nID0gdHJ1ZTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0Ojpy
ZW1vdmVBdXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUKGlz
R3JhcGhPd25lcigpKTsKKworICAgIGlmIChtX2F1dG9tYXRpY1B1bGxOb2Rlcy5yZW1vdmUoJm5v
ZGUpKQorICAgICAgICBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyA9IHRydWU7Cit9
CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6dXBkYXRlQXV0b21hdGljUHVsbE5vZGVzKCkKK3sK
KyAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOworCisgICAgaWYgKG1fYXV0b21hdGljUHVsbE5v
ZGVzTmVlZFVwZGF0aW5nKSB7CisgICAgICAgIC8vIENvcHkgZnJvbSBtX2F1dG9tYXRpY1B1bGxO
b2RlcyB0byBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy4KKyAgICAgICAgbV9yZW5kZXJp
bmdBdXRvbWF0aWNQdWxsTm9kZXMucmVzaXplKG1fYXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7
CisKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGZvciAoYXV0byYgb3V0cHV0IDog
bV9hdXRvbWF0aWNQdWxsTm9kZXMpCisgICAgICAgICAgICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1
bGxOb2Rlc1tpKytdID0gb3V0cHV0OworCisgICAgICAgIG1fYXV0b21hdGljUHVsbE5vZGVzTmVl
ZFVwZGF0aW5nID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnBy
b2Nlc3NBdXRvbWF0aWNQdWxsTm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAgICBB
U1NFUlQoaXNBdWRpb1RocmVhZCgpKTsKKworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fcmVuZGVy
aW5nQXV0b21hdGljUHVsbE5vZGVzKQorICAgICAgICBub2RlLT5wcm9jZXNzSWZOZWNlc3Nhcnko
ZnJhbWVzVG9Qcm9jZXNzKTsKK30KKworU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogQXVkaW9Db250
ZXh0QmFzZTo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFj
dGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworfQorCit2b2lkIEJhc2VB
dWRpb0NvbnRleHQ6Om5vZGVXaWxsQmVnaW5QbGF5YmFjaygpCit7CisgICAgLy8gQ2FsbGVkIGJ5
IHNjaGVkdWxlZCBBdWRpb05vZGVzIHdoZW4gY2xpZW50cyBzY2hlZHVsZSB0aGVpciBzdGFydCB0
aW1lcy4KKyAgICAvLyBQcmlvciB0byB0aGUgaW50cm9kdWN0aW9uIG9mIHN1c3BlbmQoKSwgcmVz
dW1lKCksIGFuZCBzdG9wKCksIHN0YXJ0aW5nCisgICAgLy8gYSBzY2hlZHVsZWQgQXVkaW9Ob2Rl
IHdvdWxkIHJlbW92ZSB0aGUgdXNlci1nZXN0dXJlIHJlc3RyaWN0aW9uLCBpZiBwcmVzZW50LAor
ICAgIC8vIGFuZCB3b3VsZCB0aHVzIHVubXV0ZSB0aGUgY29udGV4dC4gTm93IHRoYXQgQXVkaW9D
b250ZXh0IHN0YXlzIGluIHRoZQorICAgIC8vICJzdXNwZW5kZWQiIHN0YXRlIGlmIGEgdXNlci1n
ZXN0dXJlIHJlc3RyaWN0aW9uIGlzIHByZXNlbnQsIHN0YXJ0aW5nIGEKKyAgICAvLyBzY2hlZHVs
ZSBBdWRpb05vZGUgc2hvdWxkIHNldCB0aGUgc3RhdGUgdG8gInJ1bm5pbmciLCBidXQgb25seSBp
ZiB0aGUKKyAgICAvLyB1c2VyLWdlc3R1cmUgcmVzdHJpY3Rpb24gaXMgc2V0LgorICAgIGlmICh1
c2VyR2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFydCgpKQorICAgICAgICBzdGFydFJlbmRlcmlu
ZygpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGREb2N1bWVudEFsbG93V2ViQXVkaW9Ub0F1dG9Q
bGF5KGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBpZiAoZG9jdW1lbnQucHJvY2Vz
c2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSB8fCBkb2N1bWVudC5pc0NhcHR1cmluZygpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZG9jdW1lbnQucXVpcmtzKCkuc2hvdWxkQXV0
b3BsYXlXZWJBdWRpb0ZvckFyYml0cmFyeVVzZXJHZXN0dXJlKCkgJiYgZG9jdW1lbnQudG9wRG9j
dW1lbnQoKS5oYXNIYWRVc2VySW50ZXJhY3Rpb24oKTsKK30KKworYm9vbCBCYXNlQXVkaW9Db250
ZXh0Ojp3aWxsQmVnaW5QbGF5YmFjaygpCit7CisgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5k
b2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICh1c2VyR2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7CisgICAgICAgIGlm
ICghc2hvdWxkRG9jdW1lbnRBbGxvd1dlYkF1ZGlvVG9BdXRvUGxheSgqZG9jdW1lbnQpKSB7Cisg
ICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJyZXR1cm5pbmcgZmFsc2UsIG5v
dCBwcm9jZXNzaW5nIHVzZXIgZ2VzdHVyZSBvciBjYXB0dXJpbmciKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9u
KEJhc2VBdWRpb0NvbnRleHQ6OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmlj
dGlvbik7CisgICAgfQorCisgICAgaWYgKHBhZ2VDb25zZW50UmVxdWlyZWRGb3JBdWRpb1N0YXJ0
KCkpIHsKKyAgICAgICAgYXV0byogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CisgICAgICAgIGlm
IChwYWdlICYmICFwYWdlLT5jYW5TdGFydE1lZGlhKCkpIHsKKyAgICAgICAgICAgIGRvY3VtZW50
LT5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOworICAgICAgICAgICAgQUxXQVlTX0xP
RyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5nIGZhbHNlLCBwYWdlIGRvZXNuJ3QgYWxsb3cgbWVk
aWEgdG8gc3RhcnQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKEJhc2VBdWRpb0NvbnRleHQ6OlJlcXVpcmVQ
YWdlQ29uc2VudEZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbik7CisgICAgfQorICAgIAorICAgIGF1
dG8gd2lsbEJlZ2luID0gbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCk7
CisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5nICIsIHdpbGxCZWdpbik7
CisgICAgCisgICAgcmV0dXJuIHdpbGxCZWdpbjsKK30KKworYm9vbCBCYXNlQXVkaW9Db250ZXh0
Ojp3aWxsUGF1c2VQbGF5YmFjaygpCit7CisgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1
bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGlmICh1c2VyR2VzdHVyZVJlcXVpcmVkRm9yQXVkaW9TdGFydCgpKSB7CisgICAgICAgIGlmICgh
ZG9jdW1lbnQtPnByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oQmFzZUF1ZGlv
Q29udGV4dDo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9TdGFydFJlc3RyaWN0aW9uKTsKKyAg
ICB9CisKKyAgICBpZiAocGFnZUNvbnNlbnRSZXF1aXJlZEZvckF1ZGlvU3RhcnQoKSkgeworICAg
ICAgICBhdXRvKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgJiYg
IXBhZ2UtPmNhblN0YXJ0TWVkaWEoKSkgeworICAgICAgICAgICAgZG9jdW1lbnQtPmFkZE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCYXNlQXVkaW9Db250ZXh0
OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0YXJ0UmVzdHJpY3Rpb24pOworICAgIH0KKyAg
ICAKKyAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxQYXVzZVBsYXliYWNrKCk7
Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6c3RhcnRSZW5kZXJpbmcoKQoreworICAgIEFM
V0FZU19MT0coTE9HSURFTlRJRklFUik7CisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkIHx8ICF3
aWxsQmVnaW5QbGF5YmFjaygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYWtlUGVuZGluZ0Fj
dGl2aXR5KCk7CisKKyAgICBkZXN0aW5hdGlvbigpLT5zdGFydFJlbmRlcmluZygpOworICAgIHNl
dFN0YXRlKFN0YXRlOjpSdW5uaW5nKTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjptZWRp
YUNhblN0YXJ0KERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGRvY3Vt
ZW50LCAmZG9jdW1lbnQgPT0gdGhpcy0+ZG9jdW1lbnQoKSk7CisgICAgcmVtb3ZlQmVoYXZpb3JS
ZXN0cmljdGlvbihCYXNlQXVkaW9Db250ZXh0OjpSZXF1aXJlUGFnZUNvbnNlbnRGb3JBdWRpb1N0
YXJ0UmVzdHJpY3Rpb24pOworICAgIG1heVJlc3VtZVBsYXliYWNrKHRydWUpOworfQorCitNZWRp
YVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgQmFzZUF1ZGlvQ29udGV4dDo6bWVkaWFTdGF0ZSgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX2lzU3RvcFNjaGVkdWxlZCAmJiBtX2Rlc3RpbmF0aW9uTm9k
ZSAmJiBtX2Rlc3RpbmF0aW9uTm9kZS0+aXNQbGF5aW5nQXVkaW8oKSkKKyAgICAgICAgcmV0dXJu
IE1lZGlhUHJvZHVjZXI6OklzUGxheWluZ0F1ZGlvOworCisgICAgcmV0dXJuIE1lZGlhUHJvZHVj
ZXI6OklzTm90UGxheWluZzsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjpwYWdlTXV0ZWRT
dGF0ZURpZENoYW5nZSgpCit7CisgICAgaWYgKG1fZGVzdGluYXRpb25Ob2RlICYmIGRvY3VtZW50
KCkgJiYgZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+c2V0
TXV0ZWQoZG9jdW1lbnQoKS0+cGFnZSgpLT5pc0F1ZGlvTXV0ZWQoKSk7Cit9CisKK3ZvaWQgQmFz
ZUF1ZGlvQ29udGV4dDo6aXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKQoreworICAgIC8vIE1ha2Ug
c3VyZSB0byBjYWxsIERvY3VtZW50Ojp1cGRhdGVJc1BsYXlpbmdNZWRpYSgpIG9uIHRoZSBtYWlu
IHRocmVhZCwgc2luY2UKKyAgICAvLyB3ZSBjb3VsZCBiZSBvbiB0aGUgYXVkaW8gSS9PIHRocmVh
ZCBoZXJlIGFuZCB0aGUgY2FsbCBpbnRvIFdlYkNvcmUgY291bGQgYmxvY2suCisgICAgY2FsbE9u
TWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSB7CisgICAgICAgIGlm
IChwcm90ZWN0ZWRUaGlzLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+
ZG9jdW1lbnQoKS0+dXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKKyAgICB9KTsKK30KKwordm9pZCBC
YXNlQXVkaW9Db250ZXh0OjpmaW5pc2hlZFJlbmRlcmluZyhib29sIGRpZFJlbmRlcmluZykKK3sK
KyAgICBBU1NFUlQoaXNPZmZsaW5lQ29udGV4dCgpKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGlmICghaXNNYWluVGhyZWFkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGF1
dG8gY2xlYXJQZW5kaW5nQWN0aXZpdHlJZkV4aXRFYXJseSA9IFdURjo6bWFrZVNjb3BlRXhpdChb
dGhpc10geworICAgICAgICBjbGVhclBlbmRpbmdBY3Rpdml0eSgpOworICAgIH0pOworCisKKyAg
ICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOworCisgICAgaWYgKCFkaWRSZW5kZXJpbmcpCisg
ICAgICAgIHJldHVybjsKKworICAgIEF1ZGlvQnVmZmVyKiByZW5kZXJlZEJ1ZmZlciA9IG1fcmVu
ZGVyVGFyZ2V0LmdldCgpOworICAgIHNldFN0YXRlKFN0YXRlOjpDbG9zZWQpOworCisgICAgQVNT
RVJUKHJlbmRlcmVkQnVmZmVyKTsKKyAgICBpZiAoIXJlbmRlcmVkQnVmZmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBBdm9pZCBmaXJpbmcgdGhlIGV2ZW50IGlmIHRoZSBkb2N1bWVudCBo
YXMgYWxyZWFkeSBnb25lIGF3YXkuCisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjbGVhclBlbmRpbmdBY3Rpdml0eUlmRXhpdEVhcmx5LnJlbGVhc2Uo
KTsKKyAgICBtX2V2ZW50UXVldWUtPmVucXVldWVFdmVudChPZmZsaW5lQXVkaW9Db21wbGV0aW9u
RXZlbnQ6OmNyZWF0ZShyZW5kZXJlZEJ1ZmZlcikpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRl
eHQ6OmRpc3BhdGNoRXZlbnQoRXZlbnQmIGV2ZW50KQoreworICAgIEV2ZW50VGFyZ2V0OjpkaXNw
YXRjaEV2ZW50KGV2ZW50KTsKKyAgICBpZiAoZXZlbnQuZXZlbnRJbnRlcmZhY2UoKSA9PSBPZmZs
aW5lQXVkaW9Db21wbGV0aW9uRXZlbnRJbnRlcmZhY2VUeXBlKQorICAgICAgICBjbGVhclBlbmRp
bmdBY3Rpdml0eSgpOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OmluY3JlbWVudEFjdGl2
ZVNvdXJjZUNvdW50KCkKK3sKKyAgICArK21fYWN0aXZlU291cmNlQ291bnQ7Cit9CisKK3ZvaWQg
QmFzZUF1ZGlvQ29udGV4dDo6ZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKQoreworICAgIC0t
bV9hY3RpdmVTb3VyY2VDb3VudDsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjpzdXNwZW5k
UmVuZGVyaW5nKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCit7CisgICAgaWYg
KGlzT2ZmbGluZUNvbnRleHQoKSB8fCBtX2lzU3RvcFNjaGVkdWxlZCkgeworICAgICAgICBwcm9t
aXNlLnJlamVjdChJbnZhbGlkU3RhdGVFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAobV9zdGF0ZSA9PSBTdGF0ZTo6U3VzcGVuZGVkKSB7CisgICAgICAgIHByb21pc2Uu
cmVzb2x2ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1fc3RhdGUgPT0g
U3RhdGU6OkNsb3NlZCB8fCBtX3N0YXRlID09IFN0YXRlOjpJbnRlcnJ1cHRlZCB8fCAhbV9kZXN0
aW5hdGlvbk5vZGUpIHsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGFkZFJlYWN0aW9uKFN0YXRlOjpTdXNwZW5kZWQsIFdURk1vdmUocHJv
bWlzZSkpOworCisgICAgaWYgKCF3aWxsUGF1c2VQbGF5YmFjaygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBsYXp5SW5pdGlhbGl6ZSgpOworCisgICAgbV9kZXN0aW5hdGlvbk5vZGUtPnN1c3Bl
bmQoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKV0geworICAgICAgICBzZXRT
dGF0ZShTdGF0ZTo6U3VzcGVuZGVkKTsKKyAgICB9KTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250
ZXh0OjpyZXN1bWVSZW5kZXJpbmcoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkK
K3sKKyAgICBpZiAoaXNPZmZsaW5lQ29udGV4dCgpIHx8IG1faXNTdG9wU2NoZWR1bGVkKSB7Cisg
ICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChtX3N0YXRlID09IFN0YXRlOjpSdW5uaW5nKSB7CisgICAgICAg
IHByb21pc2UucmVzb2x2ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKG1f
c3RhdGUgPT0gU3RhdGU6OkNsb3NlZCB8fCAhbV9kZXN0aW5hdGlvbk5vZGUpIHsKKyAgICAgICAg
cHJvbWlzZS5yZWplY3QoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFkZFJlYWN0
aW9uKFN0YXRlOjpSdW5uaW5nLCBXVEZNb3ZlKHByb21pc2UpKTsKKworICAgIGlmICghd2lsbEJl
Z2luUGxheWJhY2soKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbGF6eUluaXRpYWxpemUoKTsK
KworICAgIG1fZGVzdGluYXRpb25Ob2RlLT5yZXN1bWUoW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKV0geworICAgICAgICBzZXRTdGF0ZShTdGF0ZTo6UnVubmluZyk7CisgICAg
fSk7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6c3VzcGVuZFBsYXliYWNrKCkKK3sKKyAg
ICBpZiAoIW1fZGVzdGluYXRpb25Ob2RlIHx8IG1fc3RhdGUgPT0gU3RhdGU6OkNsb3NlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fc3RhdGUgPT0gU3RhdGU6OlN1c3BlbmRlZCkgewor
ICAgICAgICBpZiAobV9tZWRpYVNlc3Npb24tPnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Np
b246OkludGVycnVwdGVkKQorICAgICAgICAgICAgc2V0U3RhdGUoU3RhdGU6OkludGVycnVwdGVk
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGxhenlJbml0aWFsaXplKCk7CisKKyAg
ICBtX2Rlc3RpbmF0aW9uTm9kZS0+c3VzcGVuZChbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpXSB7CisgICAgICAgIGJvb2wgaW50ZXJydXB0ZWQgPSBtX21lZGlhU2Vzc2lvbi0+
c3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQ7CisgICAgICAgIHNl
dFN0YXRlKGludGVycnVwdGVkID8gU3RhdGU6OkludGVycnVwdGVkIDogU3RhdGU6OlN1c3BlbmRl
ZCk7CisgICAgfSk7Cit9CisKK3ZvaWQgQmFzZUF1ZGlvQ29udGV4dDo6bWF5UmVzdW1lUGxheWJh
Y2soYm9vbCBzaG91bGRSZXN1bWUpCit7CisgICAgaWYgKCFtX2Rlc3RpbmF0aW9uTm9kZSB8fCBt
X3N0YXRlID09IFN0YXRlOjpDbG9zZWQgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6UnVubmluZykKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzaG91bGRSZXN1bWUpIHsKKyAgICAgICAgc2V0U3Rh
dGUoU3RhdGU6OlN1c3BlbmRlZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IXdpbGxCZWdpblBsYXliYWNrKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGxhenlJbml0aWFs
aXplKCk7CisKKyAgICBtX2Rlc3RpbmF0aW9uTm9kZS0+cmVzdW1lKFt0aGlzLCBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyldIHsKKyAgICAgICAgc2V0U3RhdGUoU3RhdGU6OlJ1bm5pbmcp
OworICAgIH0pOworfQorCit2b2lkIEJhc2VBdWRpb0NvbnRleHQ6OnBvc3RUYXNrKFdURjo6RnVu
Y3Rpb248dm9pZCgpPiYmIHRhc2spCit7CisgICAgaWYgKG1faXNTdG9wU2NoZWR1bGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKFdU
Rk1vdmUodGFzaykpOworfQorCitjb25zdCBTZWN1cml0eU9yaWdpbiogQmFzZUF1ZGlvQ29udGV4
dDo6b3JpZ2luKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
ID8gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpIDogbnVsbHB0cjsK
K30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjphZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291
cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7
CisgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgbV9zY3JpcHRFeGVj
dXRpb25Db250ZXh0LT5hZGRDb25zb2xlTWVzc2FnZShzb3VyY2UsIGxldmVsLCBtZXNzYWdlKTsK
K30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjpjbGVhclBlbmRpbmdBY3Rpdml0eSgpCit7Cisg
ICAgaWYgKCFtX3BlbmRpbmdBY3Rpdml0eSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fcGVuZGlu
Z0FjdGl2aXR5ID0gbnVsbHB0cjsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgc3BlY2lmaWMg
ZGVyZWYoKSBhbmQgcmVmKCkgY2FsbCBpbiBtYWtlUGVuZGluZ0FjdGl2aXR5KCkuCisgICAgZGVy
ZWYoKTsKK30KKwordm9pZCBCYXNlQXVkaW9Db250ZXh0OjptYWtlUGVuZGluZ0FjdGl2aXR5KCkK
K3sKKyAgICBpZiAobV9wZW5kaW5nQWN0aXZpdHkpCisgICAgICAgIHJldHVybjsKKyAgICBtX3Bl
bmRpbmdBY3Rpdml0eSA9IEFjdGl2ZURPTU9iamVjdDo6bWFrZVBlbmRpbmdBY3Rpdml0eSgqdGhp
cyk7CisgICAgcmVmKCk7Cit9CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK1dURkxvZ0No
YW5uZWwmIEJhc2VBdWRpb0NvbnRleHQ6OmxvZ0NoYW5uZWwoKSBjb25zdAoreworICAgIHJldHVy
biBMb2dNZWRpYTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9CYXNlQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGQ0NzUyM2Y5MDhiMzhjZWQx
ODg2MzMzOThiNjVhNTFmNTU5MTFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9CYXNlQXVkaW9Db250ZXh0LmgKQEAgLTAsMCArMSw1MTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0Lmgi
CisjaW5jbHVkZSAiQXN5bmNBdWRpb0RlY29kZXIuaCIKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgor
I2luY2x1ZGUgIkF1ZGlvQ29udGV4dFN0YXRlLmgiCisjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlv
bk5vZGUuaCIKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIk1lZGlhQ2FuU3Rh
cnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIk1lZGlhUHJvZHVjZXIuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybU1lZGlhU2Vzc2lvbi5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIK
KyNpbmNsdWRlICJWaXNpYmlsaXR5Q2hhbmdlQ2xpZW50LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQ29uc29sZVR5cGVzLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvRmxvYXQzMkFy
cmF5Lmg+CisjaW5jbHVkZSA8YXRvbWljPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL0xvZ2dlckhlbHBlci5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVW5pcXVlUmVm
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJp
bmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQW5hbHlzZXJOb2RlOwor
Y2xhc3MgQXVkaW9CdWZmZXI7CitjbGFzcyBBdWRpb0J1ZmZlckNhbGxiYWNrOworY2xhc3MgQXVk
aW9CdWZmZXJTb3VyY2VOb2RlOworY2xhc3MgQXVkaW9MaXN0ZW5lcjsKK2NsYXNzIEF1ZGlvU3Vt
bWluZ0p1bmN0aW9uOworY2xhc3MgQmlxdWFkRmlsdGVyTm9kZTsKK2NsYXNzIENoYW5uZWxNZXJn
ZXJOb2RlOworY2xhc3MgQ2hhbm5lbFNwbGl0dGVyTm9kZTsKK2NsYXNzIENvbnZvbHZlck5vZGU7
CitjbGFzcyBEZWxheU5vZGU7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIER5bmFtaWNzQ29tcHJl
c3Nvck5vZGU7CitjbGFzcyBHYWluTm9kZTsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CitjbGFz
cyBNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU7CitjbGFzcyBNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGU7CitjbGFzcyBNZWRpYVN0cmVhbTsKK2NsYXNzIE1lZGlhU3RyZWFtQXVkaW9EZXN0
aW5hdGlvbk5vZGU7CitjbGFzcyBNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZTsKK2NsYXNzIE9z
Y2lsbGF0b3JOb2RlOworY2xhc3MgUGFubmVyTm9kZTsKK2NsYXNzIFBlcmlvZGljV2F2ZTsKK2Ns
YXNzIFNjcmlwdFByb2Nlc3Nvck5vZGU7CitjbGFzcyBTZWN1cml0eU9yaWdpbjsKK2NsYXNzIFdh
dmVTaGFwZXJOb2RlOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBJRExUeXBlPiBjbGFzcyBET01Qcm9t
aXNlRGVmZXJyZWQ7CisKKy8vIEZJWE1FOiBXZSBuZWVkIHRvIHJlbmFtZSB0aGlzIG5vdyB0aGF0
IHRoZXJlIGlzIGFsc28gQmFzZUF1ZGlvQ29udGV4dC4KK2NsYXNzIEF1ZGlvQ29udGV4dEJhc2UK
KyAgICA6IHB1YmxpYyBBY3RpdmVET01PYmplY3QKKyAgICAsIHB1YmxpYyBUaHJlYWRTYWZlUmVm
Q291bnRlZDxBdWRpb0NvbnRleHRCYXNlPgorICAgICwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElu
bGluZURhdGEKKyAgICAsIHB1YmxpYyBNZWRpYUNhblN0YXJ0TGlzdGVuZXIKKyAgICAsIHB1Ymxp
YyBNZWRpYVByb2R1Y2VyCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwdWJsaWMg
TG9nZ2VySGVscGVyCisjZW5kaWYKK3sKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEF1ZGlv
Q29udGV4dEJhc2UpOworcHVibGljOgorICAgIHZpcnR1YWwgfkF1ZGlvQ29udGV4dEJhc2UoKSA9
IGRlZmF1bHQ7CisKKyAgICAvLyBSZWNvbmNpbGUgcmVmL2RlcmVmIHdoaWNoIGFyZSBkZWZpbmVk
IGJvdGggaW4gVGhyZWFkU2FmZVJlZkNvdW50ZWQgYW5kIEV2ZW50VGFyZ2V0LgorICAgIHVzaW5n
IFRocmVhZFNhZmVSZWZDb3VudGVkOjpyZWY7CisgICAgdXNpbmcgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ6OmRlcmVmOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaXNJbml0aWFsaXplZCgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgc2l6ZV90
IGN1cnJlbnRTYW1wbGVGcmFtZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHNhbXBs
ZVJhdGUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgY3VycmVudFRpbWUoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzR3JhcGhPd25lcigpIGNvbnN0ID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCBzZXRBdWRpb1RocmVhZChUaHJlYWQmKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzQXVkaW9UaHJlYWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzQXVkaW9U
aHJlYWRGaW5pc2hlZCgpID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBpc1BsYXlpbmdBdWRpb0Rp
ZENoYW5nZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbm9kZVdpbGxCZWdpblBsYXliYWNrKCkg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHBvc3RUYXNrKFdURjo6RnVuY3Rpb248dm9pZCgpPiYm
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzU3RvcHBlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIGNvbnN0IFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4oKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VMZXZlbCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbWFya0ZvckRlbGV0
aW9uKEF1ZGlvTm9kZSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlTWFya2VkTm9kZXMo
KSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUHJlUmVuZGVyVGFza3MoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGhhbmRsZVBvc3RSZW5kZXJUYXNrcygpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgcHJvY2Vzc0F1dG9tYXRpY1B1bGxOb2RlcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGFkZERlZmVycmVkRmluaXNoRGVyZWYoQXVkaW9Ob2RlKikg
PSAwOworCisgICAgdmlydHVhbCB2b2lkIHJlbW92ZU1hcmtlZFN1bW1pbmdKdW5jdGlvbihBdWRp
b1N1bW1pbmdKdW5jdGlvbiopID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbWFya1N1bW1pbmdKdW5j
dGlvbkRpcnR5KEF1ZGlvU3VtbWluZ0p1bmN0aW9uKikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBt
YXJrQXVkaW9Ob2RlT3V0cHV0RGlydHkoQXVkaW9Ob2RlT3V0cHV0KikgPSAwOworCisgICAgZW51
bSBCZWhhdmlvclJlc3RyaWN0aW9uRmxhZ3MgeworICAgICAgICBOb1Jlc3RyaWN0aW9ucyA9IDAs
CisgICAgICAgIFJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbiA9IDEg
PDwgMCwKKyAgICAgICAgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9u
ID0gMSA8PCAxLAorICAgIH07CisgICAgdHlwZWRlZiB1bnNpZ25lZCBCZWhhdmlvclJlc3RyaWN0
aW9uczsKKyAgICB2aXJ0dWFsIEJlaGF2aW9yUmVzdHJpY3Rpb25zIGJlaGF2aW9yUmVzdHJpY3Rp
b25zKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhZGRCZWhhdmlvclJlc3RyaWN0aW9u
KEJlaGF2aW9yUmVzdHJpY3Rpb25zKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZUJlaGF2
aW9yUmVzdHJpY3Rpb24oQmVoYXZpb3JSZXN0cmljdGlvbnMpID0gMDsKKworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIHZpcnR1YWwgY29uc3Qgdm9pZCogbmV4dEF1ZGlvTm9kZUxvZ0lk
ZW50aWZpZXIoKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCB2b2lkKiBuZXh0QXVkaW9QYXJhbWV0
ZXJMb2dJZGVudGlmaWVyKCkgPSAwOworI2VuZGlmCisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQXV0
b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVB
dXRvbWF0aWNQdWxsTm9kZShBdWRpb05vZGUmKSA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05vZGUqKSA9IDA7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZmluaXNoZWRSZW5kZXJpbmcoYm9vbCBkaWRSZW5kZXJpbmcpID0gMDsKKworICAgIHZp
cnR1YWwgdm9pZCBpbmNyZW1lbnRDb25uZWN0aW9uQ291bnQoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGluY3JlbWVudEFjdGl2ZVNvdXJjZUNvdW50KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
ZWNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBpc09m
ZmxpbmVDb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0Jhc2VBdWRpb0Nv
bnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzV2ViS2l0QXVkaW9Db250ZXh0
KCkgY29uc3QgPSAwOworCisgICAgLy8gbXVzdFJlbGVhc2VMb2NrIGlzIHNldCB0byB0cnVlIGlm
IHdlIGFjcXVpcmVkIHRoZSBsb2NrIGluIHRoaXMgbWV0aG9kIGNhbGwgYW5kIGNhbGxlciBtdXN0
IHVubG9jaygpLCBmYWxzZSBpZiBpdCB3YXMgcHJldmlvdXNseSBhY3F1aXJlZC4KKyAgICB2aXJ0
dWFsIHZvaWQgbG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spID0gMDsKKyAgICB2aXJ0dWFsIGJv
b2wgdHJ5TG9jayhib29sJiBtdXN0UmVsZWFzZUxvY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5sb2NrKCkgPSAwOworCisgICAgY2xhc3MgQXV0b0xvY2tlciB7CisgICAgcHVibGljOgorICAg
ICAgICBleHBsaWNpdCBBdXRvTG9ja2VyKEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQpCisgICAg
ICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBtX2Nv
bnRleHQubG9jayhtX211c3RSZWxlYXNlTG9jayk7CisgICAgICAgIH0KKworICAgICAgICB+QXV0
b0xvY2tlcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX211c3RSZWxlYXNlTG9jaykK
KyAgICAgICAgICAgICAgICBtX2NvbnRleHQudW5sb2NrKCk7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIEF1ZGlvQ29udGV4dEJhc2UmIG1fY29udGV4dDsKKyAgICAgICAgYm9v
bCBtX211c3RSZWxlYXNlTG9jazsKKyAgICB9OworCisgICAgLy8gRXZlbnRUYXJnZXQKKyAgICBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3QgZmlu
YWw7CisgICAgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIHsgcmVmKCk7IH0KKyAgICB2
b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7IGRlcmVmKCk7IH0KKworcHJvdGVjdGVk
OgorICAgIGV4cGxpY2l0IEF1ZGlvQ29udGV4dEJhc2UoRG9jdW1lbnQmKTsKK307CisKKy8vIEF1
ZGlvQ29udGV4dCBpcyB0aGUgY29ybmVyc3RvbmUgb2YgdGhlIHdlYiBhdWRpbyBBUEkgYW5kIGFs
bCBBdWRpb05vZGVzIGFyZSBjcmVhdGVkIGZyb20gaXQuCisvLyBGb3IgdGhyZWFkIHNhZmV0eSBi
ZXR3ZWVuIHRoZSBhdWRpbyB0aHJlYWQgYW5kIHRoZSBtYWluIHRocmVhZCwgaXQgaGFzIGEgcmVu
ZGVyaW5nIGdyYXBoIGxvY2tpbmcgbWVjaGFuaXNtLiAKKworY2xhc3MgQmFzZUF1ZGlvQ29udGV4
dAorICAgIDogcHVibGljIEF1ZGlvQ29udGV4dEJhc2UKKyAgICAsIHByaXZhdGUgUGxhdGZvcm1N
ZWRpYVNlc3Npb25DbGllbnQKKyAgICAsIHByaXZhdGUgVmlzaWJpbGl0eUNoYW5nZUNsaWVudAor
eworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoQmFzZUF1ZGlvQ29udGV4dCk7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+QmFzZUF1ZGlvQ29udGV4dCgpOworCisgICAgYm9vbCBpc0luaXRpYWxp
emVkKCkgY29uc3QgZmluYWw7CisgICAgCisgICAgYm9vbCBpc09mZmxpbmVDb250ZXh0KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9pc09mZmxpbmVDb250ZXh0OyB9CisKKyAgICBEb2N1bWVudElk
ZW50aWZpZXIgaG9zdGluZ0RvY3VtZW50SWRlbnRpZmllcigpIGNvbnN0IGZpbmFsOworCisgICAg
QXVkaW9EZXN0aW5hdGlvbk5vZGUqIGRlc3RpbmF0aW9uKCkgeyByZXR1cm4gbV9kZXN0aW5hdGlv
bk5vZGUuZ2V0KCk7IH0KKyAgICBzaXplX3QgY3VycmVudFNhbXBsZUZyYW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVu
dFNhbXBsZUZyYW1lKCkgOiAwOyB9CisgICAgZG91YmxlIGN1cnJlbnRUaW1lKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9kZXN0aW5hdGlvbk5vZGUgPyBtX2Rlc3RpbmF0aW9uTm9kZS0+Y3VycmVu
dFRpbWUoKSA6IDAuOyB9CisgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fZGVzdGluYXRpb25Ob2RlID8gbV9kZXN0aW5hdGlvbk5vZGUtPnNhbXBsZVJhdGUoKSA6
IDAuZjsgfQorICAgIHVuc2lnbmVkIGxvbmcgYWN0aXZlU291cmNlQ291bnQoKSBjb25zdCB7IHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX2FjdGl2ZVNvdXJjZUNvdW50KTsgfQor
CisgICAgdm9pZCBpbmNyZW1lbnRBY3RpdmVTb3VyY2VDb3VudCgpIGZpbmFsOworICAgIHZvaWQg
ZGVjcmVtZW50QWN0aXZlU291cmNlQ291bnQoKSBmaW5hbDsKKyAgICAKKyAgICBFeGNlcHRpb25P
cjxSZWY8QXVkaW9CdWZmZXI+PiBjcmVhdGVCdWZmZXIodW5zaWduZWQgbnVtYmVyT2ZDaGFubmVs
cywgc2l6ZV90IG51bWJlck9mRnJhbWVzLCBmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICBFeGNlcHRp
b25PcjxSZWY8QXVkaW9CdWZmZXI+PiBjcmVhdGVCdWZmZXIoQXJyYXlCdWZmZXImLCBib29sIG1p
eFRvTW9ubyk7CisKKyAgICAvLyBBc3luY2hyb25vdXMgYXVkaW8gZmlsZSBkYXRhIGRlY29kaW5n
LgorICAgIHZvaWQgZGVjb2RlQXVkaW9EYXRhKFJlZjxBcnJheUJ1ZmZlcj4mJiwgUmVmUHRyPEF1
ZGlvQnVmZmVyQ2FsbGJhY2s+JiYsIFJlZlB0cjxBdWRpb0J1ZmZlckNhbGxiYWNrPiYmKTsKKwor
ICAgIEF1ZGlvTGlzdGVuZXIqIGxpc3RlbmVyKCkgeyByZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsg
fQorCisgICAgdm9pZCBzdXNwZW5kUmVuZGVyaW5nKERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYm
KTsKKyAgICB2b2lkIHJlc3VtZVJlbmRlcmluZyhET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJik7
CisKKyAgICB1c2luZyBTdGF0ZSA9IEF1ZGlvQ29udGV4dFN0YXRlOworICAgIFN0YXRlIHN0YXRl
KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXRlID09IFN0YXRlOjpDbG9zZWQ7IH0KKworICAgIGJvb2wgd291bGRUYWlu
dE9yaWdpbihjb25zdCBVUkwmKSBjb25zdDsKKworICAgIC8vIFRoZSBBdWRpb05vZGUgY3JlYXRl
IG1ldGhvZHMgYXJlIGNhbGxlZCBvbiB0aGUgbWFpbiB0aHJlYWQgKGZyb20gSmF2YVNjcmlwdCku
CisgICAgRXhjZXB0aW9uT3I8UmVmPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4+IGNyZWF0ZUJ1ZmZl
clNvdXJjZSgpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxHYWluTm9kZT4+IGNyZWF0ZUdhaW4oKTsK
KyAgICBFeGNlcHRpb25PcjxSZWY8QmlxdWFkRmlsdGVyTm9kZT4+IGNyZWF0ZUJpcXVhZEZpbHRl
cigpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxXYXZlU2hhcGVyTm9kZT4+IGNyZWF0ZVdhdmVTaGFw
ZXIoKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8RGVsYXlOb2RlPj4gY3JlYXRlRGVsYXkoZG91Ymxl
IG1heERlbGF5VGltZSk7CisgICAgRXhjZXB0aW9uT3I8UmVmPFBhbm5lck5vZGU+PiBjcmVhdGVQ
YW5uZXIoKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8Q29udm9sdmVyTm9kZT4+IGNyZWF0ZUNvbnZv
bHZlcigpOworICAgIEV4Y2VwdGlvbk9yPFJlZjxEeW5hbWljc0NvbXByZXNzb3JOb2RlPj4gY3Jl
YXRlRHluYW1pY3NDb21wcmVzc29yKCk7CisgICAgRXhjZXB0aW9uT3I8UmVmPEFuYWx5c2VyTm9k
ZT4+IGNyZWF0ZUFuYWx5c2VyKCk7CisgICAgRXhjZXB0aW9uT3I8UmVmPFNjcmlwdFByb2Nlc3Nv
ck5vZGU+PiBjcmVhdGVTY3JpcHRQcm9jZXNzb3Ioc2l6ZV90IGJ1ZmZlclNpemUsIHNpemVfdCBu
dW1iZXJPZklucHV0Q2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZk91dHB1dENoYW5uZWxzKTsKKyAg
ICBFeGNlcHRpb25PcjxSZWY8Q2hhbm5lbFNwbGl0dGVyTm9kZT4+IGNyZWF0ZUNoYW5uZWxTcGxp
dHRlcihzaXplX3QgbnVtYmVyT2ZPdXRwdXRzKTsKKyAgICBFeGNlcHRpb25PcjxSZWY8Q2hhbm5l
bE1lcmdlck5vZGU+PiBjcmVhdGVDaGFubmVsTWVyZ2VyKHNpemVfdCBudW1iZXJPZklucHV0cyk7
CisgICAgRXhjZXB0aW9uT3I8UmVmPE9zY2lsbGF0b3JOb2RlPj4gY3JlYXRlT3NjaWxsYXRvcigp
OworICAgIEV4Y2VwdGlvbk9yPFJlZjxQZXJpb2RpY1dhdmU+PiBjcmVhdGVQZXJpb2RpY1dhdmUo
RmxvYXQzMkFycmF5JiByZWFsLCBGbG9hdDMyQXJyYXkmIGltYWdpbmFyeSk7CisKKyAgICAvLyBX
aGVuIGEgc291cmNlIG5vZGUgaGFzIG5vIG1vcmUgcHJvY2Vzc2luZyB0byBkbyAoaGFzIGZpbmlz
aGVkIHBsYXlpbmcpLCB0aGVuIGl0IHRlbGxzIHRoZSBjb250ZXh0IHRvIGRlcmVmZXJlbmNlIGl0
LgorICAgIHZvaWQgbm90aWZ5Tm9kZUZpbmlzaGVkUHJvY2Vzc2luZyhBdWRpb05vZGUqKSBmaW5h
bDsKKworICAgIC8vIENhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bS4K
KyAgICB2b2lkIGhhbmRsZVByZVJlbmRlclRhc2tzKCkgZmluYWw7CisKKyAgICAvLyBDYWxsZWQg
YXQgdGhlIGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtLgorICAgIHZvaWQgaGFuZGxlUG9zdFJl
bmRlclRhc2tzKCkgZmluYWw7CisKKyAgICAvLyBDYWxsZWQgcGVyaW9kaWNhbGx5IGF0IHRoZSBl
bmQgb2YgZWFjaCByZW5kZXIgcXVhbnR1bSB0byBkZXJlZmVyZW5jZSBmaW5pc2hlZCBzb3VyY2Ug
bm9kZXMuCisgICAgdm9pZCBkZXJlZkZpbmlzaGVkU291cmNlTm9kZXMoKTsKKworICAgIC8vIFdl
IHNjaGVkdWxlIGRlbGV0aW9uIG9mIGFsbCBtYXJrZWQgbm9kZXMgYXQgdGhlIGVuZCBvZiBlYWNo
IHJlYWx0aW1lIHJlbmRlciBxdWFudHVtLgorICAgIHZvaWQgbWFya0ZvckRlbGV0aW9uKEF1ZGlv
Tm9kZSYpIGZpbmFsOworICAgIHZvaWQgZGVsZXRlTWFya2VkTm9kZXMoKSBmaW5hbDsKKworICAg
IC8vIEF1ZGlvQ29udGV4dCBjYW4gcHVsbCBub2RlKHMpIGF0IHRoZSBlbmQgb2YgZWFjaCByZW5k
ZXIgcXVhbnR1bSBldmVuIHdoZW4gdGhleSBhcmUgbm90IGNvbm5lY3RlZCB0byBhbnkgZG93bnN0
cmVhbSBub2Rlcy4KKyAgICAvLyBUaGVzZSB0d28gbWV0aG9kcyBhcmUgY2FsbGVkIGJ5IHRoZSBu
b2RlcyB3aG8gd2FudCB0byBhZGQvcmVtb3ZlIHRoZW1zZWx2ZXMgaW50by9mcm9tIHRoZSBhdXRv
bWF0aWMgcHVsbCBsaXN0cy4KKyAgICB2b2lkIGFkZEF1dG9tYXRpY1B1bGxOb2RlKEF1ZGlvTm9k
ZSYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlQXV0b21hdGljUHVsbE5vZGUoQXVkaW9Ob2RlJikg
ZmluYWw7CisKKyAgICAvLyBDYWxsZWQgcmlnaHQgYmVmb3JlIGhhbmRsZVBvc3RSZW5kZXJUYXNr
cygpIHRvIGhhbmRsZSBub2RlcyB3aGljaCBuZWVkIHRvIGJlIHB1bGxlZCBldmVuIHdoZW4gdGhl
eSBhcmUgbm90IGNvbm5lY3RlZCB0byBhbnl0aGluZy4KKyAgICB2b2lkIHByb2Nlc3NBdXRvbWF0
aWNQdWxsTm9kZXMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykgZmluYWw7CisKKyAgICAvLyBLZWVw
cyB0cmFjayBvZiB0aGUgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIG1hZGUuCisgICAgdm9pZCBpbmNy
ZW1lbnRDb25uZWN0aW9uQ291bnQoKSBmaW5hbAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICAgICAgbV9jb25uZWN0aW9uQ291bnQrKzsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBjb25uZWN0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Nvbm5lY3Rpb25Db3Vu
dDsgfQorCisgICAgLy8KKyAgICAvLyBUaHJlYWQgU2FmZXR5IGFuZCBHcmFwaCBMb2NraW5nOgor
ICAgIC8vCisgICAgCisgICAgdm9pZCBzZXRBdWRpb1RocmVhZChUaHJlYWQmIHRocmVhZCkgZmlu
YWwgeyBtX2F1ZGlvVGhyZWFkID0gJnRocmVhZDsgfSAvLyBGSVhNRTogY2hlY2sgZWl0aGVyIG5v
dCBpbml0aWFsaXplZCBvciB0aGUgc2FtZQorICAgIFRocmVhZCogYXVkaW9UaHJlYWQoKSBjb25z
dCB7IHJldHVybiBtX2F1ZGlvVGhyZWFkOyB9CisgICAgYm9vbCBpc0F1ZGlvVGhyZWFkKCkgY29u
c3QgZmluYWw7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgb25seSBhZnRlciB0aGUgYXVkaW8gdGhy
ZWFkIGhhcyBiZWVuIHN0YXJ0ZWQgYW5kIHRoZW4gc2h1dGRvd24uCisgICAgYm9vbCBpc0F1ZGlv
VGhyZWFkRmluaXNoZWQoKSBmaW5hbCB7IHJldHVybiBtX2lzQXVkaW9UaHJlYWRGaW5pc2hlZDsg
fQorICAgIAorICAgIC8vIG11c3RSZWxlYXNlTG9jayBpcyBzZXQgdG8gdHJ1ZSBpZiB3ZSBhY3F1
aXJlZCB0aGUgbG9jayBpbiB0aGlzIG1ldGhvZCBjYWxsIGFuZCBjYWxsZXIgbXVzdCB1bmxvY2so
KSwgZmFsc2UgaWYgaXQgd2FzIHByZXZpb3VzbHkgYWNxdWlyZWQuCisgICAgdm9pZCBsb2NrKGJv
b2wmIG11c3RSZWxlYXNlTG9jaykgZmluYWw7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgd2Ug
b3duIHRoZSBsb2NrLgorICAgIC8vIG11c3RSZWxlYXNlTG9jayBpcyBzZXQgdG8gdHJ1ZSBpZiB3
ZSBhY3F1aXJlZCB0aGUgbG9jayBpbiB0aGlzIG1ldGhvZCBjYWxsIGFuZCBjYWxsZXIgbXVzdCB1
bmxvY2soKSwgZmFsc2UgaWYgaXQgd2FzIHByZXZpb3VzbHkgYWNxdWlyZWQuCisgICAgYm9vbCB0
cnlMb2NrKGJvb2wmIG11c3RSZWxlYXNlTG9jaykgZmluYWw7CisKKyAgICB2b2lkIHVubG9jaygp
IGZpbmFsOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgdGhyZWFkIG93bnMgdGhlIGNv
bnRleHQncyBsb2NrLgorICAgIGJvb2wgaXNHcmFwaE93bmVyKCkgY29uc3QgZmluYWw7CisKKyAg
ICAvLyBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFubmVscyB3ZSBjYW4gc3VwcG9y
dC4KKyAgICBzdGF0aWMgdW5zaWduZWQgbWF4TnVtYmVyT2ZDaGFubmVscygpIHsgcmV0dXJuIE1h
eE51bWJlck9mQ2hhbm5lbHM7IH0KKyAgICAKKyAgICAvLyBJbiBBdWRpb05vZGU6OmRlcmVmKCkg
YSB0cnlMb2NrKCkgaXMgdXNlZCBmb3IgY2FsbGluZyBmaW5pc2hEZXJlZigpLCBidXQgaWYgaXQg
ZmFpbHMga2VlcCB0cmFjayBoZXJlLgorICAgIHZvaWQgYWRkRGVmZXJyZWRGaW5pc2hEZXJlZihB
dWRpb05vZGUqKSBmaW5hbDsKKworICAgIC8vIEluIHRoZSBhdWRpbyB0aHJlYWQgYXQgdGhlIHN0
YXJ0IG9mIGVhY2ggcmVuZGVyIGN5Y2xlLCB3ZSdsbCBjYWxsIGhhbmRsZURlZmVycmVkRmluaXNo
RGVyZWZzKCkuCisgICAgdm9pZCBoYW5kbGVEZWZlcnJlZEZpbmlzaERlcmVmcygpOworCisgICAg
Ly8gT25seSBhY2Nlc3NlZCB3aGVuIHRoZSBncmFwaCBsb2NrIGlzIGhlbGQuCisgICAgdm9pZCBt
YXJrU3VtbWluZ0p1bmN0aW9uRGlydHkoQXVkaW9TdW1taW5nSnVuY3Rpb24qKSBmaW5hbDsKKyAg
ICB2b2lkIG1hcmtBdWRpb05vZGVPdXRwdXREaXJ0eShBdWRpb05vZGVPdXRwdXQqKSBmaW5hbDsK
KworICAgIC8vIE11c3QgYmUgY2FsbGVkIG9uIG1haW4gdGhyZWFkLgorICAgIHZvaWQgcmVtb3Zl
TWFya2VkU3VtbWluZ0p1bmN0aW9uKEF1ZGlvU3VtbWluZ0p1bmN0aW9uKikgZmluYWw7CisKKyAg
ICAvLyBFdmVudFRhcmdldAorICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50
ZXJmYWNlKCkgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIHN0YXJ0UmVuZGVyaW5nKCk7CisgICAg
dm9pZCBmaW5pc2hlZFJlbmRlcmluZyhib29sIGRpZFJlbmRlcmluZykgZmluYWw7CisKKyAgICBz
dGF0aWMgdW5zaWduZWQgc19oYXJkd2FyZUNvbnRleHRDb3VudDsKKworICAgIC8vIFJlc3RyaWN0
aW9ucyB0byBjaGFuZ2UgZGVmYXVsdCBiZWhhdmlvcnMuCisgICAgQmVoYXZpb3JSZXN0cmljdGlv
bnMgYmVoYXZpb3JSZXN0cmljdGlvbnMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3Jlc3RyaWN0
aW9uczsgfQorICAgIHZvaWQgYWRkQmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0
aW9ucyByZXN0cmljdGlvbikgZmluYWwgeyBtX3Jlc3RyaWN0aW9ucyB8PSByZXN0cmljdGlvbjsg
fQorICAgIHZvaWQgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihCZWhhdmlvclJlc3RyaWN0aW9u
cyByZXN0cmljdGlvbikgZmluYWwgeyBtX3Jlc3RyaWN0aW9ucyAmPSB+cmVzdHJpY3Rpb247IH0K
KworICAgIHZvaWQgaXNQbGF5aW5nQXVkaW9EaWRDaGFuZ2UoKSBmaW5hbDsKKworICAgIHZvaWQg
bm9kZVdpbGxCZWdpblBsYXliYWNrKCkgZmluYWw7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKKyAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbG9n
Z2VyLmdldCgpOyB9CisgICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQorICAgIFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5u
ZWwoKSBjb25zdCBmaW5hbDsKKyAgICBjb25zdCB2b2lkKiBuZXh0QXVkaW9Ob2RlTG9nSWRlbnRp
ZmllcigpIGZpbmFsIHsgcmV0dXJuIGNoaWxkTG9nSWRlbnRpZmllcihtX2xvZ0lkZW50aWZpZXIs
ICsrbV9uZXh0QXVkaW9Ob2RlSWRlbnRpZmllcik7IH0KKyAgICBjb25zdCB2b2lkKiBuZXh0QXVk
aW9QYXJhbWV0ZXJMb2dJZGVudGlmaWVyKCkgZmluYWwgeyByZXR1cm4gY2hpbGRMb2dJZGVudGlm
aWVyKG1fbG9nSWRlbnRpZmllciwgKyttX25leHRBdWRpb1BhcmFtZXRlcklkZW50aWZpZXIpOyB9
CisjZW5kaWYKKworICAgIHZvaWQgcG9zdFRhc2soV1RGOjpGdW5jdGlvbjx2b2lkKCk+JiYpIGZp
bmFsOworICAgIGJvb2wgaXNTdG9wcGVkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9pc1N0b3BT
Y2hlZHVsZWQ7IH0KKyAgICBjb25zdCBTZWN1cml0eU9yaWdpbiogb3JpZ2luKCkgY29uc3QgZmlu
YWw7CisgICAgdm9pZCBhZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2
ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7CisKK3Byb3RlY3RlZDoKKyAgICBleHBs
aWNpdCBCYXNlQXVkaW9Db250ZXh0KERvY3VtZW50Jik7CisgICAgQmFzZUF1ZGlvQ29udGV4dChE
b2N1bWVudCYsIEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpOworICAgIAorICAgIHN0YXRpYyBi
b29sIGlzU2FtcGxlUmF0ZVJhbmdlR29vZChmbG9hdCBzYW1wbGVSYXRlKTsKKyAgICB2b2lkIGNs
ZWFyUGVuZGluZ0FjdGl2aXR5KCk7CisgICAgdm9pZCBtYWtlUGVuZGluZ0FjdGl2aXR5KCk7CisK
KyAgICBBdWRpb0Rlc3RpbmF0aW9uTm9kZSogZGVzdGluYXRpb25Ob2RlKCkgY29uc3QgeyByZXR1
cm4gbV9kZXN0aW5hdGlvbk5vZGUuZ2V0KCk7IH0KKworICAgIHZvaWQgbGF6eUluaXRpYWxpemUo
KTsKKyAgICB2b2lkIHVuaW5pdGlhbGl6ZSgpOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkJh
c2VBdWRpb0NvbnRleHQiOyB9CisjZW5kaWYKKworICAgIC8vIFRoZSBjb250ZXh0IGl0c2VsZiBr
ZWVwcyBhIHJlZmVyZW5jZSB0byBhbGwgc291cmNlIG5vZGVzLiAgVGhlIHNvdXJjZSBub2Rlcywg
dGhlbiByZWZlcmVuY2UgYWxsIG5vZGVzIHRoZXkncmUgY29ubmVjdGVkIHRvLgorICAgIC8vIElu
IHR1cm4sIHRoZXNlIG5vZGVzIHJlZmVyZW5jZSBhbGwgbm9kZXMgdGhleSdyZSBjb25uZWN0ZWQg
dG8uICBBbGwgbm9kZXMgYXJlIHVsdGltYXRlbHkgY29ubmVjdGVkIHRvIHRoZSBBdWRpb0Rlc3Rp
bmF0aW9uTm9kZS4KKyAgICAvLyBXaGVuIHRoZSBjb250ZXh0IGRlcmVmZXJlbmNlcyBhIHNvdXJj
ZSBub2RlLCBpdCB3aWxsIGJlIGRlYWN0aXZhdGVkIGZyb20gdGhlIHJlbmRlcmluZyBncmFwaCBh
bG9uZyB3aXRoIGFsbCBvdGhlciBub2RlcyBpdCBpcworICAgIC8vIHVuaXF1ZWx5IGNvbm5lY3Rl
ZCB0by4gIFNlZSB0aGUgQXVkaW9Ob2RlOjpyZWYoKSBhbmQgQXVkaW9Ob2RlOjpkZXJlZigpIG1l
dGhvZHMgZm9yIG1vcmUgZGV0YWlscy4KKyAgICB2b2lkIHJlZk5vZGUoQXVkaW9Ob2RlJik7Cisg
ICAgdm9pZCBkZXJlZk5vZGUoQXVkaW9Ob2RlJik7CisKKyAgICB2b2lkIGFkZFJlYWN0aW9uKFN0
YXRlLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJik7CisgICAgdm9pZCBzZXRTdGF0ZShTdGF0
ZSk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjb25zdHJ1Y3RDb21tb24oKTsKKworICAgIGJvb2wg
d2lsbEJlZ2luUGxheWJhY2soKTsKKyAgICBib29sIHdpbGxQYXVzZVBsYXliYWNrKCk7CisKKyAg
ICBib29sIHVzZXJHZXN0dXJlUmVxdWlyZWRGb3JBdWRpb1N0YXJ0KCkgY29uc3QgeyByZXR1cm4g
IWlzT2ZmbGluZUNvbnRleHQoKSAmJiBtX3Jlc3RyaWN0aW9ucyAmIFJlcXVpcmVVc2VyR2VzdHVy
ZUZvckF1ZGlvU3RhcnRSZXN0cmljdGlvbjsgfQorICAgIGJvb2wgcGFnZUNvbnNlbnRSZXF1aXJl
ZEZvckF1ZGlvU3RhcnQoKSBjb25zdCB7IHJldHVybiAhaXNPZmZsaW5lQ29udGV4dCgpICYmIG1f
cmVzdHJpY3Rpb25zICYgUmVxdWlyZVBhZ2VDb25zZW50Rm9yQXVkaW9TdGFydFJlc3RyaWN0aW9u
OyB9CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICB2b2lkIHNjaGVkdWxlTm9kZURlbGV0aW9u
KCk7CisKKyAgICB2b2lkIG1lZGlhQ2FuU3RhcnQoRG9jdW1lbnQmKSBvdmVycmlkZTsKKworICAg
IC8vIEV2ZW50VGFyZ2V0CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KEV2ZW50JikgZmluYWw7CisK
KyAgICAvLyBNZWRpYVByb2R1Y2VyCisgICAgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdz
IG1lZGlhU3RhdGUoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHBhZ2VNdXRlZFN0YXRlRGlk
Q2hhbmdlKCkgb3ZlcnJpZGU7CisKKyAgICAvLyBBY3RpdmVET01PYmplY3QgQVBJLgorICAgIHZv
aWQgc3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZSgp
IGZpbmFsOworICAgIHZvaWQgc3RvcCgpIG92ZXJyaWRlOworICAgIGNvbnN0IGNoYXIqIGFjdGl2
ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFdoZW4gdGhlIGNvbnRl
eHQgZ29lcyBhd2F5LCB0aGVyZSBtaWdodCBzdGlsbCBiZSBzb21lIHNvdXJjZXMgd2hpY2ggaGF2
ZW4ndCBmaW5pc2hlZCBwbGF5aW5nLgorICAgIC8vIE1ha2Ugc3VyZSB0byBkZXJlZmVyZW5jZSB0
aGVtIGhlcmUuCisgICAgdm9pZCBkZXJlZlVuZmluaXNoZWRTb3VyY2VOb2RlcygpOworCisgICAg
Ly8gUGxhdGZvcm1NZWRpYVNlc3Npb25DbGllbnQKKyAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6
TWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIFBsYXRmb3JtTWVk
aWFTZXNzaW9uOjpNZWRpYVR5cGU6OldlYkF1ZGlvOyB9CisgICAgUGxhdGZvcm1NZWRpYVNlc3Np
b246Ok1lZGlhVHlwZSBwcmVzZW50YXRpb25UeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
UGxhdGZvcm1NZWRpYVNlc3Npb246Ok1lZGlhVHlwZTo6V2ViQXVkaW87IH0KKyAgICB2b2lkIG1h
eVJlc3VtZVBsYXliYWNrKGJvb2wgc2hvdWxkUmVzdW1lKSBvdmVycmlkZTsKKyAgICB2b2lkIHN1
c3BlbmRQbGF5YmFjaygpIG92ZXJyaWRlOworICAgIGJvb2wgY2FuUmVjZWl2ZVJlbW90ZUNvbnRy
b2xDb21tYW5kcygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdm9pZCBk
aWRSZWNlaXZlUmVtb3RlQ29udHJvbENvbW1hbmQoUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90
ZUNvbnRyb2xDb21tYW5kVHlwZSwgY29uc3QgUGxhdGZvcm1NZWRpYVNlc3Npb246OlJlbW90ZUNv
bW1hbmRBcmd1bWVudCopIG92ZXJyaWRlIHsgfQorICAgIGJvb2wgc3VwcG9ydHNTZWVraW5nKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIHNob3VsZE92ZXJyaWRl
QmFja2dyb3VuZFBsYXliYWNrUmVzdHJpY3Rpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVy
cnVwdGlvblR5cGUpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBj
YW5Qcm9kdWNlQXVkaW8oKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBp
c1N1c3BlbmRlZCgpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCB2aXNpYmlsaXR5U3RhdGVDaGFu
Z2VkKCkgZmluYWw7CisKKyAgICBib29sIGlzQmFzZUF1ZGlvQ29udGV4dCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGlzV2ViS2l0QXVkaW9Db250ZXh0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KKworICAgIHZvaWQgaGFuZGxlRGlydHlBdWRpb1N1bW1p
bmdKdW5jdGlvbnMoKTsKKyAgICB2b2lkIGhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpOwor
CisgICAgdm9pZCB1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKTsKKworI2lmICFSRUxFQVNFX0xP
R19ESVNBQkxFRAorICAgIFJlZjxMb2dnZXI+IG1fbG9nZ2VyOworICAgIGNvbnN0IHZvaWQqIG1f
bG9nSWRlbnRpZmllcjsKKyAgICB1aW50NjRfdCBtX25leHRBdWRpb05vZGVJZGVudGlmaWVyIHsg
MCB9OworICAgIHVpbnQ2NF90IG1fbmV4dEF1ZGlvUGFyYW1ldGVySWRlbnRpZmllciB7IDAgfTsK
KyNlbmRpZgorCisgICAgLy8gT25seSBhY2Nlc3NlZCBpbiB0aGUgYXVkaW8gdGhyZWFkLgorICAg
IFZlY3RvcjxBdWRpb05vZGUqPiBtX2ZpbmlzaGVkTm9kZXM7CisKKyAgICAvLyBXZSBkb24ndCB1
c2UgUmVmUHRyPEF1ZGlvTm9kZT4gaGVyZSBiZWNhdXNlIEF1ZGlvTm9kZSBoYXMgYSBtb3JlIGNv
bXBsZXggcmVmKCkgLyBkZXJlZigpIGltcGxlbWVudGF0aW9uCisgICAgLy8gd2l0aCBhbiBvcHRp
b25hbCBhcmd1bWVudCBmb3IgcmVmVHlwZS4gIFdlIG5lZWQgdG8gdXNlIHRoZSBzcGVjaWFsIHJl
ZlR5cGU6IFJlZlR5cGVDb25uZWN0aW9uCisgICAgLy8gRWl0aGVyIGFjY2Vzc2VkIHdoZW4gdGhl
IGdyYXBoIGxvY2sgaXMgaGVsZCwgb3Igb24gdGhlIG1haW4gdGhyZWFkIHdoZW4gdGhlIGF1ZGlv
IHRocmVhZCBoYXMgZmluaXNoZWQuCisgICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1fcmVmZXJlbmNl
ZE5vZGVzOworCisgICAgLy8gQWNjdW11bGF0ZSBub2RlcyB3aGljaCBuZWVkIHRvIGJlIGRlbGV0
ZWQgaGVyZS4KKyAgICAvLyBUaGlzIGlzIGNvcGllZCB0byBtX25vZGVzVG9EZWxldGUgYXQgdGhl
IGVuZCBvZiBhIHJlbmRlciBjeWNsZSBpbiBoYW5kbGVQb3N0UmVuZGVyVGFza3MoKSwgd2hlcmUg
d2UncmUgYXNzdXJlZCBvZiBhIHN0YWJsZSBncmFwaAorICAgIC8vIHN0YXRlIHdoaWNoIHdpbGwg
aGF2ZSBubyByZWZlcmVuY2VzIHRvIGFueSBvZiB0aGUgbm9kZXMgaW4gbV9ub2Rlc1RvRGVsZXRl
IG9uY2UgdGhlIGNvbnRleHQgbG9jayBpcyByZWxlYXNlZAorICAgIC8vICh3aGVuIGhhbmRsZVBv
c3RSZW5kZXJUYXNrcygpIGhhcyBjb21wbGV0ZWQpLgorICAgIFZlY3RvcjxBdWRpb05vZGUqPiBt
X25vZGVzTWFya2VkRm9yRGVsZXRpb247CisKKyAgICAvLyBUaGV5IHdpbGwgYmUgc2NoZWR1bGVk
IGZvciBkZWxldGlvbiAob24gdGhlIG1haW4gdGhyZWFkKSBhdCB0aGUgZW5kIG9mIGEgcmVuZGVy
IGN5Y2xlIChpbiByZWFsdGltZSB0aHJlYWQpLgorICAgIFZlY3RvcjxBdWRpb05vZGUqPiBtX25v
ZGVzVG9EZWxldGU7CisKKyAgICBib29sIG1faXNEZWxldGlvblNjaGVkdWxlZCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2lzU3RvcFNjaGVkdWxlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzSW5p
dGlhbGl6ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc0F1ZGlvVGhyZWFkRmluaXNoZWQgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9hdXRvbWF0aWNQdWxsTm9kZXNOZWVkVXBkYXRpbmcgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9pc09mZmxpbmVDb250ZXh0IHsgZmFsc2UgfTsKKworICAgIC8vIE9u
bHkgYWNjZXNzZWQgd2hlbiB0aGUgZ3JhcGggbG9jayBpcyBoZWxkLgorICAgIEhhc2hTZXQ8QXVk
aW9TdW1taW5nSnVuY3Rpb24qPiBtX2RpcnR5U3VtbWluZ0p1bmN0aW9uczsKKyAgICBIYXNoU2V0
PEF1ZGlvTm9kZU91dHB1dCo+IG1fZGlydHlBdWRpb05vZGVPdXRwdXRzOworCisgICAgLy8gRm9y
IHRoZSBzYWtlIG9mIHRocmVhZCBzYWZldHksIHdlIG1haW50YWluIGEgc2VwZXJhdGUgVmVjdG9y
IG9mIGF1dG9tYXRpYyBwdWxsIG5vZGVzIGZvciByZW5kZXJpbmcgaW4gbV9yZW5kZXJpbmdBdXRv
bWF0aWNQdWxsTm9kZXMuCisgICAgLy8gSXQgd2lsbCBiZSBjb3BpZWQgZnJvbSBtX2F1dG9tYXRp
Y1B1bGxOb2RlcyBieSB1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMoKSBhdCB0aGUgdmVyeSBzdGFy
dCBvciBlbmQgb2YgdGhlIHJlbmRlcmluZyBxdWFudHVtLgorICAgIEhhc2hTZXQ8QXVkaW9Ob2Rl
Kj4gbV9hdXRvbWF0aWNQdWxsTm9kZXM7CisgICAgVmVjdG9yPEF1ZGlvTm9kZSo+IG1fcmVuZGVy
aW5nQXV0b21hdGljUHVsbE5vZGVzOworICAgIC8vIE9ubHkgYWNjZXNzZWQgaW4gdGhlIGF1ZGlv
IHRocmVhZC4KKyAgICBWZWN0b3I8QXVkaW9Ob2RlKj4gbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlz
dDsKKyAgICBWZWN0b3I8VmVjdG9yPERPTVByb21pc2VEZWZlcnJlZDx2b2lkPj4+IG1fc3RhdGVS
ZWFjdGlvbnM7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1NZWRpYVNlc3Npb24+IG1f
bWVkaWFTZXNzaW9uOworICAgIFVuaXF1ZVJlZjxNYWluVGhyZWFkR2VuZXJpY0V2ZW50UXVldWU+
IG1fZXZlbnRRdWV1ZTsKKworICAgIFJlZlB0cjxBdWRpb0J1ZmZlcj4gbV9yZW5kZXJUYXJnZXQ7
CisgICAgUmVmUHRyPEF1ZGlvRGVzdGluYXRpb25Ob2RlPiBtX2Rlc3RpbmF0aW9uTm9kZTsKKyAg
ICBSZWZQdHI8QXVkaW9MaXN0ZW5lcj4gbV9saXN0ZW5lcjsKKworICAgIHVuc2lnbmVkIG1fY29u
bmVjdGlvbkNvdW50IHsgMCB9OworCisgICAgLy8gR3JhcGggbG9ja2luZy4KKyAgICBMb2NrIG1f
Y29udGV4dEdyYXBoTXV0ZXg7CisgICAgLy8gRklYTUU6IFVzaW5nIHZvbGF0aWxlIHNlZW1zIGlu
Y29ycmVjdC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTgwMzMyCisgICAgVGhyZWFkKiB2b2xhdGlsZSBtX2F1ZGlvVGhyZWFkIHsgbnVsbHB0ciB9Owor
ICAgIFRocmVhZCogdm9sYXRpbGUgbV9ncmFwaE93bmVyVGhyZWFkIHsgbnVsbHB0ciB9OyAvLyBp
ZiB0aGUgbG9jayBpcyBoZWxkIHRoZW4gdGhpcyBpcyB0aGUgdGhyZWFkIHdoaWNoIG93bnMgaXQs
IG90aGVyd2lzZSA9PSBudWxscHRyLgorCisgICAgc3RkOjp1bmlxdWVfcHRyPEFzeW5jQXVkaW9E
ZWNvZGVyPiBtX2F1ZGlvRGVjb2RlcjsKKworICAgIC8vIFRoaXMgaXMgY29uc2lkZXJpbmcgMzIg
aXMgbGFyZ2UgZW5vdWdoIGZvciBtdWx0aXBsZSBjaGFubmVscyBhdWRpby4gCisgICAgLy8gSXQg
aXMgc29tZXdoYXQgYXJiaXRyYXJ5IGFuZCBjb3VsZCBiZSBpbmNyZWFzZWQgaWYgbmVjZXNzYXJ5
LgorICAgIGVudW0geyBNYXhOdW1iZXJPZkNoYW5uZWxzID0gMzIgfTsKKworICAgIC8vIE51bWJl
ciBvZiBBdWRpb0J1ZmZlclNvdXJjZU5vZGVzIHRoYXQgYXJlIGFjdGl2ZSAocGxheWluZykuCisg
ICAgc3RkOjphdG9taWM8aW50PiBtX2FjdGl2ZVNvdXJjZUNvdW50IHsgMCB9OworCisgICAgQmVo
YXZpb3JSZXN0cmljdGlvbnMgbV9yZXN0cmljdGlvbnMgeyBOb1Jlc3RyaWN0aW9ucyB9OworCisg
ICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5kZWQgfTsKKyAgICBSZWZQdHI8UGVuZGlu
Z0FjdGl2aXR5PEJhc2VBdWRpb0NvbnRleHQ+PiBtX3BlbmRpbmdBY3Rpdml0eTsKK307CisKK30g
Ly8gV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkJhc2VB
dWRpb0NvbnRleHQpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkF1ZGlv
Q29udGV4dEJhc2UmIGNvbnRleHQpIHsgcmV0dXJuIGNvbnRleHQuaXNCYXNlQXVkaW9Db250ZXh0
KCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaWRsCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIy
OTFjOTU4ZTg1Yjg1M2M5YTRhNGIwZDkzODU2NzA4Y2QyZDdlZjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0Jhc2VBdWRpb0NvbnRleHQuaWRsCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworWworICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICBD
b25kaXRpb25hbD1XRUJfQVVESU8sCisgICAgRW5hYmxlZEJ5U2V0dGluZz1XZWJBdWRpbyZNb2Rl
cm5VbnByZWZpeGVkV2ViQXVkaW8sCisgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQsCitd
IGludGVyZmFjZSBCYXNlQXVkaW9Db250ZXh0IDogRXZlbnRUYXJnZXQgeworICAgIC8vIEFsbCBy
ZW5kZXJlZCBhdWRpbyB1bHRpbWF0ZWx5IGNvbm5lY3RzIHRvIGRlc3RpbmF0aW9uLCB3aGljaCBy
ZXByZXNlbnRzIHRoZSBhdWRpbyBoYXJkd2FyZS4KKyAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVk
aW9EZXN0aW5hdGlvbk5vZGUgZGVzdGluYXRpb247CisKKyAgICAvLyBBbGwgc2NoZWR1bGVkIHRp
bWVzIGFyZSByZWxhdGl2ZSB0byB0aGlzIHRpbWUgaW4gc2Vjb25kcy4KKyAgICByZWFkb25seSBh
dHRyaWJ1dGUgdW5yZXN0cmljdGVkIGRvdWJsZSBjdXJyZW50VGltZTsKKworICAgIC8vIEFsbCBB
dWRpb05vZGVzIGluIHRoZSBjb250ZXh0IHJ1biBhdCB0aGlzIHNhbXBsZS1yYXRlIChzYW1wbGUt
ZnJhbWVzIHBlciBzZWNvbmQpLgorICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnJlc3RyaWN0ZWQg
ZmxvYXQgc2FtcGxlUmF0ZTsKKworICAgIC8vIEFsbCBwYW5uaW5nIGlzIHJlbGF0aXZlIHRvIHRo
aXMgbGlzdGVuZXIuCisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEF1ZGlvTGlzdGVuZXIgbGlzdGVu
ZXI7CisKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9Db250ZXh0U3RhdGUgc3RhdGU7Cisg
ICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbnN0YXRlY2hhbmdlOworICAgIAorICAgIFtNYXlU
aHJvd0V4Y2VwdGlvbl0gQXVkaW9CdWZmZXIgY3JlYXRlQnVmZmVyKHVuc2lnbmVkIGxvbmcgbnVt
YmVyT2ZDaGFubmVscywgdW5zaWduZWQgbG9uZyBudW1iZXJPZkZyYW1lcywgdW5yZXN0cmljdGVk
IGZsb2F0IHNhbXBsZVJhdGUpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gQXVkaW9CdWZmZXIg
Y3JlYXRlQnVmZmVyKEFycmF5QnVmZmVyIGJ1ZmZlciwgYm9vbGVhbiBtaXhUb01vbm8pOworCisg
ICAgLy8gQXN5bmNocm9ub3VzIGF1ZGlvIGZpbGUgZGF0YSBkZWNvZGluZy4KKyAgICAvLyBGSVhN
RTogc3VjY2Vzc0NhbGxiYWNrIHNob3VsZCBiZSBvcHRpb25hbCBhbmQgdGhlIGNhbGxiYWNrcyBz
aG91bGQgbm90IGJlIG51bGxhYmxlLiBUaGlzIHNob3VsZCBhbHNvIHJldHVybiBhIFByb21pc2Uu
CisgICAgdm9pZCBkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIgYXVkaW9EYXRhLCBBdWRpb0J1
ZmZlckNhbGxiYWNrPyBzdWNjZXNzQ2FsbGJhY2ssIG9wdGlvbmFsIEF1ZGlvQnVmZmVyQ2FsbGJh
Y2s/IGVycm9yQ2FsbGJhY2spOworCisgICAgLy8gU291cmNlcworICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGNyZWF0ZUJ1ZmZlclNvdXJjZSgpOworCisgICAg
Ly8gUHJvY2Vzc2luZyBub2RlcworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gR2Fpbk5vZGUgY3Jl
YXRlR2FpbigpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRGVsYXlOb2RlIGNyZWF0ZURlbGF5
KG9wdGlvbmFsIHVucmVzdHJpY3RlZCBkb3VibGUgbWF4RGVsYXlUaW1lID0gMSk7CisgICAgW01h
eVRocm93RXhjZXB0aW9uXSBCaXF1YWRGaWx0ZXJOb2RlIGNyZWF0ZUJpcXVhZEZpbHRlcigpOwor
ICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gV2F2ZVNoYXBlck5vZGUgY3JlYXRlV2F2ZVNoYXBlcigp
OworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gUGFubmVyTm9kZSBjcmVhdGVQYW5uZXIoKTsKKyAg
ICBbTWF5VGhyb3dFeGNlcHRpb25dIENvbnZvbHZlck5vZGUgY3JlYXRlQ29udm9sdmVyKCk7Cisg
ICAgW01heVRocm93RXhjZXB0aW9uXSBEeW5hbWljc0NvbXByZXNzb3JOb2RlIGNyZWF0ZUR5bmFt
aWNzQ29tcHJlc3NvcigpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gQW5hbHlzZXJOb2RlIGNy
ZWF0ZUFuYWx5c2VyKCk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSBTY3JpcHRQcm9jZXNzb3JO
b2RlIGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihvcHRpb25hbCB1bnNpZ25lZCBsb25nIGJ1ZmZlclNp
emUgPSAwLCBvcHRpb25hbCB1bnNpZ25lZCBsb25nIG51bWJlck9mSW5wdXRDaGFubmVscyA9IDIs
IG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZPdXRwdXRDaGFubmVscyA9IDIpOworICAg
IFtNYXlUaHJvd0V4Y2VwdGlvbl0gT3NjaWxsYXRvck5vZGUgY3JlYXRlT3NjaWxsYXRvcigpOwor
ICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gUGVyaW9kaWNXYXZlIGNyZWF0ZVBlcmlvZGljV2F2ZShG
bG9hdDMyQXJyYXkgcmVhbCwgRmxvYXQzMkFycmF5IGltYWcpOworCisgICAgLy8gQ2hhbm5lbCBz
cGxpdHRpbmcgYW5kIG1lcmdpbmcKKyAgICBbTWF5VGhyb3dFeGNlcHRpb25dIENoYW5uZWxTcGxp
dHRlck5vZGUgY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgbnVt
YmVyT2ZPdXRwdXRzID0gNik7CisgICAgW01heVRocm93RXhjZXB0aW9uXSBDaGFubmVsTWVyZ2Vy
Tm9kZSBjcmVhdGVDaGFubmVsTWVyZ2VyKG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZJ
bnB1dHMgPSA2KTsKK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmNwcAppbmRleCA2OGZjOGQ2OGI1MWQxNzJkZWMzZGVl
MTc1ZTA2YjFkMDFmODFhZjU4Li4xN2E3OWZlYTk5MjBkNjVkNWM1Yjc3NmJlNDY1ZThjYjczNTM3
MmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVB
dWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2Zm
bGluZUF1ZGlvQ29udGV4dC5jcHAKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKE9mZmxpbmVBdWRpb0NvbnRleHQpOwogCiBp
bmxpbmUgT2ZmbGluZUF1ZGlvQ29udGV4dDo6T2ZmbGluZUF1ZGlvQ29udGV4dChEb2N1bWVudCYg
ZG9jdW1lbnQsIEF1ZGlvQnVmZmVyKiByZW5kZXJUYXJnZXQpCi0gICAgOiBBdWRpb0NvbnRleHQo
ZG9jdW1lbnQsIHJlbmRlclRhcmdldCkKKyAgICA6IEJhc2VBdWRpb0NvbnRleHQoZG9jdW1lbnQs
IHJlbmRlclRhcmdldCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9PZmZsaW5lQXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQuaAppbmRleCA4NWE1OTVmN2JjYzI0OWY1YmM5
MDE2Yzc4OTdlODg3NjMwNWVjZDkyLi5hY2JhYmI3YjM1YTAxYmNhNjRhYzNiNGQ4MzY0MDczOWIz
MWVhMzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxp
bmVBdWRpb0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0NvbnRleHQuaApAQCAtMjQsMTEgKzI0LDExIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCisjaW5jbHVkZSAiQmFzZUF1ZGlvQ29udGV4dC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIE9mZmxpbmVBdWRpb0NvbnRleHQgZmlu
YWwgOiBwdWJsaWMgQXVkaW9Db250ZXh0IHsKK2NsYXNzIE9mZmxpbmVBdWRpb0NvbnRleHQgZmlu
YWwgOiBwdWJsaWMgQmFzZUF1ZGlvQ29udGV4dCB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChPZmZsaW5lQXVkaW9Db250ZXh0KTsKIHB1YmxpYzoKICAgICBzdGF0aWMgRXhjZXB0aW9uT3I8
UmVmPE9mZmxpbmVBdWRpb0NvbnRleHQ+PiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYs
IHVuc2lnbmVkIG51bWJlck9mQ2hhbm5lbHMsIHNpemVfdCBudW1iZXJPZkZyYW1lcywgZmxvYXQg
c2FtcGxlUmF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L09mZmxpbmVBdWRpb0NvbnRleHQuaWRsIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9PZmZsaW5lQXVkaW9Db250ZXh0LmlkbAppbmRleCAwZTcxYTA2YmMzZmEyZjhlODYyOTlmM2My
NDU4N2U2Y2JhOWM0MTExLi43MjljNzU5ZjQ2MTdmMDc4MDEwMGEyMWM3Y2I5MzE1YjE1NmUwZTIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09mZmxpbmVBdWRp
b0NvbnRleHQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvQ29udGV4dC5pZGwKQEAgLTI2LDYgKzI2LDE2IEBACiAgICAgQ29uZGl0aW9uYWw9V0VC
X0FVRElPLAogICAgIEVuYWJsZWRCeVNldHRpbmc9TW9kZXJuVW5wcmVmaXhlZFdlYkF1ZGlvLAog
ICAgIEpTR2VuZXJhdGVUb0pTT2JqZWN0LAotXSBpbnRlcmZhY2UgT2ZmbGluZUF1ZGlvQ29udGV4
dCA6IEF1ZGlvQ29udGV4dCB7CitdIGludGVyZmFjZSBPZmZsaW5lQXVkaW9Db250ZXh0IDogQmFz
ZUF1ZGlvQ29udGV4dCB7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIE1h
eVRocm93RXhjZXB0aW9uXSBjb25zdHJ1Y3Rvcih1bnNpZ25lZCBsb25nIG51bWJlck9mQ2hhbm5l
bHMsIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZGcmFtZXMsIHVucmVzdHJpY3RlZCBmbG9hdCBzYW1w
bGVSYXRlKTsKKworICAgIHZvaWQgc3RhcnRSZW5kZXJpbmcoKTsKKworICAgIFtJbXBsZW1lbnRl
ZEFzPXJlc3VtZVJlbmRlcmluZ10gUHJvbWlzZTx2b2lkPiByZXN1bWUoKTsKKyAgICBbSW1wbGVt
ZW50ZWRBcz1zdXNwZW5kUmVuZGVyaW5nXSBQcm9taXNlPHZvaWQ+IHN1c3BlbmQoKTsgLy8gRklY
TUU6IE1pc3Npbmcgc3VzcGVuZFRpbWUgcGFyYW1ldGVyLgorCisgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0LgorICAgIC8vIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsK
KworICAgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25jb21wbGV0ZTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1Bhbm5lck5vZGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9QYW5uZXJOb2RlLmNwcAppbmRleCBmMzgwMGYxY2Vj
NGM3MDJjYmI4MGI5NGJiMmRhMTE4MzNlOGQ3YWMzLi45OWViYzVjZGFjYjk0YmMyMzIyYWMyYTQ5
OGVjNmViOTcyNzlkMTJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL1Bhbm5lck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
UGFubmVyTm9kZS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgUGFubmVyTm9kZUJhc2U6OlBhbm5lck5v
ZGVCYXNlKEF1ZGlvQ29udGV4dEJhc2UmIGNvbnRleHQsIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiB9
CiAKLVBhbm5lck5vZGU6OlBhbm5lck5vZGUoQXVkaW9Db250ZXh0JiBjb250ZXh0LCBmbG9hdCBz
YW1wbGVSYXRlKQorUGFubmVyTm9kZTo6UGFubmVyTm9kZShCYXNlQXVkaW9Db250ZXh0JiBjb250
ZXh0LCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogUGFubmVyTm9kZUJhc2UoY29udGV4dCwgc2Ft
cGxlUmF0ZSkKICAgICAsIG1fcGFubmluZ01vZGVsKFBhbm5pbmdNb2RlbFR5cGU6OkhSVEYpCiAg
ICAgLCBtX2xhc3RHYWluKC0xLjApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL1Bhbm5lck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
UGFubmVyTm9kZS5oCmluZGV4IGYyZmYyZDIwOTYyNDQ0NDE1ODFmMTVjOTlkZjRkNTQ5YWRmOTNk
MTAuLjQwN2NhNDFmMTg3YTNiYzAxY2MyNTkyMDQ1ZjRkYzI3ZTc1YWE1ZmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vUGFubmVyTm9kZS5oCkBAIC02MiwxNSArNjIsMTUg
QEAgcHJvdGVjdGVkOgogY2xhc3MgUGFubmVyTm9kZSBmaW5hbCA6IHB1YmxpYyBQYW5uZXJOb2Rl
QmFzZSB7CiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChQYW5uZXJOb2RlKTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPFBhbm5lck5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQmIGNvbnRleHQs
IGZsb2F0IHNhbXBsZVJhdGUpCisgICAgc3RhdGljIFJlZjxQYW5uZXJOb2RlPiBjcmVhdGUoQmFz
ZUF1ZGlvQ29udGV4dCYgY29udGV4dCwgZmxvYXQgc2FtcGxlUmF0ZSkKICAgICB7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFBhbm5lck5vZGUoY29udGV4dCwgc2FtcGxlUmF0ZSkpOwog
ICAgIH0KIAogICAgIHZpcnR1YWwgflBhbm5lck5vZGUoKTsKIAotICAgIEF1ZGlvQ29udGV4dCYg
Y29udGV4dCgpIHsgcmV0dXJuIGRvd25jYXN0PEF1ZGlvQ29udGV4dD4oQXVkaW9Ob2RlOjpjb250
ZXh0KCkpOyB9Ci0gICAgY29uc3QgQXVkaW9Db250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gZG93bmNhc3Q8QXVkaW9Db250ZXh0PihBdWRpb05vZGU6OmNvbnRleHQoKSk7IH0KKyAgICBC
YXNlQXVkaW9Db250ZXh0JiBjb250ZXh0KCkgeyByZXR1cm4gZG93bmNhc3Q8QmFzZUF1ZGlvQ29u
dGV4dD4oQXVkaW9Ob2RlOjpjb250ZXh0KCkpOyB9CisgICAgY29uc3QgQmFzZUF1ZGlvQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PEJhc2VBdWRpb0NvbnRleHQ+KEF1
ZGlvTm9kZTo6Y29udGV4dCgpKTsgfQogCiAgICAgLy8gQXVkaW9Ob2RlCiAgICAgdm9pZCBwcm9j
ZXNzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpIG92ZXJyaWRlOwpAQCAtMTM0LDcgKzEzNCw3IEBA
IHB1YmxpYzoKICAgICBkb3VibGUgbGF0ZW5jeVRpbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX3Bhbm5lciA/IG1fcGFubmVyLT5sYXRlbmN5VGltZSgpIDogMDsgfQogCiBwcml2YXRlOgot
ICAgIFBhbm5lck5vZGUoQXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSk7CisgICAgUGFu
bmVyTm9kZShCYXNlQXVkaW9Db250ZXh0JiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKICAgICAvLyBS
ZXR1cm5zIHRoZSBjb21iaW5lZCBkaXN0YW5jZSBhbmQgY29uZSBnYWluIGF0dGVudWF0aW9uLgog
ICAgIGZsb2F0IGRpc3RhbmNlQ29uZUdhaW4oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vV2ViS2l0QXVkaW9Db250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL1dlYktpdEF1ZGlvQ29udGV4dC5oCmluZGV4IDE0NDY2MDkzYTY4MmU3
M2RhMjg2YWM1MTk4YWNmZGQ1Y2JjOGY5ZTAuLmU5YWJiNzk4OWIyNzczYWUwYzFjMTY5OGI0MjA3
NTJmNzZmNDVhZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
V2ViS2l0QXVkaW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9XZWJLaXRBdWRpb0NvbnRleHQuaApAQCAtMzIwLDcgKzMyMCw3IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKSBmaW5hbDsKIAotICAgIGJvb2wgaXNBdWRp
b0NvbnRleHQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNCYXNl
QXVkaW9Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlz
V2ViS2l0QXVkaW9Db250ZXh0KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAg
dm9pZCBoYW5kbGVEaXJ0eUF1ZGlvU3VtbWluZ0p1bmN0aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRl
eCAyMGEyMDFkYTU0MmU4M2YwOWJlNjFjOGJiZjM0NjU2Y2M4ZDY0MjNkLi4wNjNmOGUwNGExNmYw
MTgyMGU0NzU5MDMxZjE3MjBlNzcxNzJlYmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjQyLDYgKzI0
Miw3IEBAIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcAogTW9kdWxlcy93
ZWJhdWRpby9BdWRpb1Byb2Nlc3NpbmdFdmVudC5jcHAKIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9T
Y2hlZHVsZWRTb3VyY2VOb2RlLmNwcAogTW9kdWxlcy93ZWJhdWRpby9BdWRpb1N1bW1pbmdKdW5j
dGlvbi5jcHAKK01vZHVsZXMvd2ViYXVkaW8vQmFzZUF1ZGlvQ29udGV4dC5jcHAKIE1vZHVsZXMv
d2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcAogTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRGaWx0
ZXJOb2RlLmNwcAogTW9kdWxlcy93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCkBAIC0yNzYy
LDYgKzI3NjMsNyBAQCBKU0F1dGhlbnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlLmNwcAogSlNB
dXRoZW50aWNhdG9yUmVzcG9uc2UuY3BwCiBKU0F1dGhlbnRpY2F0b3JUcmFuc3BvcnQuY3BwCiBK
U0JhclByb3AuY3BwCitKU0Jhc2VBdWRpb0NvbnRleHQuY3BwCiBKU0Jhc2ljQ3JlZGVudGlhbC5j
cHAKIEpTQmVmb3JlTG9hZEV2ZW50LmNwcAogSlNCZWZvcmVVbmxvYWRFdmVudC5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2
MmQwZjk1OWUzNGE1YTFlMTJjZWFkMzBiNzQ5ZDM2MTcwZWM2MDAzLi4yMTUyOGYyNmQzYzNhY2Iy
OWI4NmY5NTdhYTU3Mzk5OTdiOWVkNzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNDE1LDYgKzI0MTUsNyBAQAogCQk4MzEw
MkIyNzFGOUVBREQ5MDBFNDA0QjkgLyogSlNFeHRlbmRhYmxlTWVzc2FnZUV2ZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzEwMkIyMzFGOUVBREMy
MDBFNDA0QjkgLyogSlNFeHRlbmRhYmxlTWVzc2FnZUV2ZW50LmggKi87IH07CiAJCTgzMTFDMDAz
MUZBQTJFOTUwMEUzQzhFNSAvKiBTV1NlcnZlckpvYlF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MzExQzAwMjFGQUEyRTg5MDBFM0M4RTUgLyog
U1dTZXJ2ZXJKb2JRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTgzMTIwQzcxMUM1NkYzRkIwMDFDQjExMiAvKiBIVE1MRGF0YUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzNEI4NkE3
MUM1NkU4M0EwMEYzRjBFMyAvKiBIVE1MRGF0YUVsZW1lbnQuaCAqLzsgfTsKKwkJODMxOThGQkYy
NEExNjBERDAwNDIwQjA1IC8qIEJhc2VBdWRpb0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMTk4RkJFMjRBMTYwQzEwMDQyMEIwNSAvKiBC
YXNlQXVkaW9Db250ZXh0LmggKi87IH07CiAJCTgzMUI2MTc2MjQ5OUE1QkIwMEMwN0M3OSAvKiBX
ZWJLaXRBdWRpb1Bhbm5lck5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDgzMUI2MTc0MjQ5OUE1OUMwMEMwN0M3OSAvKiBXZWJLaXRBdWRpb1Bhbm5l
ck5vZGUuaCAqLzsgfTsKIAkJODMxQjYxNzcyNDk5QTVCRjAwQzA3Qzc5IC8qIFdlYktpdE9mZmxp
bmVBdWRpb0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDgzMUI2MTc1MjQ5OUE1OUQwMEMwN0M3OSAvKiBXZWJLaXRPZmZsaW5lQXVkaW9Db250
ZXh0LmggKi87IH07CiAJCTgzMjE1MDdFMUYyN0VBMUIwMDk1QjEzNiAvKiBOYXZpZ2F0b3JCZWFj
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgzMjE1
MDdCMUYyN0VBMTUwMDk1QjEzNiAvKiBOYXZpZ2F0b3JCZWFjb24uaCAqLzsgfTsKQEAgLTEwMzI3
LDYgKzEwMzI4LDkgQEAKIAkJODMxMDJCMjUxRjlFQURDMjAwRTQwNEI5IC8qIEpTRXh0ZW5kYWJs
ZU1lc3NhZ2VFdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0V4dGVuZGFibGVNZXNzYWdlRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk4MzExQzAwMDFGQUEyRTg5MDBFM0M4RTUgLyogU1dTZXJ2ZXJKb2JRdWV1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTV1NlcnZlckpvYlF1ZXVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMxMUMwMDIxRkFBMkU4OTAwRTNDOEU1IC8qIFNX
U2VydmVySm9iUXVldWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1dTZXJ2
ZXJKb2JRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MzE5OEZCQjI0QTE2
MEMxMDA0MjBCMDUgLyogQmFzZUF1ZGlvQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBCYXNlQXVkaW9Db250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJODMxOThGQkQyNEExNjBDMTAwNDIwQjA1IC8qIEJhc2VBdWRpb0NvbnRleHQu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEJhc2VBdWRpb0NvbnRleHQuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk4MzE5OEZCRTI0QTE2MEMxMDA0MjBCMDUgLyogQmFzZUF1
ZGlvQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlQXVkaW9D
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgzMUI2MTZGMjQ5OUE1OTgw
MEMwN0M3OSAvKiBXZWJLaXRBdWRpb1Bhbm5lck5vZGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFdlYktpdEF1ZGlvUGFubmVyTm9kZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTgzMUI2MTcxMjQ5OUE1OTkwMEMwN0M3OSAvKiBXZWJLaXRBdWRpb1Bhbm5lck5vZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0QXVkaW9QYW5uZXJO
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODMxQjYxNzIyNDk5QTU5QTAw
QzA3Qzc5IC8qIFdlYktpdE9mZmxpbmVBdWRpb0NvbnRleHQuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFdlYktpdE9mZmxpbmVBdWRpb0NvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjkyOTEsNiArMjkyOTUsOSBAQAogCQkJCUZEOEM0NkVBMTU0NjA4RTcwMEE1
OTEwQyAvKiBBdWRpb1NjaGVkdWxlZFNvdXJjZU5vZGUuaCAqLywKIAkJCQlGREIwNTJERDE1NjFB
NDJDMDBCNTAwRDYgLyogQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwICovLAogCQkJCUZEQjA1MkRF
MTU2MUE0MkMwMEI1MDBENiAvKiBBdWRpb1N1bW1pbmdKdW5jdGlvbi5oICovLAorCQkJCTgzMTk4
RkJCMjRBMTYwQzEwMDQyMEIwNSAvKiBCYXNlQXVkaW9Db250ZXh0LmNwcCAqLywKKwkJCQk4MzE5
OEZCRTI0QTE2MEMxMDA0MjBCMDUgLyogQmFzZUF1ZGlvQ29udGV4dC5oICovLAorCQkJCTgzMTk4
RkJEMjRBMTYwQzEwMDQyMEIwNSAvKiBCYXNlQXVkaW9Db250ZXh0LmlkbCAqLywKIAkJCQlGRDMx
NUZEQTEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFkRFNQS2VybmVsLmNwcCAqLywKIAkJCQlGRDMx
NUZEQjEyQjAyNjc2MDBDMUEzNTkgLyogQmlxdWFkRFNQS2VybmVsLmggKi8sCiAJCQkJRkRDNTRG
MDExMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZpbHRlck5vZGUuY3BwICovLApAQCAtMjk4NTUs
NiArMjk4NjIsNyBAQAogCQkJCTUxQTFCODdEMjA4N0M0QzAwMDk3OUE3NSAvKiBCYWNrRm9yd2Fy
ZEl0ZW1JZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzEyNEVFODBDMjY0MUNEMDA5
RTIzNDkgLyogQmFyUHJvcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDYwQkI2MTYxRDBBMUJGMDAw
MjIxODEyIC8qIEJhc2U2NFV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJODMxOThGQkYy
NEExNjBERDAwNDIwQjA1IC8qIEJhc2VBdWRpb0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQxMkRFRjFGMjNBOTE4QTMwMEQ4NDBGNiAvKiBCYXNlQXVkaW9TaGFyZWRVbml0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkzNzlFNjFDQTEyNkNBNUM0MDBCNjNFOEQgLyogQmFzZUJ1dHRvbklucHV0
VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5RTYxQ0MxMjZDQTVDNDAwQjYzRThEIC8qIEJh
c2VDaGVja2FibGVJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvV2ViQ29yZUJ1aWx0aW5OYW1lcy5oCmluZGV4IDY3MDMzNDc5YTIyYmJi
MmYzY2ExYTZkYzQ3MDhjNjFhMmUxN2MzMGUuLjg0Yzk4ZTZmNDRkYjBkNGQ0Y2E1NTcwZTc1OTA3
M2QxZjgxYWNlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1dlYkNv
cmVCdWlsdGluTmFtZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9XZWJDb3Jl
QnVpbHRpbk5hbWVzLmgKQEAgLTUzLDYgKzUzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IG1hY3JvKEF1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZSkgXAogICAgIG1hY3JvKEF1dGhl
bnRpY2F0b3JBdHRlc3RhdGlvblJlc3BvbnNlKSBcCiAgICAgbWFjcm8oQXV0aGVudGljYXRvclJl
c3BvbnNlKSBcCisgICAgbWFjcm8oQmFzZUF1ZGlvQ29udGV4dCkgXAogICAgIG1hY3JvKEJlZm9y
ZUxvYWRFdmVudCkgXAogICAgIG1hY3JvKEJsb2JFdmVudCkgXAogICAgIG1hY3JvKENhY2hlKSBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXRGYWN0b3J5LmluIGIv
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0RmFjdG9yeS5pbgppbmRleCBhMTU0YjQ0NWEx
M2FkNDc2OTYyOWQ5ZjdkOTM3N2E5ZGYxNTBmN2FjLi5lNWI0YWVkZTEzMTU4NDhkYmFlOGE4NDg4
ZjAyN2JkMzU2NmZiNWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJn
ZXRGYWN0b3J5LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFRhcmdldEZhY3Rvcnku
aW4KQEAgLTUsOCArNSw4IEBAIHVzZU5hbWVzcGFjZUFzU3VmZml4PXRydWUKIEFib3J0U2lnbmFs
CiBBcHBsZVBheVNlc3Npb24gY29uZGl0aW9uYWw9QVBQTEVfUEFZCiBBdWRpb05vZGUgY29uZGl0
aW9uYWw9V0VCX0FVRElPCi1BdWRpb0NvbnRleHQgY29uZGl0aW9uYWw9V0VCX0FVRElPCiBBdWRp
b1RyYWNrTGlzdCBjb25kaXRpb25hbD1WSURFTworQmFzZUF1ZGlvQ29udGV4dCBjb25kaXRpb25h
bD1XRUJfQVVESU8KIENsaXBib2FyZAogRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGUKIERPTUFw
cGxpY2F0aW9uQ2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAzNDFm
ZWYxYTcwOTUxMzgyMzhlMDE0ZTRjOGNmNGMzYzkxNTkxODVkLi42NzIxODcyMGE2YWFjM2QyYmZk
M2I1MzIxMjAxYTJhNTdkMTYyYTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CkBAIC0yNzksNyArMjc5LDcgQEAKICNlbmRpZgogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKLSNp
bmNsdWRlICJBdWRpb0NvbnRleHQuaCIKKyNpbmNsdWRlICJCYXNlQXVkaW9Db250ZXh0LmgiCiAj
aW5jbHVkZSAiV2ViS2l0QXVkaW9Db250ZXh0LmgiCiAjZW5kaWYKIApAQCAtNDI5OSwxMCArNDI5
OSwxMCBAQCB2b2lkIEludGVybmFsczo6c2VuZE1lZGlhQ29udHJvbEV2ZW50KE1lZGlhQ29udHJv
bEV2ZW50IGV2ZW50KQogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TRVNTSU9OKQogCiAjaWYgRU5B
QkxFKFdFQl9BVURJTykKLXZvaWQgSW50ZXJuYWxzOjpzZXRBdWRpb0NvbnRleHRSZXN0cmljdGlv
bnMoY29uc3QgVmFyaWFudDxSZWZQdHI8QXVkaW9Db250ZXh0PiwgUmVmUHRyPFdlYktpdEF1ZGlv
Q29udGV4dD4+JiBjb250ZXh0VmFyaWFudCwgU3RyaW5nVmlldyByZXN0cmljdGlvbnNTdHJpbmcp
Cit2b2lkIEludGVybmFsczo6c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKGNvbnN0IFZhcmlh
bnQ8UmVmUHRyPEJhc2VBdWRpb0NvbnRleHQ+LCBSZWZQdHI8V2ViS2l0QXVkaW9Db250ZXh0Pj4m
IGNvbnRleHRWYXJpYW50LCBTdHJpbmdWaWV3IHJlc3RyaWN0aW9uc1N0cmluZykKIHsKICAgICBS
ZWZQdHI8QXVkaW9Db250ZXh0QmFzZT4gY29udGV4dDsKLSAgICBzd2l0Y2hPbihjb250ZXh0VmFy
aWFudCwgWyZdKFJlZlB0cjxBdWRpb0NvbnRleHQ+IGVudHJ5KSB7CisgICAgc3dpdGNoT24oY29u
dGV4dFZhcmlhbnQsIFsmXShSZWZQdHI8QmFzZUF1ZGlvQ29udGV4dD4gZW50cnkpIHsKICAgICAg
ICAgY29udGV4dCA9IGVudHJ5OwogICAgIH0sIFsmXShSZWZQdHI8V2ViS2l0QXVkaW9Db250ZXh0
PiBlbnRyeSkgewogICAgICAgICBjb250ZXh0ID0gZW50cnk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaAppbmRleCBkZGE5Yzg5MDU2Y2ZiZDExY2RiNzY3N2U3YmUyOWE2M2QyYjY2ZDk2Li5k
YWE5NGM4M2VlZjg3MDEwN2U1MTcwZWYzNmZiOTY3N2ZkYWEyMTZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmgKQEAgLTUxLDggKzUxLDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQW5pbWF0aW9uVGltZWxpbmU7Ci1jbGFzcyBBdWRpb0NvbnRleHQ7CiBjbGFzcyBBdWRp
b1RyYWNrOworY2xhc3MgQmFzZUF1ZGlvQ29udGV4dDsKIGNsYXNzIENhY2hlU3RvcmFnZUNvbm5l
Y3Rpb247CiBjbGFzcyBET01SZWN0OwogY2xhc3MgRE9NUmVjdExpc3Q7CkBAIC02NzYsNyArNjc2
LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgIHZvaWQg
c2V0QXVkaW9Db250ZXh0UmVzdHJpY3Rpb25zKGNvbnN0IFZhcmlhbnQ8UmVmUHRyPEF1ZGlvQ29u
dGV4dD4sIFJlZlB0cjxXZWJLaXRBdWRpb0NvbnRleHQ+PiYsIFN0cmluZ1ZpZXcgcmVzdHJpY3Rp
b25zU3RyaW5nKTsKKyAgICB2b2lkIHNldEF1ZGlvQ29udGV4dFJlc3RyaWN0aW9ucyhjb25zdCBW
YXJpYW50PFJlZlB0cjxCYXNlQXVkaW9Db250ZXh0PiwgUmVmUHRyPFdlYktpdEF1ZGlvQ29udGV4
dD4+JiwgU3RyaW5nVmlldyByZXN0cmljdGlvbnNTdHJpbmcpOwogICAgIHZvaWQgdXNlTW9ja0F1
ZGlvRGVzdGluYXRpb25Db2NvYSgpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmlkbAppbmRleCAwZWIwZjE1YWJkMGM4NTQwN2MwMTE1ODMxODQ2YjZkYTE3MGNiOTE2Li5h
NTYxYjk3ZWMwNWM1MDc4M2NhMGZlN2FhNTE4ZWUzYTQ5MjMwMjRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaWRsCkBAIC02NzcsNyArNjc3LDcgQEAgZW51bSBDb21wb3NpdGluZ1Bv
bGljeSB7CiAgICAgW0NvbmRpdGlvbmFsPVZJREVPLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBz
ZXRNZWRpYVNlc3Npb25SZXN0cmljdGlvbnMoRE9NU3RyaW5nIG1lZGlhVHlwZSwgRE9NU3RyaW5n
IHJlc3RyaWN0aW9ucyk7CiAgICAgW0NvbmRpdGlvbmFsPVZJREVPLCBNYXlUaHJvd0V4Y2VwdGlv
bl0gRE9NU3RyaW5nIG1lZGlhU2Vzc2lvblJlc3RyaWN0aW9ucyhET01TdHJpbmcgbWVkaWFUeXBl
KTsKICAgICBbQ29uZGl0aW9uYWw9VklERU9dIHZvaWQgc2V0TWVkaWFFbGVtZW50UmVzdHJpY3Rp
b25zKEhUTUxNZWRpYUVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHJlc3RyaWN0aW9ucyk7Ci0g
ICAgW0NvbmRpdGlvbmFsPVdFQl9BVURJT10gdm9pZCBzZXRBdWRpb0NvbnRleHRSZXN0cmljdGlv
bnMoKEF1ZGlvQ29udGV4dCBvciBXZWJLaXRBdWRpb0NvbnRleHQpIGNvbnRleHQsIERPTVN0cmlu
ZyByZXN0cmljdGlvbnMpOworICAgIFtDb25kaXRpb25hbD1XRUJfQVVESU9dIHZvaWQgc2V0QXVk
aW9Db250ZXh0UmVzdHJpY3Rpb25zKChCYXNlQXVkaW9Db250ZXh0IG9yIFdlYktpdEF1ZGlvQ29u
dGV4dCkgY29udGV4dCwgRE9NU3RyaW5nIHJlc3RyaWN0aW9ucyk7CiAgICAgW0NvbmRpdGlvbmFs
PVZJREVPLCBNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBwb3N0UmVtb3RlQ29udHJvbENvbW1hbmQo
RE9NU3RyaW5nIGNvbW1hbmQsIG9wdGlvbmFsIHVucmVzdHJpY3RlZCBmbG9hdCBhcmd1bWVudCA9
IDApOwogICAgIFtDb25kaXRpb25hbD1XSVJFTEVTU19QTEFZQkFDS19UQVJHRVRdIHZvaWQgc2V0
TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7CiAg
ICAgW0NvbmRpdGlvbmFsPVdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCwgTWF5VGhyb3dFeGNlcHRp
b25dIHZvaWQgc2V0TW9ja01lZGlhUGxheWJhY2tUYXJnZXRQaWNrZXJTdGF0ZShET01TdHJpbmcg
ZGV2aWNlTmFtZSwgRE9NU3RyaW5nIGRldmljZVN0YXRlKTsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hh
bmdlTG9nCmluZGV4IGE3ZTI0MWI5YTkzZDU1MTI1MGRhYWE3NzE1ZDVlOTEyMzEyMzMxYTEuLjFm
MjVhN2RhYzkwY2JmYTc2Y2RiNTYwNWE5YjUxMDVmYjQ1YzNjNGMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
dzNjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA2LTIyICBDaHJpcyBEdW1leiAg
PGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIEJhc2VBdWRpb0NvbnRleHQg
aW50ZXJmYWNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTM0OTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWJhc2VsaW5lIFdQVCB0ZXN0IG5vdyB0aGF0IG1vcmUgY2hlY2tzIGFyZSBwYXNzaW5nLgor
CisgICAgICAgICogd2ViLXBsYXRmb3JtLXRlc3RzL3dlYmF1ZGlvL2lkbGhhcm5lc3MuaHR0cHMu
d2luZG93LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wNi0yMiAgQ2xhcmsgV2FuZyAgPGNsYXJrX3dh
bmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZGVkIGdldEZsb2F0VGltZURvbWFpbkRhdGEgbWV0
aG9kIHRvIEFuYWx5c2VyTm9kZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJhdWRpby9pZGxoYXJuZXNzLmh0dHBzLndpbmRvdy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YmF1ZGlvL2lkbGhhcm5lc3MuaHR0cHMud2luZG93LWV4cGVjdGVkLnR4dAppbmRleCBjNjhhNGNi
NDM5ZjE2Nzk0M2I1MjU0MGJiMmY4MmYxNjQ5MWYzMzhlLi5jZDk0ZDU3NjZhNzM4M2ZhZmZiZjZm
NmE3YzY5M2Y3OTllZmNhZjMzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mv
d2ViLXBsYXRmb3JtLXRlc3RzL3dlYmF1ZGlvL2lkbGhhcm5lc3MuaHR0cHMud2luZG93LWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYmF1ZGlvL2lkbGhhcm5lc3MuaHR0cHMud2luZG93LWV4cGVjdGVkLnR4dApAQCAtOSw0MiAr
OSw0MiBAQCBQQVNTIEVsZW1lbnQgaW5jbHVkZXMgUGFyZW50Tm9kZTogbWVtYmVyIG5hbWVzIGFy
ZSB1bmlxdWUKIFBBU1MgRWxlbWVudCBpbmNsdWRlcyBOb25Eb2N1bWVudFR5cGVDaGlsZE5vZGU6
IG1lbWJlciBuYW1lcyBhcmUgdW5pcXVlIAogUEFTUyBFbGVtZW50IGluY2x1ZGVzIENoaWxkTm9k
ZTogbWVtYmVyIG5hbWVzIGFyZSB1bmlxdWUgCiBQQVNTIEVsZW1lbnQgaW5jbHVkZXMgU2xvdHRh
YmxlOiBtZW1iZXIgbmFtZXMgYXJlIHVuaXF1ZSAKLUZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRl
cmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2Ugb2JqZWN0IGFzc2Vy
dF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRp
b0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1G
QUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGggYXNzZXJ0X293bl9w
cm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4
dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZBSUwgQmFz
ZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2Ugb2JqZWN0IG5hbWUgYXNzZXJ0X293bl9wcm9wZXJ0eTog
c2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgZXhwZWN0
ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZBSUwgQmFzZUF1ZGlvQ29u
dGV4dCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJv
dG90eXBlIG9iamVjdCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3du
IHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlv
Q29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogZXhpc3Rl
bmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgImNvbnN0
cnVjdG9yIiBwcm9wZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUg
b3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1
ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogZXhp
c3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1
bnNjb3BhYmxlcyBwcm9wZXJ0eSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhh
dmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFz
ZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTog
YXR0cmlidXRlIGRlc3RpbmF0aW9uIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3Qg
aGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJC
YXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNl
OiBhdHRyaWJ1dGUgc2FtcGxlUmF0ZSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90
IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAi
QmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFj
ZTogYXR0cmlidXRlIGN1cnJlbnRUaW1lIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBu
b3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5
ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJm
YWNlOiBhdHRyaWJ1dGUgbGlzdGVuZXIgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5v
dCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkg
IkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZh
Y2U6IGF0dHJpYnV0ZSBzdGF0ZSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhh
dmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFz
ZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTog
YXR0cmlidXRlIGF1ZGlvV29ya2xldCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90
IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAi
QmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFj
ZTogYXR0cmlidXRlIG9uc3RhdGVjaGFuZ2UgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2Vz
IG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgZXhwZWN0ZWQgcHJvcGVy
dHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRl
cmZhY2U6IG9wZXJhdGlvbiBjcmVhdGVBbmFseXNlcigpIGFzc2VydF9vd25fcHJvcGVydHk6IHNl
bGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVk
IHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRl
eHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlQmlxdWFkRmlsdGVyKCkgYXNzZXJ0X293bl9w
cm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4
dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZBSUwgQmFz
ZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBjcmVhdGVCdWZmZXIodW5zaWduZWQg
bG9uZywgdW5zaWduZWQgbG9uZywgZmxvYXQpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9l
cyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3Bl
cnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50
ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlQnVmZmVyU291cmNlKCkgYXNzZXJ0X293bl9wcm9wZXJ0
eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgZXhw
ZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZBSUwgQmFzZUF1ZGlv
Q29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBjcmVhdGVDaGFubmVsTWVyZ2VyKG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBv
d24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVk
aW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVy
YXRpb24gY3JlYXRlQ2hhbm5lbFNwbGl0dGVyKG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcpIGFzc2Vy
dF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRp
b0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1G
QUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlQ29uc3RhbnRT
b3VyY2UoKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3Bl
cnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4
dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNy
ZWF0ZUNvbnZvbHZlcigpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBv
d24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVk
aW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVy
YXRpb24gY3JlYXRlRGVsYXkob3B0aW9uYWwgZG91YmxlKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBz
ZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3Rl
ZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250
ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUR5bmFtaWNzQ29tcHJlc3NvcigpIGFzc2Vy
dF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRp
b0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1G
QUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlR2FpbigpIGFz
c2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VB
dWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5n
Ci1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlSUlSRmls
dGVyKHNlcXVlbmNlPGRvdWJsZT4sIHNlcXVlbmNlPGRvdWJsZT4pIGFzc2VydF9vd25fcHJvcGVy
dHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4
cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRp
b0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlT3NjaWxsYXRvcigpIGFzc2VydF9v
d25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0Nv
bnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCi1GQUlM
IEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlUGFubmVyKCkgYXNz
ZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1
ZGlvQ29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcK
LUZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBjcmVhdGVQZXJpb2Rp
Y1dhdmUoc2VxdWVuY2U8ZmxvYXQ+LCBzZXF1ZW5jZTxmbG9hdD4sIG9wdGlvbmFsIFBlcmlvZGlj
V2F2ZUNvbnN0cmFpbnRzKSBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUg
b3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1
ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3Bl
cmF0aW9uIGNyZWF0ZVNjcmlwdFByb2Nlc3NvcihvcHRpb25hbCB1bnNpZ25lZCBsb25nLCBvcHRp
b25hbCB1bnNpZ25lZCBsb25nLCBvcHRpb25hbCB1bnNpZ25lZCBsb25nKSBhc3NlcnRfb3duX3By
b3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0
IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgbWlzc2luZwotRkFJTCBCYXNl
QXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZVN0ZXJlb1Bhbm5lcigpIGFz
c2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VB
dWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5n
Ci1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlV2F2ZVNo
YXBlcigpIGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBub3QgaGF2ZSBvd24gcHJvcGVy
dHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0
IiBtaXNzaW5nCi1GQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gZGVj
b2RlQXVkaW9EYXRhKEFycmF5QnVmZmVyLCBvcHRpb25hbCBEZWNvZGVTdWNjZXNzQ2FsbGJhY2s/
LCBvcHRpb25hbCBEZWNvZGVFcnJvckNhbGxiYWNrPykgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2Vs
ZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgZXhwZWN0ZWQg
cHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKLUZBSUwgQXVkaW9Db250ZXh0IGlu
dGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QgYXNz
ZXJ0X293bl9wcm9wZXJ0eTogc2VsZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1
ZGlvQ29udGV4dCIgZXhwZWN0ZWQgcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcK
K1BBU1MgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGll
cyBvZiBpbnRlcmZhY2Ugb2JqZWN0IAorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZSBv
YmplY3QgbGVuZ3RoIAorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZSBvYmplY3QgbmFt
ZSAKK1BBU1MgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVy
dGllcyBvZiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCAKK1BBU1MgQmFzZUF1ZGlvQ29udGV4
dCBpbnRlcmZhY2U6IGV4aXN0ZW5jZSBhbmQgcHJvcGVydGllcyBvZiBpbnRlcmZhY2UgcHJvdG90
eXBlIG9iamVjdCdzICJjb25zdHJ1Y3RvciIgcHJvcGVydHkgCitQQVNTIEJhc2VBdWRpb0NvbnRl
eHQgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3Rv
dHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHByb3BlcnR5IAorUEFTUyBCYXNlQXVkaW9Db250
ZXh0IGludGVyZmFjZTogYXR0cmlidXRlIGRlc3RpbmF0aW9uIAorUEFTUyBCYXNlQXVkaW9Db250
ZXh0IGludGVyZmFjZTogYXR0cmlidXRlIHNhbXBsZVJhdGUgCitQQVNTIEJhc2VBdWRpb0NvbnRl
eHQgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgY3VycmVudFRpbWUgCitQQVNTIEJhc2VBdWRpb0NvbnRl
eHQgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgbGlzdGVuZXIgCitQQVNTIEJhc2VBdWRpb0NvbnRleHQg
aW50ZXJmYWNlOiBhdHRyaWJ1dGUgc3RhdGUgCitGQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJm
YWNlOiBhdHRyaWJ1dGUgYXVkaW9Xb3JrbGV0IGFzc2VydF90cnVlOiBUaGUgcHJvdG90eXBlIG9i
amVjdCBtdXN0IGhhdmUgYSBwcm9wZXJ0eSAiYXVkaW9Xb3JrbGV0IiBleHBlY3RlZCB0cnVlIGdv
dCBmYWxzZQorUEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogYXR0cmlidXRlIG9uc3Rh
dGVjaGFuZ2UgCitQQVNTIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3Jl
YXRlQW5hbHlzZXIoKSAKK1BBU1MgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlv
biBjcmVhdGVCaXF1YWRGaWx0ZXIoKSAKK0ZBSUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6
IG9wZXJhdGlvbiBjcmVhdGVCdWZmZXIodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgZmxv
YXQpIGFzc2VydF9lcXVhbHM6IHByb3BlcnR5IGhhcyB3cm9uZyAubGVuZ3RoIGV4cGVjdGVkIDMg
YnV0IGdvdCAyCitQQVNTIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3Jl
YXRlQnVmZmVyU291cmNlKCkgCitQQVNTIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVy
YXRpb24gY3JlYXRlQ2hhbm5lbE1lcmdlcihvcHRpb25hbCB1bnNpZ25lZCBsb25nKSAKK1BBU1Mg
QmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBjcmVhdGVDaGFubmVsU3BsaXR0
ZXIob3B0aW9uYWwgdW5zaWduZWQgbG9uZykgCitGQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJm
YWNlOiBvcGVyYXRpb24gY3JlYXRlQ29uc3RhbnRTb3VyY2UoKSBhc3NlcnRfb3duX3Byb3BlcnR5
OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9iamVjdCBtaXNzaW5nIG5vbi1zdGF0aWMgb3BlcmF0aW9u
IGV4cGVjdGVkIHByb3BlcnR5ICJjcmVhdGVDb25zdGFudFNvdXJjZSIgbWlzc2luZworUEFTUyBC
YXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUNvbnZvbHZlcigpIAor
UEFTUyBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZURlbGF5KG9w
dGlvbmFsIGRvdWJsZSkgCitQQVNTIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRp
b24gY3JlYXRlRHluYW1pY3NDb21wcmVzc29yKCkgCitQQVNTIEJhc2VBdWRpb0NvbnRleHQgaW50
ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlR2FpbigpIAorRkFJTCBCYXNlQXVkaW9Db250ZXh0IGlu
dGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZUlJUkZpbHRlcihzZXF1ZW5jZTxkb3VibGU+LCBzZXF1
ZW5jZTxkb3VibGU+KSBhc3NlcnRfb3duX3Byb3BlcnR5OiBpbnRlcmZhY2UgcHJvdG90eXBlIG9i
amVjdCBtaXNzaW5nIG5vbi1zdGF0aWMgb3BlcmF0aW9uIGV4cGVjdGVkIHByb3BlcnR5ICJjcmVh
dGVJSVJGaWx0ZXIiIG1pc3NpbmcKK1BBU1MgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9w
ZXJhdGlvbiBjcmVhdGVPc2NpbGxhdG9yKCkgCitQQVNTIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJm
YWNlOiBvcGVyYXRpb24gY3JlYXRlUGFubmVyKCkgCitQQVNTIEJhc2VBdWRpb0NvbnRleHQgaW50
ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlUGVyaW9kaWNXYXZlKHNlcXVlbmNlPGZsb2F0Piwgc2Vx
dWVuY2U8ZmxvYXQ+LCBvcHRpb25hbCBQZXJpb2RpY1dhdmVDb25zdHJhaW50cykgCitQQVNTIEJh
c2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gY3JlYXRlU2NyaXB0UHJvY2Vzc29y
KG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcsIG9wdGlvbmFsIHVuc2lnbmVkIGxvbmcsIG9wdGlvbmFs
IHVuc2lnbmVkIGxvbmcpIAorRkFJTCBCYXNlQXVkaW9Db250ZXh0IGludGVyZmFjZTogb3BlcmF0
aW9uIGNyZWF0ZVN0ZXJlb1Bhbm5lcigpIGFzc2VydF9vd25fcHJvcGVydHk6IGludGVyZmFjZSBw
cm90b3R5cGUgb2JqZWN0IG1pc3Npbmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJv
cGVydHkgImNyZWF0ZVN0ZXJlb1Bhbm5lciIgbWlzc2luZworUEFTUyBCYXNlQXVkaW9Db250ZXh0
IGludGVyZmFjZTogb3BlcmF0aW9uIGNyZWF0ZVdhdmVTaGFwZXIoKSAKK0ZBSUwgQmFzZUF1ZGlv
Q29udGV4dCBpbnRlcmZhY2U6IG9wZXJhdGlvbiBkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIs
IG9wdGlvbmFsIERlY29kZVN1Y2Nlc3NDYWxsYmFjaz8sIG9wdGlvbmFsIERlY29kZUVycm9yQ2Fs
bGJhY2s/KSBhc3NlcnRfZXF1YWxzOiBwcm9wZXJ0eSBoYXMgd3JvbmcgLmxlbmd0aCBleHBlY3Rl
ZCAxIGJ1dCBnb3QgMgorUEFTUyBBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5k
IHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIG9iamVjdCAKIFBBU1MgQXVkaW9Db250ZXh0IGludGVy
ZmFjZSBvYmplY3QgbGVuZ3RoIAogUEFTUyBBdWRpb0NvbnRleHQgaW50ZXJmYWNlIG9iamVjdCBu
YW1lIAotRkFJTCBBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRp
ZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QgYXNzZXJ0X293bl9wcm9wZXJ0eTogc2Vs
ZiBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29udGV4dCIgZXhwZWN0ZWQg
cHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIG1pc3NpbmcKK1BBU1MgQXVkaW9Db250ZXh0IGlu
dGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUg
b2JqZWN0IAogUEFTUyBBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3Bl
cnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3RydWN0b3IiIHByb3Bl
cnR5IAogUEFTUyBBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRp
ZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyBAQHVuc2NvcGFibGVzIHByb3BlcnR5
IAogRkFJTCBBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgYmFzZUxhdGVuY3kgYXNz
ZXJ0X3RydWU6IFRoZSBwcm90b3R5cGUgb2JqZWN0IG11c3QgaGF2ZSBhIHByb3BlcnR5ICJiYXNl
TGF0ZW5jeSIgZXhwZWN0ZWQgdHJ1ZSBnb3QgZmFsc2UKQEAgLTEwNiwxNyArMTA2LDE3IEBAIEZB
SUwgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGNvbnRleHQgbXVzdCBpbmhlcml0IHByb3Bl
cnR5ICJjcmVhdGVTdGVyZW9QYW5uCiBQQVNTIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBj
b250ZXh0IG11c3QgaW5oZXJpdCBwcm9wZXJ0eSAiY3JlYXRlV2F2ZVNoYXBlcigpIiB3aXRoIHRo
ZSBwcm9wZXIgdHlwZSAKIFBBU1MgQmFzZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IGNvbnRleHQg
bXVzdCBpbmhlcml0IHByb3BlcnR5ICJkZWNvZGVBdWRpb0RhdGEoQXJyYXlCdWZmZXIsIG9wdGlv
bmFsIERlY29kZVN1Y2Nlc3NDYWxsYmFjaz8sIG9wdGlvbmFsIERlY29kZUVycm9yQ2FsbGJhY2s/
KSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUgCiBGQUlMIEJhc2VBdWRpb0NvbnRleHQgaW50ZXJmYWNl
OiBjYWxsaW5nIGRlY29kZUF1ZGlvRGF0YShBcnJheUJ1ZmZlciwgb3B0aW9uYWwgRGVjb2RlU3Vj
Y2Vzc0NhbGxiYWNrPywgb3B0aW9uYWwgRGVjb2RlRXJyb3JDYWxsYmFjaz8pIG9uIGNvbnRleHQg
d2l0aCB0b28gZmV3IGFyZ3VtZW50cyBtdXN0IHRocm93IFR5cGVFcnJvciBhc3NlcnRfdW5yZWFj
aGVkOiBUaHJvd3MgIlR5cGVFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMiIGluc3RlYWQgb2Yg
cmVqZWN0aW5nIHByb21pc2UgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCi1GQUlMIE9mZmxpbmVB
dWRpb0NvbnRleHQgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJm
YWNlIG9iamVjdCBhc3NlcnRfb3duX3Byb3BlcnR5OiBzZWxmIGRvZXMgbm90IGhhdmUgb3duIHBy
b3BlcnR5ICJCYXNlQXVkaW9Db250ZXh0IiBleHBlY3RlZCBwcm9wZXJ0eSAiQmFzZUF1ZGlvQ29u
dGV4dCIgbWlzc2luZworUEFTUyBPZmZsaW5lQXVkaW9Db250ZXh0IGludGVyZmFjZTogZXhpc3Rl
bmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBvYmplY3QgCiBGQUlMIE9mZmxpbmVBdWRp
b0NvbnRleHQgaW50ZXJmYWNlIG9iamVjdCBsZW5ndGggYXNzZXJ0X2VxdWFsczogd3JvbmcgdmFs
dWUgZm9yIE9mZmxpbmVBdWRpb0NvbnRleHQubGVuZ3RoIGV4cGVjdGVkIDEgYnV0IGdvdCAzCiBQ
QVNTIE9mZmxpbmVBdWRpb0NvbnRleHQgaW50ZXJmYWNlIG9iamVjdCBuYW1lIAotRkFJTCBPZmZs
aW5lQXVkaW9Db250ZXh0IGludGVyZmFjZTogZXhpc3RlbmNlIGFuZCBwcm9wZXJ0aWVzIG9mIGlu
dGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0IGFzc2VydF9vd25fcHJvcGVydHk6IHNlbGYgZG9lcyBu
b3QgaGF2ZSBvd24gcHJvcGVydHkgIkJhc2VBdWRpb0NvbnRleHQiIGV4cGVjdGVkIHByb3BlcnR5
ICJCYXNlQXVkaW9Db250ZXh0IiBtaXNzaW5nCitQQVNTIE9mZmxpbmVBdWRpb0NvbnRleHQgaW50
ZXJmYWNlOiBleGlzdGVuY2UgYW5kIHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBv
YmplY3QgCiBQQVNTIE9mZmxpbmVBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBleGlzdGVuY2UgYW5k
IHByb3BlcnRpZXMgb2YgaW50ZXJmYWNlIHByb3RvdHlwZSBvYmplY3QncyAiY29uc3RydWN0b3Ii
IHByb3BlcnR5IAogUEFTUyBPZmZsaW5lQXVkaW9Db250ZXh0IGludGVyZmFjZTogZXhpc3RlbmNl
IGFuZCBwcm9wZXJ0aWVzIG9mIGludGVyZmFjZSBwcm90b3R5cGUgb2JqZWN0J3MgQEB1bnNjb3Bh
YmxlcyBwcm9wZXJ0eSAKLUZBSUwgT2ZmbGluZUF1ZGlvQ29udGV4dCBpbnRlcmZhY2U6IG9wZXJh
dGlvbiBzdGFydFJlbmRlcmluZygpIGFzc2VydF9vd25fcHJvcGVydHk6IGludGVyZmFjZSBwcm90
b3R5cGUgb2JqZWN0IG1pc3Npbmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0ZWQgcHJvcGVy
dHkgInN0YXJ0UmVuZGVyaW5nIiBtaXNzaW5nCi1GQUlMIE9mZmxpbmVBdWRpb0NvbnRleHQgaW50
ZXJmYWNlOiBvcGVyYXRpb24gcmVzdW1lKCkgYXNzZXJ0X293bl9wcm9wZXJ0eTogaW50ZXJmYWNl
IHByb3RvdHlwZSBvYmplY3QgbWlzc2luZyBub24tc3RhdGljIG9wZXJhdGlvbiBleHBlY3RlZCBw
cm9wZXJ0eSAicmVzdW1lIiBtaXNzaW5nCi1GQUlMIE9mZmxpbmVBdWRpb0NvbnRleHQgaW50ZXJm
YWNlOiBvcGVyYXRpb24gc3VzcGVuZChkb3VibGUpIGFzc2VydF9vd25fcHJvcGVydHk6IGludGVy
ZmFjZSBwcm90b3R5cGUgb2JqZWN0IG1pc3Npbmcgbm9uLXN0YXRpYyBvcGVyYXRpb24gZXhwZWN0
ZWQgcHJvcGVydHkgInN1c3BlbmQiIG1pc3NpbmcKK0ZBSUwgT2ZmbGluZUF1ZGlvQ29udGV4dCBp
bnRlcmZhY2U6IG9wZXJhdGlvbiBzdGFydFJlbmRlcmluZygpIGFzc2VydF91bnJlYWNoZWQ6IFRo
cm93cyAiVHlwZUVycm9yOiBDYW4gb25seSBjYWxsIE9mZmxpbmVBdWRpb0NvbnRleHQuc3RhcnRS
ZW5kZXJpbmcgb24gaW5zdGFuY2VzIG9mIE9mZmxpbmVBdWRpb0NvbnRleHQiIGluc3RlYWQgb2Yg
cmVqZWN0aW5nIHByb21pc2UgUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlCitQQVNTIE9mZmxpbmVB
dWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gcmVzdW1lKCkgCitGQUlMIE9mZmxpbmVB
dWRpb0NvbnRleHQgaW50ZXJmYWNlOiBvcGVyYXRpb24gc3VzcGVuZChkb3VibGUpIGFzc2VydF9l
cXVhbHM6IHByb3BlcnR5IGhhcyB3cm9uZyAubGVuZ3RoIGV4cGVjdGVkIDEgYnV0IGdvdCAwCiBG
QUlMIE9mZmxpbmVBdWRpb0NvbnRleHQgaW50ZXJmYWNlOiBhdHRyaWJ1dGUgbGVuZ3RoIGFzc2Vy
dF90cnVlOiBUaGUgcHJvdG90eXBlIG9iamVjdCBtdXN0IGhhdmUgYSBwcm9wZXJ0eSAibGVuZ3Ro
IiBleHBlY3RlZCB0cnVlIGdvdCBmYWxzZQotRkFJTCBPZmZsaW5lQXVkaW9Db250ZXh0IGludGVy
ZmFjZTogYXR0cmlidXRlIG9uY29tcGxldGUgYXNzZXJ0X293bl9wcm9wZXJ0eTogZXhwZWN0ZWQg
cHJvcGVydHkgIm9uY29tcGxldGUiIG1pc3NpbmcKK1BBU1MgT2ZmbGluZUF1ZGlvQ29udGV4dCBp
bnRlcmZhY2U6IGF0dHJpYnV0ZSBvbmNvbXBsZXRlIAogUEFTUyBPZmZsaW5lQXVkaW9Db250ZXh0
IG11c3QgYmUgcHJpbWFyeSBpbnRlcmZhY2Ugb2YgbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMSwg
MSwgc2FtcGxlX3JhdGUpIAogUEFTUyBTdHJpbmdpZmljYXRpb24gb2YgbmV3IE9mZmxpbmVBdWRp
b0NvbnRleHQoMSwgMSwgc2FtcGxlX3JhdGUpIAogUEFTUyBPZmZsaW5lQXVkaW9Db250ZXh0IGlu
dGVyZmFjZTogbmV3IE9mZmxpbmVBdWRpb0NvbnRleHQoMSwgMSwgc2FtcGxlX3JhdGUpIG11c3Qg
aW5oZXJpdCBwcm9wZXJ0eSAic3RhcnRSZW5kZXJpbmcoKSIgd2l0aCB0aGUgcHJvcGVyIHR5cGUg
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>