<?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>203078</bug_id>
          
          <creation_ts>2019-10-17 01:23:09 -0700</creation_ts>
          <short_desc>[MSE][GStreamer] Revert WebKitMediaSrc rework temporarily</short_desc>
          <delta_ts>2019-10-21 06:29:00 -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>WebKitGTK</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></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alicia Boya García">aboya</reporter>
          <assigned_to name="Alicia Boya García">aboya</assigned_to>
          <cc>annulen</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jbedard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1580911</commentid>
    <comment_count>0</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2019-10-17 01:23:09 -0700</bug_when>
    <thetext>While the WebKitMediaSrc rework fixed a number of tests and introduced design improvements in MSE, it also exposed a number of bugs related to the playbin3 switch.

Fixing these has been turned tricky, so in order to not keep known user-facing bugs, I&apos;m reverting it for now until a workable solution is available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580931</commentid>
    <comment_count>1</comment_count>
      <attachid>381188</attachid>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2019-10-17 03:54:51 -0700</bug_when>
    <thetext>Created attachment 381188
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580936</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2019-10-17 04:56:41 -0700</bug_when>
    <thetext>Is this related to bug 201824 ? Is GStreamer 1.16 still required for MSE after this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581412</commentid>
    <comment_count>3</comment_count>
    <who name="Alicia Boya García">aboya</who>
    <bug_when>2019-10-18 08:34:50 -0700</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #2)
&gt; Is this related to bug 201824 ? Is GStreamer 1.16 still required for MSE
&gt; after this patch?

It will be no longer required. But once the issues are fixed and a new iteration landed it will be required again (either that or 1.14 with appropriate backport patches).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581842</commentid>
    <comment_count>4</comment_count>
      <attachid>381188</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-21 06:28:57 -0700</bug_when>
    <thetext>Comment on attachment 381188
Patch

Clearing flags on attachment: 381188

Committed r251365: &lt;https://trac.webkit.org/changeset/251365&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581843</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-21 06:29:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381188</attachid>
            <date>2019-10-17 03:54:51 -0700</date>
            <delta_ts>2019-10-21 06:28:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203078-20191017125449.patch</filename>
            <type>text/plain</type>
            <size>171468</size>
            <attacher name="Alicia Boya García">aboya</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxMTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDAzMDY4YWJmZjhiMWFi
NTMyNWE1NTY1NjQ4MjVkYmM4MDU2NjFlZC4uZDFmZGQ1NTk5Mzg5MDVlOTBlOGVmNTE4ZDg1OTAw
ZDU0Y2E4MmJjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4OCBAQAorMjAxOS0xMC0xNyAgQWxp
Y2lhIEJveWEgR2FyY8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW01TRV1bR1N0
cmVhbWVyXSBSZXZlcnQgV2ViS2l0TWVkaWFTcmMgcmV3b3JrIHRlbXBvcmFyaWx5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDMwNzgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGlsZSB0aGUgV2ViS2l0
TWVkaWFTcmMgcmV3b3JrIGZpeGVkIGEgbnVtYmVyIG9mIHRlc3RzIGFuZCBpbnRyb2R1Y2VkCisg
ICAgICAgIGRlc2lnbiBpbXByb3ZlbWVudHMgaW4gTVNFLCBpdCBhbHNvIGV4cG9zZWQgYSBudW1i
ZXIgb2YgYnVncyByZWxhdGVkCisgICAgICAgIHRvIHRoZSBwbGF5YmluMyBzd2l0Y2guCisKKyAg
ICAgICAgRml4aW5nIHRoZXNlIGhhcyBiZWVuIHR1cm5lZCB0cmlja3ksIHNvIGluIG9yZGVyIHRv
IG5vdCBrZWVwIGtub3duCisgICAgICAgIHVzZXItZmFjaW5nIGJ1Z3MsIEknbSByZXZlcnRpbmcg
aXQgZm9yIG5vdyB1bnRpbCBhIHdvcmthYmxlIHNvbHV0aW9uCisgICAgICAgIGlzIGF2YWlsYWJs
ZS4KKworICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHA6CisgICAgICAgIChX
VEY6OnJlZkdQdHI8R3N0TWluaU9iamVjdD4pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpkZXJl
ZkdQdHI8R3N0TWluaU9iamVjdD4pOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBsYXliYWNrUG9zaXRpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpj
aGFuZ2VQaXBlbGluZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6cGF1c2VkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlVHJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZW5hYmxlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dmlkZW9TaW5rQ2Fwc0No
YW5nZWRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om5vdGlmeVBsYXllck9mVmlkZW9DYXBzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c291cmNlU2V0dXApOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpoYW5kbGVTeW5jTWVzc2FnZSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4p
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6Y29uZmlndXJlUGxheVNpbmspOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjppbnZhbGlkYXRlQ2FjaGVkUG9zaXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXJCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lckJhc2U6Om5hdHVyYWxTaXplIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNpemVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnRyaWdnZXJSZXBhaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5hdHVyYWxTaXpl
RnJvbUNhcHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyQmFzZTo6ZG9TYW1wbGVzSGF2ZURpZmZlcmVudE5hdHVyYWxTaXplcyBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTYW1wbGVHU3RyZWFtZXI6Ok1lZGlhU2FtcGxlR1N0cmVhbWVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjphcHBzaW5rTmV3U2FtcGxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjpjb25uZWN0RGVtdXhlclNyY1BhZFRvQXBwc2lu
ayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBl
bGluZS5oOgorICAgICAgICAoV2ViQ29yZTo6QXBwZW5kUGlwZWxpbmU6OmFwcHNpbmtDYXBzKToK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGVuZFBpcGVsaW5lOjp0cmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpBcHBlbmRQaXBlbGluZTo6c3RyZWFtVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp+TWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OnBhdXNlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vlayk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmNvbmZpZ3VyZVBsYXlTaW5rKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y2hhbmdlUGlwZWxpbmVTdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6Om5v
dGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWF5YmVGaW5pc2hTZWVrKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dXBkYXRlUGxheWJhY2tSYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6c2Vla2lu
ZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0U6OnNldFJlYWR5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNlZWtDb21wbGV0ZWQpOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzb3VyY2VTZXR1cCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnVwZGF0ZVN0
YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OmFzeW5jU3RhdGVDaGFuZ2VEb25lKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6bWVkaWFTb3VyY2VDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1bmJsb2NrRHVyYXRpb25DaGFuZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZHVyYXRp
b25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6dHJhY2tEZXRlY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6Om1hcmtFbmRPZlN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmN1cnJlbnRNZWRpYVRpbWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpwbGF5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
cmVwb3J0U2Vla0NvbXBsZXRlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmRpZEVuZCk6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJN
U0UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291
cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNl
Q2xpZW50R1N0cmVhbWVyTVNFOjphZGRTb3VyY2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U6Om1hcmtFbmRPZlN0cmVhbSk6CisgICAgICAg
IChXZWJDb3JlOjpNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTo6cmVtb3ZlZEZyb21NZWRp
YVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1T
RTo6Zmx1c2gpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJN
U0U6OmVucXVldWVTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXJNU0U6OmFsbFNhbXBsZXNJblRyYWNrRW5xdWV1ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U6OmlzUmVhZHlGb3JNb3JlU2FtcGxlcyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1T
RTo6bm90aWZ5Q2xpZW50V2hlblJlYWR5Rm9yTW9yZVNhbXBsZXMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3Ry
ZWFtZXJNU0UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01l
ZGlhU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0
cmVhbWVyOjptYXJrRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VH
U3RyZWFtZXI6OnVubWFya0VuZE9mU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlR1N0cmVhbWVyOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2Vla0NvbXBsZXRlZCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZUdTdHJlYW1lci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoZ2V0U3RyZWFtQnlUcmFja0lkKToKKyAgICAgICAgKGdldFN0cmVhbUJ5
U291cmNlQnVmZmVyUHJpdmF0ZSk6CisgICAgICAgIChwdXNoU2FtcGxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrUGlwZWxpbmU6OnNldFdlYktpdE1lZGlhU3JjKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXliYWNrUGlwZWxpbmU6OndlYktpdE1lZGlhU3JjKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXliYWNrUGlwZWxpbmU6OmFkZFNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF5YmFja1BpcGVsaW5lOjpyZW1vdmVTb3VyY2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxheWJhY2tQaXBlbGluZTo6YXR0YWNoVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tQaXBlbGluZTo6cmVhdHRhY2hUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFj
a1BpcGVsaW5lOjpub3RpZnlEdXJhdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
eWJhY2tQaXBlbGluZTo6bWFya0VuZE9mU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXli
YWNrUGlwZWxpbmU6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXliYWNrUGlwZWxpbmU6
OmVucXVldWVTYW1wbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxheWJhY2tQaXBlbGluZTo6YWxs
U2FtcGxlc0luVHJhY2tFbnF1ZXVlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF5YmFja1BpcGVs
aW5lOjpwaXBlbGluZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9QbGF5YmFja1BpcGVsaW5lLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuaC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyUHJpdmF0
ZUdTdHJlYW1lcjo6ZW5xdWV1ZVNhbXBsZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXJQcml2YXRlR1N0cmVhbWVyOjppc1JlYWR5Rm9yTW9yZVNhbXBsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6c2V0UmVhZHlGb3JNb3JlU2FtcGxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpub3Rp
ZnlSZWFkeUZvck1vcmVTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclBy
aXZhdGVHU3RyZWFtZXI6Om5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
L1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKGRpc2FibGVkQXBwc3Jj
TmVlZERhdGEpOgorICAgICAgICAoZGlzYWJsZWRBcHBzcmNFbm91Z2hEYXRhKToKKyAgICAgICAg
KGRpc2FibGVkQXBwc3JjU2Vla0RhdGEpOgorICAgICAgICAoZW5hYmxlZEFwcHNyY0Vub3VnaERh
dGEpOgorICAgICAgICAoZW5hYmxlZEFwcHNyY1NlZWtEYXRhKToKKyAgICAgICAgKGdldFN0cmVh
bUJ5QXBwc3JjKToKKyAgICAgICAgKHdlYmtpdE1lZGlhU3JjQ2hhaW4pOgorICAgICAgICAod2Vi
a2l0X21lZGlhX3NyY19pbml0KToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjRmluYWxpemUpOgor
ICAgICAgICAod2ViS2l0TWVkaWFTcmNTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRNZWRp
YVNyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjRG9Bc3luY1N0YXJ0KToK
KyAgICAgICAgKHdlYktpdE1lZGlhU3JjRG9Bc3luY0RvbmUpOgorICAgICAgICAod2ViS2l0TWVk
aWFTcmNDaGFuZ2VTdGF0ZSk6CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0dldFNpemUpOgorICAg
ICAgICAod2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJlbnQpOgorICAgICAgICAod2ViS2l0TWVk
aWFTcmNVcGRhdGVQcmVzZW50YXRpb25TaXplKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjTGlu
a1N0cmVhbVRvU3JjUGFkKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjTGlua1NvdXJjZVBhZCk6
CisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0ZyZWVTdHJlYW0pOgorICAgICAgICAod2ViS2l0TWVk
aWFTcmNDaGVja0FsbFRyYWNrc0NvbmZpZ3VyZWQpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNV
cmlHZXRUeXBlKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjR2V0UHJvdG9jb2xzKToKKyAgICAg
ICAgKHdlYktpdE1lZGlhU3JjR2V0VXJpKToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjU2V0VXJp
KToKKyAgICAgICAgKHdlYktpdE1lZGlhU3JjVXJpSGFuZGxlckluaXQpOgorICAgICAgICAoc2Vl
a05lZWRzRGF0YU1haW5UaHJlYWQpOgorICAgICAgICAobm90aWZ5UmVhZHlGb3JNb3JlU2FtcGxl
c01haW5UaHJlYWQpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZXRNZWRpYVBsYXllclByaXZh
dGUpOgorICAgICAgICAod2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMpOgorICAgICAg
ICAod2ViS2l0TWVkaWFTcmNQcmVwYXJlU2Vlayk6CisgICAgICAgIChXZWJLaXRNZWRpYVNyY1By
aXZhdGU6OnN0cmVhbUJ5TmFtZSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAg
ICAgICAoV1RGOjpyZWZHUHRyPFdlYktpdE1lZGlhU3JjUGFkPik6IERlbGV0ZWQuCisgICAgICAg
IChXVEY6OmRlcmVmR1B0cjxXZWJLaXRNZWRpYVNyY1BhZD4pOiBEZWxldGVkLgorICAgICAgICAo
d2Via2l0X21lZGlhX3NyY19wYWRfY2xhc3NfaW5pdCk6IERlbGV0ZWQuCisgICAgICAgIChTdHJl
YW06OlN0cmVhbSk6IERlbGV0ZWQuCisgICAgICAgIChTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM6
OlN0cmVhbWluZ01lbWJlcnMpOiBEZWxldGVkLgorICAgICAgICAoU3RyZWFtOjpTdHJlYW1pbmdN
ZW1iZXJzOjpkdXJhdGlvbkVucXVldWVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKGZpbmRQ
aXBlbGluZSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJraXRfbWVkaWFfc3JjX2NsYXNzX2luaXQp
OiBEZWxldGVkLgorICAgICAgICAoZGVidWdQcm9iZSk6IERlbGV0ZWQuCisgICAgICAgIChjb3B5
Q29sbGVjdGlvbkFuZEFkZFN0cmVhbSk6IERlbGV0ZWQuCisgICAgICAgIChjb3B5Q29sbGVjdGlv
bldpdGhvdXRTdHJlYW0pOiBEZWxldGVkLgorICAgICAgICAoZ3N0U3RyZWFtVHlwZSk6IERlbGV0
ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0FkZFN0cmVhbSk6IERlbGV0ZWQuCisgICAgICAg
ICh3ZWJLaXRNZWRpYVNyY1JlbW92ZVN0cmVhbSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRN
ZWRpYVNyY0FjdGl2YXRlTW9kZSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1Bh
ZExpbmtlZCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1N0cmVhbU5vdGlmeUxv
d1dhdGVyTGV2ZWwpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVkaWFTcmNMb29wKTogRGVs
ZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhU3JjRW5xdWV1ZU9iamVjdCk6IERlbGV0ZWQuCisg
ICAgICAgICh3ZWJLaXRNZWRpYVNyY0VucXVldWVTYW1wbGUpOiBEZWxldGVkLgorICAgICAgICAo
d2ViS2l0TWVkaWFTcmNFbnF1ZXVlRXZlbnQpOiBEZWxldGVkLgorICAgICAgICAod2ViS2l0TWVk
aWFTcmNFbmRPZlN0cmVhbSk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0lzUmVh
ZHlGb3JNb3JlU2FtcGxlcyk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYVNyY05vdGlm
eVdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKTogRGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlh
U3JjU3RyZWFtRmx1c2hTdGFydCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYVNyY1N0
cmVhbUZsdXNoU3RvcCk6IERlbGV0ZWQuCisgICAgICAgICh3ZWJLaXRNZWRpYVNyY0ZsdXNoKTog
RGVsZXRlZC4KKyAgICAgICAgKHdlYktpdE1lZGlhU3JjU2Vlayk6IERlbGV0ZWQuCisgICAgICAg
IChjb3VudFN0cmVhbXNPZlR5cGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVh
bWVyUHJpdmF0ZS5oOiBBZGRlZC4KKwogMjAxOS0xMC0xNSAgQWxleCBDaHJpc3RlbnNlbiAgPGFj
aHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFBhc3MgQ09SUy1lbmFibGVkIHNjaGVt
ZXMgdGhyb3VnaCBXZWJQcm9jZXNzIGluc3RlYWQgb2YgaGF2aW5nIHRoZW0gTmV0d29ya1Byb2Nl
c3MtZ2xvYmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKaW5kZXggZjkz
Y2U2YjAxZTMyNzRhZDA5ZTAyZDM4ODZmYWQ4MDE5YzEwMzNkYS4uZjI0MGVjN2FmMTAzYmVjYWIz
ZTc3NDY5YWUzMDI2YTY5NTE2OTA4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1l
ci5jbWFrZQpAQCAtMzIsNiArMzIsNyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJf
QVVESU8pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL01lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmNwcAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21z
ZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFt
ZXIuY3BwCmluZGV4IDY2OWEwZWIyN2E4NTVjZjY5NjgyOTEyZDA0ZWMxOTk2ZTU5YmQ3ZmQuLmIx
NWY3ZjMyODAxOTEwYzhkNDZhOTIwODI2MmE5ZDM4ZDE2YTM4MjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5jcHAKQEAgLTI1LDI1ICsyNSw2IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi10
ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0TWluaU9iamVjdD4gYWRvcHRHUmVmKEdzdE1pbmlPYmplY3Qq
IHB0cikKLXsKLSAgICByZXR1cm4gR1JlZlB0cjxHc3RNaW5pT2JqZWN0PihwdHIsIEdSZWZQdHJB
ZG9wdCk7Ci19Ci0KLXRlbXBsYXRlPD4gR3N0TWluaU9iamVjdCogcmVmR1B0cjxHc3RNaW5pT2Jq
ZWN0PihHc3RNaW5pT2JqZWN0KiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgZ3N0X21p
bmlfb2JqZWN0X3JlZihwdHIpOwotCi0gICAgcmV0dXJuIHB0cjsKLX0KLQotdGVtcGxhdGU8PiB2
b2lkIGRlcmVmR1B0cjxHc3RNaW5pT2JqZWN0PihHc3RNaW5pT2JqZWN0KiBwdHIpCi17Ci0gICAg
aWYgKHB0cikKLSAgICAgICAgZ3N0X21pbmlfb2JqZWN0X3VucmVmKHB0cik7Ci19Ci0KIHRlbXBs
YXRlIDw+IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRvcHRHUmVmKEdzdEVsZW1lbnQqIHB0cikKIHsK
ICAgICBBU1NFUlQoIXB0ciB8fCAhZ19vYmplY3RfaXNfZmxvYXRpbmcocHRyKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdT
dHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dS
ZWZQdHJHU3RyZWFtZXIuaAppbmRleCAzZDA0YjFiYjZhZWU2ZmRjZTM2YjhmMzZhMTc4NDlmN2Qz
NzQ0ZTgyLi5hMTk2NWQ0NTg0MmFhMWJhMzgwMjQ2Mjg5YzIxZDdlZDFhNjIyZmU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdT
dHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HUmVmUHRyR1N0cmVhbWVyLmgKQEAgLTM0LDEwICszNCw2IEBAIHR5cGVkZWYgc3RydWN0IF9H
c3RHTENvbnRleHQgR3N0R0xDb250ZXh0OwogCiBuYW1lc3BhY2UgV1RGIHsKIAotdGVtcGxhdGU8
PiBHUmVmUHRyPEdzdE1pbmlPYmplY3Q+IGFkb3B0R1JlZihHc3RNaW5pT2JqZWN0KiBwdHIpOwot
dGVtcGxhdGU8PiBHc3RNaW5pT2JqZWN0KiByZWZHUHRyPEdzdE1pbmlPYmplY3Q+KEdzdE1pbmlP
YmplY3QqIHB0cik7Ci10ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdzdE1pbmlPYmplY3Q+KEdz
dE1pbmlPYmplY3QqIHB0cik7Ci0KIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RFbGVtZW50PiBhZG9w
dEdSZWYoR3N0RWxlbWVudCogcHRyKTsKIHRlbXBsYXRlPD4gR3N0RWxlbWVudCogcmVmR1B0cjxH
c3RFbGVtZW50PihHc3RFbGVtZW50KiBwdHIpOwogdGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxH
c3RFbGVtZW50PihHc3RFbGVtZW50KiBwdHIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCAxYTQ3YzE1MmNlYmQ2MGUzYWY0MzQ4ZjRlYmQ4
NjE1OTE3M2YzZTBlLi43ZjI5NDk1Mjk1MmRmYjQ1ZWFmMTc5YjBkY2JiYTlmZjExMmMyOWVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAt
MzU2LDE2ICszNTYsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y29tbWl0
TG9hZCgpCiBNZWRpYVRpbWUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwbGF5YmFja1Bv
c2l0aW9uKCkgY29uc3QKIHsKICAgICBHU1RfVFJBQ0VfT0JKRUNUKHBpcGVsaW5lKCksICJpc0Vu
ZFJlYWNoZWQ6ICVzLCBzZWVraW5nOiAlcywgc2Vla1RpbWU6ICVzIiwgYm9vbEZvclByaW50aW5n
KG1faXNFbmRSZWFjaGVkKSwgYm9vbEZvclByaW50aW5nKG1fc2Vla2luZyksIG1fc2Vla1RpbWUu
dG9TdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAobV9pc0VuZFJlYWNoZWQpIHsKLSAg
ICAgICAgLy8gUG9zaXRpb24gcXVlcmllcyBvbiBhIHBpcGVsaW5lIHRoYXQgaXMgbm90IHJ1bm5p
bmcgcmV0dXJuIDAuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgcHJlcm9sbGluZwotICAgICAg
ICAvLyBmcm9tIGEgc2VlayBpcyBzdGlsbCBub3QgZG9uZSBhbmQgYWZ0ZXIgRU9TLiBJbiB0aGVz
ZSBjYXNlcyB3ZSB3YW50IHRvIHJlcG9ydCB0aGUgc2VlayB0aW1lIG9yIHRoZQotICAgICAgICAv
LyBkdXJhdGlvbiByZXNwZWN0aXZlbHkuCi0gICAgICAgIGlmIChtX3NlZWtpbmcpCi0gICAgICAg
ICAgICByZXR1cm4gbV9zZWVrVGltZTsKLQotICAgICAgICBNZWRpYVRpbWUgZHVyYXRpb24gPSBk
dXJhdGlvbk1lZGlhVGltZSgpOwotICAgICAgICByZXR1cm4gZHVyYXRpb24uaXNJbnZhbGlkKCkg
PyBNZWRpYVRpbWU6Onplcm9UaW1lKCkgOiBkdXJhdGlvbjsKLSAgICB9CisgICAgaWYgKG1faXNF
bmRSZWFjaGVkICYmIG1fc2Vla2luZykKKyAgICAgICAgcmV0dXJuIG1fc2Vla1RpbWU7CiAKICAg
ICAvLyBUaGlzIGNvbnN0YW50IHNob3VsZCByZW1haW4gbG93ZXIgdGhhbiBIVE1MTWVkaWFFbGVt
ZW50J3MgbWF4VGltZXVwZGF0ZUV2ZW50RnJlcXVlbmN5LgogICAgIHN0YXRpYyBjb25zdCBTZWNv
bmRzIHBvc2l0aW9uQ2FjaGVUaHJlc2hvbGQgPSAyMDBfbXM7CkBAIC00MjEsNyArNDEzLDcgQEAg
Ym9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNoYW5nZVBpcGVsaW5lU3RhdGUoR3N0
U3RhdGUgbmV3U3RhdGUpCiAgICAgICAgIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKGN1cnJl
bnRTdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHBlbmRpbmcpKTsKIAogI2lmIFVT
RShHU1RSRUFNRVJfR0wpCi0gICAgaWYgKGN1cnJlbnRTdGF0ZSA8PSBHU1RfU1RBVEVfUkVBRFkg
JiYgbmV3U3RhdGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkKKyAgICBpZiAoY3VycmVudFN0YXRlID09
IEdTVF9TVEFURV9SRUFEWSAmJiBuZXdTdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKQogICAgICAg
ICBlbnN1cmVHTFZpZGVvU2lua0NvbnRleHQoKTsKICNlbmRpZgogCkBAIC02NjcsMTAgKzY1OSwx
MCBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGF1c2VkKCkgY29uc3QKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEdzdFN0YXRlIHN0YXRlLCBwZW5kaW5n
OwotICAgIGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCAmc3RhdGUsICZw
ZW5kaW5nLCAwKTsKKyAgICBHc3RTdGF0ZSBzdGF0ZTsKKyAgICBnc3RfZWxlbWVudF9nZXRfc3Rh
dGUobV9waXBlbGluZS5nZXQoKSwgJnN0YXRlLCBudWxscHRyLCAwKTsKICAgICBib29sIHBhdXNl
ZCA9IHN0YXRlIDw9IEdTVF9TVEFURV9QQVVTRUQ7Ci0gICAgR1NUX0xPR19PQkpFQ1QocGlwZWxp
bmUoKSwgIlBhdXNlZDogJXMgKHBlbmRpbmcgc3RhdGU6ICVzKSIsIHRvU3RyaW5nKHBhdXNlZCku
dXRmOCgpLmRhdGEoKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworICAg
IEdTVF9MT0dfT0JKRUNUKHBpcGVsaW5lKCksICJQYXVzZWQ6ICVzIiwgdG9TdHJpbmcocGF1c2Vk
KS51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gcGF1c2VkOwogfQogCkBAIC03MTYsMTEgKzcw
OCwxMyBAQCBGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6
ZSgpIGNvbnN0CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogI2RlZmluZSBDUkVBVEVfVFJBQ0so
dHlwZSwgVHlwZSkgR19TVE1UX1NUQVJUIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
ICAgICBtX2hhcyMjVHlwZSA9IHRydWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBSZWZQdHI8VHlwZSMjVHJhY2tQcml2YXRlR1N0cmVhbWVy
PiB0cmFjayA9IFR5cGUjI1RyYWNrUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlKG1ha2VXZWFrUHRy
KCp0aGlzKSwgaSwgc3RyZWFtKTsgXAotICAgICAgICBtXyMjdHlwZSMjVHJhY2tzLmFkZCh0cmFj
ay0+aWQoKSwgdHJhY2spOyAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBtX3BsYXll
ci0+YWRkIyNUeXBlIyNUcmFjaygqdHJhY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgICBpZiAoZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2ZsYWdzKHN0cmVhbS5nZXQoKSkg
JiBHU1RfU1RSRUFNX0ZMQUdfU0VMRUNUKSBcCi0gICAgICAgICAgICBtX2N1cnJlbnQjI1R5cGUj
I1N0cmVhbUlkID0gU3RyaW5nKGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0uZ2V0KCkp
KTsgXAorICAgICAgICBpZiAoIXVzZU1lZGlhU291cmNlKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUmVmUHRyPFR5cGUjI1RyYWNrUHJp
dmF0ZUdTdHJlYW1lcj4gdHJhY2sgPSBUeXBlIyNUcmFja1ByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZShtYWtlV2Vha1B0cigqdGhpcyksIGksIHN0cmVhbSk7IFwKKyAgICAgICAgICAgIG1fIyN0eXBl
IyNUcmFja3MuYWRkKHRyYWNrLT5pZCgpLCB0cmFjayk7ICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICAgIG1fcGxheWVyLT5hZGQjI1R5cGUjI1RyYWNrKCp0cmFjayk7ICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGlmIChnc3Rfc3RyZWFtX2dldF9zdHJlYW1fZmxh
Z3Moc3RyZWFtLmdldCgpKSAmIEdTVF9TVFJFQU1fRkxBR19TRUxFQ1QpIFwKKyAgICAgICAgICAg
ICAgICBtX2N1cnJlbnQjI1R5cGUjI1N0cmVhbUlkID0gU3RyaW5nKGdzdF9zdHJlYW1fZ2V0X3N0
cmVhbV9pZChzdHJlYW0uZ2V0KCkpKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gR19TVE1U
X0VORAogI2Vsc2UKICNkZWZpbmUgQ1JFQVRFX1RSQUNLKHR5cGUsIFR5cGUpIEdfU1RNVF9TVEFS
VCB7IFwKQEAgLTczNCw4ICs3MjgsNiBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
cjo6dXBkYXRlVHJhY2tzKCkKIAogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlhU291
cmNlKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9z
aXplKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSk7Ci0gICAgR1NUX0RFQlVHX09CSkVDVChwaXBl
bGluZSgpLCAiSW5zcGVjdGluZyBzdHJlYW0gY29sbGVjdGlvbjogJXMgJSIgR1NUX1BUUl9GT1JN
QVQsCi0gICAgICAgIGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfdXBzdHJlYW1faWQobV9zdHJl
YW1Db2xsZWN0aW9uLmdldCgpKSwgbV9zdHJlYW1Db2xsZWN0aW9uLmdldCgpKTsKIAogICAgIGJv
b2wgb2xkSGFzQXVkaW8gPSBtX2hhc0F1ZGlvOwogICAgIGJvb2wgb2xkSGFzVmlkZW8gPSBtX2hh
c1ZpZGVvOwpAQCAtNzc1LDEzICs3NjcsMjEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnVwZGF0ZVRyYWNrcygpCiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjplbmFibGVUcmFjayhUcmFja1ByaXZhdGVCYXNlR1N0cmVhbWVyOjpUcmFja1R5cGUgdHJhY2tU
eXBlLCB1bnNpZ25lZCBpbmRleCkKIHsKKyAgICAvLyBGSVhNRTogUmVtb3ZlIGlzTWVkaWFTb3Vy
Y2UoKSB0ZXN0IGJlbG93IHdoZW4gZml4aW5nIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODI1MzEuCisgICAgaWYgKGlzTWVkaWFTb3VyY2UoKSkgeworICAgICAgICBH
U1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBdWRpby9WaWRlby9UZXh0IHRyYWNr
IHN3aXRjaGluZyBpcyBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGUgTVNFIGJhY2tlbmQuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWU7CiAg
ICAgY29uc3QgY2hhciogdHJhY2tUeXBlQXNTdHJpbmc7CiAgICAgVmVjdG9yPFN0cmluZz4gc2Vs
ZWN0ZWRTdHJlYW1zOwogICAgIFN0cmluZyBzZWxlY3RlZFN0cmVhbUlkOwogCisgICAgR3N0U3Ry
ZWFtKiBzdHJlYW0gPSBudWxscHRyOworCiAgICAgaWYgKCFtX2lzTGVnYWN5UGxheWJpbikgewot
ICAgICAgICBHc3RTdHJlYW0qIHN0cmVhbSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3Ry
ZWFtKG1fc3RyZWFtQ29sbGVjdGlvbi5nZXQoKSwgaW5kZXgpOworICAgICAgICBzdHJlYW0gPSBn
c3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbShtX3N0cmVhbUNvbGxlY3Rpb24uZ2V0KCks
IGluZGV4KTsKICAgICAgICAgaWYgKCFzdHJlYW0pIHsKICAgICAgICAgICAgIEdTVF9XQVJOSU5H
X09CSkVDVChwaXBlbGluZSgpLCAiTm8gc3RyZWFtIHRvIHNlbGVjdCBhdCBpbmRleCAldSIsIGlu
ZGV4KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTg2Miw4ICs4NjIsNyBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bm90aWZ5UGxheWVyT2ZWaWRlbygpCiAgICAgaWYgKFVO
TElLRUxZKCFtX3BpcGVsaW5lIHx8ICFtX3NvdXJjZSkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbik7Ci0gICAgQVNTRVJUKCFpc01lZGlhU291cmNlKCkp
OworICAgIEFTU0VSVChtX2lzTGVnYWN5UGxheWJpbiB8fCBpc01lZGlhU291cmNlKCkpOwogCiAg
ICAgZ2ludCBudW1UcmFja3MgPSAwOwogICAgIGJvb2wgdXNlTWVkaWFTb3VyY2UgPSBpc01lZGlh
U291cmNlKCk7CkBAIC05MTYsNiArOTE1LDE5IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvKCkKICAgICBtX3BsYXllci0+Y2xpZW50KCkubWVk
aWFQbGF5ZXJFbmdpbmVVcGRhdGVkKG1fcGxheWVyKTsKIH0KIAordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnZpZGVvU2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2soTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyKiBwbGF5ZXIpCit7CisgICAgcGxheWVyLT5tX25vdGlmaWVyLT5ub3Rp
ZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6VmlkZW9DYXBzQ2hhbmdlZCwgW3BsYXllcl0gewor
ICAgICAgICBwbGF5ZXItPm5vdGlmeVBsYXllck9mVmlkZW9DYXBzKCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlQbGF5ZXJPZlZpZGVvQ2Fw
cygpCit7CisgICAgbV92aWRlb1NpemUgPSBJbnRTaXplKCk7CisgICAgbV9wbGF5ZXItPmNsaWVu
dCgpLm1lZGlhUGxheWVyRW5naW5lVXBkYXRlZChtX3BsYXllcik7Cit9CisKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjphdWRpb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIqIHBsYXllcikKIHsKICAgICBwbGF5ZXItPm1fbm90aWZpZXItPm5vdGlm
eShNYWluVGhyZWFkTm90aWZpY2F0aW9uOjpBdWRpb0NoYW5nZWQsIFtwbGF5ZXJdIHsKQEAgLTE4
MzQsNyArMTg0Niw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwdXJnZU9s
ZERvd25sb2FkRmlsZXMoY29uc3QgY2hhciogZG93bmxvYWRGaWxlCiAKIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpzb3VyY2VTZXR1cChHc3RFbGVtZW50KiBzb3VyY2VFbGVtZW50
KQogewotICAgIEFTU0VSVCghaXNNZWRpYVNvdXJjZSgpKTsKICAgICBHU1RfREVCVUdfT0JKRUNU
KHBpcGVsaW5lKCksICJTb3VyY2UgZWxlbWVudCBzZXQtdXAgZm9yICVzIiwgR1NUX0VMRU1FTlRf
TkFNRShzb3VyY2VFbGVtZW50KSk7CiAKICAgICBpZiAoV0VCS0lUX0lTX1dFQl9TUkMobV9zb3Vy
Y2UuZ2V0KCkpICYmIEdTVF9PQkpFQ1RfUEFSRU5UKG1fc291cmNlLmdldCgpKSkKQEAgLTIwODUs
MjEgKzIwOTYsMTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0
YXRlcygpCiBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aGFuZGxlU3luY01lc3Nh
Z2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKIHsKICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNz
YWdlKSA9PSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09MTEVDVElPTiAmJiAhbV9pc0xlZ2FjeVBsYXli
aW4pIHsKLSAgICAgICAgLy8gR1N0cmVhbWVyIHdvcmthcm91bmQ6Ci0gICAgICAgIC8vIFVuZm9y
dHVuYXRlbHksIHdoZW4gd2UgaGF2ZSBhIHN0cmVhbS1jb2xsZWN0aW9uIGF3YXJlIHNvdXJjZSAo
bGlrZSBXZWJLaXRNZWRpYVNyYykgcGFyc2ViaW4gYW5kIGRlY29kZWJpbjMgZW1pdAotICAgICAg
ICAvLyB0aGVpciBvd24gc3RyZWFtLWNvbGxlY3Rpb24gbWVzc2FnZXMsIGJ1dCBsYXRlLCBhbmQg
c29tZXRpbWVzIHdpdGggZHVwbGljYXRlZCBzdHJlYW1zLiBMZXQncyBvbmx5IGxpc3RlbiBmb3IK
LSAgICAgICAgLy8gc3RyZWFtLWNvbGxlY3Rpb24gbWVzc2FnZXMgZnJvbSB0aGUgc291cmNlIGlu
IHRoZSBNU0UgY2FzZSB0byBhdm9pZCB0aGVzZSBpc3N1ZXMuCi0gICAgICAgIGlmIChpc01lZGlh
U291cmNlKCkgJiYgbWVzc2FnZS0+c3JjICE9IEdTVF9PQkpFQ1QobV9zb3VyY2UuZ2V0KCkpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KICAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xs
ZWN0aW9uPiBjb2xsZWN0aW9uOwogICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29s
bGVjdGlvbihtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7Ci0gICAgICAgIEFTU0VSVChj
b2xsZWN0aW9uKTsKLSAgICAgICAgbV9zdHJlYW1Db2xsZWN0aW9uLnN3YXAoY29sbGVjdGlvbik7
CiAKLSAgICAgICAgbV9ub3RpZmllci0+bm90aWZ5KE1haW5UaHJlYWROb3RpZmljYXRpb246OlN0
cmVhbUNvbGxlY3Rpb25DaGFuZ2VkLCBbdGhpc10gewotICAgICAgICAgICAgdGhpcy0+dXBkYXRl
VHJhY2tzKCk7Ci0gICAgICAgIH0pOworICAgICAgICBpZiAoY29sbGVjdGlvbikgeworICAgICAg
ICAgICAgbV9zdHJlYW1Db2xsZWN0aW9uLnN3YXAoY29sbGVjdGlvbik7CisgICAgICAgICAgICBt
X25vdGlmaWVyLT5ub3RpZnkoTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6U3RyZWFtQ29sbGVjdGlv
bkNoYW5nZWQsIFt0aGlzXSB7CisgICAgICAgICAgICAgICAgdGhpcy0+dXBkYXRlVHJhY2tzKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpoYW5kbGVTeW5jTWVzc2FnZShtZXNzYWdlKTsKQEAg
LTIzOTUsOSArMjQwMCwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3Jl
YXRlR1NUUGxheUJpbihjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJgogewogICAgIGNvbnN0
IGdjaGFyKiBwbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKIAotICAgIC8vIE1TRSBhbmQgTWVkaWFz
dHJlYW0gcmVxdWlyZSBwbGF5YmluMy4gUmVndWxhciBwbGF5YmFjayBjYW4gdXNlIHBsYXliaW4z
IG9uLWRlbWFuZCB3aXRoIHRoZQotICAgIC8vIFdFQktJVF9HU1RfVVNFX1BMQVlCSU4zIGVudmly
b25tZW50IHZhcmlhYmxlLgotICAgIGlmICgoaXNNZWRpYVNvdXJjZSgpIHx8IHVybC5wcm90b2Nv
bElzKCJtZWRpYXN0cmVhbSIpIHx8IGdfZ2V0ZW52KCJXRUJLSVRfR1NUX1VTRV9QTEFZQklOMyIp
KSkKKyAgICAvLyBNU0UgZG9lc24ndCBzdXBwb3J0IHBsYXliaW4zLiBNZWRpYXN0cmVhbSByZXF1
aXJlcyBwbGF5YmluMy4gUmVndWxhcgorICAgIC8vIHBsYXliYWNrIGNhbiB1c2UgcGxheWJpbjMg
b24tZGVtYW5kIHdpdGggdGhlIFdFQktJVF9HU1RfVVNFX1BMQVlCSU4zCisgICAgLy8gZW52aXJv
bm1lbnQgdmFyaWFibGUuCisgICAgaWYgKCghaXNNZWRpYVNvdXJjZSgpICYmIGdfZ2V0ZW52KCJX
RUJLSVRfR1NUX1VTRV9QTEFZQklOMyIpKSB8fCB1cmwucHJvdG9jb2xJcygibWVkaWFzdHJlYW0i
KSkKICAgICAgICAgcGxheWJpbk5hbWUgPSAicGxheWJpbjMiOwogCiAgICAgaWYgKG1fcGlwZWxp
bmUpIHsKQEAgLTI0ODAsNiArMjQ4Niw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmCiAKICAg
ICBnX29iamVjdF9zZXQobV9waXBlbGluZS5nZXQoKSwgInZpZGVvLXNpbmsiLCBjcmVhdGVWaWRl
b1NpbmsoKSwgImF1ZGlvLXNpbmsiLCBjcmVhdGVBdWRpb1NpbmsoKSwgbnVsbHB0cik7CiAKKyAg
ICBjb25maWd1cmVQbGF5U2luaygpOworCiAgICAgaWYgKG1fcHJlc2VydmVzUGl0Y2gpIHsKICAg
ICAgICAgR3N0RWxlbWVudCogc2NhbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInNjYWxl
dGVtcG8iLCBudWxscHRyKTsKIApAQCAtMjQ5OSw2ICsyNTA3LDEwIEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKGNvbnN0IFVSTCYgdXJsLCBjb25z
dCBTdHJpbmcmCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlRoZSB2
aWRlb2ZsaXAgZWxlbWVudCBpcyBtaXNzaW5nLCB2aWRlbyByb3RhdGlvbiBzdXBwb3J0IGlzIG5v
dyBkaXNhYmxlZC4gUGxlYXNlIGNoZWNrIHlvdXIgZ3N0LXBsdWdpbnMtZ29vZCBpbnN0YWxsYXRp
b24uIik7CiAgICAgfQorCisgICAgR1JlZlB0cjxHc3RQYWQ+IHZpZGVvU2lua1BhZCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3ZpZGVvU2luay5nZXQoKSwgInNpbmsi
KSk7CisgICAgaWYgKHZpZGVvU2lua1BhZCkKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKHZpZGVvU2lua1BhZC5nZXQoKSwgIm5vdGlmeTo6Y2FwcyIsIEdfQ0FMTEJBQ0sodmlkZW9T
aW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcjo6c2ltdWxhdGVBdWRpb0ludGVycnVwdGlvbigpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmgKaW5kZXggZTA0MTIzNTM3Y2NjOWU3Mzg4
MDFhNGIyMGUxNjc4MzY3NzQ1MGNhMy4uNTExMzI1ZTQ5ZmUzMzc5OWRkMGY1NTBhYTU2ZDhlOThk
MDY3ODVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
aApAQCAtMTE0LDEyICsxMTQsMTQgQEAgcHVibGljOgogCiAgICAgdm9pZCBsb2FkU3RhdGVDaGFu
Z2VkKCk7CiAgICAgdm9pZCB0aW1lQ2hhbmdlZCgpOworICAgIHZvaWQgZGlkRW5kKCk7CiAgICAg
dmlydHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOwogICAgIHZvaWQgbG9hZGluZ0ZhaWxlZChN
ZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlLCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSA9IE1lZGlh
UGxheWVyOjpIYXZlTm90aGluZywgYm9vbCBmb3JjZU5vdGlmaWNhdGlvbnMgPSBmYWxzZSk7CiAK
ICAgICB2aXJ0dWFsIHZvaWQgc291cmNlU2V0dXAoR3N0RWxlbWVudCopOwogCiAgICAgR3N0RWxl
bWVudCogYXVkaW9TaW5rKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNvbmZp
Z3VyZVBsYXlTaW5rKCkgeyB9CiAKICAgICB2b2lkIHNpbXVsYXRlQXVkaW9JbnRlcnJ1cHRpb24o
KSBvdmVycmlkZTsKIApAQCAtMjA0LDcgKzIwNiw3IEBAIHByb3RlY3RlZDoKICAgICBHc3RTdGF0
ZSBtX3JlcXVlc3RlZFN0YXRlOwogICAgIGJvb2wgbV9yZXNldFBpcGVsaW5lOwogICAgIGJvb2wg
bV9zZWVraW5nOwotICAgIGJvb2wgbV9zZWVrSXNQZW5kaW5nOyAvLyBTZXQgd2hlbiB0aGUgdXNl
ciByZXF1ZXN0cyBhIHNlZWsgYnV0IGdzdCBjYW4ndCBoYW5kbGUgaXQgeWV0LCBzbyBpdCdzIGRl
ZmVycmVkIHVudGlsIHdlJ3JlID49UEFVU0VELgorICAgIGJvb2wgbV9zZWVrSXNQZW5kaW5nOwog
ICAgIE1lZGlhVGltZSBtX3NlZWtUaW1lOwogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9zb3Vy
Y2U7CiAgICAgYm9vbCBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZDsKQEAgLTIxMiw2ICsyMTQs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZWFkeVRpbWVyRmlyZWQoKTsKIAogICAgIHZvaWQg
bm90aWZ5UGxheWVyT2ZWaWRlbygpOworICAgIHZvaWQgbm90aWZ5UGxheWVyT2ZWaWRlb0NhcHMo
KTsKICAgICB2b2lkIG5vdGlmeVBsYXllck9mQXVkaW8oKTsKIAogI2lmIEVOQUJMRShWSURFT19U
UkFDSykKQEAgLTIyMiwxMyArMjI1LDExIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGVuc3VyZUF1
ZGlvU291cmNlUHJvdmlkZXIoKTsKICAgICB2b2lkIHNldEF1ZGlvU3RyZWFtUHJvcGVydGllcyhH
T2JqZWN0Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRW5kKCk7Ci0gICAgdm9pZCBpbnZhbGlk
YXRlQ2FjaGVkUG9zaXRpb24oKSB7IG1fbGFzdFF1ZXJ5VGltZS5yZXNldCgpOyB9Ci0KICAgICBz
dGF0aWMgdm9pZCBzZXRBdWRpb1N0cmVhbVByb3BlcnRpZXNDYWxsYmFjayhNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIqLCBHT2JqZWN0Kik7CiAKICAgICBzdGF0aWMgdm9pZCBzb3VyY2VTZXR1
cENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciosIEdzdEVsZW1lbnQqKTsKICAg
ICBzdGF0aWMgdm9pZCB2aWRlb0NoYW5nZWRDYWxsYmFjayhNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIqKTsKKyAgICBzdGF0aWMgdm9pZCB2aWRlb1NpbmtDYXBzQ2hhbmdlZENhbGxiYWNrKE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwogICAgIHN0YXRpYyB2b2lkIGF1ZGlvQ2hhbmdl
ZENhbGxiYWNrKE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciopOwogI2lmIEVOQUJMRShWSURF
T19UUkFDSykKICAgICBzdGF0aWMgdm9pZCB0ZXh0Q2hhbmdlZENhbGxiYWNrKE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lckJhc2UuY3BwCmluZGV4IGQ2NDc4N2I1YzJkMGJmODk1OTY5NjZmZTJlOTJm
Njg2NzgzMTViNWUuLjdmMmIwNDFjMmFjMGNiZWQ2NjMwNmQwMjM2ZmY5YjVhNTUwOWY4ZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5j
cHAKQEAgLTU2MCw3ICs1NjAsNiBAQCBib29sIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJh
c2U6OmVuc3VyZUdzdEdMQ29udGV4dCgpCiAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSB2aWRl
bwogRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5hdHVyYWxTaXpl
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogI2lmIFVTRShHU1RSRUFN
RVJfSE9MRVBVTkNIKQogICAgIC8vIFdoZW4gdXNpbmcgdGhlIGhvbGVwdWNoIHdlIG1heSBub3Qg
YmUgYWJsZSB0byBnZXQgdGhlIHZpZGVvIGZyYW1lcyBzaXplLCBzbyB3ZSBjYW4ndCB1c2UKICAg
ICAvLyBpdC4gQnV0IHdlIG5lZWQgdG8gcmVwb3J0IHNvbWUgbm9uIGVtcHR5IG5hdHVyYWxTaXpl
IGZvciB0aGUgcGxheWVyJ3MgR3JhcGhpY3NMYXllcgpAQCAtNTc1LDcgKzU3NCw2IEBAIEZsb2F0
U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpuYXR1cmFsU2l6ZSgpIGNvbnN0
CiAgICAgICAgIHJldHVybiBtX3ZpZGVvU2l6ZTsKIAogICAgIGF1dG8gc2FtcGxlTG9ja2VyID0g
aG9sZExvY2sobV9zYW1wbGVNdXRleCk7Ci0KICAgICBpZiAoIUdTVF9JU19TQU1QTEUobV9zYW1w
bGUuZ2V0KCkpKQogICAgICAgICByZXR1cm4gRmxvYXRTaXplKCk7CiAKQEAgLTU4MywxNCArNTgx
LDYgQEAgRmxvYXRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6Om5hdHVyYWxT
aXplKCkgY29uc3QKICAgICBpZiAoIWNhcHMpCiAgICAgICAgIHJldHVybiBGbG9hdFNpemUoKTsK
IAotICAgIG1fdmlkZW9TaXplID0gbmF0dXJhbFNpemVGcm9tQ2FwcyhjYXBzKTsKLSAgICBHU1Rf
REVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJOYXR1cmFsIHNpemU6ICUuMGZ4JS4wZiIsIG1fdmlk
ZW9TaXplLndpZHRoKCksIG1fdmlkZW9TaXplLmhlaWdodCgpKTsKLSAgICByZXR1cm4gbV92aWRl
b1NpemU7Ci19Ci0KLUZsb2F0U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpu
YXR1cmFsU2l6ZUZyb21DYXBzKEdzdENhcHMqIGNhcHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGNh
cHMpOwogCiAgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEu
IFNlZQogICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01
OTY1NzEKQEAgLTY0MSw3ICs2MzEsOSBAQCBGbG9hdFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTo6bmF0dXJhbFNpemVGcm9tQ2FwcyhHc3RDYXBzKiBjYXBzKSBjbwogICAgICAg
ICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOwog
ICAgIH0KIAotICAgIHJldHVybiBGbG9hdFNpemUoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCksIHN0
YXRpY19jYXN0PGludD4oaGVpZ2h0KSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChwaXBlbGluZSgp
LCAiTmF0dXJhbCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFUICJ4JSIgR19HVUlOVDY0X0ZPUk1B
VCwgd2lkdGgsIGhlaWdodCk7CisgICAgbV92aWRlb1NpemUgPSBGbG9hdFNpemUoc3RhdGljX2Nh
c3Q8aW50Pih3aWR0aCksIHN0YXRpY19jYXN0PGludD4oaGVpZ2h0KSk7CisgICAgcmV0dXJuIG1f
dmlkZW9TaXplOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnNl
dFZvbHVtZShmbG9hdCB2b2x1bWUpCkBAIC02OTUsNiArNjg3LDExIEBAIE1lZGlhUGxheWVyOjpS
ZWFkeVN0YXRlIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lckJhc2U6OnJlYWR5U3RhdGUoKSBj
b25zdAogICAgIHJldHVybiBtX3JlYWR5U3RhdGU7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyQmFzZTo6c2l6ZUNoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6c2V0TXV0ZWQoYm9v
bCBtdXRlKQogewogICAgIGlmICghbV92b2x1bWVFbGVtZW50KQpAQCAtODI3LDI4ICs4MjQsMTIg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlOjpyZXBhaW50KCkKICAgICBt
X2RyYXdDb25kaXRpb24ubm90aWZ5T25lKCk7CiB9CiAKLWJvb2wgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyQmFzZTo6ZG9TYW1wbGVzSGF2ZURpZmZlcmVudE5hdHVyYWxTaXplcyhHc3RTYW1w
bGUqIHNhbXBsZUEsIEdzdFNhbXBsZSogc2FtcGxlQikgY29uc3QKLXsKLSAgICBBU1NFUlQoc2Ft
cGxlQSk7Ci0gICAgQVNTRVJUKHNhbXBsZUIpOwotCi0gICAgR3N0Q2FwcyogY2Fwc0EgPSBnc3Rf
c2FtcGxlX2dldF9jYXBzKHNhbXBsZUEpOwotICAgIEdzdENhcHMqIGNhcHNCID0gZ3N0X3NhbXBs
ZV9nZXRfY2FwcyhzYW1wbGVCKTsKLQotICAgIGlmIChMSUtFTFkoY2Fwc0EgPT0gY2Fwc0IpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbmF0dXJhbFNpemVGcm9tQ2Fwcyhj
YXBzQSkgIT0gbmF0dXJhbFNpemVGcm9tQ2FwcyhjYXBzQik7Ci19Ci0KIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyQmFzZTo6dHJpZ2dlclJlcGFpbnQoR3N0U2FtcGxlKiBzYW1wbGUp
CiB7CiAgICAgYm9vbCB0cmlnZ2VyUmVzaXplOwogICAgIHsKICAgICAgICAgYXV0byBzYW1wbGVM
b2NrZXIgPSBob2xkTG9jayhtX3NhbXBsZU11dGV4KTsKLSAgICAgICAgdHJpZ2dlclJlc2l6ZSA9
ICFtX3NhbXBsZSB8fCBkb1NhbXBsZXNIYXZlRGlmZmVyZW50TmF0dXJhbFNpemVzKG1fc2FtcGxl
LmdldCgpLCBzYW1wbGUpOwotICAgICAgICBpZiAodHJpZ2dlclJlc2l6ZSkKLSAgICAgICAgICAg
IG1fdmlkZW9TaXplID0gRmxvYXRTaXplKCk7IC8vIEZvcmNlIHJlLWNhbGN1bGF0aW9uIGluIG5l
eHQgY2FsbCB0byBuYXR1cmFsU2l6ZSgpLgorICAgICAgICB0cmlnZ2VyUmVzaXplID0gIW1fc2Ft
cGxlOwogICAgICAgICBtX3NhbXBsZSA9IHNhbXBsZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyQmFzZS5oCmluZGV4IDMxMmM3MDVhMTg1
ZDIxMzM4MzcxM2Q4NWNmMThiMDZmYjNjMjg3ZjIuLmFiNWE5M2RmNTZjOTE0NTM1MjU4ZDMxNGU3
YzJlNzQ2YTU5NmNmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJCYXNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lckJhc2UuaApAQCAtMTIyLDYgKzEyMiw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c2V0VmlzaWJsZShib29sKSBvdmVycmlkZSB7IH0KICAgICB2b2lkIHNldFNpemUoY29uc3QgSW50
U2l6ZSYpIG92ZXJyaWRlOworICAgIHZvaWQgc2l6ZUNoYW5nZWQoKTsKIAogICAgIC8vIFByZWZl
ciBNZWRpYVRpbWUgYmFzZWQgbWV0aG9kcyBvdmVyIGZsb2F0IGJhc2VkLgogICAgIGZsb2F0IGR1
cmF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZHVyYXRpb25NZWRpYVRpbWUoKS50b0Zs
b2F0KCk7IH0KQEAgLTI1MCw2ICsyNTEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBlbnVtIE1haW5U
aHJlYWROb3RpZmljYXRpb24gewogICAgICAgICBWaWRlb0NoYW5nZWQgPSAxIDw8IDAsCisgICAg
ICAgIFZpZGVvQ2Fwc0NoYW5nZWQgPSAxIDw8IDEsCiAgICAgICAgIEF1ZGlvQ2hhbmdlZCA9IDEg
PDwgMiwKICAgICAgICAgVm9sdW1lQ2hhbmdlZCA9IDEgPDwgMywKICAgICAgICAgTXV0ZUNoYW5n
ZWQgPSAxIDw8IDQsCkBAIC0yNjksMTEgKzI3MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIG11dGFibGUgTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKICAgICBJbnRTaXplIG1fc2l6ZTsKLQogICAg
IG11dGFibGUgTG9jayBtX3NhbXBsZU11dGV4OwogICAgIEdSZWZQdHI8R3N0U2FtcGxlPiBtX3Nh
bXBsZTsKLSAgICBtdXRhYmxlIEZsb2F0U2l6ZSBtX3ZpZGVvU2l6ZTsKIAorICAgIG11dGFibGUg
RmxvYXRTaXplIG1fdmlkZW9TaXplOwogICAgIGJvb2wgbV91c2luZ0ZhbGxiYWNrVmlkZW9TaW5r
IHsgZmFsc2UgfTsKICAgICBib29sIG1fcmVuZGVyaW5nQ2FuQmVBY2NlbGVyYXRlZCB7IGZhbHNl
IH07CiAKQEAgLTMxNSwxMCArMzE2LDYgQEAgcHJvdGVjdGVkOgogI2VuZGlmCiAKICAgICBPcHRp
b25hbDxHc3RWaWRlb0RlY29kZXJQbGF0Zm9ybT4gbV92aWRlb0RlY29kZXJQbGF0Zm9ybTsKLQot
cHJpdmF0ZToKLSAgICBGbG9hdFNpemUgbmF0dXJhbFNpemVGcm9tQ2FwcyhHc3RDYXBzKikgY29u
c3Q7Ci0gICAgYm9vbCBkb1NhbXBsZXNIYXZlRGlmZmVyZW50TmF0dXJhbFNpemVzKEdzdFNhbXBs
ZSogc2FtcGxlQSwgR3N0U2FtcGxlKiBzYW1wbGVCKSBjb25zdDsKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNhbXBs
ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFTYW1wbGVHU3RyZWFtZXIuY3BwCmluZGV4IDkxMmFhNWYyZmZkZjY3NjdmZTk2Nzc3
MDFjZTIwMmIyOWQ2YzVjNjMuLmY1YTdkZDY2ZDIxOGU0N2ZiZDU5YTIzOTRhOTE4YzUwZDI4YTU0
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVNhbXBsZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU2FtcGxlR1N0cmVhbWVyLmNwcApAQCAtNDMsNyArNDMs
NyBAQCBNZWRpYVNhbXBsZUdTdHJlYW1lcjo6TWVkaWFTYW1wbGVHU3RyZWFtZXIoR1JlZlB0cjxH
c3RTYW1wbGU+JiYgc2FtcGxlLCBjb25zdCBGbAogCiAgICAgYXV0byBjcmVhdGVNZWRpYVRpbWUg
PQogICAgICAgICBbXShHc3RDbG9ja1RpbWUgdGltZSkgLT4gTWVkaWFUaW1lIHsKLSAgICAgICAg
ICAgIHJldHVybiBNZWRpYVRpbWUodGltZSwgR1NUX1NFQ09ORCk7CisgICAgICAgICAgICByZXR1
cm4gTWVkaWFUaW1lKEdTVF9USU1FX0FTX1VTRUNPTkRTKHRpbWUpLCBHX1VTRUNfUEVSX1NFQyk7
CiAgICAgICAgIH07CiAKICAgICBpZiAoR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQoYnVmZmVyKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9t
c2UvQXBwZW5kUGlwZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKaW5kZXggYjAzOTQ0ZTY4OWM4MjFhMTcz
ZWIzMTVkYzNjMWQ4YzM1NGRhZmNmNi4uNWEyYmRlZGExYjg3YTFkZWE4YzZiYmY1ZjY5ODQxZDdl
OWY2NmMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGluZS5jcHAKQEAgLTQ1OCwxMiAr
NDU4LDYgQEAgdm9pZCBBcHBlbmRQaXBlbGluZTo6YXBwc2lua05ld1NhbXBsZShHUmVmUHRyPEdz
dFNhbXBsZT4mJiBzYW1wbGUpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIUdT
VF9CVUZGRVJfUFRTX0lTX1ZBTElEKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUuZ2V0KCkp
KSkgewotICAgICAgICAvLyBXaGVuIGRlbXV4aW5nIFZvcmJpcywgbWF0cm9za2FkZW11eCBjcmVh
dGVzIHNldmVyYWwgUFRTLWxlc3MgZnJhbWVzIHdpdGggaGVhZGVyIGluZm9ybWF0aW9uLiBXZSBk
b24ndCBuZWVkIHRob3NlLgotICAgICAgICBHU1RfREVCVUcoIklnbm9yaW5nIHNhbXBsZSB3aXRo
b3V0IFBUUzogJSIgR1NUX1BUUl9GT1JNQVQsIGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihzYW1wbGUu
Z2V0KCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIGF1dG8gbWVkaWFTYW1wbGUg
PSBXZWJDb3JlOjpNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlKFdURk1vdmUoc2FtcGxlKSwg
bV9wcmVzZW50YXRpb25TaXplLCB0cmFja0lkKCkpOwogCiAgICAgR1NUX1RSQUNFKCJhcHBlbmQ6
IHRyYWNrSWQ9JXMgUFRTPSVzIERUUz0lcyBEVVI9JXMgcHJlc2VudGF0aW9uU2l6ZT0lLjBmeCUu
MGYiLApAQCAtNzUyLDkgKzc0Niw2IEBAIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmNvbm5lY3REZW11
eGVyU3JjUGFkVG9BcHBzaW5rKEdzdFBhZCogZGVtdXhlclNyY1BhZCkKICAgICAvLyBPbmx5IG9u
ZSBzdHJlYW0gcGVyIGRlbXV4ZXIgaXMgc3VwcG9ydGVkLgogICAgIEFTU0VSVCghZ3N0X3BhZF9p
c19saW5rZWQoc2lua1NpbmtQYWQuZ2V0KCkpKTsKIAotICAgIC8vIEFzIGl0IGlzIG5vdywgcmVz
ZXRQYXJzZXJTdGF0ZSgpIHdpbGwgY2F1c2UgdGhlIHBhZHMgdG8gYmUgZGlzY29ubmVjdGVkLCBz
byB0aGV5IHdpbGwgbGF0ZXIgYmUgcmUtYWRkZWQgb24gdGhlIG5leHQgaW5pdGlhbGl6YXRpb24g
c2VnbWVudC4KLSAgICBib29sIGZpcnN0VGltZUNvbm5lY3RpbmdUcmFjayA9IG1fdHJhY2sgPT0g
bnVsbHB0cjsKLQogICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFk
X2dldF9jdXJyZW50X2NhcHMoR1NUX1BBRChkZW11eGVyU3JjUGFkKSkpOwogCiAjaWZuZGVmIEdT
VF9ESVNBQkxFX0dTVF9ERUJVRwpAQCAtNzk1LDcgKzc4Niw3IEBAIHZvaWQgQXBwZW5kUGlwZWxp
bmU6OmNvbm5lY3REZW11eGVyU3JjUGFkVG9BcHBzaW5rKEdzdFBhZCogZGVtdXhlclNyY1BhZCkK
ICAgICB9CiAKICAgICBtX2FwcHNpbmtDYXBzID0gV1RGTW92ZShjYXBzKTsKLSAgICBtX3BsYXll
clByaXZhdGUtPnRyYWNrRGV0ZWN0ZWQodGhpcywgbV90cmFjaywgZmlyc3RUaW1lQ29ubmVjdGlu
Z1RyYWNrKTsKKyAgICBtX3BsYXllclByaXZhdGUtPnRyYWNrRGV0ZWN0ZWQodGhpcywgbV90cmFj
aywgdHJ1ZSk7CiB9CiAKIHZvaWQgQXBwZW5kUGlwZWxpbmU6OmRpc2Nvbm5lY3REZW11eGVyU3Jj
UGFkRnJvbUFwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCopCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBpcGVsaW5lLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL0FwcGVuZFBp
cGVsaW5lLmgKaW5kZXggYmQwNmVkZTNiYTJiZWVhZDYyZjMyNTI2YTlkNjY2MzdmYTY5ZjEzNy4u
OTUyOTcwZDIyN2ExYWEyYjBiZGNhZjJjMzFjZTQyM2EzNmE5NzRjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9BcHBlbmRQaXBlbGlu
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
QXBwZW5kUGlwZWxpbmUuaApAQCAtNTIsOSArNTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBwdXNo
TmV3QnVmZmVyKEdSZWZQdHI8R3N0QnVmZmVyPiYmKTsKICAgICB2b2lkIHJlc2V0UGFyc2VyU3Rh
dGUoKTsKICAgICBSZWY8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVy
UHJpdmF0ZSgpIHsgcmV0dXJuIG1fc291cmNlQnVmZmVyUHJpdmF0ZS5nZXQoKTsgfQotICAgIGNv
bnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGFwcHNpbmtDYXBzKCkgeyByZXR1cm4gbV9hcHBzaW5rQ2Fw
czsgfQorICAgIEdzdENhcHMqIGFwcHNpbmtDYXBzKCkgeyByZXR1cm4gbV9hcHBzaW5rQ2Fwcy5n
ZXQoKTsgfQogICAgIFJlZlB0cjxXZWJDb3JlOjpUcmFja1ByaXZhdGVCYXNlPiB0cmFjaygpIHsg
cmV0dXJuIG1fdHJhY2s7IH0KLSAgICBNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXIgc3Ry
ZWFtVHlwZSgpIHsgcmV0dXJuIG1fc3RyZWFtVHlwZTsgfQogICAgIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRSogcGxheWVyUHJpdmF0ZSgpIHsgcmV0dXJuIG1fcGxheWVyUHJpdmF0ZTsg
fQogCiBwcml2YXRlOgpAQCAtODIsNiArODEsNyBAQCBwcml2YXRlOgogICAgIEdzdEVsZW1lbnQq
IGFwcHNyYygpIHsgcmV0dXJuIG1fYXBwc3JjLmdldCgpOyB9CiAgICAgR3N0RWxlbWVudCogYXBw
c2luaygpIHsgcmV0dXJuIG1fYXBwc2luay5nZXQoKTsgfQogICAgIEdzdENhcHMqIGRlbXV4ZXJT
cmNQYWRDYXBzKCkgeyByZXR1cm4gbV9kZW11eGVyU3JjUGFkQ2Fwcy5nZXQoKTsgfQorICAgIFdl
YkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lciBzdHJlYW1UeXBlKCkgeyByZXR1
cm4gbV9zdHJlYW1UeXBlOyB9CiAKICAgICB2b2lkIGRpc2Nvbm5lY3REZW11eGVyU3JjUGFkRnJv
bUFwcHNpbmtGcm9tQW55VGhyZWFkKEdzdFBhZCopOwogICAgIHZvaWQgY29ubmVjdERlbXV4ZXJT
cmNQYWRUb0FwcHNpbmtGcm9tU3RyZWFtaW5nVGhyZWFkKEdzdFBhZCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuY3BwCmluZGV4
IGFjMDEyMmY3NjBlNDRkZTY5Mjk4OGUyY2RhNWZmOTMyYTM5OWZkY2YuLmU2ODgwZDk4ZTdmY2Fk
MWQwNTNmODRlZDM4YTZmZDgxOThkZTdiODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
bXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5jcHAKQEAgLTMsOSArMyw5IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+Ci0g
KiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTYsIDIwMTcs
IDIwMTgsIDIwMTkgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEx
LCAyMDEyLCAyMDEzLCAyMDE2LCAyMDE3IElnYWxpYSBTLkwKICAqIENvcHlyaWdodCAoQykgMjAx
NSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICogQ29weXJp
Z2h0IChDKSAyMDE1LCAyMDE2LCAyMDE3LCAyMDE4LCAyMDE5IE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMTYsIDIwMTcgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIk1l
ZGlhRGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgogI2luY2x1ZGUg
IlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJUaW1lUmFuZ2VzLmgi
CiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKQEAgLTk5LDcgKzEwMCwx
MyBAQCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6On5NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0UoKQogI2VuZGlmCiAgICAgbV9hcHBlbmRQaXBlbGluZXNNYXAuY2xlYXIoKTsK
IAotICAgIG1fc291cmNlLmNsZWFyKCk7CisgICAgaWYgKG1fc291cmNlKSB7CisgICAgICAgIHdl
YktpdE1lZGlhU3JjU2V0TWVkaWFQbGF5ZXJQcml2YXRlKFdFQktJVF9NRURJQV9TUkMobV9zb3Vy
Y2UuZ2V0KCkpLCBudWxscHRyKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9kYXRhKG1fc291cmNlLmdldCgpLCB0aGlzKTsKKyAgICB9CisKKyAgICBpZiAobV9wbGF5
YmFja1BpcGVsaW5lKQorICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPnNldFdlYktpdE1lZGlh
U3JjKG51bGxwdHIpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmluZykKQEAgLTExMSw2ICsxMTgsOSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bG9hZChjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIGlmICghbV9wbGF5YmFja1BpcGVsaW5l
KQorICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUgPSBQbGF5YmFja1BpcGVsaW5lOjpjcmVhdGUo
KTsKKwogICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bG9hZCh1cmxTdHJpbmcpOwog
fQogCkBAIC0xMjAsMTggKzEzMCwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwgTWVkaWFTb3VyY2VQcml2YXRlQwogICAgIGxv
YWQobWFrZVN0cmluZygibWVkaWFzb3VyY2UiLCB1cmwpKTsKIH0KIAotdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXJNU0U6OnBsYXkoKQotewotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlw
ZWxpbmUoKSwgIlBsYXkgcmVxdWVzdGVkIik7Ci0gICAgbV9wYXVzZWQgPSBmYWxzZTsKLSAgICB1
cGRhdGVTdGF0ZXMoKTsKLX0KLQogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OnBhdXNlKCkKIHsKLSAgICBHU1RfREVCVUdfT0JKRUNUKHBpcGVsaW5lKCksICJQYXVzZSByZXF1
ZXN0ZWQiKTsKICAgICBtX3BhdXNlZCA9IHRydWU7Ci0gICAgdXBkYXRlU3RhdGVzKCk7CisgICAg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYXVzZSgpOwogfQogCiBNZWRpYVRpbWUgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbk1lZGlhVGltZSgpIGNvbnN0CkBA
IC0xNDQsNTAgKzE0NiwzMTAgQEAgTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6ZHVyYXRpb25NZWRpYVRpbWUoKSBjb25zdAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6c2Vlayhjb25zdCBNZWRpYVRpbWUmIHRpbWUpCiB7Ci0gICAgR1NUX0RF
QlVHX09CSkVDVChwaXBlbGluZSgpLCAiU2Vla2luZyB0byAlcyIsIHRpbWUudG9TdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9j
Y3VyZWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfSU5GTygiW1NlZWtdIHNlZWsgYXR0
ZW1wdCB0byAlcyBzZWNzIiwgdG9TdHJpbmcodGltZSkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAv
LyBBdm9pZCB1c2VsZXNzIHNlZWtpbmcuCisgICAgTWVkaWFUaW1lIGN1cnJlbnQgPSBjdXJyZW50
TWVkaWFUaW1lKCk7CisgICAgaWYgKHRpbWUgPT0gY3VycmVudCkgeworICAgICAgICBpZiAoIW1f
c2Vla2luZykKKyAgICAgICAgICAgIHRpbWVDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoaXNMaXZlU3RyZWFtKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChtX3NlZWtpbmcgJiYgbV9zZWVrSXNQZW5kaW5nKSB7CisgICAgICAgIG1fc2Vla1RpbWUgPSB0
aW1lOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR1NUX0RFQlVHKCJTZWVraW5nIGZy
b20gJXMgdG8gJXMgc2Vjb25kcyIsIHRvU3RyaW5nKGN1cnJlbnQpLnV0ZjgoKS5kYXRhKCksIHRv
U3RyaW5nKHRpbWUpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgTWVkaWFUaW1lIHByZXZpb3VzU2Vl
a1RpbWUgPSBtX3NlZWtUaW1lOwogICAgIG1fc2Vla1RpbWUgPSB0aW1lOwotICAgIG1fc2Vla2lu
ZyA9IHRydWU7CisKKyAgICBpZiAoIWRvU2VlaygpKSB7CisgICAgICAgIG1fc2Vla1RpbWUgPSBw
cmV2aW91c1NlZWtUaW1lOworICAgICAgICBHU1RfV0FSTklORygiU2Vla2luZyB0byAlcyBmYWls
ZWQiLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIG1faXNFbmRSZWFjaGVkID0gZmFsc2U7CisgICAgR1NUX0RFQlVHKCJtX3NlZWtp
bmc9JXMsIG1fc2Vla1RpbWU9JXMiLCBib29sRm9yUHJpbnRpbmcobV9zZWVraW5nKSwgdG9TdHJp
bmcobV9zZWVrVGltZSkudXRmOCgpLmRhdGEoKSk7Cit9CiAKLSAgICB3ZWJLaXRNZWRpYVNyY1Nl
ZWsoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRvR3N0Q2xvY2tUaW1lKG1fc2Vl
a1RpbWUpLCBtX3BsYXliYWNrUmF0ZSk7Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6Y29uZmlndXJlUGxheVNpbmsoKQoreworICAgIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6Y29uZmlndXJlUGxheVNpbmsoKTsKIAotICAgIGludmFsaWRhdGVDYWNoZWRQb3NpdGlv
bigpOwotICAgIG1fY2FuRmFsbEJhY2tUb0xhc3RGaW5pc2hlZFNlZWtQb3NpdGlvbiA9IHRydWU7
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBwbGF5c2luayA9IGFkb3B0R1JlZihnc3RfYmluX2dl
dF9ieV9uYW1lKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksICJwbGF5c2luayIpKTsKKyAgICBp
ZiAocGxheXNpbmspIHsKKyAgICAgICAgLy8gVGhlIGRlZmF1bHQgdmFsdWUgKDApIG1lYW5zICJz
ZW5kIGV2ZW50cyB0byBhbGwgdGhlIHNpbmtzIiwgaW5zdGVhZAorICAgICAgICAvLyBvZiAib25s
eSB0byB0aGUgZmlyc3QgdGhhdCByZXR1cm5zIHRydWUiLiBUaGlzIGlzIG5lZWRlZCBmb3IgTVNF
IHNlZWsuCisgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChwbGF5c2luay5nZXQoKSksICJz
ZW5kLWV2ZW50LW1vZGUiLCAwLCBudWxscHRyKTsKKyAgICB9Cit9CiAKLSAgICAvLyBOb3RpZnkg
TWVkaWFTb3VyY2UgYW5kIGhhdmUgbmV3IGZyYW1lcyBlbnF1ZXVlZCAod2hlbiB0aGV5J3JlIGF2
YWlsYWJsZSkuCi0gICAgbV9tZWRpYVNvdXJjZS0+c2Vla1RvVGltZSh0aW1lKTsKK2Jvb2wgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRl
IG5ld1N0YXRlKQoreworICAgIGlmIChzZWVraW5nKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJS
ZWplY3RlZCBzdGF0ZSBjaGFuZ2UgdG8gJXMgd2hpbGUgc2Vla2luZyIsCisgICAgICAgICAgICBn
c3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICByZXR1cm4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjaGFu
Z2VQaXBlbGluZVN0YXRlKG5ld1N0YXRlKTsKIH0KIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0U6OnJlcG9ydFNlZWtDb21wbGV0ZWQoKQordm9pZCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6Om5vdGlmeVNlZWtOZWVkc0RhdGFGb3JUaW1lKGNvbnN0IE1lZGlhVGlt
ZSYgc2Vla1RpbWUpCiB7CisgICAgLy8gUmVlbnF1ZXVlIHNhbXBsZXMgbmVlZGVkIHRvIHJlc3Vt
ZSBwbGF5YmFjayBpbiB0aGUgbmV3IHBvc2l0aW9uLgorICAgIG1fbWVkaWFTb3VyY2UtPnNlZWtU
b1RpbWUoc2Vla1RpbWUpOworCisgICAgR1NUX0RFQlVHKCJNU0Ugc2VlayB0byAlcyBmaW5pc2hl
ZCIsIHRvU3RyaW5nKHNlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghbV9nc3RT
ZWVrQ29tcGxldGVkKSB7CisgICAgICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IHRydWU7CisgICAg
ICAgIG1heWJlRmluaXNoU2VlaygpOworICAgIH0KK30KKworYm9vbCBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0U6OmRvU2Vlayhjb25zdCBNZWRpYVRpbWUmLCBmbG9hdCwgR3N0U2Vla0Zs
YWdzKQoreworICAgIC8vIFVzZSBkb1NlZWsoKSBpbnN0ZWFkLiBJZiBhbnlib2R5IGlzIGNhbGxp
bmcgdGhpcyB2ZXJzaW9uIG9mIGRvU2VlaygpLCBzb21ldGhpbmcgaXMgd3JvbmcuCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6ZG9TZWVrKCkKK3sKKyAgICBNZWRpYVRpbWUgc2Vla1Rp
bWUgPSBtX3NlZWtUaW1lOworICAgIGRvdWJsZSByYXRlID0gbV9wbGF5ZXItPnJhdGUoKTsKKyAg
ICBHc3RTZWVrRmxhZ3Mgc2Vla1R5cGUgPSBzdGF0aWNfY2FzdDxHc3RTZWVrRmxhZ3M+KEdTVF9T
RUVLX0ZMQUdfRkxVU0ggfCBHU1RfU0VFS19GTEFHX0FDQ1VSQVRFKTsKKworICAgIC8vIEFsd2F5
cyBtb3ZlIHRvIHNlZWtpbmcgc3RhdGUgdG8gcmVwb3J0IGNvcnJlY3QgJ2N1cnJlbnRUaW1lJyB3
aGlsZSBwZW5kaW5nIGZvciBhY3R1YWwgc2VlayB0byBjb21wbGV0ZS4KKyAgICBtX3NlZWtpbmcg
PSB0cnVlOworCisgICAgLy8gQ2hlY2sgaWYgcGxheWJhY2sgcGlwZWxpbmUgaXMgcmVhZHkgZm9y
IHNlZWsuCisgICAgR3N0U3RhdGUgc3RhdGUsIG5ld1N0YXRlOworICAgIEdzdFN0YXRlQ2hhbmdl
UmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUu
Z2V0KCksICZzdGF0ZSwgJm5ld1N0YXRlLCAwKTsKKyAgICBpZiAoZ2V0U3RhdGVSZXN1bHQgPT0g
R1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFIHx8IGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9D
SEFOR0VfTk9fUFJFUk9MTCkgeworICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBjYW5ub3Qgc2Vl
aywgY3VycmVudCBzdGF0ZSBjaGFuZ2UgaXMgJXMiLCBnc3RfZWxlbWVudF9zdGF0ZV9jaGFuZ2Vf
cmV0dXJuX2dldF9uYW1lKGdldFN0YXRlUmVzdWx0KSk7CisgICAgICAgIHdlYktpdE1lZGlhU3Jj
U2V0UmVhZHlGb3JTYW1wbGVzKFdFQktJVF9NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpLCB0cnVl
KTsKKyAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgaWYgKChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FTWU5DCisg
ICAgICAgICYmICEoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYgbmV3U3RhdGUgPT0gR1NU
X1NUQVRFX1BBVVNFRCkpCisgICAgICAgIHx8IHN0YXRlIDwgR1NUX1NUQVRFX1BBVVNFRAorICAg
ICAgICB8fCBtX2lzRW5kUmVhY2hlZAorICAgICAgICB8fCAhbV9nc3RTZWVrQ29tcGxldGVkKSB7
CisgICAgICAgIENTdHJpbmcgcmVhc29uID0gIlVua25vd24gcmVhc29uIjsKKyAgICAgICAgaWYg
KGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0VfQVNZTkMpIHsKKyAgICAgICAgICAg
IHJlYXNvbiA9IG1ha2VTdHJpbmcoIkluIGFzeW5jIGNoYW5nZSAiLAorICAgICAgICAgICAgICAg
IGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgIiAtLT4gIiwKKyAgICAgICAgICAg
ICAgICBnc3RfZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShuZXdTdGF0ZSkpLnV0ZjgoKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChzdGF0ZSA8IEdTVF9TVEFURV9QQVVTRUQpCisgICAgICAgICAgICByZWFz
b24gPSAiU3RhdGUgbGVzcyB0aGFuIFBBVVNFRCI7CisgICAgICAgIGVsc2UgaWYgKG1faXNFbmRS
ZWFjaGVkKQorICAgICAgICAgICAgcmVhc29uID0gIkVuZCByZWFjaGVkIjsKKyAgICAgICAgZWxz
ZSBpZiAoIW1fZ3N0U2Vla0NvbXBsZXRlZCkKKyAgICAgICAgICAgIHJlYXNvbiA9ICJQcmV2aW91
cyBzZWVrIGlzIG5vdCBmaW5pc2hlZCB5ZXQiOworCisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtd
IERlbGF5aW5nIHRoZSBzZWVrOiAlcyIsIHJlYXNvbi5kYXRhKCkpOworCisgICAgICAgIG1fc2Vl
a0lzUGVuZGluZyA9IHRydWU7CisKKyAgICAgICAgaWYgKG1faXNFbmRSZWFjaGVkKSB7CisgICAg
ICAgICAgICBHU1RfREVCVUcoIltTZWVrXSByZXNldCBwaXBlbGluZSIpOworICAgICAgICAgICAg
bV9yZXNldFBpcGVsaW5lID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOwor
ICAgICAgICAgICAgaWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QQVVTRUQpKQor
ICAgICAgICAgICAgICAgIGxvYWRpbmdGYWlsZWQoTWVkaWFQbGF5ZXI6OkVtcHR5KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3NlZWtpbmcgPSB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIG1fc2Vla2luZzsKKyAgICB9CisKKyAgICAvLyBTdG9wIGFjY2Vw
dGluZyBuZXcgc2FtcGxlcyB1bnRpbCBhY3R1YWwgc2VlayBpcyBmaW5pc2hlZC4KKyAgICB3ZWJL
aXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fc291cmNlLmdl
dCgpKSwgZmFsc2UpOworCisgICAgLy8gQ29ycmVjdCBzZWVrIHRpbWUgaWYgaXQgaGVscHMgdG8g
Zml4IGEgc21hbGwgZ2FwLgorICAgIGlmICghaXNUaW1lQnVmZmVyZWQoc2Vla1RpbWUpKSB7Cisg
ICAgICAgIC8vIExvb2sgaWYgYSBuZWFyIGZ1dHVyZSB0aW1lICg8MC4xIHNlYy4pIGlzIGJ1ZmZl
cmVkIGFuZCBjaGFuZ2UgdGhlIHNlZWsgdGFyZ2V0IHRpbWUuCisgICAgICAgIGlmIChtX21lZGlh
U291cmNlKSB7CisgICAgICAgICAgICBjb25zdCBNZWRpYVRpbWUgbWluaUdhcCA9IE1lZGlhVGlt
ZSgxLCAxMCk7CisgICAgICAgICAgICBNZWRpYVRpbWUgbmVhcmVzdCA9IG1fbWVkaWFTb3VyY2Ut
PmJ1ZmZlcmVkKCktPm5lYXJlc3Qoc2Vla1RpbWUpOworICAgICAgICAgICAgaWYgKG5lYXJlc3Qu
aXNWYWxpZCgpICYmIG5lYXJlc3QgPiBzZWVrVGltZSAmJiAobmVhcmVzdCAtIHNlZWtUaW1lKSA8
PSBtaW5pR2FwICYmIGlzVGltZUJ1ZmZlcmVkKG5lYXJlc3QgKyBtaW5pR2FwKSkgeworICAgICAg
ICAgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIENoYW5nZWQgdGhlIHNlZWsgdGFyZ2V0IHRpbWUg
ZnJvbSAlcyB0byAlcywgYSBuZWFyIHBvaW50IGluIHRoZSBmdXR1cmUiLCB0b1N0cmluZyhzZWVr
VGltZSkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcobmVhcmVzdCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgc2Vla1RpbWUgPSBuZWFyZXN0OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gQ2hlY2sgaWYgTVNFIGhhcyBzYW1wbGVzIGZvciByZXF1ZXN0
ZWQgdGltZSBhbmQgZGVmZXIgYWN0dWFsIHNlZWsgaWYgbmVlZGVkLgorICAgIGlmICghaXNUaW1l
QnVmZmVyZWQoc2Vla1RpbWUpKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIERlbGF5aW5n
IHRoZSBzZWVrOiBNU0UgaXMgbm90IHJlYWR5Iik7CisgICAgICAgIEdzdFN0YXRlQ2hhbmdlUmV0
dXJuIHNldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0
KCksIEdTVF9TVEFURV9QQVVTRUQpOworICAgICAgICBpZiAoc2V0U3RhdGVSZXN1bHQgPT0gR1NU
X1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIltTZWVrXSBD
YW5ub3Qgc2VlaywgZmFpbGVkIHRvIHBhdXNlIHBsYXliYWNrIHBpcGVsaW5lLiIpOworICAgICAg
ICAgICAgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyht
X3NvdXJjZS5nZXQoKSksIHRydWUpOworICAgICAgICAgICAgbV9zZWVraW5nID0gZmFsc2U7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgbV9yZWFkeVN0YXRl
ID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsKKyAgICAgICAgbm90aWZ5U2Vla05lZWRzRGF0
YUZvclRpbWUoc2Vla1RpbWUpOworICAgICAgICBBU1NFUlQoIW1fbXNlU2Vla0NvbXBsZXRlZCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIC8vIENvbXBsZXRlIHByZXZpb3Vz
IE1TRSBzZWVrIGlmIG5lZWRlZC4KKyAgICBpZiAoIW1fbXNlU2Vla0NvbXBsZXRlZCkgeworICAg
ICAgICBtX21lZGlhU291cmNlLT5tb25pdG9yU291cmNlQnVmZmVycygpOworICAgICAgICBBU1NF
UlQobV9tc2VTZWVrQ29tcGxldGVkKTsKKyAgICAgICAgLy8gTm90ZTogc2Vla0NvbXBsZXRlZCB3
aWxsIHJlY3Vyc2l2ZWx5IGNhbGwgdXMuCisgICAgICAgIHJldHVybiBtX3NlZWtpbmc7CisgICAg
fQorCisgICAgR1NUX0RFQlVHKCJXZSBjYW4gc2VlayBub3ciKTsKKworICAgIE1lZGlhVGltZSBz
dGFydFRpbWUgPSBzZWVrVGltZSwgZW5kVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsK
KworICAgIGlmIChyYXRlIDwgMCkgeworICAgICAgICBzdGFydFRpbWUgPSBNZWRpYVRpbWU6Onpl
cm9UaW1lKCk7CisgICAgICAgIGVuZFRpbWUgPSBzZWVrVGltZTsKKyAgICB9CisKKyAgICBpZiAo
IXJhdGUpCisgICAgICAgIHJhdGUgPSAxOworCisgICAgR1NUX0RFQlVHKCJBY3R1YWwgc2VlayB0
byAlcywgZW5kIHRpbWU6ICAlcywgcmF0ZTogJWYiLCB0b1N0cmluZyhzdGFydFRpbWUpLnV0Zjgo
KS5kYXRhKCksIHRvU3RyaW5nKGVuZFRpbWUpLnV0ZjgoKS5kYXRhKCksIHJhdGUpOworCisgICAg
Ly8gVGhpcyB3aWxsIGNhbGwgbm90aWZ5U2Vla05lZWRzRGF0YSgpIGFmdGVyIHNvbWUgdGltZSB0
byB0ZWxsIHRoYXQgdGhlIHBpcGVsaW5lIGlzIHJlYWR5IGZvciBzYW1wbGUgZW5xdWV1aW5nLgor
ICAgIHdlYktpdE1lZGlhU3JjUHJlcGFyZVNlZWsoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5n
ZXQoKSksIHNlZWtUaW1lKTsKKworICAgIG1fZ3N0U2Vla0NvbXBsZXRlZCA9IGZhbHNlOworICAg
IGlmICghZ3N0X2VsZW1lbnRfc2VlayhtX3BpcGVsaW5lLmdldCgpLCByYXRlLCBHU1RfRk9STUFU
X1RJTUUsIHNlZWtUeXBlLCBHU1RfU0VFS19UWVBFX1NFVCwgdG9Hc3RDbG9ja1RpbWUoc3RhcnRU
aW1lKSwgR1NUX1NFRUtfVFlQRV9TRVQsIHRvR3N0Q2xvY2tUaW1lKGVuZFRpbWUpKSkgeworICAg
ICAgICB3ZWJLaXRNZWRpYVNyY1NldFJlYWR5Rm9yU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1f
c291cmNlLmdldCgpKSwgdHJ1ZSk7CisgICAgICAgIG1fc2Vla2luZyA9IGZhbHNlOworICAgICAg
ICBtX2dzdFNlZWtDb21wbGV0ZWQgPSB0cnVlOworICAgICAgICBHU1RfREVCVUcoImRvU2Vlaygp
OiBnc3RfZWxlbWVudF9zZWVrKCkgZmFpbGVkLCByZXR1cm5pbmcgZmFsc2UiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSBzYW1wbGVzIHdpbGwgYmUgZW5xdWV1
ZWQgaW4gbm90aWZ5U2Vla05lZWRzRGF0YSgpLgorICAgIEdTVF9ERUJVRygiZG9TZWVrKCk6IGdz
dF9lbGVtZW50X3NlZWsoKSBzdWNjZWVkZWQsIHJldHVybmluZyB0cnVlIik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjptYXliZUZp
bmlzaFNlZWsoKQoreworICAgIGlmICghbV9zZWVraW5nIHx8ICFtX21zZVNlZWtDb21wbGV0ZWQg
fHwgIW1fZ3N0U2Vla0NvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0U3RhdGUg
c3RhdGUsIG5ld1N0YXRlOworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0
ID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJm5ld1N0
YXRlLCAwKTsKKworICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0FT
WU5DCisgICAgICAgICYmICEoc3RhdGUgPT0gR1NUX1NUQVRFX1BMQVlJTkcgJiYgbmV3U3RhdGUg
PT0gR1NUX1NUQVRFX1BBVVNFRCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gRGVsYXlp
bmcgc2VlayBmaW5pc2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3Nl
ZWtJc1BlbmRpbmcpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJbU2Vla10gQ29tbWl0dGluZyBwZW5k
aW5nIHNlZWsgdG8gJXMiLCB0b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgbV9zZWVrSXNQZW5kaW5nID0gZmFsc2U7CisgICAgICAgIGlmICghZG9TZWVrKCkpIHsK
KyAgICAgICAgICAgIEdTVF9XQVJOSU5HKCJbU2Vla10gU2Vla2luZyB0byAlcyBmYWlsZWQiLCB0
b1N0cmluZyhtX3NlZWtUaW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIG1fY2FjaGVk
UG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEdTVF9ERUJVRygiW1NlZWtdIFNlZWtlZCB0byAlcyIsIHRv
U3RyaW5nKG1fc2Vla1RpbWUpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgd2ViS2l0TWVkaWFTcmNT
ZXRSZWFkeUZvclNhbXBsZXMoV0VCS0lUX01FRElBX1NSQyhtX3NvdXJjZS5nZXQoKSksIHRydWUp
OwogICAgIG1fc2Vla2luZyA9IGZhbHNlOwotICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwor
ICAgIG1fY2FjaGVkUG9zaXRpb24gPSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisgICAgLy8g
VGhlIHBpcGVsaW5lIGNhbiBzdGlsbCBoYXZlIGEgcGVuZGluZyBzdGF0ZS4gSW4gdGhpcyBjYXNl
IGEgcG9zaXRpb24gcXVlcnkgd2lsbCBmYWlsLgorICAgIC8vIFJpZ2h0IG5vdyB3ZSBjYW4gdXNl
IG1fc2Vla1RpbWUgYXMgYSBmYWxsYmFjay4KKyAgICBtX2NhbkZhbGxCYWNrVG9MYXN0RmluaXNo
ZWRTZWVrUG9zaXRpb24gPSB0cnVlOworICAgIHRpbWVDaGFuZ2VkKCk7CiB9CiAKK3ZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjp1cGRhdGVQbGF5YmFja1JhdGUoKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjpzZWVraW5nKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZWVraW5nOworfQorCisvLyBG
SVhNRTogTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIG1hbmFnZXMgdGhlIFJlYWR5U3RhdGUg
b24gaXRzIG93bi4gV2Ugc2hvdWxkbid0IGNoYW5nZSBpdCBtYW51YWxseS4KIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFk
eVN0YXRlIHJlYWR5U3RhdGUpCiB7CiAgICAgaWYgKHJlYWR5U3RhdGUgPT0gbV9yZWFkeVN0YXRl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBHU1RfREVCVUcoIk1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lck1TRTo6c2V0UmVhZHlTdGF0ZSglcCk6ICVzIC0+ICVzIiwgdGhpcywgZHVtcFJlYWR5
U3RhdGUobV9yZWFkeVN0YXRlKSwgZHVtcFJlYWR5U3RhdGUocmVhZHlTdGF0ZSkpOworICAgIGlm
IChzZWVraW5nKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJTa2lwIHJlYWR5IHN0YXRlIGNoYW5n
ZSglcyAtPiAlcykgZHVlIHRvIHNlZWtcbiIsIGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSks
IGR1bXBSZWFkeVN0YXRlKHJlYWR5U3RhdGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIEdTVF9ERUJVRygiUmVhZHkgU3RhdGUgQ2hhbmdlZCBtYW51YWxseSBmcm9tICV1IHRvICV1
IiwgbV9yZWFkeVN0YXRlLCByZWFkeVN0YXRlKTsKKyAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSBvbGRSZWFkeVN0YXRlID0gbV9yZWFkeVN0YXRlOwogICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5
U3RhdGU7Ci0gICAgdXBkYXRlU3RhdGVzKCk7CisgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU6
ICVzIC0+ICVzIiwgZHVtcFJlYWR5U3RhdGUob2xkUmVhZHlTdGF0ZSksIGR1bXBSZWFkeVN0YXRl
KG1fcmVhZHlTdGF0ZSkpOwogCi0gICAgLy8gQm90aCByZWFkeVN0YXRlQ2hhbmdlZCgpIGFuZCB0
aW1lQ2hhbmdlZCgpIGNoZWNrIGZvciAic2Vla2VkIiBjb25kaXRpb24sIHdoaWNoIHJlcXVpcmVz
IGFsbCB0aGUgZm9sbG93aW5nIHRocmVlIHRoaW5nczoKLSAgICAvLyAgIDEuIEhUTUxNZWRpYVBs
YXllci5tX3NlZWtSZXF1ZXN0ZWQgPT0gdHJ1ZS4KLSAgICAvLyAgIDIuIE91ciBzZWVraW5nKCkg
bWV0aG9kIHRvIHJldHVybiBmYWxzZSAodGhhdCBpcywgd2UgaGF2ZSBjb21wbGV0ZWQgdGhlIHNl
ZWspLgotICAgIC8vICAgMy4gcmVhZHlTdGF0ZSA+IEhhdmVNZXRhZGF0YS4KLSAgICAvLwotICAg
IC8vIFdlIG5vcm1hbGx5IHdvdWxkIHNldCBtX3NlZWtpbmcgPSBmYWxzZSBpbiBzZWVrQ29tcGxl
dGVkKCksIGJ1dCB1bmZvcnR1bmF0ZWx5IGJ5IHRoYXQgdGltZSwgcGxheWJhY2sgaGFzIGFscmVh
ZHkKLSAgICAvLyBzdGFydGVkIHdoaWNoIG1lYW5zIHRoYXQgdGhlICJwbGF5aW5nIiBldmVudCBp
cyBlbWl0dGVkIGJlZm9yZSAic2Vla2VkIi4gSW4gb3JkZXIgdG8gYXZvaWQgdGhhdCB3cm9uZyBv
cmRlciwKLSAgICAvLyB3ZSBkbyBpdCBoZXJlIGFscmVhZHkuCi0gICAgaWYgKG1fc2Vla2luZyAm
JiByZWFkeVN0YXRlID4gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVNZXRhZGF0YSkKLSAg
ICAgICAgbV9zZWVraW5nID0gZmFsc2U7CisgICAgaWYgKG9sZFJlYWR5U3RhdGUgPCBNZWRpYVBs
YXllcjo6SGF2ZUN1cnJlbnREYXRhICYmIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBsYXllcjo6SGF2
ZUN1cnJlbnREYXRhKSB7CisgICAgICAgIEdTVF9ERUJVRygiW1NlZWtdIFJlcG9ydGluZyBsb2Fk
IHN0YXRlIGNoYW5nZWQgdG8gdHJpZ2dlciBzZWVrIGNvbnRpbnVhdGlvbiIpOworICAgICAgICBs
b2FkU3RhdGVDaGFuZ2VkKCk7CisgICAgfQogICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdl
ZCgpOwogCi0gICAgLy8gVGhlIHJlYWR5U3RhdGUgY2hhbmdlIG1heSBiZSBhIHJlc3VsdCBvZiBt
b25pdG9yU291cmNlQnVmZmVycygpIGZpbmRpbmcgdGhhdCBjdXJyZW50VGltZSA9PSBkdXJhdGlv
biwgd2hpY2gKLSAgICAvLyBzaG91bGQgY2F1c2UgdGhlIHZpZGVvIHRvIGJlIG1hcmtlZCBhcyBl
bmRlZC4gTGV0J3MgaGF2ZSB0aGUgcGxheWVyIGNoZWNrIHRoYXQuCi0gICAgbV9wbGF5ZXItPnRp
bWVDaGFuZ2VkKCk7CisgICAgR3N0U3RhdGUgcGlwZWxpbmVTdGF0ZTsKKyAgICBHc3RTdGF0ZUNo
YW5nZVJldHVybiBnZXRTdGF0ZVJlc3VsdCA9IGdzdF9lbGVtZW50X2dldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCAmcGlwZWxpbmVTdGF0ZSwgbnVsbHB0ciwgMjUwICogR1NUX05TRUNPTkQpOwor
ICAgIGJvb2wgaXNQbGF5aW5nID0gKGdldFN0YXRlUmVzdWx0ID09IEdTVF9TVEFURV9DSEFOR0Vf
U1VDQ0VTUyAmJiBwaXBlbGluZVN0YXRlID09IEdTVF9TVEFURV9QTEFZSU5HKTsKKworICAgIGlm
IChtX3JlYWR5U3RhdGUgPT0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBvbGRSZWFkeVN0
YXRlID4gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YSAmJiBpc1BsYXlpbmcpIHsKKyAgICAgICAg
R1NUX1RSQUNFKCJDaGFuZ2luZyBwaXBlbGluZSB0byBQQVVTRUQuLi4iKTsKKyAgICAgICAgYm9v
bCBvayA9IGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BBVVNFRCk7CisgICAgICAgIEdT
VF9UUkFDRSgiQ2hhbmdlZCBwaXBlbGluZSB0byBQQVVTRUQ6ICVzIiwgb2sgPyAiU3VjY2VzcyIg
OiAiRXJyb3IiKTsKKyAgICB9Cit9CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
TVNFOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7CisgICAgaWYgKCFtX3NlZWtpbmcpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygiV2FpdGluZyBmb3IgTVNFIHNlZWsgY29tcGxl
dGVkIik7CisgICAgbV9tc2VTZWVrQ29tcGxldGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpzZWVrQ29tcGxldGVkKCkKK3sKKyAgICBpZiAobV9t
c2VTZWVrQ29tcGxldGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoIk1TRSBz
ZWVrIGNvbXBsZXRlZCIpOworICAgIG1fbXNlU2Vla0NvbXBsZXRlZCA9IHRydWU7CisKKyAgICBk
b1NlZWsoKTsKKworICAgIGlmICghc2Vla2luZygpICYmIG1fcmVhZHlTdGF0ZSA+PSBNZWRpYVBs
YXllcjo6SGF2ZUZ1dHVyZURhdGEpCisgICAgICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NU
QVRFX1BMQVlJTkcpOworCisgICAgaWYgKCFzZWVraW5nKCkpCisgICAgICAgIG1fcGxheWVyLT50
aW1lQ2hhbmdlZCgpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6
c2V0UmF0ZShmbG9hdCkKQEAgLTIwMywzMyArNDY1LDE2OCBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OmJ1ZmZlcmVk
KCkgYwogdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6OnNvdXJjZVNldHVwKEdz
dEVsZW1lbnQqIHNvdXJjZUVsZW1lbnQpCiB7CiAgICAgbV9zb3VyY2UgPSBzb3VyY2VFbGVtZW50
OworCiAgICAgQVNTRVJUKFdFQktJVF9JU19NRURJQV9TUkMobV9zb3VyY2UuZ2V0KCkpKTsKKwor
ICAgIG1fcGxheWJhY2tQaXBlbGluZS0+c2V0V2ViS2l0TWVkaWFTcmMoV0VCS0lUX01FRElBX1NS
QyhtX3NvdXJjZS5nZXQoKSkpOworCiAgICAgTWVkaWFTb3VyY2VHU3RyZWFtZXI6Om9wZW4oKm1f
bWVkaWFTb3VyY2UuZ2V0KCksICp0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV9zb3VyY2UuZ2V0KCksICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyh2aWRlb0NoYW5nZWRD
YWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3NvdXJjZS5n
ZXQoKSwgImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKGF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwg
dGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fc291cmNlLmdldCgpLCAidGV4
dC1jaGFuZ2VkIiwgR19DQUxMQkFDSyh0ZXh0Q2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CisgICAg
d2ViS2l0TWVkaWFTcmNTZXRNZWRpYVBsYXllclByaXZhdGUoV0VCS0lUX01FRElBX1NSQyhtX3Nv
dXJjZS5nZXQoKSksIHRoaXMpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ck1TRTo6dXBkYXRlU3RhdGVzKCkKIHsKLSAgICBib29sIHNob3VsZEJlUGxheWluZyA9ICFtX3Bh
dXNlZCAmJiByZWFkeVN0YXRlKCkgPj0gTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGU6OkhhdmVGdXR1
cmVEYXRhOwotICAgIEdTVF9ERUJVR19PQkpFQ1QocGlwZWxpbmUoKSwgInNob3VsZEJlUGxheWlu
ZyA9ICVkLCBtX2lzUGlwZWxpbmVQbGF5aW5nID0gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHNob3Vs
ZEJlUGxheWluZyksIHN0YXRpY19jYXN0PGludD4obV9pc1BpcGVsaW5lUGxheWluZykpOwotICAg
IGlmIChzaG91bGRCZVBsYXlpbmcgJiYgIW1faXNQaXBlbGluZVBsYXlpbmcpIHsKLSAgICAgICAg
aWYgKCFjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKSkKLSAgICAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgdGhlIHBpcGVsaW5lIHRvIFBM
QVlJTkcgZmFpbGVkIik7Ci0gICAgICAgIG1faXNQaXBlbGluZVBsYXlpbmcgPSB0cnVlOwotICAg
IH0gZWxzZSBpZiAoIXNob3VsZEJlUGxheWluZyAmJiBtX2lzUGlwZWxpbmVQbGF5aW5nKSB7Ci0g
ICAgICAgIGlmICghY2hhbmdlUGlwZWxpbmVTdGF0ZShHU1RfU1RBVEVfUEFVU0VEKSkKLSAgICAg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QocGlwZWxpbmUoKSwgIlNldHRpbmcgdGhlIHBpcGVsaW5l
IHRvIFBBVVNFRCBmYWlsZWQiKTsKLSAgICAgICAgbV9pc1BpcGVsaW5lUGxheWluZyA9IGZhbHNl
OworICAgIGlmIChVTkxJS0VMWSghbV9waXBlbGluZSB8fCBtX2Vycm9yT2NjdXJlZCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgb2xkTmV0d29ya1N0
YXRlID0gbV9uZXR3b3JrU3RhdGU7CisgICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgb2xkUmVh
ZHlTdGF0ZSA9IG1fcmVhZHlTdGF0ZTsKKyAgICBHc3RTdGF0ZSBzdGF0ZSwgcGVuZGluZzsKKwor
ICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIGdldFN0YXRlUmVzdWx0ID0gZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksICZzdGF0ZSwgJnBlbmRpbmcsIDI1MCAqIEdTVF9OU0VD
T05EKTsKKworICAgIGJvb2wgc2hvdWxkVXBkYXRlUGxheWJhY2tTdGF0ZSA9IGZhbHNlOworICAg
IHN3aXRjaCAoZ2V0U3RhdGVSZXN1bHQpIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfU1VD
Q0VTUzogeworICAgICAgICBHU1RfREVCVUcoIlN0YXRlOiAlcywgcGVuZGluZzogJXMiLCBnc3Rf
ZWxlbWVudF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSksIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1l
KHBlbmRpbmcpKTsKKworICAgICAgICAvLyBEbyBub3RoaW5nIGlmIG9uIEVPUyBhbmQgc3RhdGUg
Y2hhbmdlZCB0byBSRUFEWSB0byBhdm9pZCByZWNyZWF0aW5nIHRoZSBwbGF5ZXIKKyAgICAgICAg
Ly8gb24gSFRNTE1lZGlhRWxlbWVudCBhbmQgcHJvcGVybHkgZ2VuZXJhdGUgdGhlIHZpZGVvICdl
bmRlZCcgZXZlbnQuCisgICAgICAgIGlmIChtX2lzRW5kUmVhY2hlZCAmJiBzdGF0ZSA9PSBHU1Rf
U1RBVEVfUkVBRFkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBtX3Jlc2V0UGlwZWxp
bmUgPSAoc3RhdGUgPD0gR1NUX1NUQVRFX1JFQURZKTsKKyAgICAgICAgaWYgKG1fcmVzZXRQaXBl
bGluZSkKKyAgICAgICAgICAgIG1fbWVkaWFUaW1lRHVyYXRpb24gPSBNZWRpYVRpbWU6Onplcm9U
aW1lKCk7CisKKyAgICAgICAgLy8gVXBkYXRlIHJlYWR5IGFuZCBuZXR3b3JrIHN0YXRlcy4KKyAg
ICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIEdTVF9TVEFURV9OVUxMOgorICAg
ICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVOb3RoaW5nOworICAgICAg
ICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5
U3RhdGUpKTsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkVtcHR5
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR1NUX1NUQVRFX1JFQURZOgorICAg
ICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRhZGF0YTsKKyAgICAg
ICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFk
eVN0YXRlKSk7CisgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpFbXB0
eTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdTVF9TVEFURV9QQVVTRUQ6Cisg
ICAgICAgIGNhc2UgR1NUX1NUQVRFX1BMQVlJTkc6CisgICAgICAgICAgICBpZiAoc2Vla2luZygp
KSB7CisgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVNZXRh
ZGF0YTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHdlIG1hbmFnZSBOZXR3b3Jr
U3RhdGUgdG9vPworICAgICAgICAgICAgICAgIEdTVF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwg
ZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmIChtX3JlYWR5U3RhdGUgPCBNZWRpYVBsYXllcjo6SGF2ZUZ1dHVyZURh
dGEpCisgICAgICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZl
RnV0dXJlRGF0YTsKKyAgICAgICAgICAgICAgICBHU1RfREVCVUcoIm1fcmVhZHlTdGF0ZT0lcyIs
IGR1bXBSZWFkeVN0YXRlKG1fcmVhZHlTdGF0ZSkpOworICAgICAgICAgICAgICAgIG1fbmV0d29y
a1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChtX2Vvc01hcmtlZCAmJiBzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKKyAgICAg
ICAgICAgICAgICBtX2Vvc1BlbmRpbmcgPSB0cnVlOworCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBTeW5jIHN0YXRlcyB3aGVyZSBu
ZWVkZWQuCisgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUEFVU0VEKSB7CisgICAgICAg
ICAgICBpZiAoIW1fdm9sdW1lQW5kTXV0ZUluaXRpYWxpemVkKSB7CisgICAgICAgICAgICAgICAg
bm90aWZ5UGxheWVyT2ZWb2x1bWVDaGFuZ2UoKTsKKyAgICAgICAgICAgICAgICBub3RpZnlQbGF5
ZXJPZk11dGUoKTsKKyAgICAgICAgICAgICAgICBtX3ZvbHVtZUFuZE11dGVJbml0aWFsaXplZCA9
IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc2Vla2luZygpICYmICFt
X3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkgeworICAgICAgICAgICAgICAgIEdTVF9ERUJVRygi
W0J1ZmZlcmluZ10gUmVzdGFydGluZyBwbGF5YmFjay4iKTsKKyAgICAgICAgICAgICAgICBjaGFu
Z2VQaXBlbGluZVN0YXRlKEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykgeworICAgICAgICAgICAg
bV9wYXVzZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgaWYgKCFtX3BsYXliYWNrUmF0ZSkgewor
ICAgICAgICAgICAgICAgIEdTVF9ERUJVRygiW0J1ZmZlcmluZ10gUGF1c2luZyBzdHJlYW0gZm9y
IGJ1ZmZlcmluZy4iKTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VQaXBlbGluZVN0YXRlKEdTVF9T
VEFURV9QQVVTRUQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG1fcGF1c2VkID0gdHJ1ZTsKKworICAgICAgICBpZiAobV9yZXF1ZXN0ZWRTdGF0ZSA9PSBHU1Rf
U1RBVEVfUEFVU0VEICYmIHN0YXRlID09IEdTVF9TVEFURV9QQVVTRUQpIHsKKyAgICAgICAgICAg
IHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUgPSB0cnVlOworICAgICAgICAgICAgR1NUX0RFQlVH
KCJSZXF1ZXN0ZWQgc3RhdGUgY2hhbmdlIHRvICVzIHdhcyBjb21wbGV0ZWQiLCBnc3RfZWxlbWVu
dF9zdGF0ZV9nZXRfbmFtZShzdGF0ZSkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CiAg
ICAgfQotfQorICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9BU1lOQzoKKyAgICAgICAgR1NUX0RF
QlVHKCJBc3luYzogU3RhdGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dl
dF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworICAg
ICAgICAvLyBDaGFuZ2UgaW4gcHJvZ3Jlc3MuCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NU
X1NUQVRFX0NIQU5HRV9GQUlMVVJFOgorICAgICAgICBHU1RfV0FSTklORygiRmFpbHVyZTogU3Rh
dGU6ICVzLCBwZW5kaW5nOiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwg
Z3N0X2VsZW1lbnRfc3RhdGVfZ2V0X25hbWUocGVuZGluZykpOworICAgICAgICAvLyBDaGFuZ2Ug
ZmFpbGVkLgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05PX1BS
RVJPTEw6CisgICAgICAgIEdTVF9ERUJVRygiTm8gcHJlcm9sbDogU3RhdGU6ICVzLCBwZW5kaW5n
OiAlcyIsIGdzdF9lbGVtZW50X3N0YXRlX2dldF9uYW1lKHN0YXRlKSwgZ3N0X2VsZW1lbnRfc3Rh
dGVfZ2V0X25hbWUocGVuZGluZykpOworCisgICAgICAgIC8vIExpdmUgcGlwZWxpbmVzIGdvIGlu
IFBBVVNFRCB3aXRob3V0IHByZXJvbGxpbmcuCisgICAgICAgIG1faXNTdHJlYW1pbmcgPSB0cnVl
OworCisgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfU1RBVEVfUkVBRFkpIHsKKyAgICAgICAgICAg
IG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpIYXZlTm90aGluZzsKKyAgICAgICAgICAgIEdT
VF9ERUJVRygibV9yZWFkeVN0YXRlPSVzIiwgZHVtcFJlYWR5U3RhdGUobV9yZWFkeVN0YXRlKSk7
CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAg
ICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOworICAgICAg
ICAgICAgR1NUX0RFQlVHKCJtX3JlYWR5U3RhdGU9JXMiLCBkdW1wUmVhZHlTdGF0ZShtX3JlYWR5
U3RhdGUpKTsKKyAgICAgICAgICAgIG1fcGF1c2VkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlm
IChzdGF0ZSA9PSBHU1RfU1RBVEVfUExBWUlORykKKyAgICAgICAgICAgIG1fcGF1c2VkID0gZmFs
c2U7CisKKyAgICAgICAgaWYgKCFtX3BhdXNlZCAmJiBtX3BsYXliYWNrUmF0ZSkKKyAgICAgICAg
ICAgIGNoYW5nZVBpcGVsaW5lU3RhdGUoR1NUX1NUQVRFX1BMQVlJTkcpOworCisgICAgICAgIG1f
bmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdTVF9ERUJVRygiRWxzZSA6ICVkIiwgZ2V0U3RhdGVSZXN1bHQp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBtX3JlcXVlc3RlZFN0YXRlID0gR1NUX1NU
QVRFX1ZPSURfUEVORElORzsKIAotdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U6
OmRpZEVuZCgpCisgICAgaWYgKHNob3VsZFVwZGF0ZVBsYXliYWNrU3RhdGUpCisgICAgICAgIG1f
cGxheWVyLT5wbGF5YmFja1N0YXRlQ2hhbmdlZCgpOworCisgICAgaWYgKG1fbmV0d29ya1N0YXRl
ICE9IG9sZE5ldHdvcmtTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUcoIk5ldHdvcmsgU3RhdGUg
Q2hhbmdlZCBmcm9tICV1IHRvICV1Iiwgb2xkTmV0d29ya1N0YXRlLCBtX25ldHdvcmtTdGF0ZSk7
CisgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CisgICAgfQorICAgIGlm
IChtX3JlYWR5U3RhdGUgIT0gb2xkUmVhZHlTdGF0ZSkgeworICAgICAgICBHU1RfREVCVUcoIlJl
YWR5IFN0YXRlIENoYW5nZWQgZnJvbSAldSB0byAldSIsIG9sZFJlYWR5U3RhdGUsIG1fcmVhZHlT
dGF0ZSk7CisgICAgICAgIG1fcGxheWVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0KKwor
ICAgIGlmIChnZXRTdGF0ZVJlc3VsdCA9PSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1MgJiYgc3Rh
dGUgPj0gR1NUX1NUQVRFX1BBVVNFRCkgeworICAgICAgICB1cGRhdGVQbGF5YmFja1JhdGUoKTsK
KyAgICAgICAgbWF5YmVGaW5pc2hTZWVrKCk7CisgICAgfQorfQordm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXJNU0U6OmFzeW5jU3RhdGVDaGFuZ2VEb25lKCkKIHsKLSAgICBHU1RfREVC
VUdfT0JKRUNUKHBpcGVsaW5lKCksICJFT1MgcmVjZWl2ZWQsIGN1cnJlbnRUaW1lPSVzIGR1cmF0
aW9uPSVzIiwgY3VycmVudE1lZGlhVGltZSgpLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZHVy
YXRpb25NZWRpYVRpbWUoKS50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIG1faXNFbmRS
ZWFjaGVkID0gdHJ1ZTsKLSAgICBpbnZhbGlkYXRlQ2FjaGVkUG9zaXRpb24oKTsKLSAgICAvLyBI
VE1MTWVkaWFFbGVtZW50IHdpbGwgZW1pdCBlbmRlZCBpZiBjdXJyZW50VGltZSA+PSBkdXJhdGlv
biAod2hpY2ggc2hvdWxkIG5vdyBiZSB0aGUgY2FzZSkuCi0gICAgQVNTRVJUKGN1cnJlbnRNZWRp
YVRpbWUoKSA9PSBkdXJhdGlvbk1lZGlhVGltZSgpKTsKLSAgICBtX3BsYXllci0+dGltZUNoYW5n
ZWQoKTsKKyAgICBpZiAoVU5MSUtFTFkoIW1fcGlwZWxpbmUgfHwgbV9lcnJvck9jY3VyZWQpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAobV9zZWVraW5nKQorICAgICAgICBtYXliZUZpbmlz
aFNlZWsoKTsKKyAgICBlbHNlCisgICAgICAgIHVwZGF0ZVN0YXRlcygpOwogfQogCiBib29sIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6aXNUaW1lQnVmZmVyZWQoY29uc3QgTWVkaWFU
aW1lICZ0aW1lKSBjb25zdApAQCAtMjQ0LDYgKzY0MSwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lck1TRTo6c2V0TWVkaWFTb3VyY2VDbGllbnQoUmVmPE1lZGlhU291cmNlQ2xp
ZW50RwogICAgIG1fbWVkaWFTb3VyY2VDbGllbnQgPSBjbGllbnQucHRyKCk7CiB9CiAKK1JlZlB0
cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyTVNFOjptZWRpYVNvdXJjZUNsaWVudCgpCit7CisgICAgcmV0dXJuIG1fbWVkaWFTb3VyY2VD
bGllbnQ7Cit9CisKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpibG9ja0R1
cmF0aW9uQ2hhbmdlcygpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTI1Niw2
ICs2NTgsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dW5ibG9ja0R1
cmF0aW9uQ2hhbmdlcygpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBpZiAobV9z
aG91bGRSZXBvcnREdXJhdGlvbldoZW5VbmJsb2NraW5nKSB7CiAgICAgICAgIG1fcGxheWVyLT5k
dXJhdGlvbkNoYW5nZWQoKTsKKyAgICAgICAgbV9wbGF5YmFja1BpcGVsaW5lLT5ub3RpZnlEdXJh
dGlvbkNoYW5nZWQoKTsKICAgICAgICAgbV9zaG91bGRSZXBvcnREdXJhdGlvbldoZW5VbmJsb2Nr
aW5nID0gZmFsc2U7CiAgICAgfQogCkBAIC0yNzgsOSArNjgxLDEwIEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpkdXJhdGlvbkNoYW5nZWQoKQogICAgIC8vIEF2b2lkIGVt
aXRpbmcgZHVyYXRpb25jaGFuZ2VkIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBwcmV2aW91cyBkdXJh
dGlvbiB3YXMgMCBiZWNhdXNlIHRoYXQgY2FzZSBpcyBhbHJlYWR5IGhhbmRsZWQKICAgICAvLyBi
eSB0aGUgSFRNTE1lZGlhRWxlbWVudC4KICAgICBpZiAobV9tZWRpYVRpbWVEdXJhdGlvbiAhPSBw
cmV2aW91c0R1cmF0aW9uICYmIG1fbWVkaWFUaW1lRHVyYXRpb24uaXNWYWxpZCgpICYmIHByZXZp
b3VzRHVyYXRpb24uaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmICghbV9hcmVEdXJhdGlvbkNoYW5n
ZXNCbG9ja2VkKQorICAgICAgICBpZiAoIW1fYXJlRHVyYXRpb25DaGFuZ2VzQmxvY2tlZCkgewog
ICAgICAgICAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwotICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPm5vdGlmeUR1cmF0aW9uQ2hhbmdlZCgpOwor
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG1fc2hvdWxkUmVwb3J0RHVyYXRpb25XaGVuVW5i
bG9ja2luZyA9IHRydWU7CiAgICAgICAgIG1fbWVkaWFTb3VyY2UtPmR1cmF0aW9uQ2hhbmdlZCht
X21lZGlhVGltZUR1cmF0aW9uKTsKICAgICB9CkBAIC0yOTAsMTggKzY5NCwyMCBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6dHJhY2tEZXRlY3RlZChSZWZQdHI8QXBwZW5k
UGlwZWxpbmU+IGFwcGVuZAogewogICAgIEFTU0VSVChhcHBlbmRQaXBlbGluZS0+dHJhY2soKSA9
PSBuZXdUcmFjayk7CiAKLSAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHMgPSBhcHBlbmRQaXBlbGlu
ZS0+YXBwc2lua0NhcHMoKTsKKyAgICBHc3RDYXBzKiBjYXBzID0gYXBwZW5kUGlwZWxpbmUtPmFw
cHNpbmtDYXBzKCk7CiAgICAgQVNTRVJUKGNhcHMpOwotICAgIEdTVF9ERUJVRygidHJhY2sgSUQ6
ICVzLCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgbmV3VHJhY2stPmlkKCkuc3RyaW5nKCkubGF0
aW4xKCkuZGF0YSgpLCBjYXBzLmdldCgpKTsKKyAgICBHU1RfREVCVUcoInRyYWNrIElEOiAlcywg
Y2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIG5ld1RyYWNrLT5pZCgpLnN0cmluZygpLmxhdGluMSgp
LmRhdGEoKSwgY2Fwcyk7CiAKLSAgICBpZiAoZG9DYXBzSGF2ZVR5cGUoY2Fwcy5nZXQoKSwgR1NU
X1ZJREVPX0NBUFNfVFlQRV9QUkVGSVgpKSB7Ci0gICAgICAgIE9wdGlvbmFsPEZsb2F0U2l6ZT4g
c2l6ZSA9IGdldFZpZGVvUmVzb2x1dGlvbkZyb21DYXBzKGNhcHMuZ2V0KCkpOworICAgIGlmIChk
b0NhcHNIYXZlVHlwZShjYXBzLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKKyAgICAg
ICAgT3B0aW9uYWw8RmxvYXRTaXplPiBzaXplID0gZ2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNhcHMo
Y2Fwcyk7CiAgICAgICAgIGlmIChzaXplLmhhc1ZhbHVlKCkpCiAgICAgICAgICAgICBtX3ZpZGVv
U2l6ZSA9IHNpemUudmFsdWUoKTsKICAgICB9CiAKICAgICBpZiAoZmlyc3RUcmFja0RldGVjdGVk
KQotICAgICAgICB3ZWJLaXRNZWRpYVNyY0FkZFN0cmVhbShXRUJLSVRfTUVESUFfU1JDKG1fc291
cmNlLmdldCgpKSwgbmV3VHJhY2stPmlkKCksIGFwcGVuZFBpcGVsaW5lLT5zdHJlYW1UeXBlKCks
IFdURk1vdmUoY2FwcykpOworICAgICAgICBtX3BsYXliYWNrUGlwZWxpbmUtPmF0dGFjaFRyYWNr
KGFwcGVuZFBpcGVsaW5lLT5zb3VyY2VCdWZmZXJQcml2YXRlKCksIG5ld1RyYWNrLCBjYXBzKTsK
KyAgICBlbHNlCisgICAgICAgIG1fcGxheWJhY2tQaXBlbGluZS0+cmVhdHRhY2hUcmFjayhhcHBl
bmRQaXBlbGluZS0+c291cmNlQnVmZmVyUHJpdmF0ZSgpLCBuZXdUcmFjaywgY2Fwcyk7CiB9CiAK
IHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOjpnZXRTdXBwb3J0ZWRUeXBlcyhI
YXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYgdHlwZXMpCkBAIC0zMzgs
NiArNzQ0LDM0IEBAIE1lZGlhUGxheWVyOjpTdXBwb3J0c1R5cGUgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkCiAgICAgcmV0dXJuIGZpbmFsUmVz
dWx0OwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6bWFya0VuZE9m
U3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQorewor
ICAgIGlmIChzdGF0dXMgIT0gTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOb0Vycm9yKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoIk1hcmtpbmcgZW5kIG9mIHN0cmVhbSIpOworICAg
IG1fZW9zTWFya2VkID0gdHJ1ZTsKKyAgICB1cGRhdGVTdGF0ZXMoKTsKK30KKworTWVkaWFUaW1l
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRTo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0
Cit7CisgICAgTWVkaWFUaW1lIHBvc2l0aW9uID0gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpjdXJyZW50TWVkaWFUaW1lKCk7CisKKyAgICBpZiAobV9lb3NQZW5kaW5nICYmIHBvc2l0aW9u
ID49IGR1cmF0aW9uTWVkaWFUaW1lKCkpIHsKKyAgICAgICAgaWYgKG1fbmV0d29ya1N0YXRlICE9
IE1lZGlhUGxheWVyOjpMb2FkZWQpIHsKKyAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVk
aWFQbGF5ZXI6OkxvYWRlZDsKKyAgICAgICAgICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFu
Z2VkKCk7CisgICAgICAgIH0KKworICAgICAgICBtX2Vvc1BlbmRpbmcgPSBmYWxzZTsKKyAgICAg
ICAgbV9pc0VuZFJlYWNoZWQgPSB0cnVlOworICAgICAgICBtX2NhY2hlZFBvc2l0aW9uID0gbV9t
ZWRpYVRpbWVEdXJhdGlvbjsKKyAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisgICAg
fQorICAgIHJldHVybiBwb3NpdGlvbjsKK30KKwogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lck1TRTo6bWF4TWVkaWFUaW1lU2Vla2FibGUoKSBjb25zdAogewogICAgIGlmIChV
TkxJS0VMWShtX2Vycm9yT2NjdXJlZCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1T
RS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UuaAppbmRleCBmZTYxNzlmODAxMjVkZGEzNTEwNzli
ZmY0OWE1Yjc5NGM0NzQ4MTlhLi4zYmNjMGZkYmEzODgzYWVlYzZlMmUyNjU4NWVhYzhjYmJlMGQ0
ZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyTVNFLmgKQEAgLTU1LDEyICs1NSwxMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVE
b3dubG9hZEJ1ZmZlcmluZ0ZsYWcoKSBvdmVycmlkZSB7IH07CiAKICAgICBib29sIGlzTGl2ZVN0
cmVhbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgTWVkaWFUaW1lIGN1
cnJlbnRNZWRpYVRpbWUoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgcGxheSgpIG92ZXJy
aWRlOwogICAgIHZvaWQgcGF1c2UoKSBvdmVycmlkZTsKKyAgICBib29sIHNlZWtpbmcoKSBjb25z
dCBvdmVycmlkZTsKICAgICB2b2lkIHNlZWsoY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCByZXBvcnRTZWVrQ29tcGxldGVkKCk7Ci0gICAgdm9pZCB1cGRhdGVQaXBlbGluZVN0
YXRlKEdzdFN0YXRlKTsKKyAgICB2b2lkIGNvbmZpZ3VyZVBsYXlTaW5rKCkgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBjaGFuZ2VQaXBlbGluZVN0YXRlKEdzdFN0YXRlKSBvdmVycmlkZTsKIAogICAgIHZv
aWQgZHVyYXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CiAgICAgTWVkaWFUaW1lIGR1cmF0aW9uTWVk
aWFUaW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC03MiwzOCArNzMsNTAgQEAgcHVibGljOgogICAg
IHZvaWQgc291cmNlU2V0dXAoR3N0RWxlbWVudCopIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRS
ZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlKTsKKyAgICB2b2lkIHdhaXRGb3JTZWVr
Q29tcGxldGVkKCk7CisgICAgdm9pZCBzZWVrQ29tcGxldGVkKCk7CiAgICAgTWVkaWFTb3VyY2VQ
cml2YXRlQ2xpZW50KiBtZWRpYVNvdXJjZVByaXZhdGVDbGllbnQoKSB7IHJldHVybiBtX21lZGlh
U291cmNlLmdldCgpOyB9CiAKKyAgICB2b2lkIG1hcmtFbmRPZlN0cmVhbShNZWRpYVNvdXJjZVBy
aXZhdGU6OkVuZE9mU3RyZWFtU3RhdHVzKTsKKwogICAgIHZvaWQgdHJhY2tEZXRlY3RlZChSZWZQ
dHI8QXBwZW5kUGlwZWxpbmU+LCBSZWZQdHI8V2ViQ29yZTo6VHJhY2tQcml2YXRlQmFzZT4sIGJv
b2wgZmlyc3RUcmFja0RldGVjdGVkKTsKKyAgICB2b2lkIG5vdGlmeVNlZWtOZWVkc0RhdGFGb3JU
aW1lKGNvbnN0IE1lZGlhVGltZSYpOwogCiAgICAgdm9pZCBibG9ja0R1cmF0aW9uQ2hhbmdlcygp
OwogICAgIHZvaWQgdW5ibG9ja0R1cmF0aW9uQ2hhbmdlcygpOwogCi0gICAgdm9pZCBhc3luY1N0
YXRlQ2hhbmdlRG9uZSgpIG92ZXJyaWRlIHsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCBkaWRF
bmQoKSBvdmVycmlkZTsKLQogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBnZXRTdXBwb3J0ZWRU
eXBlcyhIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPiYpOwogICAgIHN0
YXRpYyBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIHN1cHBvcnRzVHlwZShjb25zdCBNZWRpYUVu
Z2luZVN1cHBvcnRQYXJhbWV0ZXJzJik7CiAKKyAgICAvLyBGSVhNRTogUmVkdWNlIGNvZGUgZHVw
bGljYXRpb24uCiAgICAgdm9pZCB1cGRhdGVTdGF0ZXMoKSBvdmVycmlkZTsKIAorICAgIGJvb2wg
ZG9TZWVrKGNvbnN0IE1lZGlhVGltZSYsIGZsb2F0LCBHc3RTZWVrRmxhZ3MpIG92ZXJyaWRlOwor
ICAgIGJvb2wgZG9TZWVrKCk7CisgICAgdm9pZCBtYXliZUZpbmlzaFNlZWsoKTsKKyAgICB2b2lk
IHVwZGF0ZVBsYXliYWNrUmF0ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgYXN5bmNTdGF0ZUNoYW5n
ZURvbmUoKSBvdmVycmlkZTsKKwogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdmlkZW9QbGF5YmFj
a1F1YWxpdHlNZXRyaWNzLgogICAgIGJvb2wgaXNUaW1lQnVmZmVyZWQoY29uc3QgTWVkaWFUaW1l
JikgY29uc3Q7CiAKICAgICBib29sIGlzTWVkaWFTb3VyY2UoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAKICAgICB2b2lkIHNldE1lZGlhU291cmNlQ2xpZW50KFJlZjxNZWRpYVNv
dXJjZUNsaWVudEdTdHJlYW1lck1TRT4pOworICAgIFJlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdT
dHJlYW1lck1TRT4gbWVkaWFTb3VyY2VDbGllbnQoKTsKIAogICAgIEhhc2hNYXA8UmVmUHRyPFNv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBSZWZQdHI8QXBwZW5kUGlwZWxpbmU+PiBtX2Fw
cGVuZFBpcGVsaW5lc01hcDsKKyAgICBib29sIG1fZW9zTWFya2VkID0gZmFsc2U7CisgICAgbXV0
YWJsZSBib29sIG1fZW9zUGVuZGluZyA9IGZhbHNlOworICAgIGJvb2wgbV9nc3RTZWVrQ29tcGxl
dGVkID0gdHJ1ZTsKICAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50PiBtX21lZGlh
U291cmNlOwogICAgIFJlZlB0cjxNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRT4gbV9tZWRp
YVNvdXJjZUNsaWVudDsKICAgICBNZWRpYVRpbWUgbV9tZWRpYVRpbWVEdXJhdGlvbjsKKyAgICBi
b29sIG1fbXNlU2Vla0NvbXBsZXRlZCA9IHRydWU7CiAgICAgYm9vbCBtX2FyZUR1cmF0aW9uQ2hh
bmdlc0Jsb2NrZWQgPSBmYWxzZTsKICAgICBib29sIG1fc2hvdWxkUmVwb3J0RHVyYXRpb25XaGVu
VW5ibG9ja2luZyA9IGZhbHNlOwotICAgIGJvb2wgbV9pc1BpcGVsaW5lUGxheWluZyA9IHRydWU7
CisgICAgUmVmUHRyPFBsYXliYWNrUGlwZWxpbmU+IG1fcGxheWJhY2tQaXBlbGluZTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRS5jcHAKaW5kZXggZThkOWQwMTcwNzVlYTg4N2Y4YjZi
YTU5YzMxY2VmODM0ODMzNjNiYy4uZmFlNzRmNGJhNGMxNzkxZGM2NWU1MzVmZWZmMzMzZjQyZjA2
YzMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZS9NZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZUNsaWVudEdT
dHJlYW1lck1TRS5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgIkFwcGVuZFBpcGVs
aW5lLmgiCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFLmgiCisjaW5j
bHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgogI2luY2x1ZGUgIldlYktpdE1lZGlhU291cmNlR1N0
cmVhbWVyLmgiCiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgogCkBAIC01OSwxMyArNjAsMTQgQEAgTWVk
aWFTb3VyY2VQcml2YXRlOjpBZGRTdGF0dXMgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U6
OmFkZFNvdXJjZUJ1ZmZlcihSZWYKIHsKICAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7
CiAKKyAgICBBU1NFUlQobV9wbGF5ZXJQcml2YXRlLm1fcGxheWJhY2tQaXBlbGluZSk7CiAgICAg
QVNTRVJUKHNvdXJjZUJ1ZmZlclByaXZhdGUpOwogCiAgICAgUmVmUHRyPEFwcGVuZFBpcGVsaW5l
PiBhcHBlbmRQaXBlbGluZSA9IGFkb3B0UmVmKG5ldyBBcHBlbmRQaXBlbGluZSgqdGhpcywgKnNv
dXJjZUJ1ZmZlclByaXZhdGUsIG1fcGxheWVyUHJpdmF0ZSkpOwogICAgIEdTVF9UUkFDRSgiQWRk
aW5nIFNvdXJjZUJ1ZmZlciB0byBBcHBlbmRQaXBlbGluZTogdGhpcz0lcCBzb3VyY2VCdWZmZXI9
JXAgYXBwZW5kUGlwZWxpbmU9JXAiLCB0aGlzLCBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpLCBh
cHBlbmRQaXBlbGluZS5nZXQoKSk7CiAgICAgbV9wbGF5ZXJQcml2YXRlLm1fYXBwZW5kUGlwZWxp
bmVzTWFwLmFkZChzb3VyY2VCdWZmZXJQcml2YXRlLCBhcHBlbmRQaXBlbGluZSk7CiAKLSAgICBy
ZXR1cm4gTWVkaWFTb3VyY2VQcml2YXRlOjpPazsKKyAgICByZXR1cm4gbV9wbGF5ZXJQcml2YXRl
Lm1fcGxheWJhY2tQaXBlbGluZS0+YWRkU291cmNlQnVmZmVyKHNvdXJjZUJ1ZmZlclByaXZhdGUp
OwogfQogCiBjb25zdCBNZWRpYVRpbWUmIE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOjpk
dXJhdGlvbigpCkBAIC0xMzUsMTcgKzEzNywyNSBAQCB2b2lkIE1lZGlhU291cmNlQ2xpZW50R1N0
cmVhbWVyTVNFOjphcHBlbmQoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+CiAg
ICAgYXBwZW5kUGlwZWxpbmUtPnB1c2hOZXdCdWZmZXIoV1RGTW92ZShidWZmZXIpKTsKIH0KIAor
dm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTo6bWFya0VuZE9mU3RyZWFtKE1lZGlh
U291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQoreworICAgIEFTU0VSVChX
VEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIG1fcGxheWVyUHJpdmF0ZS5tYXJrRW5kT2ZTdHJl
YW0oc3RhdHVzKTsKK30KKwogdm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTo6cmVt
b3ZlZEZyb21NZWRpYVNvdXJjZShSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcj4g
c291cmNlQnVmZmVyUHJpdmF0ZSkKIHsKICAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7
CiAKKyAgICBBU1NFUlQobV9wbGF5ZXJQcml2YXRlLm1fcGxheWJhY2tQaXBlbGluZSk7CisKICAg
ICAvLyBSZW1vdmUgdGhlIEFwcGVuZFBpcGVsaW5lIGZyb20gdGhlIG1hcC4gVGhpcyBzaG91bGQg
Y2F1c2UgaXRzIGRlc3RydWN0aW9uIHNpbmNlIHRoZXJlIHNob3VsZCBiZSBubyBhbGl2ZQogICAg
IC8vIHJlZmVyZW5jZXMgYXQgdGhpcyBwb2ludC4KICAgICBBU1NFUlQobV9wbGF5ZXJQcml2YXRl
Lm1fYXBwZW5kUGlwZWxpbmVzTWFwLmdldChzb3VyY2VCdWZmZXJQcml2YXRlKS0+aGFzT25lUmVm
KCkpOwogICAgIG1fcGxheWVyUHJpdmF0ZS5tX2FwcGVuZFBpcGVsaW5lc01hcC5yZW1vdmUoc291
cmNlQnVmZmVyUHJpdmF0ZSk7CiAKLSAgICBpZiAoIXNvdXJjZUJ1ZmZlclByaXZhdGUtPnRyYWNr
SWQoKS5pc051bGwoKSkKLSAgICAgICAgd2ViS2l0TWVkaWFTcmNSZW1vdmVTdHJlYW0oV0VCS0lU
X01FRElBX1NSQyhtX3BsYXllclByaXZhdGUubV9zb3VyY2UuZ2V0KCkpLCBzb3VyY2VCdWZmZXJQ
cml2YXRlLT50cmFja0lkKCkpOworICAgIG1fcGxheWVyUHJpdmF0ZS5tX3BsYXliYWNrUGlwZWxp
bmUtPnJlbW92ZVNvdXJjZUJ1ZmZlcihzb3VyY2VCdWZmZXJQcml2YXRlKTsKIH0KIAogdm9pZCBN
ZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTo6Zmx1c2goQXRvbVN0cmluZyB0cmFja0lkKQpA
QCAtMTU0LDQxICsxNjQsMjEgQEAgdm9pZCBNZWRpYVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRTo6
Zmx1c2goQXRvbVN0cmluZyB0cmFja0lkKQogCiAgICAgLy8gVGhpcyBpcyBvbmx5IGZvciBvbi10
aGUtZmx5IHJlZW5xdWV1ZXMgYWZ0ZXIgYXBwZW5kcy4gV2hlbiBzZWVraW5nLCB0aGUgc2VlayB3
aWxsIGRvIGl0cyBvd24gZmx1c2guCiAgICAgaWYgKCFtX3BsYXllclByaXZhdGUubV9zZWVraW5n
KQotICAgICAgICB3ZWJLaXRNZWRpYVNyY0ZsdXNoKFdFQktJVF9NRURJQV9TUkMobV9wbGF5ZXJQ
cml2YXRlLm1fc291cmNlLmdldCgpKSwgdHJhY2tJZCk7CisgICAgICAgIG1fcGxheWVyUHJpdmF0
ZS5tX3BsYXliYWNrUGlwZWxpbmUtPmZsdXNoKHRyYWNrSWQpOwogfQogCi12b2lkIE1lZGlhU291
cmNlQ2xpZW50R1N0cmVhbWVyTVNFOjplbnF1ZXVlU2FtcGxlKFJlZjxNZWRpYVNhbXBsZT4mJiBz
YW1wbGUsIEF0b21TdHJpbmcgdHJhY2tJZCkKK3ZvaWQgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFt
ZXJNU0U6OmVucXVldWVTYW1wbGUoUmVmPE1lZGlhU2FtcGxlPiYmIHNhbXBsZSkKIHsKICAgICBB
U1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CiAKLSAgICBHU1RfVFJBQ0UoImVucXVlaW5nIHNh
bXBsZSB0cmFja0lkPSVzIFBUUz0lZiBwcmVzZW50YXRpb25TaXplPSUuMGZ4JS4wZiBhdCAlIiBH
U1RfVElNRV9GT1JNQVQgIiBkdXJhdGlvbjogJSIgR1NUX1RJTUVfRk9STUFULAotICAgICAgICB0
cmFja0lkLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgp
LnRvRmxvYXQoKSwKLSAgICAgICAgc2FtcGxlLT5wcmVzZW50YXRpb25TaXplKCkud2lkdGgoKSwg
c2FtcGxlLT5wcmVzZW50YXRpb25TaXplKCkuaGVpZ2h0KCksCi0gICAgICAgIEdTVF9USU1FX0FS
R1MoV2ViQ29yZTo6dG9Hc3RDbG9ja1RpbWUoc2FtcGxlLT5wcmVzZW50YXRpb25UaW1lKCkpKSwK
LSAgICAgICAgR1NUX1RJTUVfQVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShzYW1wbGUtPmR1
cmF0aW9uKCkpKSk7Ci0KLSAgICBHUmVmUHRyPEdzdFNhbXBsZT4gZ3N0U2FtcGxlID0gc2FtcGxl
LT5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5nc3RTYW1wbGU7Ci0gICAgQVNTRVJUKGdzdFNhbXBs
ZSk7Ci0gICAgQVNTRVJUKGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihnc3RTYW1wbGUuZ2V0KCkpKTsK
LQotICAgIHdlYktpdE1lZGlhU3JjRW5xdWV1ZVNhbXBsZShXRUJLSVRfTUVESUFfU1JDKG1fcGxh
eWVyUHJpdmF0ZS5tX3NvdXJjZS5nZXQoKSksIHRyYWNrSWQsIFdURk1vdmUoZ3N0U2FtcGxlKSk7
Ci19Ci0KLWJvb2wgTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0U6OmlzUmVhZHlGb3JNb3Jl
U2FtcGxlcyhjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKQotewotICAgIHJldHVybiB3ZWJLaXRN
ZWRpYVNyY0lzUmVhZHlGb3JNb3JlU2FtcGxlcyhXRUJLSVRfTUVESUFfU1JDKG1fcGxheWVyUHJp
dmF0ZS5tX3NvdXJjZS5nZXQoKSksIHRyYWNrSWQpOwotfQotCi12b2lkIE1lZGlhU291cmNlQ2xp
ZW50R1N0cmVhbWVyTVNFOjpub3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25z
dCBBdG9tU3RyaW5nJiB0cmFja0lkLCBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50KiBzb3VyY2VC
dWZmZXIpCi17Ci0gICAgd2ViS2l0TWVkaWFTcmNOb3RpZnlXaGVuUmVhZHlGb3JNb3JlU2FtcGxl
cyhXRUJLSVRfTUVESUFfU1JDKG1fcGxheWVyUHJpdmF0ZS5tX3NvdXJjZS5nZXQoKSksIHRyYWNr
SWQsIHNvdXJjZUJ1ZmZlcik7CisgICAgbV9wbGF5ZXJQcml2YXRlLm1fcGxheWJhY2tQaXBlbGlu
ZS0+ZW5xdWV1ZVNhbXBsZShXVEZNb3ZlKHNhbXBsZSkpOwogfQogCiB2b2lkIE1lZGlhU291cmNl
Q2xpZW50R1N0cmVhbWVyTVNFOjphbGxTYW1wbGVzSW5UcmFja0VucXVldWVkKGNvbnN0IEF0b21T
dHJpbmcmIHRyYWNrSWQpCiB7CiAgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwogCi0g
ICAgd2ViS2l0TWVkaWFTcmNFbmRPZlN0cmVhbShXRUJLSVRfTUVESUFfU1JDKG1fcGxheWVyUHJp
dmF0ZS5tX3NvdXJjZS5nZXQoKSksIHRyYWNrSWQpOworICAgIG1fcGxheWVyUHJpdmF0ZS5tX3Bs
YXliYWNrUGlwZWxpbmUtPmFsbFNhbXBsZXNJblRyYWNrRW5xdWV1ZWQodHJhY2tJZCk7CiB9CiAK
IEdSZWZQdHI8V2ViS2l0TWVkaWFTcmM+IE1lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFOjp3
ZWJLaXRNZWRpYVNyYygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlQ2xpZW50R1N0cmVhbWVyTVNFLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlQ2xp
ZW50R1N0cmVhbWVyTVNFLmgKaW5kZXggOGU1MmY5NGEwZjJjZjZjNWE2NmIzNThhNWM4NGY4NzJl
YzQ1NzI4MC4uNTAwOGEwNjEzYWNjZDQwNjFiMmZjZmRlMzYyMWEyOWI0YTE1YjkxNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRp
YVNvdXJjZUNsaWVudEdTdHJlYW1lck1TRS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VDbGllbnRHU3RyZWFtZXJNU0UuaApA
QCAtNDMsNiArNDMsNyBAQCBwdWJsaWM6CiAgICAgLy8gRnJvbSBNZWRpYVNvdXJjZUdTdHJlYW1l
ci4KICAgICBNZWRpYVNvdXJjZVByaXZhdGU6OkFkZFN0YXR1cyBhZGRTb3VyY2VCdWZmZXIoUmVm
UHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+LCBjb25zdCBDb250ZW50VHlwZSYpOwog
ICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKGNvbnN0IE1lZGlhVGltZSYpOworICAgIHZvaWQgbWFy
a0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpOwogCiAg
ICAgLy8gRnJvbSBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLgogICAgIHZvaWQgYWJvcnQo
UmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+KTsKQEAgLTUwLDEyICs1MSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFwcGVuZChSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcj4sIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYmKTsKICAgICB2b2lkIHJlbW92ZWRGcm9tTWVk
aWFTb3VyY2UoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI+KTsKICAgICB2b2lk
IGZsdXNoKEF0b21TdHJpbmcpOwotICAgIHZvaWQgZW5xdWV1ZVNhbXBsZShSZWY8TWVkaWFTYW1w
bGU+JiYsIEF0b21TdHJpbmcgdHJhY2tJZCk7CisgICAgdm9pZCBlbnF1ZXVlU2FtcGxlKFJlZjxN
ZWRpYVNhbXBsZT4mJik7CiAgICAgdm9pZCBhbGxTYW1wbGVzSW5UcmFja0VucXVldWVkKGNvbnN0
IEF0b21TdHJpbmcmKTsKIAotICAgIGJvb2wgaXNSZWFkeUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0
b21TdHJpbmcmKTsKLSAgICB2b2lkIG5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVz
KGNvbnN0IEF0b21TdHJpbmcmLCBTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Kik7Ci0KICAgICBj
b25zdCBNZWRpYVRpbWUmIGR1cmF0aW9uKCk7CiAgICAgR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4g
d2ViS2l0TWVkaWFTcmMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9NZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlR1N0cmVh
bWVyLmNwcAppbmRleCA1MWFkZjgyODVmMTQ5NjQ4ZThjZGMzYmE4ZDQyZjI1ZmM5YjJhNjkxLi5l
NjJjZDU2YTg0NmIzNDc2MTIzNDQ4MzUyNWEyZTZhMGZiNjgwZTUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlhU291cmNlR1N0
cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtOTIsMTggKzkyLDE0IEBAIHZvaWQg
TWVkaWFTb3VyY2VHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZCgpCiAgICAgbV9jbGllbnQtPmR1
cmF0aW9uQ2hhbmdlZChtX21lZGlhU291cmNlLT5kdXJhdGlvbigpKTsKIH0KIAotdm9pZCBNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6bWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKQordm9p
ZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVz
IHN0YXR1cykKIHsKLSAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGluIHRoZSBB
cHBlbmRQaXBlbGluZSBub3IgdGhlIHBsYXliYWNrIHBpcGVsaW5lLiBJbnN0ZWFkLCBTb3VyY2VC
dWZmZXIga25vd3MgYmV0dGVyCi0gICAgLy8gd2hlbiAuZW5kT2ZTdHJlYW0oKSBoYXMgYmVlbiBj
YWxsZWQgYW5kIHRoZXJlIGFyZSBubyBtb3JlIHNhbXBsZXMgdG8gZW5xdWV1ZSwgd2hpY2ggaXQg
d2lsbCBzaWduYWwgd2l0aCBhIGNhbGwKLSAgICAvLyB0byBTb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyOjphbGxTYW1wbGVzSW5UcmFja0VucXVldWVkKCksIHdoZXJlIHdlIGVucXVldWUgYW4g
RU9TIGV2ZW50IGludG8gV2ViS2l0TWVkaWFTcmMuCi0KLSAgICAvLyBBdCB0aGlzIHBvaW50IGl0
IHdvdWxkIGJlIGRhbmdlcm91c2x5IGVhcmx5IHRvIGRvIHRoYXQhIFRoZXJlIG1heSBiZSBzYW1w
bGVzIHdhaXRpbmcgdG8gcmVhY2ggV2ViS2l0TWVkaWFTcmMKLSAgICAvLyAoZS5nLiBiZWNhdXNl
IGhpZ2ggd2F0ZXIgbGV2ZWwgaXMgaGl0KSB0aGF0IHdpbGwgbm90IGJlIHNob3duIGlmIHdlIGVu
cXVldWUgYW4gRU9TIG5vdy4KKyAgICBtX2NsaWVudC0+bWFya0VuZE9mU3RyZWFtKHN0YXR1cyk7
CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnVubWFya0VuZE9mU3RyZWFtKCkKIHsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6cmVhZHlTdGF0ZSgpIGNvbnN0CkBAIC0xMTgsMTEgKzExNCwxMiBA
QCB2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpS
ZWFkeVN0YXRlIHN0YXRlKQogCiB2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjp3YWl0Rm9yU2Vl
a0NvbXBsZXRlZCgpCiB7CisgICAgbV9wbGF5ZXJQcml2YXRlLndhaXRGb3JTZWVrQ29tcGxldGVk
KCk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNlZWtDb21wbGV0ZWQoKQogewot
ICAgIG1fcGxheWVyUHJpdmF0ZS5yZXBvcnRTZWVrQ29tcGxldGVkKCk7CisgICAgbV9wbGF5ZXJQ
cml2YXRlLnNlZWtDb21wbGV0ZWQoKTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6
c291cmNlQnVmZmVyUHJpdmF0ZURpZENoYW5nZUFjdGl2ZVN0YXRlKFNvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXIqIHNvdXJjZUJ1ZmZlclByaXZhdGUsIGJvb2wgaXNBY3RpdmUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL01lZGlh
U291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL01lZGlhU291cmNlR1N0cmVhbWVyLmgKaW5kZXggMGE0NDc0NmVkMTA1MTllYzlm
MDgyMmVkYjc0YTdjOTBkNzMzNjAxZS4uYzlhMDlmYTA0MzlmZWY4ZWI4ZGI3NTA1ZmNiYzk3ZTA1
MjM3OGVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZS9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvTWVkaWFTb3VyY2VHU3RyZWFtZXIuaApAQCAt
NDAsNiArNDAsOCBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE1lZGlhU3JjIFdlYktpdE1lZGlhU3Jj
OworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3Ry
ZWFtZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvbXNlL1BsYXliYWNrUGlwZWxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1BpcGVsaW5lLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5i
MDA1ZDBkMzM1MjY2NGY3ZjliZWQ5ZjcwMjA5NzcyYWIwMDI3NDUwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFj
a1BpcGVsaW5lLmNwcApAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDE2IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgSWdhbGlhIFMuTAorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF5YmFj
a1BpcGVsaW5lLmgiCisKKyNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpICYmIEVO
QUJMRShNRURJQV9TT1VSQ0UpCisKKyNpbmNsdWRlICJBdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1l
ci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIk1lZGlhU2FtcGxl
R1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGUuaCIKKyNpbmNsdWRlICJTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVkZSA8Z3N0
L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL2ds
aWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KKworR1NU
X0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfbXNlX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NB
VF9ERUZBVUxUIHdlYmtpdF9tc2VfZGVidWcKKworc3RhdGljIFN0cmVhbSogZ2V0U3RyZWFtQnlU
cmFja0lkKFdlYktpdE1lZGlhU3JjKiwgQXRvbVN0cmluZyk7CitzdGF0aWMgU3RyZWFtKiBnZXRT
dHJlYW1CeVNvdXJjZUJ1ZmZlclByaXZhdGUoV2ViS2l0TWVkaWFTcmMqLCBXZWJDb3JlOjpTb3Vy
Y2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyKik7CisKK3N0YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5
VHJhY2tJZChXZWJLaXRNZWRpYVNyYyogc291cmNlLCBBdG9tU3RyaW5nIHRyYWNrSWRTdHJpbmcp
Cit7CisgICAgLy8gV2ViS2l0TWVkaWFTcmMgc2hvdWxkIGJlIGxvY2tlZCBhdCB0aGlzIHBvaW50
LgorICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAg
ICAgICAgaWYgKHN0cmVhbS0+dHlwZSAhPSBXZWJDb3JlOjpJbnZhbGlkCisgICAgICAgICAgICAm
JiAoKHN0cmVhbS0+YXVkaW9UcmFjayAmJiBzdHJlYW0tPmF1ZGlvVHJhY2stPmlkKCkgPT0gdHJh
Y2tJZFN0cmluZykKKyAgICAgICAgICAgICAgICB8fCAoc3RyZWFtLT52aWRlb1RyYWNrICYmIHN0
cmVhbS0+dmlkZW9UcmFjay0+aWQoKSA9PSB0cmFja0lkU3RyaW5nKSApICkgeworICAgICAgICAg
ICAgcmV0dXJuIHN0cmVhbTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworc3RhdGljIFN0cmVhbSogZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKFdlYktp
dE1lZGlhU3JjKiBzb3VyY2UsIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIq
IHNvdXJjZUJ1ZmZlclByaXZhdGUpCit7CisgICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHNvdXJj
ZS0+cHJpdi0+c3RyZWFtcykgeworICAgICAgICBpZiAoc3RyZWFtLT5zb3VyY2VCdWZmZXIgPT0g
c291cmNlQnVmZmVyUHJpdmF0ZSkKKyAgICAgICAgICAgIHJldHVybiBzdHJlYW07CisgICAgfQor
ICAgIHJldHVybiBudWxscHRyOworfQorCisvLyBGSVhNRTogVXNlIGdzdF9hcHBfc3JjX3B1c2hf
c2FtcGxlKCkgaW5zdGVhZCB3aGVuIHdlIHN3aXRjaCB0byB0aGUgYXBwcm9wcmlhdGUgR1N0cmVh
bWVyIHZlcnNpb24uCitzdGF0aWMgR3N0Rmxvd1JldHVybiBwdXNoU2FtcGxlKEdzdEFwcFNyYyog
YXBwc3JjLCBHc3RTYW1wbGUqIHNhbXBsZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChH
U1RfSVNfU0FNUExFKHNhbXBsZSksIEdTVF9GTE9XX0VSUk9SKTsKKworICAgIEdzdENhcHMqIGNh
cHMgPSBnc3Rfc2FtcGxlX2dldF9jYXBzKHNhbXBsZSk7CisgICAgaWYgKGNhcHMpCisgICAgICAg
IGdzdF9hcHBfc3JjX3NldF9jYXBzKGFwcHNyYywgY2Fwcyk7CisgICAgZWxzZQorICAgICAgICBH
U1RfV0FSTklOR19PQkpFQ1QoYXBwc3JjLCAicmVjZWl2ZWQgc2FtcGxlIHdpdGhvdXQgY2FwcyIp
OworCisgICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoc2FtcGxl
KTsKKyAgICBpZiAoVU5MSUtFTFkoIWJ1ZmZlcikpIHsKKyAgICAgICAgR1NUX1dBUk5JTkdfT0JK
RUNUKGFwcHNyYywgInJlY2VpdmVkIHNhbXBsZSB3aXRob3V0IGJ1ZmZlciIpOworICAgICAgICBy
ZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfQorCisgICAgLy8gZ3N0X2FwcF9zcmNfcHVzaF9idWZm
ZXIoKSBzdGVhbHMgdGhlIHJlZmVyZW5jZSwgd2UgbmVlZCBhbiBhZGRpdGlvbmFsIG9uZS4KKyAg
ICByZXR1cm4gZ3N0X2FwcF9zcmNfcHVzaF9idWZmZXIoYXBwc3JjLCBnc3RfYnVmZmVyX3JlZihi
dWZmZXIpKTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXliYWNrUGlwZWxp
bmU6OnNldFdlYktpdE1lZGlhU3JjKFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYykKK3sK
KyAgICBHU1RfREVCVUcoIndlYktpdE1lZGlhU3JjPSVwIiwgd2ViS2l0TWVkaWFTcmMpOworICAg
IG1fd2ViS2l0TWVkaWFTcmMgPSB3ZWJLaXRNZWRpYVNyYzsKK30KKworV2ViS2l0TWVkaWFTcmMq
IFBsYXliYWNrUGlwZWxpbmU6OndlYktpdE1lZGlhU3JjKCkKK3sKKyAgICByZXR1cm4gbV93ZWJL
aXRNZWRpYVNyYy5nZXQoKTsKK30KKworTWVkaWFTb3VyY2VQcml2YXRlOjpBZGRTdGF0dXMgUGxh
eWJhY2tQaXBlbGluZTo6YWRkU291cmNlQnVmZmVyKFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRl
R1N0cmVhbWVyPiBzb3VyY2VCdWZmZXJQcml2YXRlKQoreworICAgIFdlYktpdE1lZGlhU3JjUHJp
dmF0ZSogcHJpdiA9IG1fd2ViS2l0TWVkaWFTcmMtPnByaXY7CisKKyAgICBpZiAocHJpdi0+YWxs
VHJhY2tzQ29uZmlndXJlZCkgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1fd2ViS2l0TWVk
aWFTcmMuZ2V0KCksICJBZGRpbmcgbmV3IHNvdXJjZSBidWZmZXJzIGFmdGVyIGZpcnN0IGRhdGEg
bm90IHN1cHBvcnRlZCB5ZXQiKTsKKyAgICAgICAgcmV0dXJuIE1lZGlhU291cmNlUHJpdmF0ZTo6
Tm90U3VwcG9ydGVkOworICAgIH0KKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV93ZWJLaXRNZWRp
YVNyYy5nZXQoKSwgIlN0YXRlICVkIiwgaW50KEdTVF9TVEFURShtX3dlYktpdE1lZGlhU3JjLmdl
dCgpKSkpOworCisgICAgU3RyZWFtKiBzdHJlYW0gPSBuZXcgU3RyZWFteyB9OworICAgIHN0cmVh
bS0+cGFyZW50ID0gbV93ZWJLaXRNZWRpYVNyYy5nZXQoKTsKKyAgICBzdHJlYW0tPmFwcHNyYyA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc3JjIiwgbnVsbHB0cik7CisgICAgc3RyZWFt
LT5hcHBzcmNOZWVkRGF0YUZsYWcgPSBmYWxzZTsKKyAgICBzdHJlYW0tPnNvdXJjZUJ1ZmZlciA9
IHNvdXJjZUJ1ZmZlclByaXZhdGUuZ2V0KCk7CisKKyAgICAvLyBObyB0cmFjayBoYXMgYmVlbiBh
dHRhY2hlZCB5ZXQuCisgICAgc3RyZWFtLT50eXBlID0gSW52YWxpZDsKKyAgICBzdHJlYW0tPmNh
cHMgPSBudWxscHRyOworICAgIHN0cmVhbS0+YXVkaW9UcmFjayA9IG51bGxwdHI7CisgICAgc3Ry
ZWFtLT52aWRlb1RyYWNrID0gbnVsbHB0cjsKKyAgICBzdHJlYW0tPnByZXNlbnRhdGlvblNpemUg
PSBXZWJDb3JlOjpGbG9hdFNpemUoKTsKKyAgICBzdHJlYW0tPmxhc3RFbnF1ZXVlZFRpbWUgPSBN
ZWRpYVRpbWU6OmludmFsaWRUaW1lKCk7CisKKyAgICBnc3RfYXBwX3NyY19zZXRfY2FsbGJhY2tz
KEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgJmVuYWJsZWRBcHBzcmNDYWxsYmFja3MsIHN0
cmVhbS0+cGFyZW50LCBudWxscHRyKTsKKyAgICBnc3RfYXBwX3NyY19zZXRfZW1pdF9zaWduYWxz
KEdTVF9BUFBfU1JDKHN0cmVhbS0+YXBwc3JjKSwgRkFMU0UpOworICAgIGdzdF9hcHBfc3JjX3Nl
dF9zdHJlYW1fdHlwZShHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYyksIEdTVF9BUFBfU1RSRUFN
X1RZUEVfU0VFS0FCTEUpOworCisgICAgZ3N0X2FwcF9zcmNfc2V0X21heF9ieXRlcyhHU1RfQVBQ
X1NSQyhzdHJlYW0tPmFwcHNyYyksIDIgKiBXVEY6Ok1CKTsKKyAgICBnX29iamVjdF9zZXQoR19P
QkpFQ1Qoc3RyZWFtLT5hcHBzcmMpLCAiYmxvY2siLCBGQUxTRSwgIm1pbi1wZXJjZW50IiwgMjAs
ICJmb3JtYXQiLCBHU1RfRk9STUFUX1RJTUUsIG51bGxwdHIpOworCisgICAgR1NUX09CSkVDVF9M
T0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworICAgIHByaXYtPnN0cmVhbXMuYXBwZW5kKHN0
cmVhbSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisK
KyAgICBnc3RfYmluX2FkZChHU1RfQklOKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpLCBzdHJlYW0t
PmFwcHNyYyk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChzdHJlYW0t
PmFwcHNyYyk7CisKKyAgICByZXR1cm4gTWVkaWFTb3VyY2VQcml2YXRlOjpPazsKK30KKwordm9p
ZCBQbGF5YmFja1BpcGVsaW5lOjpyZW1vdmVTb3VyY2VCdWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZl
clByaXZhdGVHU3RyZWFtZXI+IHNvdXJjZUJ1ZmZlclByaXZhdGUpCit7CisgICAgQVNTRVJUKFdU
Rjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3dlYktpdE1lZGlh
U3JjLmdldCgpLCAiRWxlbWVudCByZW1vdmVkIGZyb20gTWVkaWFTb3VyY2UiKTsKKyAgICBHU1Rf
T0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgV2ViS2l0TWVkaWFTcmNQ
cml2YXRlKiBwcml2ID0gbV93ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKyAgICBTdHJlYW0qIHN0cmVh
bSA9IGdldFN0cmVhbUJ5U291cmNlQnVmZmVyUHJpdmF0ZShtX3dlYktpdE1lZGlhU3JjLmdldCgp
LCBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKTsKKyAgICBpZiAoc3RyZWFtKQorICAgICAgICBw
cml2LT5zdHJlYW1zLnJlbW92ZUZpcnN0KHN0cmVhbSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0so
bV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBpZiAoc3RyZWFtKQorICAgICAgICB3ZWJL
aXRNZWRpYVNyY0ZyZWVTdHJlYW0obV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgc3RyZWFtKTsKK30K
Kwordm9pZCBQbGF5YmFja1BpcGVsaW5lOjphdHRhY2hUcmFjayhSZWZQdHI8U291cmNlQnVmZmVy
UHJpdmF0ZUdTdHJlYW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgUmVmUHRyPFRyYWNrUHJpdmF0
ZUJhc2U+IHRyYWNrUHJpdmF0ZSwgR3N0Q2FwcyogY2FwcykKK3sKKyAgICBXZWJLaXRNZWRpYVNy
Yyogd2ViS2l0TWVkaWFTcmMgPSBtX3dlYktpdE1lZGlhU3JjLmdldCgpOworCisgICAgR1NUX09C
SkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICBTdHJlYW0qIHN0cmVhbSA9IGdldFN0cmVh
bUJ5U291cmNlQnVmZmVyUHJpdmF0ZSh3ZWJLaXRNZWRpYVNyYywgc291cmNlQnVmZmVyUHJpdmF0
ZS5nZXQoKSk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0sod2ViS2l0TWVkaWFTcmMpOworCisgICAg
QVNTRVJUKHN0cmVhbSk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOwor
ICAgIHVuc2lnbmVkIHBhZElkID0gc3RyZWFtLT5wYXJlbnQtPnByaXYtPm51bWJlck9mUGFkczsK
KyAgICBzdHJlYW0tPnBhcmVudC0+cHJpdi0+bnVtYmVyT2ZQYWRzKys7CisgICAgR1NUX09CSkVD
VF9VTkxPQ0sod2ViS2l0TWVkaWFTcmMpOworCisgICAgY29uc3QgY2hhciogbWVkaWFUeXBlID0g
Y2Fwc01lZGlhVHlwZShjYXBzKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHdlYktpdE1lZGlhU3Jj
LCAiQ29uZmlndXJlZCB0cmFjayAlczogYXBwc3JjPSVzLCBwYWRJZD0ldSwgbWVkaWFUeXBlPSVz
IiwgdHJhY2tQcml2YXRlLT5pZCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIEdTVF9FTEVNRU5U
X05BTUUoc3RyZWFtLT5hcHBzcmMpLCBwYWRJZCwgbWVkaWFUeXBlKTsKKworICAgIEdTVF9PQkpF
Q1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgc3RyZWFtLT50eXBlID0gVW5rbm93bjsKKyAg
ICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBHUmVmUHRyPEdzdFBh
ZD4gc291cmNlUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHN0cmVh
bS0+YXBwc3JjLCAic3JjIikpOworICAgIEFTU0VSVChzb3VyY2VQYWQpOworCisgICAgLy8gRklY
TUU6IElzIHBhZElkIHRoZSBiZXN0IHdheSB0byBpZGVudGlmeSB0aGUgU3RyZWFtPyBXaGF0IGFi
b3V0IHRyYWNrSWQ/CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc291cmNlUGFkLmdl
dCgpKSwgInBhZElkIiwgR0lOVF9UT19QT0lOVEVSKHBhZElkKSk7CisgICAgd2ViS2l0TWVkaWFT
cmNMaW5rU291cmNlUGFkKHNvdXJjZVBhZC5nZXQoKSwgY2Fwcywgc3RyZWFtKTsKKworICAgIEFT
U0VSVChzdHJlYW0tPnBhcmVudC0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlKTsKKyAgICBpbnQg
c2lnbmFsID0gLTE7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOworICAg
IGlmIChkb0NhcHNIYXZlVHlwZShjYXBzLCBHU1RfQVVESU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsK
KyAgICAgICAgc3RyZWFtLT50eXBlID0gQXVkaW87CisgICAgICAgIHN0cmVhbS0+cGFyZW50LT5w
cml2LT5udW1iZXJPZkF1ZGlvU3RyZWFtcysrOworICAgICAgICBzaWduYWwgPSBTSUdOQUxfQVVE
SU9fQ0hBTkdFRDsKKyAgICAgICAgc3RyZWFtLT5hdWRpb1RyYWNrID0gUmVmUHRyPFdlYkNvcmU6
OkF1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyPihzdGF0aWNfY2FzdDxXZWJDb3JlOjpBdWRpb1Ry
YWNrUHJpdmF0ZUdTdHJlYW1lcio+KHRyYWNrUHJpdmF0ZS5nZXQoKSkpOworICAgIH0gZWxzZSBp
ZiAoZG9DYXBzSGF2ZVR5cGUoY2FwcywgR1NUX1ZJREVPX0NBUFNfVFlQRV9QUkVGSVgpKSB7Cisg
ICAgICAgIHN0cmVhbS0+dHlwZSA9IFZpZGVvOworICAgICAgICBzdHJlYW0tPnBhcmVudC0+cHJp
di0+bnVtYmVyT2ZWaWRlb1N0cmVhbXMrKzsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVP
X0NIQU5HRUQ7CisgICAgICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpW
aWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFj
a1ByaXZhdGVHU3RyZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYg
KGRvQ2Fwc0hhdmVUeXBlKGNhcHMsIEdTVF9URVhUX0NBUFNfVFlQRV9QUkVGSVgpKSB7CisgICAg
ICAgIHN0cmVhbS0+dHlwZSA9IFRleHQ7CisgICAgICAgIHN0cmVhbS0+cGFyZW50LT5wcml2LT5u
dW1iZXJPZlRleHRTdHJlYW1zKys7CisgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NIQU5H
RUQ7CisKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGV4dCB0cmFja3MuCisgICAgfQorICAg
IEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIGlmIChzaWduYWwgIT0g
LTEpCisgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQpLCB3ZWJL
aXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUGxheWJh
Y2tQaXBlbGluZTo6cmVhdHRhY2hUcmFjayhSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZUdTdHJl
YW1lcj4gc291cmNlQnVmZmVyUHJpdmF0ZSwgUmVmUHRyPFRyYWNrUHJpdmF0ZUJhc2U+IHRyYWNr
UHJpdmF0ZSwgR3N0Q2FwcyogY2FwcykKK3sKKyAgICBHU1RfREVCVUcoIlJlLWF0dGFjaGluZyB0
cmFjayIpOworCisgICAgLy8gRklYTUU6IE1heWJlIHJlbW92ZSB0aGlzIG1ldGhvZC4gTm93IHRo
ZSBjYXBzIGNoYW5nZSBpcyBtYW5hZ2VkIGJ5IGdzdF9hcHBzcmNfcHVzaF9zYW1wbGUoKSBpbiBl
bnF1ZXVlU2FtcGxlKCkKKyAgICAvLyBhbmQgZmx1c2hBbmRFbnF1ZXVlTm9uRGlzcGxheWluZ1Nh
bXBsZXMoKS4KKworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9IG1fd2ViS2l0
TWVkaWFTcmMuZ2V0KCk7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sod2ViS2l0TWVkaWFTcmMpOwor
ICAgIFN0cmVhbSogc3RyZWFtID0gZ2V0U3RyZWFtQnlTb3VyY2VCdWZmZXJQcml2YXRlKHdlYktp
dE1lZGlhU3JjLCBzb3VyY2VCdWZmZXJQcml2YXRlLmdldCgpKTsKKyAgICBHU1RfT0JKRUNUX1VO
TE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisKKyAgICBBU1NFUlQoc3RyZWFtICYmIHN0cmVhbS0+dHlw
ZSAhPSBJbnZhbGlkKTsKKworICAgIGludCBzaWduYWwgPSAtMTsKKworICAgIEdTVF9PQkpFQ1Rf
TE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgaWYgKGRvQ2Fwc0hhdmVUeXBlKGNhcHMsIEdTVF9B
VURJT19DQVBTX1RZUEVfUFJFRklYKSkgeworICAgICAgICBBU1NFUlQoc3RyZWFtLT50eXBlID09
IEF1ZGlvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX0FVRElPX0NIQU5HRUQ7CisgICAgICAg
IHN0cmVhbS0+YXVkaW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZUdT
dHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIq
Pih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGRvQ2Fwc0hhdmVUeXBlKGNh
cHMsIEdTVF9WSURFT19DQVBTX1RZUEVfUFJFRklYKSkgeworICAgICAgICBBU1NFUlQoc3RyZWFt
LT50eXBlID09IFZpZGVvKTsKKyAgICAgICAgc2lnbmFsID0gU0lHTkFMX1ZJREVPX0NIQU5HRUQ7
CisgICAgICAgIHN0cmVhbS0+dmlkZW9UcmFjayA9IFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNr
UHJpdmF0ZUdTdHJlYW1lcj4oc3RhdGljX2Nhc3Q8V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGVH
U3RyZWFtZXIqPih0cmFja1ByaXZhdGUuZ2V0KCkpKTsKKyAgICB9IGVsc2UgaWYgKGRvQ2Fwc0hh
dmVUeXBlKGNhcHMsIEdTVF9URVhUX0NBUFNfVFlQRV9QUkVGSVgpKSB7CisgICAgICAgIEFTU0VS
VChzdHJlYW0tPnR5cGUgPT0gVGV4dCk7CisgICAgICAgIHNpZ25hbCA9IFNJR05BTF9URVhUX0NI
QU5HRUQ7CisKKyAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgdGV4dCB0cmFja3MuCisgICAgfQor
ICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKKworICAgIGlmIChzaWduYWwg
IT0gLTEpCisgICAgICAgIGdfc2lnbmFsX2VtaXQoR19PQkpFQ1Qoc3RyZWFtLT5wYXJlbnQpLCB3
ZWJLaXRNZWRpYVNyY1NpZ25hbHNbc2lnbmFsXSwgMCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUGxh
eWJhY2tQaXBlbGluZTo6bm90aWZ5RHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAgICBnc3RfZWxlbWVu
dF9wb3N0X21lc3NhZ2UoR1NUX0VMRU1FTlQobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSksIGdzdF9t
ZXNzYWdlX25ld19kdXJhdGlvbl9jaGFuZ2VkKEdTVF9PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5n
ZXQoKSkpKTsKKyAgICAvLyBXZWJLaXRNZWRpYVNyYyB3aWxsIGFzayBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXJNU0UgZm9yIHRoZSBuZXcgZHVyYXRpb24gbGF0ZXIsIHdoZW4gc29tZWJvZHkg
YXNrcyBmb3IgaXQuCit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6bWFya0VuZE9mU3RyZWFt
KE1lZGlhU291cmNlUHJpdmF0ZTo6RW5kT2ZTdHJlYW1TdGF0dXMpCit7CisgICAgV2ViS2l0TWVk
aWFTcmNQcml2YXRlKiBwcml2ID0gbV93ZWJLaXRNZWRpYVNyYy0+cHJpdjsKKworICAgIEdTVF9E
RUJVR19PQkpFQ1QobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSwgIkhhdmUgRU9TIik7CisKKyAgICBH
U1RfT0JKRUNUX0xPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgYm9vbCBhbGxUcmFj
a3NDb25maWd1cmVkID0gcHJpdi0+YWxsVHJhY2tzQ29uZmlndXJlZDsKKyAgICBpZiAoIWFsbFRy
YWNrc0NvbmZpZ3VyZWQpCisgICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVl
OworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworCisgICAg
aWYgKCFhbGxUcmFja3NDb25maWd1cmVkKSB7CisgICAgICAgIGdzdF9lbGVtZW50X25vX21vcmVf
cGFkcyhHU1RfRUxFTUVOVChtX3dlYktpdE1lZGlhU3JjLmdldCgpKSk7CisgICAgICAgIHdlYktp
dE1lZGlhU3JjRG9Bc3luY0RvbmUobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgfQorCisg
ICAgVmVjdG9yPEdzdEFwcFNyYyo+IGFwcHNyY3M7CisKKyAgICBHU1RfT0JKRUNUX0xPQ0sobV93
ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisgICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHByaXYtPnN0
cmVhbXMpIHsKKyAgICAgICAgaWYgKHN0cmVhbS0+YXBwc3JjKQorICAgICAgICAgICAgYXBwc3Jj
cy5hcHBlbmQoR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBzcmMpKTsKKyAgICB9CisgICAgR1NUX09C
SkVDVF9VTkxPQ0sobV93ZWJLaXRNZWRpYVNyYy5nZXQoKSk7CisKKyAgICBmb3IgKEdzdEFwcFNy
YyogYXBwc3JjIDogYXBwc3JjcykKKyAgICAgICAgZ3N0X2FwcF9zcmNfZW5kX29mX3N0cmVhbShh
cHBzcmMpOworfQorCit2b2lkIFBsYXliYWNrUGlwZWxpbmU6OmZsdXNoKEF0b21TdHJpbmcgdHJh
Y2tJZCkKK3sKKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CisKKyAgICBHU1RfREVC
VUcoImZsdXNoOiB0cmFja0lkPSVzIiwgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KworICAgIEdTVF9PQkpFQ1RfTE9DSyhtX3dlYktpdE1lZGlhU3JjLmdldCgpKTsKKyAgICBTdHJl
YW0qIHN0cmVhbSA9IGdldFN0cmVhbUJ5VHJhY2tJZChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCB0
cmFja0lkKTsKKworICAgIGlmICghc3RyZWFtKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
c3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpOworICAg
IEdzdEVsZW1lbnQqIGFwcHNyYyA9IHN0cmVhbS0+YXBwc3JjOworICAgIEdTVF9PQkpFQ1RfVU5M
T0NLKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpOworCisgICAgaWYgKCFhcHBzcmMpCisgICAgICAg
IHJldHVybjsKKworICAgIGdpbnQ2NCBwb3NpdGlvbiA9IEdTVF9DTE9DS19USU1FX05PTkU7Cisg
ICAgR1JlZlB0cjxHc3RRdWVyeT4gcXVlcnkgPSBhZG9wdEdSZWYoZ3N0X3F1ZXJ5X25ld19wb3Np
dGlvbihHU1RfRk9STUFUX1RJTUUpKTsKKyAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnkocGlwZWxp
bmUoKSwgcXVlcnkuZ2V0KCkpKQorICAgICAgICBnc3RfcXVlcnlfcGFyc2VfcG9zaXRpb24ocXVl
cnkuZ2V0KCksIDAsICZwb3NpdGlvbik7CisKKyAgICBHU1RfVFJBQ0UoIlBvc2l0aW9uOiAlIiBH
U1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MocG9zaXRpb24pKTsKKworICAgIGlmIChzdGF0
aWNfY2FzdDxndWludDY0Pihwb3NpdGlvbikgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORSkgeworICAg
ICAgICBHU1RfREVCVUcoIkNhbid0IGRldGVybWluZSBwb3NpdGlvbiwgYXZvaWRpbmcgZmx1c2gi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghZ3N0X2VsZW1lbnRfc2VuZF9l
dmVudChHU1RfRUxFTUVOVChhcHBzcmMpLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0KCkpKSB7
CisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gc2VuZCBmbHVzaC1zdGFydCBldmVudCBm
b3IgdHJhY2tJZD0lcyIsIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgfQor
CisgICAgaWYgKCFnc3RfZWxlbWVudF9zZW5kX2V2ZW50KEdTVF9FTEVNRU5UKGFwcHNyYyksIGdz
dF9ldmVudF9uZXdfZmx1c2hfc3RvcChmYWxzZSkpKSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJG
YWlsZWQgdG8gc2VuZCBmbHVzaC1zdG9wIGV2ZW50IGZvciB0cmFja0lkPSVzIiwgdHJhY2tJZC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBHU1RfREVCVUcoInRyYWNrSWQ9
JXMgZmx1c2hlZCIsIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQg
UGxheWJhY2tQaXBlbGluZTo6ZW5xdWV1ZVNhbXBsZShSZWY8TWVkaWFTYW1wbGU+JiYgbWVkaWFT
YW1wbGUpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOworCisgICAgQXRvbVN0
cmluZyB0cmFja0lkID0gbWVkaWFTYW1wbGUtPnRyYWNrSUQoKTsKKworICAgIEdTVF9UUkFDRSgi
ZW5xdWVpbmcgc2FtcGxlIHRyYWNrSWQ9JXMgUFRTPSVmIHByZXNlbnRhdGlvblNpemU9JS4wZngl
LjBmIGF0ICUiIEdTVF9USU1FX0ZPUk1BVCAiIGR1cmF0aW9uOiAlIiBHU1RfVElNRV9GT1JNQVQs
CisgICAgICAgIHRyYWNrSWQuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWVkaWFTYW1wbGUtPnBy
ZXNlbnRhdGlvblRpbWUoKS50b0Zsb2F0KCksCisgICAgICAgIG1lZGlhU2FtcGxlLT5wcmVzZW50
YXRpb25TaXplKCkud2lkdGgoKSwgbWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblNpemUoKS5oZWln
aHQoKSwKKyAgICAgICAgR1NUX1RJTUVfQVJHUyhXZWJDb3JlOjp0b0dzdENsb2NrVGltZShtZWRp
YVNhbXBsZS0+cHJlc2VudGF0aW9uVGltZSgpKSksCisgICAgICAgIEdTVF9USU1FX0FSR1MoV2Vi
Q29yZTo6dG9Hc3RDbG9ja1RpbWUobWVkaWFTYW1wbGUtPmR1cmF0aW9uKCkpKSk7CisKKyAgICAv
LyBObyBuZWVkIHRvIGxvY2sgdG8gYWNjZXNzIHRoZSBTdHJlYW0gaGVyZSBiZWNhdXNlIHRoZSBv
bmx5IGNoYW5jZSBvZiBjb25mbGljdCB3aXRoIHRoaXMgcmVhZCBhbmQgd2l0aCB0aGUgdXNhZ2UK
KyAgICAvLyBvZiB0aGUgc2FtcGxlIGZpZWxkcyBkb25lIGluIHRoaXMgbWV0aG9kIHdvdWxkIGJl
IHRoZSBkZWxldGlvbiBvZiB0aGUgc3RyZWFtLiBIb3dldmVyLCB0aGF0IG9wZXJhdGlvbiBjYW4g
b25seQorICAgIC8vIGhhcHBlbiBpbiB0aGUgbWFpbiB0aHJlYWQsIGJ1dCB3ZSdyZSBhbHJlYWR5
IHRoZXJlLiBUaGVyZWZvcmUgdGhlcmUncyBubyBjb25mbGljdCBhbmQgbG9ja2luZyB3b3VsZCBv
bmx5IGNhdXNlCisgICAgLy8gYSBwZXJmb3JtYW5jZSBwZW5hbHR5IG9uIHRoZSByZWFkZXJzIHdv
cmtpbmcgaW4gb3RoZXIgdGhyZWFkcy4KKyAgICBTdHJlYW0qIHN0cmVhbSA9IGdldFN0cmVhbUJ5
VHJhY2tJZChtX3dlYktpdE1lZGlhU3JjLmdldCgpLCB0cmFja0lkKTsKKworICAgIGlmICghc3Ry
ZWFtKSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJObyBzdHJlYW0hIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIXN0cmVhbS0+c291cmNlQnVmZmVyLT5pc1JlYWR5Rm9yTW9y
ZVNhbXBsZXModHJhY2tJZCkpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJlbnF1ZXVlU2FtcGxlOiBz
a2lwIGFkZGluZyBuZXcgc2FtcGxlIGZvciB0cmFja0lkPSVzLCBTQiBpcyBub3QgcmVhZHkgeWV0
IiwgdHJhY2tJZC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFRoaXMgZmllbGQgZG9lc24ndCBjaGFuZ2UgYWZ0ZXIgY3JlYXRpb24sIG5v
IG5lZWQgdG8gbG9jay4KKyAgICBHc3RFbGVtZW50KiBhcHBzcmMgPSBzdHJlYW0tPmFwcHNyYzsK
KworICAgIC8vIE9ubHkgbW9kaWZpZWQgYnkgdGhlIG1haW4gdGhyZWFkLCBubyBuZWVkIHRvIGxv
Y2suCisgICAgTWVkaWFUaW1lIGxhc3RFbnF1ZXVlZFRpbWUgPSBzdHJlYW0tPmxhc3RFbnF1ZXVl
ZFRpbWU7CisKKyAgICBBU1NFUlQobWVkaWFTYW1wbGUtPnBsYXRmb3JtU2FtcGxlKCkudHlwZSA9
PSBQbGF0Zm9ybVNhbXBsZTo6R1N0cmVhbWVyU2FtcGxlVHlwZSk7CisgICAgR1JlZlB0cjxHc3RT
YW1wbGU+IGdzdFNhbXBsZSA9IG1lZGlhU2FtcGxlLT5wbGF0Zm9ybVNhbXBsZSgpLnNhbXBsZS5n
c3RTYW1wbGU7CisgICAgaWYgKGdzdFNhbXBsZSAmJiBnc3Rfc2FtcGxlX2dldF9idWZmZXIoZ3N0
U2FtcGxlLmdldCgpKSkgeworICAgICAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdzdF9zYW1wbGVf
Z2V0X2J1ZmZlcihnc3RTYW1wbGUuZ2V0KCkpOworICAgICAgICBsYXN0RW5xdWV1ZWRUaW1lID0g
bWVkaWFTYW1wbGUtPnByZXNlbnRhdGlvblRpbWUoKTsKKworICAgICAgICBHU1RfQlVGRkVSX0ZM
QUdfVU5TRVQoYnVmZmVyLCBHU1RfQlVGRkVSX0ZMQUdfREVDT0RFX09OTFkpOworICAgICAgICBw
dXNoU2FtcGxlKEdTVF9BUFBfU1JDKGFwcHNyYyksIGdzdFNhbXBsZS5nZXQoKSk7CisgICAgICAg
IC8vIGdzdF9hcHBfc3JjX3B1c2hfc2FtcGxlKCkgdXNlcyB0cmFuc2Zlci1ub25lIGZvciBnc3RT
YW1wbGUuCisKKyAgICAgICAgc3RyZWFtLT5sYXN0RW5xdWV1ZWRUaW1lID0gbGFzdEVucXVldWVk
VGltZTsKKyAgICB9Cit9CisKK3ZvaWQgUGxheWJhY2tQaXBlbGluZTo6YWxsU2FtcGxlc0luVHJh
Y2tFbnF1ZXVlZChjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKQoreworICAgIFN0cmVhbSogc3Ry
ZWFtID0gZ2V0U3RyZWFtQnlUcmFja0lkKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCksIHRyYWNrSWQp
OworICAgIGdzdF9hcHBfc3JjX2VuZF9vZl9zdHJlYW0oR1NUX0FQUF9TUkMoc3RyZWFtLT5hcHBz
cmMpKTsKK30KKworR3N0RWxlbWVudCogUGxheWJhY2tQaXBlbGluZTo6cGlwZWxpbmUoKQorewor
ICAgIGlmICghbV93ZWJLaXRNZWRpYVNyYyB8fCAhR1NUX0VMRU1FTlRfUEFSRU5UKEdTVF9FTEVN
RU5UKG1fd2ViS2l0TWVkaWFTcmMuZ2V0KCkpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICByZXR1cm4gR1NUX0VMRU1FTlRfUEFSRU5UKEdTVF9FTEVNRU5UX1BBUkVOVChHU1RfRUxF
TUVOVChtX3dlYktpdE1lZGlhU3JjLmdldCgpKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlLgorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9QbGF5YmFja1Bp
cGVsaW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM3Y2EwZWFkNGYxYmVhMTFlMTRjN2Y0NzA5OWQ1NzEyNzY1
NTM2ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvUGxheWJhY2tQaXBlbGluZS5oCkBAIC0wLDAgKzEsODAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8pICYm
IFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKKy8vIFBsYXliYWNrUGlw
ZWxpbmUgaXMgKHNvcnQgb2YpIGEgZnJpZW5kIGNsYXNzIG9mIFdlYktpdE1lZGlhU291cmNlR1N0
cmVhbWVyLgorCisjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lclByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIv
R1JlZlB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKK3RlbXBsYXRlPD4gR1JlZlB0cjxXZWJLaXRN
ZWRpYVNyYz4gYWRvcHRHUmVmKFdlYktpdE1lZGlhU3JjKik7Cit0ZW1wbGF0ZTw+IFdlYktpdE1l
ZGlhU3JjKiByZWZHUHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyopOwordGVtcGxh
dGU8PiB2b2lkIGRlcmVmR1B0cjxXZWJLaXRNZWRpYVNyYz4oV2ViS2l0TWVkaWFTcmMqKTsKK307
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGVudFR5cGU7CitjbGFzcyBTb3Vy
Y2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOworY2xhc3MgTWVkaWFTb3VyY2VHU3RyZWFtZXI7CisK
K2NsYXNzIFBsYXliYWNrUGlwZWxpbmU6IHB1YmxpYyBSZWZDb3VudGVkPFBsYXliYWNrUGlwZWxp
bmU+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFBsYXliYWNrUGlwZWxpbmU+IGNyZWF0ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF5YmFja1BpcGVsaW5lKCkp
OworICAgIH0KKworICAgIHZpcnR1YWwgflBsYXliYWNrUGlwZWxpbmUoKSA9IGRlZmF1bHQ7CisK
KyAgICB2b2lkIHNldFdlYktpdE1lZGlhU3JjKFdlYktpdE1lZGlhU3JjKik7CisgICAgV2ViS2l0
TWVkaWFTcmMqIHdlYktpdE1lZGlhU3JjKCk7CisKKyAgICBNZWRpYVNvdXJjZVByaXZhdGU6OkFk
ZFN0YXR1cyBhZGRTb3VyY2VCdWZmZXIoUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXI+KTsKKyAgICB2b2lkIHJlbW92ZVNvdXJjZUJ1ZmZlcihSZWZQdHI8U291cmNlQnVmZmVyUHJp
dmF0ZUdTdHJlYW1lcj4pOworICAgIHZvaWQgYXR0YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZl
clByaXZhdGVHU3RyZWFtZXI+LCBSZWZQdHI8VHJhY2tQcml2YXRlQmFzZT4sIEdzdENhcHMqKTsK
KyAgICB2b2lkIHJlYXR0YWNoVHJhY2soUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXI+LCBSZWZQdHI8VHJhY2tQcml2YXRlQmFzZT4sIEdzdENhcHMqKTsKKyAgICB2b2lkIG5vdGlm
eUR1cmF0aW9uQ2hhbmdlZCgpOworCisgICAgLy8gRnJvbSBNZWRpYVNvdXJjZUdTdHJlYW1lci4K
KyAgICB2b2lkIG1hcmtFbmRPZlN0cmVhbShNZWRpYVNvdXJjZVByaXZhdGU6OkVuZE9mU3RyZWFt
U3RhdHVzKTsKKworICAgIC8vIEZyb20gU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci4KKyAg
ICB2b2lkIGZsdXNoKEF0b21TdHJpbmcpOworICAgIHZvaWQgZW5xdWV1ZVNhbXBsZShSZWY8TWVk
aWFTYW1wbGU+JiYpOworICAgIHZvaWQgYWxsU2FtcGxlc0luVHJhY2tFbnF1ZXVlZChjb25zdCBB
dG9tU3RyaW5nJik7CisKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpOworcHJpdmF0ZToKKyAg
ICBQbGF5YmFja1BpcGVsaW5lKCkgPSBkZWZhdWx0OworICAgIEdSZWZQdHI8V2ViS2l0TWVkaWFT
cmM+IG1fd2ViS2l0TWVkaWFTcmM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlLgorCisj
ZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJj
ZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDg3NjFjYmE2MGY0ZGVkNTVhMjUzZDNj
NGJhNjRiMDU1NzNhZTYzOGMuLjdjMWU3OTkxNmQ5M2Y4YWYxMTFkY2E4M2FkNTJjNWM0ZTVjOGY3
ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UvU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0
cmVhbWVyLmNwcApAQCAtNDYsOSArNDYsNiBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CiAjaW5jbHVkZSAiV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKIAotR1NUX0RFQlVHX0NB
VEVHT1JZX0VYVEVSTih3ZWJraXRfbXNlX2RlYnVnKTsKLSNkZWZpbmUgR1NUX0NBVF9ERUZBVUxU
IHdlYmtpdF9tc2VfZGVidWcKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBSZWY8U291cmNlQnVm
ZmVyUHJpdmF0ZUdTdHJlYW1lcj4gU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRl
KE1lZGlhU291cmNlR1N0cmVhbWVyKiBtZWRpYVNvdXJjZSwgUmVmPE1lZGlhU291cmNlQ2xpZW50
R1N0cmVhbWVyTVNFPiBjbGllbnQsIGNvbnN0IENvbnRlbnRUeXBlJiBjb250ZW50VHlwZSkKQEAg
LTExMiw5ICsxMDksMTEgQEAgdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpmbHVz
aChjb25zdCBBdG9tU3RyaW5nJiB0cmFja0lkKQogICAgIG1fY2xpZW50LT5mbHVzaCh0cmFja0lk
KTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjplbnF1ZXVlU2FtcGxl
KFJlZjxNZWRpYVNhbXBsZT4mJiBzYW1wbGUsIGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQpCit2
b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmVucXVldWVTYW1wbGUoUmVmPE1lZGlh
U2FtcGxlPiYmIHNhbXBsZSwgY29uc3QgQXRvbVN0cmluZyYpCiB7Ci0gICAgbV9jbGllbnQtPmVu
cXVldWVTYW1wbGUoV1RGTW92ZShzYW1wbGUpLCB0cmFja0lkKTsKKyAgICBtX25vdGlmeVdoZW5S
ZWFkeUZvck1vcmVTYW1wbGVzID0gZmFsc2U7CisKKyAgICBtX2NsaWVudC0+ZW5xdWV1ZVNhbXBs
ZShXVEZNb3ZlKHNhbXBsZSkpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFt
ZXI6OmFsbFNhbXBsZXNJblRyYWNrRW5xdWV1ZWQoY29uc3QgQXRvbVN0cmluZyYgdHJhY2tJZCkK
QEAgLTEyMiwxMiArMTIxLDIzIEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6
YWxsU2FtcGxlc0luVHJhY2tFbnF1ZXVlZChjb25zdCBBdG9tU3RyaW5nJiB0CiAgICAgbV9jbGll
bnQtPmFsbFNhbXBsZXNJblRyYWNrRW5xdWV1ZWQodHJhY2tJZCk7CiB9CiAKLWJvb2wgU291cmNl
QnVmZmVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNSZWFkeUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0b21T
dHJpbmcmIHRyYWNrSWQpCitib29sIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OmlzUmVh
ZHlGb3JNb3JlU2FtcGxlcyhjb25zdCBBdG9tU3RyaW5nJikKK3sKKyAgICByZXR1cm4gbV9pc1Jl
YWR5Rm9yTW9yZVNhbXBsZXM7Cit9CisKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1l
cjo6c2V0UmVhZHlGb3JNb3JlU2FtcGxlcyhib29sIGlzUmVhZHkpCit7CisgICAgQVNTRVJUKFdU
Rjo6aXNNYWluVGhyZWFkKCkpOworICAgIG1faXNSZWFkeUZvck1vcmVTYW1wbGVzID0gaXNSZWFk
eTsKK30KKwordm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpub3RpZnlSZWFkeUZv
ck1vcmVTYW1wbGVzKCkKIHsKICAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7Ci0gICAg
Ym9vbCBpc1JlYWR5Rm9yTW9yZVNhbXBsZXMgPSBtX2NsaWVudC0+aXNSZWFkeUZvck1vcmVTYW1w
bGVzKHRyYWNrSWQpOwotICAgIEdTVF9ERUJVRygiU291cmNlQnVmZmVyUHJpdmF0ZSglcCkgLSBp
c1JlYWR5Rm9yTW9yZVNhbXBsZXM6ICVkIiwgdGhpcywgKGludCkgaXNSZWFkeUZvck1vcmVTYW1w
bGVzKTsKLSAgICByZXR1cm4gaXNSZWFkeUZvck1vcmVTYW1wbGVzOworICAgIHNldFJlYWR5Rm9y
TW9yZVNhbXBsZXModHJ1ZSk7CisgICAgaWYgKG1fbm90aWZ5V2hlblJlYWR5Rm9yTW9yZVNhbXBs
ZXMpCisgICAgICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudC0+c291cmNlQnVmZmVyUHJp
dmF0ZURpZEJlY29tZVJlYWR5Rm9yTW9yZVNhbXBsZXMobV90cmFja0lkKTsKIH0KIAogdm9pZCBT
b3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRBY3RpdmUoYm9vbCBpc0FjdGl2ZSkKQEAg
LTEzOSw3ICsxNDksOCBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXI6OnNldEFj
dGl2ZShib29sIGlzQWN0aXZlKQogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyOjpu
b3RpZnlDbGllbnRXaGVuUmVhZHlGb3JNb3JlU2FtcGxlcyhjb25zdCBBdG9tU3RyaW5nJiB0cmFj
a0lkKQogewogICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKLSAgICByZXR1cm4gbV9j
bGllbnQtPm5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKHRyYWNrSWQsIG1fc291
cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCk7CisgICAgbV9ub3RpZnlXaGVuUmVhZHlGb3JNb3JlU2Ft
cGxlcyA9IHRydWU7CisgICAgbV90cmFja0lkID0gdHJhY2tJZDsKIH0KIAogdm9pZCBTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KGNv
bnN0IFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkluaXRpYWxpemF0aW9uU2VnbWVudCYgaW5p
dGlhbGl6YXRpb25TZWdtZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9Tb3VyY2VCdWZmZXJQcml2YXRlR1N0cmVhbWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZl
clByaXZhdGVHU3RyZWFtZXIuaAppbmRleCAzOGNlYTUwNmQ3Y2M0YWQwZDExZGM0MzdmNjY1M2Zj
YTQ3MjIwNTBiLi5lNWZlNDA2OGE4MmE3ZDIyZWNmOTQ1N2ZkZTJiOThlMTE3Y2I5MGI0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1Nv
dXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlL1NvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIuaApA
QCAtNjksMTMgKzY5LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFjdGl2ZShib29sKSBmaW5h
bDsKICAgICB2b2lkIG5vdGlmeUNsaWVudFdoZW5SZWFkeUZvck1vcmVTYW1wbGVzKGNvbnN0IEF0
b21TdHJpbmcmKSBmaW5hbDsKIAorICAgIHZvaWQgc2V0UmVhZHlGb3JNb3JlU2FtcGxlcyhib29s
KTsKKyAgICB2b2lkIG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXMoKTsKKwogICAgIHZvaWQgZGlk
UmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChjb25zdCBTb3VyY2VCdWZmZXJQcml2YXRlQ2xp
ZW50OjpJbml0aWFsaXphdGlvblNlZ21lbnQmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVTYW1wbGUo
TWVkaWFTYW1wbGUmKTsKICAgICB2b2lkIGRpZFJlY2VpdmVBbGxQZW5kaW5nU2FtcGxlcygpOwog
ICAgIHZvaWQgYXBwZW5kUGFyc2luZ0ZhaWxlZCgpOwogCiAgICAgQ29udGVudFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIEF0b21TdHJpbmcgdHJhY2tJZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHJhY2tJZDsgfQogCiBwcml2YXRlOgogICAgIFNvdXJjZUJ1ZmZlclByaXZh
dGVHU3RyZWFtZXIoTWVkaWFTb3VyY2VHU3RyZWFtZXIqLCBSZWY8TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXJNU0U+LCBjb25zdCBDb250ZW50VHlwZSYpOwpAQCAtODUsNiArODcsOCBAQCBwcml2
YXRlOgogICAgIENvbnRlbnRUeXBlIG1fdHlwZTsKICAgICBSZWY8TWVkaWFTb3VyY2VDbGllbnRH
U3RyZWFtZXJNU0U+IG1fY2xpZW50OwogICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQqIG1f
c291cmNlQnVmZmVyUHJpdmF0ZUNsaWVudCB7IG51bGxwdHIgfTsKKyAgICBib29sIG1faXNSZWFk
eUZvck1vcmVTYW1wbGVzID0gdHJ1ZTsKKyAgICBib29sIG1fbm90aWZ5V2hlblJlYWR5Rm9yTW9y
ZVNhbXBsZXMgPSBmYWxzZTsKICAgICBBdG9tU3RyaW5nIG1fdHJhY2tJZDsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2Vi
S2l0TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXgg
ODYyMzA1YmRjZGYwYTE3NGRhZjViZmIyMGE1NjRkZjI3NzIwN2RlZS4uMWFkNDQyNDkwMjE5NTY0
ZDUwMDFjZjQ2OGRlZTI4N2MwZDQxMmYxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9X
ZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTMsOCArMyw4IEBACiAgKiAgQ29weXJp
Z2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIE9yYW5n
ZQogICogIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3Rp
YW5AY2VudHJpY3VsYXIuY29tPgotICogIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiwgMjAxOCwg
MjAxOSBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogIENvcHlyaWdodCAoQykgMjAxNSwgMjAx
NiwgMjAxOCwgMjAxOSBJZ2FsaWEsIFMuTAorICogIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogIENvcHlyaWdodCAoQykgMjAxNSwgMjAxNiBJZ2Fs
aWEsIFMuTAogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsMjQyICsyNCwxOTEgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgog
CisjaW5jbHVkZSAiUGxheWJhY2tQaXBlbGluZS5oIgorCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBF
TkFCTEUoTUVESUFfU09VUkNFKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSAiQXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNp
bmNsdWRlICJNZWRpYURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyTVNFLmgiCisjaW5jbHVkZSAiTWVkaWFTYW1wbGUuaCIKKyNpbmNsdWRlICJNZWRp
YVNvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiU291cmNlQnVmZmVyUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlRpbWVSYW5nZXMu
aCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIldl
YktpdE1lZGlhU291cmNlR1N0cmVhbWVyUHJpdmF0ZS5oIgogCi0jaW5jbHVkZSA8Z3N0L2dzdC5o
PgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8v
dmlkZW8uaD4KICNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+Ci0jaW5jbHVkZSA8d3RmL0RhdGFN
dXRleC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZERhdGEuaD4KICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9BdG9tU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZ0hhc2guaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBXVEY7Ci11c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQogR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRf
bWVkaWFfc3JjX2RlYnVnKTsKICNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF9tZWRpYV9z
cmNfZGVidWcKIAotc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY1RlbXBsYXRlID0gR1NU
X1NUQVRJQ19QQURfVEVNUExBVEUoInNyY18lcyIsIEdTVF9QQURfU1JDLAotICAgIEdTVF9QQURf
U09NRVRJTUVTLCBHU1RfU1RBVElDX0NBUFNfQU5ZKTsKLQotZW51bSB7Ci0gICAgUFJPUF8wLAot
ICAgIFBST1BfTl9BVURJTywKLSAgICBQUk9QX05fVklERU8sCi0gICAgUFJPUF9OX1RFWFQsCi0g
ICAgUFJPUF9MQVNUCi19OwotCi1zdHJ1Y3QgU3RyZWFtOworI2RlZmluZSB3ZWJraXRfbWVkaWFf
c3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKKyNkZWZpbmUgV0VCS0lUX01FRElBX1NSQ19D
QVRFR09SWV9JTklUIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF9tZWRpYV9zcmNfZGVi
dWcsICJ3ZWJraXRtZWRpYXNyYyIsIDAsICJ3ZWJzcmMgZWxlbWVudCIpOwogCi1zdHJ1Y3QgV2Vi
S2l0TWVkaWFTcmNQcml2YXRlIHsKLSAgICBIYXNoTWFwPEF0b21TdHJpbmcsIFJlZlB0cjxTdHJl
YW0+PiBzdHJlYW1zOwotICAgIFN0cmVhbSogc3RyZWFtQnlOYW1lKGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUpCi0gICAgewotICAgICAgICBTdHJlYW0qIHN0cmVhbSA9IHN0cmVhbXMuZ2V0KG5hbWUp
OwotICAgICAgICBBU1NFUlQoc3RyZWFtKTsKLSAgICAgICAgcmV0dXJuIHN0cmVhbTsKLSAgICB9
CitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BB
RF9URU1QTEFURSgic3JjXyV1IiwgR1NUX1BBRF9TUkMsCisgICAgR1NUX1BBRF9TT01FVElNRVMs
IEdTVF9TVEFUSUNfQ0FQU19BTlkpOwogCi0gICAgLy8gVXNlZCBmb3Igc3RyZWFtLXN0YXJ0IGV2
ZW50cywgc2hhcmVkIGJ5IGFsbCBzdHJlYW1zLgotICAgIGNvbnN0IHVuc2lnbmVkIGdyb3VwSWQg
eyBnc3RfdXRpbF9ncm91cF9pZF9uZXh0KCkgfTsKK3N0YXRpYyB2b2lkIGVuYWJsZWRBcHBzcmNO
ZWVkRGF0YShHc3RBcHBTcmMqLCBndWludCwgZ3BvaW50ZXIpOworc3RhdGljIHZvaWQgZW5hYmxl
ZEFwcHNyY0Vub3VnaERhdGEoR3N0QXBwU3JjKiwgZ3BvaW50ZXIpOworc3RhdGljIGdib29sZWFu
IGVuYWJsZWRBcHBzcmNTZWVrRGF0YShHc3RBcHBTcmMqLCBndWludDY0LCBncG9pbnRlcik7CiAK
LSAgICAvLyBFdmVyeSB0aW1lIGEgdHJhY2sgaXMgYWRkZWQgb3IgcmVtb3ZlZCB0aGlzIGNvbGxl
Y3Rpb24gaXMgc3dhcHBlZCBieSBhbiB1cGRhdGVkIG9uZSBhbmQgYSBTVFJFQU1fQ09MTEVDVElP
TgotICAgIC8vIG1lc3NhZ2UgaXMgcG9zdGVkIGluIHRoZSBidXMuCi0gICAgR1JlZlB0cjxHc3RT
dHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uIHsgYWRvcHRHUmVmKGdzdF9zdHJlYW1fY29sbGVj
dGlvbl9uZXcoIldlYktpdE1lZGlhU3JjIikpIH07CitzdGF0aWMgdm9pZCBkaXNhYmxlZEFwcHNy
Y05lZWREYXRhKEdzdEFwcFNyYyosIGd1aW50LCBncG9pbnRlcikgeyB9Oworc3RhdGljIHZvaWQg
ZGlzYWJsZWRBcHBzcmNFbm91Z2hEYXRhKEdzdEFwcFNyYyosIGdwb2ludGVyKSB7IH07CitzdGF0
aWMgZ2Jvb2xlYW4gZGlzYWJsZWRBcHBzcmNTZWVrRGF0YShHc3RBcHBTcmMqLCBndWludDY0LCBn
cG9pbnRlcikKK3sKKyAgICByZXR1cm4gRkFMU0U7Cit9OwogCi0gICAgLy8gQ2hhbmdlZCBvbiBz
ZWVrcy4KLSAgICBHc3RDbG9ja1RpbWUgc3RhcnRUaW1lIHsgMCB9OwotICAgIGRvdWJsZSByYXRl
IHsgMS4wIH07CitHc3RBcHBTcmNDYWxsYmFja3MgZW5hYmxlZEFwcHNyY0NhbGxiYWNrcyA9IHsK
KyAgICBlbmFibGVkQXBwc3JjTmVlZERhdGEsCisgICAgZW5hYmxlZEFwcHNyY0Vub3VnaERhdGEs
CisgICAgZW5hYmxlZEFwcHNyY1NlZWtEYXRhLAorICAgIHsgMCB9Cit9OwogCi0gICAgLy8gT25s
eSB1c2VkIGJ5IFVSSSBIYW5kbGVyIEFQSSBpbXBsZW1lbnRhdGlvbi4KLSAgICBHVW5pcXVlUHRy
PGNoYXI+IHVyaTsKK0dzdEFwcFNyY0NhbGxiYWNrcyBkaXNhYmxlZEFwcHNyY0NhbGxiYWNrcyA9
IHsKKyAgICBkaXNhYmxlZEFwcHNyY05lZWREYXRhLAorICAgIGRpc2FibGVkQXBwc3JjRW5vdWdo
RGF0YSwKKyAgICBkaXNhYmxlZEFwcHNyY1NlZWtEYXRhLAorICAgIHsgMCB9CiB9OwogCi1zdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVyLCBncG9pbnRlcik7
Ci1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0ZpbmFsaXplKEdPYmplY3QqKTsKLXN0YXRpYyBH
c3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQq
LCBHc3RTdGF0ZUNoYW5nZSk7Ci1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNBY3RpdmF0
ZU1vZGUoR3N0UGFkKiwgR3N0T2JqZWN0KiwgR3N0UGFkTW9kZSwgZ2Jvb2xlYW4gYWN0aXZhdGUp
Owotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNMb29wKHZvaWQqKTsKLXN0YXRpYyB2b2lkIHdl
YktpdE1lZGlhU3JjU3RyZWFtRmx1c2hTdGFydChjb25zdCBSZWZQdHI8U3RyZWFtPiYpOwotc3Rh
dGljIHZvaWQgd2ViS2l0TWVkaWFTcmNTdHJlYW1GbHVzaFN0b3AoY29uc3QgUmVmUHRyPFN0cmVh
bT4mLCBib29sIHJlc2V0VGltZSk7Ci1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY0dldFByb3Bl
cnR5KEdPYmplY3QqLCB1bnNpZ25lZCBwcm9wSWQsIEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0
YXRpYyBTdHJlYW0qIGdldFN0cmVhbUJ5QXBwc3JjKFdlYktpdE1lZGlhU3JjKiwgR3N0RWxlbWVu
dCopOworc3RhdGljIHZvaWQgc2Vla05lZWRzRGF0YU1haW5UaHJlYWQoV2ViS2l0TWVkaWFTcmMq
KTsKK3N0YXRpYyB2b2lkIG5vdGlmeVJlYWR5Rm9yTW9yZVNhbXBsZXNNYWluVGhyZWFkKFdlYktp
dE1lZGlhU3JjKiwgU3RyZWFtKik7CiAKLSNkZWZpbmUgd2Via2l0X21lZGlhX3NyY19wYXJlbnRf
Y2xhc3MgcGFyZW50X2NsYXNzCitzdGF0aWMgdm9pZCBlbmFibGVkQXBwc3JjTmVlZERhdGEoR3N0
QXBwU3JjKiBhcHBzcmMsIGd1aW50LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBXZWJLaXRN
ZWRpYVNyYyogd2ViS2l0TWVkaWFTcmMgPSBzdGF0aWNfY2FzdDxXZWJLaXRNZWRpYVNyYyo+KHVz
ZXJEYXRhKTsKKyAgICBBU1NFUlQoV0VCS0lUX0lTX01FRElBX1NSQyh3ZWJLaXRNZWRpYVNyYykp
OwogCi1zdHJ1Y3QgV2ViS2l0TWVkaWFTcmNQYWRQcml2YXRlIHsKLSAgICBSZWZQdHI8U3RyZWFt
PiBzdHJlYW07Ci19OworICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAg
T25TZWVrRGF0YUFjdGlvbiBhcHBzcmNTZWVrRGF0YU5leHRBY3Rpb24gPSB3ZWJLaXRNZWRpYVNy
Yy0+cHJpdi0+YXBwc3JjU2Vla0RhdGFOZXh0QWN0aW9uOworICAgIFN0cmVhbSogYXBwc3JjU3Ry
ZWFtID0gZ2V0U3RyZWFtQnlBcHBzcmMod2ViS2l0TWVkaWFTcmMsIEdTVF9FTEVNRU5UKGFwcHNy
YykpOworICAgIGJvb2wgYWxsQXBwc3JjTmVlZERhdGFBZnRlclNlZWsgPSBmYWxzZTsKIAotc3Ry
dWN0IFdlYktpdE1lZGlhU3JjUGFkIHsKLSAgICBHc3RQYWQgcGFyZW50OwotICAgIFdlYktpdE1l
ZGlhU3JjUGFkUHJpdmF0ZSogcHJpdjsKLX07CisgICAgaWYgKHdlYktpdE1lZGlhU3JjLT5wcml2
LT5hcHBzcmNTZWVrRGF0YUNvdW50ID4gMCkgeworICAgICAgICBpZiAoYXBwc3JjU3RyZWFtICYm
ICFhcHBzcmNTdHJlYW0tPmFwcHNyY05lZWREYXRhRmxhZykgeworICAgICAgICAgICAgKyt3ZWJL
aXRNZWRpYVNyYy0+cHJpdi0+YXBwc3JjTmVlZERhdGFDb3VudDsKKyAgICAgICAgICAgIGFwcHNy
Y1N0cmVhbS0+YXBwc3JjTmVlZERhdGFGbGFnID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
bnQgbnVtQXBwc3JjcyA9IHdlYktpdE1lZGlhU3JjLT5wcml2LT5zdHJlYW1zLnNpemUoKTsKKyAg
ICAgICAgaWYgKHdlYktpdE1lZGlhU3JjLT5wcml2LT5hcHBzcmNTZWVrRGF0YUNvdW50ID09IG51
bUFwcHNyY3MgJiYgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY05lZWREYXRhQ291bnQgPT0g
bnVtQXBwc3JjcykgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJBbGwgbmVlZERhdGFzIGNvbXBs
ZXRlZCIpOworICAgICAgICAgICAgYWxsQXBwc3JjTmVlZERhdGFBZnRlclNlZWsgPSB0cnVlOwor
ICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291bnQgPSAw
OworICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY05lZWREYXRhQ291bnQg
PSAwOworICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFwcHNyY1NlZWtEYXRhTmV4
dEFjdGlvbiA9IE5vdGhpbmc7CisKKyAgICAgICAgICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiB3
ZWJLaXRNZWRpYVNyYy0+cHJpdi0+c3RyZWFtcykKKyAgICAgICAgICAgICAgICBzdHJlYW0tPmFw
cHNyY05lZWREYXRhRmxhZyA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKIAotc3RydWN0IFdlYktpdE1lZGlhU3JjUGFkQ2xh
c3MgewotICAgIEdzdFBhZENsYXNzIHBhcmVudDsKLX07CisgICAgaWYgKGFsbEFwcHNyY05lZWRE
YXRhQWZ0ZXJTZWVrKSB7CisgICAgICAgIEdTVF9ERUJVRygiQWxsIGV4cGVjdGVkIGFwcHNyY1Nl
ZWtEYXRhKCkgYW5kIGFwcHNyY05lZWREYXRhKCkgY2FsbHMgcGVyZm9ybWVkLiBSdW5uaW5nIG5l
eHQgYWN0aW9uICglZCkiLCBzdGF0aWNfY2FzdDxpbnQ+KGFwcHNyY1NlZWtEYXRhTmV4dEFjdGlv
bikpOwogCi1uYW1lc3BhY2UgV1RGIHsKKyAgICAgICAgc3dpdGNoIChhcHBzcmNTZWVrRGF0YU5l
eHRBY3Rpb24pIHsKKyAgICAgICAgY2FzZSBNZWRpYVNvdXJjZVNlZWtUb1RpbWU6CisgICAgICAg
ICAgICB3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+bm90aWZpZXItPm5vdGlmeShXZWJLaXRNZWRpYVNy
Y01haW5UaHJlYWROb3RpZmljYXRpb246OlNlZWtOZWVkc0RhdGEsIFt3ZWJLaXRNZWRpYVNyY10g
eworICAgICAgICAgICAgICAgIHNlZWtOZWVkc0RhdGFNYWluVGhyZWFkKHdlYktpdE1lZGlhU3Jj
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTm90
aGluZzoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChhcHBz
cmNTZWVrRGF0YU5leHRBY3Rpb24gPT0gTm90aGluZykgeworICAgICAgICBMb2NrSG9sZGVyIGxv
Y2tlcih3ZWJLaXRNZWRpYVNyYy0+cHJpdi0+c3RyZWFtTG9jayk7CiAKLXRlbXBsYXRlPD4gR1Jl
ZlB0cjxXZWJLaXRNZWRpYVNyY1BhZD4gYWRvcHRHUmVmKFdlYktpdE1lZGlhU3JjUGFkKiBwdHIp
Ci17Ci0gICAgQVNTRVJUKCFwdHIgfHwgIWdfb2JqZWN0X2lzX2Zsb2F0aW5nKHB0cikpOwotICAg
IHJldHVybiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjUGFkPihwdHIsIEdSZWZQdHJBZG9wdCk7Ci19
CisgICAgICAgIEdTVF9PQkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CiAKLXRlbXBsYXRlPD4g
V2ViS2l0TWVkaWFTcmNQYWQqIHJlZkdQdHI8V2ViS2l0TWVkaWFTcmNQYWQ+KFdlYktpdE1lZGlh
U3JjUGFkKiBwdHIpCi17Ci0gICAgaWYgKHB0cikKLSAgICAgICAgZ3N0X29iamVjdF9yZWZfc2lu
ayhHU1RfT0JKRUNUKHB0cikpOworICAgICAgICAvLyBTZWFyY2ggYWdhaW4gZm9yIHRoZSBTdHJl
YW0sIGp1c3QgaW4gY2FzZSBpdCB3YXMgcmVtb3ZlZCBiZXR3ZWVuIHRoZSBwcmV2aW91cyBsb2Nr
IGFuZCB0aGlzIG9uZS4KKyAgICAgICAgYXBwc3JjU3RyZWFtID0gZ2V0U3RyZWFtQnlBcHBzcmMo
d2ViS2l0TWVkaWFTcmMsIEdTVF9FTEVNRU5UKGFwcHNyYykpOwogCi0gICAgcmV0dXJuIHB0cjsK
KyAgICAgICAgaWYgKGFwcHNyY1N0cmVhbSAmJiBhcHBzcmNTdHJlYW0tPnR5cGUgIT0gV2ViQ29y
ZTo6SW52YWxpZCkKKyAgICAgICAgICAgIHdlYktpdE1lZGlhU3JjLT5wcml2LT5ub3RpZmllci0+
bm90aWZ5KFdlYktpdE1lZGlhU3JjTWFpblRocmVhZE5vdGlmaWNhdGlvbjo6UmVhZHlGb3JNb3Jl
U2FtcGxlcywgW3dlYktpdE1lZGlhU3JjLCBhcHBzcmNTdHJlYW1dIHsKKyAgICAgICAgICAgICAg
ICBub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVzTWFpblRocmVhZCh3ZWJLaXRNZWRpYVNyYywgYXBw
c3JjU3RyZWFtKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NL
KHdlYktpdE1lZGlhU3JjKTsKKyAgICB9CiB9CiAKLXRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8
V2ViS2l0TWVkaWFTcmNQYWQ+KFdlYktpdE1lZGlhU3JjUGFkKiBwdHIpCitzdGF0aWMgdm9pZCBl
bmFibGVkQXBwc3JjRW5vdWdoRGF0YShHc3RBcHBTcmMgKmFwcHNyYywgZ3BvaW50ZXIgdXNlckRh
dGEpCiB7Ci0gICAgaWYgKHB0cikKLSAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOwotfQor
ICAgIC8vIE5vIG5lZWQgdG8gbG9jayBvbiB3ZWJLaXRNZWRpYVNyYywgd2UncmUgb24gdGhlIG1h
aW4gdGhyZWFkIGFuZCBub2JvZHkgaXMgZ29pbmcgdG8gcmVtb3ZlIHRoZSBzdHJlYW0gaW4gdGhl
IG1lYW50aW1lLgorICAgIEFTU0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKIAotfSAvLyBuYW1l
c3BhY2UgV1RGCisgICAgV2ViS2l0TWVkaWFTcmMqIHdlYktpdE1lZGlhU3JjID0gc3RhdGljX2Nh
c3Q8V2ViS2l0TWVkaWFTcmMqPih1c2VyRGF0YSk7CisgICAgQVNTRVJUKFdFQktJVF9JU19NRURJ
QV9TUkMod2ViS2l0TWVkaWFTcmMpKTsKKyAgICBTdHJlYW0qIHN0cmVhbSA9IGdldFN0cmVhbUJ5
QXBwc3JjKHdlYktpdE1lZGlhU3JjLCBHU1RfRUxFTUVOVChhcHBzcmMpKTsKIAotc3RhdGljIEdU
eXBlIHdlYmtpdF9tZWRpYV9zcmNfcGFkX2dldF90eXBlKCk7Ci1XRUJLSVRfREVGSU5FX1RZUEUo
V2ViS2l0TWVkaWFTcmNQYWQsIHdlYmtpdF9tZWRpYV9zcmNfcGFkLCBHU1RfVFlQRV9QQUQpOwot
I2RlZmluZSBXRUJLSVRfVFlQRV9NRURJQV9TUkNfUEFEICh3ZWJraXRfbWVkaWFfc3JjX3BhZF9n
ZXRfdHlwZSgpKQotI2RlZmluZSBXRUJLSVRfTUVESUFfU1JDX1BBRChvYmopIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfU1JDX1BBRCwgV2ViS2l0
TWVkaWFTcmNQYWQpKQorICAgIC8vIFRoaXMgY2FsbGJhY2sgbWlnaHQgaGF2ZSBiZWVuIHNjaGVk
dWxlZCBmcm9tIGEgY2hpbGQgdGhyZWFkIGJlZm9yZSB0aGUgc3RyZWFtIHdhcyByZW1vdmVkLgor
ICAgIC8vIFRoZW4sIHRoZSByZW1vdmFsIGNvZGUgbWlnaHQgaGF2ZSBydW4sIGFuZCBsYXRlciB0
aGlzIGNhbGxiYWNrLgorICAgIC8vIFRoaXMgY2hlY2sgc29sdmVzIHRoZSByYWNlIGNvbmRpdGlv
bi4KKyAgICBpZiAoIXN0cmVhbSB8fCBzdHJlYW0tPnR5cGUgPT0gV2ViQ29yZTo6SW52YWxpZCkK
KyAgICAgICAgcmV0dXJuOwogCi1zdGF0aWMgdm9pZCB3ZWJraXRfbWVkaWFfc3JjX3BhZF9jbGFz
c19pbml0KFdlYktpdE1lZGlhU3JjUGFkQ2xhc3MqKQoteworICAgIHN0cmVhbS0+c291cmNlQnVm
ZmVyLT5zZXRSZWFkeUZvck1vcmVTYW1wbGVzKGZhbHNlKTsKIH0KIAotR19ERUZJTkVfVFlQRV9X
SVRIX0NPREUoV2ViS2l0TWVkaWFTcmMsIHdlYmtpdF9tZWRpYV9zcmMsIEdTVF9UWVBFX0VMRU1F
TlQsCi0gICAgR19JTVBMRU1FTlRfSU5URVJGQUNFKEdTVF9UWVBFX1VSSV9IQU5ETEVSLCB3ZWJL
aXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KTsKLSAgICBHX0FERF9QUklWQVRFKFdlYktpdE1lZGlh
U3JjKTsKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfbWVkaWFfc3JjX2RlYnVn
LCAid2Via2l0bWVkaWFzcmMiLCAwLCAiV2ViS2l0IE1TRSBzb3VyY2UgZWxlbWVudCIpKTsKLQot
c3RydWN0IFN0cmVhbSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTdHJlYW0+IHsKLSAg
ICBTdHJlYW0oV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgR1JlZlB0cjxHc3RQYWQ+JiYgcGFkLCBj
b25zdCBBdG9tU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3Ry
ZWFtZXIgdHlwZSwgR1JlZlB0cjxHc3RDYXBzPiYmIGluaXRpYWxDYXBzLCBHUmVmUHRyPEdzdFN0
cmVhbT4mJiBzdHJlYW1JbmZvKQotICAgICAgICA6IHNvdXJjZShzb3VyY2UpCi0gICAgICAgICwg
cGFkKFdURk1vdmUocGFkKSkKLSAgICAgICAgLCBuYW1lKG5hbWUpCi0gICAgICAgICwgdHlwZSh0
eXBlKQotICAgICAgICAsIHN0cmVhbUluZm8oV1RGTW92ZShzdHJlYW1JbmZvKSkKLSAgICAgICAg
LCBzdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KFdURk1vdmUoaW5pdGlhbENhcHMpLCBzb3VyY2Ut
PnByaXYtPnN0YXJ0VGltZSwgc291cmNlLT5wcml2LT5yYXRlLCBhZG9wdEdSZWYoZ3N0X2V2ZW50
X25ld19zdHJlYW1fY29sbGVjdGlvbihzb3VyY2UtPnByaXYtPmNvbGxlY3Rpb24uZ2V0KCkpKSkK
LSAgICB7IH0KLQotICAgIFdlYktpdE1lZGlhU3JjKiBjb25zdCBzb3VyY2U7Ci0gICAgR1JlZlB0
cjxHc3RQYWQ+IGNvbnN0IHBhZDsKLSAgICBBdG9tU3RyaW5nIGNvbnN0IG5hbWU7Ci0gICAgV2Vi
Q29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHR5cGU7Ci0gICAgR1JlZlB0cjxH
c3RTdHJlYW0+IHN0cmVhbUluZm87Ci0KLSAgICAvLyBUaGUgcG9pbnQgb2YgaGF2aW5nIGEgcXVl
dWUgaW4gV2ViS2l0TWVkaWFTb3VyY2UgaXMgdG8gbGltaXQgdGhlIG51bWJlciBvZiBjb250ZXh0
IHN3aXRjaGVzIHBlciBzZWNvbmQuCi0gICAgLy8gSWYgd2UgaGFkIG5vIHF1ZXVlLCB0aGUgbWFp
biB0aHJlYWQgd291bGQgaGF2ZSB0byBiZSBhd2FrZW4gZm9yIGV2ZXJ5IGZyYW1lLiBPbiB0aGUg
b3RoZXIgaGFuZCwgaWYgdGhlCi0gICAgLy8gcXVldWUgaGFkIHVubGltaXRlZCBzaXplIFdlYktp
dCB3b3VsZCBlbmQgdXAgcmVxdWVzdGluZyBmbHVzaGVzIG1vcmUgb2Z0ZW4gdGhhbiBuZWNlc3Nh
cnkgd2hlbiBmcmFtZXMKLSAgICAvLyBpbiB0aGUgZnV0dXJlIGFyZSByZS1hcHBlbmRlZC4gQXMg
YSBzd2VldCBzcG90IGJldHdlZW4gdGhlc2UgZXh0cmVtZXMgd2UgY2hvb3NlIHRvIGFsbG93IGVu
cXVldWVpbmcgYQotICAgIC8vIGZldyBzZWNvbmRzIHdvcnRoIG9mIHNhbXBsZXMuCi0KLSAgICAv
LyBgaXNSZWFkeUZvck1vcmVTYW1wbGVzYCBmb2xsb3dzIHRoZSBjbGFzc2ljYWwgdHdvIHdhdGVy
IGxldmVscyBzdHJhdGVneTogaW5pdGlhbGx5IGl0J3MgdHJ1ZSB1bnRpbCB0aGUKLSAgICAvLyBo
aWdoIHdhdGVyIGxldmVsIGlzIHJlYWNoZWQsIHRoZW4gaXQgYmVjb21lcyBmYWxzZSB1bnRpbCB0
aGUgcXVldWUgZHJhaW5zIGRvd24gdG8gdGhlIGxvdyB3YXRlciBsZXZlbAotICAgIC8vIGFuZCB0
aGUgY3ljbGUgcmVwZWF0cy4gVGhpcyB3YXkgd2UgYXZvaWQgc3RhbGxzIGFuZCBtaW5pbWl6ZSBj
b250ZXh0IHN3aXRjaGVzLgotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGR1cmF0aW9uRW5x
dWV1ZWRIaWdoV2F0ZXJMZXZlbCA9IDUgKiBHU1RfU0VDT05EOwotICAgIHN0YXRpYyBjb25zdCB1
aW50NjRfdCBkdXJhdGlvbkVucXVldWVkTG93V2F0ZXJMZXZlbCA9IDIgKiBHU1RfU0VDT05EOwot
Ci0gICAgc3RydWN0IFN0cmVhbWluZ01lbWJlcnMgewotICAgICAgICBTdHJlYW1pbmdNZW1iZXJz
KEdSZWZQdHI8R3N0Q2Fwcz4mJiBpbml0aWFsQ2FwcywgR3N0Q2xvY2tUaW1lIHN0YXJ0VGltZSwg
ZG91YmxlIHJhdGUsIEdSZWZQdHI8R3N0RXZlbnQ+JiYgcGVuZGluZ1N0cmVhbUNvbGxlY3Rpb25F
dmVudCkKLSAgICAgICAgICAgIDogcGVuZGluZ1N0cmVhbUNvbGxlY3Rpb25FdmVudChXVEZNb3Zl
KHBlbmRpbmdTdHJlYW1Db2xsZWN0aW9uRXZlbnQpKQotICAgICAgICAgICAgLCBwZW5kaW5nSW5p
dGlhbENhcHMoV1RGTW92ZShpbml0aWFsQ2FwcykpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdz
dF9zZWdtZW50X2luaXQoJnNlZ21lbnQsIEdTVF9GT1JNQVRfVElNRSk7Ci0gICAgICAgICAgICBz
ZWdtZW50LnN0YXJ0ID0gc2VnbWVudC50aW1lID0gc3RhcnRUaW1lOwotICAgICAgICAgICAgc2Vn
bWVudC5yYXRlID0gcmF0ZTsKLQotICAgICAgICAgICAgR3N0U3RyZWFtQ29sbGVjdGlvbiogY29s
bGVjdGlvbjsKLSAgICAgICAgICAgIGdzdF9ldmVudF9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbih0
aGlzLT5wZW5kaW5nU3RyZWFtQ29sbGVjdGlvbkV2ZW50LmdldCgpLCAmY29sbGVjdGlvbik7Ci0g
ICAgICAgICAgICBBU1NFUlQoY29sbGVjdGlvbik7Ci0gICAgICAgIH0KK3N0YXRpYyBnYm9vbGVh
biBlbmFibGVkQXBwc3JjU2Vla0RhdGEoR3N0QXBwU3JjKiwgZ3VpbnQ2NCwgZ3BvaW50ZXIgdXNl
ckRhdGEpCit7CisgICAgQVNTRVJUKFdURjo6aXNNYWluVGhyZWFkKCkpOwogCi0gICAgICAgIGJv
b2wgaGFzUHVzaGVkRmlyc3RCdWZmZXIgeyBmYWxzZSB9OwotICAgICAgICBib29sIHdhc1N0cmVh
bVN0YXJ0U2VudCB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgZG9lc05lZWRTZWdtZW50RXZlbnQg
eyB0cnVlIH07Ci0gICAgICAgIEdzdFNlZ21lbnQgc2VnbWVudDsKLSAgICAgICAgR1JlZlB0cjxH
c3RFdmVudD4gcGVuZGluZ1N0cmVhbUNvbGxlY3Rpb25FdmVudDsKLSAgICAgICAgR1JlZlB0cjxH
c3RDYXBzPiBwZW5kaW5nSW5pdGlhbENhcHM7Ci0gICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gcHJl
dmlvdXNDYXBzOwotCi0gICAgICAgIENvbmRpdGlvbiBwYWRMaW5rZWRPckZsdXNoZWRDb25kaXRp
b247Ci0gICAgICAgIENvbmRpdGlvbiBxdWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb247Ci0g
ICAgICAgIERlcXVlPEdSZWZQdHI8R3N0TWluaU9iamVjdD4+IHF1ZXVlOwotICAgICAgICBib29s
IGlzRmx1c2hpbmcgeyBmYWxzZSB9OwotICAgICAgICBib29sIGRvZXNOZWVkVG9Ob3RpZnlPbkxv
d1dhdGVyTGV2ZWwgeyBmYWxzZSB9OwotCi0gICAgICAgIHVpbnQ2NF90IGR1cmF0aW9uRW5xdWV1
ZWQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBGaW5kIHRoZSBmaXJzdCBhbmQg
bGFzdCBHc3RTYW1wbGUgaW4gdGhlIHF1ZXVlIGFuZCBzdWJ0cmFjdCB0aGVpciBEVFMuCi0gICAg
ICAgICAgICBhdXRvIGZyb250SXRlciA9IHN0ZDo6ZmluZF9pZihxdWV1ZS5iZWdpbigpLCBxdWV1
ZS5lbmQoKSwgW10oY29uc3QgR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiYgb2JqZWN0KSB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIEdTVF9JU19TQU1QTEUob2JqZWN0LmdldCgpKTsKLSAgICAgICAg
ICAgIH0pOworICAgIFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYyA9IHN0YXRpY19jYXN0
PFdlYktpdE1lZGlhU3JjKj4odXNlckRhdGEpOwogCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSBh
cmUgbm8gc2FtcGxlcyBpbiB0aGUgcXVldWUsIHRoYXQgbWFrZXMgdG90YWwgZHVyYXRpb24gb2Yg
ZW5xdWV1ZWQgZnJhbWVzIG9mIHplcm8uCi0gICAgICAgICAgICBpZiAoZnJvbnRJdGVyID09IHF1
ZXVlLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgIEFTU0VSVChXRUJLSVRf
SVNfTUVESUFfU1JDKHdlYktpdE1lZGlhU3JjKSk7CiAKLSAgICAgICAgICAgIGF1dG8gYmFja0l0
ZXIgPSBzdGQ6OmZpbmRfaWYocXVldWUucmJlZ2luKCksIHF1ZXVlLnJlbmQoKSwgW10oY29uc3Qg
R1JlZlB0cjxHc3RNaW5pT2JqZWN0PiYgb2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IEdTVF9JU19TQU1QTEUob2JqZWN0LmdldCgpKTsKLSAgICAgICAgICAgIH0pOworICAgIEdTVF9P
QkpFQ1RfTE9DSyh3ZWJLaXRNZWRpYVNyYyk7CisgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFw
cHNyY1NlZWtEYXRhQ291bnQrKzsKKyAgICBHU1RfT0JKRUNUX1VOTE9DSyh3ZWJLaXRNZWRpYVNy
Yyk7CiAKLSAgICAgICAgICAgIGNvbnN0IEdzdEJ1ZmZlciogZnJvbnQgPSBnc3Rfc2FtcGxlX2dl
dF9idWZmZXIoR1NUX1NBTVBMRShmcm9udEl0ZXItPmdldCgpKSk7Ci0gICAgICAgICAgICBjb25z
dCBHc3RCdWZmZXIqIGJhY2sgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoR1NUX1NBTVBMRShiYWNr
SXRlci0+Z2V0KCkpKTsKLSAgICAgICAgICAgIHJldHVybiBHU1RfQlVGRkVSX0RUU19PUl9QVFMo
YmFjaykgLSBHU1RfQlVGRkVSX0RUU19PUl9QVFMoZnJvbnQpOwotICAgICAgICB9Ci0gICAgfTsK
LSAgICBEYXRhTXV0ZXg8U3RyZWFtaW5nTWVtYmVycz4gc3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRl
eDsKLQotICAgIHN0cnVjdCBSZXBvcnRlZFN0YXR1cyB7Ci0gICAgICAgIC8vIFNldCB0byB0cnVl
IHdoZW4gdGhlIHBhZCBpcyByZW1vdmVkLiBJbiB0aGUgY2FzZSB3aGVyZSBhIHJlZmVyZW5jZSB0
byB0aGUgU3RyZWFtIG9iamVjdCBpcyBhbGl2ZSBiZWNhdXNlIG9mCi0gICAgICAgIC8vIGEgcG9z
dGVkIHRhc2sgdG8gbm90aWZ5IGlzUmVhZHlGb3JNb3JlU2FtcGxlcywgdGhlIG5vdGlmaWNhdGlv
biBtdXN0IG5vdCBiZSBkZWxpdmVyZWQgaWYgdGhpcyBmbGFnIGlzIHRydWUuCi0gICAgICAgIGJv
b2wgd2FzUmVtb3ZlZCB7IGZhbHNlIH07Ci0KLSAgICAgICAgYm9vbCBpc1JlYWR5Rm9yTW9yZVNh
bXBsZXMgeyB0cnVlIH07Ci0gICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQqIHNvdXJj
ZUJ1ZmZlclByaXZhdGVUb05vdGlmeSB7IG51bGxwdHIgfTsKLSAgICB9OwotICAgIE1haW5UaHJl
YWREYXRhPFJlcG9ydGVkU3RhdHVzPiByZXBvcnRlZFN0YXR1czsKLX07CisgICAgcmV0dXJuIFRS
VUU7Cit9CiAKLXN0YXRpYyBHUmVmUHRyPEdzdEVsZW1lbnQ+IGZpbmRQaXBlbGluZShHUmVmUHRy
PEdzdEVsZW1lbnQ+IGVsZW1lbnQpCitzdGF0aWMgU3RyZWFtKiBnZXRTdHJlYW1CeUFwcHNyYyhX
ZWJLaXRNZWRpYVNyYyogc291cmNlLCBHc3RFbGVtZW50KiBhcHBzcmMpCiB7Ci0gICAgd2hpbGUg
KHRydWUpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBwYXJlbnRFbGVtZW50ID0gYWRv
cHRHUmVmKEdTVF9FTEVNRU5UKGdzdF9lbGVtZW50X2dldF9wYXJlbnQoZWxlbWVudC5nZXQoKSkp
KTsKLSAgICAgICAgaWYgKCFwYXJlbnRFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7Ci0gICAgICAgIGVsZW1lbnQgPSBwYXJlbnRFbGVtZW50OworICAgIGZvciAoU3RyZWFtKiBz
dHJlYW0gOiBzb3VyY2UtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHN0cmVhbS0+YXBw
c3JjID09IGFwcHNyYykKKyAgICAgICAgICAgIHJldHVybiBzdHJlYW07CiAgICAgfQorICAgIHJl
dHVybiBudWxscHRyOwogfQogCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRNZWRpYVNy
Yywgd2Via2l0X21lZGlhX3NyYywgR1NUX1RZUEVfQklOLAorICAgIEdfSU1QTEVNRU5UX0lOVEVS
RkFDRShHU1RfVFlQRV9VUklfSEFORExFUiwgd2ViS2l0TWVkaWFTcmNVcmlIYW5kbGVySW5pdCk7
CisgICAgV0VCS0lUX01FRElBX1NSQ19DQVRFR09SWV9JTklUKTsKKworZ3VpbnQgd2ViS2l0TWVk
aWFTcmNTaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9OworCiBzdGF0aWMgdm9pZCB3ZWJraXRf
bWVkaWFfc3JjX2NsYXNzX2luaXQoV2ViS2l0TWVkaWFTcmNDbGFzcyoga2xhc3MpCiB7CiAgICAg
R09iamVjdENsYXNzKiBva2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CiAgICAgR3N0RWxl
bWVudENsYXNzKiBla2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CiAKICAgICBva2xh
c3MtPmZpbmFsaXplID0gd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZTsKKyAgICBva2xhc3MtPnNldF9w
cm9wZXJ0eSA9IHdlYktpdE1lZGlhU3JjU2V0UHJvcGVydHk7CiAgICAgb2tsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5OwogCi0gICAgZ3N0X2VsZW1lbnRfY2xh
c3NfYWRkX3N0YXRpY19wYWRfdGVtcGxhdGVfd2l0aF9ndHlwZShla2xhc3MsICZzcmNUZW1wbGF0
ZSwgd2Via2l0X21lZGlhX3NyY19wYWRfZ2V0X3R5cGUoKSk7Ci0KLSAgICBnc3RfZWxlbWVudF9j
bGFzc19zZXRfc3RhdGljX21ldGFkYXRhKGVrbGFzcywgIldlYktpdCBNZWRpYVNvdXJjZSBzb3Vy
Y2UgZWxlbWVudCIsICJTb3VyY2UvTmV0d29yayIsICJGZWVkcyBzYW1wbGVzIGNvbWluZyBmcm9t
IFdlYktpdCBNZWRpYVNvdXJjZSBvYmplY3QiLCAiSWdhbGlhIDxhYm95YUBpZ2FsaWEuY29tPiIp
OworICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWtsYXNzLCBnc3Rfc3Rh
dGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CiAKLSAgICBla2xhc3MtPmNoYW5n
ZV9zdGF0ZSA9IHdlYktpdE1lZGlhU3JjQ2hhbmdlU3RhdGU7CisgICAgZ3N0X2VsZW1lbnRfY2xh
c3Nfc2V0X3N0YXRpY19tZXRhZGF0YShla2xhc3MsICJXZWJLaXQgTWVkaWEgc291cmNlIGVsZW1l
bnQiLCAiU291cmNlIiwgIkhhbmRsZXMgQmxvYiB1cmlzIiwgIlN0ZXBoYW5lIEphZGF1ZCA8c2ph
ZGF1ZEBzaWkuZnI+LCBTZWJhc3RpYW4gRHLDtmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29t
PiwgRW5yaXF1ZSBPY2HDsWEgR29uesOhbGV6IDxlb2NhbmhhQGlnYWxpYS5jb20+Iik7CiAKKyAg
ICAvLyBBbGxvd3Mgc2V0dGluZyB0aGUgdXJpIHVzaW5nIHRoZSAnbG9jYXRpb24nIHByb3BlcnR5
LCB3aGljaCBpcyB1c2VkIGZvciBleGFtcGxlIGJ5IGdzdF9lbGVtZW50X21ha2VfZnJvbV91cmko
KS4KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9rbGFzcywKKyAgICAgICAg
UFJPUF9MT0NBVElPTiwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygibG9jYXRpb24iLCAi
bG9jYXRpb24iLCAiTG9jYXRpb24gdG8gcmVhZCBmcm9tIiwgbnVsbHB0ciwKKyAgICAgICAgR1Bh
cmFtRmxhZ3MoR19QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX1NUQVRJQ19TVFJJTkdTKSkpOwog
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAogICAgICAgICBQUk9Q
X05fQVVESU8sCiAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQoIm4tYXVkaW8iLCAiTnVtYmVyIEF1
ZGlvIiwgIlRvdGFsIG51bWJlciBvZiBhdWRpbyBzdHJlYW1zIiwKQEAgLTI3Miw1MzEgKzIyMSw0
MjggQEAgc3RhdGljIHZvaWQgd2Via2l0X21lZGlhX3NyY19jbGFzc19pbml0KFdlYktpdE1lZGlh
U3JjQ2xhc3MqIGtsYXNzKQogICAgICAgICBQUk9QX05fVEVYVCwKICAgICAgICAgZ19wYXJhbV9z
cGVjX2ludCgibi10ZXh0IiwgIk51bWJlciBUZXh0IiwgIlRvdGFsIG51bWJlciBvZiB0ZXh0IHN0
cmVhbXMiLAogICAgICAgICAwLCBHX01BWElOVCwgMCwgR1BhcmFtRmxhZ3MoR19QQVJBTV9SRUFE
QUJMRSB8IEdfUEFSQU1fU1RBVElDX1NUUklOR1MpKSk7Ci19CiAKLXN0YXRpYyB2b2lkIHdlYmtp
dF9tZWRpYV9zcmNfaW5pdChXZWJLaXRNZWRpYVNyYyogc291cmNlKQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0KLSAgICBHU1RfT0JKRUNUX0ZMQUdfU0VUKHNvdXJjZSwgR1NUX0VM
RU1FTlRfRkxBR19TT1VSQ0UpOwotICAgIHNvdXJjZS0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURSgoc291cmNlKSwgV0VCS0lUX1RZUEVfTUVESUFfU1JDLCBXZWJLaXRNZWRpYVNy
Y1ByaXZhdGUpOwotICAgIG5ldyAoc291cmNlLT5wcml2KSBXZWJLaXRNZWRpYVNyY1ByaXZhdGUo
KTsKLX0KKyAgICB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbU0lHTkFMX1ZJREVPX0NIQU5HRURdID0K
KyAgICAgICAgZ19zaWduYWxfbmV3KCJ2aWRlby1jaGFuZ2VkIiwgR19UWVBFX0ZST01fQ0xBU1Mo
b2tsYXNzKSwKKyAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgIEdfU1RSVUNUX09G
RlNFVChXZWJLaXRNZWRpYVNyY0NsYXNzLCB2aWRlb0NoYW5nZWQpLCBudWxscHRyLCBudWxscHRy
LAorICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUsIDAsIEdf
VFlQRV9OT05FKTsKKyAgICB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbU0lHTkFMX0FVRElPX0NIQU5H
RURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJhdWRpby1jaGFuZ2VkIiwgR19UWVBFX0ZST01f
Q0xBU1Mob2tsYXNzKSwKKyAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgIEdfU1RS
VUNUX09GRlNFVChXZWJLaXRNZWRpYVNyY0NsYXNzLCBhdWRpb0NoYW5nZWQpLCBudWxscHRyLCBu
dWxscHRyLAorICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05PTkUs
IDAsIEdfVFlQRV9OT05FKTsKKyAgICB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbU0lHTkFMX1RFWFRf
Q0hBTkdFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoInRleHQtY2hhbmdlZCIsIEdfVFlQRV9G
Uk9NX0NMQVNTKG9rbGFzcyksCisgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICBH
X1NUUlVDVF9PRkZTRVQoV2ViS2l0TWVkaWFTcmNDbGFzcywgdGV4dENoYW5nZWQpLCBudWxscHRy
LCBudWxscHRyLAorICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgR19UWVBFX05P
TkUsIDAsIEdfVFlQRV9OT05FKTsKIAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAg
IFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKG9iamVjdCk7Ci0gICAg
c291cmNlLT5wcml2LT5+V2ViS2l0TWVkaWFTcmNQcml2YXRlKCk7Ci0gICAgR1NUX0NBTExfUEFS
RU5UKEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKG9iamVjdCkpOwotfQorICAgIGVrbGFzcy0+
Y2hhbmdlX3N0YXRlID0gd2ViS2l0TWVkaWFTcmNDaGFuZ2VTdGF0ZTsKIAotc3RhdGljIEdzdFBh
ZFByb2JlUmV0dXJuIGRlYnVnUHJvYmUoR3N0UGFkKiBwYWQsIEdzdFBhZFByb2JlSW5mbyogaW5m
bywgdm9pZCopCi17Ci0gICAgUmVmUHRyPFN0cmVhbT4mIHN0cmVhbSA9IFdFQktJVF9NRURJQV9T
UkNfUEFEKHBhZCktPnByaXYtPnN0cmVhbTsKLSAgICBHU1RfVFJBQ0VfT0JKRUNUKHN0cmVhbS0+
c291cmNlLCAidHJhY2sgJXM6ICUiIEdTVF9QVFJfRk9STUFULCBzdHJlYW0tPm5hbWUuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgaW5mby0+ZGF0YSk7Ci0gICAgcmV0dXJuIEdTVF9QQURfUFJPQkVf
T0s7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0TWVk
aWFTcmNQcml2YXRlKSk7CiB9CiAKLS8vIEdzdFN0cmVhbUNvbGxlY3Rpb24gYXJlIGltbXV0YWJs
ZSBvYmplY3RzIG9uY2UgcG9zdGVkLiBUSEVZIE1VU1QgTk9UIEJFIE1PRElGSUVEIG9uY2UgdGhl
eSBoYXZlIGJlZW4gcG9zdGVkLgotLy8gSW5zdGVhZCwgd2hlbiBzdHJlYW0gY2hhbmdlcyBvY2N1
ciBhIG5ldyBjb2xsZWN0aW9uIG11c3QgYmUgbWFkZS4gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMg
aGVscCB0byBjcmVhdGUKLS8vIHN1Y2ggbmV3IGNvbGxlY3Rpb25zOgotCi1zdGF0aWMgR1JlZlB0
cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb3B5Q29sbGVjdGlvbkFuZEFkZFN0cmVhbShHc3RTdHJl
YW1Db2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBHUmVmUHRyPEdzdFN0cmVhbT4mJiBzdHJlYW0pCitz
dGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRNZWRpYVNyY0NoYWluKEdzdFBhZCogcGFkLCBHc3RP
YmplY3QqIHBhcmVudCwgR3N0QnVmZmVyKiBidWZmZXIpCiB7Ci0gICAgR1JlZlB0cjxHc3RTdHJl
YW1Db2xsZWN0aW9uPiBuZXdDb2xsZWN0aW9uID0gYWRvcHRHUmVmKGdzdF9zdHJlYW1fY29sbGVj
dGlvbl9uZXcoY29sbGVjdGlvbi0+dXBzdHJlYW1faWQpKTsKLQotICAgIHVuc2lnbmVkIG4gPSBn
c3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemUoY29sbGVjdGlvbik7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG47IGkrKykKLSAgICAgICAgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2Fk
ZF9zdHJlYW0obmV3Q29sbGVjdGlvbi5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0U3RyZWFtKj4oZ3N0
X29iamVjdF9yZWYoZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0oY29sbGVjdGlvbiwg
aSkpKSk7Ci0gICAgZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW0obmV3Q29sbGVjdGlv
bi5nZXQoKSwgc3RyZWFtLmxlYWtSZWYoKSk7CisgICAgR1JlZlB0cjxXZWJLaXRNZWRpYVNyYz4g
c2VsZiA9IGFkb3B0R1JlZihXRUJLSVRfTUVESUFfU1JDKGdzdF9vYmplY3RfZ2V0X3BhcmVudChw
YXJlbnQpKSk7CiAKLSAgICByZXR1cm4gbmV3Q29sbGVjdGlvbjsKKyAgICByZXR1cm4gZ3N0X2Zs
b3dfY29tYmluZXJfdXBkYXRlX3BhZF9mbG93KHNlbGYtPnByaXYtPmZsb3dDb21iaW5lci5nZXQo
KSwgcGFkLCBnc3RfcHJveHlfcGFkX2NoYWluX2RlZmF1bHQocGFkLCBHU1RfT0JKRUNUKHNlbGYu
Z2V0KCkpLCBidWZmZXIpKTsKIH0KIAotc3RhdGljIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlv
bj4gY29weUNvbGxlY3Rpb25XaXRob3V0U3RyZWFtKEdzdFN0cmVhbUNvbGxlY3Rpb24qIGNvbGxl
Y3Rpb24sIGNvbnN0IEdzdFN0cmVhbSogc3RyZWFtKQorc3RhdGljIHZvaWQgd2Via2l0X21lZGlh
X3NyY19pbml0KFdlYktpdE1lZGlhU3JjKiBzb3VyY2UpCiB7Ci0gICAgR1JlZlB0cjxHc3RTdHJl
YW1Db2xsZWN0aW9uPiBuZXdDb2xsZWN0aW9uID0gYWRvcHRHUmVmKGdzdF9zdHJlYW1fY29sbGVj
dGlvbl9uZXcoY29sbGVjdGlvbi0+dXBzdHJlYW1faWQpKTsKLQotICAgIHVuc2lnbmVkIG4gPSBn
c3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemUoY29sbGVjdGlvbik7Ci0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbT4gb2xk
U3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0oY29sbGVjdGlvbiwgaSk7
Ci0gICAgICAgIGlmIChvbGRTdHJlYW0uZ2V0KCkgIT0gc3RyZWFtKQotICAgICAgICAgICAgZ3N0
X3N0cmVhbV9jb2xsZWN0aW9uX2FkZF9zdHJlYW0obmV3Q29sbGVjdGlvbi5nZXQoKSwgb2xkU3Ry
ZWFtLmxlYWtSZWYoKSk7Ci0gICAgfQorICAgIHNvdXJjZS0+cHJpdiA9IFdFQktJVF9NRURJQV9T
UkNfR0VUX1BSSVZBVEUoc291cmNlKTsKKyAgICBuZXcgKHNvdXJjZS0+cHJpdikgV2ViS2l0TWVk
aWFTcmNQcml2YXRlKCk7CisgICAgc291cmNlLT5wcml2LT5zZWVrVGltZSA9IE1lZGlhVGltZTo6
aW52YWxpZFRpbWUoKTsKKyAgICBzb3VyY2UtPnByaXYtPmFwcHNyY1NlZWtEYXRhQ291bnQgPSAw
OworICAgIHNvdXJjZS0+cHJpdi0+YXBwc3JjTmVlZERhdGFDb3VudCA9IDA7CisgICAgc291cmNl
LT5wcml2LT5hcHBzcmNTZWVrRGF0YU5leHRBY3Rpb24gPSBOb3RoaW5nOworICAgIHNvdXJjZS0+
cHJpdi0+Zmxvd0NvbWJpbmVyID0gR1VuaXF1ZVB0cjxHc3RGbG93Q29tYmluZXI+KGdzdF9mbG93
X2NvbWJpbmVyX25ldygpKTsKKyAgICBzb3VyY2UtPnByaXYtPm5vdGlmaWVyID0gV2ViQ29yZTo6
TWFpblRocmVhZE5vdGlmaWVyPFdlYktpdE1lZGlhU3JjTWFpblRocmVhZE5vdGlmaWNhdGlvbj46
OmNyZWF0ZSgpOwogCi0gICAgcmV0dXJuIG5ld0NvbGxlY3Rpb247CisgICAgLy8gTm8gbmVlZCB0
byByZXNldCBTdHJlYW0uYXBwc3JjTmVlZERhdGFGbGFnIGJlY2F1c2UgdGhlcmUgYXJlIG5vIFN0
cmVhbXMgYXQgdGhpcyBwb2ludCB5ZXQuCiB9CiAKLXN0YXRpYyBHc3RTdHJlYW1UeXBlIGdzdFN0
cmVhbVR5cGUoV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHR5cGUpCit2
b2lkIHdlYktpdE1lZGlhU3JjRmluYWxpemUoR09iamVjdCogb2JqZWN0KQogewotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVh
bWVyOjpWaWRlbzoKLSAgICAgICAgcmV0dXJuIEdTVF9TVFJFQU1fVFlQRV9WSURFTzsKLSAgICBj
YXNlIFdlYkNvcmU6Ok1lZGlhU291cmNlU3RyZWFtVHlwZUdTdHJlYW1lcjo6QXVkaW86Ci0gICAg
ICAgIHJldHVybiBHU1RfU1RSRUFNX1RZUEVfQVVESU87Ci0gICAgY2FzZSBXZWJDb3JlOjpNZWRp
YVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlRleHQ6Ci0gICAgICAgIHJldHVybiBHU1RfU1RS
RUFNX1RZUEVfVEVYVDsKLSAgICBkZWZhdWx0OgotICAgICAgICBHU1RfRVJST1IoIlJlY2VpdmVk
IHVuZXhwZWN0ZWQgc3RyZWFtIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIEdTVF9TVFJFQU1fVFlQ
RV9VTktOT1dOOwotICAgIH0KLX0KKyAgICBBU1NFUlQoV1RGOjppc01haW5UaHJlYWQoKSk7CiAK
LXZvaWQgd2ViS2l0TWVkaWFTcmNBZGRTdHJlYW0oV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgY29u
c3QgQXRvbVN0cmluZyYgbmFtZSwgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVh
bWVyIHR5cGUsIEdSZWZQdHI8R3N0Q2Fwcz4mJiBpbml0aWFsQ2FwcykKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVCghc291cmNlLT5wcml2LT5zdHJlYW1zLmNvbnRh
aW5zKG5hbWUpKTsKKyAgICBXZWJLaXRNZWRpYVNyYyogc291cmNlID0gV0VCS0lUX01FRElBX1NS
QyhvYmplY3QpOworICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNvdXJjZS0+cHJp
djsKIAotICAgIEdSZWZQdHI8R3N0U3RyZWFtPiBzdHJlYW1JbmZvID0gYWRvcHRHUmVmKGdzdF9z
dHJlYW1fbmV3KG5hbWUuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaW5pdGlhbENhcHMuZ2V0KCks
IGdzdFN0cmVhbVR5cGUodHlwZSksIEdTVF9TVFJFQU1fRkxBR19TRUxFQ1QpKTsKLSAgICBzb3Vy
Y2UtPnByaXYtPmNvbGxlY3Rpb24gPSBjb3B5Q29sbGVjdGlvbkFuZEFkZFN0cmVhbShzb3VyY2Ut
PnByaXYtPmNvbGxlY3Rpb24uZ2V0KCksIEdSZWZQdHI8R3N0U3RyZWFtPihzdHJlYW1JbmZvKSk7
Ci0gICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKEdTVF9FTEVNRU5UKHNvdXJjZSksIGdzdF9t
ZXNzYWdlX25ld19zdHJlYW1fY29sbGVjdGlvbihHU1RfT0JKRUNUKHNvdXJjZSksIHNvdXJjZS0+
cHJpdi0+Y29sbGVjdGlvbi5nZXQoKSkpOworICAgIFZlY3RvcjxTdHJlYW0qPiBvbGRTdHJlYW1z
OworICAgIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5zd2FwKG9sZFN0cmVhbXMpOwogCi0gICAgR1Jl
ZlB0cjxXZWJLaXRNZWRpYVNyY1BhZD4gcGFkID0gV0VCS0lUX01FRElBX1NSQ19QQUQoZ19vYmpl
Y3RfbmV3KHdlYmtpdF9tZWRpYV9zcmNfcGFkX2dldF90eXBlKCksICJuYW1lIiwgbWFrZVN0cmlu
Zygic3JjXyIsIG5hbWUpLnV0ZjgoKS5kYXRhKCksICJkaXJlY3Rpb24iLCBHU1RfUEFEX1NSQywg
TlVMTCkpOwotICAgIGdzdF9wYWRfc2V0X2FjdGl2YXRlbW9kZV9mdW5jdGlvbihHU1RfUEFEKHBh
ZC5nZXQoKSksIHdlYktpdE1lZGlhU3JjQWN0aXZhdGVNb2RlKTsKKyAgICBmb3IgKFN0cmVhbSog
c3RyZWFtIDogb2xkU3RyZWFtcykKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNGcmVlU3RyZWFtKHNv
dXJjZSwgc3RyZWFtKTsKIAotICAgIHsKLSAgICAgICAgUmVmUHRyPFN0cmVhbT4gc3RyZWFtID0g
YWRvcHRSZWYobmV3IFN0cmVhbShzb3VyY2UsIEdSZWZQdHI8R3N0UGFkPihHU1RfUEFEKHBhZC5n
ZXQoKSkpLCBuYW1lLCB0eXBlLCBXVEZNb3ZlKGluaXRpYWxDYXBzKSwgV1RGTW92ZShzdHJlYW1J
bmZvKSkpOwotICAgICAgICBwYWQtPnByaXYtPnN0cmVhbSA9IHN0cmVhbTsKLSAgICAgICAgc291
cmNlLT5wcml2LT5zdHJlYW1zLnNldChuYW1lLCBXVEZNb3ZlKHN0cmVhbSkpOwotICAgIH0KKyAg
ICBwcml2LT5zZWVrVGltZSA9IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKTsKKworICAgIHNvdXJj
ZS0+cHJpdi0+bm90aWZpZXItPmludmFsaWRhdGUoKTsKIAotICAgIGlmIChnc3RfZGVidWdfY2F0
ZWdvcnlfZ2V0X3RocmVzaG9sZCh3ZWJraXRfbWVkaWFfc3JjX2RlYnVnKSA+PSBHU1RfTEVWRUxf
VFJBQ0UpCi0gICAgICAgIGdzdF9wYWRfYWRkX3Byb2JlKEdTVF9QQUQocGFkLmdldCgpKSwgc3Rh
dGljX2Nhc3Q8R3N0UGFkUHJvYmVUeXBlPihHU1RfUEFEX1BST0JFX1RZUEVfREFUQV9ET1dOU1RS
RUFNIHwgR1NUX1BBRF9QUk9CRV9UWVBFX0VWRU5UX0ZMVVNIKSwgZGVidWdQcm9iZSwgbnVsbHB0
ciwgbnVsbHB0cik7CisgICAgaWYgKHByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZSkKKyAgICAgICAg
d2ViS2l0TWVkaWFTcmNTZXRNZWRpYVBsYXllclByaXZhdGUoc291cmNlLCBudWxscHRyKTsKIAot
ICAgIC8vIFdvcmthcm91bmQ6IGdzdF9lbGVtZW50X2FkZF9wYWQoKSBzaG91bGQgYWxyZWFkeSBj
YWxsIGdzdF9wYWRfc2V0X2FjdGl2ZSgpIGlmIHRoZSBlbGVtZW50IGlzIFBBVVNFRCBvcgotICAg
IC8vIFBMQVlJTkcuIFVuZm9ydHVuYXRlbHksIGFzIG9mIEdTdHJlYW1lciAxLjE0LjQgaXQgZG9l
cyBzbyB3aXRoIHRoZSBlbGVtZW50IGxvY2sgdGFrZW4sIGNhdXNpbmcgYSBkZWFkbG9jawotICAg
IC8vIGluIGdzdF9wYWRfc3RhcnRfdGFzaygpLCB3aG8gdHJpZXMgdG8gcG9zdCBhIGBzdHJlYW0t
c3RhdHVzYCBtZXNzYWdlIGluIHRoZSBlbGVtZW50LCB3aGljaCBhbHNvIHJlcXVpcmVzCi0gICAg
Ly8gdGhlIGVsZW1lbnQgbG9jay4gQWN0aXZhdGluZyB0aGUgcGFkIGJlZm9yZWhhbmQgYXZvaWRz
IHRoYXQgY29kZXBhdGguCi0gICAgR3N0U3RhdGUgc3RhdGU7Ci0gICAgZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRlKEdTVF9FTEVNRU5UKHNvdXJjZSksICZzdGF0ZSwgbnVsbHB0ciwgMCk7Ci0gICAgaWYg
KHN0YXRlID4gR1NUX1NUQVRFX1JFQURZKQotICAgICAgICBnc3RfcGFkX3NldF9hY3RpdmUoR1NU
X1BBRChwYWQuZ2V0KCkpLCB0cnVlKTsKKyAgICAvLyBXZSB1c2VkIGEgcGxhY2VtZW50IG5ldyBm
b3IgY29uc3RydWN0aW9uLCB0aGUgZGVzdHJ1Y3RvciB3b24ndCBiZSBjYWxsZWQgYXV0b21hdGlj
YWxseS4KKyAgICBwcml2LT5+X1dlYktpdE1lZGlhU3JjUHJpdmF0ZSgpOwogCi0gICAgZ3N0X2Vs
ZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChzb3VyY2UpLCBHU1RfUEFEKHBhZC5nZXQoKSkpOwor
ICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsIChvYmplY3QpKTsK
IH0KIAotdm9pZCB3ZWJLaXRNZWRpYVNyY1JlbW92ZVN0cmVhbShXZWJLaXRNZWRpYVNyYyogc291
cmNlLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQordm9pZCB3ZWJLaXRNZWRpYVNyY1NldFByb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwc3BlYykKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIFN0
cmVhbSogc3RyZWFtID0gc291cmNlLT5wcml2LT5zdHJlYW1CeU5hbWUobmFtZSk7Ci0KLSAgICBz
b3VyY2UtPnByaXYtPmNvbGxlY3Rpb24gPSBjb3B5Q29sbGVjdGlvbldpdGhvdXRTdHJlYW0oc291
cmNlLT5wcml2LT5jb2xsZWN0aW9uLmdldCgpLCBzdHJlYW0tPnN0cmVhbUluZm8uZ2V0KCkpOwot
ICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShHU1RfRUxFTUVOVChzb3VyY2UpLCBnc3RfbWVz
c2FnZV9uZXdfc3RyZWFtX2NvbGxlY3Rpb24oR1NUX09CSkVDVChzb3VyY2UpLCBzb3VyY2UtPnBy
aXYtPmNvbGxlY3Rpb24uZ2V0KCkpKTsKLQotICAgIC8vIEZsdXNoIHRoZSBzb3VyY2UgZWxlbWVu
dCAqKmFuZCoqIGRvd25zdHJlYW0uIFdlIHdhbnQgdG8gc3RvcCB0aGUgc3RyZWFtaW5nIHRocmVh
ZCBhbmQgZm9yIHRoYXQgd2UgbmVlZCBhbGwgZWxlbWVudHMgZG93bnN0cmVhbSB0byBiZSBpZGxl
LgotICAgIHdlYktpdE1lZGlhU3JjU3RyZWFtRmx1c2hTdGFydChzdHJlYW0pOwotICAgIHdlYktp
dE1lZGlhU3JjU3RyZWFtRmx1c2hTdG9wKHN0cmVhbSwgZmFsc2UpOwotICAgIC8vIFN0b3AgdGhl
IHRocmVhZCBub3cuCi0gICAgZ3N0X3BhZF9zZXRfYWN0aXZlKHN0cmVhbS0+cGFkLmdldCgpLCBm
YWxzZSk7CisgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9NRURJQV9TUkMob2Jq
ZWN0KTsKIAotICAgIHN0cmVhbS0+cmVwb3J0ZWRTdGF0dXMtPndhc1JlbW92ZWQgPSB0cnVlOwot
ICAgIGdzdF9lbGVtZW50X3JlbW92ZV9wYWQoR1NUX0VMRU1FTlQoc291cmNlKSwgc3RyZWFtLT5w
YWQuZ2V0KCkpOwotICAgIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5yZW1vdmUobmFtZSk7CisgICAg
c3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfTE9DQVRJT046CisgICAgICAgIGdzdF91
cmlfaGFuZGxlcl9zZXRfdXJpKHJlaW50ZXJwcmV0X2Nhc3Q8R3N0VVJJSGFuZGxlcio+KHNvdXJj
ZSksIGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSksIG51bGxwdHIpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wSWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCi1zdGF0
aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNBY3RpdmF0ZU1vZGUoR3N0UGFkKiBwYWQsIEdzdE9i
amVjdCogc291cmNlLCBHc3RQYWRNb2RlIG1vZGUsIGdib29sZWFuIGFjdGl2ZSkKK3ZvaWQgd2Vi
S2l0TWVkaWFTcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJZCwgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCiB7Ci0gICAgaWYgKG1vZGUgIT0gR1NUX1BB
RF9NT0RFX1BVU0gpIHsKLSAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzb3VyY2UsICJVbmV4cGVj
dGVkIHBhZCBtb2RlIGluIFdlYktpdE1lZGlhU3JjIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9CisgICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9NRURJQV9TUkMob2Jq
ZWN0KTsKKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzb3VyY2UtPnByaXY7CiAK
LSAgICBpZiAoYWN0aXZlKQotICAgICAgICBnc3RfcGFkX3N0YXJ0X3Rhc2socGFkLCB3ZWJLaXRN
ZWRpYVNyY0xvb3AsIHBhZCwgbnVsbHB0cik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIFVuYmxv
Y2sgdGhlIHN0cmVhbWluZyB0aHJlYWQuCi0gICAgICAgIFJlZlB0cjxTdHJlYW0+JiBzdHJlYW0g
PSBXRUJLSVRfTUVESUFfU1JDX1BBRChwYWQpLT5wcml2LT5zdHJlYW07Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFw
cGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsK
LSAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmlzRmx1c2hpbmcgPSB0cnVlOwotICAgICAg
ICAgICAgc3RyZWFtaW5nTWVtYmVycy0+cGFkTGlua2VkT3JGbHVzaGVkQ29uZGl0aW9uLm5vdGlm
eU9uZSgpOwotICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+cXVldWVDaGFuZ2VkT3JGbHVz
aGVkQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZvbGxvd2lu
ZyBnc3RiYXNlc3JjIGltcGxlbWVudGF0aW9uLCB0aGlzIGNvZGUgaXMgbm90IGZsdXNoaW5nIGRv
d25zdHJlYW0uCi0gICAgICAgIC8vIElmIHRoZXJlIGlzIGFueSBwb3NzaWJpbGl0eSBvZiB0aGUg
c3RyZWFtaW5nIHRocmVhZCBiZWluZyBibG9ja2VkIGRvd25zdHJlYW0gdGhlIGNhbGxlciBNVVNU
IGZsdXNoIGJlZm9yZS4KLSAgICAgICAgLy8gT3RoZXJ3aXNlIGEgZGVhZGxvY2sgd291bGQgb2Nj
dXIgYXMgdGhlIG5leHQgZnVuY3Rpb24gdHJpZXMgdG8gam9pbiB0aGUgdGhyZWFkLgotICAgICAg
ICBnc3RfcGFkX3N0b3BfdGFzayhwYWQpOwotICAgICAgICB7Ci0gICAgICAgICAgICBEYXRhTXV0
ZXg8U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1i
ZXJzKHN0cmVhbS0+c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7Ci0gICAgICAgICAgICBzdHJl
YW1pbmdNZW1iZXJzLT5pc0ZsdXNoaW5nID0gZmFsc2U7Ci0gICAgICAgIH0KKyAgICBHU1RfT0JK
RUNUX0xPQ0soc291cmNlKTsKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9M
T0NBVElPTjoKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBwcml2LT5sb2NhdGlv
bi5nZXQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9OX0FVRElPOgorICAgICAg
ICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPm51bWJlck9mQXVkaW9TdHJlYW1zKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX05fVklERU86CisgICAgICAgIGdfdmFsdWVfc2V0
X2ludCh2YWx1ZSwgcHJpdi0+bnVtYmVyT2ZWaWRlb1N0cmVhbXMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTl9URVhUOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHBy
aXYtPm51bWJlck9mVGV4dFN0cmVhbXMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3Jj
UGFkTGlua2VkKEdzdFBhZCogcGFkLCBHc3RQYWQqLCB2b2lkKikKK3ZvaWQgd2ViS2l0TWVkaWFT
cmNEb0FzeW5jU3RhcnQoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSkKIHsKLSAgICBSZWZQdHI8U3Ry
ZWFtPiYgc3RyZWFtID0gV0VCS0lUX01FRElBX1NSQ19QQUQocGFkKS0+cHJpdi0+c3RyZWFtOwot
ICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0
cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKLSAgICBz
dHJlYW1pbmdNZW1iZXJzLT5wYWRMaW5rZWRPckZsdXNoZWRDb25kaXRpb24ubm90aWZ5T25lKCk7
CisgICAgc291cmNlLT5wcml2LT5hc3luY1N0YXJ0ID0gdHJ1ZTsKKyAgICBHU1RfQklOX0NMQVNT
KHBhcmVudF9jbGFzcyktPmhhbmRsZV9tZXNzYWdlKEdTVF9CSU4oc291cmNlKSwKKyAgICAgICAg
Z3N0X21lc3NhZ2VfbmV3X2FzeW5jX3N0YXJ0KEdTVF9PQkpFQ1Qoc291cmNlKSkpOwogfQogCi1z
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1N0cmVhbU5vdGlmeUxvd1dhdGVyTGV2ZWwoY29uc3Qg
UmVmUHRyPFN0cmVhbT4mIHN0cmVhbSkKK3ZvaWQgd2ViS2l0TWVkaWFTcmNEb0FzeW5jRG9uZShX
ZWJLaXRNZWRpYVNyYyogc291cmNlKQogewotICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChb
c3RyZWFtXSgpIHsKLSAgICAgICAgaWYgKHN0cmVhbS0+cmVwb3J0ZWRTdGF0dXMtPndhc1JlbW92
ZWQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgc3RyZWFtLT5yZXBvcnRlZFN0YXR1
cy0+aXNSZWFkeUZvck1vcmVTYW1wbGVzID0gdHJ1ZTsKLSAgICAgICAgaWYgKHN0cmVhbS0+cmVw
b3J0ZWRTdGF0dXMtPnNvdXJjZUJ1ZmZlclByaXZhdGVUb05vdGlmeSkgewotICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBzZXQgc291cmNlQnVmZmVyUHJpdmF0ZVRvTm90aWZ5IEJFRk9SRSBjYWxs
aW5nIHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRCZWNvbWVSZWFkeUZvck1vcmVTYW1wbGVzKCksCi0g
ICAgICAgICAgICAvLyBub3QgYWZ0ZXIsIHNpbmNlIG90aGVyd2lzZSBpdCB3b3VsZCBkZXN0cm95
IGEgbm90aWZpY2F0aW9uIHJlcXVlc3Qgc2hvdWxkIHRoZSBjYWxsYmFjayByZXF1ZXN0IG9uZS4K
LSAgICAgICAgICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQqIHNvdXJjZUJ1ZmZlciA9IHN0
cmVhbS0+cmVwb3J0ZWRTdGF0dXMtPnNvdXJjZUJ1ZmZlclByaXZhdGVUb05vdGlmeTsKLSAgICAg
ICAgICAgIHN0cmVhbS0+cmVwb3J0ZWRTdGF0dXMtPnNvdXJjZUJ1ZmZlclByaXZhdGVUb05vdGlm
eSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBzb3VyY2VCdWZmZXItPnNvdXJjZUJ1ZmZlclByaXZh
dGVEaWRCZWNvbWVSZWFkeUZvck1vcmVTYW1wbGVzKHN0cmVhbS0+bmFtZSk7Ci0gICAgICAgIH0K
LSAgICB9KTsKKyAgICBXZWJLaXRNZWRpYVNyY1ByaXZhdGUqIHByaXYgPSBzb3VyY2UtPnByaXY7
CisgICAgaWYgKHByaXYtPmFzeW5jU3RhcnQpIHsKKyAgICAgICAgR1NUX0JJTl9DTEFTUyhwYXJl
bnRfY2xhc3MpLT5oYW5kbGVfbWVzc2FnZShHU1RfQklOKHNvdXJjZSksCisgICAgICAgICAgICBn
c3RfbWVzc2FnZV9uZXdfYXN5bmNfZG9uZShHU1RfT0JKRUNUKHNvdXJjZSksIEdTVF9DTE9DS19U
SU1FX05PTkUpKTsKKyAgICAgICAgcHJpdi0+YXN5bmNTdGFydCA9IGZhbHNlOworICAgIH0KIH0K
IAotLy8gQ2FsbGVkIHdpdGggU1RSRUFNX0xPQ0suCi1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNy
Y0xvb3Aodm9pZCogdXNlckRhdGEpCitHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRNZWRpYVNy
Y0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRp
b24pCiB7Ci0gICAgR3N0UGFkKiBwYWQgPSBHU1RfUEFEKHVzZXJEYXRhKTsKLSAgICBSZWZQdHI8
U3RyZWFtPiYgc3RyZWFtID0gV0VCS0lUX01FRElBX1NSQ19QQUQocGFkKS0+cHJpdi0+c3RyZWFt
OworICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKGVsZW1lbnQp
OworICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNvdXJjZS0+cHJpdjsKIAotICAg
IERhdGFNdXRleDxTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVh
bWluZ01lbWJlcnMoc3RyZWFtLT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKLSAgICBpZiAo
c3RyZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZykgewotICAgICAgICBnc3RfcGFkX3BhdXNlX3Rh
c2socGFkKTsKLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAg
IGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICAgIHByaXYtPmFs
bFRyYWNrc0NvbmZpZ3VyZWQgPSBmYWxzZTsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5j
U3RhcnQoc291cmNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogCi0gICAgLy8gU2luY2UgdGhlIHBhZCBjYW4gYW5kIHdpbGwgYmUgYWRkZWQg
d2hlbiB0aGUgZWxlbWVudCBpcyBpbiBQTEFZSU5HIHN0YXRlLCB0aGlzIHRhc2sgY2FuIHN0YXJ0
IHJ1bm5pbmcKLSAgICAvLyBiZWZvcmUgdGhlIHBhZCBpcyBsaW5rZWQuIFdhaXQgZm9yIHRoZSBw
YWQgdG8gYmUgbGlua2VkIHRvIGF2b2lkIGJ1ZmZlcnMgYmVpbmcgbG9zdCB0byBub3QtbGlua2Vk
IGVycm9ycy4KLSAgICBHU1RfT0JKRUNUX0xPQ0socGFkKTsKLSAgICBpZiAoIUdTVF9QQURfSVNf
TElOS0VEKHBhZCkpIHsKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChwYWQsICJsaW5rZWQiLCBH
X0NBTExCQUNLKHdlYktpdE1lZGlhU3JjUGFkTGlua2VkKSwgbnVsbHB0cik7Ci0gICAgICAgIEdT
VF9PQkpFQ1RfVU5MT0NLKHBhZCk7Ci0KLSAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+cGFkTGlu
a2VkT3JGbHVzaGVkQ29uZGl0aW9uLndhaXQoc3RyZWFtaW5nTWVtYmVycy5tdXRleCgpKTsKLQot
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocGFkLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPih3ZWJLaXRNZWRpYVNyY1BhZExpbmtlZCksIG51bGxwdHIpOwotICAg
ICAgICBpZiAoc3RyZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZykKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICB9IGVsc2UKLSAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0socGFkKTsKLSAgICBBU1NF
UlQoZ3N0X3BhZF9pc19saW5rZWQocGFkKSk7Ci0KLSAgICAvLyBCeSBrZWVwaW5nIHRoZSBsb2Nr
IHdlIGFyZSBndWFyYW50ZWVkIHRoYXQgYSBmbHVzaCB3aWxsIG5vdCBoYXBwZW4gd2hpbGUgd2Ug
c2VuZCBlc3NlbnRpYWwgZXZlbnRzLgotICAgIC8vIFRoZXNlIGV2ZW50cyBzaG91bGQgbmV2ZXIg
YmxvY2sgZG93bnN0cmVhbSwgc28gdGhlIGxvY2sgc2hvdWxkIGJlIHJlbGVhc2VkIGluIGxpdHRs
ZSB0aW1lIGluIGV2ZXJ5Ci0gICAgLy8gY2FzZS4KLQotICAgIGlmIChzdHJlYW1pbmdNZW1iZXJz
LT5wZW5kaW5nU3RyZWFtQ29sbGVjdGlvbkV2ZW50KQotICAgICAgICBnc3RfcGFkX3B1c2hfZXZl
bnQoc3RyZWFtLT5wYWQuZ2V0KCksIHN0cmVhbWluZ01lbWJlcnMtPnBlbmRpbmdTdHJlYW1Db2xs
ZWN0aW9uRXZlbnQubGVha1JlZigpKTsKLQotICAgIGlmICghc3RyZWFtaW5nTWVtYmVycy0+d2Fz
U3RyZWFtU3RhcnRTZW50KSB7Ci0gICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gc3RyZWFtSWQoZ19z
dHJkdXBfcHJpbnRmKCJtc2UvJXMiLCBzdHJlYW0tPm5hbWUuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSkpOwotICAgICAgICBHUmVmUHRyPEdzdEV2ZW50PiBldmVudCA9IGFkb3B0R1JlZihnc3RfZXZl
bnRfbmV3X3N0cmVhbV9zdGFydChzdHJlYW1JZC5nZXQoKSkpOwotICAgICAgICBnc3RfZXZlbnRf
c2V0X2dyb3VwX2lkKGV2ZW50LmdldCgpLCBzdHJlYW0tPnNvdXJjZS0+cHJpdi0+Z3JvdXBJZCk7
Ci0gICAgICAgIGdzdF9ldmVudF9zZXRfc3RyZWFtKGV2ZW50LmdldCgpLCBzdHJlYW0tPnN0cmVh
bUluZm8uZ2V0KCkpOwotCi0gICAgICAgIGJvb2wgd2FzU3RyZWFtU3RhcnRTZW50ID0gZ3N0X3Bh
ZF9wdXNoX2V2ZW50KHBhZCwgZXZlbnQubGVha1JlZigpKTsKLSAgICAgICAgc3RyZWFtaW5nTWVt
YmVycy0+d2FzU3RyZWFtU3RhcnRTZW50ID0gd2FzU3RyZWFtU3RhcnRTZW50OworICAgIEdzdFN0
YXRlQ2hhbmdlUmV0dXJuIHJlc3VsdCA9IEdTVF9FTEVNRU5UX0NMQVNTKHBhcmVudF9jbGFzcykt
PmNoYW5nZV9zdGF0ZShlbGVtZW50LCB0cmFuc2l0aW9uKTsKKyAgICBpZiAoR19VTkxJS0VMWShy
ZXN1bHQgPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSkgeworICAgICAgICBHU1RfV0FSTklO
R19PQkpFQ1Qoc291cmNlLCAiU3RhdGUgY2hhbmdlIGZhaWxlZCIpOworICAgICAgICB3ZWJLaXRN
ZWRpYVNyY0RvQXN5bmNEb25lKHNvdXJjZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCi0gICAgaWYgKHN0cmVhbWluZ01lbWJlcnMtPnBlbmRpbmdJbml0aWFsQ2FwcykgewotICAg
ICAgICBHUmVmUHRyPEdzdEV2ZW50PiBldmVudCA9IGFkb3B0R1JlZihnc3RfZXZlbnRfbmV3X2Nh
cHMoc3RyZWFtaW5nTWVtYmVycy0+cGVuZGluZ0luaXRpYWxDYXBzLmdldCgpKSk7Ci0KLSAgICAg
ICAgZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgZXZlbnQubGVha1JlZigpKTsKLQotICAgICAgICBz
dHJlYW1pbmdNZW1iZXJzLT5wcmV2aW91c0NhcHMgPSBXVEZNb3ZlKHN0cmVhbWluZ01lbWJlcnMt
PnBlbmRpbmdJbml0aWFsQ2Fwcyk7Ci0gICAgICAgIEFTU0VSVCghc3RyZWFtaW5nTWVtYmVycy0+
cGVuZGluZ0luaXRpYWxDYXBzKTsKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNl
IEdTVF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAgICAgICByZXN1bHQgPSBHU1Rf
U1RBVEVfQ0hBTkdFX0FTWU5DOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9D
SEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgICB3ZWJLaXRNZWRpYVNyY0RvQXN5bmNEb25l
KHNvdXJjZSk7CisgICAgICAgIHByaXYtPmFsbFRyYWNrc0NvbmZpZ3VyZWQgPSBmYWxzZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
c3RyZWFtaW5nTWVtYmVycy0+cXVldWVDaGFuZ2VkT3JGbHVzaGVkQ29uZGl0aW9uLndhaXQoc3Ry
ZWFtaW5nTWVtYmVycy5tdXRleCgpLCBbJl0oKSB7Ci0gICAgICAgIHJldHVybiAhc3RyZWFtaW5n
TWVtYmVycy0+cXVldWUuaXNFbXB0eSgpIHx8IHN0cmVhbWluZ01lbWJlcnMtPmlzRmx1c2hpbmc7
Ci0gICAgfSk7Ci0gICAgaWYgKHN0cmVhbWluZ01lbWJlcnMtPmlzRmx1c2hpbmcpCi0gICAgICAg
IHJldHVybjsKKyAgICByZXR1cm4gcmVzdWx0OworfQogCi0gICAgLy8gV2Ugd2FpdCB0byBnZXQg
YSBzYW1wbGUgYmVmb3JlIGVtaXR0aW5nIHRoZSBmaXJzdCBzZWdtZW50LiBUaGlzIHdheSwgaWYg
d2UgZ2V0IGEgc2VlayBiZWZvcmUgYW55Ci0gICAgLy8gZW5xdWV1ZSwgd2UncmUgc2VuZGluZyBv
bmx5IG9uZSBzZWdtZW50LiBUaGlzIGFsc28gZW5zdXJlcyB0aGF0IHdoZW4gc3VjaCBhIHNlZWsg
aXMgbWFkZSwgd2hlcmUgd2UgYWxzbwotICAgIC8vIG9taXQgdGhlIGZsdXNoIChzZWUgd2ViS2l0
TWVkaWFTcmNGbHVzaCkgd2UgYWN0dWFsbHkgZW1pdCB0aGUgdXBkYXRlZCwgY29ycmVjdCBzZWdt
ZW50LgotICAgIGlmIChzdHJlYW1pbmdNZW1iZXJzLT5kb2VzTmVlZFNlZ21lbnRFdmVudCkgewot
ICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQocGFkLCBnc3RfZXZlbnRfbmV3X3NlZ21lbnQoJnN0
cmVhbWluZ01lbWJlcnMtPnNlZ21lbnQpKTsKLSAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+ZG9l
c05lZWRTZWdtZW50RXZlbnQgPSBmYWxzZTsKLSAgICB9CitnaW50NjQgd2ViS2l0TWVkaWFTcmNH
ZXRTaXplKFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYykKK3sKKyAgICBnaW50NjQgZHVy
YXRpb24gPSAwOworICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiB3ZWJLaXRNZWRpYVNyYy0+cHJp
di0+c3RyZWFtcykKKyAgICAgICAgZHVyYXRpb24gPSBzdGQ6Om1heDxnaW50NjQ+KGR1cmF0aW9u
LCBnc3RfYXBwX3NyY19nZXRfc2l6ZShHU1RfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYykpKTsKKyAg
ICByZXR1cm4gZHVyYXRpb247Cit9CiAKLSAgICBHUmVmUHRyPEdzdE1pbmlPYmplY3Q+IG9iamVj
dCA9IHN0cmVhbWluZ01lbWJlcnMtPnF1ZXVlLnRha2VGaXJzdCgpOwotICAgIGlmIChHU1RfSVNf
U0FNUExFKG9iamVjdC5nZXQoKSkpIHsKLSAgICAgICAgR1JlZlB0cjxHc3RTYW1wbGU+IHNhbXBs
ZSA9IGFkb3B0R1JlZihHU1RfU0FNUExFKG9iamVjdC5sZWFrUmVmKCkpKTsKK2dib29sZWFuIHdl
YktpdE1lZGlhU3JjUXVlcnlXaXRoUGFyZW50KEdzdFBhZCogcGFkLCBHc3RPYmplY3QqIHBhcmVu
dCwgR3N0UXVlcnkqIHF1ZXJ5KQoreworICAgIFdlYktpdE1lZGlhU3JjKiBzb3VyY2UgPSBXRUJL
SVRfTUVESUFfU1JDKEdTVF9FTEVNRU5UKHBhcmVudCkpOworICAgIGdib29sZWFuIHJlc3VsdCA9
IEZBTFNFOwogCi0gICAgICAgIGlmICghZ3N0X2NhcHNfaXNfZXF1YWwoZ3N0X3NhbXBsZV9nZXRf
Y2FwcyhzYW1wbGUuZ2V0KCkpLCBzdHJlYW1pbmdNZW1iZXJzLT5wcmV2aW91c0NhcHMuZ2V0KCkp
KSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHNhbXBsZSBuZWVkcyBuZXcgY2FwcyAodHlwaWNhbGx5
IGJlY2F1c2Ugb2YgYSBxdWFsaXR5IGNoYW5nZSkuCi0gICAgICAgICAgICBnc3RfcGFkX3B1c2hf
ZXZlbnQoc3RyZWFtLT5wYWQuZ2V0KCksIGdzdF9ldmVudF9uZXdfY2Fwcyhnc3Rfc2FtcGxlX2dl
dF9jYXBzKHNhbXBsZS5nZXQoKSkpKTsKLSAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPnBy
ZXZpb3VzQ2FwcyA9IGdzdF9zYW1wbGVfZ2V0X2NhcHMoc2FtcGxlLmdldCgpKTsKLSAgICAgICAg
fQorICAgIHN3aXRjaCAoR1NUX1FVRVJZX1RZUEUocXVlcnkpKSB7CisgICAgY2FzZSBHU1RfUVVF
UllfRFVSQVRJT046IHsKKyAgICAgICAgR3N0Rm9ybWF0IGZvcm1hdDsKKyAgICAgICAgZ3N0X3F1
ZXJ5X3BhcnNlX2R1cmF0aW9uKHF1ZXJ5LCAmZm9ybWF0LCBudWxscHRyKTsKIAotICAgICAgICBp
ZiAoc3RyZWFtaW5nTWVtYmVycy0+ZG9lc05lZWRUb05vdGlmeU9uTG93V2F0ZXJMZXZlbCAmJiBz
dHJlYW1pbmdNZW1iZXJzLT5kdXJhdGlvbkVucXVldWVkKCkgPD0gU3RyZWFtOjpkdXJhdGlvbkVu
cXVldWVkTG93V2F0ZXJMZXZlbCkgewotICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+ZG9l
c05lZWRUb05vdGlmeU9uTG93V2F0ZXJMZXZlbCA9IGZhbHNlOwotICAgICAgICAgICAgd2ViS2l0
TWVkaWFTcmNTdHJlYW1Ob3RpZnlMb3dXYXRlckxldmVsKFJlZlB0cjxTdHJlYW0+KHN0cmVhbSkp
OworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNvdXJjZSwgImR1cmF0aW9uIHF1ZXJ5IGluIGZv
cm1hdCAlcyIsIGdzdF9mb3JtYXRfZ2V0X25hbWUoZm9ybWF0KSk7CisgICAgICAgIEdTVF9PQkpF
Q1RfTE9DSyhzb3VyY2UpOworICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgICAgICBjYXNl
IEdTVF9GT1JNQVRfVElNRTogeworICAgICAgICAgICAgaWYgKHNvdXJjZS0+cHJpdiAmJiBzb3Vy
Y2UtPnByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZSkgeworICAgICAgICAgICAgICAgIE1lZGlhVGlt
ZSBkdXJhdGlvbiA9IHNvdXJjZS0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlLT5kdXJhdGlvbk1l
ZGlhVGltZSgpOworICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbiA+IE1lZGlhVGltZTo6emVy
b1RpbWUoKSkgeworICAgICAgICAgICAgICAgICAgICBnc3RfcXVlcnlfc2V0X2R1cmF0aW9uKHF1
ZXJ5LCBmb3JtYXQsIFdlYkNvcmU6OnRvR3N0Q2xvY2tUaW1lKGR1cmF0aW9uKSk7CisgICAgICAg
ICAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc291cmNlLCAiQW5zd2VyaW5nOiBkdXJhdGlv
bj0lIiBHU1RfVElNRV9GT1JNQVQsIEdTVF9USU1FX0FSR1MoV2ViQ29yZTo6dG9Hc3RDbG9ja1Rp
bWUoZHVyYXRpb24pKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLQotICAgICAgICBHUmVmUHRyPEdzdEJ1ZmZlcj4gYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRf
YnVmZmVyKHNhbXBsZS5nZXQoKSk7Ci0gICAgICAgIHNhbXBsZS5jbGVhcigpOwotCi0gICAgICAg
IGlmICghc3RyZWFtaW5nTWVtYmVycy0+aGFzUHVzaGVkRmlyc3RCdWZmZXIpIHsKLSAgICAgICAg
ICAgIEdVbmlxdWVQdHI8Y2hhcj4gZmlsZU5hbWUgeyBnX3N0cmR1cF9wcmludGYoInBsYXliYWNr
LXBpcGVsaW5lLWJlZm9yZS1wbGF5YmFjay0lcyIsIHN0cmVhbS0+bmFtZS5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKSB9OwotICAgICAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRI
X1RTKEdTVF9CSU4oZmluZFBpcGVsaW5lKEdSZWZQdHI8R3N0RWxlbWVudD4oR1NUX0VMRU1FTlQo
c3RyZWFtLT5zb3VyY2UpKSkuZ2V0KCkpLAotICAgICAgICAgICAgICAgIEdTVF9ERUJVR19HUkFQ
SF9TSE9XX0FMTCwgZmlsZU5hbWUuZ2V0KCkpOwotICAgICAgICAgICAgc3RyZWFtaW5nTWVtYmVy
cy0+aGFzUHVzaGVkRmlyc3RCdWZmZXIgPSB0cnVlOworICAgICAgICBjYXNlIEdTVF9GT1JNQVRf
QllURVM6IHsKKyAgICAgICAgICAgIGlmIChzb3VyY2UtPnByaXYpIHsKKyAgICAgICAgICAgICAg
ICBnaW50NjQgZHVyYXRpb24gPSB3ZWJLaXRNZWRpYVNyY0dldFNpemUoc291cmNlKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZHVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5
X3NldF9kdXJhdGlvbihxdWVyeSwgZm9ybWF0LCBkdXJhdGlvbik7CisgICAgICAgICAgICAgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc291cmNlLCAic2l6ZTogJSIgR19HSU5UNjRfRk9STUFULCBk
dXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLQot
ICAgICAgICAvLyBQdXNoIHRoZSBidWZmZXIgd2l0aG91dCB0aGUgc3RyZWFtaW5nTWVtYmVycyBs
b2NrIHNvIHRoYXQgZmx1c2hlcyBjYW4gaGFwcGVuIHdoaWxlIGl0IHRyYXZlbHMgZG93bnN0cmVh
bS4KLSAgICAgICAgc3RyZWFtaW5nTWVtYmVycy5sb2NrSG9sZGVyKCkudW5sb2NrRWFybHkoKTsK
LQotICAgICAgICBBU1NFUlQoR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQoYnVmZmVyLmdldCgpKSk7
Ci0gICAgICAgIEdzdEZsb3dSZXR1cm4gcmV0ID0gZ3N0X3BhZF9wdXNoKHBhZCwgYnVmZmVyLmxl
YWtSZWYoKSk7Ci0gICAgICAgIGlmIChyZXQgIT0gR1NUX0ZMT1dfT0sgJiYgcmV0ICE9IEdTVF9G
TE9XX0ZMVVNISU5HKSB7Ci0gICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHBhZCwgIlB1c2hp
bmcgYnVmZmVyIHJldHVybmVkICVzIiwgZ3N0X2Zsb3dfZ2V0X25hbWUocmV0KSk7Ci0gICAgICAg
ICAgICBnc3RfcGFkX3BhdXNlX3Rhc2socGFkKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChHU1RfSVNfRVZFTlQob2JqZWN0
LmdldCgpKSkgewotICAgICAgICAvLyBFT1MgZXZlbnRzIGFuZCBvdGhlciBlbnF1ZXVlZCBldmVu
dHMgYXJlIGFsc28gc2VudCB1bmxvY2tlZCBzbyB0aGV5IGNhbiByZWFjdCB0byBmbHVzaGVzIGlm
IG5lY2Vzc2FyeS4KLSAgICAgICAgR1JlZlB0cjxHc3RFdmVudD4gZXZlbnQgPSBHUmVmUHRyPEdz
dEV2ZW50PihHU1RfRVZFTlQob2JqZWN0LmxlYWtSZWYoKSkpOwotCi0gICAgICAgIHN0cmVhbWlu
Z01lbWJlcnMubG9ja0hvbGRlcigpLnVubG9ja0Vhcmx5KCk7Ci0gICAgICAgIGJvb2wgZXZlbnRI
YW5kbGVkID0gZ3N0X3BhZF9wdXNoX2V2ZW50KHBhZCwgR1JlZlB0cjxHc3RFdmVudD4oZXZlbnQp
LmxlYWtSZWYoKSk7Ci0gICAgICAgIGlmICghZXZlbnRIYW5kbGVkKQotICAgICAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChwYWQsICJQdXNoZWQgZXZlbnQgd2FzIG5vdCBoYW5kbGVkOiAlIiBHU1Rf
UFRSX0ZPUk1BVCwgZXZlbnQuZ2V0KCkpOwotICAgIH0gZWxzZQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLX0KLQotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNFbnF1ZXVlT2JqZWN0
KFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVhbU5hbWUsIEdS
ZWZQdHI8R3N0TWluaU9iamVjdD4mJiBvYmplY3QpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKLSAgICBBU1NFUlQob2JqZWN0KTsKIAotICAgIFN0cmVhbSogc3RyZWFtID0gc291cmNl
LT5wcml2LT5zdHJlYW1CeU5hbWUoc3RyZWFtTmFtZSk7Ci0gICAgRGF0YU11dGV4PFN0cmVhbTo6
U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVtYmVycyhzdHJlYW0t
PnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOwotICAgIHN0cmVhbWluZ01lbWJlcnMtPnF1ZXVl
LmFwcGVuZChXVEZNb3ZlKG9iamVjdCkpOwotICAgIGlmIChzdHJlYW0tPnJlcG9ydGVkU3RhdHVz
LT5pc1JlYWR5Rm9yTW9yZVNhbXBsZXMgJiYgc3RyZWFtaW5nTWVtYmVycy0+ZHVyYXRpb25FbnF1
ZXVlZCgpID4gU3RyZWFtOjpkdXJhdGlvbkVucXVldWVkSGlnaFdhdGVyTGV2ZWwpIHsKLSAgICAg
ICAgc3RyZWFtLT5yZXBvcnRlZFN0YXR1cy0+aXNSZWFkeUZvck1vcmVTYW1wbGVzID0gZmFsc2U7
Ci0gICAgICAgIHN0cmVhbWluZ01lbWJlcnMtPmRvZXNOZWVkVG9Ob3RpZnlPbkxvd1dhdGVyTGV2
ZWwgPSB0cnVlOworICAgICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfUVVFUllfVVJJOgorICAgICAgICBpZiAoc291cmNl
KSB7CisgICAgICAgICAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKKyAgICAgICAgICAgIGlm
IChzb3VyY2UtPnByaXYpCisgICAgICAgICAgICAgICAgZ3N0X3F1ZXJ5X3NldF91cmkocXVlcnks
IHNvdXJjZS0+cHJpdi0+bG9jYXRpb24uZ2V0KCkpOworICAgICAgICAgICAgR1NUX09CSkVDVF9V
TkxPQ0soc291cmNlKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBUUlVFOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OiB7CisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiB0YXJnZXQg
PSBhZG9wdEdSZWYoZ3N0X2dob3N0X3BhZF9nZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQURfQ0FTVChw
YWQpKSk7CisgICAgICAgIC8vIEZvcndhcmQgdGhlIHF1ZXJ5IHRvIHRoZSBwcm94eSB0YXJnZXQg
cGFkLgorICAgICAgICBpZiAodGFyZ2V0KQorICAgICAgICAgICAgcmVzdWx0ID0gZ3N0X3BhZF9x
dWVyeSh0YXJnZXQuZ2V0KCksIHF1ZXJ5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIH0K
LSAgICBzdHJlYW1pbmdNZW1iZXJzLT5xdWV1ZUNoYW5nZWRPckZsdXNoZWRDb25kaXRpb24ubm90
aWZ5T25lKCk7Ci19Ci0KLXZvaWQgd2ViS2l0TWVkaWFTcmNFbnF1ZXVlU2FtcGxlKFdlYktpdE1l
ZGlhU3JjKiBzb3VyY2UsIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVhbU5hbWUsIEdSZWZQdHI8R3N0
U2FtcGxlPiYmIHNhbXBsZSkKLXsKLSAgICBBU1NFUlQoR1NUX0JVRkZFUl9QVFNfSVNfVkFMSUQo
Z3N0X3NhbXBsZV9nZXRfYnVmZmVyKHNhbXBsZS5nZXQoKSkpKTsKLSAgICB3ZWJLaXRNZWRpYVNy
Y0VucXVldWVPYmplY3Qoc291cmNlLCBzdHJlYW1OYW1lLCBhZG9wdEdSZWYoR1NUX01JTklfT0JK
RUNUKHNhbXBsZS5sZWFrUmVmKCkpKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdlYktpdE1lZGlhU3Jj
RW5xdWV1ZUV2ZW50KFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGNvbnN0IEF0b21TdHJpbmcmIHN0
cmVhbU5hbWUsIEdSZWZQdHI8R3N0RXZlbnQ+JiYgZXZlbnQpCi17Ci0gICAgd2ViS2l0TWVkaWFT
cmNFbnF1ZXVlT2JqZWN0KHNvdXJjZSwgc3RyZWFtTmFtZSwgYWRvcHRHUmVmKEdTVF9NSU5JX09C
SkVDVChldmVudC5sZWFrUmVmKCkpKSk7Ci19CiAKLXZvaWQgd2ViS2l0TWVkaWFTcmNFbmRPZlN0
cmVhbShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJlYW1OYW1l
KQotewotICAgIHdlYktpdE1lZGlhU3JjRW5xdWV1ZUV2ZW50KHNvdXJjZSwgc3RyZWFtTmFtZSwg
YWRvcHRHUmVmKGdzdF9ldmVudF9uZXdfZW9zKCkpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1ib29sIHdlYktpdE1lZGlhU3JjSXNSZWFkeUZvck1vcmVTYW1wbGVzKFdlYktpdE1lZGlhU3Jj
KiBzb3VyY2UsIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVhbU5hbWUpCit2b2lkIHdlYktpdE1lZGlh
U3JjVXBkYXRlUHJlc2VudGF0aW9uU2l6ZShHc3RDYXBzKiBjYXBzLCBTdHJlYW0qIHN0cmVhbSkK
IHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIFN0cmVhbSogc3RyZWFtID0gc291
cmNlLT5wcml2LT5zdHJlYW1CeU5hbWUoc3RyZWFtTmFtZSk7Ci0gICAgcmV0dXJuIHN0cmVhbS0+
cmVwb3J0ZWRTdGF0dXMtPmlzUmVhZHlGb3JNb3JlU2FtcGxlczsKLX0KKyAgICBHU1RfT0JKRUNU
X0xPQ0soc3RyZWFtLT5wYXJlbnQpOworICAgIGlmIChXZWJDb3JlOjpkb0NhcHNIYXZlVHlwZShj
YXBzLCBHU1RfVklERU9fQ0FQU19UWVBFX1BSRUZJWCkpIHsKKyAgICAgICAgT3B0aW9uYWw8V2Vi
Q29yZTo6RmxvYXRTaXplPiBzaXplID0gV2ViQ29yZTo6Z2V0VmlkZW9SZXNvbHV0aW9uRnJvbUNh
cHMoY2Fwcyk7CisgICAgICAgIGlmIChzaXplLmhhc1ZhbHVlKCkpCisgICAgICAgICAgICBzdHJl
YW0tPnByZXNlbnRhdGlvblNpemUgPSBzaXplLnZhbHVlKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHN0cmVhbS0+cHJlc2VudGF0aW9uU2l6ZSA9IFdlYkNvcmU6OkZsb2F0U2l6ZSgpOwor
ICAgIH0gZWxzZQorICAgICAgICBzdHJlYW0tPnByZXNlbnRhdGlvblNpemUgPSBXZWJDb3JlOjpG
bG9hdFNpemUoKTsKIAotdm9pZCB3ZWJLaXRNZWRpYVNyY05vdGlmeVdoZW5SZWFkeUZvck1vcmVT
YW1wbGVzKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVhbU5h
bWUsIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQqIHNvdXJjZUJ1ZmZlclByaXZh
dGUpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBTdHJlYW0qIHN0cmVhbSA9
IHNvdXJjZS0+cHJpdi0+c3RyZWFtQnlOYW1lKHN0cmVhbU5hbWUpOwotICAgIEFTU0VSVCghc3Ry
ZWFtLT5yZXBvcnRlZFN0YXR1cy0+aXNSZWFkeUZvck1vcmVTYW1wbGVzKTsKLSAgICBzdHJlYW0t
PnJlcG9ydGVkU3RhdHVzLT5zb3VyY2VCdWZmZXJQcml2YXRlVG9Ob3RpZnkgPSBzb3VyY2VCdWZm
ZXJQcml2YXRlOworICAgIGdzdF9jYXBzX3JlZihjYXBzKTsKKyAgICBzdHJlYW0tPmNhcHMgPSBh
ZG9wdEdSZWYoY2Fwcyk7CisgICAgR1NUX09CSkVDVF9VTkxPQ0soc3RyZWFtLT5wYXJlbnQpOwog
fQogCi1zdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0TWVkaWFTcmNDaGFuZ2VTdGF0
ZShHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQordm9pZCB3
ZWJLaXRNZWRpYVNyY0xpbmtTdHJlYW1Ub1NyY1BhZChHc3RQYWQqIHNvdXJjZVBhZCwgU3RyZWFt
KiBzdHJlYW0pCiB7Ci0gICAgV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSA9IFdFQktJVF9NRURJQV9T
UkMoZWxlbWVudCk7Ci0gICAgaWYgKHRyYW5zaXRpb24gPT0gR1NUX1NUQVRFX0NIQU5HRV9QQVVT
RURfVE9fUkVBRFkpIHsKLSAgICAgICAgd2hpbGUgKCFzb3VyY2UtPnByaXYtPnN0cmVhbXMuaXNF
bXB0eSgpKQotICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmNSZW1vdmVTdHJlYW0oc291cmNlLCBz
b3VyY2UtPnByaXYtPnN0cmVhbXMuYmVnaW4oKS0+a2V5KTsKLSAgICB9Ci0gICAgcmV0dXJuIEdT
VF9FTEVNRU5UX0NMQVNTKHdlYmtpdF9tZWRpYV9zcmNfcGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0
YXRlKGVsZW1lbnQsIHRyYW5zaXRpb24pOwotfQorICAgIHVuc2lnbmVkIHBhZElkID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KEdQT0lOVEVSX1RPX0lOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVD
VChzb3VyY2VQYWQpLCAicGFkSWQiKSkpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3RyZWFtLT5w
YXJlbnQsICJsaW5raW5nIHN0cmVhbSB0byBzcmMgcGFkIChpZDogJXUpIiwgcGFkSWQpOwogCi1z
dGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1N0cmVhbUZsdXNoU3RhcnQoY29uc3QgUmVmUHRyPFN0
cmVhbT4mIHN0cmVhbSkKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIHsKLSAg
ICAgICAgRGF0YU11dGV4PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIg
c3RyZWFtaW5nTWVtYmVycyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOworICAg
IEdVbmlxdWVQdHI8Z2NoYXI+IHBhZE5hbWUoZ19zdHJkdXBfcHJpbnRmKCJzcmNfJXUiLCBwYWRJ
ZCkpOworICAgIEdzdFBhZCogZ2hvc3RwYWQgPSBXZWJDb3JlOjp3ZWJraXRHc3RHaG9zdFBhZEZy
b21TdGF0aWNUZW1wbGF0ZSgmc3JjVGVtcGxhdGUsIHBhZE5hbWUuZ2V0KCksIHNvdXJjZVBhZCk7
CiAKLSAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZyA9IHRydWU7Ci0gICAgICAg
IHN0cmVhbWluZ01lbWJlcnMtPnF1ZXVlQ2hhbmdlZE9yRmx1c2hlZENvbmRpdGlvbi5ub3RpZnlP
bmUoKTsKLSAgICAgICAgc3RyZWFtaW5nTWVtYmVycy0+cGFkTGlua2VkT3JGbHVzaGVkQ29uZGl0
aW9uLm5vdGlmeU9uZSgpOwotICAgIH0KKyAgICBhdXRvIHByb3h5cGFkID0gYWRvcHRHUmVmKEdT
VF9QQUQoZ3N0X3Byb3h5X3BhZF9nZXRfaW50ZXJuYWwoR1NUX1BST1hZX1BBRChnaG9zdHBhZCkp
KSk7CisgICAgZ3N0X2Zsb3dfY29tYmluZXJfYWRkX3BhZChzdHJlYW0tPnBhcmVudC0+cHJpdi0+
Zmxvd0NvbWJpbmVyLmdldCgpLCBwcm94eXBhZC5nZXQoKSk7CisgICAgZ3N0X3BhZF9zZXRfY2hh
aW5fZnVuY3Rpb24ocHJveHlwYWQuZ2V0KCksIHN0YXRpY19jYXN0PEdzdFBhZENoYWluRnVuY3Rp
b24+KHdlYmtpdE1lZGlhU3JjQ2hhaW4pKTsKKyAgICBnc3RfcGFkX3NldF9xdWVyeV9mdW5jdGlv
bihnaG9zdHBhZCwgd2ViS2l0TWVkaWFTcmNRdWVyeVdpdGhQYXJlbnQpOwogCi0gICAgZ3N0X3Bh
ZF9wdXNoX2V2ZW50KHN0cmVhbS0+cGFkLmdldCgpLCBnc3RfZXZlbnRfbmV3X2ZsdXNoX3N0YXJ0
KCkpOworICAgIGdzdF9wYWRfc2V0X2FjdGl2ZShnaG9zdHBhZCwgVFJVRSk7CisgICAgZ3N0X2Vs
ZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChzdHJlYW0tPnBhcmVudCksIGdob3N0cGFkKTsKIH0K
IAotc3RhdGljIHZvaWQgd2ViS2l0TWVkaWFTcmNTdHJlYW1GbHVzaFN0b3AoY29uc3QgUmVmUHRy
PFN0cmVhbT4mIHN0cmVhbSwgYm9vbCByZXNldFRpbWUpCit2b2lkIHdlYktpdE1lZGlhU3JjTGlu
a1NvdXJjZVBhZChHc3RQYWQqIHNvdXJjZVBhZCwgR3N0Q2FwcyogY2FwcywgU3RyZWFtKiBzdHJl
YW0pCiB7Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoY2FwcyAmJiBz
dHJlYW0tPnBhcmVudCk7CisgICAgaWYgKCFjYXBzIHx8ICFzdHJlYW0tPnBhcmVudCkgeworICAg
ICAgICBHU1RfRVJST1IoIlVuYWJsZSB0byBsaW5rIHBhcnNlciIpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgLy8gQnkgdGFraW5nIHRoZSBzdHJlYW0gbG9jayB3ZSBhcmUgd2FpdGlu
ZyBmb3IgdGhlIHN0cmVhbWluZyB0aHJlYWQgdGFzayB0byBzdG9wIGlmIGl0IGhhZG4ndCB5ZXQu
Ci0gICAgR1NUX1BBRF9TVFJFQU1fTE9DSyhzdHJlYW0tPnBhZC5nZXQoKSk7Ci0gICAgewotICAg
ICAgICBEYXRhTXV0ZXg8U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBz
dHJlYW1pbmdNZW1iZXJzKHN0cmVhbS0+c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7CisgICAg
d2ViS2l0TWVkaWFTcmNVcGRhdGVQcmVzZW50YXRpb25TaXplKGNhcHMsIHN0cmVhbSk7CiAKLSAg
ICAgICAgc3RyZWFtaW5nTWVtYmVycy0+aXNGbHVzaGluZyA9IGZhbHNlOwotICAgICAgICBzdHJl
YW1pbmdNZW1iZXJzLT5kb2VzTmVlZFNlZ21lbnRFdmVudCA9IHRydWU7Ci0gICAgICAgIHN0cmVh
bWluZ01lbWJlcnMtPnF1ZXVlLmNsZWFyKCk7Ci0gICAgICAgIGlmIChzdHJlYW1pbmdNZW1iZXJz
LT5kb2VzTmVlZFRvTm90aWZ5T25Mb3dXYXRlckxldmVsKSB7Ci0gICAgICAgICAgICBzdHJlYW1p
bmdNZW1iZXJzLT5kb2VzTmVlZFRvTm90aWZ5T25Mb3dXYXRlckxldmVsID0gZmFsc2U7Ci0gICAg
ICAgICAgICB3ZWJLaXRNZWRpYVNyY1N0cmVhbU5vdGlmeUxvd1dhdGVyTGV2ZWwoc3RyZWFtKTsK
LSAgICAgICAgfQorICAgIC8vIEZJWE1FOiBkcm9wIHdlYktpdE1lZGlhU3JjTGlua1N0cmVhbVRv
U3JjUGFkKCkgYW5kIG1vdmUgaXRzIGNvZGUgaGVyZS4KKyAgICBpZiAoIWdzdF9wYWRfaXNfbGlu
a2VkKHNvdXJjZVBhZCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzdHJlYW0tPnBhcmVu
dCwgInBhZCBub3QgbGlua2VkIHlldCIpOworICAgICAgICB3ZWJLaXRNZWRpYVNyY0xpbmtTdHJl
YW1Ub1NyY1BhZChzb3VyY2VQYWQsIHN0cmVhbSk7CiAgICAgfQogCi0gICAgLy8gU2luY2UgRkxV
U0hfU1RPUCBpcyBhIHN5bmNocm9uaXplZCBldmVudCwgd2Ugc2VuZCBpdCB3aGlsZSB3ZSBzdGls
bCBob2xkIHRoZSBzdHJlYW0gbG9jayBvZiB0aGUgcGFkLgotICAgIGdzdF9wYWRfcHVzaF9ldmVu
dChzdHJlYW0tPnBhZC5nZXQoKSwgZ3N0X2V2ZW50X25ld19mbHVzaF9zdG9wKHJlc2V0VGltZSkp
OwotCi0gICAgZ3N0X3BhZF9zdGFydF90YXNrKHN0cmVhbS0+cGFkLmdldCgpLCB3ZWJLaXRNZWRp
YVNyY0xvb3AsIHN0cmVhbS0+cGFkLmdldCgpLCBudWxscHRyKTsKLSAgICBHU1RfUEFEX1NUUkVB
TV9VTkxPQ0soc3RyZWFtLT5wYWQuZ2V0KCkpOworICAgIHdlYktpdE1lZGlhU3JjQ2hlY2tBbGxU
cmFja3NDb25maWd1cmVkKHN0cmVhbS0+cGFyZW50KTsKIH0KIAotdm9pZCB3ZWJLaXRNZWRpYVNy
Y0ZsdXNoKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVhbU5h
bWUpCit2b2lkIHdlYktpdE1lZGlhU3JjRnJlZVN0cmVhbShXZWJLaXRNZWRpYVNyYyogc291cmNl
LCBTdHJlYW0qIHN0cmVhbSkKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIFN0
cmVhbSogc3RyZWFtID0gc291cmNlLT5wcml2LT5zdHJlYW1CeU5hbWUoc3RyZWFtTmFtZSk7Ci0K
LSAgICBib29sIGhhc1B1c2hlZEZpcnN0QnVmZmVyOwotICAgIHsKLSAgICAgICAgRGF0YU11dGV4
PFN0cmVhbTo6U3RyZWFtaW5nTWVtYmVycz46OkxvY2tlZFdyYXBwZXIgc3RyZWFtaW5nTWVtYmVy
cyhzdHJlYW0tPnN0cmVhbWluZ01lbWJlcnNEYXRhTXV0ZXgpOwotICAgICAgICBoYXNQdXNoZWRG
aXJzdEJ1ZmZlciA9IHN0cmVhbWluZ01lbWJlcnMtPmhhc1B1c2hlZEZpcnN0QnVmZmVyOworICAg
IGlmIChHU1RfSVNfQVBQX1NSQyhzdHJlYW0tPmFwcHNyYykpIHsKKyAgICAgICAgLy8gRG9uJ3Qg
dHJpZ2dlciBjYWxsYmFja3MgZnJvbSB0aGlzIGFwcHNyYyB0byBhdm9pZCB1c2luZyB0aGUgc3Ry
ZWFtIGFueW1vcmUuCisgICAgICAgIGdzdF9hcHBfc3JjX3NldF9jYWxsYmFja3MoR1NUX0FQUF9T
UkMoc3RyZWFtLT5hcHBzcmMpLCAmZGlzYWJsZWRBcHBzcmNDYWxsYmFja3MsIG51bGxwdHIsIG51
bGxwdHIpOworICAgICAgICBnc3RfYXBwX3NyY19lbmRfb2Zfc3RyZWFtKEdTVF9BUFBfU1JDKHN0
cmVhbS0+YXBwc3JjKSk7CiAgICAgfQogCi0gICAgaWYgKGhhc1B1c2hlZEZpcnN0QnVmZmVyKSB7
Ci0gICAgICAgIC8vIElmIG5vIGJ1ZmZlciBoYXMgYmVlbiBwdXNoZWQgdGhlcmUgaXMgbm8gbmVl
ZCBmb3IgZmx1c2guLi4gYW5kIGZsdXNoaW5nIGF0IHRoYXQgcG9pbnQgY291bGQKLSAgICAgICAg
Ly8gZXhwb3NlIGJ1Z3MgaW4gZG93bnN0cmVhbSB3aGljaCBtYXkgaGF2ZSBub3QgY29tcGxldGVs
eSBpbml0aWFsaXplZCAoZS5nLiBkZWNvZGViaW4zIG5vdAotICAgICAgICAvLyBoYXZpbmcgbGlu
a2VkIHRoZSBjaGFpbiBzbyBmYXIgYW5kIGZvcmdldHRpbmcgdG8gZG8gaXQgYWZ0ZXIgdGhlIGZs
dXNoKS4KLSAgICAgICAgd2ViS2l0TWVkaWFTcmNTdHJlYW1GbHVzaFN0YXJ0KHN0cmVhbSk7Cisg
ICAgR1NUX09CSkVDVF9MT0NLKHNvdXJjZSk7CisgICAgc3dpdGNoIChzdHJlYW0tPnR5cGUpIHsK
KyAgICBjYXNlIFdlYkNvcmU6OkF1ZGlvOgorICAgICAgICBzb3VyY2UtPnByaXYtPm51bWJlck9m
QXVkaW9TdHJlYW1zLS07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgV2ViQ29yZTo6VmlkZW86
CisgICAgICAgIHNvdXJjZS0+cHJpdi0+bnVtYmVyT2ZWaWRlb1N0cmVhbXMtLTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBXZWJDb3JlOjpUZXh0OgorICAgICAgICBzb3VyY2UtPnByaXYtPm51
bWJlck9mVGV4dFN0cmVhbXMtLTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgYnJlYWs7CiAgICAgfQorICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7CiAKLSAgICBH
c3RDbG9ja1RpbWUgcGlwZWxpbmVTdHJlYW1UaW1lOwotICAgIGdzdF9lbGVtZW50X3F1ZXJ5X3Bv
c2l0aW9uKGZpbmRQaXBlbGluZShHUmVmUHRyPEdzdEVsZW1lbnQ+KEdTVF9FTEVNRU5UKHNvdXJj
ZSkpKS5nZXQoKSwgR1NUX0ZPUk1BVF9USU1FLAotICAgICAgICByZWludGVycHJldF9jYXN0PGdp
bnQ2NCo+KCZwaXBlbGluZVN0cmVhbVRpbWUpKTsKLSAgICAvLyAtMSBpcyByZXR1cm5lZCB3aGVu
IHRoZSBwaXBlbGluZSBpcyBub3QgeWV0IHByZS1yb2xsZWQgKGUuZy4ganVzdCBhZnRlciBhIHNl
ZWspLiBJbiB0aGlzIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0bwotICAgIC8vIGFkanVzdCB0aGUgc2Vn
bWVudCB0aG91Z2gsIGFzIHJ1bm5pbmcgdGltZSBoYXMgbm90IGFkdmFuY2VkLgotICAgIGlmIChH
U1RfQ0xPQ0tfVElNRV9JU19WQUxJRChwaXBlbGluZVN0cmVhbVRpbWUpKSB7Ci0gICAgICAgIERh
dGFNdXRleDxTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM+OjpMb2NrZWRXcmFwcGVyIHN0cmVhbWlu
Z01lbWJlcnMoc3RyZWFtLT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11dGV4KTsKLSAgICAgICAgLy8g
V2UgbmVlZCB0byBpbmNyZWFzZSB0aGUgYmFzZSBieSB0aGUgcnVubmluZyB0aW1lIGFjY3VtdWxh
dGVkIGR1cmluZyB0aGUgcHJldmlvdXMgc2VnbWVudC4KKyAgICBpZiAoc3RyZWFtLT50eXBlICE9
IFdlYkNvcmU6OkludmFsaWQpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJGcmVlaW5nIHRyYWNrLXJl
bGF0ZWQgaW5mbyBvbiBzdHJlYW0gJXAiLCBzdHJlYW0pOworCisgICAgICAgIExvY2tIb2xkZXIg
bG9ja2VyKHNvdXJjZS0+cHJpdi0+c3RyZWFtTG9jayk7CisKKyAgICAgICAgaWYgKHN0cmVhbS0+
Y2FwcykKKyAgICAgICAgICAgIHN0cmVhbS0+Y2FwcyA9IG51bGxwdHI7CisKKyAgICAgICAgaWYg
KHN0cmVhbS0+YXVkaW9UcmFjaykKKyAgICAgICAgICAgIHN0cmVhbS0+YXVkaW9UcmFjayA9IG51
bGxwdHI7CisgICAgICAgIGlmIChzdHJlYW0tPnZpZGVvVHJhY2spCisgICAgICAgICAgICBzdHJl
YW0tPnZpZGVvVHJhY2sgPSBudWxscHRyOworCisgICAgICAgIGludCBzaWduYWwgPSAtMTsKKyAg
ICAgICAgc3dpdGNoIChzdHJlYW0tPnR5cGUpIHsKKyAgICAgICAgY2FzZSBXZWJDb3JlOjpBdWRp
bzoKKyAgICAgICAgICAgIHNpZ25hbCA9IFNJR05BTF9BVURJT19DSEFOR0VEOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgV2ViQ29yZTo6VmlkZW86CisgICAgICAgICAgICBzaWdu
YWwgPSBTSUdOQUxfVklERU9fQ0hBTkdFRDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFdlYkNvcmU6OlRleHQ6CisgICAgICAgICAgICBzaWduYWwgPSBTSUdOQUxfVEVYVF9DSEFO
R0VEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBzdHJlYW0tPnR5cGUgPSBXZWJDb3JlOjpJbnZhbGlk
OwogCi0gICAgICAgIEdzdENsb2NrVGltZSBwaXBlbGluZVJ1bm5pbmdUaW1lID0gZ3N0X3NlZ21l
bnRfdG9fcnVubmluZ190aW1lKCZzdHJlYW1pbmdNZW1iZXJzLT5zZWdtZW50LCBHU1RfRk9STUFU
X1RJTUUsIHBpcGVsaW5lU3RyZWFtVGltZSk7Ci0gICAgICAgIGFzc2VydChHU1RfQ0xPQ0tfVElN
RV9JU19WQUxJRChwaXBlbGluZVJ1bm5pbmdUaW1lKSk7Ci0gICAgICAgIHN0cmVhbWluZ01lbWJl
cnMtPnNlZ21lbnQuYmFzZSA9IHBpcGVsaW5lUnVubmluZ1RpbWU7CisgICAgICAgIGlmIChzaWdu
YWwgIT0gLTEpCisgICAgICAgICAgICBnX3NpZ25hbF9lbWl0KEdfT0JKRUNUKHNvdXJjZSksIHdl
YktpdE1lZGlhU3JjU2lnbmFsc1tzaWduYWxdLCAwLCBudWxscHRyKTsKIAotICAgICAgICBzdHJl
YW1pbmdNZW1iZXJzLT5zZWdtZW50LnN0YXJ0ID0gc3RyZWFtaW5nTWVtYmVycy0+c2VnbWVudC50
aW1lID0gc3RhdGljX2Nhc3Q8R3N0Q2xvY2tUaW1lPihwaXBlbGluZVN0cmVhbVRpbWUpOworICAg
ICAgICBzb3VyY2UtPnByaXYtPnN0cmVhbUNvbmRpdGlvbi5ub3RpZnlPbmUoKTsKICAgICB9CiAK
LSAgICBpZiAoaGFzUHVzaGVkRmlyc3RCdWZmZXIpCi0gICAgICAgIHdlYktpdE1lZGlhU3JjU3Ry
ZWFtRmx1c2hTdG9wKHN0cmVhbSwgZmFsc2UpOworICAgIEdTVF9ERUJVRygiUmVsZWFzaW5nIHN0
cmVhbTogJXAiLCBzdHJlYW0pOworICAgIGRlbGV0ZSBzdHJlYW07CiB9CiAKLXZvaWQgd2ViS2l0
TWVkaWFTcmNTZWVrKFdlYktpdE1lZGlhU3JjKiBzb3VyY2UsIHVpbnQ2NF90IHN0YXJ0VGltZSwg
ZG91YmxlIHJhdGUpCit2b2lkIHdlYktpdE1lZGlhU3JjQ2hlY2tBbGxUcmFja3NDb25maWd1cmVk
KFdlYktpdE1lZGlhU3JjKiB3ZWJLaXRNZWRpYVNyYykKIHsKLSAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOwotICAgIHNvdXJjZS0+cHJpdi0+c3RhcnRUaW1lID0gc3RhcnRUaW1lOwotICAgIHNv
dXJjZS0+cHJpdi0+cmF0ZSA9IHJhdGU7Ci0KLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBzb3VyY2Ut
PnByaXYtPnN0cmVhbXMpIHsKLSAgICAgICAgY29uc3QgUmVmUHRyPFN0cmVhbT4mIHN0cmVhbSA9
IHBhaXIudmFsdWU7Ci0gICAgICAgIGJvb2wgaGFzUHVzaGVkRmlyc3RCdWZmZXI7Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIERhdGFNdXRleDxTdHJlYW06OlN0cmVhbWluZ01lbWJlcnM+OjpMb2Nr
ZWRXcmFwcGVyIHN0cmVhbWluZ01lbWJlcnMoc3RyZWFtLT5zdHJlYW1pbmdNZW1iZXJzRGF0YU11
dGV4KTsKLSAgICAgICAgICAgIGhhc1B1c2hlZEZpcnN0QnVmZmVyID0gc3RyZWFtaW5nTWVtYmVy
cy0+aGFzUHVzaGVkRmlyc3RCdWZmZXI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaGFzUHVz
aGVkRmlyc3RCdWZmZXIpIHsKLSAgICAgICAgICAgIC8vIElmIG5vIGJ1ZmZlciBoYXMgYmVlbiBw
dXNoZWQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgZmx1c2guLi4gYW5kIGZsdXNoaW5nIGF0IHRoYXQg
cG9pbnQgY291bGQKLSAgICAgICAgICAgIC8vIGV4cG9zZSBidWdzIGluIGRvd25zdHJlYW0gd2hp
Y2ggbWF5IGhhdmUgbm90IGNvbXBsZXRlbHkgaW5pdGlhbGl6ZWQgKGUuZy4gZGVjb2RlYmluMyBu
b3QKLSAgICAgICAgICAgIC8vIGhhdmluZyBsaW5rZWQgdGhlIGNoYWluIHNvIGZhciBhbmQgZm9y
Z2V0dGluZyB0byBkbyBpdCBhZnRlciB0aGUgZmx1c2gpLgotICAgICAgICAgICAgd2ViS2l0TWVk
aWFTcmNTdHJlYW1GbHVzaFN0YXJ0KHN0cmVhbSk7Ci0gICAgICAgIH0KKyAgICBib29sIGFsbFRy
YWNrc0NvbmZpZ3VyZWQgPSBmYWxzZTsKIAotICAgICAgICB7Ci0gICAgICAgICAgICBEYXRhTXV0
ZXg8U3RyZWFtOjpTdHJlYW1pbmdNZW1iZXJzPjo6TG9ja2VkV3JhcHBlciBzdHJlYW1pbmdNZW1i
ZXJzKHN0cmVhbS0+c3RyZWFtaW5nTWVtYmVyc0RhdGFNdXRleCk7Ci0gICAgICAgICAgICBzdHJl
YW1pbmdNZW1iZXJzLT5zZWdtZW50LmJhc2UgPSAwOwotICAgICAgICAgICAgc3RyZWFtaW5nTWVt
YmVycy0+c2VnbWVudC5yYXRlID0gcmF0ZTsKLSAgICAgICAgICAgIHN0cmVhbWluZ01lbWJlcnMt
PnNlZ21lbnQuc3RhcnQgPSBzdHJlYW1pbmdNZW1iZXJzLT5zZWdtZW50LnRpbWUgPSBzdGFydFRp
bWU7CisgICAgR1NUX09CSkVDVF9MT0NLKHdlYktpdE1lZGlhU3JjKTsKKyAgICBpZiAoIXdlYktp
dE1lZGlhU3JjLT5wcml2LT5hbGxUcmFja3NDb25maWd1cmVkKSB7CisgICAgICAgIGFsbFRyYWNr
c0NvbmZpZ3VyZWQgPSB0cnVlOworICAgICAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogd2ViS2l0
TWVkaWFTcmMtPnByaXYtPnN0cmVhbXMpIHsKKyAgICAgICAgICAgIGlmIChzdHJlYW0tPnR5cGUg
PT0gV2ViQ29yZTo6SW52YWxpZCkgeworICAgICAgICAgICAgICAgIGFsbFRyYWNrc0NvbmZpZ3Vy
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQotCi0gICAgICAgIGlmIChoYXNQdXNoZWRGaXJzdEJ1ZmZlcikKLSAgICAgICAgICAgIHdl
YktpdE1lZGlhU3JjU3RyZWFtRmx1c2hTdG9wKHN0cmVhbSwgdHJ1ZSk7CisgICAgICAgIGlmIChh
bGxUcmFja3NDb25maWd1cmVkKQorICAgICAgICAgICAgd2ViS2l0TWVkaWFTcmMtPnByaXYtPmFs
bFRyYWNrc0NvbmZpZ3VyZWQgPSB0cnVlOwogICAgIH0KLX0KLQotc3RhdGljIGludCBjb3VudFN0
cmVhbXNPZlR5cGUoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSwgV2ViQ29yZTo6TWVkaWFTb3VyY2VT
dHJlYW1UeXBlR1N0cmVhbWVyIHR5cGUpCi17Ci0gICAgLy8gQmFycmluZyBwaXBlbGluZSBkdW1w
cyBzb21lb25lIG1heSBhZGQgZHVyaW5nIGRlYnVnZ2luZywgV2ViS2l0IHdpbGwgb25seSByZWFk
IHRoZXNlIHByb3BlcnRpZXMgKG4tdmlkZW8gZXRjLikgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCi0g
ICAgcmV0dXJuIHN0ZDo6Y291bnRfaWYoc291cmNlLT5wcml2LT5zdHJlYW1zLmJlZ2luKCksIHNv
dXJjZS0+cHJpdi0+c3RyZWFtcy5lbmQoKSwgW3R5cGVdKGF1dG8gaXRlbSkgewotICAgICAgICBy
ZXR1cm4gaXRlbS52YWx1ZS0+dHlwZSA9PSB0eXBlOwotICAgIH0pOwotfQotCi1zdGF0aWMgdm9p
ZCB3ZWJLaXRNZWRpYVNyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgdW5zaWduZWQgcHJv
cElkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKLXsKLSAgICBXZWJLaXRNZWRp
YVNyYyogc291cmNlID0gV0VCS0lUX01FRElBX1NSQyhvYmplY3QpOworICAgIEdTVF9PQkpFQ1Rf
VU5MT0NLKHdlYktpdE1lZGlhU3JjKTsKIAotICAgIHN3aXRjaCAocHJvcElkKSB7Ci0gICAgY2Fz
ZSBQUk9QX05fQVVESU86Ci0gICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgY291bnRTdHJl
YW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVy
OjpBdWRpbykpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBST1BfTl9WSURFTzoKLSAgICAg
ICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBjb3VudFN0cmVhbXNPZlR5cGUoc291cmNlLCBXZWJD
b3JlOjpNZWRpYVNvdXJjZVN0cmVhbVR5cGVHU3RyZWFtZXI6OlZpZGVvKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgUFJPUF9OX1RFWFQ6Ci0gICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1
ZSwgY291bnRTdHJlYW1zT2ZUeXBlKHNvdXJjZSwgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1U
eXBlR1N0cmVhbWVyOjpUZXh0KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJZCwgcHNw
ZWMpOworICAgIGlmIChhbGxUcmFja3NDb25maWd1cmVkKSB7CisgICAgICAgIEdTVF9ERUJVRygi
QWxsIHRyYWNrcyBhdHRhY2hlZC4gQ29tcGxldGluZyBhc3luYyBzdGF0ZSBjaGFuZ2Ugb3BlcmF0
aW9uLiIpOworICAgICAgICBnc3RfZWxlbWVudF9ub19tb3JlX3BhZHMoR1NUX0VMRU1FTlQod2Vi
S2l0TWVkaWFTcmMpKTsKKyAgICAgICAgd2ViS2l0TWVkaWFTcmNEb0FzeW5jRG9uZSh3ZWJLaXRN
ZWRpYVNyYyk7CiAgICAgfQogfQogCi0vLyBVUkkgaGFuZGxlciBpbnRlcmZhY2UuIEl0J3Mgb25s
eSBwdXJwb3NlIGlzIGZvciB0aGUgZWxlbWVudCB0byBiZSBpbnN0YW50aWF0ZWQgYnkgcGxheWJp
biBvbiAibWVkaWFzb3VyY2VibG9iOiIKLS8vIFVSSXMuIFRoZSBhY3R1YWwgVVJJIGRvZXMgbm90
IG1hdHRlci4KLXN0YXRpYyBHc3RVUklUeXBlIHdlYktpdE1lZGlhU3JjVXJpR2V0VHlwZShHVHlw
ZSkKKy8vIFVyaSBoYW5kbGVyIGludGVyZmFjZS4KK0dzdFVSSVR5cGUgd2ViS2l0TWVkaWFTcmNV
cmlHZXRUeXBlKEdUeXBlKQogewogICAgIHJldHVybiBHU1RfVVJJX1NSQzsKIH0KIAotc3RhdGlj
IGNvbnN0IGdjaGFyKiBjb25zdCogd2ViS2l0TWVkaWFTcmNHZXRQcm90b2NvbHMoR1R5cGUpCitj
b25zdCBnY2hhciogY29uc3QqIHdlYktpdE1lZGlhU3JjR2V0UHJvdG9jb2xzKEdUeXBlKQogewog
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcm90b2NvbHNbXSA9IHsibWVkaWFzb3VyY2VibG9iIiwg
bnVsbHB0ciB9OwogICAgIHJldHVybiBwcm90b2NvbHM7CiB9CiAKLXN0YXRpYyBnY2hhciogd2Vi
S2l0TWVkaWFTcmNHZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlcikKK2djaGFyKiB3ZWJLaXRN
ZWRpYVNyY0dldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyKQogewogICAgIFdlYktpdE1lZGlh
U3JjKiBzb3VyY2UgPSBXRUJLSVRfTUVESUFfU1JDKGhhbmRsZXIpOwogICAgIGdjaGFyKiByZXN1
bHQ7CiAKICAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKLSAgICByZXN1bHQgPSBnX3N0cmR1
cChzb3VyY2UtPnByaXYtPnVyaS5nZXQoKSk7CisgICAgcmVzdWx0ID0gZ19zdHJkdXAoc291cmNl
LT5wcml2LT5sb2NhdGlvbi5nZXQoKSk7CiAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4gd2ViS2l0TWVkaWFTcmNT
ZXRVcmkoR3N0VVJJSGFuZGxlciogaGFuZGxlciwgY29uc3QgZ2NoYXIqIHVyaSwgR0Vycm9yKiop
CitnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1NldFVyaShHc3RVUklIYW5kbGVyKiBoYW5kbGVyLCBj
b25zdCBnY2hhciogdXJpLCBHRXJyb3IqKikKIHsKICAgICBXZWJLaXRNZWRpYVNyYyogc291cmNl
ID0gV0VCS0lUX01FRElBX1NSQyhoYW5kbGVyKTsKIAogICAgIGlmIChHU1RfU1RBVEUoc291cmNl
KSA+PSBHU1RfU1RBVEVfUEFVU0VEKSB7CiAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc291cmNl
LCAiVVJJIGNhbiBvbmx5IGJlIHNldCBpbiBzdGF0ZXMgPCBQQVVTRUQiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgICAgR1NUX09CSkVD
VF9MT0NLKHNvdXJjZSk7Ci0gICAgc291cmNlLT5wcml2LT51cmkgPSBHVW5pcXVlUHRyPGNoYXI+
KGdfc3RyZHVwKHVyaSkpOworICAgIFdlYktpdE1lZGlhU3JjUHJpdmF0ZSogcHJpdiA9IHNvdXJj
ZS0+cHJpdjsKKyAgICBwcml2LT5sb2NhdGlvbiA9IG51bGxwdHI7CisgICAgaWYgKCF1cmkpIHsK
KyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7
CisgICAgfQorCisgICAgVVJMIHVybChVUkwoKSwgdXJpKTsKKworICAgIHByaXYtPmxvY2F0aW9u
ID0gR1VuaXF1ZVB0cjxnY2hhcj4oZ19zdHJkdXAodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
KTsKICAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOwogICAgIHJldHVybiBUUlVFOwogfQog
Ci1zdGF0aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KHZvaWQqIGdJZmFjZSwg
dm9pZCopCit2b2lkIHdlYktpdE1lZGlhU3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIgZ0lmYWNl
LCBncG9pbnRlcikKIHsKICAgICBHc3RVUklIYW5kbGVySW50ZXJmYWNlKiBpZmFjZSA9IChHc3RV
UklIYW5kbGVySW50ZXJmYWNlICopIGdJZmFjZTsKIApAQCAtODA2LDYgKzY1Miw4MyBAQCBzdGF0
aWMgdm9pZCB3ZWJLaXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KHZvaWQqIGdJZmFjZSwgdm9pZCop
CiAgICAgaWZhY2UtPnNldF91cmkgPSB3ZWJLaXRNZWRpYVNyY1NldFVyaTsKIH0KIAorc3RhdGlj
IHZvaWQgc2Vla05lZWRzRGF0YU1haW5UaHJlYWQoV2ViS2l0TWVkaWFTcmMqIHNvdXJjZSkKK3sK
KyAgICBHU1RfREVCVUcoIkJ1ZmZlcmluZyBuZWVkZWQgYmVmb3JlIHNlZWsiKTsKKworICAgIEFT
U0VSVChXVEY6OmlzTWFpblRocmVhZCgpKTsKKworICAgIEdTVF9PQkpFQ1RfTE9DSyhzb3VyY2Up
OworICAgIE1lZGlhVGltZSBzZWVrVGltZSA9IHNvdXJjZS0+cHJpdi0+c2Vla1RpbWU7CisgICAg
V2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFKiBtZWRpYVBsYXllclByaXZh
dGUgPSBzb3VyY2UtPnByaXYtPm1lZGlhUGxheWVyUHJpdmF0ZTsKKworICAgIGlmICghbWVkaWFQ
bGF5ZXJQcml2YXRlKSB7CisgICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKFN0cmVhbSogc3RyZWFtIDogc291cmNlLT5w
cml2LT5zdHJlYW1zKSB7CisgICAgICAgIGlmIChzdHJlYW0tPnR5cGUgIT0gV2ViQ29yZTo6SW52
YWxpZCkKKyAgICAgICAgICAgIHN0cmVhbS0+c291cmNlQnVmZmVyLT5zZXRSZWFkeUZvck1vcmVT
YW1wbGVzKHRydWUpOworICAgIH0KKyAgICBHU1RfT0JKRUNUX1VOTE9DSyhzb3VyY2UpOworICAg
IG1lZGlhUGxheWVyUHJpdmF0ZS0+bm90aWZ5U2Vla05lZWRzRGF0YUZvclRpbWUoc2Vla1RpbWUp
OworfQorCitzdGF0aWMgdm9pZCBub3RpZnlSZWFkeUZvck1vcmVTYW1wbGVzTWFpblRocmVhZChX
ZWJLaXRNZWRpYVNyYyogc291cmNlLCBTdHJlYW0qIGFwcHNyY1N0cmVhbSkKK3sKKyAgICBHU1Rf
T0JKRUNUX0xPQ0soc291cmNlKTsKKworICAgIGF1dG8gaXQgPSBzdGQ6OmZpbmQoc291cmNlLT5w
cml2LT5zdHJlYW1zLmJlZ2luKCksIHNvdXJjZS0+cHJpdi0+c3RyZWFtcy5lbmQoKSwgYXBwc3Jj
U3RyZWFtKTsKKyAgICBpZiAoaXQgPT0gc291cmNlLT5wcml2LT5zdHJlYW1zLmVuZCgpKSB7Cisg
ICAgICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqIG1lZGlhUGxh
eWVyUHJpdmF0ZSA9IHNvdXJjZS0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlOworICAgIGlmICht
ZWRpYVBsYXllclByaXZhdGUgJiYgIW1lZGlhUGxheWVyUHJpdmF0ZS0+c2Vla2luZygpKQorICAg
ICAgICBhcHBzcmNTdHJlYW0tPnNvdXJjZUJ1ZmZlci0+bm90aWZ5UmVhZHlGb3JNb3JlU2FtcGxl
cygpOworCisgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNlKTsKK30KKwordm9pZCB3ZWJLaXRN
ZWRpYVNyY1NldE1lZGlhUGxheWVyUHJpdmF0ZShXZWJLaXRNZWRpYVNyYyogc291cmNlLCBXZWJD
b3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0UqIG1lZGlhUGxheWVyUHJpdmF0ZSkK
K3sKKyAgICBHU1RfT0JKRUNUX0xPQ0soc291cmNlKTsKKworICAgIC8vIFNldCB0byBudWxscHRy
IG9uIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciBkZXN0cnVjdGlvbiwgbmV2ZXIgYSBkYW5n
bGluZyBwb2ludGVyLgorICAgIHNvdXJjZS0+cHJpdi0+bWVkaWFQbGF5ZXJQcml2YXRlID0gbWVk
aWFQbGF5ZXJQcml2YXRlOworICAgIEdTVF9PQkpFQ1RfVU5MT0NLKHNvdXJjZSk7Cit9CisKK3Zv
aWQgd2ViS2l0TWVkaWFTcmNTZXRSZWFkeUZvclNhbXBsZXMoV2ViS2l0TWVkaWFTcmMqIHNvdXJj
ZSwgYm9vbCBpc1JlYWR5KQoreworICAgIGlmIChzb3VyY2UpIHsKKyAgICAgICAgR1NUX09CSkVD
VF9MT0NLKHNvdXJjZSk7CisgICAgICAgIGZvciAoU3RyZWFtKiBzdHJlYW0gOiBzb3VyY2UtPnBy
aXYtPnN0cmVhbXMpCisgICAgICAgICAgICBzdHJlYW0tPnNvdXJjZUJ1ZmZlci0+c2V0UmVhZHlG
b3JNb3JlU2FtcGxlcyhpc1JlYWR5KTsKKyAgICAgICAgR1NUX09CSkVDVF9VTkxPQ0soc291cmNl
KTsKKyAgICB9Cit9CisKK3ZvaWQgd2ViS2l0TWVkaWFTcmNQcmVwYXJlU2VlayhXZWJLaXRNZWRp
YVNyYyogc291cmNlLCBjb25zdCBNZWRpYVRpbWUmIHRpbWUpCit7CisgICAgR1NUX09CSkVDVF9M
T0NLKHNvdXJjZSk7CisgICAgc291cmNlLT5wcml2LT5zZWVrVGltZSA9IHRpbWU7CisgICAgc291
cmNlLT5wcml2LT5hcHBzcmNTZWVrRGF0YUNvdW50ID0gMDsKKyAgICBzb3VyY2UtPnByaXYtPmFw
cHNyY05lZWREYXRhQ291bnQgPSAwOworCisgICAgZm9yIChTdHJlYW0qIHN0cmVhbSA6IHNvdXJj
ZS0+cHJpdi0+c3RyZWFtcykgeworICAgICAgICBzdHJlYW0tPmFwcHNyY05lZWREYXRhRmxhZyA9
IGZhbHNlOworICAgICAgICAvLyBEb24ndCBhbGxvdyBzYW1wbGVzIGF3YXkgZnJvbSB0aGUgc2Vl
a1RpbWUgdG8gYmUgZW5xdWV1ZWQuCisgICAgICAgIHN0cmVhbS0+bGFzdEVucXVldWVkVGltZSA9
IHRpbWU7CisgICAgfQorCisgICAgLy8gVGhlIHBlbmRpbmcgYWN0aW9uIHdpbGwgYmUgcGVyZm9y
bWVkIGluIGVuYWJsZWRBcHBzcmNTZWVrRGF0YSgpLgorICAgIHNvdXJjZS0+cHJpdi0+YXBwc3Jj
U2Vla0RhdGFOZXh0QWN0aW9uID0gTWVkaWFTb3VyY2VTZWVrVG9UaW1lOworICAgIEdTVF9PQkpF
Q1RfVU5MT0NLKHNvdXJjZSk7Cit9CisKIG5hbWVzcGFjZSBXVEYgewogdGVtcGxhdGUgPD4gR1Jl
ZlB0cjxXZWJLaXRNZWRpYVNyYz4gYWRvcHRHUmVmKFdlYktpdE1lZGlhU3JjKiBwdHIpCiB7CkBA
IC04MjYsNyArNzQ5LDcgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFT
cmM+KFdlYktpdE1lZGlhU3JjKiBwdHIpCiAgICAgaWYgKHB0cikKICAgICAgICAgZ3N0X29iamVj
dF91bnJlZihwdHIpOwogfQotfSAvLyBuYW1lc3BhY2UgV1RGCit9OwogCiAjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUikKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNvdXJjZUdT
dHJlYW1lci5oCmluZGV4IGUwY2YxMWNkOThlZDFlYmVjYTk2ZjdiYzA4YWQ2NjYxNTU5MjI0ZWEu
LjZjNDVlYjY4NzNlY2JkOTUyZTU3MDk3OWZmOWMxNGY5N2VlODgzZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFT
b3VyY2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvbXNlL1dlYktpdE1lZGlhU291cmNlR1N0cmVhbWVyLmgKQEAgLTMsOCArMyw4IEBA
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDEzIENvbGxhYm9yYSBMdGQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDEzIE9yYW5nZQogICogIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBTZWJhc3RpYW4gRHLD
tmdlIDxzZWJhc3RpYW5AY2VudHJpY3VsYXIuY29tPgotICogIENvcHlyaWdodCAoQykgMjAxNSwg
MjAxNiwgMjAxOCwgMjAxOSBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgotICogIENvcHlyaWdodCAo
QykgMjAxNSwgMjAxNiwgMjAxOCwgMjAxOSBJZ2FsaWEsIFMuTAorICogIENvcHlyaWdodCAoQykg
MjAxNSwgMjAxNiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICogIENvcHlyaWdodCAoQykgMjAx
NSwgMjAxNiBJZ2FsaWEsIFMuTAogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzksNyArMzksNyBA
QCBjbGFzcyBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXJNU0U7CiAKIGVudW0gTWVkaWFTb3Vy
Y2VTdHJlYW1UeXBlR1N0cmVhbWVyIHsgSW52YWxpZCwgVW5rbm93biwgQXVkaW8sIFZpZGVvLCBU
ZXh0IH07CiAKLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30KIAogR19CRUdJTl9ERUNMUwogCkBA
IC00OSwzOCArNDksMzIgQEAgR19CRUdJTl9ERUNMUwogI2RlZmluZSBXRUJLSVRfSVNfTUVESUFf
U1JDKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmopLCBXRUJL
SVRfVFlQRV9NRURJQV9TUkMpKQogI2RlZmluZSBXRUJLSVRfSVNfTUVESUFfU1JDX0NMQVNTKGts
YXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUgKChrbGFzcyksIFdFQktJVF9UWVBFX01FRElB
X1NSQykpCiAKLXN0cnVjdCBXZWJLaXRNZWRpYVNyY1ByaXZhdGU7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0TWVkaWFTcmMgICAgICAgIFdlYktpdE1lZGlhU3JjOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdE1lZGlhU3JjQ2xhc3MgICBXZWJLaXRNZWRpYVNyY0NsYXNzOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdE1lZGlhU3JjUHJpdmF0ZSBXZWJLaXRNZWRpYVNyY1ByaXZhdGU7CiAKLXN0cnVjdCBX
ZWJLaXRNZWRpYVNyYyB7Ci0gICAgR3N0RWxlbWVudCBwYXJlbnQ7CitzdHJ1Y3QgX1dlYktpdE1l
ZGlhU3JjIHsKKyAgICBHc3RCaW4gcGFyZW50OwogCiAgICAgV2ViS2l0TWVkaWFTcmNQcml2YXRl
ICpwcml2OwogfTsKIAotc3RydWN0IFdlYktpdE1lZGlhU3JjQ2xhc3MgewotICAgIEdzdEVsZW1l
bnRDbGFzcyBwYXJlbnRDbGFzczsKK3N0cnVjdCBfV2ViS2l0TWVkaWFTcmNDbGFzcyB7CisgICAg
R3N0QmluQ2xhc3MgcGFyZW50Q2xhc3M7CisKKyAgICAvLyBOb3RpZnkgYXBwIHRoYXQgbnVtYmVy
IG9mIGF1ZGlvL3ZpZGVvL3RleHQgc3RyZWFtcyBjaGFuZ2VkLgorICAgIHZvaWQgKCp2aWRlb0No
YW5nZWQpKFdlYktpdE1lZGlhU3JjKik7CisgICAgdm9pZCAoKmF1ZGlvQ2hhbmdlZCkoV2ViS2l0
TWVkaWFTcmMqKTsKKyAgICB2b2lkICgqdGV4dENoYW5nZWQpKFdlYktpdE1lZGlhU3JjKik7CiB9
OwogCiBHVHlwZSB3ZWJraXRfbWVkaWFfc3JjX2dldF90eXBlKHZvaWQpOwogCi12b2lkIHdlYktp
dE1lZGlhU3JjQWRkU3RyZWFtKFdlYktpdE1lZGlhU3JjKiwgY29uc3QgQXRvbVN0cmluZyYgbmFt
ZSwgV2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyLCBHUmVmUHRyPEdzdENh
cHM+JiYgaW5pdGlhbENhcHMpOwotdm9pZCB3ZWJLaXRNZWRpYVNyY1JlbW92ZVN0cmVhbShXZWJL
aXRNZWRpYVNyYyosIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpOwotCi12b2lkIHdlYktpdE1lZGlh
U3JjRW5xdWV1ZVNhbXBsZShXZWJLaXRNZWRpYVNyYyosIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVh
bU5hbWUsIEdSZWZQdHI8R3N0U2FtcGxlPiYmKTsKLXZvaWQgd2ViS2l0TWVkaWFTcmNFbmRPZlN0
cmVhbShXZWJLaXRNZWRpYVNyYyosIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVhbU5hbWUpOwordm9p
ZCB3ZWJLaXRNZWRpYVNyY1NldE1lZGlhUGxheWVyUHJpdmF0ZShXZWJLaXRNZWRpYVNyYyosIFdl
YkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lck1TRSopOwogCi1ib29sIHdlYktpdE1l
ZGlhU3JjSXNSZWFkeUZvck1vcmVTYW1wbGVzKFdlYktpdE1lZGlhU3JjKiwgY29uc3QgQXRvbVN0
cmluZyYgc3RyZWFtTmFtZSk7Ci12b2lkIHdlYktpdE1lZGlhU3JjTm90aWZ5V2hlblJlYWR5Rm9y
TW9yZVNhbXBsZXMoV2ViS2l0TWVkaWFTcmMqLCBjb25zdCBBdG9tU3RyaW5nJiBzdHJlYW1OYW1l
LCBXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50Kik7Ci0KLXZvaWQgd2ViS2l0TWVk
aWFTcmNGbHVzaChXZWJLaXRNZWRpYVNyYyosIGNvbnN0IEF0b21TdHJpbmcmIHN0cmVhbU5hbWUp
Owotdm9pZCB3ZWJLaXRNZWRpYVNyY1NlZWsoV2ViS2l0TWVkaWFTcmMqLCBndWludDY0IHN0YXJ0
VGltZSwgZG91YmxlIHJhdGUpOwordm9pZCB3ZWJLaXRNZWRpYVNyY1ByZXBhcmVTZWVrKFdlYktp
dE1lZGlhU3JjKiwgY29uc3QgTWVkaWFUaW1lJik7Cit2b2lkIHdlYktpdE1lZGlhU3JjU2V0UmVh
ZHlGb3JTYW1wbGVzKFdlYktpdE1lZGlhU3JjKiwgYm9vbCk7CiAKIEdfRU5EX0RFQ0xTCiAKLW5h
bWVzcGFjZSBXVEYgewotdGVtcGxhdGU8PiBHUmVmUHRyPFdlYktpdE1lZGlhU3JjPiBhZG9wdEdS
ZWYoV2ViS2l0TWVkaWFTcmMqIHB0cik7Ci10ZW1wbGF0ZTw+IFdlYktpdE1lZGlhU3JjKiByZWZH
UHRyPFdlYktpdE1lZGlhU3JjPihXZWJLaXRNZWRpYVNyYyogcHRyKTsKLXRlbXBsYXRlPD4gdm9p
ZCBkZXJlZkdQdHI8V2ViS2l0TWVkaWFTcmM+KFdlYktpdE1lZGlhU3JjKiBwdHIpOwotfSAvLyBu
YW1lc3BhY2UgV1RGCi0KICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZS9XZWJLaXRNZWRpYVNv
dXJjZUdTdHJlYW1lclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UvV2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDEzZGQzZmY2YWIxNzVjMGFiYTc2ODgzMzZjMjFhNzIxMDU5ZDNiOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9tc2Uv
V2ViS2l0TWVkaWFTb3VyY2VHU3RyZWFtZXJQcml2YXRlLmgKQEAgLTAsMCArMSwxNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqIENvcHly
aWdodCAoQykgMjAxNiBJZ2FsaWEgUy5MCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhaW50IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShHU1RSRUFNRVIpICYmIEVOQUJMRShNRURJQV9TT1VSQ0UpCisKKyNpbmNsdWRlICJB
dWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJNYWluVGhyZWFkTm90aWZpZXIuaCIKKyNpbmNsdWRlICJTb3VyY2VC
dWZmZXJQcml2YXRlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCisjaW5j
bHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyTVNFOwor
Cit9OworCit2b2lkIHdlYktpdE1lZGlhU3JjVXJpSGFuZGxlckluaXQoZ3BvaW50ZXIsIGdwb2lu
dGVyKTsKKworI2RlZmluZSBXRUJLSVRfTUVESUFfU1JDX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfTUVESUFfU1JDLCBXZWJL
aXRNZWRpYVNyY1ByaXZhdGUpKQorCit0eXBlZGVmIHN0cnVjdCBfU3RyZWFtIFN0cmVhbTsKKwor
c3RydWN0IF9TdHJlYW0geworICAgIC8vIEZpZWxkcyBmaWxsZWQgd2hlbiB0aGUgU3RyZWFtIGlz
IGNyZWF0ZWQuCisgICAgV2ViS2l0TWVkaWFTcmMqIHBhcmVudDsKKworICAgIC8vIEFwcFNyYy4g
TmV2ZXIgbW9kaWZpZWQgYWZ0ZXIgZmlyc3QgYXNzaWdubWVudC4KKyAgICBHc3RFbGVtZW50KiBh
cHBzcmM7CisKKyAgICAvLyBOZXZlciBtb2RpZmllZCBhZnRlciBmaXJzdCBhc3NpZ25tZW50Lgor
ICAgIFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVHU3RyZWFtZXIqIHNvdXJjZUJ1ZmZlcjsK
KworICAgIC8vIEZpZWxkcyBmaWxsZWQgd2hlbiB0aGUgdHJhY2sgaXMgYXR0YWNoZWQuCisgICAg
V2ViQ29yZTo6TWVkaWFTb3VyY2VTdHJlYW1UeXBlR1N0cmVhbWVyIHR5cGU7CisgICAgR1JlZlB0
cjxHc3RDYXBzPiBjYXBzOworCisgICAgLy8gT25seSBhdWRpbywgdmlkZW8gb3Igbm90aGluZyBh
dCBhIGdpdmVuIHRpbWUuCisgICAgUmVmUHRyPFdlYkNvcmU6OkF1ZGlvVHJhY2tQcml2YXRlR1N0
cmVhbWVyPiBhdWRpb1RyYWNrOworICAgIFJlZlB0cjxXZWJDb3JlOjpWaWRlb1RyYWNrUHJpdmF0
ZUdTdHJlYW1lcj4gdmlkZW9UcmFjazsKKyAgICBXZWJDb3JlOjpGbG9hdFNpemUgcHJlc2VudGF0
aW9uU2l6ZTsKKworICAgIC8vIFRoaXMgaGVscHMgV2ViS2l0TWVkaWFTcmNQcml2YXRlLmFwcHNy
Y05lZWREYXRhQ291bnQsIGVuc3VyaW5nIHRoYXQgbmVlZERhdGFzIGFyZQorICAgIC8vIGNvdW50
ZWQgb25seSBvbmNlIHBlciBlYWNoIGFwcHNyYy4KKyAgICBib29sIGFwcHNyY05lZWREYXRhRmxh
ZzsKKworICAgIC8vIFVzZWQgdG8gZW5mb3JjZSBjb250aW51aXR5IGluIHRoZSBhcHBlbmRlZCBk
YXRhIGFuZCBhdm9pZCBicmVha2luZyB0aGUgZGVjb2Rlci4KKyAgICAvLyBPbmx5IHVzZWQgZnJv
bSB0aGUgbWFpbiB0aHJlYWQuCisgICAgTWVkaWFUaW1lIGxhc3RFbnF1ZXVlZFRpbWU7Cit9Owor
CitlbnVtIHsKKyAgICBQUk9QXzAsCisgICAgUFJPUF9MT0NBVElPTiwKKyAgICBQUk9QX05fQVVE
SU8sCisgICAgUFJPUF9OX1ZJREVPLAorICAgIFBST1BfTl9URVhULAorICAgIFBST1BfTEFTVAor
fTsKKworZW51bSB7CisgICAgU0lHTkFMX1ZJREVPX0NIQU5HRUQsCisgICAgU0lHTkFMX0FVRElP
X0NIQU5HRUQsCisgICAgU0lHTkFMX1RFWFRfQ0hBTkdFRCwKKyAgICBMQVNUX1NJR05BTAorfTsK
KworZW51bSBPblNlZWtEYXRhQWN0aW9uIHsKKyAgICBOb3RoaW5nLAorICAgIE1lZGlhU291cmNl
U2Vla1RvVGltZQorfTsKKworZW51bSBXZWJLaXRNZWRpYVNyY01haW5UaHJlYWROb3RpZmljYXRp
b24geworICAgIFJlYWR5Rm9yTW9yZVNhbXBsZXMgPSAxIDw8IDAsCisgICAgU2Vla05lZWRzRGF0
YSA9IDEgPDwgMQorfTsKKworc3RydWN0IF9XZWJLaXRNZWRpYVNyY1ByaXZhdGUgeworICAgIC8v
IFVzZWQgdG8gY29vcmRpbmF0ZSB0aGUgcmVsZWFzZSBvZiBTdHJlYW0gdHJhY2sgaW5mby4KKyAg
ICBMb2NrIHN0cmVhbUxvY2s7CisgICAgQ29uZGl0aW9uIHN0cmVhbUNvbmRpdGlvbjsKKworICAg
IC8vIFN0cmVhbXMgYXJlIG9ubHkgYWRkZWQvcmVtb3ZlZCBpbiB0aGUgbWFpbiB0aHJlYWQuCisg
ICAgVmVjdG9yPFN0cmVhbSo+IHN0cmVhbXM7CisKKyAgICBHVW5pcXVlUHRyPGdjaGFyPiBsb2Nh
dGlvbjsKKyAgICBpbnQgbnVtYmVyT2ZBdWRpb1N0cmVhbXM7CisgICAgaW50IG51bWJlck9mVmlk
ZW9TdHJlYW1zOworICAgIGludCBudW1iZXJPZlRleHRTdHJlYW1zOworICAgIGJvb2wgYXN5bmNT
dGFydDsKKyAgICBib29sIGFsbFRyYWNrc0NvbmZpZ3VyZWQ7CisgICAgdW5zaWduZWQgbnVtYmVy
T2ZQYWRzOworCisgICAgTWVkaWFUaW1lIHNlZWtUaW1lOworCisgICAgLy8gT24gc2Vlaywgd2Ug
d2FpdCBmb3IgYWxsIHRoZSBzZWVrRGF0YXMsIHRoZW4gZm9yIGFsbCB0aGUgbmVlZERhdGFzLCBh
bmQgdGhlbiBydW4gdGhlIG5leHRBY3Rpb24uCisgICAgT25TZWVrRGF0YUFjdGlvbiBhcHBzcmNT
ZWVrRGF0YU5leHRBY3Rpb247CisgICAgaW50IGFwcHNyY1NlZWtEYXRhQ291bnQ7CisgICAgaW50
IGFwcHNyY05lZWREYXRhQ291bnQ7CisKKyAgICBXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXJNU0UqIG1lZGlhUGxheWVyUHJpdmF0ZTsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpN
YWluVGhyZWFkTm90aWZpZXI8V2ViS2l0TWVkaWFTcmNNYWluVGhyZWFkTm90aWZpY2F0aW9uPj4g
bm90aWZpZXI7CisgICAgR1VuaXF1ZVB0cjxHc3RGbG93Q29tYmluZXI+IGZsb3dDb21iaW5lcjsK
K307CisKK2V4dGVybiBndWludCB3ZWJLaXRNZWRpYVNyY1NpZ25hbHNbTEFTVF9TSUdOQUxdOwor
ZXh0ZXJuIEdzdEFwcFNyY0NhbGxiYWNrcyBlbmFibGVkQXBwc3JjQ2FsbGJhY2tzOworZXh0ZXJu
IEdzdEFwcFNyY0NhbGxiYWNrcyBkaXNhYmxlZEFwcHNyY0NhbGxiYWNrczsKKwordm9pZCB3ZWJL
aXRNZWRpYVNyY1VyaUhhbmRsZXJJbml0KGdwb2ludGVyIGdJZmFjZSwgZ3BvaW50ZXIgaWZhY2VE
YXRhKTsKK3ZvaWQgd2ViS2l0TWVkaWFTcmNGaW5hbGl6ZShHT2JqZWN0Kik7Cit2b2lkIHdlYktp
dE1lZGlhU3JjU2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdW
YWx1ZSosIEdQYXJhbVNwZWMqKTsKK3ZvaWQgd2ViS2l0TWVkaWFTcmNHZXRQcm9wZXJ0eShHT2Jq
ZWN0KiwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOwordm9pZCB3ZWJL
aXRNZWRpYVNyY0RvQXN5bmNTdGFydChXZWJLaXRNZWRpYVNyYyopOwordm9pZCB3ZWJLaXRNZWRp
YVNyY0RvQXN5bmNEb25lKFdlYktpdE1lZGlhU3JjKik7CitHc3RTdGF0ZUNoYW5nZVJldHVybiB3
ZWJLaXRNZWRpYVNyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSk7Citn
aW50NjQgd2ViS2l0TWVkaWFTcmNHZXRTaXplKFdlYktpdE1lZGlhU3JjKik7CitnYm9vbGVhbiB3
ZWJLaXRNZWRpYVNyY1F1ZXJ5V2l0aFBhcmVudChHc3RQYWQqLCBHc3RPYmplY3QqLCBHc3RRdWVy
eSopOwordm9pZCB3ZWJLaXRNZWRpYVNyY1VwZGF0ZVByZXNlbnRhdGlvblNpemUoR3N0Q2Fwcyos
IFN0cmVhbSopOwordm9pZCB3ZWJLaXRNZWRpYVNyY0xpbmtTdHJlYW1Ub1NyY1BhZChHc3RQYWQq
LCBTdHJlYW0qKTsKK3ZvaWQgd2ViS2l0TWVkaWFTcmNMaW5rU291cmNlUGFkKEdzdFBhZCosIEdz
dENhcHMqLCBTdHJlYW0qKTsKK3ZvaWQgd2ViS2l0TWVkaWFTcmNGcmVlU3RyZWFtKFdlYktpdE1l
ZGlhU3JjKiwgU3RyZWFtKik7Cit2b2lkIHdlYktpdE1lZGlhU3JjQ2hlY2tBbGxUcmFja3NDb25m
aWd1cmVkKFdlYktpdE1lZGlhU3JjKik7CitHc3RVUklUeXBlIHdlYktpdE1lZGlhU3JjVXJpR2V0
VHlwZShHVHlwZSk7Citjb25zdCBnY2hhciogY29uc3QqIHdlYktpdE1lZGlhU3JjR2V0UHJvdG9j
b2xzKEdUeXBlKTsKK2djaGFyKiB3ZWJLaXRNZWRpYVNyY0dldFVyaShHc3RVUklIYW5kbGVyKik7
CitnYm9vbGVhbiB3ZWJLaXRNZWRpYVNyY1NldFVyaShHc3RVUklIYW5kbGVyKiwgY29uc3QgZ2No
YXIqLCBHRXJyb3IqKik7CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEv
U291cmNlL2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9HU3RyZWFt
ZXJDaGVja3MuY21ha2UKaW5kZXggM2E3Y2VjNzU4YjFjZWQzZGZhZjJhYzkzNTI3NjMwYjE4Mzhi
NmY3Ny4uMThiMTJmODJhOGQyOGMzNDIzZjNlNmYzMTQ3Mzg4OThjMWY2NDc2YyAxMDA2NDQKLS0t
IGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2Uv
R1N0cmVhbWVyQ2hlY2tzLmNtYWtlCkBAIC0zNyw4ICszNyw4IEBAIGlmIChFTkFCTEVfVklERU8g
T1IgRU5BQkxFX1dFQl9BVURJTykKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfR1NU
UkVBTUVSIFRSVUUpCiBlbmRpZiAoKQogCi1pZiAoRU5BQkxFX01FRElBX1NPVVJDRSBBTkQgUENf
R1NUUkVBTUVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxLjE2IikKLSAgICBtZXNzYWdlKEZBVEFM
X0VSUk9SICJHU3RyZWFtZXIgMS4xNiBpcyBuZWVkZWQgZm9yIEVOQUJMRV9NRURJQV9TT1VSQ0Uu
IikKK2lmIChFTkFCTEVfTUVESUFfU09VUkNFIEFORCBQQ19HU1RSRUFNRVJfVkVSU0lPTiBWRVJT
SU9OX0xFU1MgIjEuMTQiKQorICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkdTdHJlYW1lciAxLjE0
IGlzIG5lZWRlZCBmb3IgRU5BQkxFX01FRElBX1NPVVJDRS4iKQogZW5kaWYgKCkKIAogaWYgKEVO
QUJMRV9NRURJQV9TVFJFQU0gT1IgRU5BQkxFX1dFQl9SVEMpCmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOWQzNWQwNzcwYTQ2ZjRhNTBmMTc5MTFh
MTBmYThiMmU0ODY2ZTg4OC4uYzdhZjFkYWFjYzc0MTc4YWZmODkxODAyZWY5YzJhZDNhZDkwZjc4
MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEyIEBACisyMDE5LTEwLTE3ICBBbGljaWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdh
bGlhLmNvbT4KKworICAgICAgICBbTVNFXVtHU3RyZWFtZXJdIFJldmVydCBXZWJLaXRNZWRpYVNy
YyByZXdvcmsgdGVtcG9yYXJpbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMzA3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OgorCiAyMDE5
LTEwLTE1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUGFzcyBDT1JTLWVuYWJsZWQgc2NoZW1lcyB0aHJvdWdoIFdlYlByb2Nlc3MgaW5zdGVh
ZCBvZiBoYXZpbmcgdGhlbSBOZXR3b3JrUHJvY2Vzcy1nbG9iYWwKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvc3R5bGUvY2hlY2tlci5weQppbmRleCA5NDZjYTJmMGZlMDc0NDM3NGI2OTM3NjM0ZjNmOGJi
YTRiZjlkNzI0Li5lNTI5YWZlMTVjNWRhMDJhN2I0NTBjMWE5NmE5MmE4ZjM3NDcxMDI0IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC0yMTksNyArMjE5LDYgQEAg
X1BBVEhfUlVMRVNfU1BFQ0lGSUVSID0gWwogICAgICAgIyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9u
cyBjb250YWluaW5nIHVuZGVyc2NvcmVzLgogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAn
V2ViQ29yZScsICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnVmlkZW9TaW5r
R1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScs
ICdwbGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnV2ViS2l0V2ViU291cmNlR1N0
cmVhbWVyLmNwcCcpLAotICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29yZScsICdw
bGF0Zm9ybScsICdncmFwaGljcycsICdnc3RyZWFtZXInLCAnbXNlJywgJ1dlYktpdE1lZGlhU291
cmNlR1N0cmVhbWVyLmNwcCcpLAogICAgICAgb3MucGF0aC5qb2luKCdTb3VyY2UnLCAnV2ViQ29y
ZScsICdwbGF0Zm9ybScsICdhdWRpbycsICdnc3RyZWFtZXInLCAnV2ViS2l0V2ViQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuY3BwJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3Jl
JywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2dzdHJlYW1lcicsICdHU3RyZWFtZXJNZWRp
YVN0cmVhbVNvdXJjZS5oJyksCiAgICAgICBvcy5wYXRoLmpvaW4oJ1NvdXJjZScsICdXZWJDb3Jl
JywgJ3BsYXRmb3JtJywgJ21lZGlhc3RyZWFtJywgJ2dzdHJlYW1lcicsICdHU3RyZWFtZXJNZWRp
YVN0cmVhbVNvdXJjZS5jcHAnKSwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0MDcyMWNmNmFmMDY5ZTlhODllNWE0NzFjN2Yx
NjQ1MDQ3MDM3OThjLi5kZjIxYmZlMDI2MTdlMTYzODNiYmIzMDBmYjMzYzVmMWQ3ZjBmMjA5IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTktMTAtMTcgIEFsaWNpYSBCb3lhIEdhcmPDrWEgIDxh
Ym95YUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtNU0VdW0dTdHJlYW1lcl0gUmV2ZXJ0IFdlYktp
dE1lZGlhU3JjIHJld29yayB0ZW1wb3JhcmlseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMDc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvVGVzdEV4cGVjdGF0aW9uczoKKwog
MjAxOS0xMC0xNSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbQ2xpcGJvYXJkIEFQSV0gSW1wbGVtZW50IGdldFR5cGUoKSBmb3IgQ2xpcGJvYXJkSXRl
bXMgY3JlYXRlZCBmcm9tIGJpbmRpbmdzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9ndGsvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhw
ZWN0YXRpb25zCmluZGV4IDI5YWUzMTY5OWYxZmM2YTNhOTZhYzE2YTFkZGM0OTljZTAwMWNjMGYu
LjA4ODE3MDdiMzI4ZDQyNGFmNjdkZWEwZmJmNGJiNDY5ODVhN2RjZDMgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9UZXN0RXhwZWN0YXRpb25zCkBAIC0yMzQsNyArMjM0LDYgQEAgd2Via2l0
Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1kdXIKIHdlYmtpdC5vcmcvYi8xNjcxMDggaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZW5kb2ZzdHJlYW0uaHRtbCBb
IEZhaWx1cmUgQ3Jhc2ggXQogd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1lcnJvcnMuaHRtbCBbIEZhaWx1
cmUgXQogd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1wcmVsb2FkLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtp
dC5vcmcvYi8xNjcxMDggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3Vy
Y2UvbWVkaWFzb3VyY2UtcmVtb3ZlLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xNjcx
MDggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3Vy
Y2Utc2Vla2FibGUuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE2NzEwOCBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1zZXF1ZW5j
ZW1vZGUtYXBwZW5kLWJ1ZmZlci5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTY3MTA4
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNl
LXNvdXJjZWJ1ZmZlci1tb2RlLXRpbWVzdGFtcHMuaHRtbCBbIEZhaWx1cmUgXQpAQCAtMTI5Miw2
ICsxMjkxLDE2IEBAIHdlYmtpdC5vcmcvYi8xOTg4MzAgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9odG1sL3NlbWFudGljcy9lbWJlZGRlZC1jb250CiAKIHdlYmtpdC5vcmcvYi8yMDEy
NzUgZmFzdC9ldmVudHMvZm9jdXMtYW5jaG9yLXdpdGgtdGFiaW5kZXgtaGFuZy5odG1sIFsgQ3Jh
c2ggXQogCisjIEtub3duIGlzc3VlcyB0aGF0IHdlcmUgZml4ZWQgYnkgdGhlIFdlYktpdE1lZGlh
U3JjIHJld29yayB0aGF0IGlzIG5vdyByZXZlcnRlZC4KK3dlYmtpdC5vcmcvYi8yMDMwNzggaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2Utc2Vl
ay1iZXlvbmQtZHVyYXRpb24uaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIw
MzA3OCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNv
dXJjZS1yZW1vdmUuaHRtbCBbIFBhc3MgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIwMzA3OCBtZWRp
YS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLXJlbW92ZS11bmxvYWQtY3Jhc2guaHRtbCBbIFBh
c3MgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIwMzA3OCBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEt
c291cmNlLXNlZWstZGV0YWNoLWNyYXNoLmh0bWwgWyBQYXNzIENyYXNoIF0KK3dlYmtpdC5vcmcv
Yi8yMDMwNzggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVk
aWFzb3VyY2UtZ2V0dmlkZW9wbGF5YmFja3F1YWxpdHkuaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQor
d2Via2l0Lm9yZy9iLzIwMzA3OCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlh
LXNvdXJjZS9tZWRpYXNvdXJjZS1yZXBsYXkuaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQord2Via2l0
Lm9yZy9iLzIwMzA3OCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1zZWVrLWR1cmluZy1wZW5kaW5nLXNlZWsuaHRtbCBbIFBhc3MgQ3Jhc2gg
XQord2Via2l0Lm9yZy9iLzIwMzA3OCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21l
ZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1yZWR1bmRhbnQtc2Vlay5odG1sIFsgUGFzcyBDcmFzaCBd
CisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIEVuZCBvZiBDcmFzaGluZyB0
ZXN0cwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTMyOTksNyArMzMwOCw2
IEBAIHdlYmtpdC5vcmcvYi8xNzE1OTggYWNjZXNzaWJpbGl0eS9ndGsvbWVudS1saXN0LXVuZm9j
dXNlZC1ub3RpZmljYXRpb25zLmh0bWwgWyBGCiAKIHdlYmtpdC5vcmcvYi8xNzYwMjAgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVtb3Zl
c291cmNlYnVmZmVyLmh0bWwgWyBDcmFzaCBQYXNzIF0KIAotd2Via2l0Lm9yZy9iLzE3MTcyNiBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1z
ZWVrLWJleW9uZC1kdXJhdGlvbi5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTcxNzI2
IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtaW5pdC1zZWdtZW50LWR1cmF0aW9uLmh0
bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzE3MjI3MCBmYXN0L3RleHQvZm9udC1pbnRl
cnN0aXRpYWwtaW52aXNpYmxlLXdpZHRoLXdoaWxlLWxvYWRpbmcuaHRtbCBbIEZhaWx1cmUgXQpA
QCAtMzg2OSw2ICszODc3LDkgQEAgd2Via2l0Lm9yZy9iLzIwMjc0NyBodHRwL3Rlc3RzL2NhY2hl
LXN0b3JhZ2UvY2FjaGUtcmVjb3Jkcy1wZXJzaXN0ZW5jeS5odHRwcy5odG0KIAogd2Via2l0Lm9y
Zy9iLzIwMjc1MCBodHRwL3Rlc3RzL2Rvd25sb2FkL2FuY2hvci1kb3dubG9hZC1hdHRyaWJ1dGUt
Y29udGVudC1kaXNwb3NpdGlvbi1uby1leHRlbnNpb24tdGV4dC1wbGFpbi5odG1sIFsgRmFpbHVy
ZSBdCiAKKyMgS25vd24gaXNzdWVzIHRoYXQgd2VyZSBmaXhlZCBieSB0aGUgV2ViS2l0TWVkaWFT
cmMgcmV3b3JrIHRoYXQgaXMgbm93IHJldmVydGVkLgord2Via2l0Lm9yZy9iLzIwMzA3OCBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25m
aWctY2hhbmdlLW1wNC12LWZyYW1lc2l6ZS5odG1sIFsgUGFzcyBGYWlsdXJlIF0KKwogIy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgRW5kIG9mIG5vbi1jcmFzaGluZywgbm9uLWZs
YWt5IHRlc3RzIGZhaWxpbmcKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmRpZmYg
LS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMTk5OWE5YmViOWZjMWQwZWMxMjJi
YmIzMGU3OGU2YjJkODdiM2YwYy4uMzZkZDgwNWM2MDM3OWJjMzc5ODhmM2JhMjkwMWMxZTVjNmFl
ZTJkZSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
IEBACisyMDE5LTEwLTE3ICBBbGljaWEgQm95YSBHYXJjw61hICA8YWJveWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbTVNFXVtHU3RyZWFtZXJdIFJldmVydCBXZWJLaXRNZWRpYVNyYyByZXdvcmsg
dGVtcG9yYXJpbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwMzA3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZToKKwogMjAxOS0xMC0xMSAg
S29uc3RhbnRpbiBUb2thcmV2ICA8YW5udWxlbkB5YW5kZXgucnU+CiAKICAgICAgICAgW2NtYWtl
XSBVc2UgSElOVFMgaW5zdGVhZCBvZiBQQVRIUyB3aGVuIHNlYXJjaGluZyBpbiBwYXRocyBmcm9t
IHBrZy1jb25maWcK
</data>

          </attachment>
      

    </bug>

</bugzilla>