<?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>224843</bug_id>
          
          <creation_ts>2021-04-20 17:04:04 -0700</creation_ts>
          <short_desc>GPUProcess launches unnecessarily when loading the amazon front page</short_desc>
          <delta_ts>2021-04-22 16:16:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>calvaris</cc>
    
    <cc>changseok</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jer.noble</cc>
    
    <cc>lingcherd_ho</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1752519</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-20 17:04:04 -0700</bug_when>
    <thetext>GPUProcess launches unnecessarily when load the amazon front page.

The Amazon front page is only using the HTMLMediaElement for feature detection, there should not be any need to launch the GPUProcess in this case:
```
l = {
                audio: function() {
                    return !!h.createElement(&quot;audio&quot;).canPlayType
                },
                video: function() {
                    return !!h.createElement(&quot;video&quot;).canPlayType
                },
```</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752520</commentid>
    <comment_count>1</comment_count>
      <attachid>426618</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-20 17:05:06 -0700</bug_when>
    <thetext>Created attachment 426618
WIP Patch

Works on iPad with amazon.com (no GPUProcess). Will do more testing and polish the patch tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752526</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-20 17:19:07 -0700</bug_when>
    <thetext>I am currently A/B testing the change on PLUM3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752580</commentid>
    <comment_count>3</comment_count>
      <attachid>426630</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-20 19:00:03 -0700</bug_when>
    <thetext>Created attachment 426630
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752589</commentid>
    <comment_count>4</comment_count>
      <attachid>426634</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-20 19:26:54 -0700</bug_when>
    <thetext>Created attachment 426634
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752749</commentid>
    <comment_count>5</comment_count>
      <attachid>426690</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-21 08:09:27 -0700</bug_when>
    <thetext>Created attachment 426690
WIP Patch

Should hopefully pass all the tests now. This seems to be a ~3.6% PLUM progression on iPhone so definitely worth pursuing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752753</commentid>
    <comment_count>6</comment_count>
      <attachid>426692</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-21 08:26:06 -0700</bug_when>
    <thetext>Created attachment 426692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752804</commentid>
    <comment_count>7</comment_count>
      <attachid>426706</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-21 10:13:34 -0700</bug_when>
    <thetext>Created attachment 426706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752835</commentid>
    <comment_count>8</comment_count>
      <attachid>426716</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-21 11:29:54 -0700</bug_when>
    <thetext>Created attachment 426716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752901</commentid>
    <comment_count>9</comment_count>
      <attachid>426716</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-04-21 13:28:22 -0700</bug_when>
    <thetext>Comment on attachment 426716
Patch

This is great, thanks Chris!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752911</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-04-21 13:53:09 -0700</bug_when>
    <thetext>Committed r276389 (236864@main): &lt;https://commits.webkit.org/236864@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 426716.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753011</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-21 19:30:48 -0700</bug_when>
    <thetext>One of the last minute changes I made to fix a layout test must have messed thing up because this patch wasn&apos;t a progression when it landed. I had tested the earlier version of my patch and it was a progression so I will have to investigate tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753170</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-04-22 08:16:25 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #11)
&gt; One of the last minute changes I made to fix a layout test must have messed
&gt; thing up because this patch wasn&apos;t a progression when it landed. I had
&gt; tested the earlier version of my patch and it was a progression so I will
&gt; have to investigate tomorrow.

Looking deeper into A/B testing for this latest patch, I see that it did what I expected it to do. With the patch, there is no GPUProcess on amazon.com-front &amp; amazon.com-search. Before the patch, there was a GPUProcess *before* the memory warning on both these pages. A/B testing indicates we get a ~1% progression (with 98% probability) on both of these pages. However, it doesn&apos;t seem this is sufficient to show a progression on the overall score (despite no other page regressing).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753342</commentid>
    <comment_count>13</comment_count>
    <who name="Ling Ho">lingcherd_ho</who>
    <bug_when>2021-04-22 16:16:21 -0700</bug_when>
    <thetext>&lt;rdar://76977801&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426618</attachid>
            <date>2021-04-20 17:05:06 -0700</date>
            <delta_ts>2021-04-20 19:08:41 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>224843_amazon_noGPUProcess_wip.patch</filename>
            <type>text/plain</type>
            <size>35238</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwCmluZGV4IDU5ZTYxYzMxZTNh
ZS4uNTA0OTVjMTdiOWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5j
cHAKQEAgLTQ3LDcgKzQ3LDYgQEAgaW5saW5lIEhUTUxBdWRpb0VsZW1lbnQ6OkhUTUxBdWRpb0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQKIFJlZjxIVE1MQXVk
aW9FbGVtZW50PiBIVE1MQXVkaW9FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKICAg
ICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IEhUTUxBdWRpb0VsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikpOwotICAgIGVsZW1lbnQtPmZpbmlzaEluaXRpYWxp
emF0aW9uKCk7CiAgICAgZWxlbWVudC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIGVs
ZW1lbnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAz
MjU4ZWZkZjQxZmIuLmFkZGI2NWI1OTI2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpm
aW5pc2hJbml0aWFsaXphdGlvbigpCiAgICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCku
YWRkTXV0ZWRTdGF0ZU9ic2VydmVyKHRoaXMpOwogI2VuZGlmCiAKLSAgICBtZWRpYVNlc3Npb24o
KS5jbGllbnRXaWxsQmVnaW5BdXRvcGxheWluZygpOworICAgIG1fbWVkaWFTZXNzaW9uLT5jbGll
bnRXaWxsQmVnaW5BdXRvcGxheWluZygpOwogfQogCiBIVE1MTWVkaWFFbGVtZW50Ojp+SFRNTE1l
ZGlhRWxlbWVudCgpCkBAIC01MzksNyArNTM5LDggQEAgSFRNTE1lZGlhRWxlbWVudDo6fkhUTUxN
ZWRpYUVsZW1lbnQoKQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAg
aWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2
YWlsYWJpbGl0eWNoYW5nZWRFdmVudCkgfHwgbV9yZW1vdGUtPmhhc0F2YWlsYWJpbGl0eUNhbGxi
YWNrcygpKSB7CiAgICAgICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5l
cnMgPSBmYWxzZTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0
QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGZhbHNlKTsKKyAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9u
KQorICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5TGlzdGVuZXJzKGZhbHNlKTsKICAgICAgICAgdXBkYXRlTWVkaWFTdGF0ZSgpOwogICAg
IH0KICNlbmRpZgpAQCAtNjIzLDcgKzYyNCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVn
aXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGRvY3VtZW50LnJl
Z2lzdGVyTWVkaWFFbGVtZW50KCp0aGlzKTsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT5yZWdpc3Rl
cldpdGhEb2N1bWVudChkb2N1bWVudCk7CisgICAgbWVkaWFTZXNzaW9uKCkucmVnaXN0ZXJXaXRo
RG9jdW1lbnQoZG9jdW1lbnQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0
YXJ0KQogICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwpA
QCAtNjQ0LDcgKzY0NSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3RlcldpdGhE
b2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgZG9jdW1lbnQudW5yZWdpc3Rlck1l
ZGlhRWxlbWVudCgqdGhpcyk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+dW5yZWdpc3RlcldpdGhE
b2N1bWVudChkb2N1bWVudCk7CisgICAgaWYgKG1fbWVkaWFTZXNzaW9uKQorICAgICAgICBtX21l
ZGlhU2Vzc2lvbi0+dW5yZWdpc3RlcldpdGhEb2N1bWVudChkb2N1bWVudCk7CiAKICAgICBpZiAo
bV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCiAgICAgICAgIGRvY3VtZW50LnJlbW92ZU1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CkBAIC02ODAsMTIgKzY4MiwxMiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVu
dCwgRG9jdW1lbnQmIG5ldwogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByZXBhcmVGb3JEb2N1
bWVudFN1c3BlbnNpb24oKQogewotICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lzdGVyV2l0aERv
Y3VtZW50KGRvY3VtZW50KCkpOworICAgIG1lZGlhU2Vzc2lvbigpLnVucmVnaXN0ZXJXaXRoRG9j
dW1lbnQoZG9jdW1lbnQoKSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lRnJv
bURvY3VtZW50U3VzcGVuc2lvbigpCiB7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnJlZ2lzdGVyV2l0
aERvY3VtZW50KGRvY3VtZW50KCkpOworICAgIG1lZGlhU2Vzc2lvbigpLnJlZ2lzdGVyV2l0aERv
Y3VtZW50KGRvY3VtZW50KCkpOwogICAgIHVwZGF0ZVNob3VsZEF1dG9wbGF5KCk7CiB9CiAKQEAg
LTczOCw3ICs3NDAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbgogCiAgICAgICAgIC8vIFRo
ZSBhdHRyaWJ1dGUgbXVzdCBiZSBpZ25vcmVkIGlmIHRoZSBhdXRvcGxheSBhdHRyaWJ1dGUgaXMg
cHJlc2VudAogICAgICAgICBpZiAoIWF1dG9wbGF5KCkgJiYgIW1faGF2ZVByZXBhcmVkVG9QbGF5
ICYmIG1fcGxheWVyKQotICAgICAgICAgICAgbV9wbGF5ZXItPnNldFByZWxvYWQobV9tZWRpYVNl
c3Npb24tPmVmZmVjdGl2ZVByZWxvYWRGb3JFbGVtZW50KCkpOworICAgICAgICAgICAgbV9wbGF5
ZXItPnNldFByZWxvYWQobWVkaWFTZXNzaW9uKCkuZWZmZWN0aXZlUHJlbG9hZEZvckVsZW1lbnQo
KSk7CiAKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gbWVkaWFncm91cEF0dHIpCiAgICAgICAgIHNl
dE1lZGlhR3JvdXAodmFsdWUpOwpAQCAtODAwLDcgKzgwMiw3IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpCiAgICAgaWYgKCFtX2V4cGxpY2l0bHlNdXRl
ZCkgewogICAgICAgICBtX2V4cGxpY2l0bHlNdXRlZCA9IHRydWU7CiAgICAgICAgIG1fbXV0ZWQg
PSBoYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG11dGVkQXR0cik7Ci0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CisgICAgICAgIG1lZGlh
U2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKICAgICB9CiAKICAgICBjb25maWd1
cmVNZWRpYUNvbnRyb2xzKCk7CkBAIC0xMjA2LDcgKzEyMDgsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnByZXBhcmVGb3JMb2FkKCkKICAgICAgICAgLy8gOSAtIEludm9rZSB0aGUgbWVkaWEg
ZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0uCiAgICAgICAgIC8vIE5vdGUs
IHVubGVzcyB0aGUgcmVzdHJpY3Rpb24gb24gcmVxdWlyaW5nIHVzZXIgYWN0aW9uIGhhcyBiZWVu
IHJlbW92ZWQsCiAgICAgICAgIC8vIGRvIG5vdCBiZWdpbiBkb3dubG9hZGluZyBkYXRhLgotICAg
ICAgICBpZiAobV9tZWRpYVNlc3Npb24tPmRhdGFMb2FkaW5nUGVybWl0dGVkKCkpCisgICAgICAg
IGlmIChtZWRpYVNlc3Npb24oKS5kYXRhTG9hZGluZ1Blcm1pdHRlZCgpKQogICAgICAgICAgICAg
c2VsZWN0TWVkaWFSZXNvdXJjZSgpOwogICAgIH0KIApAQCAtMTI1Nyw3ICsxMjU5LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKCkKICAgICBpZiAobV9yZXNv
dXJjZVNlbGVjdGlvblRhc2tRdWV1ZS5oYXNQZW5kaW5nVGFza3MoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGFnZUFsbG93c0RhdGFMb2FkaW5nKCkpIHsK
KyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLnBhZ2VBbGxvd3NEYXRhTG9hZGluZygpKSB7CiAgICAg
ICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgIm5vdCBhbGxvd2VkIHRvIGxvYWQgaW4gYmFj
a2dyb3VuZCwgd2FpdGluZyIpOwogICAgICAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxz
ZSk7CiAgICAgICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKQEAgLTEyNzAs
NyArMTI3Miw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXJjZSgp
CiAgICAgLy8gT25jZSB0aGUgcGFnZSBoYXMgYWxsb3dlZCBhbiBlbGVtZW50IHRvIGxvYWQgbWVk
aWEsIGl0IGlzIGZyZWUgdG8gbG9hZCBhdCB3aWxsLiBUaGlzIGFsbG93cyBhCiAgICAgLy8gcGxh
eWxpc3QgdGhhdCBzdGFydHMgaW4gYSBmb3JlZ3JvdW5kIHRhYiB0byBjb250aW51ZSBhdXRvbWF0
aWNhbGx5IGlmIHRoZSB0YWIgaXMgc3Vic2VxdWVudGx5CiAgICAgLy8gcHV0IGludG8gdGhlIGJh
Y2tncm91bmQuCi0gICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24o
TWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWEpOworICAg
IG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWEpOwogCiAgICAgYXV0byBsb2dTaXRl
SWRlbnRpZmllciA9IExPR0lERU5USUZJRVI7CiAgICAgVU5VU0VEX1BBUkFNKGxvZ1NpdGVJZGVu
dGlmaWVyKTsKQEAgLTE0OTUsMTQgKzE0OTcsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojps
b2FkUmVzb3VyY2UoY29uc3QgVVJMJiBpbml0aWFsVVJMLCBDb250ZW50VHlwZSYgY29udGVudFQK
ICAgICBtX3BsYXllci0+c2V0UHJpdmF0ZUJyb3dzaW5nTW9kZShwcml2YXRlTW9kZSk7CiAKICAg
ICBpZiAoIWF1dG9wbGF5KCkgJiYgIW1faGF2ZVByZXBhcmVkVG9QbGF5KQotICAgICAgICBtX3Bs
YXllci0+c2V0UHJlbG9hZChtX21lZGlhU2Vzc2lvbi0+ZWZmZWN0aXZlUHJlbG9hZEZvckVsZW1l
bnQoKSk7CisgICAgICAgIG1fcGxheWVyLT5zZXRQcmVsb2FkKG1lZGlhU2Vzc2lvbigpLmVmZmVj
dGl2ZVByZWxvYWRGb3JFbGVtZW50KCkpOwogICAgIG1fcGxheWVyLT5zZXRQcmVzZXJ2ZXNQaXRj
aChtX3dlYmtpdFByZXNlcnZlc1BpdGNoKTsKICAgICBtX3BsYXllci0+c2V0UGl0Y2hDb3JyZWN0
aW9uQWxnb3JpdGhtKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5waXRjaENvcnJlY3Rpb25BbGdvcml0
aG0oKSk7CiAKICAgICBpZiAoIW1fZXhwbGljaXRseU11dGVkKSB7CiAgICAgICAgIG1fZXhwbGlj
aXRseU11dGVkID0gdHJ1ZTsKICAgICAgICAgbV9tdXRlZCA9IGhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24obXV0ZWRBdHRyKTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmNhblBy
b2R1Y2VBdWRpb0NoYW5nZWQoKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuY2FuUHJvZHVjZUF1
ZGlvQ2hhbmdlZCgpOwogICAgIH0KIAogICAgIHVwZGF0ZVZvbHVtZSgpOwpAQCAtMjIyMyw3ICsy
MjI1LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUxvYWRpbmdGYWlsZWQoTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKIAogICAgIGxvZ01lZGlhTG9hZFJlcXVlc3QoZG9j
dW1lbnQoKS5wYWdlKCksIFN0cmluZygpLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhlcnJv
ciksIGZhbHNlKTsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT5jbGllbnRDaGFyYWN0ZXJpc3RpY3ND
aGFuZ2VkKCk7CisgICAgbWVkaWFTZXNzaW9uKCkuY2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdl
ZCgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE5ldHdvcmtTdGF0ZShNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlIHN0YXRlKQpAQCAtMjQxNiw3ICsyNDE4LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRl
KQogICAgICAgICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUoKTsKICNlbmRpZgogCi0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5jbGllbnRDaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CisgICAgICAg
IG1lZGlhU2Vzc2lvbigpLmNsaWVudENoYXJhY3RlcmlzdGljc0NoYW5nZWQoKTsKICAgICB9CiAK
ICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfQ1VSUkVOVF9EQVRBICYmIG9sZFN0YXRlIDwg
SEFWRV9DVVJSRU5UX0RBVEEpIHsKQEAgLTI0NTYsNyArMjQ1OCw3IEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBzdGF0ZSkKIAog
ICAgIC8vIElmIHdlIHRyYW5zaXRpb24gdG8gdGhlIEZ1dHVyZSBEYXRhIHN0YXRlIGFuZCB3ZSdy
ZSBhYm91dCB0byBiZWdpbiBwbGF5aW5nLCBlbnN1cmUgcGxheWJhY2sgaXMgYWN0dWFsbHkgcGVy
bWl0dGVkIGZpcnN0LAogICAgIC8vIGhvbm9yaW5nIGFueSBwbGF5YmFjayBkZW5pYWwgcmVhc29u
cyBzdWNoIGFzIHRoZSByZXF1aXJlbWVudCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICBpZiAobV9y
ZWFkeVN0YXRlID09IEhBVkVfRlVUVVJFX0RBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX0ZVVFVSRV9E
QVRBICYmIHBvdGVudGlhbGx5UGxheWluZygpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tT
dGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CisgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBIQVZFX0ZVVFVSRV9EQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9G
VVRVUkVfREFUQSAmJiBwb3RlbnRpYWxseVBsYXlpbmcoKSAmJiAhbWVkaWFTZXNzaW9uKCkucGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7
CiAgICAgICAgIGF1dG8gY2FuVHJhbnNpdGlvbiA9IGNhblRyYW5zaXRpb25Gcm9tQXV0b3BsYXlU
b1BsYXkoKTsKICAgICAgICAgaWYgKGNhblRyYW5zaXRpb24gJiYgY2FuVHJhbnNpdGlvbi52YWx1
ZSgpID09IE1lZGlhUGxheWJhY2tEZW5pYWxSZWFzb246OlVzZXJHZXN0dXJlUmVxdWlyZWQpCiAg
ICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJBdXRvcGxheSBibG9ja2VkLCB1
c2VyIGdlc3R1cmUgcmVxdWlyZWQiKTsKQEAgLTI5NzYsNyArMjk3OCw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6c2Vla1dpdGhUb2xlcmFuY2UoY29uc3QgTWVkaWFUaW1lJiBpblRpbWUsIGNv
bnN0IE1lZGlhVGltCiAgICAgICAgIHNlZWtUYXNrKCk7CiAKICAgICBpZiAocHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlRm9yTWVkaWEoKSkKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2
aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9D
b250cm9sQ29udHJvbHNNYW5hZ2VyKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkucmVtb3ZlQmVo
YXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVU
b0NvbnRyb2xDb250cm9sc01hbmFnZXIpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNl
ZWtUYXNrKCkKQEAgLTM0NDUsNyArMzQ0Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxh
eShET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQogewogICAgIEFMV0FZU19MT0co
TE9HSURFTlRJRklFUik7CiAKLSAgICBhdXRvIHN1Y2Nlc3MgPSBtX21lZGlhU2Vzc2lvbi0+cGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpOwor
ICAgIGF1dG8gc3VjY2VzcyA9IG1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJt
aXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKTsKICAgICBpZiAoIXN1Y2Nlc3MpIHsK
ICAgICAgICAgaWYgKHN1Y2Nlc3MudmFsdWUoKSA9PSBNZWRpYVBsYXliYWNrRGVuaWFsUmVhc29u
OjpVc2VyR2VzdHVyZVJlcXVpcmVkKQogICAgICAgICAgICAgc2V0QXV0b3BsYXlFdmVudFBsYXli
YWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRlZEF1dG9wbGF5KTsK
QEAgLTM0NzEsNyArMzQ3Myw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheSgpCiB7CiAg
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKIAotICAgIGF1dG8gc3VjY2VzcyA9IG1fbWVk
aWFTZXNzaW9uLT5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0
ZTo6UGxheWluZyk7CisgICAgYXV0byBzdWNjZXNzID0gbWVkaWFTZXNzaW9uKCkucGxheWJhY2tT
dGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpOwogICAgIGlm
ICghc3VjY2VzcykgewogICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgInBsYXliYWNr
IG5vdCBwZXJtaXR0ZWQ6ICIsIHN1Y2Nlc3MudmFsdWUoKSk7CiAgICAgICAgIGlmIChzdWNjZXNz
LnZhbHVlKCkgPT0gTWVkaWFQbGF5YmFja0RlbmlhbFJlYXNvbjo6VXNlckdlc3R1cmVSZXF1aXJl
ZCkKQEAgLTM0OTgsNyArMzUwMCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheUludGVy
bmFsKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24t
PmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCkpIHsKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLmNs
aWVudFdpbGxCZWdpblBsYXliYWNrKCkpIHsKICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSLCAicmV0dXJuaW5nIGJlY2F1c2Ugb2YgaW50ZXJydXB0aW9uIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zNTUyLDcgKzM1NTQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBh
dXNlKCkKICAgICBpZiAobV93YWl0aW5nVG9FbnRlckZ1bGxzY3JlZW4pCiAgICAgICAgIG1fd2Fp
dGluZ1RvRW50ZXJGdWxsc2NyZWVuID0gZmFsc2U7CiAKLSAgICBpZiAoIW1fbWVkaWFTZXNzaW9u
LT5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGF1c2Vk
KSkKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQo
TWVkaWFQbGF5YmFja1N0YXRlOjpQYXVzZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKQEAgLTM1NzUsNyArMzU3Nyw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1c2VJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsUGF1c2VQbGF5YmFjaygp
KSB7CisgICAgaWYgKCFtZWRpYVNlc3Npb24oKS5jbGllbnRXaWxsUGF1c2VQbGF5YmFjaygpKSB7
CiAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBiZWNhdXNlIG9m
IGludGVycnVwdGlvbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzU4NCw3ICszNTg2
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUludGVybmFsKCkKICAgICBpZiAoIW1f
cGxheWVyIHx8IG1fbmV0d29ya1N0YXRlID09IE5FVFdPUktfRU1QVFkpIHsKICAgICAgICAgLy8g
VW5sZXNzIHRoZSByZXN0cmljdGlvbiBvbiBtZWRpYSByZXF1aXJpbmcgdXNlciBhY3Rpb24gaGFz
IGJlZW4gbGlmdGVkCiAgICAgICAgIC8vIGRvbid0IHRyaWdnZXIgbG9hZGluZyBpZiBhIHNjcmlw
dCBjYWxscyBwYXVzZSgpLgotICAgICAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5wbGF5YmFja1N0
YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpCisgICAgICAg
IGlmICghbWVkaWFTZXNzaW9uKCkucGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBs
YXliYWNrU3RhdGU6OlBsYXlpbmcpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzZWxl
Y3RNZWRpYVJlc291cmNlKCk7CiAgICAgfQpAQCAtMzY3Myw3ICszNjc1LDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSFRNTE1lZGlhRWxlbWVudDo6c2V0Vm9sdW1lKGRvdWJsZSB2b2x1bWUpCiAgICAg
dXBkYXRlVm9sdW1lKCk7CiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkudm9sdW1lY2hh
bmdlRXZlbnQpOwogCi0gICAgaWYgKGlzUGxheWluZygpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7
CisgICAgaWYgKGlzUGxheWluZygpICYmICFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hh
bmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpIHsKICAgICAgICAgc2No
ZWR1bGVSZWplY3RQZW5kaW5nUGxheVByb21pc2VzKERPTUV4Y2VwdGlvbjo6Y3JlYXRlKE5vdEFs
bG93ZWRFcnJvcikpOwogICAgICAgICBwYXVzZUludGVybmFsKCk7CiAgICAgICAgIHNldEF1dG9w
bGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50
ZWRBdXRvcGxheSk7CkBAIC0zNzMyLDcgKzM3MzQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnNldE11dGVkKGJvb2wgbXV0ZWQpCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKICAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiAjZW5kaWYKLSAgICAgICAg
bV9tZWRpYVNlc3Npb24tPmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKKyAgICAgICAgbWVkaWFT
ZXNzaW9uKCkuY2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOwogICAgICAgICB1cGRhdGVTbGVlcERp
c2FibGluZygpOwogICAgIH0KIApAQCAtMzc4Nyw3ICszNzg5LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpiZWdpblNjcnViYmluZygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX21lZGlh
U2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpS
ZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOworICAgIG1lZGlhU2Vz
c2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVx
dWlyZVVzZXJHZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKIH0KIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcoKQpAQCAtMzk0MSw3ICszOTQzLDcgQEAgZG91Ymxl
IEhUTUxNZWRpYUVsZW1lbnQ6OnBlcmNlbnRMb2FkZWQoKSBjb25zdAogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6Om1lZGlhUGxheWVyRGlkQWRkQXVkaW9UcmFjayhBdWRpb1RyYWNrUHJpdmF0ZSYg
dHJhY2spCiB7Ci0gICAgaWYgKGlzUGxheWluZygpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxheWJh
Y2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7Cisg
ICAgaWYgKGlzUGxheWluZygpICYmICFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hhbmdl
UGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpIHsKICAgICAgICAgc2NoZWR1
bGVSZWplY3RQZW5kaW5nUGxheVByb21pc2VzKERPTUV4Y2VwdGlvbjo6Y3JlYXRlKE5vdEFsbG93
ZWRFcnJvcikpOwogICAgICAgICBwYXVzZUludGVybmFsKCk7CiAgICAgICAgIHNldEF1dG9wbGF5
RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50ZWRB
dXRvcGxheSk7CkBAIC00Njg1LDcgKzQ2ODcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNv
dXJjZVdhc0FkZGVkKEhUTUxTb3VyY2VFbGVtZW50JiBzb3VyY2UpCiAgICAgaWYgKG1fbmV0d29y
a1N0YXRlID09IE5FVFdPUktfRU1QVFkpIHsKICAgICAgICAgbV9uZXh0Q2hpbGROb2RlVG9Db25z
aWRlciA9ICZzb3VyY2U7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKG1f
bWVkaWFTZXNzaW9uLT5kYXRhTG9hZGluZ1Blcm1pdHRlZCgpKQorICAgICAgICBpZiAobWVkaWFT
ZXNzaW9uKCkuZGF0YUxvYWRpbmdQZXJtaXR0ZWQoKSkKICNlbmRpZgogICAgICAgICAgICAgc2Vs
ZWN0TWVkaWFSZXNvdXJjZSgpOwogICAgICAgICByZXR1cm47CkBAIC00NzgzLDcgKzQ3ODUsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyVGltZUNoYW5nZWQoKQogICAgICAg
ICAgICAgICAgIC8vIGNoYW5nZXMgcGF1c2VkIHRvIHRydWUgYW5kIGZpcmVzIGEgc2ltcGxlIGV2
ZW50IG5hbWVkIHBhdXNlIGF0IHRoZSBtZWRpYSBlbGVtZW50LgogICAgICAgICAgICAgICAgIG1f
cGF1c2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMo
KS5wYXVzZUV2ZW50KTsKLSAgICAgICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2ls
bFBhdXNlUGxheWJhY2soKTsKKyAgICAgICAgICAgICAgICBtZWRpYVNlc3Npb24oKS5jbGllbnRX
aWxsUGF1c2VQbGF5YmFjaygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gUXVldWUg
YSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgZW5kZWQgYXQgdGhlIG1lZGlhIGVs
ZW1lbnQuCiAgICAgICAgICAgICBpZiAoIW1fc2VudEVuZEV2ZW50KSB7CkBAIC00ODMyLDcgKzQ4
MzQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEJlaGF2aW9yUmVzdHJpY3Rpb25zT25F
bmRJZk5lY2Vzc2FyeSgpCiAgICAgaWYgKGlzRnVsbHNjcmVlbigpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1l
bnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOwor
ICAgIG1lZGlhU2Vzc2lvbigpLmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKICAgICBt
X3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZpb3JSZXN0cmljdGlvbnNUaW1lci5zdG9wKCk7
CiAgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zVGltZXIu
c3RhcnRPbmVTaG90KGhpZGVNZWRpYUNvbnRyb2xzQWZ0ZXJFbmRlZERlbGF5KTsKIH0KQEAgLTQ4
NjIsNyArNDg2NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2Vla1RvUGxheWJhY2tQb3Np
dGlvbkVuZGVkVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX2lzU2NydWJiaW5nUmVtb3RlbHkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnNlc3Npb25EaWRFbmRSZW1vdGVTY3J1YmJpbmcoKm1fbWVkaWFTZXNzaW9uKTsK
KyAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5zZXNzaW9u
RGlkRW5kUmVtb3RlU2NydWJiaW5nKG1lZGlhU2Vzc2lvbigpKTsKICAgICBtX2lzU2NydWJiaW5n
UmVtb3RlbHkgPSBmYWxzZTsKICAgICBtX3NlZWtUb1BsYXliYWNrUG9zaXRpb25FbmRlZFRpbWVy
LnN0b3AoKTsKICNlbmRpZgpAQCAtNTA0MCw3ICs1MDQyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYUVuZ2luZVdhc1VwZGF0ZWQoKQogICAgIHVwZGF0ZVJlbmRlcmVyKCk7CiAgICAg
ZW5kUHJvY2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2soKTsKIAotICAgIG1fbWVkaWFTZXNzaW9u
LT5tZWRpYUVuZ2luZVVwZGF0ZWQoKTsKKyAgICBtZWRpYVNlc3Npb24oKS5tZWRpYUVuZ2luZVVw
ZGF0ZWQoKTsKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgaWYgKG1fcGxheWVy
ICYmIG1fbWVkaWFLZXlzKQpAQCAtNTEyMiw3ICs1MTI0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYVBsYXllckNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpCiAKICAgICB1cGRhdGVSZW5k
ZXJlcigpOwogCi0gICAgaWYgKCFwYXVzZWQoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBsYXliYWNr
U3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkgeworICAg
IGlmICghcGF1c2VkKCkgJiYgIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJt
aXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkgewogICAgICAgICBzY2hlZHVsZVJl
amVjdFBlbmRpbmdQbGF5UHJvbWlzZXMoRE9NRXhjZXB0aW9uOjpjcmVhdGUoTm90QWxsb3dlZEVy
cm9yKSk7CiAgICAgICAgIHBhdXNlSW50ZXJuYWwoKTsKICAgICAgICAgc2V0QXV0b3BsYXlFdmVu
dFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRlZEF1dG9w
bGF5KTsKQEAgLTUyNjcsNyArNTI2OSw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6c3RvcHBl
ZER1ZVRvRXJyb3JzKCkgY29uc3QKIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZWRGb3JV
c2VySW50ZXJhY3Rpb24oKSBjb25zdAogewotICAgIGlmIChtX21lZGlhU2Vzc2lvbi0+c3RhdGUo
KSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQpCisgICAgaWYgKG1lZGlhU2Vz
c2lvbigpLnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGVkKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTUzMzgsNyArNTM0MCw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKIAogICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUiwgInNob3VsZEJlUGxheWluZyA9ICIsIHNob3VsZEJlUGxheWlu
ZywgIiwgcGxheWVyUGF1c2VkID0gIiwgcGxheWVyUGF1c2VkKTsKIAotICAgIGlmIChzaG91bGRC
ZVBsYXlpbmcgJiYgcGxheWVyUGF1c2VkICYmIG1fbWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxz
Y3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgJiYgKG1fd2FpdGluZ1RvRW50ZXJGdWxsc2NyZWVuIHx8
ICFpc0Z1bGxzY3JlZW4oKSkpIHsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nICYmIHBsYXllclBh
dXNlZCAmJiBtZWRpYVNlc3Npb24oKS5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNr
KCkgJiYgKG1fd2FpdGluZ1RvRW50ZXJGdWxsc2NyZWVuIHx8ICFpc0Z1bGxzY3JlZW4oKSkpIHsK
ICAgICAgICAgaWYgKCFtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbikKICAgICAgICAgICAgIGVu
dGVyRnVsbHNjcmVlbigpOwogCkBAIC01MzU0LDcgKzUzNTYsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgIGludmFsaWRhdGVDYWNoZWRUaW1lKCk7
CiAKICAgICAgICAgaWYgKHBsYXllclBhdXNlZCkgewotICAgICAgICAgICAgbV9tZWRpYVNlc3Np
b24tPmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCk7CisgICAgICAgICAgICBtZWRpYVNlc3Npb24o
KS5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpOwogCiAgICAgICAgICAgICAvLyBTZXQgcmF0ZSwg
bXV0ZWQgYW5kIHZvbHVtZSBiZWZvcmUgY2FsbGluZyBwbGF5IGluIGNhc2UgdGhleSB3ZXJlIHNl
dCBiZWZvcmUgdGhlIG1lZGlhIGVuZ2luZSB3YXMgc2V0IHVwLgogICAgICAgICAgICAgLy8gVGhl
IG1lZGlhIGVuZ2luZSBzaG91bGQganVzdCBzdGFzaCB0aGUgcmF0ZSwgbXV0ZWQgYW5kIHZvbHVt
ZSB2YWx1ZXMgc2luY2UgaXQgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nLgpAQCAtNTQwMSw3ICs1NDAz
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjaGVja0ZvckF1ZGlvQW5kVmlkZW8oKQogewog
ICAgIG1faGFzRXZlckhhZEF1ZGlvIHw9IGhhc0F1ZGlvKCk7CiAgICAgbV9oYXNFdmVySGFkVmlk
ZW8gfD0gaGFzVmlkZW8oKTsKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2FuUHJvZHVjZUF1ZGlvQ2hh
bmdlZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKIH0K
IAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRQbGF5aW5nKGJvb2wgcGxheWluZykKQEAgLTU1
MjgsNyArNTUzMCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBsYXllcigp
CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBpZiAoaGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hh
bmdlZEV2ZW50KSB8fCBtX3JlbW90ZS0+aGFzQXZhaWxhYmlsaXR5Q2FsbGJhY2tzKCkpIHsKICAg
ICAgICAgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IGZhbHNlOwot
ICAgICAgICBtX21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlM
aXN0ZW5lcnMoZmFsc2UpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5zZXRIYXNQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhmYWxzZSk7CiAKICAgICAgICAgLy8gU2VuZCBhbiBh
dmFpbGFiaWxpdHkgZXZlbnQgaW4gY2FzZSBzY3JpcHRzIHdhbnQgdG8gaGlkZSB0aGUgcGlja2Vy
IHdoZW4gdGhlIGVsZW1lbnQKICAgICAgICAgLy8gZG9lc24ndCBzdXBwb3J0IHBsYXliYWNrIHRv
IGEgdGFyZ2V0LgpAQCAtNTU1OSw4ICs1NTYxLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpj
bGVhck1lZGlhUGxheWVyKCkKICAgICBpZiAobV90ZXh0VHJhY2tzKQogICAgICAgICBjb25maWd1
cmVUZXh0VHJhY2tEaXNwbGF5KCk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50Q2hhcmFj
dGVyaXN0aWNzQ2hhbmdlZCgpOwotICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNlQXVkaW9D
aGFuZ2VkKCk7CisgICAgbWVkaWFTZXNzaW9uKCkuY2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdl
ZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKIAogICAg
IG1fcmVzb3VyY2VTZWxlY3Rpb25UYXNrUXVldWUuY2FuY2VsQWxsVGFza3MoKTsKIApAQCAtNTU4
Nyw3ICs1NTg5LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdG9wV2l0aG91dERlc3Ryb3lp
bmdNZWRpYVBsYXllcigpCiAgICAgLy8gU3RvcCB0aGUgcGxheWJhY2sgd2l0aG91dCBnZW5lcmF0
aW5nIGV2ZW50cwogICAgIHNldFBsYXlpbmcoZmFsc2UpOwogICAgIHBhdXNlQW5kVXBkYXRlUGxh
eVN0YXRlSW1tZWRpYXRlbHkoKTsKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbEJlRE9N
U3VzcGVuZGVkKCk7CisgICAgaWYgKG1fbWVkaWFTZXNzaW9uKQorICAgICAgICBtX21lZGlhU2Vz
c2lvbi0+Y2xpZW50V2lsbEJlRE9NU3VzcGVuZGVkKCk7CiAKICAgICBzZXRBdXRvcGxheUV2ZW50
UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6Tm9uZSk7CiAKQEAgLTU2
NDcsNyArNTY1MCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c3RvcCgpCiAgICAgLy8gbG9h
ZGVkIGFuZCBjYWxsaW5nIGl0IGFnYWluIHdvbid0IGNhdXNlIGFueSBwcm9ibGVtcy4KICAgICBj
bGVhck1lZGlhUGxheWVyKCk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+c3RvcFNlc3Npb24oKTsK
KyAgICBpZiAobV9tZWRpYVNlc3Npb24pCisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zdG9wU2Vz
c2lvbigpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnN1c3BlbmQoUmVhc29uRm9yU3Vz
cGVuc2lvbiByZWFzb24pCkBAIC01NjYxLDcgKzU2NjUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAgICAgY2FzZSBSZWFzb25G
b3JTdXNwZW5zaW9uOjpCYWNrRm9yd2FyZENhY2hlOgogICAgICAgICBzdG9wV2l0aG91dERlc3Ry
b3lpbmdNZWRpYVBsYXllcigpOwogICAgICAgICBzZXRCdWZmZXJpbmdQb2xpY3koQnVmZmVyaW5n
UG9saWN5OjpNYWtlUmVzb3VyY2VzUHVyZ2VhYmxlKTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24t
PmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VD
b25zZW50VG9SZXN1bWVNZWRpYSk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLmFkZEJlaGF2aW9y
UmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1
bWVNZWRpYSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVhc29uRm9yU3VzcGVuc2lvbjo6
UGFnZVdpbGxCZVN1c3BlbmRlZDoKICAgICBjYXNlIFJlYXNvbkZvclN1c3BlbnNpb246OkphdmFT
Y3JpcHREZWJ1Z2dlclBhdXNlZDoKQEAgLTU2NzcsMTMgKzU2ODEsMTMgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpyZXN1bWUoKQogCiAgICAgc2V0SW5BY3RpdmVEb2N1bWVudCh0cnVlKTsKIAot
ICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmco
KSkKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1p
bmcoKSkKICAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMp
OwogICAgIGVsc2UKICAgICAgICAgc2V0UGF1c2VkSW50ZXJuYWwoZmFsc2UpOwogCi0gICAgbV9t
ZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lv
bjo6UmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYSk7Ci0gICAgbV9tZWRpYVNlc3Npb24t
PnVwZGF0ZUJ1ZmZlcmluZ1BvbGljeSgpOworICAgIG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2
aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9S
ZXN1bWVNZWRpYSk7CisgICAgbWVkaWFTZXNzaW9uKCkudXBkYXRlQnVmZmVyaW5nUG9saWN5KCk7
CiAKICAgICBpZiAobV9lcnJvciAmJiBtX2Vycm9yLT5jb2RlKCkgPT0gTWVkaWFFcnJvcjo6TUVE
SUFfRVJSX0FCT1JURUQgJiYgIW1fcmVzdW1lVGFza1F1ZXVlLmhhc1BlbmRpbmdUYXNrKCkpIHsK
ICAgICAgICAgLy8gUmVzdGFydCB0aGUgbG9hZCBpZiBpdCB3YXMgYWJvcnRlZCBpbiB0aGUgbWlk
ZGxlIGJ5IG1vdmluZyB0aGUgZG9jdW1lbnQgdG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KQEAg
LTU3MjQsNyArNTcyOCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dmlzaWJpbGl0eVN0YXRl
Q2hhbmdlZCgpCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAidmlzaWJsZSA9ICIsICFt
X2VsZW1lbnRJc0hpZGRlbik7CiAKICAgICB1cGRhdGVTbGVlcERpc2FibGluZygpOwotICAgIG1f
bWVkaWFTZXNzaW9uLT52aXNpYmlsaXR5Q2hhbmdlZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLnZp
c2liaWxpdHlDaGFuZ2VkKCk7CiAgICAgaWYgKG1fcGxheWVyKQogICAgICAgICBtX3BsYXllci0+
c2V0VmlzaWJsZSghbV9lbGVtZW50SXNIaWRkZW4pOwogCkBAIC01NzMyLDEwICs1NzM2LDEwIEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgpCiAgICAgaWYg
KCFpc1BsYXlpbmdBdWRpbykgewogICAgICAgICBpZiAobV9lbGVtZW50SXNIaWRkZW4pIHsKICAg
ICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgIlN1c3BlbmRpbmcgcGxheWJhY2sg
YWZ0ZXIgZ29pbmcgdG8gdGhlIGJhY2tncm91bmQiKTsKLSAgICAgICAgICAgIG1fbWVkaWFTZXNz
aW9uLT5iZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6RW50ZXJpbmdCYWNr
Z3JvdW5kKTsKKyAgICAgICAgICAgIG1lZGlhU2Vzc2lvbigpLmJlZ2luSW50ZXJydXB0aW9uKFBs
YXRmb3JtTWVkaWFTZXNzaW9uOjpFbnRlcmluZ0JhY2tncm91bmQpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiUmVzdW1pbmcgcGxheWJh
Y2sgYWZ0ZXIgZW50ZXJpbmcgZm9yZWdyb3VuZCIpOwotICAgICAgICAgICAgbV9tZWRpYVNlc3Np
b24tPmVuZEludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWlu
Zyk7CisgICAgICAgICAgICBtZWRpYVNlc3Npb24oKS5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1N
ZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
NTc2OCwxMiArNTc3MiwxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OndlYmtpdFNob3dQbGF5
YmFja1RhcmdldFBpY2tlcigpCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBp
ZiAocHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKICAgICAgICAgcmVtb3ZlQmVoYXZp
b3JSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUoKTsKLSAgICBtX21lZGlhU2Vzc2lv
bi0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCk7CisgICAgbWVkaWFTZXNzaW9uKCkuc2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lyZWxl
c3NSb3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2UoKQogewotICAgIGJvb2wgaGFzVGFyZ2V0cyA9IG1f
bWVkaWFTZXNzaW9uLT5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygpOworICAgIGJvb2wgaGFz
VGFyZ2V0cyA9IG1lZGlhU2Vzc2lvbigpLmhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCk7CiAg
ICAgbV9yZW1vdGUtPmF2YWlsYWJpbGl0eUNoYW5nZWQoaGFzVGFyZ2V0cyk7CiAKICAgICBlbnF1
ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkRXZlbnQoKTsKQEAgLTU3OTcsOCAr
NTgwMSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0SXNQbGF5aW5nVG9XaXJlbGVzc1Rh
cmdldChib29sIGlzUGxheWluZ1RvV2lyZWxlc3NUYXJnCiAgICAgICAgIG1fcmVtb3RlLT5pc1Bs
YXlpbmdUb1JlbW90ZVRhcmdldENoYW5nZWQobV9pc1BsYXlpbmdUb1dpcmVsZXNzVGFyZ2V0KTsK
ICAgICAgICAgQUxXQVlTX0xPRyhsb2dTaXRlSWRlbnRpZmllciwgbV9pc1BsYXlpbmdUb1dpcmVs
ZXNzVGFyZ2V0KTsKICAgICAgICAgY29uZmlndXJlTWVkaWFDb250cm9scygpOwotICAgICAgICBt
X21lZGlhU2Vzc2lvbi0+aXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0Q2hhbmdlZCht
X2lzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpOwotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2Fu
UHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5pc1BsYXlpbmdU
b1dpcmVsZXNzUGxheWJhY2tUYXJnZXRDaGFuZ2VkKG1faXNQbGF5aW5nVG9XaXJlbGVzc1Rhcmdl
dCk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKICAg
ICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiAgICAgICAgIHVwZGF0ZVNsZWVwRGlz
YWJsaW5nKCk7CiAKQEAgLTU4NDYsNyArNTg1MCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6
YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIFJlZjxFdmVudExp
CiAKICAgICBpZiAoaXNGaXJzdEF2YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lcikgewogICAgICAg
ICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gdHJ1ZTsKLSAgICAg
ICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVu
ZXJzKHRydWUpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5zZXRIYXNQbGF5YmFja1RhcmdldEF2
YWlsYWJpbGl0eUxpc3RlbmVycyh0cnVlKTsKICAgICB9CiAKICAgICBBTFdBWVNfTE9HKExPR0lE
RU5USUZJRVIsICInd2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkJyIpOwpA
QCAtNTg3Miw3ICs1ODc2LDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXMKICAgICBBTFdBWVNf
TE9HKExPR0lERU5USUZJRVIsICJyZW1vdmVkIGxhc3QgbGlzdGVuZXIgPSAiLCBkaWRSZW1vdmVM
YXN0QXZhaWxhYmlsaXR5Q2hhbmdlZExpc3RlbmVyKTsKICAgICBpZiAoZGlkUmVtb3ZlTGFzdEF2
YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lcikgewogICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0
QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gZmFsc2U7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5z
ZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhmYWxzZSk7CisgICAgICAg
IG1lZGlhU2Vzc2lvbigpLnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJz
KGZhbHNlKTsKICAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiAgICAgfQogCkBA
IC01ODgxLDcgKzU4ODUsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpcwogCiB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVu
dCgpCiB7Ci0gICAgYm9vbCBoYXNUYXJnZXRzID0gbV9tZWRpYVNlc3Npb24tPmhhc1dpcmVsZXNz
UGxheWJhY2tUYXJnZXRzKCk7CisgICAgYm9vbCBoYXNUYXJnZXRzID0gbWVkaWFTZXNzaW9uKCku
aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKTsKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJ
RVIsICJoYXNUYXJnZXRzID0gIiwgaGFzVGFyZ2V0cyk7CiAgICAgYXV0byBldmVudCA9IFdlYktp
dFBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Vi
a2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQsIGhhc1RhcmdldHMpOwog
ICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CkBAIC01OTIwLDcgKzU5MjQsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnJlbW90ZUhhc0F2YWlsYWJpbGl0eUNhbGxiYWNrc0NoYW5nZWQoKQog
CiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiaGFzTGlzdGVuZXJzOiAiLCBoYXNMaXN0
ZW5lcnMpOwogICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBo
YXNMaXN0ZW5lcnM7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5TGlzdGVuZXJzKGhhc0xpc3RlbmVycyk7CisgICAgbWVkaWFTZXNzaW9uKCkuc2V0
SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoaGFzTGlzdGVuZXJzKTsKICAg
ICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUoKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQpAQCAtNjA3MSw3ICs2MDc1LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSB8fCAh
aXM8SFRNTFZpZGVvRWxlbWVudD4oKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IXBhdXNlZCgpICYmIG1fbWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1Bs
YXliYWNrKCkpIHsKKyAgICBpZiAoIXBhdXNlZCgpICYmIG1lZGlhU2Vzc2lvbigpLnJlcXVpcmVz
RnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSkgewogICAgICAgICBpZiAoIWRvY3VtZW50KCku
c2V0dGluZ3MoKS5hbGxvd3NJbmxpbmVNZWRpYVBsYXliYWNrQWZ0ZXJGdWxsc2NyZWVuKCkgfHwg
aXNWaWRlb1Rvb1NtYWxsRm9ySW5saW5lUGxheWJhY2soKSkKICAgICAgICAgICAgIHBhdXNlSW50
ZXJuYWwoKTsKICAgICAgICAgZWxzZSB7CkBAIC02NTA2LDcgKzY1MTAsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6c2hvdWxkRm9yY2VDb250cm9sc0Rp
c3BsYXkoKSBjb25zdAogewogICAgIC8vIEFsd2F5cyBjcmVhdGUgY29udHJvbHMgZm9yIGF1dG9w
bGF5IHZpZGVvIHRoYXQgcmVxdWlyZXMgdXNlciBnZXN0dXJlIGR1ZSB0byBiZWluZyBpbiBsb3cg
cG93ZXIgbW9kZS4KLSAgICByZXR1cm4gaXNWaWRlbygpICYmIGF1dG9wbGF5KCkgJiYgbV9tZWRp
YVNlc3Npb24tPmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVx
dWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9EdWVUb0xvd1Bvd2VyTW9kZSk7CisgICAgcmV0dXJuIGlz
VmlkZW8oKSAmJiBhdXRvcGxheSgpICYmIG1lZGlhU2Vzc2lvbigpLmhhc0JlaGF2aW9yUmVzdHJp
Y3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9EdWVU
b0xvd1Bvd2VyTW9kZSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVk
aWFDb250cm9scygpCkBAIC02NTE0LDcgKzY1MTgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OmNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKQogICAgIGJvb2wgcmVxdWlyZUNvbnRyb2xzID0gY29u
dHJvbHMoKTsKIAogICAgIC8vIEFsd2F5cyBjcmVhdGUgY29udHJvbHMgZm9yIHZpZGVvIHdoZW4g
ZnVsbHNjcmVlbiBwbGF5YmFjayBpcyByZXF1aXJlZC4KLSAgICBpZiAoaXNWaWRlbygpICYmIG1f
bWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCisgICAg
aWYgKGlzVmlkZW8oKSAmJiBtZWRpYVNlc3Npb24oKS5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRl
b1BsYXliYWNrKCkpCiAgICAgICAgIHJlcXVpcmVDb250cm9scyA9IHRydWU7CiAKICAgICBpZiAo
c2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKSkKQEAgLTY2MzUsNyArNjYzOSw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFQbGF5ZXIoKQogI2lmIEVOQUJMRShXSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQpCiAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMo
KS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWRFdmVudCkgfHwgbV9yZW1v
dGUtPmhhc0F2YWlsYWJpbGl0eUNhbGxiYWNrcygpKSB7CiAgICAgICAgIG1faGFzUGxheWJhY2tU
YXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSB0cnVlOwotICAgICAgICBtX21lZGlhU2Vzc2lv
bi0+c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnModHJ1ZSk7CisgICAg
ICAgIG1lZGlhU2Vzc2lvbigpLnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVu
ZXJzKHRydWUpOwogICAgICAgICBlbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFu
Z2VkRXZlbnQoKTsgLy8gRW5zdXJlIHRoZSBldmVudCBsaXN0ZW5lciBnZXRzIGF0IGxlYXN0IG9u
ZSBldmVudC4KICAgICB9CiAjZW5kaWYKQEAgLTY5NDksNyArNjk1Myw3IEBAIGJvb2wgSFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJJc0Z1bGxzY3JlZW4oKSBjb25zdAogCiBib29sIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVySXNGdWxsc2NyZWVuUGVybWl0dGVkKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmZ1bGxzY3JlZW5QZXJtaXR0ZWQoKTsKKyAgICBy
ZXR1cm4gbWVkaWFTZXNzaW9uKCkuZnVsbHNjcmVlblBlcm1pdHRlZCgpOwogfQogCiBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVySXNWaWRlbygpIGNvbnN0CkBAIC03MTU3LDcgKzcx
NjEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb25z
QWZ0ZXJGaXJzdFVzZXJHZXN0dXJlKE1lZGlhRWxlbQogCiAgICAgbV9yZW1vdmVkQmVoYXZpb3JS
ZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUgPSB0cnVlOwogCi0gICAgbV9tZWRpYVNl
c3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zVG9SZW1vdmUpOwor
ICAgIG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25z
VG9SZW1vdmUpOwogICAgIGRvY3VtZW50KCkudG9wRG9jdW1lbnQoKS5ub3RlVXNlckludGVyYWN0
aW9uV2l0aE1lZGlhRWxlbWVudCgpOwogfQogCkBAIC03MTY5LDE0ICs3MTczLDE0IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUmF0ZUNoYW5nZVJlc3RyaWN0aW9ucygpCiAKICAgICBj
b25zdCBhdXRvJiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50KCk7CiAgICAgaWYg
KHRvcERvY3VtZW50LnZpZGVvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkpCi0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Np
b246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvUmF0ZUNoYW5nZSk7CisgICAgICAgIG1lZGlh
U2Vzc2lvbigpLmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVx
dWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9SYXRlQ2hhbmdlKTsKICAgICBlbHNlCi0gICAgICAgIG1f
bWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Np
b246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvUmF0ZUNoYW5nZSk7CisgICAgICAgIG1lZGlh
U2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6
UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9SYXRlQ2hhbmdlKTsKIAogICAgIGlmICh0b3BEb2N1
bWVudC5hdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSgpKQotICAgICAgICBtX21lZGlh
U2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1
aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVDaGFuZ2UpOworICAgICAgICBtZWRpYVNlc3Npb24o
KS5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2Vy
R2VzdHVyZUZvckF1ZGlvUmF0ZUNoYW5nZSk7CiAgICAgZWxzZQotICAgICAgICBtX21lZGlhU2Vz
c2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1
aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVDaGFuZ2UpOworICAgICAgICBtZWRpYVNlc3Npb24o
KS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVV
c2VyR2VzdHVyZUZvckF1ZGlvUmF0ZUNoYW5nZSk7CiB9CiAKIFJlZlB0cjxWaWRlb1BsYXliYWNr
UXVhbGl0eT4gSFRNTE1lZGlhRWxlbWVudDo6Z2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKQpAQCAt
NzU0MSw3ICs3NTQ1LDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojppc1N1c3BlbmRlZCgpIGNv
bnN0CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIHNpemVfdCBIVE1MTWVkaWFFbGVtZW50Ojpt
YXhpbXVtU291cmNlQnVmZmVyU2l6ZShjb25zdCBTb3VyY2VCdWZmZXImIGJ1ZmZlcikgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPm1heGltdW1NZWRpYVNvdXJjZUJ1ZmZlclNp
emUoYnVmZmVyKTsKKyAgICByZXR1cm4gbWVkaWFTZXNzaW9uKCkubWF4aW11bU1lZGlhU291cmNl
QnVmZmVyU2l6ZShidWZmZXIpOwogfQogI2VuZGlmCiAKQEAgLTc3NDksNyArNzc1Myw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTdGF0ZSgpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fbWVkaWFTdGF0ZSA9IHN0YXRlOwotICAgIG1fbWVkaWFTZXNzaW9uLT5tZWRpYVN0
YXRlRGlkQ2hhbmdlKG1fbWVkaWFTdGF0ZSk7CisgICAgbWVkaWFTZXNzaW9uKCkubWVkaWFTdGF0
ZURpZENoYW5nZShtX21lZGlhU3RhdGUpOwogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVJc1BsYXlp
bmdNZWRpYSgpOwogfQpAQCAtNzc2NywxMSArNzc3MSwxMSBAQCBNZWRpYVByb2R1Y2VyOjpNZWRp
YVN0YXRlRmxhZ3MgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTdGF0ZSgpIGNvbnN0CiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBpZiAobV9oYXNQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUxpc3RlbmVycykgewogICAgICAgICBzdGF0ZSB8PSBIYXNQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUxpc3RlbmVyOwotICAgICAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT53
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpKQorICAgICAgICBpZiAoIW1lZGlhU2Vzc2lv
bigpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkpCiAgICAgICAgICAgICBzdGF0ZSB8
PSBSZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9uaXRvcmluZzsKICAgICB9CiAKLSAgICBib29sIHJl
cXVpcmVVc2VyR2VzdHVyZSA9IG1fbWVkaWFTZXNzaW9uLT5oYXNCZWhhdmlvclJlc3RyaWN0aW9u
KE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQXV0b3BsYXlUb0V4dGVy
bmFsRGV2aWNlKTsKKyAgICBib29sIHJlcXVpcmVVc2VyR2VzdHVyZSA9IG1lZGlhU2Vzc2lvbigp
Lmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJH
ZXN0dXJlVG9BdXRvcGxheVRvRXh0ZXJuYWxEZXZpY2UpOwogICAgIGlmIChtX3JlYWR5U3RhdGUg
Pj0gSEFWRV9NRVRBREFUQSAmJiAhcmVxdWlyZVVzZXJHZXN0dXJlICYmICFtX2ZhaWxlZFRvUGxh
eVRvV2lyZWxlc3NUYXJnZXQpCiAgICAgICAgIHN0YXRlIHw9IEV4dGVybmFsRGV2aWNlQXV0b1Bs
YXlDYW5kaWRhdGU7CiAKQEAgLTc5MDUsNyArNzkwOSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6cHVyZ2VCdWZmZXJlZERhdGFJZlBvc3NpYmxlKCkKIHsKICAgICBBTFdBWVNfTE9HKExPR0lE
RU5USUZJRVIpOwogCi0gICAgaWYgKCFNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigp
LmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpICYmIG1fbWVkaWFTZXNzaW9uLT5wcmVmZXJyZWRCdWZm
ZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJpbmdQb2xpY3k6OkRlZmF1bHQpCisgICAgaWYgKCFNZW1v
cnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpICYm
IG1lZGlhU2Vzc2lvbigpLnByZWZlcnJlZEJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlcmluZ1Bv
bGljeTo6RGVmYXVsdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzUGxheWluZ1RvRXh0
ZXJuYWxUYXJnZXQoKSkgewpAQCAtNzkyNiw3ICs3OTMwLDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVt
ZW50OjpjYW5TYXZlTWVkaWFEYXRhKCkgY29uc3QKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojph
bGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkKCkKIHsKLSAgICBpZiAocG90
ZW50aWFsbHlQbGF5aW5nKCkgJiYgbV9tZWRpYVNlc3Npb24tPnJlcXVpcmVzRnVsbHNjcmVlbkZv
clZpZGVvUGxheWJhY2soKSAmJiAhaXNGdWxsc2NyZWVuKCkpCisgICAgaWYgKHBvdGVudGlhbGx5
UGxheWluZygpICYmIG1lZGlhU2Vzc2lvbigpLnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxh
eWJhY2soKSAmJiAhaXNGdWxsc2NyZWVuKCkpCiAgICAgICAgIGVudGVyRnVsbHNjcmVlbigpOwog
fQogCkBAIC03OTQ0LDcgKzc5NDgsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzVmlkZW9U
b29TbWFsbEZvcklubGluZVBsYXliYWNrKCkKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6aXNWaXNp
YmxlSW5WaWV3cG9ydENoYW5nZWQoKQogewogICAgIG1fdmlzaWJpbGl0eUNoYW5nZVRhc2tRdWV1
ZS5lbnF1ZXVlVGFzayhbdGhpc10gewotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+aXNWaXNpYmxl
SW5WaWV3cG9ydENoYW5nZWQoKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuaXNWaXNpYmxlSW5W
aWV3cG9ydENoYW5nZWQoKTsKICAgICAgICAgdXBkYXRlU2hvdWxkQXV0b3BsYXkoKTsKICAgICAg
ICAgc2NoZWR1bGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclVwZGF0ZSgpOwogICAgIH0pOwpAQCAt
Nzk1NSwyMiArNzk1OSwyMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVNob3VsZEF1
dG9wbGF5KCkKICAgICBpZiAoIWF1dG9wbGF5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghbV9tZWRpYVNlc3Npb24tPmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6SW52aXNpYmxlQXV0b3BsYXlOb3RQZXJtaXR0ZWQpKQorICAgIGlmICghbWVkaWFTZXNz
aW9uKCkuaGFzQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpJbnZpc2li
bGVBdXRvcGxheU5vdFBlcm1pdHRlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2Fu
QXV0b3BsYXkgPSBtZWRpYVNlc3Npb24oKS5hdXRvcGxheVBlcm1pdHRlZCgpOwogICAgIGlmIChj
YW5BdXRvcGxheQotICAgICAgICAmJiBtX21lZGlhU2Vzc2lvbi0+c3RhdGUoKSA9PSBQbGF0Zm9y
bU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQKLSAgICAgICAgJiYgbV9tZWRpYVNlc3Npb24tPmlu
dGVycnVwdGlvblR5cGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW52aXNpYmxlQXV0b3Bs
YXkpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRp
YVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOworICAgICAgICAmJiBtZWRpYVNlc3Npb24oKS5z
dGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZAorICAgICAgICAmJiBt
ZWRpYVNlc3Npb24oKS5pbnRlcnJ1cHRpb25UeXBlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246
OkludmlzaWJsZUF1dG9wbGF5KQorICAgICAgICBtZWRpYVNlc3Npb24oKS5lbmRJbnRlcnJ1cHRp
b24oUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOwogICAgIGVsc2UgaWYg
KCFjYW5BdXRvcGxheQotICAgICAgICAmJiBtX21lZGlhU2Vzc2lvbi0+c3RhdGUoKSAhPSBQbGF0
Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5i
ZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW52aXNpYmxlQXV0b3BsYXkp
OworICAgICAgICAmJiBtZWRpYVNlc3Npb24oKS5zdGF0ZSgpICE9IFBsYXRmb3JtTWVkaWFTZXNz
aW9uOjpJbnRlcnJ1cHRlZCkKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuYmVnaW5JbnRlcnJ1cHRp
b24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkludmlzaWJsZUF1dG9wbGF5KTsKIH0KIAogdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVTaG91bGRQbGF5KCkKIHsKLSAgICBpZiAoIXBhdXNlZCgp
ICYmICFtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBs
YXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CisgICAgaWYgKCFwYXVzZWQoKSAmJiAhbWVkaWFTZXNz
aW9uKCkucGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBs
YXlpbmcpKSB7CiAgICAgICAgIHNjaGVkdWxlUmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhET01F
eGNlcHRpb246OmNyZWF0ZShOb3RBbGxvd2VkRXJyb3IpKTsKICAgICAgICAgcGF1c2VJbnRlcm5h
bCgpOwogICAgICAgICBzZXRBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50
UGxheWJhY2tTdGF0ZTo6UHJldmVudGVkQXV0b3BsYXkpOwpAQCAtODAwMywxNiArODAwNywxNiBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZpb3JS
ZXN0cmljdGlvbnNUaW1lckZpcmVkKCkKICAgICBpZiAobV9wbGF5YmFja0NvbnRyb2xzTWFuYWdl
ckJlaGF2aW9yUmVzdHJpY3Rpb25zUXVldWUuaGFzUGVuZGluZ1Rhc2soKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+aGFzQmVoYXZpb3JSZXN0cmljdGlvbihN
ZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01h
bmFnZXIpKQorICAgIGlmICghbWVkaWFTZXNzaW9uKCkuaGFzQmVoYXZpb3JSZXN0cmljdGlvbihN
ZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01h
bmFnZXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZp
b3JSZXN0cmljdGlvbnNRdWV1ZS5zY2hlZHVsZVRhc2soW3Byb3RlY3RlZFRoaXNdICgpIHsKLSAg
ICAgICAgTWVkaWFFbGVtZW50U2Vzc2lvbiogbWVkaWFFbGVtZW50U2Vzc2lvbiA9IHByb3RlY3Rl
ZFRoaXMtPm1fbWVkaWFTZXNzaW9uLmdldCgpOwotICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+
aXNQbGF5aW5nKCkgfHwgbWVkaWFFbGVtZW50U2Vzc2lvbi0+c3RhdGUoKSA9PSBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbjo6QXV0b3BsYXlpbmcgfHwgbWVkaWFFbGVtZW50U2Vzc2lvbi0+c3RhdGUoKSA9
PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UGxheWluZykKKyAgICAgICAgYXV0byYgbWVkaWFFbGVt
ZW50U2Vzc2lvbiA9IHByb3RlY3RlZFRoaXMtPm1lZGlhU2Vzc2lvbigpOworICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+aXNQbGF5aW5nKCkgfHwgbWVkaWFFbGVtZW50U2Vzc2lvbi5zdGF0ZSgp
ID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpBdXRvcGxheWluZyB8fCBtZWRpYUVsZW1lbnRTZXNz
aW9uLnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXlpbmcpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgbWVkaWFFbGVtZW50U2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0
cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlUGxheWJhY2tUb0NvbnRyb2xDb250
cm9sc01hbmFnZXIpOworICAgICAgICBtZWRpYUVsZW1lbnRTZXNzaW9uLmFkZEJlaGF2aW9yUmVz
dHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBsYXliYWNrVG9Db250cm9sQ29u
dHJvbHNNYW5hZ2VyKTsKICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2NoZWR1bGVQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlclVwZGF0ZSgpOwogICAgIH0pOwogfQpAQCAtODA3OSw3ICs4MDgzLDcgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRJbkFjdGl2ZURvY3VtZW50KGJvb2wgaW5BY3RpdmVE
b2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pbkFjdGl2ZURvY3VtZW50ID0gaW5B
Y3RpdmVEb2N1bWVudDsKLSAgICBtX21lZGlhU2Vzc2lvbi0+aW5BY3RpdmVEb2N1bWVudENoYW5n
ZWQoKTsKKyAgICBtZWRpYVNlc3Npb24oKS5pbkFjdGl2ZURvY3VtZW50Q2hhbmdlZCgpOwogfQog
CiBIVE1MTWVkaWFFbGVtZW50RW51bXM6OkJ1ZmZlcmluZ1BvbGljeSBIVE1MTWVkaWFFbGVtZW50
OjpidWZmZXJpbmdQb2xpY3koKSBjb25zdApAQCAtODEyOSw2ICs4MTMzLDEzIEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6c2V0U2hvd1Bvc3RlckZsYWcoYm9vbCBmbGFnKQogICAgIGludmFsaWRh
dGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIH0KIAorTWVkaWFFbGVtZW50U2Vzc2lvbiYg
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTZXNzaW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVk
aWFTZXNzaW9uKQorICAgICAgICBjb25zdF9jYXN0PEhUTUxNZWRpYUVsZW1lbnQmPigqdGhpcyku
ZmluaXNoSW5pdGlhbGl6YXRpb24oKTsKKyAgICByZXR1cm4gKm1fbWVkaWFTZXNzaW9uOworfQor
CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCA2
NDcyNGViYjk0ZWIuLjJhNGFkNjNlMzA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgKQEAgLTQ5MCw3ICs0OTAsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFZpZGVvUGxh
eWJhY2tRdWFsaXR5PiBnZXRWaWRlb1BsYXliYWNrUXVhbGl0eSgpOwogCiAgICAgTWVkaWFQbGF5
ZXI6OlByZWxvYWQgcHJlbG9hZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcmVsb2FkOyB9Ci0g
ICAgTWVkaWFFbGVtZW50U2Vzc2lvbiYgbWVkaWFTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gKm1f
bWVkaWFTZXNzaW9uOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgTWVkaWFFbGVtZW50U2Vzc2lvbiYg
bWVkaWFTZXNzaW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5nZWQo
KTsKICAgICB2b2lkIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAppbmRleCA5YzNmZDVhNjNkMzkuLmIy
Y2ViMWM1ZDliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBA
IC03OSw3ICs3OSw2IEBAIFJlZjxIVE1MVmlkZW9FbGVtZW50PiBIVE1MVmlkZW9FbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jCiAgICAgSFRNTFZpZGVvRWxl
bWVudFBpY3R1cmVJblBpY3R1cmU6OnByb3ZpZGVQaWN0dXJlSW5QaWN0dXJlVG8odmlkZW9FbGVt
ZW50KTsKICNlbmRpZgogCi0gICAgdmlkZW9FbGVtZW50LT5maW5pc2hJbml0aWFsaXphdGlvbigp
OwogICAgIHZpZGVvRWxlbWVudC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIHZpZGVv
RWxlbWVudDsKIH0K
</data>
<flag name="commit-queue"
          id="446974"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426630</attachid>
            <date>2021-04-20 19:00:03 -0700</date>
            <delta_ts>2021-04-20 19:26:54 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>224843_amazon_noGPUprocess_v2.patch</filename>
            <type>text/plain</type>
            <size>35268</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwCmluZGV4IDU5ZTYxYzMxZTNh
ZS4uNTA0OTVjMTdiOWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5j
cHAKQEAgLTQ3LDcgKzQ3LDYgQEAgaW5saW5lIEhUTUxBdWRpb0VsZW1lbnQ6OkhUTUxBdWRpb0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQKIFJlZjxIVE1MQXVk
aW9FbGVtZW50PiBIVE1MQXVkaW9FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKICAg
ICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IEhUTUxBdWRpb0VsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikpOwotICAgIGVsZW1lbnQtPmZpbmlzaEluaXRpYWxp
emF0aW9uKCk7CiAgICAgZWxlbWVudC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIGVs
ZW1lbnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAz
MjU4ZWZkZjQxZmIuLjJjOTFiYWZkN2FhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpm
aW5pc2hJbml0aWFsaXphdGlvbigpCiAgICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCku
YWRkTXV0ZWRTdGF0ZU9ic2VydmVyKHRoaXMpOwogI2VuZGlmCiAKLSAgICBtZWRpYVNlc3Npb24o
KS5jbGllbnRXaWxsQmVnaW5BdXRvcGxheWluZygpOworICAgIG1fbWVkaWFTZXNzaW9uLT5jbGll
bnRXaWxsQmVnaW5BdXRvcGxheWluZygpOwogfQogCiBIVE1MTWVkaWFFbGVtZW50Ojp+SFRNTE1l
ZGlhRWxlbWVudCgpCkBAIC01MzksNyArNTM5LDggQEAgSFRNTE1lZGlhRWxlbWVudDo6fkhUTUxN
ZWRpYUVsZW1lbnQoKQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAg
aWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2
YWlsYWJpbGl0eWNoYW5nZWRFdmVudCkgfHwgbV9yZW1vdGUtPmhhc0F2YWlsYWJpbGl0eUNhbGxi
YWNrcygpKSB7CiAgICAgICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5l
cnMgPSBmYWxzZTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0
QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGZhbHNlKTsKKyAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9u
KQorICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5TGlzdGVuZXJzKGZhbHNlKTsKICAgICAgICAgdXBkYXRlTWVkaWFTdGF0ZSgpOwogICAg
IH0KICNlbmRpZgpAQCAtNjIzLDcgKzYyNCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVn
aXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGRvY3VtZW50LnJl
Z2lzdGVyTWVkaWFFbGVtZW50KCp0aGlzKTsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT5yZWdpc3Rl
cldpdGhEb2N1bWVudChkb2N1bWVudCk7CisgICAgbWVkaWFTZXNzaW9uKCkucmVnaXN0ZXJXaXRo
RG9jdW1lbnQoZG9jdW1lbnQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0
YXJ0KQogICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwpA
QCAtNjQ0LDcgKzY0NSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3RlcldpdGhE
b2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgZG9jdW1lbnQudW5yZWdpc3Rlck1l
ZGlhRWxlbWVudCgqdGhpcyk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+dW5yZWdpc3RlcldpdGhE
b2N1bWVudChkb2N1bWVudCk7CisgICAgaWYgKG1fbWVkaWFTZXNzaW9uKQorICAgICAgICBtX21l
ZGlhU2Vzc2lvbi0+dW5yZWdpc3RlcldpdGhEb2N1bWVudChkb2N1bWVudCk7CiAKICAgICBpZiAo
bV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCiAgICAgICAgIGRvY3VtZW50LnJlbW92ZU1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CkBAIC02ODAsMTIgKzY4MiwxMiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVu
dCwgRG9jdW1lbnQmIG5ldwogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByZXBhcmVGb3JEb2N1
bWVudFN1c3BlbnNpb24oKQogewotICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lzdGVyV2l0aERv
Y3VtZW50KGRvY3VtZW50KCkpOworICAgIG1lZGlhU2Vzc2lvbigpLnVucmVnaXN0ZXJXaXRoRG9j
dW1lbnQoZG9jdW1lbnQoKSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lRnJv
bURvY3VtZW50U3VzcGVuc2lvbigpCiB7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnJlZ2lzdGVyV2l0
aERvY3VtZW50KGRvY3VtZW50KCkpOworICAgIG1lZGlhU2Vzc2lvbigpLnJlZ2lzdGVyV2l0aERv
Y3VtZW50KGRvY3VtZW50KCkpOwogICAgIHVwZGF0ZVNob3VsZEF1dG9wbGF5KCk7CiB9CiAKQEAg
LTczOCw3ICs3NDAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbgogCiAgICAgICAgIC8vIFRo
ZSBhdHRyaWJ1dGUgbXVzdCBiZSBpZ25vcmVkIGlmIHRoZSBhdXRvcGxheSBhdHRyaWJ1dGUgaXMg
cHJlc2VudAogICAgICAgICBpZiAoIWF1dG9wbGF5KCkgJiYgIW1faGF2ZVByZXBhcmVkVG9QbGF5
ICYmIG1fcGxheWVyKQotICAgICAgICAgICAgbV9wbGF5ZXItPnNldFByZWxvYWQobV9tZWRpYVNl
c3Npb24tPmVmZmVjdGl2ZVByZWxvYWRGb3JFbGVtZW50KCkpOworICAgICAgICAgICAgbV9wbGF5
ZXItPnNldFByZWxvYWQobWVkaWFTZXNzaW9uKCkuZWZmZWN0aXZlUHJlbG9hZEZvckVsZW1lbnQo
KSk7CiAKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gbWVkaWFncm91cEF0dHIpCiAgICAgICAgIHNl
dE1lZGlhR3JvdXAodmFsdWUpOwpAQCAtODAwLDcgKzgwMiw3IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpCiAgICAgaWYgKCFtX2V4cGxpY2l0bHlNdXRl
ZCkgewogICAgICAgICBtX2V4cGxpY2l0bHlNdXRlZCA9IHRydWU7CiAgICAgICAgIG1fbXV0ZWQg
PSBoYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG11dGVkQXR0cik7Ci0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CisgICAgICAgIG1lZGlh
U2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKICAgICB9CiAKICAgICBjb25maWd1
cmVNZWRpYUNvbnRyb2xzKCk7CkBAIC0xMjA2LDcgKzEyMDgsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnByZXBhcmVGb3JMb2FkKCkKICAgICAgICAgLy8gOSAtIEludm9rZSB0aGUgbWVkaWEg
ZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0uCiAgICAgICAgIC8vIE5vdGUs
IHVubGVzcyB0aGUgcmVzdHJpY3Rpb24gb24gcmVxdWlyaW5nIHVzZXIgYWN0aW9uIGhhcyBiZWVu
IHJlbW92ZWQsCiAgICAgICAgIC8vIGRvIG5vdCBiZWdpbiBkb3dubG9hZGluZyBkYXRhLgotICAg
ICAgICBpZiAobV9tZWRpYVNlc3Npb24tPmRhdGFMb2FkaW5nUGVybWl0dGVkKCkpCisgICAgICAg
IGlmIChtZWRpYVNlc3Npb24oKS5kYXRhTG9hZGluZ1Blcm1pdHRlZCgpKQogICAgICAgICAgICAg
c2VsZWN0TWVkaWFSZXNvdXJjZSgpOwogICAgIH0KIApAQCAtMTI1Nyw3ICsxMjU5LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKCkKICAgICBpZiAobV9yZXNv
dXJjZVNlbGVjdGlvblRhc2tRdWV1ZS5oYXNQZW5kaW5nVGFza3MoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGFnZUFsbG93c0RhdGFMb2FkaW5nKCkpIHsK
KyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLnBhZ2VBbGxvd3NEYXRhTG9hZGluZygpKSB7CiAgICAg
ICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgIm5vdCBhbGxvd2VkIHRvIGxvYWQgaW4gYmFj
a2dyb3VuZCwgd2FpdGluZyIpOwogICAgICAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxz
ZSk7CiAgICAgICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKQEAgLTEyNzAs
NyArMTI3Miw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXJjZSgp
CiAgICAgLy8gT25jZSB0aGUgcGFnZSBoYXMgYWxsb3dlZCBhbiBlbGVtZW50IHRvIGxvYWQgbWVk
aWEsIGl0IGlzIGZyZWUgdG8gbG9hZCBhdCB3aWxsLiBUaGlzIGFsbG93cyBhCiAgICAgLy8gcGxh
eWxpc3QgdGhhdCBzdGFydHMgaW4gYSBmb3JlZ3JvdW5kIHRhYiB0byBjb250aW51ZSBhdXRvbWF0
aWNhbGx5IGlmIHRoZSB0YWIgaXMgc3Vic2VxdWVudGx5CiAgICAgLy8gcHV0IGludG8gdGhlIGJh
Y2tncm91bmQuCi0gICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24o
TWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWEpOworICAg
IG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWEpOwogCiAgICAgYXV0byBsb2dTaXRl
SWRlbnRpZmllciA9IExPR0lERU5USUZJRVI7CiAgICAgVU5VU0VEX1BBUkFNKGxvZ1NpdGVJZGVu
dGlmaWVyKTsKQEAgLTE0OTUsMTQgKzE0OTcsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojps
b2FkUmVzb3VyY2UoY29uc3QgVVJMJiBpbml0aWFsVVJMLCBDb250ZW50VHlwZSYgY29udGVudFQK
ICAgICBtX3BsYXllci0+c2V0UHJpdmF0ZUJyb3dzaW5nTW9kZShwcml2YXRlTW9kZSk7CiAKICAg
ICBpZiAoIWF1dG9wbGF5KCkgJiYgIW1faGF2ZVByZXBhcmVkVG9QbGF5KQotICAgICAgICBtX3Bs
YXllci0+c2V0UHJlbG9hZChtX21lZGlhU2Vzc2lvbi0+ZWZmZWN0aXZlUHJlbG9hZEZvckVsZW1l
bnQoKSk7CisgICAgICAgIG1fcGxheWVyLT5zZXRQcmVsb2FkKG1lZGlhU2Vzc2lvbigpLmVmZmVj
dGl2ZVByZWxvYWRGb3JFbGVtZW50KCkpOwogICAgIG1fcGxheWVyLT5zZXRQcmVzZXJ2ZXNQaXRj
aChtX3dlYmtpdFByZXNlcnZlc1BpdGNoKTsKICAgICBtX3BsYXllci0+c2V0UGl0Y2hDb3JyZWN0
aW9uQWxnb3JpdGhtKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5waXRjaENvcnJlY3Rpb25BbGdvcml0
aG0oKSk7CiAKICAgICBpZiAoIW1fZXhwbGljaXRseU11dGVkKSB7CiAgICAgICAgIG1fZXhwbGlj
aXRseU11dGVkID0gdHJ1ZTsKICAgICAgICAgbV9tdXRlZCA9IGhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24obXV0ZWRBdHRyKTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmNhblBy
b2R1Y2VBdWRpb0NoYW5nZWQoKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuY2FuUHJvZHVjZUF1
ZGlvQ2hhbmdlZCgpOwogICAgIH0KIAogICAgIHVwZGF0ZVZvbHVtZSgpOwpAQCAtMjIyMyw3ICsy
MjI1LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUxvYWRpbmdGYWlsZWQoTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKIAogICAgIGxvZ01lZGlhTG9hZFJlcXVlc3QoZG9j
dW1lbnQoKS5wYWdlKCksIFN0cmluZygpLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhlcnJv
ciksIGZhbHNlKTsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT5jbGllbnRDaGFyYWN0ZXJpc3RpY3ND
aGFuZ2VkKCk7CisgICAgbWVkaWFTZXNzaW9uKCkuY2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdl
ZCgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE5ldHdvcmtTdGF0ZShNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlIHN0YXRlKQpAQCAtMjQxNiw3ICsyNDE4LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRl
KQogICAgICAgICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUoKTsKICNlbmRpZgogCi0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5jbGllbnRDaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CisgICAgICAg
IG1lZGlhU2Vzc2lvbigpLmNsaWVudENoYXJhY3RlcmlzdGljc0NoYW5nZWQoKTsKICAgICB9CiAK
ICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfQ1VSUkVOVF9EQVRBICYmIG9sZFN0YXRlIDwg
SEFWRV9DVVJSRU5UX0RBVEEpIHsKQEAgLTI0NTYsNyArMjQ1OCw3IEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBzdGF0ZSkKIAog
ICAgIC8vIElmIHdlIHRyYW5zaXRpb24gdG8gdGhlIEZ1dHVyZSBEYXRhIHN0YXRlIGFuZCB3ZSdy
ZSBhYm91dCB0byBiZWdpbiBwbGF5aW5nLCBlbnN1cmUgcGxheWJhY2sgaXMgYWN0dWFsbHkgcGVy
bWl0dGVkIGZpcnN0LAogICAgIC8vIGhvbm9yaW5nIGFueSBwbGF5YmFjayBkZW5pYWwgcmVhc29u
cyBzdWNoIGFzIHRoZSByZXF1aXJlbWVudCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICBpZiAobV9y
ZWFkeVN0YXRlID09IEhBVkVfRlVUVVJFX0RBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX0ZVVFVSRV9E
QVRBICYmIHBvdGVudGlhbGx5UGxheWluZygpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tT
dGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CisgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBIQVZFX0ZVVFVSRV9EQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9G
VVRVUkVfREFUQSAmJiBwb3RlbnRpYWxseVBsYXlpbmcoKSAmJiAhbWVkaWFTZXNzaW9uKCkucGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7
CiAgICAgICAgIGF1dG8gY2FuVHJhbnNpdGlvbiA9IGNhblRyYW5zaXRpb25Gcm9tQXV0b3BsYXlU
b1BsYXkoKTsKICAgICAgICAgaWYgKGNhblRyYW5zaXRpb24gJiYgY2FuVHJhbnNpdGlvbi52YWx1
ZSgpID09IE1lZGlhUGxheWJhY2tEZW5pYWxSZWFzb246OlVzZXJHZXN0dXJlUmVxdWlyZWQpCiAg
ICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJBdXRvcGxheSBibG9ja2VkLCB1
c2VyIGdlc3R1cmUgcmVxdWlyZWQiKTsKQEAgLTI5NzYsNyArMjk3OCw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6c2Vla1dpdGhUb2xlcmFuY2UoY29uc3QgTWVkaWFUaW1lJiBpblRpbWUsIGNv
bnN0IE1lZGlhVGltCiAgICAgICAgIHNlZWtUYXNrKCk7CiAKICAgICBpZiAocHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlRm9yTWVkaWEoKSkKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2
aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9D
b250cm9sQ29udHJvbHNNYW5hZ2VyKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkucmVtb3ZlQmVo
YXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVU
b0NvbnRyb2xDb250cm9sc01hbmFnZXIpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNl
ZWtUYXNrKCkKQEAgLTM0NDUsNyArMzQ0Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxh
eShET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQogewogICAgIEFMV0FZU19MT0co
TE9HSURFTlRJRklFUik7CiAKLSAgICBhdXRvIHN1Y2Nlc3MgPSBtX21lZGlhU2Vzc2lvbi0+cGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpOwor
ICAgIGF1dG8gc3VjY2VzcyA9IG1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJt
aXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKTsKICAgICBpZiAoIXN1Y2Nlc3MpIHsK
ICAgICAgICAgaWYgKHN1Y2Nlc3MudmFsdWUoKSA9PSBNZWRpYVBsYXliYWNrRGVuaWFsUmVhc29u
OjpVc2VyR2VzdHVyZVJlcXVpcmVkKQogICAgICAgICAgICAgc2V0QXV0b3BsYXlFdmVudFBsYXli
YWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRlZEF1dG9wbGF5KTsK
QEAgLTM0NzEsNyArMzQ3Myw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheSgpCiB7CiAg
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKIAotICAgIGF1dG8gc3VjY2VzcyA9IG1fbWVk
aWFTZXNzaW9uLT5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0
ZTo6UGxheWluZyk7CisgICAgYXV0byBzdWNjZXNzID0gbWVkaWFTZXNzaW9uKCkucGxheWJhY2tT
dGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpOwogICAgIGlm
ICghc3VjY2VzcykgewogICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgInBsYXliYWNr
IG5vdCBwZXJtaXR0ZWQ6ICIsIHN1Y2Nlc3MudmFsdWUoKSk7CiAgICAgICAgIGlmIChzdWNjZXNz
LnZhbHVlKCkgPT0gTWVkaWFQbGF5YmFja0RlbmlhbFJlYXNvbjo6VXNlckdlc3R1cmVSZXF1aXJl
ZCkKQEAgLTM0OTgsNyArMzUwMCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheUludGVy
bmFsKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24t
PmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCkpIHsKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLmNs
aWVudFdpbGxCZWdpblBsYXliYWNrKCkpIHsKICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSLCAicmV0dXJuaW5nIGJlY2F1c2Ugb2YgaW50ZXJydXB0aW9uIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zNTUyLDcgKzM1NTQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBh
dXNlKCkKICAgICBpZiAobV93YWl0aW5nVG9FbnRlckZ1bGxzY3JlZW4pCiAgICAgICAgIG1fd2Fp
dGluZ1RvRW50ZXJGdWxsc2NyZWVuID0gZmFsc2U7CiAKLSAgICBpZiAoIW1fbWVkaWFTZXNzaW9u
LT5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGF1c2Vk
KSkKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQo
TWVkaWFQbGF5YmFja1N0YXRlOjpQYXVzZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKQEAgLTM1NzUsNyArMzU3Nyw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1c2VJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsUGF1c2VQbGF5YmFjaygp
KSB7CisgICAgaWYgKCFtZWRpYVNlc3Npb24oKS5jbGllbnRXaWxsUGF1c2VQbGF5YmFjaygpKSB7
CiAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBiZWNhdXNlIG9m
IGludGVycnVwdGlvbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzU4NCw3ICszNTg2
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUludGVybmFsKCkKICAgICBpZiAoIW1f
cGxheWVyIHx8IG1fbmV0d29ya1N0YXRlID09IE5FVFdPUktfRU1QVFkpIHsKICAgICAgICAgLy8g
VW5sZXNzIHRoZSByZXN0cmljdGlvbiBvbiBtZWRpYSByZXF1aXJpbmcgdXNlciBhY3Rpb24gaGFz
IGJlZW4gbGlmdGVkCiAgICAgICAgIC8vIGRvbid0IHRyaWdnZXIgbG9hZGluZyBpZiBhIHNjcmlw
dCBjYWxscyBwYXVzZSgpLgotICAgICAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5wbGF5YmFja1N0
YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpCisgICAgICAg
IGlmICghbWVkaWFTZXNzaW9uKCkucGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBs
YXliYWNrU3RhdGU6OlBsYXlpbmcpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzZWxl
Y3RNZWRpYVJlc291cmNlKCk7CiAgICAgfQpAQCAtMzY3Myw3ICszNjc1LDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSFRNTE1lZGlhRWxlbWVudDo6c2V0Vm9sdW1lKGRvdWJsZSB2b2x1bWUpCiAgICAg
dXBkYXRlVm9sdW1lKCk7CiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkudm9sdW1lY2hh
bmdlRXZlbnQpOwogCi0gICAgaWYgKGlzUGxheWluZygpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7
CisgICAgaWYgKGlzUGxheWluZygpICYmICFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hh
bmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpIHsKICAgICAgICAgc2No
ZWR1bGVSZWplY3RQZW5kaW5nUGxheVByb21pc2VzKERPTUV4Y2VwdGlvbjo6Y3JlYXRlKE5vdEFs
bG93ZWRFcnJvcikpOwogICAgICAgICBwYXVzZUludGVybmFsKCk7CiAgICAgICAgIHNldEF1dG9w
bGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50
ZWRBdXRvcGxheSk7CkBAIC0zNzMyLDcgKzM3MzQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnNldE11dGVkKGJvb2wgbXV0ZWQpCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKICAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiAjZW5kaWYKLSAgICAgICAg
bV9tZWRpYVNlc3Npb24tPmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKKyAgICAgICAgbWVkaWFT
ZXNzaW9uKCkuY2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOwogICAgICAgICB1cGRhdGVTbGVlcERp
c2FibGluZygpOwogICAgIH0KIApAQCAtMzc4Nyw3ICszNzg5LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpiZWdpblNjcnViYmluZygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX21lZGlh
U2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpS
ZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOworICAgIG1lZGlhU2Vz
c2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVx
dWlyZVVzZXJHZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKIH0KIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcoKQpAQCAtMzk0MSw3ICszOTQzLDcgQEAgZG91Ymxl
IEhUTUxNZWRpYUVsZW1lbnQ6OnBlcmNlbnRMb2FkZWQoKSBjb25zdAogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6Om1lZGlhUGxheWVyRGlkQWRkQXVkaW9UcmFjayhBdWRpb1RyYWNrUHJpdmF0ZSYg
dHJhY2spCiB7Ci0gICAgaWYgKGlzUGxheWluZygpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxheWJh
Y2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7Cisg
ICAgaWYgKGlzUGxheWluZygpICYmICFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hhbmdl
UGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpIHsKICAgICAgICAgc2NoZWR1
bGVSZWplY3RQZW5kaW5nUGxheVByb21pc2VzKERPTUV4Y2VwdGlvbjo6Y3JlYXRlKE5vdEFsbG93
ZWRFcnJvcikpOwogICAgICAgICBwYXVzZUludGVybmFsKCk7CiAgICAgICAgIHNldEF1dG9wbGF5
RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50ZWRB
dXRvcGxheSk7CkBAIC00Njg1LDcgKzQ2ODcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNv
dXJjZVdhc0FkZGVkKEhUTUxTb3VyY2VFbGVtZW50JiBzb3VyY2UpCiAgICAgaWYgKG1fbmV0d29y
a1N0YXRlID09IE5FVFdPUktfRU1QVFkpIHsKICAgICAgICAgbV9uZXh0Q2hpbGROb2RlVG9Db25z
aWRlciA9ICZzb3VyY2U7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKG1f
bWVkaWFTZXNzaW9uLT5kYXRhTG9hZGluZ1Blcm1pdHRlZCgpKQorICAgICAgICBpZiAobWVkaWFT
ZXNzaW9uKCkuZGF0YUxvYWRpbmdQZXJtaXR0ZWQoKSkKICNlbmRpZgogICAgICAgICAgICAgc2Vs
ZWN0TWVkaWFSZXNvdXJjZSgpOwogICAgICAgICByZXR1cm47CkBAIC00NzgzLDcgKzQ3ODUsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyVGltZUNoYW5nZWQoKQogICAgICAg
ICAgICAgICAgIC8vIGNoYW5nZXMgcGF1c2VkIHRvIHRydWUgYW5kIGZpcmVzIGEgc2ltcGxlIGV2
ZW50IG5hbWVkIHBhdXNlIGF0IHRoZSBtZWRpYSBlbGVtZW50LgogICAgICAgICAgICAgICAgIG1f
cGF1c2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMo
KS5wYXVzZUV2ZW50KTsKLSAgICAgICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2ls
bFBhdXNlUGxheWJhY2soKTsKKyAgICAgICAgICAgICAgICBtZWRpYVNlc3Npb24oKS5jbGllbnRX
aWxsUGF1c2VQbGF5YmFjaygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gUXVldWUg
YSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgZW5kZWQgYXQgdGhlIG1lZGlhIGVs
ZW1lbnQuCiAgICAgICAgICAgICBpZiAoIW1fc2VudEVuZEV2ZW50KSB7CkBAIC00ODMyLDcgKzQ4
MzQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEJlaGF2aW9yUmVzdHJpY3Rpb25zT25F
bmRJZk5lY2Vzc2FyeSgpCiAgICAgaWYgKGlzRnVsbHNjcmVlbigpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1l
bnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOwor
ICAgIG1lZGlhU2Vzc2lvbigpLmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKICAgICBt
X3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZpb3JSZXN0cmljdGlvbnNUaW1lci5zdG9wKCk7
CiAgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zVGltZXIu
c3RhcnRPbmVTaG90KGhpZGVNZWRpYUNvbnRyb2xzQWZ0ZXJFbmRlZERlbGF5KTsKIH0KQEAgLTQ4
NjIsNyArNDg2NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2Vla1RvUGxheWJhY2tQb3Np
dGlvbkVuZGVkVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX2lzU2NydWJiaW5nUmVtb3RlbHkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnNlc3Npb25EaWRFbmRSZW1vdGVTY3J1YmJpbmcoKm1fbWVkaWFTZXNzaW9uKTsK
KyAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5zZXNzaW9u
RGlkRW5kUmVtb3RlU2NydWJiaW5nKG1lZGlhU2Vzc2lvbigpKTsKICAgICBtX2lzU2NydWJiaW5n
UmVtb3RlbHkgPSBmYWxzZTsKICAgICBtX3NlZWtUb1BsYXliYWNrUG9zaXRpb25FbmRlZFRpbWVy
LnN0b3AoKTsKICNlbmRpZgpAQCAtNTA0MCw3ICs1MDQyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYUVuZ2luZVdhc1VwZGF0ZWQoKQogICAgIHVwZGF0ZVJlbmRlcmVyKCk7CiAgICAg
ZW5kUHJvY2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2soKTsKIAotICAgIG1fbWVkaWFTZXNzaW9u
LT5tZWRpYUVuZ2luZVVwZGF0ZWQoKTsKKyAgICBtZWRpYVNlc3Npb24oKS5tZWRpYUVuZ2luZVVw
ZGF0ZWQoKTsKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgaWYgKG1fcGxheWVy
ICYmIG1fbWVkaWFLZXlzKQpAQCAtNTEyMiw3ICs1MTI0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYVBsYXllckNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpCiAKICAgICB1cGRhdGVSZW5k
ZXJlcigpOwogCi0gICAgaWYgKCFwYXVzZWQoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBsYXliYWNr
U3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkgeworICAg
IGlmICghcGF1c2VkKCkgJiYgIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJt
aXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkgewogICAgICAgICBzY2hlZHVsZVJl
amVjdFBlbmRpbmdQbGF5UHJvbWlzZXMoRE9NRXhjZXB0aW9uOjpjcmVhdGUoTm90QWxsb3dlZEVy
cm9yKSk7CiAgICAgICAgIHBhdXNlSW50ZXJuYWwoKTsKICAgICAgICAgc2V0QXV0b3BsYXlFdmVu
dFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRlZEF1dG9w
bGF5KTsKQEAgLTUyNjcsNyArNTI2OSw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6c3RvcHBl
ZER1ZVRvRXJyb3JzKCkgY29uc3QKIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZWRGb3JV
c2VySW50ZXJhY3Rpb24oKSBjb25zdAogewotICAgIGlmIChtX21lZGlhU2Vzc2lvbi0+c3RhdGUo
KSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQpCisgICAgaWYgKG1lZGlhU2Vz
c2lvbigpLnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGVkKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTUzMzgsNyArNTM0MCw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKIAogICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUiwgInNob3VsZEJlUGxheWluZyA9ICIsIHNob3VsZEJlUGxheWlu
ZywgIiwgcGxheWVyUGF1c2VkID0gIiwgcGxheWVyUGF1c2VkKTsKIAotICAgIGlmIChzaG91bGRC
ZVBsYXlpbmcgJiYgcGxheWVyUGF1c2VkICYmIG1fbWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxz
Y3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgJiYgKG1fd2FpdGluZ1RvRW50ZXJGdWxsc2NyZWVuIHx8
ICFpc0Z1bGxzY3JlZW4oKSkpIHsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nICYmIHBsYXllclBh
dXNlZCAmJiBtZWRpYVNlc3Npb24oKS5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNr
KCkgJiYgKG1fd2FpdGluZ1RvRW50ZXJGdWxsc2NyZWVuIHx8ICFpc0Z1bGxzY3JlZW4oKSkpIHsK
ICAgICAgICAgaWYgKCFtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbikKICAgICAgICAgICAgIGVu
dGVyRnVsbHNjcmVlbigpOwogCkBAIC01MzU0LDcgKzUzNTYsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgIGludmFsaWRhdGVDYWNoZWRUaW1lKCk7
CiAKICAgICAgICAgaWYgKHBsYXllclBhdXNlZCkgewotICAgICAgICAgICAgbV9tZWRpYVNlc3Np
b24tPmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCk7CisgICAgICAgICAgICBtZWRpYVNlc3Npb24o
KS5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpOwogCiAgICAgICAgICAgICAvLyBTZXQgcmF0ZSwg
bXV0ZWQgYW5kIHZvbHVtZSBiZWZvcmUgY2FsbGluZyBwbGF5IGluIGNhc2UgdGhleSB3ZXJlIHNl
dCBiZWZvcmUgdGhlIG1lZGlhIGVuZ2luZSB3YXMgc2V0IHVwLgogICAgICAgICAgICAgLy8gVGhl
IG1lZGlhIGVuZ2luZSBzaG91bGQganVzdCBzdGFzaCB0aGUgcmF0ZSwgbXV0ZWQgYW5kIHZvbHVt
ZSB2YWx1ZXMgc2luY2UgaXQgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nLgpAQCAtNTQwMSw3ICs1NDAz
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjaGVja0ZvckF1ZGlvQW5kVmlkZW8oKQogewog
ICAgIG1faGFzRXZlckhhZEF1ZGlvIHw9IGhhc0F1ZGlvKCk7CiAgICAgbV9oYXNFdmVySGFkVmlk
ZW8gfD0gaGFzVmlkZW8oKTsKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2FuUHJvZHVjZUF1ZGlvQ2hh
bmdlZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKIH0K
IAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRQbGF5aW5nKGJvb2wgcGxheWluZykKQEAgLTU1
MjgsNyArNTUzMCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBsYXllcigp
CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBpZiAoaGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hh
bmdlZEV2ZW50KSB8fCBtX3JlbW90ZS0+aGFzQXZhaWxhYmlsaXR5Q2FsbGJhY2tzKCkpIHsKICAg
ICAgICAgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IGZhbHNlOwot
ICAgICAgICBtX21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlM
aXN0ZW5lcnMoZmFsc2UpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5zZXRIYXNQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhmYWxzZSk7CiAKICAgICAgICAgLy8gU2VuZCBhbiBh
dmFpbGFiaWxpdHkgZXZlbnQgaW4gY2FzZSBzY3JpcHRzIHdhbnQgdG8gaGlkZSB0aGUgcGlja2Vy
IHdoZW4gdGhlIGVsZW1lbnQKICAgICAgICAgLy8gZG9lc24ndCBzdXBwb3J0IHBsYXliYWNrIHRv
IGEgdGFyZ2V0LgpAQCAtNTU1OSw4ICs1NTYxLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpj
bGVhck1lZGlhUGxheWVyKCkKICAgICBpZiAobV90ZXh0VHJhY2tzKQogICAgICAgICBjb25maWd1
cmVUZXh0VHJhY2tEaXNwbGF5KCk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50Q2hhcmFj
dGVyaXN0aWNzQ2hhbmdlZCgpOwotICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNlQXVkaW9D
aGFuZ2VkKCk7CisgICAgbWVkaWFTZXNzaW9uKCkuY2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdl
ZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKIAogICAg
IG1fcmVzb3VyY2VTZWxlY3Rpb25UYXNrUXVldWUuY2FuY2VsQWxsVGFza3MoKTsKIApAQCAtNTU4
Nyw3ICs1NTg5LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdG9wV2l0aG91dERlc3Ryb3lp
bmdNZWRpYVBsYXllcigpCiAgICAgLy8gU3RvcCB0aGUgcGxheWJhY2sgd2l0aG91dCBnZW5lcmF0
aW5nIGV2ZW50cwogICAgIHNldFBsYXlpbmcoZmFsc2UpOwogICAgIHBhdXNlQW5kVXBkYXRlUGxh
eVN0YXRlSW1tZWRpYXRlbHkoKTsKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbEJlRE9N
U3VzcGVuZGVkKCk7CisgICAgaWYgKG1fbWVkaWFTZXNzaW9uKQorICAgICAgICBtX21lZGlhU2Vz
c2lvbi0+Y2xpZW50V2lsbEJlRE9NU3VzcGVuZGVkKCk7CiAKICAgICBzZXRBdXRvcGxheUV2ZW50
UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6Tm9uZSk7CiAKQEAgLTU2
NDcsNyArNTY1MCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c3RvcCgpCiAgICAgLy8gbG9h
ZGVkIGFuZCBjYWxsaW5nIGl0IGFnYWluIHdvbid0IGNhdXNlIGFueSBwcm9ibGVtcy4KICAgICBj
bGVhck1lZGlhUGxheWVyKCk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+c3RvcFNlc3Npb24oKTsK
KyAgICBpZiAobV9tZWRpYVNlc3Npb24pCisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zdG9wU2Vz
c2lvbigpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnN1c3BlbmQoUmVhc29uRm9yU3Vz
cGVuc2lvbiByZWFzb24pCkBAIC01NjYxLDcgKzU2NjUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAgICAgY2FzZSBSZWFzb25G
b3JTdXNwZW5zaW9uOjpCYWNrRm9yd2FyZENhY2hlOgogICAgICAgICBzdG9wV2l0aG91dERlc3Ry
b3lpbmdNZWRpYVBsYXllcigpOwogICAgICAgICBzZXRCdWZmZXJpbmdQb2xpY3koQnVmZmVyaW5n
UG9saWN5OjpNYWtlUmVzb3VyY2VzUHVyZ2VhYmxlKTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24t
PmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VD
b25zZW50VG9SZXN1bWVNZWRpYSk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLmFkZEJlaGF2aW9y
UmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1
bWVNZWRpYSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVhc29uRm9yU3VzcGVuc2lvbjo6
UGFnZVdpbGxCZVN1c3BlbmRlZDoKICAgICBjYXNlIFJlYXNvbkZvclN1c3BlbnNpb246OkphdmFT
Y3JpcHREZWJ1Z2dlclBhdXNlZDoKQEAgLTU2NzcsMTMgKzU2ODEsMTMgQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpyZXN1bWUoKQogCiAgICAgc2V0SW5BY3RpdmVEb2N1bWVudCh0cnVlKTsKIAot
ICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmco
KSkKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1p
bmcoKSkKICAgICAgICAgZG9jdW1lbnQoKS5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMp
OwogICAgIGVsc2UKICAgICAgICAgc2V0UGF1c2VkSW50ZXJuYWwoZmFsc2UpOwogCi0gICAgbV9t
ZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lv
bjo6UmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYSk7Ci0gICAgbV9tZWRpYVNlc3Npb24t
PnVwZGF0ZUJ1ZmZlcmluZ1BvbGljeSgpOworICAgIG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2
aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9S
ZXN1bWVNZWRpYSk7CisgICAgbWVkaWFTZXNzaW9uKCkudXBkYXRlQnVmZmVyaW5nUG9saWN5KCk7
CiAKICAgICBpZiAobV9lcnJvciAmJiBtX2Vycm9yLT5jb2RlKCkgPT0gTWVkaWFFcnJvcjo6TUVE
SUFfRVJSX0FCT1JURUQgJiYgIW1fcmVzdW1lVGFza1F1ZXVlLmhhc1BlbmRpbmdUYXNrKCkpIHsK
ICAgICAgICAgLy8gUmVzdGFydCB0aGUgbG9hZCBpZiBpdCB3YXMgYWJvcnRlZCBpbiB0aGUgbWlk
ZGxlIGJ5IG1vdmluZyB0aGUgZG9jdW1lbnQgdG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KQEAg
LTU3MjQsNyArNTcyOCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dmlzaWJpbGl0eVN0YXRl
Q2hhbmdlZCgpCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAidmlzaWJsZSA9ICIsICFt
X2VsZW1lbnRJc0hpZGRlbik7CiAKICAgICB1cGRhdGVTbGVlcERpc2FibGluZygpOwotICAgIG1f
bWVkaWFTZXNzaW9uLT52aXNpYmlsaXR5Q2hhbmdlZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLnZp
c2liaWxpdHlDaGFuZ2VkKCk7CiAgICAgaWYgKG1fcGxheWVyKQogICAgICAgICBtX3BsYXllci0+
c2V0VmlzaWJsZSghbV9lbGVtZW50SXNIaWRkZW4pOwogCkBAIC01NzMyLDEwICs1NzM2LDEwIEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgpCiAgICAgaWYg
KCFpc1BsYXlpbmdBdWRpbykgewogICAgICAgICBpZiAobV9lbGVtZW50SXNIaWRkZW4pIHsKICAg
ICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgIlN1c3BlbmRpbmcgcGxheWJhY2sg
YWZ0ZXIgZ29pbmcgdG8gdGhlIGJhY2tncm91bmQiKTsKLSAgICAgICAgICAgIG1fbWVkaWFTZXNz
aW9uLT5iZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6RW50ZXJpbmdCYWNr
Z3JvdW5kKTsKKyAgICAgICAgICAgIG1lZGlhU2Vzc2lvbigpLmJlZ2luSW50ZXJydXB0aW9uKFBs
YXRmb3JtTWVkaWFTZXNzaW9uOjpFbnRlcmluZ0JhY2tncm91bmQpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiUmVzdW1pbmcgcGxheWJh
Y2sgYWZ0ZXIgZW50ZXJpbmcgZm9yZWdyb3VuZCIpOwotICAgICAgICAgICAgbV9tZWRpYVNlc3Np
b24tPmVuZEludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWlu
Zyk7CisgICAgICAgICAgICBtZWRpYVNlc3Npb24oKS5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1N
ZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
NTc2OCwxMiArNTc3MiwxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OndlYmtpdFNob3dQbGF5
YmFja1RhcmdldFBpY2tlcigpCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBp
ZiAocHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKICAgICAgICAgcmVtb3ZlQmVoYXZp
b3JSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUoKTsKLSAgICBtX21lZGlhU2Vzc2lv
bi0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCk7CisgICAgbWVkaWFTZXNzaW9uKCkuc2hvd1Bs
YXliYWNrVGFyZ2V0UGlja2VyKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lyZWxl
c3NSb3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2UoKQogewotICAgIGJvb2wgaGFzVGFyZ2V0cyA9IG1f
bWVkaWFTZXNzaW9uLT5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygpOworICAgIGJvb2wgaGFz
VGFyZ2V0cyA9IG1lZGlhU2Vzc2lvbigpLmhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCk7CiAg
ICAgbV9yZW1vdGUtPmF2YWlsYWJpbGl0eUNoYW5nZWQoaGFzVGFyZ2V0cyk7CiAKICAgICBlbnF1
ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkRXZlbnQoKTsKQEAgLTU3OTcsOCAr
NTgwMSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0SXNQbGF5aW5nVG9XaXJlbGVzc1Rh
cmdldChib29sIGlzUGxheWluZ1RvV2lyZWxlc3NUYXJnCiAgICAgICAgIG1fcmVtb3RlLT5pc1Bs
YXlpbmdUb1JlbW90ZVRhcmdldENoYW5nZWQobV9pc1BsYXlpbmdUb1dpcmVsZXNzVGFyZ2V0KTsK
ICAgICAgICAgQUxXQVlTX0xPRyhsb2dTaXRlSWRlbnRpZmllciwgbV9pc1BsYXlpbmdUb1dpcmVs
ZXNzVGFyZ2V0KTsKICAgICAgICAgY29uZmlndXJlTWVkaWFDb250cm9scygpOwotICAgICAgICBt
X21lZGlhU2Vzc2lvbi0+aXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0Q2hhbmdlZCht
X2lzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpOwotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2Fu
UHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5pc1BsYXlpbmdU
b1dpcmVsZXNzUGxheWJhY2tUYXJnZXRDaGFuZ2VkKG1faXNQbGF5aW5nVG9XaXJlbGVzc1Rhcmdl
dCk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKICAg
ICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiAgICAgICAgIHVwZGF0ZVNsZWVwRGlz
YWJsaW5nKCk7CiAKQEAgLTU4NDYsNyArNTg1MCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6
YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIFJlZjxFdmVudExp
CiAKICAgICBpZiAoaXNGaXJzdEF2YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lcikgewogICAgICAg
ICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gdHJ1ZTsKLSAgICAg
ICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVu
ZXJzKHRydWUpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5zZXRIYXNQbGF5YmFja1RhcmdldEF2
YWlsYWJpbGl0eUxpc3RlbmVycyh0cnVlKTsKICAgICB9CiAKICAgICBBTFdBWVNfTE9HKExPR0lE
RU5USUZJRVIsICInd2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkJyIpOwpA
QCAtNTg3Miw3ICs1ODc2LDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVFdmVudExp
c3RlbmVyKGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXMKICAgICBBTFdBWVNf
TE9HKExPR0lERU5USUZJRVIsICJyZW1vdmVkIGxhc3QgbGlzdGVuZXIgPSAiLCBkaWRSZW1vdmVM
YXN0QXZhaWxhYmlsaXR5Q2hhbmdlZExpc3RlbmVyKTsKICAgICBpZiAoZGlkUmVtb3ZlTGFzdEF2
YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lcikgewogICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0
QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gZmFsc2U7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5z
ZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhmYWxzZSk7CisgICAgICAg
IG1lZGlhU2Vzc2lvbigpLnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJz
KGZhbHNlKTsKICAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiAgICAgfQogCkBA
IC01ODgxLDcgKzU4ODUsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUV2ZW50TGlz
dGVuZXIoY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpcwogCiB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVu
dCgpCiB7Ci0gICAgYm9vbCBoYXNUYXJnZXRzID0gbV9tZWRpYVNlc3Npb24tPmhhc1dpcmVsZXNz
UGxheWJhY2tUYXJnZXRzKCk7CisgICAgYm9vbCBoYXNUYXJnZXRzID0gbWVkaWFTZXNzaW9uKCku
aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKTsKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJ
RVIsICJoYXNUYXJnZXRzID0gIiwgaGFzVGFyZ2V0cyk7CiAgICAgYXV0byBldmVudCA9IFdlYktp
dFBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Vi
a2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQsIGhhc1RhcmdldHMpOwog
ICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CkBAIC01OTIwLDcgKzU5MjQsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnJlbW90ZUhhc0F2YWlsYWJpbGl0eUNhbGxiYWNrc0NoYW5nZWQoKQog
CiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiaGFzTGlzdGVuZXJzOiAiLCBoYXNMaXN0
ZW5lcnMpOwogICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBo
YXNMaXN0ZW5lcnM7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5TGlzdGVuZXJzKGhhc0xpc3RlbmVycyk7CisgICAgbWVkaWFTZXNzaW9uKCkuc2V0
SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoaGFzTGlzdGVuZXJzKTsKICAg
ICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUoKTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0lSRUxF
U1NfUExBWUJBQ0tfVEFSR0VUKQpAQCAtNjA3MSw3ICs2MDc1LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSB8fCAh
aXM8SFRNTFZpZGVvRWxlbWVudD4oKnRoaXMpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
IXBhdXNlZCgpICYmIG1fbWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1Bs
YXliYWNrKCkpIHsKKyAgICBpZiAoIXBhdXNlZCgpICYmIG1lZGlhU2Vzc2lvbigpLnJlcXVpcmVz
RnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSkgewogICAgICAgICBpZiAoIWRvY3VtZW50KCku
c2V0dGluZ3MoKS5hbGxvd3NJbmxpbmVNZWRpYVBsYXliYWNrQWZ0ZXJGdWxsc2NyZWVuKCkgfHwg
aXNWaWRlb1Rvb1NtYWxsRm9ySW5saW5lUGxheWJhY2soKSkKICAgICAgICAgICAgIHBhdXNlSW50
ZXJuYWwoKTsKICAgICAgICAgZWxzZSB7CkBAIC02NTA2LDcgKzY1MTAsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCkKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6c2hvdWxkRm9yY2VDb250cm9sc0Rp
c3BsYXkoKSBjb25zdAogewogICAgIC8vIEFsd2F5cyBjcmVhdGUgY29udHJvbHMgZm9yIGF1dG9w
bGF5IHZpZGVvIHRoYXQgcmVxdWlyZXMgdXNlciBnZXN0dXJlIGR1ZSB0byBiZWluZyBpbiBsb3cg
cG93ZXIgbW9kZS4KLSAgICByZXR1cm4gaXNWaWRlbygpICYmIGF1dG9wbGF5KCkgJiYgbV9tZWRp
YVNlc3Npb24tPmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVx
dWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9EdWVUb0xvd1Bvd2VyTW9kZSk7CisgICAgcmV0dXJuIGlz
VmlkZW8oKSAmJiBhdXRvcGxheSgpICYmIG1lZGlhU2Vzc2lvbigpLmhhc0JlaGF2aW9yUmVzdHJp
Y3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9EdWVU
b0xvd1Bvd2VyTW9kZSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVk
aWFDb250cm9scygpCkBAIC02NTE0LDcgKzY1MTgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OmNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKQogICAgIGJvb2wgcmVxdWlyZUNvbnRyb2xzID0gY29u
dHJvbHMoKTsKIAogICAgIC8vIEFsd2F5cyBjcmVhdGUgY29udHJvbHMgZm9yIHZpZGVvIHdoZW4g
ZnVsbHNjcmVlbiBwbGF5YmFjayBpcyByZXF1aXJlZC4KLSAgICBpZiAoaXNWaWRlbygpICYmIG1f
bWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCisgICAg
aWYgKGlzVmlkZW8oKSAmJiBtZWRpYVNlc3Npb24oKS5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRl
b1BsYXliYWNrKCkpCiAgICAgICAgIHJlcXVpcmVDb250cm9scyA9IHRydWU7CiAKICAgICBpZiAo
c2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKSkKQEAgLTY2MzUsNyArNjYzOSw3IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFQbGF5ZXIoKQogI2lmIEVOQUJMRShXSVJFTEVT
U19QTEFZQkFDS19UQVJHRVQpCiAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMo
KS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWRFdmVudCkgfHwgbV9yZW1v
dGUtPmhhc0F2YWlsYWJpbGl0eUNhbGxiYWNrcygpKSB7CiAgICAgICAgIG1faGFzUGxheWJhY2tU
YXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSB0cnVlOwotICAgICAgICBtX21lZGlhU2Vzc2lv
bi0+c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnModHJ1ZSk7CisgICAg
ICAgIG1lZGlhU2Vzc2lvbigpLnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVu
ZXJzKHRydWUpOwogICAgICAgICBlbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFu
Z2VkRXZlbnQoKTsgLy8gRW5zdXJlIHRoZSBldmVudCBsaXN0ZW5lciBnZXRzIGF0IGxlYXN0IG9u
ZSBldmVudC4KICAgICB9CiAjZW5kaWYKQEAgLTY5NDksNyArNjk1Myw3IEBAIGJvb2wgSFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJJc0Z1bGxzY3JlZW4oKSBjb25zdAogCiBib29sIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVySXNGdWxsc2NyZWVuUGVybWl0dGVkKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmZ1bGxzY3JlZW5QZXJtaXR0ZWQoKTsKKyAgICBy
ZXR1cm4gbWVkaWFTZXNzaW9uKCkuZnVsbHNjcmVlblBlcm1pdHRlZCgpOwogfQogCiBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVySXNWaWRlbygpIGNvbnN0CkBAIC03MTU3LDcgKzcx
NjEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb25z
QWZ0ZXJGaXJzdFVzZXJHZXN0dXJlKE1lZGlhRWxlbQogCiAgICAgbV9yZW1vdmVkQmVoYXZpb3JS
ZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUgPSB0cnVlOwogCi0gICAgbV9tZWRpYVNl
c3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zVG9SZW1vdmUpOwor
ICAgIG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25z
VG9SZW1vdmUpOwogICAgIGRvY3VtZW50KCkudG9wRG9jdW1lbnQoKS5ub3RlVXNlckludGVyYWN0
aW9uV2l0aE1lZGlhRWxlbWVudCgpOwogfQogCkBAIC03MTY5LDE0ICs3MTczLDE0IEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUmF0ZUNoYW5nZVJlc3RyaWN0aW9ucygpCiAKICAgICBj
b25zdCBhdXRvJiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50KCk7CiAgICAgaWYg
KHRvcERvY3VtZW50LnZpZGVvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkpCi0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Np
b246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvUmF0ZUNoYW5nZSk7CisgICAgICAgIG1lZGlh
U2Vzc2lvbigpLmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVx
dWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9SYXRlQ2hhbmdlKTsKICAgICBlbHNlCi0gICAgICAgIG1f
bWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Np
b246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvUmF0ZUNoYW5nZSk7CisgICAgICAgIG1lZGlh
U2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6
UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9SYXRlQ2hhbmdlKTsKIAogICAgIGlmICh0b3BEb2N1
bWVudC5hdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSgpKQotICAgICAgICBtX21lZGlh
U2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1
aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVDaGFuZ2UpOworICAgICAgICBtZWRpYVNlc3Npb24o
KS5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2Vy
R2VzdHVyZUZvckF1ZGlvUmF0ZUNoYW5nZSk7CiAgICAgZWxzZQotICAgICAgICBtX21lZGlhU2Vz
c2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1
aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVDaGFuZ2UpOworICAgICAgICBtZWRpYVNlc3Npb24o
KS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVV
c2VyR2VzdHVyZUZvckF1ZGlvUmF0ZUNoYW5nZSk7CiB9CiAKIFJlZlB0cjxWaWRlb1BsYXliYWNr
UXVhbGl0eT4gSFRNTE1lZGlhRWxlbWVudDo6Z2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKQpAQCAt
NzU0MSw3ICs3NTQ1LDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojppc1N1c3BlbmRlZCgpIGNv
bnN0CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIHNpemVfdCBIVE1MTWVkaWFFbGVtZW50Ojpt
YXhpbXVtU291cmNlQnVmZmVyU2l6ZShjb25zdCBTb3VyY2VCdWZmZXImIGJ1ZmZlcikgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPm1heGltdW1NZWRpYVNvdXJjZUJ1ZmZlclNp
emUoYnVmZmVyKTsKKyAgICByZXR1cm4gbWVkaWFTZXNzaW9uKCkubWF4aW11bU1lZGlhU291cmNl
QnVmZmVyU2l6ZShidWZmZXIpOwogfQogI2VuZGlmCiAKQEAgLTc3NDksNyArNzc1Myw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTdGF0ZSgpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fbWVkaWFTdGF0ZSA9IHN0YXRlOwotICAgIG1fbWVkaWFTZXNzaW9uLT5tZWRpYVN0
YXRlRGlkQ2hhbmdlKG1fbWVkaWFTdGF0ZSk7CisgICAgbWVkaWFTZXNzaW9uKCkubWVkaWFTdGF0
ZURpZENoYW5nZShtX21lZGlhU3RhdGUpOwogCiAgICAgZG9jdW1lbnQoKS51cGRhdGVJc1BsYXlp
bmdNZWRpYSgpOwogfQpAQCAtNzc2NywxMSArNzc3MSwxMSBAQCBNZWRpYVByb2R1Y2VyOjpNZWRp
YVN0YXRlRmxhZ3MgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTdGF0ZSgpIGNvbnN0CiAjaWYgRU5B
QkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBpZiAobV9oYXNQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUxpc3RlbmVycykgewogICAgICAgICBzdGF0ZSB8PSBIYXNQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUxpc3RlbmVyOwotICAgICAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT53
aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpKQorICAgICAgICBpZiAoIW1lZGlhU2Vzc2lv
bigpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkpCiAgICAgICAgICAgICBzdGF0ZSB8
PSBSZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9uaXRvcmluZzsKICAgICB9CiAKLSAgICBib29sIHJl
cXVpcmVVc2VyR2VzdHVyZSA9IG1fbWVkaWFTZXNzaW9uLT5oYXNCZWhhdmlvclJlc3RyaWN0aW9u
KE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQXV0b3BsYXlUb0V4dGVy
bmFsRGV2aWNlKTsKKyAgICBib29sIHJlcXVpcmVVc2VyR2VzdHVyZSA9IG1lZGlhU2Vzc2lvbigp
Lmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJH
ZXN0dXJlVG9BdXRvcGxheVRvRXh0ZXJuYWxEZXZpY2UpOwogICAgIGlmIChtX3JlYWR5U3RhdGUg
Pj0gSEFWRV9NRVRBREFUQSAmJiAhcmVxdWlyZVVzZXJHZXN0dXJlICYmICFtX2ZhaWxlZFRvUGxh
eVRvV2lyZWxlc3NUYXJnZXQpCiAgICAgICAgIHN0YXRlIHw9IEV4dGVybmFsRGV2aWNlQXV0b1Bs
YXlDYW5kaWRhdGU7CiAKQEAgLTc5MDUsNyArNzkwOSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6cHVyZ2VCdWZmZXJlZERhdGFJZlBvc3NpYmxlKCkKIHsKICAgICBBTFdBWVNfTE9HKExPR0lE
RU5USUZJRVIpOwogCi0gICAgaWYgKCFNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigp
LmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpICYmIG1fbWVkaWFTZXNzaW9uLT5wcmVmZXJyZWRCdWZm
ZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJpbmdQb2xpY3k6OkRlZmF1bHQpCisgICAgaWYgKCFNZW1v
cnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpICYm
IG1lZGlhU2Vzc2lvbigpLnByZWZlcnJlZEJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlcmluZ1Bv
bGljeTo6RGVmYXVsdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlzUGxheWluZ1RvRXh0
ZXJuYWxUYXJnZXQoKSkgewpAQCAtNzkyNiw3ICs3OTMwLDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVt
ZW50OjpjYW5TYXZlTWVkaWFEYXRhKCkgY29uc3QKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojph
bGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkKCkKIHsKLSAgICBpZiAocG90
ZW50aWFsbHlQbGF5aW5nKCkgJiYgbV9tZWRpYVNlc3Npb24tPnJlcXVpcmVzRnVsbHNjcmVlbkZv
clZpZGVvUGxheWJhY2soKSAmJiAhaXNGdWxsc2NyZWVuKCkpCisgICAgaWYgKHBvdGVudGlhbGx5
UGxheWluZygpICYmIG1lZGlhU2Vzc2lvbigpLnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxh
eWJhY2soKSAmJiAhaXNGdWxsc2NyZWVuKCkpCiAgICAgICAgIGVudGVyRnVsbHNjcmVlbigpOwog
fQogCkBAIC03OTQ0LDcgKzc5NDgsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzVmlkZW9U
b29TbWFsbEZvcklubGluZVBsYXliYWNrKCkKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6aXNWaXNp
YmxlSW5WaWV3cG9ydENoYW5nZWQoKQogewogICAgIG1fdmlzaWJpbGl0eUNoYW5nZVRhc2tRdWV1
ZS5lbnF1ZXVlVGFzayhbdGhpc10gewotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+aXNWaXNpYmxl
SW5WaWV3cG9ydENoYW5nZWQoKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuaXNWaXNpYmxlSW5W
aWV3cG9ydENoYW5nZWQoKTsKICAgICAgICAgdXBkYXRlU2hvdWxkQXV0b3BsYXkoKTsKICAgICAg
ICAgc2NoZWR1bGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclVwZGF0ZSgpOwogICAgIH0pOwpAQCAt
Nzk1NSwyMiArNzk1OSwyMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVNob3VsZEF1
dG9wbGF5KCkKICAgICBpZiAoIWF1dG9wbGF5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlm
ICghbV9tZWRpYVNlc3Npb24tPmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6SW52aXNpYmxlQXV0b3BsYXlOb3RQZXJtaXR0ZWQpKQorICAgIGlmICghbWVkaWFTZXNz
aW9uKCkuaGFzQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpJbnZpc2li
bGVBdXRvcGxheU5vdFBlcm1pdHRlZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2Fu
QXV0b3BsYXkgPSBtZWRpYVNlc3Npb24oKS5hdXRvcGxheVBlcm1pdHRlZCgpOwogICAgIGlmIChj
YW5BdXRvcGxheQotICAgICAgICAmJiBtX21lZGlhU2Vzc2lvbi0+c3RhdGUoKSA9PSBQbGF0Zm9y
bU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQKLSAgICAgICAgJiYgbV9tZWRpYVNlc3Npb24tPmlu
dGVycnVwdGlvblR5cGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW52aXNpYmxlQXV0b3Bs
YXkpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRp
YVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOworICAgICAgICAmJiBtZWRpYVNlc3Npb24oKS5z
dGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZAorICAgICAgICAmJiBt
ZWRpYVNlc3Npb24oKS5pbnRlcnJ1cHRpb25UeXBlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246
OkludmlzaWJsZUF1dG9wbGF5KQorICAgICAgICBtZWRpYVNlc3Npb24oKS5lbmRJbnRlcnJ1cHRp
b24oUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOwogICAgIGVsc2UgaWYg
KCFjYW5BdXRvcGxheQotICAgICAgICAmJiBtX21lZGlhU2Vzc2lvbi0+c3RhdGUoKSAhPSBQbGF0
Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5i
ZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW52aXNpYmxlQXV0b3BsYXkp
OworICAgICAgICAmJiBtZWRpYVNlc3Npb24oKS5zdGF0ZSgpICE9IFBsYXRmb3JtTWVkaWFTZXNz
aW9uOjpJbnRlcnJ1cHRlZCkKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuYmVnaW5JbnRlcnJ1cHRp
b24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkludmlzaWJsZUF1dG9wbGF5KTsKIH0KIAogdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVTaG91bGRQbGF5KCkKIHsKLSAgICBpZiAoIXBhdXNlZCgp
ICYmICFtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBs
YXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CisgICAgaWYgKCFwYXVzZWQoKSAmJiAhbWVkaWFTZXNz
aW9uKCkucGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBs
YXlpbmcpKSB7CiAgICAgICAgIHNjaGVkdWxlUmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhET01F
eGNlcHRpb246OmNyZWF0ZShOb3RBbGxvd2VkRXJyb3IpKTsKICAgICAgICAgcGF1c2VJbnRlcm5h
bCgpOwogICAgICAgICBzZXRBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50
UGxheWJhY2tTdGF0ZTo6UHJldmVudGVkQXV0b3BsYXkpOwpAQCAtODAwMywxNiArODAwNywxNiBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZpb3JS
ZXN0cmljdGlvbnNUaW1lckZpcmVkKCkKICAgICBpZiAobV9wbGF5YmFja0NvbnRyb2xzTWFuYWdl
ckJlaGF2aW9yUmVzdHJpY3Rpb25zUXVldWUuaGFzUGVuZGluZ1Rhc2soKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+aGFzQmVoYXZpb3JSZXN0cmljdGlvbihN
ZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01h
bmFnZXIpKQorICAgIGlmICghbWVkaWFTZXNzaW9uKCkuaGFzQmVoYXZpb3JSZXN0cmljdGlvbihN
ZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01h
bmFnZXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4g
cHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZp
b3JSZXN0cmljdGlvbnNRdWV1ZS5zY2hlZHVsZVRhc2soW3Byb3RlY3RlZFRoaXNdICgpIHsKLSAg
ICAgICAgTWVkaWFFbGVtZW50U2Vzc2lvbiogbWVkaWFFbGVtZW50U2Vzc2lvbiA9IHByb3RlY3Rl
ZFRoaXMtPm1fbWVkaWFTZXNzaW9uLmdldCgpOwotICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+
aXNQbGF5aW5nKCkgfHwgbWVkaWFFbGVtZW50U2Vzc2lvbi0+c3RhdGUoKSA9PSBQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbjo6QXV0b3BsYXlpbmcgfHwgbWVkaWFFbGVtZW50U2Vzc2lvbi0+c3RhdGUoKSA9
PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UGxheWluZykKKyAgICAgICAgYXV0byYgbWVkaWFFbGVt
ZW50U2Vzc2lvbiA9IHByb3RlY3RlZFRoaXMtPm1lZGlhU2Vzc2lvbigpOworICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+aXNQbGF5aW5nKCkgfHwgbWVkaWFFbGVtZW50U2Vzc2lvbi5zdGF0ZSgp
ID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpBdXRvcGxheWluZyB8fCBtZWRpYUVsZW1lbnRTZXNz
aW9uLnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXlpbmcpCiAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgbWVkaWFFbGVtZW50U2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0
cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlUGxheWJhY2tUb0NvbnRyb2xDb250
cm9sc01hbmFnZXIpOworICAgICAgICBtZWRpYUVsZW1lbnRTZXNzaW9uLmFkZEJlaGF2aW9yUmVz
dHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBsYXliYWNrVG9Db250cm9sQ29u
dHJvbHNNYW5hZ2VyKTsKICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2NoZWR1bGVQbGF5YmFja0Nv
bnRyb2xzTWFuYWdlclVwZGF0ZSgpOwogICAgIH0pOwogfQpAQCAtODA3OSw3ICs4MDgzLDggQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRJbkFjdGl2ZURvY3VtZW50KGJvb2wgaW5BY3RpdmVE
b2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pbkFjdGl2ZURvY3VtZW50ID0gaW5B
Y3RpdmVEb2N1bWVudDsKLSAgICBtX21lZGlhU2Vzc2lvbi0+aW5BY3RpdmVEb2N1bWVudENoYW5n
ZWQoKTsKKyAgICBpZiAobV9tZWRpYVNlc3Npb24pCisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5p
bkFjdGl2ZURvY3VtZW50Q2hhbmdlZCgpOwogfQogCiBIVE1MTWVkaWFFbGVtZW50RW51bXM6OkJ1
ZmZlcmluZ1BvbGljeSBIVE1MTWVkaWFFbGVtZW50OjpidWZmZXJpbmdQb2xpY3koKSBjb25zdApA
QCAtODEyOSw2ICs4MTM0LDEzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0U2hvd1Bvc3Rl
ckZsYWcoYm9vbCBmbGFnKQogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24o
KTsKIH0KIAorTWVkaWFFbGVtZW50U2Vzc2lvbiYgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTZXNz
aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFTZXNzaW9uKQorICAgICAgICBjb25zdF9j
YXN0PEhUTUxNZWRpYUVsZW1lbnQmPigqdGhpcykuZmluaXNoSW5pdGlhbGl6YXRpb24oKTsKKyAg
ICByZXR1cm4gKm1fbWVkaWFTZXNzaW9uOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuaAppbmRleCA2NDcyNGViYjk0ZWIuLjJhNGFkNjNlMzA3OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTQ5MCw3ICs0OTAsNyBA
QCBwdWJsaWM6CiAgICAgUmVmUHRyPFZpZGVvUGxheWJhY2tRdWFsaXR5PiBnZXRWaWRlb1BsYXli
YWNrUXVhbGl0eSgpOwogCiAgICAgTWVkaWFQbGF5ZXI6OlByZWxvYWQgcHJlbG9hZFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9wcmVsb2FkOyB9Ci0gICAgTWVkaWFFbGVtZW50U2Vzc2lvbiYgbWVk
aWFTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4gKm1fbWVkaWFTZXNzaW9uOyB9CisgICAgV0VCQ09S
RV9FWFBPUlQgTWVkaWFFbGVtZW50U2Vzc2lvbiYgbWVkaWFTZXNzaW9uKCkgY29uc3Q7CiAKICAg
ICB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKICAgICB2b2lkIHVzZXJJbnRlcmZhY2VM
YXlvdXREaXJlY3Rpb25DaGFuZ2VkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxWaWRlb0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcAppbmRleCA5YzNmZDVhNjNkMzkuLmIyY2ViMWM1ZDliNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBAIC03OSw3ICs3OSw2IEBAIFJlZjxIVE1MVmlk
ZW9FbGVtZW50PiBIVE1MVmlkZW9FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jCiAgICAgSFRNTFZpZGVvRWxlbWVudFBpY3R1cmVJblBpY3R1cmU6OnByb3Zp
ZGVQaWN0dXJlSW5QaWN0dXJlVG8odmlkZW9FbGVtZW50KTsKICNlbmRpZgogCi0gICAgdmlkZW9F
bGVtZW50LT5maW5pc2hJbml0aWFsaXphdGlvbigpOwogICAgIHZpZGVvRWxlbWVudC0+c3VzcGVu
ZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIHZpZGVvRWxlbWVudDsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426634</attachid>
            <date>2021-04-20 19:26:54 -0700</date>
            <delta_ts>2021-04-21 08:09:27 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>224843_amazon_noGPUprocess_v3.patch</filename>
            <type>text/plain</type>
            <size>35347</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwCmluZGV4IDU5ZTYxYzMxZTNh
ZS4uNTA0OTVjMTdiOWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5j
cHAKQEAgLTQ3LDcgKzQ3LDYgQEAgaW5saW5lIEhUTUxBdWRpb0VsZW1lbnQ6OkhUTUxBdWRpb0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQKIFJlZjxIVE1MQXVk
aW9FbGVtZW50PiBIVE1MQXVkaW9FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKICAg
ICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IEhUTUxBdWRpb0VsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikpOwotICAgIGVsZW1lbnQtPmZpbmlzaEluaXRpYWxp
emF0aW9uKCk7CiAgICAgZWxlbWVudC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIGVs
ZW1lbnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAz
MjU4ZWZkZjQxZmIuLmU2ZmM3OGE2MzM0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpm
aW5pc2hJbml0aWFsaXphdGlvbigpCiAgICAgQXVkaW9TZXNzaW9uOjpzaGFyZWRTZXNzaW9uKCku
YWRkTXV0ZWRTdGF0ZU9ic2VydmVyKHRoaXMpOwogI2VuZGlmCiAKLSAgICBtZWRpYVNlc3Npb24o
KS5jbGllbnRXaWxsQmVnaW5BdXRvcGxheWluZygpOworICAgIG1fbWVkaWFTZXNzaW9uLT5jbGll
bnRXaWxsQmVnaW5BdXRvcGxheWluZygpOwogfQogCiBIVE1MTWVkaWFFbGVtZW50Ojp+SFRNTE1l
ZGlhRWxlbWVudCgpCkBAIC01MzksNyArNTM5LDggQEAgSFRNTE1lZGlhRWxlbWVudDo6fkhUTUxN
ZWRpYUVsZW1lbnQoKQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAg
aWYgKGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2
YWlsYWJpbGl0eWNoYW5nZWRFdmVudCkgfHwgbV9yZW1vdGUtPmhhc0F2YWlsYWJpbGl0eUNhbGxi
YWNrcygpKSB7CiAgICAgICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5l
cnMgPSBmYWxzZTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0
QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGZhbHNlKTsKKyAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9u
KQorICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5TGlzdGVuZXJzKGZhbHNlKTsKICAgICAgICAgdXBkYXRlTWVkaWFTdGF0ZSgpOwogICAg
IH0KICNlbmRpZgpAQCAtNjIzLDcgKzYyNCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVn
aXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGRvY3VtZW50LnJl
Z2lzdGVyTWVkaWFFbGVtZW50KCp0aGlzKTsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT5yZWdpc3Rl
cldpdGhEb2N1bWVudChkb2N1bWVudCk7CisgICAgbWVkaWFTZXNzaW9uKCkucmVnaXN0ZXJXaXRo
RG9jdW1lbnQoZG9jdW1lbnQpOwogCiAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0
YXJ0KQogICAgICAgICBkb2N1bWVudC5hZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwpA
QCAtNjQ0LDcgKzY0NSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3RlcldpdGhE
b2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgZG9jdW1lbnQudW5yZWdpc3Rlck1l
ZGlhRWxlbWVudCgqdGhpcyk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+dW5yZWdpc3RlcldpdGhE
b2N1bWVudChkb2N1bWVudCk7CisgICAgaWYgKG1fbWVkaWFTZXNzaW9uKQorICAgICAgICBtX21l
ZGlhU2Vzc2lvbi0+dW5yZWdpc3RlcldpdGhEb2N1bWVudChkb2N1bWVudCk7CiAKICAgICBpZiAo
bV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCiAgICAgICAgIGRvY3VtZW50LnJlbW92ZU1l
ZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CkBAIC02ODAsMTIgKzY4MiwxMiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVu
dCwgRG9jdW1lbnQmIG5ldwogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByZXBhcmVGb3JEb2N1
bWVudFN1c3BlbnNpb24oKQogewotICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lzdGVyV2l0aERv
Y3VtZW50KGRvY3VtZW50KCkpOworICAgIG1lZGlhU2Vzc2lvbigpLnVucmVnaXN0ZXJXaXRoRG9j
dW1lbnQoZG9jdW1lbnQoKSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lRnJv
bURvY3VtZW50U3VzcGVuc2lvbigpCiB7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnJlZ2lzdGVyV2l0
aERvY3VtZW50KGRvY3VtZW50KCkpOworICAgIG1lZGlhU2Vzc2lvbigpLnJlZ2lzdGVyV2l0aERv
Y3VtZW50KGRvY3VtZW50KCkpOwogICAgIHVwZGF0ZVNob3VsZEF1dG9wbGF5KCk7CiB9CiAKQEAg
LTczOCw3ICs3NDAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21TdHJpbgogCiAgICAgICAgIC8vIFRo
ZSBhdHRyaWJ1dGUgbXVzdCBiZSBpZ25vcmVkIGlmIHRoZSBhdXRvcGxheSBhdHRyaWJ1dGUgaXMg
cHJlc2VudAogICAgICAgICBpZiAoIWF1dG9wbGF5KCkgJiYgIW1faGF2ZVByZXBhcmVkVG9QbGF5
ICYmIG1fcGxheWVyKQotICAgICAgICAgICAgbV9wbGF5ZXItPnNldFByZWxvYWQobV9tZWRpYVNl
c3Npb24tPmVmZmVjdGl2ZVByZWxvYWRGb3JFbGVtZW50KCkpOworICAgICAgICAgICAgbV9wbGF5
ZXItPnNldFByZWxvYWQobWVkaWFTZXNzaW9uKCkuZWZmZWN0aXZlUHJlbG9hZEZvckVsZW1lbnQo
KSk7CiAKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gbWVkaWFncm91cEF0dHIpCiAgICAgICAgIHNl
dE1lZGlhR3JvdXAodmFsdWUpOwpAQCAtODAwLDcgKzgwMiw3IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpCiAgICAgaWYgKCFtX2V4cGxpY2l0bHlNdXRl
ZCkgewogICAgICAgICBtX2V4cGxpY2l0bHlNdXRlZCA9IHRydWU7CiAgICAgICAgIG1fbXV0ZWQg
PSBoYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKG11dGVkQXR0cik7Ci0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CisgICAgICAgIG1lZGlh
U2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKICAgICB9CiAKICAgICBjb25maWd1
cmVNZWRpYUNvbnRyb2xzKCk7CkBAIC0xMjA2LDcgKzEyMDgsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnByZXBhcmVGb3JMb2FkKCkKICAgICAgICAgLy8gOSAtIEludm9rZSB0aGUgbWVkaWEg
ZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlvbiBhbGdvcml0aG0uCiAgICAgICAgIC8vIE5vdGUs
IHVubGVzcyB0aGUgcmVzdHJpY3Rpb24gb24gcmVxdWlyaW5nIHVzZXIgYWN0aW9uIGhhcyBiZWVu
IHJlbW92ZWQsCiAgICAgICAgIC8vIGRvIG5vdCBiZWdpbiBkb3dubG9hZGluZyBkYXRhLgotICAg
ICAgICBpZiAobV9tZWRpYVNlc3Npb24tPmRhdGFMb2FkaW5nUGVybWl0dGVkKCkpCisgICAgICAg
IGlmIChtZWRpYVNlc3Npb24oKS5kYXRhTG9hZGluZ1Blcm1pdHRlZCgpKQogICAgICAgICAgICAg
c2VsZWN0TWVkaWFSZXNvdXJjZSgpOwogICAgIH0KIApAQCAtMTI1Nyw3ICsxMjU5LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKCkKICAgICBpZiAobV9yZXNv
dXJjZVNlbGVjdGlvblRhc2tRdWV1ZS5oYXNQZW5kaW5nVGFza3MoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGFnZUFsbG93c0RhdGFMb2FkaW5nKCkpIHsK
KyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLnBhZ2VBbGxvd3NEYXRhTG9hZGluZygpKSB7CiAgICAg
ICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgIm5vdCBhbGxvd2VkIHRvIGxvYWQgaW4gYmFj
a2dyb3VuZCwgd2FpdGluZyIpOwogICAgICAgICBzZXRTaG91bGREZWxheUxvYWRFdmVudChmYWxz
ZSk7CiAgICAgICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKQEAgLTEyNzAs
NyArMTI3Miw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXJjZSgp
CiAgICAgLy8gT25jZSB0aGUgcGFnZSBoYXMgYWxsb3dlZCBhbiBlbGVtZW50IHRvIGxvYWQgbWVk
aWEsIGl0IGlzIGZyZWUgdG8gbG9hZCBhdCB3aWxsLiBUaGlzIGFsbG93cyBhCiAgICAgLy8gcGxh
eWxpc3QgdGhhdCBzdGFydHMgaW4gYSBmb3JlZ3JvdW5kIHRhYiB0byBjb250aW51ZSBhdXRvbWF0
aWNhbGx5IGlmIHRoZSB0YWIgaXMgc3Vic2VxdWVudGx5CiAgICAgLy8gcHV0IGludG8gdGhlIGJh
Y2tncm91bmQuCi0gICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24o
TWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWEpOworICAg
IG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9Mb2FkTWVkaWEpOwogCiAgICAgYXV0byBsb2dTaXRl
SWRlbnRpZmllciA9IExPR0lERU5USUZJRVI7CiAgICAgVU5VU0VEX1BBUkFNKGxvZ1NpdGVJZGVu
dGlmaWVyKTsKQEAgLTE0OTUsMTQgKzE0OTcsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojps
b2FkUmVzb3VyY2UoY29uc3QgVVJMJiBpbml0aWFsVVJMLCBDb250ZW50VHlwZSYgY29udGVudFQK
ICAgICBtX3BsYXllci0+c2V0UHJpdmF0ZUJyb3dzaW5nTW9kZShwcml2YXRlTW9kZSk7CiAKICAg
ICBpZiAoIWF1dG9wbGF5KCkgJiYgIW1faGF2ZVByZXBhcmVkVG9QbGF5KQotICAgICAgICBtX3Bs
YXllci0+c2V0UHJlbG9hZChtX21lZGlhU2Vzc2lvbi0+ZWZmZWN0aXZlUHJlbG9hZEZvckVsZW1l
bnQoKSk7CisgICAgICAgIG1fcGxheWVyLT5zZXRQcmVsb2FkKG1lZGlhU2Vzc2lvbigpLmVmZmVj
dGl2ZVByZWxvYWRGb3JFbGVtZW50KCkpOwogICAgIG1fcGxheWVyLT5zZXRQcmVzZXJ2ZXNQaXRj
aChtX3dlYmtpdFByZXNlcnZlc1BpdGNoKTsKICAgICBtX3BsYXllci0+c2V0UGl0Y2hDb3JyZWN0
aW9uQWxnb3JpdGhtKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5waXRjaENvcnJlY3Rpb25BbGdvcml0
aG0oKSk7CiAKICAgICBpZiAoIW1fZXhwbGljaXRseU11dGVkKSB7CiAgICAgICAgIG1fZXhwbGlj
aXRseU11dGVkID0gdHJ1ZTsKICAgICAgICAgbV9tdXRlZCA9IGhhc0F0dHJpYnV0ZVdpdGhvdXRT
eW5jaHJvbml6YXRpb24obXV0ZWRBdHRyKTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmNhblBy
b2R1Y2VBdWRpb0NoYW5nZWQoKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuY2FuUHJvZHVjZUF1
ZGlvQ2hhbmdlZCgpOwogICAgIH0KIAogICAgIHVwZGF0ZVZvbHVtZSgpOwpAQCAtMjIyMyw3ICsy
MjI1LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYUxvYWRpbmdGYWlsZWQoTWVkaWFQ
bGF5ZXI6Ok5ldHdvcmtTdGF0ZSBlcnJvcikKIAogICAgIGxvZ01lZGlhTG9hZFJlcXVlc3QoZG9j
dW1lbnQoKS5wYWdlKCksIFN0cmluZygpLCBjb252ZXJ0RW51bWVyYXRpb25Ub1N0cmluZyhlcnJv
ciksIGZhbHNlKTsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT5jbGllbnRDaGFyYWN0ZXJpc3RpY3ND
aGFuZ2VkKCk7CisgICAgbWVkaWFTZXNzaW9uKCkuY2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdl
ZCgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldE5ldHdvcmtTdGF0ZShNZWRpYVBs
YXllcjo6TmV0d29ya1N0YXRlIHN0YXRlKQpAQCAtMjQxNiw3ICsyNDE4LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0YXRl
KQogICAgICAgICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUoKTsKICNlbmRpZgogCi0gICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5jbGllbnRDaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CisgICAgICAg
IG1lZGlhU2Vzc2lvbigpLmNsaWVudENoYXJhY3RlcmlzdGljc0NoYW5nZWQoKTsKICAgICB9CiAK
ICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfQ1VSUkVOVF9EQVRBICYmIG9sZFN0YXRlIDwg
SEFWRV9DVVJSRU5UX0RBVEEpIHsKQEAgLTI0NTYsNyArMjQ1OCw3IEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBzdGF0ZSkKIAog
ICAgIC8vIElmIHdlIHRyYW5zaXRpb24gdG8gdGhlIEZ1dHVyZSBEYXRhIHN0YXRlIGFuZCB3ZSdy
ZSBhYm91dCB0byBiZWdpbiBwbGF5aW5nLCBlbnN1cmUgcGxheWJhY2sgaXMgYWN0dWFsbHkgcGVy
bWl0dGVkIGZpcnN0LAogICAgIC8vIGhvbm9yaW5nIGFueSBwbGF5YmFjayBkZW5pYWwgcmVhc29u
cyBzdWNoIGFzIHRoZSByZXF1aXJlbWVudCBvZiBhIHVzZXIgZ2VzdHVyZS4KLSAgICBpZiAobV9y
ZWFkeVN0YXRlID09IEhBVkVfRlVUVVJFX0RBVEEgJiYgb2xkU3RhdGUgPCBIQVZFX0ZVVFVSRV9E
QVRBICYmIHBvdGVudGlhbGx5UGxheWluZygpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tT
dGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CisgICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBIQVZFX0ZVVFVSRV9EQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9G
VVRVUkVfREFUQSAmJiBwb3RlbnRpYWxseVBsYXlpbmcoKSAmJiAhbWVkaWFTZXNzaW9uKCkucGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7
CiAgICAgICAgIGF1dG8gY2FuVHJhbnNpdGlvbiA9IGNhblRyYW5zaXRpb25Gcm9tQXV0b3BsYXlU
b1BsYXkoKTsKICAgICAgICAgaWYgKGNhblRyYW5zaXRpb24gJiYgY2FuVHJhbnNpdGlvbi52YWx1
ZSgpID09IE1lZGlhUGxheWJhY2tEZW5pYWxSZWFzb246OlVzZXJHZXN0dXJlUmVxdWlyZWQpCiAg
ICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJBdXRvcGxheSBibG9ja2VkLCB1
c2VyIGdlc3R1cmUgcmVxdWlyZWQiKTsKQEAgLTI5NzYsNyArMjk3OCw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6c2Vla1dpdGhUb2xlcmFuY2UoY29uc3QgTWVkaWFUaW1lJiBpblRpbWUsIGNv
bnN0IE1lZGlhVGltCiAgICAgICAgIHNlZWtUYXNrKCk7CiAKICAgICBpZiAocHJvY2Vzc2luZ1Vz
ZXJHZXN0dXJlRm9yTWVkaWEoKSkKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2
aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9D
b250cm9sQ29udHJvbHNNYW5hZ2VyKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkucmVtb3ZlQmVo
YXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVU
b0NvbnRyb2xDb250cm9sc01hbmFnZXIpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNl
ZWtUYXNrKCkKQEAgLTM0NDUsNyArMzQ0Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxh
eShET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQogewogICAgIEFMV0FZU19MT0co
TE9HSURFTlRJRklFUik7CiAKLSAgICBhdXRvIHN1Y2Nlc3MgPSBtX21lZGlhU2Vzc2lvbi0+cGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpOwor
ICAgIGF1dG8gc3VjY2VzcyA9IG1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJt
aXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKTsKICAgICBpZiAoIXN1Y2Nlc3MpIHsK
ICAgICAgICAgaWYgKHN1Y2Nlc3MudmFsdWUoKSA9PSBNZWRpYVBsYXliYWNrRGVuaWFsUmVhc29u
OjpVc2VyR2VzdHVyZVJlcXVpcmVkKQogICAgICAgICAgICAgc2V0QXV0b3BsYXlFdmVudFBsYXli
YWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRlZEF1dG9wbGF5KTsK
QEAgLTM0NzEsNyArMzQ3Myw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheSgpCiB7CiAg
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKIAotICAgIGF1dG8gc3VjY2VzcyA9IG1fbWVk
aWFTZXNzaW9uLT5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0
ZTo6UGxheWluZyk7CisgICAgYXV0byBzdWNjZXNzID0gbWVkaWFTZXNzaW9uKCkucGxheWJhY2tT
dGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpOwogICAgIGlm
ICghc3VjY2VzcykgewogICAgICAgICBFUlJPUl9MT0coTE9HSURFTlRJRklFUiwgInBsYXliYWNr
IG5vdCBwZXJtaXR0ZWQ6ICIsIHN1Y2Nlc3MudmFsdWUoKSk7CiAgICAgICAgIGlmIChzdWNjZXNz
LnZhbHVlKCkgPT0gTWVkaWFQbGF5YmFja0RlbmlhbFJlYXNvbjo6VXNlckdlc3R1cmVSZXF1aXJl
ZCkKQEAgLTM0OTgsNyArMzUwMCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxheUludGVy
bmFsKCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24t
PmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCkpIHsKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLmNs
aWVudFdpbGxCZWdpblBsYXliYWNrKCkpIHsKICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSLCAicmV0dXJuaW5nIGJlY2F1c2Ugb2YgaW50ZXJydXB0aW9uIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0zNTUyLDcgKzM1NTQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBh
dXNlKCkKICAgICBpZiAobV93YWl0aW5nVG9FbnRlckZ1bGxzY3JlZW4pCiAgICAgICAgIG1fd2Fp
dGluZ1RvRW50ZXJGdWxsc2NyZWVuID0gZmFsc2U7CiAKLSAgICBpZiAoIW1fbWVkaWFTZXNzaW9u
LT5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGF1c2Vk
KSkKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQo
TWVkaWFQbGF5YmFja1N0YXRlOjpQYXVzZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
cHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKQEAgLTM1NzUsNyArMzU3Nyw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1c2VJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsUGF1c2VQbGF5YmFjaygp
KSB7CisgICAgaWYgKCFtZWRpYVNlc3Npb24oKS5jbGllbnRXaWxsUGF1c2VQbGF5YmFjaygpKSB7
CiAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgInJldHVybmluZyBiZWNhdXNlIG9m
IGludGVycnVwdGlvbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzU4NCw3ICszNTg2
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUludGVybmFsKCkKICAgICBpZiAoIW1f
cGxheWVyIHx8IG1fbmV0d29ya1N0YXRlID09IE5FVFdPUktfRU1QVFkpIHsKICAgICAgICAgLy8g
VW5sZXNzIHRoZSByZXN0cmljdGlvbiBvbiBtZWRpYSByZXF1aXJpbmcgdXNlciBhY3Rpb24gaGFz
IGJlZW4gbGlmdGVkCiAgICAgICAgIC8vIGRvbid0IHRyaWdnZXIgbG9hZGluZyBpZiBhIHNjcmlw
dCBjYWxscyBwYXVzZSgpLgotICAgICAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5wbGF5YmFja1N0
YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpCisgICAgICAg
IGlmICghbWVkaWFTZXNzaW9uKCkucGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBs
YXliYWNrU3RhdGU6OlBsYXlpbmcpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBzZWxl
Y3RNZWRpYVJlc291cmNlKCk7CiAgICAgfQpAQCAtMzY3Myw3ICszNjc1LDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSFRNTE1lZGlhRWxlbWVudDo6c2V0Vm9sdW1lKGRvdWJsZSB2b2x1bWUpCiAgICAg
dXBkYXRlVm9sdW1lKCk7CiAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkudm9sdW1lY2hh
bmdlRXZlbnQpOwogCi0gICAgaWYgKGlzUGxheWluZygpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7
CisgICAgaWYgKGlzUGxheWluZygpICYmICFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hh
bmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpIHsKICAgICAgICAgc2No
ZWR1bGVSZWplY3RQZW5kaW5nUGxheVByb21pc2VzKERPTUV4Y2VwdGlvbjo6Y3JlYXRlKE5vdEFs
bG93ZWRFcnJvcikpOwogICAgICAgICBwYXVzZUludGVybmFsKCk7CiAgICAgICAgIHNldEF1dG9w
bGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50
ZWRBdXRvcGxheSk7CkBAIC0zNzMyLDcgKzM3MzQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OnNldE11dGVkKGJvb2wgbXV0ZWQpCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKICAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiAjZW5kaWYKLSAgICAgICAg
bV9tZWRpYVNlc3Npb24tPmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKKyAgICAgICAgbWVkaWFT
ZXNzaW9uKCkuY2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOwogICAgICAgICB1cGRhdGVTbGVlcERp
c2FibGluZygpOwogICAgIH0KIApAQCAtMzc4Nyw3ICszNzg5LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpiZWdpblNjcnViYmluZygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX21lZGlh
U2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpS
ZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOworICAgIG1lZGlhU2Vz
c2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVx
dWlyZVVzZXJHZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKIH0KIAogdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjplbmRTY3J1YmJpbmcoKQpAQCAtMzk0MSw3ICszOTQzLDcgQEAgZG91Ymxl
IEhUTUxNZWRpYUVsZW1lbnQ6OnBlcmNlbnRMb2FkZWQoKSBjb25zdAogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6Om1lZGlhUGxheWVyRGlkQWRkQXVkaW9UcmFjayhBdWRpb1RyYWNrUHJpdmF0ZSYg
dHJhY2spCiB7Ci0gICAgaWYgKGlzUGxheWluZygpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxheWJh
Y2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7Cisg
ICAgaWYgKGlzUGxheWluZygpICYmICFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hhbmdl
UGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpIHsKICAgICAgICAgc2NoZWR1
bGVSZWplY3RQZW5kaW5nUGxheVByb21pc2VzKERPTUV4Y2VwdGlvbjo6Y3JlYXRlKE5vdEFsbG93
ZWRFcnJvcikpOwogICAgICAgICBwYXVzZUludGVybmFsKCk7CiAgICAgICAgIHNldEF1dG9wbGF5
RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50ZWRB
dXRvcGxheSk7CkBAIC00Njg1LDcgKzQ2ODcsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNv
dXJjZVdhc0FkZGVkKEhUTUxTb3VyY2VFbGVtZW50JiBzb3VyY2UpCiAgICAgaWYgKG1fbmV0d29y
a1N0YXRlID09IE5FVFdPUktfRU1QVFkpIHsKICAgICAgICAgbV9uZXh0Q2hpbGROb2RlVG9Db25z
aWRlciA9ICZzb3VyY2U7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKG1f
bWVkaWFTZXNzaW9uLT5kYXRhTG9hZGluZ1Blcm1pdHRlZCgpKQorICAgICAgICBpZiAobWVkaWFT
ZXNzaW9uKCkuZGF0YUxvYWRpbmdQZXJtaXR0ZWQoKSkKICNlbmRpZgogICAgICAgICAgICAgc2Vs
ZWN0TWVkaWFSZXNvdXJjZSgpOwogICAgICAgICByZXR1cm47CkBAIC00NzgzLDcgKzQ3ODUsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyVGltZUNoYW5nZWQoKQogICAgICAg
ICAgICAgICAgIC8vIGNoYW5nZXMgcGF1c2VkIHRvIHRydWUgYW5kIGZpcmVzIGEgc2ltcGxlIGV2
ZW50IG5hbWVkIHBhdXNlIGF0IHRoZSBtZWRpYSBlbGVtZW50LgogICAgICAgICAgICAgICAgIG1f
cGF1c2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMo
KS5wYXVzZUV2ZW50KTsKLSAgICAgICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2ls
bFBhdXNlUGxheWJhY2soKTsKKyAgICAgICAgICAgICAgICBtZWRpYVNlc3Npb24oKS5jbGllbnRX
aWxsUGF1c2VQbGF5YmFjaygpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gUXVldWUg
YSB0YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgZW5kZWQgYXQgdGhlIG1lZGlhIGVs
ZW1lbnQuCiAgICAgICAgICAgICBpZiAoIW1fc2VudEVuZEV2ZW50KSB7CkBAIC00ODMyLDcgKzQ4
MzQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEJlaGF2aW9yUmVzdHJpY3Rpb25zT25F
bmRJZk5lY2Vzc2FyeSgpCiAgICAgaWYgKGlzRnVsbHNjcmVlbigpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1l
bnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOwor
ICAgIG1lZGlhU2Vzc2lvbigpLmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKICAgICBt
X3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZpb3JSZXN0cmljdGlvbnNUaW1lci5zdG9wKCk7
CiAgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zVGltZXIu
c3RhcnRPbmVTaG90KGhpZGVNZWRpYUNvbnRyb2xzQWZ0ZXJFbmRlZERlbGF5KTsKIH0KQEAgLTQ4
NjIsNyArNDg2NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2Vla1RvUGxheWJhY2tQb3Np
dGlvbkVuZGVkVGltZXJGaXJlZCgpCiAgICAgaWYgKCFtX2lzU2NydWJiaW5nUmVtb3RlbHkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVk
TWFuYWdlcigpLnNlc3Npb25EaWRFbmRSZW1vdGVTY3J1YmJpbmcoKm1fbWVkaWFTZXNzaW9uKTsK
KyAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5zZXNzaW9u
RGlkRW5kUmVtb3RlU2NydWJiaW5nKG1lZGlhU2Vzc2lvbigpKTsKICAgICBtX2lzU2NydWJiaW5n
UmVtb3RlbHkgPSBmYWxzZTsKICAgICBtX3NlZWtUb1BsYXliYWNrUG9zaXRpb25FbmRlZFRpbWVy
LnN0b3AoKTsKICNlbmRpZgpAQCAtNTA0MCw3ICs1MDQyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYUVuZ2luZVdhc1VwZGF0ZWQoKQogICAgIHVwZGF0ZVJlbmRlcmVyKCk7CiAgICAg
ZW5kUHJvY2Vzc2luZ01lZGlhUGxheWVyQ2FsbGJhY2soKTsKIAotICAgIG1fbWVkaWFTZXNzaW9u
LT5tZWRpYUVuZ2luZVVwZGF0ZWQoKTsKKyAgICBtZWRpYVNlc3Npb24oKS5tZWRpYUVuZ2luZVVw
ZGF0ZWQoKTsKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUEpCiAgICAgaWYgKG1fcGxheWVy
ICYmIG1fbWVkaWFLZXlzKQpAQCAtNTEyMiw3ICs1MTI0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjptZWRpYVBsYXllckNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpCiAKICAgICB1cGRhdGVSZW5k
ZXJlcigpOwogCi0gICAgaWYgKCFwYXVzZWQoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBsYXliYWNr
U3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkgeworICAg
IGlmICghcGF1c2VkKCkgJiYgIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJt
aXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkgewogICAgICAgICBzY2hlZHVsZVJl
amVjdFBlbmRpbmdQbGF5UHJvbWlzZXMoRE9NRXhjZXB0aW9uOjpjcmVhdGUoTm90QWxsb3dlZEVy
cm9yKSk7CiAgICAgICAgIHBhdXNlSW50ZXJuYWwoKTsKICAgICAgICAgc2V0QXV0b3BsYXlFdmVu
dFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRlZEF1dG9w
bGF5KTsKQEAgLTUyNjcsNyArNTI2OSw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6c3RvcHBl
ZER1ZVRvRXJyb3JzKCkgY29uc3QKIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZWRGb3JV
c2VySW50ZXJhY3Rpb24oKSBjb25zdAogewotICAgIGlmIChtX21lZGlhU2Vzc2lvbi0+c3RhdGUo
KSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQpCisgICAgaWYgKG1lZGlhU2Vz
c2lvbigpLnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGVkKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTUzMzgsNyArNTM0MCw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKIAogICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUiwgInNob3VsZEJlUGxheWluZyA9ICIsIHNob3VsZEJlUGxheWlu
ZywgIiwgcGxheWVyUGF1c2VkID0gIiwgcGxheWVyUGF1c2VkKTsKIAotICAgIGlmIChzaG91bGRC
ZVBsYXlpbmcgJiYgcGxheWVyUGF1c2VkICYmIG1fbWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxz
Y3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgJiYgKG1fd2FpdGluZ1RvRW50ZXJGdWxsc2NyZWVuIHx8
ICFpc0Z1bGxzY3JlZW4oKSkpIHsKKyAgICBpZiAoc2hvdWxkQmVQbGF5aW5nICYmIHBsYXllclBh
dXNlZCAmJiBtZWRpYVNlc3Npb24oKS5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNr
KCkgJiYgKG1fd2FpdGluZ1RvRW50ZXJGdWxsc2NyZWVuIHx8ICFpc0Z1bGxzY3JlZW4oKSkpIHsK
ICAgICAgICAgaWYgKCFtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbikKICAgICAgICAgICAgIGVu
dGVyRnVsbHNjcmVlbigpOwogCkBAIC01MzU0LDcgKzUzNTYsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAgICAgICAgIGludmFsaWRhdGVDYWNoZWRUaW1lKCk7
CiAKICAgICAgICAgaWYgKHBsYXllclBhdXNlZCkgewotICAgICAgICAgICAgbV9tZWRpYVNlc3Np
b24tPmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCk7CisgICAgICAgICAgICBtZWRpYVNlc3Npb24o
KS5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpOwogCiAgICAgICAgICAgICAvLyBTZXQgcmF0ZSwg
bXV0ZWQgYW5kIHZvbHVtZSBiZWZvcmUgY2FsbGluZyBwbGF5IGluIGNhc2UgdGhleSB3ZXJlIHNl
dCBiZWZvcmUgdGhlIG1lZGlhIGVuZ2luZSB3YXMgc2V0IHVwLgogICAgICAgICAgICAgLy8gVGhl
IG1lZGlhIGVuZ2luZSBzaG91bGQganVzdCBzdGFzaCB0aGUgcmF0ZSwgbXV0ZWQgYW5kIHZvbHVt
ZSB2YWx1ZXMgc2luY2UgaXQgaXNuJ3QgYWxyZWFkeSBwbGF5aW5nLgpAQCAtNTQwMSw3ICs1NDAz
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjaGVja0ZvckF1ZGlvQW5kVmlkZW8oKQogewog
ICAgIG1faGFzRXZlckhhZEF1ZGlvIHw9IGhhc0F1ZGlvKCk7CiAgICAgbV9oYXNFdmVySGFkVmlk
ZW8gfD0gaGFzVmlkZW8oKTsKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2FuUHJvZHVjZUF1ZGlvQ2hh
bmdlZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKIH0K
IAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRQbGF5aW5nKGJvb2wgcGxheWluZykKQEAgLTU1
MjgsNyArNTUzMCw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBsYXllcigp
CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBpZiAoaGFzRXZlbnRM
aXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hh
bmdlZEV2ZW50KSB8fCBtX3JlbW90ZS0+aGFzQXZhaWxhYmlsaXR5Q2FsbGJhY2tzKCkpIHsKICAg
ICAgICAgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IGZhbHNlOwot
ICAgICAgICBtX21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlM
aXN0ZW5lcnMoZmFsc2UpOworICAgICAgICBpZiAobV9tZWRpYVNlc3Npb24pCisgICAgICAgICAg
ICBtX21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5l
cnMoZmFsc2UpOwogCiAgICAgICAgIC8vIFNlbmQgYW4gYXZhaWxhYmlsaXR5IGV2ZW50IGluIGNh
c2Ugc2NyaXB0cyB3YW50IHRvIGhpZGUgdGhlIHBpY2tlciB3aGVuIHRoZSBlbGVtZW50CiAgICAg
ICAgIC8vIGRvZXNuJ3Qgc3VwcG9ydCBwbGF5YmFjayB0byBhIHRhcmdldC4KQEAgLTU1NTksOCAr
NTU2MiwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNsZWFyTWVkaWFQbGF5ZXIoKQogICAg
IGlmIChtX3RleHRUcmFja3MpCiAgICAgICAgIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoKTsK
IAotICAgIG1fbWVkaWFTZXNzaW9uLT5jbGllbnRDaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCk7Ci0g
ICAgbV9tZWRpYVNlc3Npb24tPmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKKyAgICBpZiAobV9t
ZWRpYVNlc3Npb24pIHsKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPmNsaWVudENoYXJhY3Rlcmlz
dGljc0NoYW5nZWQoKTsKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPmNhblByb2R1Y2VBdWRpb0No
YW5nZWQoKTsKKyAgICB9CiAKICAgICBtX3Jlc291cmNlU2VsZWN0aW9uVGFza1F1ZXVlLmNhbmNl
bEFsbFRhc2tzKCk7CiAKQEAgLTU1ODcsNyArNTU5Miw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6c3RvcFdpdGhvdXREZXN0cm95aW5nTWVkaWFQbGF5ZXIoKQogICAgIC8vIFN0b3AgdGhlIHBs
YXliYWNrIHdpdGhvdXQgZ2VuZXJhdGluZyBldmVudHMKICAgICBzZXRQbGF5aW5nKGZhbHNlKTsK
ICAgICBwYXVzZUFuZFVwZGF0ZVBsYXlTdGF0ZUltbWVkaWF0ZWx5KCk7Ci0gICAgbV9tZWRpYVNl
c3Npb24tPmNsaWVudFdpbGxCZURPTVN1c3BlbmRlZCgpOworICAgIGlmIChtX21lZGlhU2Vzc2lv
bikKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxCZURPTVN1c3BlbmRlZCgpOwog
CiAgICAgc2V0QXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNr
U3RhdGU6Ok5vbmUpOwogCkBAIC01NjQ3LDcgKzU2NTMsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnN0b3AoKQogICAgIC8vIGxvYWRlZCBhbmQgY2FsbGluZyBpdCBhZ2FpbiB3b24ndCBjYXVz
ZSBhbnkgcHJvYmxlbXMuCiAgICAgY2xlYXJNZWRpYVBsYXllcigpOwogCi0gICAgbV9tZWRpYVNl
c3Npb24tPnN0b3BTZXNzaW9uKCk7CisgICAgaWYgKG1fbWVkaWFTZXNzaW9uKQorICAgICAgICBt
X21lZGlhU2Vzc2lvbi0+c3RvcFNlc3Npb24oKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQpAQCAtNTY2MSw3ICs1NjY4LDcg
QEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24gcmVh
c29uKQogICAgIGNhc2UgUmVhc29uRm9yU3VzcGVuc2lvbjo6QmFja0ZvcndhcmRDYWNoZToKICAg
ICAgICAgc3RvcFdpdGhvdXREZXN0cm95aW5nTWVkaWFQbGF5ZXIoKTsKICAgICAgICAgc2V0QnVm
ZmVyaW5nUG9saWN5KEJ1ZmZlcmluZ1BvbGljeTo6TWFrZVJlc291cmNlc1B1cmdlYWJsZSk7Ci0g
ICAgICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVu
dFNlc3Npb246OlJlcXVpcmVQYWdlQ29uc2VudFRvUmVzdW1lTWVkaWEpOworICAgICAgICBtZWRp
YVNlc3Npb24oKS5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJl
cXVpcmVQYWdlQ29uc2VudFRvUmVzdW1lTWVkaWEpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFJlYXNvbkZvclN1c3BlbnNpb246OlBhZ2VXaWxsQmVTdXNwZW5kZWQ6CiAgICAgY2FzZSBSZWFz
b25Gb3JTdXNwZW5zaW9uOjpKYXZhU2NyaXB0RGVidWdnZXJQYXVzZWQ6CkBAIC01Njc3LDEzICs1
Njg0LDEzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lKCkKIAogICAgIHNldEluQWN0
aXZlRG9jdW1lbnQodHJ1ZSk7CiAKLSAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5wYWdlQWxsb3dz
UGxheWJhY2tBZnRlclJlc3VtaW5nKCkpCisgICAgaWYgKCFtZWRpYVNlc3Npb24oKS5wYWdlQWxs
b3dzUGxheWJhY2tBZnRlclJlc3VtaW5nKCkpCiAgICAgICAgIGRvY3VtZW50KCkuYWRkTWVkaWFD
YW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICBlbHNlCiAgICAgICAgIHNldFBhdXNlZEludGVy
bmFsKGZhbHNlKTsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0
aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVQYWdlQ29uc2VudFRvUmVzdW1lTWVkaWEp
OwotICAgIG1fbWVkaWFTZXNzaW9uLT51cGRhdGVCdWZmZXJpbmdQb2xpY3koKTsKKyAgICBtZWRp
YVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246
OlJlcXVpcmVQYWdlQ29uc2VudFRvUmVzdW1lTWVkaWEpOworICAgIG1lZGlhU2Vzc2lvbigpLnVw
ZGF0ZUJ1ZmZlcmluZ1BvbGljeSgpOwogCiAgICAgaWYgKG1fZXJyb3IgJiYgbV9lcnJvci0+Y29k
ZSgpID09IE1lZGlhRXJyb3I6Ok1FRElBX0VSUl9BQk9SVEVEICYmICFtX3Jlc3VtZVRhc2tRdWV1
ZS5oYXNQZW5kaW5nVGFzaygpKSB7CiAgICAgICAgIC8vIFJlc3RhcnQgdGhlIGxvYWQgaWYgaXQg
d2FzIGFib3J0ZWQgaW4gdGhlIG1pZGRsZSBieSBtb3ZpbmcgdGhlIGRvY3VtZW50IHRvIHRoZSBi
YWNrL2ZvcndhcmQgY2FjaGUuCkBAIC01NzI0LDcgKzU3MzEsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQoKQogICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUiwgInZpc2libGUgPSAiLCAhbV9lbGVtZW50SXNIaWRkZW4pOwogCiAgICAgdXBkYXRlU2xl
ZXBEaXNhYmxpbmcoKTsKLSAgICBtX21lZGlhU2Vzc2lvbi0+dmlzaWJpbGl0eUNoYW5nZWQoKTsK
KyAgICBtZWRpYVNlc3Npb24oKS52aXNpYmlsaXR5Q2hhbmdlZCgpOwogICAgIGlmIChtX3BsYXll
cikKICAgICAgICAgbV9wbGF5ZXItPnNldFZpc2libGUoIW1fZWxlbWVudElzSGlkZGVuKTsKIApA
QCAtNTczMiwxMCArNTczOSwxMCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnZpc2liaWxpdHlT
dGF0ZUNoYW5nZWQoKQogICAgIGlmICghaXNQbGF5aW5nQXVkaW8pIHsKICAgICAgICAgaWYgKG1f
ZWxlbWVudElzSGlkZGVuKSB7CiAgICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIs
ICJTdXNwZW5kaW5nIHBsYXliYWNrIGFmdGVyIGdvaW5nIHRvIHRoZSBiYWNrZ3JvdW5kIik7Ci0g
ICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRp
YVNlc3Npb246OkVudGVyaW5nQmFja2dyb3VuZCk7CisgICAgICAgICAgICBtZWRpYVNlc3Npb24o
KS5iZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6RW50ZXJpbmdCYWNrZ3Jv
dW5kKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJ
RklFUiwgIlJlc3VtaW5nIHBsYXliYWNrIGFmdGVyIGVudGVyaW5nIGZvcmVncm91bmQiKTsKLSAg
ICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNl
c3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOworICAgICAgICAgICAgbWVkaWFTZXNzaW9uKCkuZW5k
SW50ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNYXlSZXN1bWVQbGF5aW5nKTsKICAg
ICAgICAgfQogICAgIH0KIH0KQEAgLTU3NjgsMTIgKzU3NzUsMTIgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojp3ZWJraXRTaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoKQogICAgIEFMV0FZU19MT0co
TE9HSURFTlRJRklFUik7CiAgICAgaWYgKHByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkp
CiAgICAgICAgIHJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb25zQWZ0ZXJGaXJzdFVzZXJHZXN0dXJl
KCk7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnNob3dQbGF5YmFja1RhcmdldFBpY2tlcigpOworICAg
IG1lZGlhU2Vzc2lvbigpLnNob3dQbGF5YmFja1RhcmdldFBpY2tlcigpOwogfQogCiB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OndpcmVsZXNzUm91dGVzQXZhaWxhYmxlRGlkQ2hhbmdlKCkKIHsKLSAg
ICBib29sIGhhc1RhcmdldHMgPSBtX21lZGlhU2Vzc2lvbi0+aGFzV2lyZWxlc3NQbGF5YmFja1Rh
cmdldHMoKTsKKyAgICBib29sIGhhc1RhcmdldHMgPSBtZWRpYVNlc3Npb24oKS5oYXNXaXJlbGVz
c1BsYXliYWNrVGFyZ2V0cygpOwogICAgIG1fcmVtb3RlLT5hdmFpbGFiaWxpdHlDaGFuZ2VkKGhh
c1RhcmdldHMpOwogCiAgICAgZW5xdWV1ZVBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdl
ZEV2ZW50KCk7CkBAIC01Nzk3LDggKzU4MDQsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNl
dElzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQoYm9vbCBpc1BsYXlpbmdUb1dpcmVsZXNzVGFyZwog
ICAgICAgICBtX3JlbW90ZS0+aXNQbGF5aW5nVG9SZW1vdGVUYXJnZXRDaGFuZ2VkKG1faXNQbGF5
aW5nVG9XaXJlbGVzc1RhcmdldCk7CiAgICAgICAgIEFMV0FZU19MT0cobG9nU2l0ZUlkZW50aWZp
ZXIsIG1faXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldCk7CiAgICAgICAgIGNvbmZpZ3VyZU1lZGlh
Q29udHJvbHMoKTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmlzUGxheWluZ1RvV2lyZWxlc3NQ
bGF5YmFja1RhcmdldENoYW5nZWQobV9pc1BsYXlpbmdUb1dpcmVsZXNzVGFyZ2V0KTsKLSAgICAg
ICAgbV9tZWRpYVNlc3Npb24tPmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKKyAgICAgICAgbWVk
aWFTZXNzaW9uKCkuaXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFyZ2V0Q2hhbmdlZChtX2lz
UGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5jYW5Qcm9k
dWNlQXVkaW9DaGFuZ2VkKCk7CiAgICAgICAgIHNjaGVkdWxlVXBkYXRlTWVkaWFTdGF0ZSgpOwog
ICAgICAgICB1cGRhdGVTbGVlcERpc2FibGluZygpOwogCkBAIC01ODQ2LDcgKzU4NTMsNyBAQCBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6OmFkZEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbVN0cmluZyYg
ZXZlbnRUeXBlLCBSZWY8RXZlbnRMaQogCiAgICAgaWYgKGlzRmlyc3RBdmFpbGFiaWxpdHlDaGFu
Z2VkTGlzdGVuZXIpIHsKICAgICAgICAgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxp
c3RlbmVycyA9IHRydWU7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyh0cnVlKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCku
c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnModHJ1ZSk7CiAgICAgfQog
CiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiJ3dlYmtpdHBsYXliYWNrdGFyZ2V0YXZh
aWxhYmlsaXR5Y2hhbmdlZCciKTsKQEAgLTU4NzIsNyArNTg3OSw3IEBAIGJvb2wgSFRNTE1lZGlh
RWxlbWVudDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUs
IEV2ZW50TGlzCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAicmVtb3ZlZCBsYXN0IGxp
c3RlbmVyID0gIiwgZGlkUmVtb3ZlTGFzdEF2YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lcik7CiAg
ICAgaWYgKGRpZFJlbW92ZUxhc3RBdmFpbGFiaWxpdHlDaGFuZ2VkTGlzdGVuZXIpIHsKICAgICAg
ICAgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IGZhbHNlOwotICAg
ICAgICBtX21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0
ZW5lcnMoZmFsc2UpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5zZXRIYXNQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUxpc3RlbmVycyhmYWxzZSk7CiAgICAgICAgIHNjaGVkdWxlVXBkYXRlTWVk
aWFTdGF0ZSgpOwogICAgIH0KIApAQCAtNTg4MSw3ICs1ODg4LDcgQEAgYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwg
RXZlbnRMaXMKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjplbnF1ZXVlUGxheWJhY2tUYXJnZXRB
dmFpbGFiaWxpdHlDaGFuZ2VkRXZlbnQoKQogewotICAgIGJvb2wgaGFzVGFyZ2V0cyA9IG1fbWVk
aWFTZXNzaW9uLT5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygpOworICAgIGJvb2wgaGFzVGFy
Z2V0cyA9IG1lZGlhU2Vzc2lvbigpLmhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCk7CiAgICAg
QUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiaGFzVGFyZ2V0cyA9ICIsIGhhc1RhcmdldHMpOwog
ICAgIGF1dG8gZXZlbnQgPSBXZWJLaXRQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxhYmlsaXR5Y2hhbmdl
ZEV2ZW50LCBoYXNUYXJnZXRzKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwpAQCAtNTky
MCw3ICs1OTI3LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1vdGVIYXNBdmFpbGFiaWxp
dHlDYWxsYmFja3NDaGFuZ2VkKCkKIAogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgImhh
c0xpc3RlbmVyczogIiwgaGFzTGlzdGVuZXJzKTsKICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZh
aWxhYmlsaXR5TGlzdGVuZXJzID0gaGFzTGlzdGVuZXJzOwotICAgIG1fbWVkaWFTZXNzaW9uLT5z
ZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhoYXNMaXN0ZW5lcnMpOwor
ICAgIG1lZGlhU2Vzc2lvbigpLnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVu
ZXJzKGhhc0xpc3RlbmVycyk7CiAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKQEAgLTYwNzEsNyArNjA3
OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZXhpdEZ1bGxzY3JlZW4oKQogICAgIGlmICgh
ZG9jdW1lbnQoKS5wYWdlKCkgfHwgIWlzPEhUTUxWaWRlb0VsZW1lbnQ+KCp0aGlzKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKCFwYXVzZWQoKSAmJiBtX21lZGlhU2Vzc2lvbi0+cmVxdWly
ZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpKSB7CisgICAgaWYgKCFwYXVzZWQoKSAmJiBt
ZWRpYVNlc3Npb24oKS5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpIHsKICAg
ICAgICAgaWYgKCFkb2N1bWVudCgpLnNldHRpbmdzKCkuYWxsb3dzSW5saW5lTWVkaWFQbGF5YmFj
a0FmdGVyRnVsbHNjcmVlbigpIHx8IGlzVmlkZW9Ub29TbWFsbEZvcklubGluZVBsYXliYWNrKCkp
CiAgICAgICAgICAgICBwYXVzZUludGVybmFsKCk7CiAgICAgICAgIGVsc2UgewpAQCAtNjUwNiw3
ICs2NTEzLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpwcml2YXRlQnJvd3NpbmdTdGF0ZURp
ZENoYW5nZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6
OnNob3VsZEZvcmNlQ29udHJvbHNEaXNwbGF5KCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMgY3Jl
YXRlIGNvbnRyb2xzIGZvciBhdXRvcGxheSB2aWRlbyB0aGF0IHJlcXVpcmVzIHVzZXIgZ2VzdHVy
ZSBkdWUgdG8gYmVpbmcgaW4gbG93IHBvd2VyIG1vZGUuCi0gICAgcmV0dXJuIGlzVmlkZW8oKSAm
JiBhdXRvcGxheSgpICYmIG1fbWVkaWFTZXNzaW9uLT5oYXNCZWhhdmlvclJlc3RyaWN0aW9uKE1l
ZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvRHVlVG9Mb3dQb3dl
ck1vZGUpOworICAgIHJldHVybiBpc1ZpZGVvKCkgJiYgYXV0b3BsYXkoKSAmJiBtZWRpYVNlc3Np
b24oKS5oYXNCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVV
c2VyR2VzdHVyZUZvclZpZGVvRHVlVG9Mb3dQb3dlck1vZGUpOwogfQogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OmNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKQpAQCAtNjUxNCw3ICs2NTIxLDcgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbnRyb2xzKCkKICAgICBib29s
IHJlcXVpcmVDb250cm9scyA9IGNvbnRyb2xzKCk7CiAKICAgICAvLyBBbHdheXMgY3JlYXRlIGNv
bnRyb2xzIGZvciB2aWRlbyB3aGVuIGZ1bGxzY3JlZW4gcGxheWJhY2sgaXMgcmVxdWlyZWQuCi0g
ICAgaWYgKGlzVmlkZW8oKSAmJiBtX21lZGlhU2Vzc2lvbi0+cmVxdWlyZXNGdWxsc2NyZWVuRm9y
VmlkZW9QbGF5YmFjaygpKQorICAgIGlmIChpc1ZpZGVvKCkgJiYgbWVkaWFTZXNzaW9uKCkucmVx
dWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpKQogICAgICAgICByZXF1aXJlQ29udHJv
bHMgPSB0cnVlOwogCiAgICAgaWYgKHNob3VsZEZvcmNlQ29udHJvbHNEaXNwbGF5KCkpCkBAIC02
NjM1LDcgKzY2NDIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhUGxheWVy
KCkKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIGlmIChoYXNFdmVu
dExpc3RlbmVycyhldmVudE5hbWVzKCkud2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHlj
aGFuZ2VkRXZlbnQpIHx8IG1fcmVtb3RlLT5oYXNBdmFpbGFiaWxpdHlDYWxsYmFja3MoKSkgewog
ICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gdHJ1ZTsK
LSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
TGlzdGVuZXJzKHRydWUpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5zZXRIYXNQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyh0cnVlKTsKICAgICAgICAgZW5xdWV1ZVBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCk7IC8vIEVuc3VyZSB0aGUgZXZlbnQgbGlz
dGVuZXIgZ2V0cyBhdCBsZWFzdCBvbmUgZXZlbnQuCiAgICAgfQogI2VuZGlmCkBAIC02OTQ5LDcg
KzY5NTYsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVySXNGdWxsc2NyZWVu
KCkgY29uc3QKIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllcklzRnVsbHNjcmVl
blBlcm1pdHRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWVkaWFTZXNzaW9uLT5mdWxsc2Ny
ZWVuUGVybWl0dGVkKCk7CisgICAgcmV0dXJuIG1lZGlhU2Vzc2lvbigpLmZ1bGxzY3JlZW5QZXJt
aXR0ZWQoKTsKIH0KIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllcklzVmlkZW8o
KSBjb25zdApAQCAtNzE1Nyw3ICs3MTY0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uc0FmdGVyRmlyc3RVc2VyR2VzdHVyZShNZWRpYUVsZW0KIAog
ICAgIG1fcmVtb3ZlZEJlaGF2aW9yUmVzdHJpY3Rpb25zQWZ0ZXJGaXJzdFVzZXJHZXN0dXJlID0g
dHJ1ZTsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKHJl
c3RyaWN0aW9uc1RvUmVtb3ZlKTsKKyAgICBtZWRpYVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJl
c3RyaWN0aW9uKHJlc3RyaWN0aW9uc1RvUmVtb3ZlKTsKICAgICBkb2N1bWVudCgpLnRvcERvY3Vt
ZW50KCkubm90ZVVzZXJJbnRlcmFjdGlvbldpdGhNZWRpYUVsZW1lbnQoKTsKIH0KIApAQCAtNzE2
OSwxNCArNzE3NiwxNCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVJhdGVDaGFuZ2VS
ZXN0cmljdGlvbnMoKQogCiAgICAgY29uc3QgYXV0byYgdG9wRG9jdW1lbnQgPSBkb2N1bWVudC50
b3BEb2N1bWVudCgpOwogICAgIGlmICh0b3BEb2N1bWVudC52aWRlb1BsYXliYWNrUmVxdWlyZXNV
c2VyR2VzdHVyZSgpKQotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmlj
dGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JWaWRlb1JhdGVD
aGFuZ2UpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1l
ZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvUmF0ZUNoYW5nZSk7
CiAgICAgZWxzZQotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmlj
dGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JWaWRlb1JhdGVD
aGFuZ2UpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9u
KE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvUmF0ZUNoYW5n
ZSk7CiAKICAgICBpZiAodG9wRG9jdW1lbnQuYXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmUoKSkKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVk
aWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9SYXRlQ2hhbmdlKTsK
KyAgICAgICAgbWVkaWFTZXNzaW9uKCkuYWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1l
bnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVDaGFuZ2UpOwogICAgIGVs
c2UKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVk
aWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9SYXRlQ2hhbmdlKTsK
KyAgICAgICAgbWVkaWFTZXNzaW9uKCkucmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVs
ZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVDaGFuZ2UpOwogfQog
CiBSZWZQdHI8VmlkZW9QbGF5YmFja1F1YWxpdHk+IEhUTUxNZWRpYUVsZW1lbnQ6OmdldFZpZGVv
UGxheWJhY2tRdWFsaXR5KCkKQEAgLTc1NDEsNyArNzU0OCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxl
bWVudDo6aXNTdXNwZW5kZWQoKSBjb25zdAogI2lmIEVOQUJMRShNRURJQV9TT1VSQ0UpCiBzaXpl
X3QgSFRNTE1lZGlhRWxlbWVudDo6bWF4aW11bVNvdXJjZUJ1ZmZlclNpemUoY29uc3QgU291cmNl
QnVmZmVyJiBidWZmZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWVkaWFTZXNzaW9uLT5tYXhp
bXVtTWVkaWFTb3VyY2VCdWZmZXJTaXplKGJ1ZmZlcik7CisgICAgcmV0dXJuIG1lZGlhU2Vzc2lv
bigpLm1heGltdW1NZWRpYVNvdXJjZUJ1ZmZlclNpemUoYnVmZmVyKTsKIH0KICNlbmRpZgogCkBA
IC03NzQ5LDcgKzc3NTYsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZU1lZGlhU3Rh
dGUoKQogICAgICAgICByZXR1cm47CiAKICAgICBtX21lZGlhU3RhdGUgPSBzdGF0ZTsKLSAgICBt
X21lZGlhU2Vzc2lvbi0+bWVkaWFTdGF0ZURpZENoYW5nZShtX21lZGlhU3RhdGUpOworICAgIG1l
ZGlhU2Vzc2lvbigpLm1lZGlhU3RhdGVEaWRDaGFuZ2UobV9tZWRpYVN0YXRlKTsKIAogICAgIGRv
Y3VtZW50KCkudXBkYXRlSXNQbGF5aW5nTWVkaWEoKTsKIH0KQEAgLTc3NjcsMTEgKzc3NzQsMTEg
QEAgTWVkaWFQcm9kdWNlcjo6TWVkaWFTdGF0ZUZsYWdzIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlh
U3RhdGUoKSBjb25zdAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAg
aWYgKG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMpIHsKICAgICAgICAg
c3RhdGUgfD0gSGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcjsKLSAgICAgICAg
aWYgKCFtX21lZGlhU2Vzc2lvbi0+d2lyZWxlc3NWaWRlb1BsYXliYWNrRGlzYWJsZWQoKSkKKyAg
ICAgICAgaWYgKCFtZWRpYVNlc3Npb24oKS53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgp
KQogICAgICAgICAgICAgc3RhdGUgfD0gUmVxdWlyZXNQbGF5YmFja1RhcmdldE1vbml0b3Jpbmc7
CiAgICAgfQogCi0gICAgYm9vbCByZXF1aXJlVXNlckdlc3R1cmUgPSBtX21lZGlhU2Vzc2lvbi0+
aGFzQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdl
c3R1cmVUb0F1dG9wbGF5VG9FeHRlcm5hbERldmljZSk7CisgICAgYm9vbCByZXF1aXJlVXNlckdl
c3R1cmUgPSBtZWRpYVNlc3Npb24oKS5oYXNCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVu
dFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQXV0b3BsYXlUb0V4dGVybmFsRGV2aWNlKTsK
ICAgICBpZiAobV9yZWFkeVN0YXRlID49IEhBVkVfTUVUQURBVEEgJiYgIXJlcXVpcmVVc2VyR2Vz
dHVyZSAmJiAhbV9mYWlsZWRUb1BsYXlUb1dpcmVsZXNzVGFyZ2V0KQogICAgICAgICBzdGF0ZSB8
PSBFeHRlcm5hbERldmljZUF1dG9QbGF5Q2FuZGlkYXRlOwogCkBAIC03OTA1LDcgKzc5MTIsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnB1cmdlQnVmZmVyZWREYXRhSWZQb3NzaWJsZSgpCiB7
CiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSKTsKIAotICAgIGlmICghTWVtb3J5UHJlc3N1
cmVIYW5kbGVyOjpzaW5nbGV0b24oKS5pc1VuZGVyTWVtb3J5UHJlc3N1cmUoKSAmJiBtX21lZGlh
U2Vzc2lvbi0+cHJlZmVycmVkQnVmZmVyaW5nUG9saWN5KCkgPT0gQnVmZmVyaW5nUG9saWN5OjpE
ZWZhdWx0KQorICAgIGlmICghTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKS5pc1Vu
ZGVyTWVtb3J5UHJlc3N1cmUoKSAmJiBtZWRpYVNlc3Npb24oKS5wcmVmZXJyZWRCdWZmZXJpbmdQ
b2xpY3koKSA9PSBCdWZmZXJpbmdQb2xpY3k6OkRlZmF1bHQpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChpc1BsYXlpbmdUb0V4dGVybmFsVGFyZ2V0KCkpIHsKQEAgLTc5MjYsNyArNzkzMyw3
IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y2FuU2F2ZU1lZGlhRGF0YSgpIGNvbnN0CiAKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6YWxsb3dzTWVkaWFEb2N1bWVudElubGluZVBsYXliYWNrQ2hh
bmdlZCgpCiB7Ci0gICAgaWYgKHBvdGVudGlhbGx5UGxheWluZygpICYmIG1fbWVkaWFTZXNzaW9u
LT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgJiYgIWlzRnVsbHNjcmVlbigp
KQorICAgIGlmIChwb3RlbnRpYWxseVBsYXlpbmcoKSAmJiBtZWRpYVNlc3Npb24oKS5yZXF1aXJl
c0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkgJiYgIWlzRnVsbHNjcmVlbigpKQogICAgICAg
ICBlbnRlckZ1bGxzY3JlZW4oKTsKIH0KIApAQCAtNzk0NCw3ICs3OTUxLDcgQEAgYm9vbCBIVE1M
TWVkaWFFbGVtZW50Ojppc1ZpZGVvVG9vU21hbGxGb3JJbmxpbmVQbGF5YmFjaygpCiB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmlzVmlzaWJsZUluVmlld3BvcnRDaGFuZ2VkKCkKIHsKICAgICBtX3Zp
c2liaWxpdHlDaGFuZ2VUYXNrUXVldWUuZW5xdWV1ZVRhc2soW3RoaXNdIHsKLSAgICAgICAgbV9t
ZWRpYVNlc3Npb24tPmlzVmlzaWJsZUluVmlld3BvcnRDaGFuZ2VkKCk7CisgICAgICAgIG1lZGlh
U2Vzc2lvbigpLmlzVmlzaWJsZUluVmlld3BvcnRDaGFuZ2VkKCk7CiAgICAgICAgIHVwZGF0ZVNo
b3VsZEF1dG9wbGF5KCk7CiAgICAgICAgIHNjaGVkdWxlUGxheWJhY2tDb250cm9sc01hbmFnZXJV
cGRhdGUoKTsKICAgICB9KTsKQEAgLTc5NTUsMjIgKzc5NjIsMjIgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50Ojp1cGRhdGVTaG91bGRBdXRvcGxheSgpCiAgICAgaWYgKCFhdXRvcGxheSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5oYXNCZWhhdmlvclJlc3Ry
aWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OkludmlzaWJsZUF1dG9wbGF5Tm90UGVybWl0dGVk
KSkKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFF
bGVtZW50U2Vzc2lvbjo6SW52aXNpYmxlQXV0b3BsYXlOb3RQZXJtaXR0ZWQpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBib29sIGNhbkF1dG9wbGF5ID0gbWVkaWFTZXNzaW9uKCkuYXV0b3BsYXlQ
ZXJtaXR0ZWQoKTsKICAgICBpZiAoY2FuQXV0b3BsYXkKLSAgICAgICAgJiYgbV9tZWRpYVNlc3Np
b24tPnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGVkCi0gICAgICAg
ICYmIG1fbWVkaWFTZXNzaW9uLT5pbnRlcnJ1cHRpb25UeXBlKCkgPT0gUGxhdGZvcm1NZWRpYVNl
c3Npb246OkludmlzaWJsZUF1dG9wbGF5KQotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+ZW5kSW50
ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNYXlSZXN1bWVQbGF5aW5nKTsKKyAgICAg
ICAgJiYgbWVkaWFTZXNzaW9uKCkuc3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50
ZXJydXB0ZWQKKyAgICAgICAgJiYgbWVkaWFTZXNzaW9uKCkuaW50ZXJydXB0aW9uVHlwZSgpID09
IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnZpc2libGVBdXRvcGxheSkKKyAgICAgICAgbWVkaWFT
ZXNzaW9uKCkuZW5kSW50ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpNYXlSZXN1bWVQ
bGF5aW5nKTsKICAgICBlbHNlIGlmICghY2FuQXV0b3BsYXkKLSAgICAgICAgJiYgbV9tZWRpYVNl
c3Npb24tPnN0YXRlKCkgIT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGVkKQotICAg
ICAgICBtX21lZGlhU2Vzc2lvbi0+YmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Np
b246OkludmlzaWJsZUF1dG9wbGF5KTsKKyAgICAgICAgJiYgbWVkaWFTZXNzaW9uKCkuc3RhdGUo
KSAhPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQpCisgICAgICAgIG1lZGlhU2Vz
c2lvbigpLmJlZ2luSW50ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnZpc2libGVB
dXRvcGxheSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlU2hvdWxkUGxheSgp
CiB7Ci0gICAgaWYgKCFwYXVzZWQoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBsYXliYWNrU3RhdGVD
aGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkgeworICAgIGlmICgh
cGF1c2VkKCkgJiYgIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQo
TWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkgewogICAgICAgICBzY2hlZHVsZVJlamVjdFBl
bmRpbmdQbGF5UHJvbWlzZXMoRE9NRXhjZXB0aW9uOjpjcmVhdGUoTm90QWxsb3dlZEVycm9yKSk7
CiAgICAgICAgIHBhdXNlSW50ZXJuYWwoKTsKICAgICAgICAgc2V0QXV0b3BsYXlFdmVudFBsYXli
YWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlByZXZlbnRlZEF1dG9wbGF5KTsK
QEAgLTgwMDMsMTYgKzgwMTAsMTYgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwbGF5YmFja0Nv
bnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zVGltZXJGaXJlZCgpCiAgICAgaWYgKG1f
cGxheWJhY2tDb250cm9sc01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9uc1F1ZXVlLmhhc1BlbmRp
bmdUYXNrKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24tPmhh
c0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0
dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKSkKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLmhh
c0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0
dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVm
UHRyPEhUTUxNZWRpYUVsZW1lbnQ+IHByb3RlY3RlZFRoaXModGhpcyk7CiAgICAgbV9wbGF5YmFj
a0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zUXVldWUuc2NoZWR1bGVUYXNrKFtw
cm90ZWN0ZWRUaGlzXSAoKSB7Ci0gICAgICAgIE1lZGlhRWxlbWVudFNlc3Npb24qIG1lZGlhRWxl
bWVudFNlc3Npb24gPSBwcm90ZWN0ZWRUaGlzLT5tX21lZGlhU2Vzc2lvbi5nZXQoKTsKLSAgICAg
ICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzUGxheWluZygpIHx8IG1lZGlhRWxlbWVudFNlc3Npb24t
PnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkF1dG9wbGF5aW5nIHx8IG1lZGlhRWxl
bWVudFNlc3Npb24tPnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXlpbmcpCisg
ICAgICAgIGF1dG8mIG1lZGlhRWxlbWVudFNlc3Npb24gPSBwcm90ZWN0ZWRUaGlzLT5tZWRpYVNl
c3Npb24oKTsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzUGxheWluZygpIHx8IG1lZGlh
RWxlbWVudFNlc3Npb24uc3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6QXV0b3BsYXlp
bmcgfHwgbWVkaWFFbGVtZW50U2Vzc2lvbi5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9u
OjpQbGF5aW5nKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1lZGlhRWxlbWVudFNl
c3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWly
ZVBsYXliYWNrVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKKyAgICAgICAgbWVkaWFFbGVtZW50
U2Vzc2lvbi5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVp
cmVQbGF5YmFja1RvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7CiAgICAgICAgIHByb3RlY3RlZFRo
aXMtPnNjaGVkdWxlUGxheWJhY2tDb250cm9sc01hbmFnZXJVcGRhdGUoKTsKICAgICB9KTsKIH0K
QEAgLTgwNzksNyArODA4Niw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0SW5BY3RpdmVE
b2N1bWVudChib29sIGluQWN0aXZlRG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
aW5BY3RpdmVEb2N1bWVudCA9IGluQWN0aXZlRG9jdW1lbnQ7Ci0gICAgbV9tZWRpYVNlc3Npb24t
PmluQWN0aXZlRG9jdW1lbnRDaGFuZ2VkKCk7CisgICAgaWYgKG1fbWVkaWFTZXNzaW9uKQorICAg
ICAgICBtX21lZGlhU2Vzc2lvbi0+aW5BY3RpdmVEb2N1bWVudENoYW5nZWQoKTsKIH0KIAogSFRN
TE1lZGlhRWxlbWVudEVudW1zOjpCdWZmZXJpbmdQb2xpY3kgSFRNTE1lZGlhRWxlbWVudDo6YnVm
ZmVyaW5nUG9saWN5KCkgY29uc3QKQEAgLTgxMjksNiArODEzNywxMyBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnNldFNob3dQb3N0ZXJGbGFnKGJvb2wgZmxhZykKICAgICBpbnZhbGlkYXRlU3R5
bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CiB9CiAKK01lZGlhRWxlbWVudFNlc3Npb24mIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhU2Vzc2lvbigpIGNvbnN0Cit7CisgICAgaWYgKCFtX21lZGlhU2Vz
c2lvbikKKyAgICAgICAgY29uc3RfY2FzdDxIVE1MTWVkaWFFbGVtZW50Jj4oKnRoaXMpLmZpbmlz
aEluaXRpYWxpemF0aW9uKCk7CisgICAgcmV0dXJuICptX21lZGlhU2Vzc2lvbjsKK30KKwogfQog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggNjQ3MjRl
YmI5NGViLi4yYTRhZDYzZTMwNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oCkBAIC00OTAsNyArNDkwLDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxWaWRlb1BsYXliYWNr
UXVhbGl0eT4gZ2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKTsKIAogICAgIE1lZGlhUGxheWVyOjpQ
cmVsb2FkIHByZWxvYWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbG9hZDsgfQotICAgIE1l
ZGlhRWxlbWVudFNlc3Npb24mIG1lZGlhU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuICptX21lZGlh
U2Vzc2lvbjsgfQorICAgIFdFQkNPUkVfRVhQT1JUIE1lZGlhRWxlbWVudFNlc3Npb24mIG1lZGlh
U2Vzc2lvbigpIGNvbnN0OwogCiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAg
ICAgdm9pZCB1c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKaW5kZXggOWMzZmQ1YTYzZDM5Li5iMmNlYjFj
NWQ5YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcApAQCAtNzks
NyArNzksNiBAQCBSZWY8SFRNTFZpZGVvRWxlbWVudD4gSFRNTFZpZGVvRWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvYwogICAgIEhUTUxWaWRlb0VsZW1lbnRQ
aWN0dXJlSW5QaWN0dXJlOjpwcm92aWRlUGljdHVyZUluUGljdHVyZVRvKHZpZGVvRWxlbWVudCk7
CiAjZW5kaWYKIAotICAgIHZpZGVvRWxlbWVudC0+ZmluaXNoSW5pdGlhbGl6YXRpb24oKTsKICAg
ICB2aWRlb0VsZW1lbnQtPnN1c3BlbmRJZk5lZWRlZCgpOwogICAgIHJldHVybiB2aWRlb0VsZW1l
bnQ7CiB9Cg==
</data>
<flag name="commit-queue"
          id="446988"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426690</attachid>
            <date>2021-04-21 08:09:27 -0700</date>
            <delta_ts>2021-04-21 08:26:03 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>224843_amazon_noGPUprocess_v4.patch</filename>
            <type>text/plain</type>
            <size>39134</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwCmluZGV4IDU5ZTYxYzMxZTNh
ZS4uNTA0OTVjMTdiOWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5j
cHAKQEAgLTQ3LDcgKzQ3LDYgQEAgaW5saW5lIEhUTUxBdWRpb0VsZW1lbnQ6OkhUTUxBdWRpb0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQKIFJlZjxIVE1MQXVk
aW9FbGVtZW50PiBIVE1MQXVkaW9FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKICAg
ICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IEhUTUxBdWRpb0VsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikpOwotICAgIGVsZW1lbnQtPmZpbmlzaEluaXRpYWxp
emF0aW9uKCk7CiAgICAgZWxlbWVudC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIGVs
ZW1lbnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAz
MjU4ZWZkZjQxZmIuLjZhZjViODg4MTQ2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC00MzIsNiArNDMyLDggQEAgSFRNTE1lZGlhRWxlbWVudDo6SFRNTE1l
ZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCYgZG9jdW0K
ICAgICAsIG1fdHJhY2tzQXJlUmVhZHkodHJ1ZSkKICAgICAsIG1faGF2ZVZpc2libGVUZXh0VHJh
Y2soZmFsc2UpCiAgICAgLCBtX3Byb2Nlc3NpbmdQcmVmZXJlbmNlQ2hhbmdlKGZhbHNlKQorICAg
ICwgbV9zaG91bGRBdWRpb1BsYXliYWNrUmVxdWlyZVVzZXJHZXN0dXJlKGRvY3VtZW50LnRvcERv
Y3VtZW50KCkuYXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoKSAmJiAhcHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKKyAgICAsIG1fc2hvdWxkVmlkZW9QbGF5YmFja1JlcXVp
cmVVc2VyR2VzdHVyZShkb2N1bWVudC50b3BEb2N1bWVudCgpLnZpZGVvUGxheWJhY2tSZXF1aXJl
c1VzZXJHZXN0dXJlKCkgJiYgIXByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkpCiAjaWYg
RU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICAsIG1fcmVtb3RlKFJlbW90ZVBs
YXliYWNrOjpjcmVhdGUoKnRoaXMpKQogI2VuZGlmCkBAIC00NDksOCArNDUxLDkgQEAgSFRNTE1l
ZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCYgZG9jdW0KICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmFkZEV2ZW50
TGlzdGVuZXJzVG9Ob2RlKCp0aGlzKTsKIH0KIAotdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5p
c2hJbml0aWFsaXphdGlvbigpCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmluaXRpYWxpemVNZWRp
YVNlc3Npb24oKQogeworICAgIEFTU0VSVCghbV9tZWRpYVNlc3Npb24pOwogICAgIG1fbWVkaWFT
ZXNzaW9uID0gbWFrZVVuaXF1ZTxNZWRpYUVsZW1lbnRTZXNzaW9uPigqdGhpcyk7CiAKICAgICBt
X21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9u
OjpSZXF1aXJlVXNlckdlc3R1cmVGb3JGdWxsc2NyZWVuKTsKQEAgLTQ2OCwxMiArNDcxLDcgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hJbml0aWFsaXphdGlvbigpCiAgICAgICAgIG1f
bWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246
OkludmlzaWJsZUF1dG9wbGF5Tm90UGVybWl0dGVkKTsKIAogICAgIGlmIChkb2N1bWVudC5vd25l
ckVsZW1lbnQoKSB8fCAhZG9jdW1lbnQuaXNNZWRpYURvY3VtZW50KCkpIHsKLSAgICAgICAgY29u
c3QgYXV0byYgdG9wRG9jdW1lbnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOwotICAgICAgICBj
b25zdCBib29sIGlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlID0gcHJvY2Vzc2luZ1VzZXJHZXN0dXJl
Rm9yTWVkaWEoKTsKLSAgICAgICAgY29uc3QgYm9vbCBzaG91bGRBdWRpb1BsYXliYWNrUmVxdWly
ZVVzZXJHZXN0dXJlID0gdG9wRG9jdW1lbnQuYXVkaW9QbGF5YmFja1JlcXVpcmVzVXNlckdlc3R1
cmUoKSAmJiAhaXNQcm9jZXNzaW5nVXNlckdlc3R1cmU7Ci0gICAgICAgIGNvbnN0IGJvb2wgc2hv
dWxkVmlkZW9QbGF5YmFja1JlcXVpcmVVc2VyR2VzdHVyZSA9IHRvcERvY3VtZW50LnZpZGVvUGxh
eWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJlKCkgJiYgIWlzUHJvY2Vzc2luZ1VzZXJHZXN0dXJlOwot
Ci0gICAgICAgIGlmIChzaG91bGRWaWRlb1BsYXliYWNrUmVxdWlyZVVzZXJHZXN0dXJlKSB7Cisg
ICAgICAgIGlmIChtX3Nob3VsZFZpZGVvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1cmUpIHsKICAg
ICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxl
bWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvUmF0ZUNoYW5nZSk7CiAgICAg
ICAgICAgICBpZiAoZG9jdW1lbnQuc2V0dGluZ3MoKS5yZXF1aXJlc1VzZXJHZXN0dXJlVG9Mb2Fk
VmlkZW8oKSkKICAgICAgICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0
cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JMb2FkKTsK
QEAgLTQ4MiwxMSArNDgwLDExIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZmluaXNoSW5pdGlh
bGl6YXRpb24oKQogICAgICAgICBpZiAocGFnZSAmJiBwYWdlLT5pc0xvd1Bvd2VyTW9kZUVuYWJs
ZWQoKSkKICAgICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9u
KE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvRHVlVG9Mb3dQ
b3dlck1vZGUpOwogCi0gICAgICAgIGlmIChzaG91bGRBdWRpb1BsYXliYWNrUmVxdWlyZVVzZXJH
ZXN0dXJlKQorICAgICAgICBpZiAobV9zaG91bGRBdWRpb1BsYXliYWNrUmVxdWlyZVVzZXJHZXN0
dXJlKQogICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24o
TWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9SYXRlQ2hhbmdl
KTsKIAogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCi0gICAgICAgIGlmIChz
aG91bGRWaWRlb1BsYXliYWNrUmVxdWlyZVVzZXJHZXN0dXJlIHx8IHNob3VsZEF1ZGlvUGxheWJh
Y2tSZXF1aXJlVXNlckdlc3R1cmUpCisgICAgICAgIGlmIChtX3Nob3VsZFZpZGVvUGxheWJhY2tS
ZXF1aXJlVXNlckdlc3R1cmUgfHwgbV9zaG91bGRBdWRpb1BsYXliYWNrUmVxdWlyZVVzZXJHZXN0
dXJlKQogICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24o
TWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9TaG93UGxheWJhY2tUYXJn
ZXRQaWNrZXIpOwogI2VuZGlmCiAKQEAgLTUxMCw3ICs1MDgsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OmZpbmlzaEluaXRpYWxpemF0aW9uKCkKICAgICBBdWRpb1Nlc3Npb246OnNoYXJlZFNl
c3Npb24oKS5hZGRNdXRlZFN0YXRlT2JzZXJ2ZXIodGhpcyk7CiAjZW5kaWYKIAotICAgIG1lZGlh
U2Vzc2lvbigpLmNsaWVudFdpbGxCZWdpbkF1dG9wbGF5aW5nKCk7CisgICAgbV9tZWRpYVNlc3Np
b24tPmNsaWVudFdpbGxCZWdpbkF1dG9wbGF5aW5nKCk7CiB9CiAKIEhUTUxNZWRpYUVsZW1lbnQ6
On5IVE1MTWVkaWFFbGVtZW50KCkKQEAgLTUzOSw3ICs1MzcsOCBAQCBIVE1MTWVkaWFFbGVtZW50
Ojp+SFRNTE1lZGlhRWxlbWVudCgpCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKICAgICBpZiAoaGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNr
dGFyZ2V0YXZhaWxhYmlsaXR5Y2hhbmdlZEV2ZW50KSB8fCBtX3JlbW90ZS0+aGFzQXZhaWxhYmls
aXR5Q2FsbGJhY2tzKCkpIHsKICAgICAgICAgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUxpc3RlbmVycyA9IGZhbHNlOwotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoZmFsc2UpOworICAgICAgICBpZiAobV9tZWRp
YVNlc3Npb24pCisgICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxheWJhY2tUYXJn
ZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoZmFsc2UpOwogICAgICAgICB1cGRhdGVNZWRpYVN0YXRl
KCk7CiAgICAgfQogI2VuZGlmCkBAIC02MjMsNyArNjIyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpyZWdpc3RlcldpdGhEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiB7CiAgICAgZG9j
dW1lbnQucmVnaXN0ZXJNZWRpYUVsZW1lbnQoKnRoaXMpOwogCi0gICAgbV9tZWRpYVNlc3Npb24t
PnJlZ2lzdGVyV2l0aERvY3VtZW50KGRvY3VtZW50KTsKKyAgICBtZWRpYVNlc3Npb24oKS5yZWdp
c3RlcldpdGhEb2N1bWVudChkb2N1bWVudCk7CiAKICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1l
ZGlhQ2FuU3RhcnQpCiAgICAgICAgIGRvY3VtZW50LmFkZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigq
dGhpcyk7CkBAIC02NDQsNyArNjQzLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1bnJlZ2lz
dGVyV2l0aERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBkb2N1bWVudC51bnJl
Z2lzdGVyTWVkaWFFbGVtZW50KCp0aGlzKTsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lz
dGVyV2l0aERvY3VtZW50KGRvY3VtZW50KTsKKyAgICBpZiAobV9tZWRpYVNlc3Npb24pCisgICAg
ICAgIG1fbWVkaWFTZXNzaW9uLT51bnJlZ2lzdGVyV2l0aERvY3VtZW50KGRvY3VtZW50KTsKIAog
ICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVkaWFDYW5TdGFydCkKICAgICAgICAgZG9jdW1lbnQu
cmVtb3ZlTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKQEAgLTY4MCwxMiArNjgwLDEyIEBA
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQmIG9s
ZERvY3VtZW50LCBEb2N1bWVudCYgbmV3CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cHJlcGFy
ZUZvckRvY3VtZW50U3VzcGVuc2lvbigpCiB7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnVucmVnaXN0
ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQoKSk7CisgICAgbWVkaWFTZXNzaW9uKCkudW5yZWdpc3Rl
cldpdGhEb2N1bWVudChkb2N1bWVudCgpKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpy
ZXN1bWVGcm9tRG9jdW1lbnRTdXNwZW5zaW9uKCkKIHsKLSAgICBtX21lZGlhU2Vzc2lvbi0+cmVn
aXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQoKSk7CisgICAgbWVkaWFTZXNzaW9uKCkucmVnaXN0
ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgdXBkYXRlU2hvdWxkQXV0b3BsYXkoKTsK
IH0KIApAQCAtNzM4LDcgKzczOCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGFyc2VBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbVN0cmluCiAKICAgICAg
ICAgLy8gVGhlIGF0dHJpYnV0ZSBtdXN0IGJlIGlnbm9yZWQgaWYgdGhlIGF1dG9wbGF5IGF0dHJp
YnV0ZSBpcyBwcmVzZW50CiAgICAgICAgIGlmICghYXV0b3BsYXkoKSAmJiAhbV9oYXZlUHJlcGFy
ZWRUb1BsYXkgJiYgbV9wbGF5ZXIpCi0gICAgICAgICAgICBtX3BsYXllci0+c2V0UHJlbG9hZCht
X21lZGlhU2Vzc2lvbi0+ZWZmZWN0aXZlUHJlbG9hZEZvckVsZW1lbnQoKSk7CisgICAgICAgICAg
ICBtX3BsYXllci0+c2V0UHJlbG9hZChtZWRpYVNlc3Npb24oKS5lZmZlY3RpdmVQcmVsb2FkRm9y
RWxlbWVudCgpKTsKIAogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBtZWRpYWdyb3VwQXR0cikKICAg
ICAgICAgc2V0TWVkaWFHcm91cCh2YWx1ZSk7CkBAIC04MDAsNyArODAwLDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkKICAgICBpZiAoIW1fZXhwbGlj
aXRseU11dGVkKSB7CiAgICAgICAgIG1fZXhwbGljaXRseU11dGVkID0gdHJ1ZTsKICAgICAgICAg
bV9tdXRlZCA9IGhhc0F0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obXV0ZWRBdHRyKTsK
LSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKKyAgICAg
ICAgbWVkaWFTZXNzaW9uKCkuY2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOwogICAgIH0KIAogICAg
IGNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKTsKQEAgLTEyMDYsNyArMTIwNiw3IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6cHJlcGFyZUZvckxvYWQoKQogICAgICAgICAvLyA5IC0gSW52b2tlIHRo
ZSBtZWRpYSBlbGVtZW50J3MgcmVzb3VyY2Ugc2VsZWN0aW9uIGFsZ29yaXRobS4KICAgICAgICAg
Ly8gTm90ZSwgdW5sZXNzIHRoZSByZXN0cmljdGlvbiBvbiByZXF1aXJpbmcgdXNlciBhY3Rpb24g
aGFzIGJlZW4gcmVtb3ZlZCwKICAgICAgICAgLy8gZG8gbm90IGJlZ2luIGRvd25sb2FkaW5nIGRh
dGEuCi0gICAgICAgIGlmIChtX21lZGlhU2Vzc2lvbi0+ZGF0YUxvYWRpbmdQZXJtaXR0ZWQoKSkK
KyAgICAgICAgaWYgKG1lZGlhU2Vzc2lvbigpLmRhdGFMb2FkaW5nUGVybWl0dGVkKCkpCiAgICAg
ICAgICAgICBzZWxlY3RNZWRpYVJlc291cmNlKCk7CiAgICAgfQogCkBAIC0xMjU3LDcgKzEyNTcs
NyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVzb3VyY2UoKQogICAgIGlm
IChtX3Jlc291cmNlU2VsZWN0aW9uVGFza1F1ZXVlLmhhc1BlbmRpbmdUYXNrcygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT5wYWdlQWxsb3dzRGF0YUxvYWRp
bmcoKSkgeworICAgIGlmICghbWVkaWFTZXNzaW9uKCkucGFnZUFsbG93c0RhdGFMb2FkaW5nKCkp
IHsKICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAibm90IGFsbG93ZWQgdG8gbG9h
ZCBpbiBiYWNrZ3JvdW5kLCB3YWl0aW5nIik7CiAgICAgICAgIHNldFNob3VsZERlbGF5TG9hZEV2
ZW50KGZhbHNlKTsKICAgICAgICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQpA
QCAtMTI3MCw3ICsxMjcwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJl
c291cmNlKCkKICAgICAvLyBPbmNlIHRoZSBwYWdlIGhhcyBhbGxvd2VkIGFuIGVsZW1lbnQgdG8g
bG9hZCBtZWRpYSwgaXQgaXMgZnJlZSB0byBsb2FkIGF0IHdpbGwuIFRoaXMgYWxsb3dzIGEKICAg
ICAvLyBwbGF5bGlzdCB0aGF0IHN0YXJ0cyBpbiBhIGZvcmVncm91bmQgdGFiIHRvIGNvbnRpbnVl
IGF1dG9tYXRpY2FsbHkgaWYgdGhlIHRhYiBpcyBzdWJzZXF1ZW50bHkKICAgICAvLyBwdXQgaW50
byB0aGUgYmFja2dyb3VuZC4KLSAgICBtX21lZGlhU2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0
cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlUGFnZUNvbnNlbnRUb0xvYWRNZWRp
YSk7CisgICAgbWVkaWFTZXNzaW9uKCkucmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVs
ZW1lbnRTZXNzaW9uOjpSZXF1aXJlUGFnZUNvbnNlbnRUb0xvYWRNZWRpYSk7CiAKICAgICBhdXRv
IGxvZ1NpdGVJZGVudGlmaWVyID0gTE9HSURFTlRJRklFUjsKICAgICBVTlVTRURfUEFSQU0obG9n
U2l0ZUlkZW50aWZpZXIpOwpAQCAtMTQ5NSwxNCArMTQ5NSwxNCBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBVUkwmIGluaXRpYWxVUkwsIENvbnRlbnRUeXBlJiBj
b250ZW50VAogICAgIG1fcGxheWVyLT5zZXRQcml2YXRlQnJvd3NpbmdNb2RlKHByaXZhdGVNb2Rl
KTsKIAogICAgIGlmICghYXV0b3BsYXkoKSAmJiAhbV9oYXZlUHJlcGFyZWRUb1BsYXkpCi0gICAg
ICAgIG1fcGxheWVyLT5zZXRQcmVsb2FkKG1fbWVkaWFTZXNzaW9uLT5lZmZlY3RpdmVQcmVsb2Fk
Rm9yRWxlbWVudCgpKTsKKyAgICAgICAgbV9wbGF5ZXItPnNldFByZWxvYWQobWVkaWFTZXNzaW9u
KCkuZWZmZWN0aXZlUHJlbG9hZEZvckVsZW1lbnQoKSk7CiAgICAgbV9wbGF5ZXItPnNldFByZXNl
cnZlc1BpdGNoKG1fd2Via2l0UHJlc2VydmVzUGl0Y2gpOwogICAgIG1fcGxheWVyLT5zZXRQaXRj
aENvcnJlY3Rpb25BbGdvcml0aG0oZG9jdW1lbnQoKS5zZXR0aW5ncygpLnBpdGNoQ29ycmVjdGlv
bkFsZ29yaXRobSgpKTsKIAogICAgIGlmICghbV9leHBsaWNpdGx5TXV0ZWQpIHsKICAgICAgICAg
bV9leHBsaWNpdGx5TXV0ZWQgPSB0cnVlOwogICAgICAgICBtX211dGVkID0gaGFzQXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihtdXRlZEF0dHIpOwotICAgICAgICBtX21lZGlhU2Vzc2lv
bi0+Y2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5jYW5Q
cm9kdWNlQXVkaW9DaGFuZ2VkKCk7CiAgICAgfQogCiAgICAgdXBkYXRlVm9sdW1lKCk7CkBAIC0y
MjIzLDcgKzIyMjMsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhTG9hZGluZ0ZhaWxl
ZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIGVycm9yKQogCiAgICAgbG9nTWVkaWFMb2FkUmVx
dWVzdChkb2N1bWVudCgpLnBhZ2UoKSwgU3RyaW5nKCksIGNvbnZlcnRFbnVtZXJhdGlvblRvU3Ry
aW5nKGVycm9yKSwgZmFsc2UpOwogCi0gICAgbV9tZWRpYVNlc3Npb24tPmNsaWVudENoYXJhY3Rl
cmlzdGljc0NoYW5nZWQoKTsKKyAgICBtZWRpYVNlc3Npb24oKS5jbGllbnRDaGFyYWN0ZXJpc3Rp
Y3NDaGFuZ2VkKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0TmV0d29ya1N0YXRl
KE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgc3RhdGUpCkBAIC0yNDE2LDcgKzI0MTYsNyBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgc3RhdGUpCiAgICAgICAgIHNjaGVkdWxlVXBkYXRlTWVkaWFTdGF0ZSgpOwogI2VuZGlmCiAK
LSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmNsaWVudENoYXJhY3RlcmlzdGljc0NoYW5nZWQoKTsK
KyAgICAgICAgbWVkaWFTZXNzaW9uKCkuY2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdlZCgpOwog
ICAgIH0KIAogICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gSEFWRV9DVVJSRU5UX0RBVEEgJiYgb2xk
U3RhdGUgPCBIQVZFX0NVUlJFTlRfREFUQSkgewpAQCAtMjQ1Niw3ICsyNDU2LDcgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHN0
YXRlKQogCiAgICAgLy8gSWYgd2UgdHJhbnNpdGlvbiB0byB0aGUgRnV0dXJlIERhdGEgc3RhdGUg
YW5kIHdlJ3JlIGFib3V0IHRvIGJlZ2luIHBsYXlpbmcsIGVuc3VyZSBwbGF5YmFjayBpcyBhY3R1
YWxseSBwZXJtaXR0ZWQgZmlyc3QsCiAgICAgLy8gaG9ub3JpbmcgYW55IHBsYXliYWNrIGRlbmlh
bCByZWFzb25zIHN1Y2ggYXMgdGhlIHJlcXVpcmVtZW50IG9mIGEgdXNlciBnZXN0dXJlLgotICAg
IGlmIChtX3JlYWR5U3RhdGUgPT0gSEFWRV9GVVRVUkVfREFUQSAmJiBvbGRTdGF0ZSA8IEhBVkVf
RlVUVVJFX0RBVEEgJiYgcG90ZW50aWFsbHlQbGF5aW5nKCkgJiYgIW1fbWVkaWFTZXNzaW9uLT5w
bGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykp
IHsKKyAgICBpZiAobV9yZWFkeVN0YXRlID09IEhBVkVfRlVUVVJFX0RBVEEgJiYgb2xkU3RhdGUg
PCBIQVZFX0ZVVFVSRV9EQVRBICYmIHBvdGVudGlhbGx5UGxheWluZygpICYmICFtZWRpYVNlc3Np
b24oKS5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxh
eWluZykpIHsKICAgICAgICAgYXV0byBjYW5UcmFuc2l0aW9uID0gY2FuVHJhbnNpdGlvbkZyb21B
dXRvcGxheVRvUGxheSgpOwogICAgICAgICBpZiAoY2FuVHJhbnNpdGlvbiAmJiBjYW5UcmFuc2l0
aW9uLnZhbHVlKCkgPT0gTWVkaWFQbGF5YmFja0RlbmlhbFJlYXNvbjo6VXNlckdlc3R1cmVSZXF1
aXJlZCkKICAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgIkF1dG9wbGF5IGJs
b2NrZWQsIHVzZXIgZ2VzdHVyZSByZXF1aXJlZCIpOwpAQCAtMjk3Niw3ICsyOTc2LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpzZWVrV2l0aFRvbGVyYW5jZShjb25zdCBNZWRpYVRpbWUmIGlu
VGltZSwgY29uc3QgTWVkaWFUaW0KICAgICAgICAgc2Vla1Rhc2soKTsKIAogICAgIGlmIChwcm9j
ZXNzaW5nVXNlckdlc3R1cmVGb3JNZWRpYSgpKQotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+cmVt
b3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdl
c3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5y
ZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2Vy
R2VzdHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2Vla1Rhc2soKQpAQCAtMzQ0NSw3ICszNDQ1LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpwbGF5KERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCiB7CiAgICAgQUxX
QVlTX0xPRyhMT0dJREVOVElGSUVSKTsKIAotICAgIGF1dG8gc3VjY2VzcyA9IG1fbWVkaWFTZXNz
aW9uLT5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxh
eWluZyk7CisgICAgYXV0byBzdWNjZXNzID0gbWVkaWFTZXNzaW9uKCkucGxheWJhY2tTdGF0ZUNo
YW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpOwogICAgIGlmICghc3Vj
Y2VzcykgewogICAgICAgICBpZiAoc3VjY2Vzcy52YWx1ZSgpID09IE1lZGlhUGxheWJhY2tEZW5p
YWxSZWFzb246OlVzZXJHZXN0dXJlUmVxdWlyZWQpCiAgICAgICAgICAgICBzZXRBdXRvcGxheUV2
ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6UHJldmVudGVkQXV0
b3BsYXkpOwpAQCAtMzQ3MSw3ICszNDcxLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwbGF5
KCkKIHsKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwogCi0gICAgYXV0byBzdWNjZXNz
ID0gbV9tZWRpYVNlc3Npb24tPnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5
YmFja1N0YXRlOjpQbGF5aW5nKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBtZWRpYVNlc3Npb24oKS5w
bGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZyk7
CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgIEVSUk9SX0xPRyhMT0dJREVOVElGSUVSLCAi
cGxheWJhY2sgbm90IHBlcm1pdHRlZDogIiwgc3VjY2Vzcy52YWx1ZSgpKTsKICAgICAgICAgaWYg
KHN1Y2Nlc3MudmFsdWUoKSA9PSBNZWRpYVBsYXliYWNrRGVuaWFsUmVhc29uOjpVc2VyR2VzdHVy
ZVJlcXVpcmVkKQpAQCAtMzQ5OCw3ICszNDk4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpw
bGF5SW50ZXJuYWwoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX21lZGlh
U2Vzc2lvbi0+Y2xpZW50V2lsbEJlZ2luUGxheWJhY2soKSkgeworICAgIGlmICghbWVkaWFTZXNz
aW9uKCkuY2xpZW50V2lsbEJlZ2luUGxheWJhY2soKSkgewogICAgICAgICBBTFdBWVNfTE9HKExP
R0lERU5USUZJRVIsICJyZXR1cm5pbmcgYmVjYXVzZSBvZiBpbnRlcnJ1cHRpb24iKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTM1NTIsNyArMzU1Miw3IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6cGF1c2UoKQogICAgIGlmIChtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbikKICAgICAg
ICAgbV93YWl0aW5nVG9FbnRlckZ1bGxzY3JlZW4gPSBmYWxzZTsKIAotICAgIGlmICghbV9tZWRp
YVNlc3Npb24tPnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRl
OjpQYXVzZWQpKQorICAgIGlmICghbWVkaWFTZXNzaW9uKCkucGxheWJhY2tTdGF0ZUNoYW5nZVBl
cm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBhdXNlZCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChwcm9jZXNzaW5nVXNlckdlc3R1cmVGb3JNZWRpYSgpKQpAQCAtMzU3NSw3ICszNTc1
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUludGVybmFsKCkKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24tPmNsaWVudFdpbGxQYXVzZVBs
YXliYWNrKCkpIHsKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLmNsaWVudFdpbGxQYXVzZVBsYXli
YWNrKCkpIHsKICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAicmV0dXJuaW5nIGJl
Y2F1c2Ugb2YgaW50ZXJydXB0aW9uIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNTg0
LDcgKzM1ODQsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlSW50ZXJuYWwoKQogICAg
IGlmICghbV9wbGF5ZXIgfHwgbV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19FTVBUWSkgewogICAg
ICAgICAvLyBVbmxlc3MgdGhlIHJlc3RyaWN0aW9uIG9uIG1lZGlhIHJlcXVpcmluZyB1c2VyIGFj
dGlvbiBoYXMgYmVlbiBsaWZ0ZWQKICAgICAgICAgLy8gZG9uJ3QgdHJpZ2dlciBsb2FkaW5nIGlm
IGEgc2NyaXB0IGNhbGxzIHBhdXNlKCkuCi0gICAgICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBs
YXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkK
KyAgICAgICAgaWYgKCFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVk
KE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIHNlbGVjdE1lZGlhUmVzb3VyY2UoKTsKICAgICB9CkBAIC0zNjczLDcgKzM2NzMsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBIVE1MTWVkaWFFbGVtZW50OjpzZXRWb2x1bWUoZG91YmxlIHZvbHVt
ZSkKICAgICB1cGRhdGVWb2x1bWUoKTsKICAgICBzY2hlZHVsZUV2ZW50KGV2ZW50TmFtZXMoKS52
b2x1bWVjaGFuZ2VFdmVudCk7CiAKLSAgICBpZiAoaXNQbGF5aW5nKCkgJiYgIW1fbWVkaWFTZXNz
aW9uLT5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxh
eWluZykpIHsKKyAgICBpZiAoaXNQbGF5aW5nKCkgJiYgIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNr
U3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkgewogICAg
ICAgICBzY2hlZHVsZVJlamVjdFBlbmRpbmdQbGF5UHJvbWlzZXMoRE9NRXhjZXB0aW9uOjpjcmVh
dGUoTm90QWxsb3dlZEVycm9yKSk7CiAgICAgICAgIHBhdXNlSW50ZXJuYWwoKTsKICAgICAgICAg
c2V0QXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6
OlByZXZlbnRlZEF1dG9wbGF5KTsKQEAgLTM3MzIsNyArMzczMiw3IEBAIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6c2V0TXV0ZWQoYm9vbCBtdXRlZCkKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJB
Q0tfVEFSR0VUKQogICAgICAgICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUoKTsKICNlbmRpZgot
ICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOworICAgICAg
ICBtZWRpYVNlc3Npb24oKS5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CiAgICAgICAgIHVwZGF0
ZVNsZWVwRGlzYWJsaW5nKCk7CiAgICAgfQogCkBAIC0zNzg3LDcgKzM3ODcsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OmJlZ2luU2NydWJiaW5nKCkKICAgICAgICAgfQogICAgIH0KIAotICAg
IG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNl
c3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7CisgICAg
bWVkaWFTZXNzaW9uKCkucmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNz
aW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOwogfQogCiB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVuZFNjcnViYmluZygpCkBAIC0zOTQxLDcgKzM5NDEsNyBA
QCBkb3VibGUgSFRNTE1lZGlhRWxlbWVudDo6cGVyY2VudExvYWRlZCgpIGNvbnN0CiAKIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJEaWRBZGRBdWRpb1RyYWNrKEF1ZGlvVHJhY2tQ
cml2YXRlJiB0cmFjaykKIHsKLSAgICBpZiAoaXNQbGF5aW5nKCkgJiYgIW1fbWVkaWFTZXNzaW9u
LT5wbGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWlu
ZykpIHsKKyAgICBpZiAoaXNQbGF5aW5nKCkgJiYgIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3Rh
dGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkgewogICAgICAg
ICBzY2hlZHVsZVJlamVjdFBlbmRpbmdQbGF5UHJvbWlzZXMoRE9NRXhjZXB0aW9uOjpjcmVhdGUo
Tm90QWxsb3dlZEVycm9yKSk7CiAgICAgICAgIHBhdXNlSW50ZXJuYWwoKTsKICAgICAgICAgc2V0
QXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUoQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6OlBy
ZXZlbnRlZEF1dG9wbGF5KTsKQEAgLTQ2ODUsNyArNDY4NSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c291cmNlV2FzQWRkZWQoSFRNTFNvdXJjZUVsZW1lbnQmIHNvdXJjZSkKICAgICBpZiAo
bV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19FTVBUWSkgewogICAgICAgICBtX25leHRDaGlsZE5v
ZGVUb0NvbnNpZGVyID0gJnNvdXJjZTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAg
ICBpZiAobV9tZWRpYVNlc3Npb24tPmRhdGFMb2FkaW5nUGVybWl0dGVkKCkpCisgICAgICAgIGlm
IChtZWRpYVNlc3Npb24oKS5kYXRhTG9hZGluZ1Blcm1pdHRlZCgpKQogI2VuZGlmCiAgICAgICAg
ICAgICBzZWxlY3RNZWRpYVJlc291cmNlKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ3ODMsNyAr
NDc4Myw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJUaW1lQ2hhbmdlZCgp
CiAgICAgICAgICAgICAgICAgLy8gY2hhbmdlcyBwYXVzZWQgdG8gdHJ1ZSBhbmQgZmlyZXMgYSBz
aW1wbGUgZXZlbnQgbmFtZWQgcGF1c2UgYXQgdGhlIG1lZGlhIGVsZW1lbnQuCiAgICAgICAgICAg
ICAgICAgbV9wYXVzZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZl
bnROYW1lcygpLnBhdXNlRXZlbnQpOwotICAgICAgICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5j
bGllbnRXaWxsUGF1c2VQbGF5YmFjaygpOworICAgICAgICAgICAgICAgIG1lZGlhU2Vzc2lvbigp
LmNsaWVudFdpbGxQYXVzZVBsYXliYWNrKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAv
LyBRdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBlbmRlZCBhdCB0aGUg
bWVkaWEgZWxlbWVudC4KICAgICAgICAgICAgIGlmICghbV9zZW50RW5kRXZlbnQpIHsKQEAgLTQ4
MzIsNyArNDgzMiw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6YWRkQmVoYXZpb3JSZXN0cmlj
dGlvbnNPbkVuZElmTmVjZXNzYXJ5KCkKICAgICBpZiAoaXNGdWxsc2NyZWVuKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1l
ZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQ29udHJvbENvbnRyb2xzTWFu
YWdlcik7CisgICAgbWVkaWFTZXNzaW9uKCkuYWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVs
ZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIp
OwogICAgIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9uc1RpbWVy
LnN0b3AoKTsKICAgICBtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZpb3JSZXN0cmljdGlv
bnNUaW1lci5zdGFydE9uZVNob3QoaGlkZU1lZGlhQ29udHJvbHNBZnRlckVuZGVkRGVsYXkpOwog
fQpAQCAtNDg2Miw3ICs0ODYyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZWVrVG9QbGF5
YmFja1Bvc2l0aW9uRW5kZWRUaW1lckZpcmVkKCkKICAgICBpZiAoIW1faXNTY3J1YmJpbmdSZW1v
dGVseSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2Vy
OjpzaGFyZWRNYW5hZ2VyKCkuc2Vzc2lvbkRpZEVuZFJlbW90ZVNjcnViYmluZygqbV9tZWRpYVNl
c3Npb24pOworICAgIFBsYXRmb3JtTWVkaWFTZXNzaW9uTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigp
LnNlc3Npb25EaWRFbmRSZW1vdGVTY3J1YmJpbmcobWVkaWFTZXNzaW9uKCkpOwogICAgIG1faXNT
Y3J1YmJpbmdSZW1vdGVseSA9IGZhbHNlOwogICAgIG1fc2Vla1RvUGxheWJhY2tQb3NpdGlvbkVu
ZGVkVGltZXIuc3RvcCgpOwogI2VuZGlmCkBAIC01MDQwLDcgKzUwNDAsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhRW5naW5lV2FzVXBkYXRlZCgpCiAgICAgdXBkYXRlUmVuZGVyZXIo
KTsKICAgICBlbmRQcm9jZXNzaW5nTWVkaWFQbGF5ZXJDYWxsYmFjaygpOwogCi0gICAgbV9tZWRp
YVNlc3Npb24tPm1lZGlhRW5naW5lVXBkYXRlZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLm1lZGlh
RW5naW5lVXBkYXRlZCgpOwogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQSkKICAgICBpZiAo
bV9wbGF5ZXIgJiYgbV9tZWRpYUtleXMpCkBAIC01MTIyLDcgKzUxMjIsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCkKIAogICAgIHVw
ZGF0ZVJlbmRlcmVyKCk7CiAKLSAgICBpZiAoIXBhdXNlZCgpICYmICFtX21lZGlhU2Vzc2lvbi0+
cGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcp
KSB7CisgICAgaWYgKCFwYXVzZWQoKSAmJiAhbWVkaWFTZXNzaW9uKCkucGxheWJhY2tTdGF0ZUNo
YW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CiAgICAgICAgIHNj
aGVkdWxlUmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhET01FeGNlcHRpb246OmNyZWF0ZShOb3RB
bGxvd2VkRXJyb3IpKTsKICAgICAgICAgcGF1c2VJbnRlcm5hbCgpOwogICAgICAgICBzZXRBdXRv
cGxheUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6UHJldmVu
dGVkQXV0b3BsYXkpOwpAQCAtNTI2Nyw3ICs1MjY3LDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50
OjpzdG9wcGVkRHVlVG9FcnJvcnMoKSBjb25zdAogCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnBh
dXNlZEZvclVzZXJJbnRlcmFjdGlvbigpIGNvbnN0CiB7Ci0gICAgaWYgKG1fbWVkaWFTZXNzaW9u
LT5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZCkKKyAgICBpZiAo
bWVkaWFTZXNzaW9uKCkuc3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0
ZWQpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTMzOCw3
ICs1MzM4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogCiAg
ICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAic2hvdWxkQmVQbGF5aW5nID0gIiwgc2hvdWxk
QmVQbGF5aW5nLCAiLCBwbGF5ZXJQYXVzZWQgPSAiLCBwbGF5ZXJQYXVzZWQpOwogCi0gICAgaWYg
KHNob3VsZEJlUGxheWluZyAmJiBwbGF5ZXJQYXVzZWQgJiYgbV9tZWRpYVNlc3Npb24tPnJlcXVp
cmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSAmJiAobV93YWl0aW5nVG9FbnRlckZ1bGxz
Y3JlZW4gfHwgIWlzRnVsbHNjcmVlbigpKSkgeworICAgIGlmIChzaG91bGRCZVBsYXlpbmcgJiYg
cGxheWVyUGF1c2VkICYmIG1lZGlhU2Vzc2lvbigpLnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVv
UGxheWJhY2soKSAmJiAobV93YWl0aW5nVG9FbnRlckZ1bGxzY3JlZW4gfHwgIWlzRnVsbHNjcmVl
bigpKSkgewogICAgICAgICBpZiAoIW1fd2FpdGluZ1RvRW50ZXJGdWxsc2NyZWVuKQogICAgICAg
ICAgICAgZW50ZXJGdWxsc2NyZWVuKCk7CiAKQEAgLTUzNTQsNyArNTM1NCw3IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6dXBkYXRlUGxheVN0YXRlKCkKICAgICAgICAgaW52YWxpZGF0ZUNhY2hl
ZFRpbWUoKTsKIAogICAgICAgICBpZiAocGxheWVyUGF1c2VkKSB7Ci0gICAgICAgICAgICBtX21l
ZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbEJlZ2luUGxheWJhY2soKTsKKyAgICAgICAgICAgIG1lZGlh
U2Vzc2lvbigpLmNsaWVudFdpbGxCZWdpblBsYXliYWNrKCk7CiAKICAgICAgICAgICAgIC8vIFNl
dCByYXRlLCBtdXRlZCBhbmQgdm9sdW1lIGJlZm9yZSBjYWxsaW5nIHBsYXkgaW4gY2FzZSB0aGV5
IHdlcmUgc2V0IGJlZm9yZSB0aGUgbWVkaWEgZW5naW5lIHdhcyBzZXQgdXAuCiAgICAgICAgICAg
ICAvLyBUaGUgbWVkaWEgZW5naW5lIHNob3VsZCBqdXN0IHN0YXNoIHRoZSByYXRlLCBtdXRlZCBh
bmQgdm9sdW1lIHZhbHVlcyBzaW5jZSBpdCBpc24ndCBhbHJlYWR5IHBsYXlpbmcuCkBAIC01NDAx
LDcgKzU0MDEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNoZWNrRm9yQXVkaW9BbmRWaWRl
bygpCiB7CiAgICAgbV9oYXNFdmVySGFkQXVkaW8gfD0gaGFzQXVkaW8oKTsKICAgICBtX2hhc0V2
ZXJIYWRWaWRlbyB8PSBoYXNWaWRlbygpOwotICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNl
QXVkaW9DaGFuZ2VkKCk7CisgICAgbWVkaWFTZXNzaW9uKCkuY2FuUHJvZHVjZUF1ZGlvQ2hhbmdl
ZCgpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldFBsYXlpbmcoYm9vbCBwbGF5aW5n
KQpAQCAtNTUyOCw3ICs1NTI4LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjbGVhck1lZGlh
UGxheWVyKCkKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgIGlmICho
YXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkud2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFi
aWxpdHljaGFuZ2VkRXZlbnQpIHx8IG1fcmVtb3RlLT5oYXNBdmFpbGFiaWxpdHlDYWxsYmFja3Mo
KSkgewogICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0g
ZmFsc2U7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWls
YWJpbGl0eUxpc3RlbmVycyhmYWxzZSk7CisgICAgICAgIGlmIChtX21lZGlhU2Vzc2lvbikKKyAg
ICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUxpc3RlbmVycyhmYWxzZSk7CiAKICAgICAgICAgLy8gU2VuZCBhbiBhdmFpbGFiaWxpdHkgZXZl
bnQgaW4gY2FzZSBzY3JpcHRzIHdhbnQgdG8gaGlkZSB0aGUgcGlja2VyIHdoZW4gdGhlIGVsZW1l
bnQKICAgICAgICAgLy8gZG9lc24ndCBzdXBwb3J0IHBsYXliYWNrIHRvIGEgdGFyZ2V0LgpAQCAt
NTU1OSw4ICs1NTYwLDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBsYXll
cigpCiAgICAgaWYgKG1fdGV4dFRyYWNrcykKICAgICAgICAgY29uZmlndXJlVGV4dFRyYWNrRGlz
cGxheSgpOwogCi0gICAgbV9tZWRpYVNlc3Npb24tPmNsaWVudENoYXJhY3RlcmlzdGljc0NoYW5n
ZWQoKTsKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOworICAg
IGlmIChtX21lZGlhU2Vzc2lvbikgeworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50Q2hh
cmFjdGVyaXN0aWNzQ2hhbmdlZCgpOworICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2FuUHJvZHVj
ZUF1ZGlvQ2hhbmdlZCgpOworICAgIH0KIAogICAgIG1fcmVzb3VyY2VTZWxlY3Rpb25UYXNrUXVl
dWUuY2FuY2VsQWxsVGFza3MoKTsKIApAQCAtNTU4Nyw3ICs1NTkwLDggQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpzdG9wV2l0aG91dERlc3Ryb3lpbmdNZWRpYVBsYXllcigpCiAgICAgLy8gU3Rv
cCB0aGUgcGxheWJhY2sgd2l0aG91dCBnZW5lcmF0aW5nIGV2ZW50cwogICAgIHNldFBsYXlpbmco
ZmFsc2UpOwogICAgIHBhdXNlQW5kVXBkYXRlUGxheVN0YXRlSW1tZWRpYXRlbHkoKTsKLSAgICBt
X21lZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbEJlRE9NU3VzcGVuZGVkKCk7CisgICAgaWYgKG1fbWVk
aWFTZXNzaW9uKQorICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbEJlRE9NU3VzcGVu
ZGVkKCk7CiAKICAgICBzZXRBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50
UGxheWJhY2tTdGF0ZTo6Tm9uZSk7CiAKQEAgLTU2NDcsNyArNTY1MSw4IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6c3RvcCgpCiAgICAgLy8gbG9hZGVkIGFuZCBjYWxsaW5nIGl0IGFnYWluIHdv
bid0IGNhdXNlIGFueSBwcm9ibGVtcy4KICAgICBjbGVhck1lZGlhUGxheWVyKCk7CiAKLSAgICBt
X21lZGlhU2Vzc2lvbi0+c3RvcFNlc3Npb24oKTsKKyAgICBpZiAobV9tZWRpYVNlc3Npb24pCisg
ICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zdG9wU2Vzc2lvbigpOwogfQogCiB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCkBAIC01NjYxLDcg
KzU2NjYsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnN1c3BlbmQoUmVhc29uRm9yU3VzcGVu
c2lvbiByZWFzb24pCiAgICAgY2FzZSBSZWFzb25Gb3JTdXNwZW5zaW9uOjpCYWNrRm9yd2FyZENh
Y2hlOgogICAgICAgICBzdG9wV2l0aG91dERlc3Ryb3lpbmdNZWRpYVBsYXllcigpOwogICAgICAg
ICBzZXRCdWZmZXJpbmdQb2xpY3koQnVmZmVyaW5nUG9saWN5OjpNYWtlUmVzb3VyY2VzUHVyZ2Vh
YmxlKTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVk
aWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYSk7CisgICAg
ICAgIG1lZGlhU2Vzc2lvbigpLmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYSk7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgUmVhc29uRm9yU3VzcGVuc2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRlZDoKICAgICBj
YXNlIFJlYXNvbkZvclN1c3BlbnNpb246OkphdmFTY3JpcHREZWJ1Z2dlclBhdXNlZDoKQEAgLTU2
NzcsMTMgKzU2ODIsMTMgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpyZXN1bWUoKQogCiAgICAg
c2V0SW5BY3RpdmVEb2N1bWVudCh0cnVlKTsKIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBh
Z2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmcoKSkKKyAgICBpZiAoIW1lZGlhU2Vzc2lvbigp
LnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVzdW1pbmcoKSkKICAgICAgICAgZG9jdW1lbnQoKS5h
ZGRNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwogICAgIGVsc2UKICAgICAgICAgc2V0UGF1
c2VkSW50ZXJuYWwoZmFsc2UpOwogCi0gICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9y
UmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1
bWVNZWRpYSk7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnVwZGF0ZUJ1ZmZlcmluZ1BvbGljeSgpOwor
ICAgIG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50
U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9SZXN1bWVNZWRpYSk7CisgICAgbWVkaWFTZXNz
aW9uKCkudXBkYXRlQnVmZmVyaW5nUG9saWN5KCk7CiAKICAgICBpZiAobV9lcnJvciAmJiBtX2Vy
cm9yLT5jb2RlKCkgPT0gTWVkaWFFcnJvcjo6TUVESUFfRVJSX0FCT1JURUQgJiYgIW1fcmVzdW1l
VGFza1F1ZXVlLmhhc1BlbmRpbmdUYXNrKCkpIHsKICAgICAgICAgLy8gUmVzdGFydCB0aGUgbG9h
ZCBpZiBpdCB3YXMgYWJvcnRlZCBpbiB0aGUgbWlkZGxlIGJ5IG1vdmluZyB0aGUgZG9jdW1lbnQg
dG8gdGhlIGJhY2svZm9yd2FyZCBjYWNoZS4KQEAgLTU3MjQsNyArNTcyOSw3IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdlZCgpCiAgICAgQUxXQVlTX0xPRyhM
T0dJREVOVElGSUVSLCAidmlzaWJsZSA9ICIsICFtX2VsZW1lbnRJc0hpZGRlbik7CiAKICAgICB1
cGRhdGVTbGVlcERpc2FibGluZygpOwotICAgIG1fbWVkaWFTZXNzaW9uLT52aXNpYmlsaXR5Q2hh
bmdlZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLnZpc2liaWxpdHlDaGFuZ2VkKCk7CiAgICAgaWYg
KG1fcGxheWVyKQogICAgICAgICBtX3BsYXllci0+c2V0VmlzaWJsZSghbV9lbGVtZW50SXNIaWRk
ZW4pOwogCkBAIC01NzMyLDEwICs1NzM3LDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dmlz
aWJpbGl0eVN0YXRlQ2hhbmdlZCgpCiAgICAgaWYgKCFpc1BsYXlpbmdBdWRpbykgewogICAgICAg
ICBpZiAobV9lbGVtZW50SXNIaWRkZW4pIHsKICAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURF
TlRJRklFUiwgIlN1c3BlbmRpbmcgcGxheWJhY2sgYWZ0ZXIgZ29pbmcgdG8gdGhlIGJhY2tncm91
bmQiKTsKLSAgICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5iZWdpbkludGVycnVwdGlvbihQbGF0
Zm9ybU1lZGlhU2Vzc2lvbjo6RW50ZXJpbmdCYWNrZ3JvdW5kKTsKKyAgICAgICAgICAgIG1lZGlh
U2Vzc2lvbigpLmJlZ2luSW50ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpFbnRlcmlu
Z0JhY2tncm91bmQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQUxXQVlTX0xPRyhM
T0dJREVOVElGSUVSLCAiUmVzdW1pbmcgcGxheWJhY2sgYWZ0ZXIgZW50ZXJpbmcgZm9yZWdyb3Vu
ZCIpOwotICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmVuZEludGVycnVwdGlvbihQbGF0Zm9y
bU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZyk7CisgICAgICAgICAgICBtZWRpYVNlc3Np
b24oKS5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlp
bmcpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTc2OCwxMiArNTc3MywxMiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OndlYmtpdFNob3dQbGF5YmFja1RhcmdldFBpY2tlcigpCiAgICAgQUxX
QVlTX0xPRyhMT0dJREVOVElGSUVSKTsKICAgICBpZiAocHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9y
TWVkaWEoKSkKICAgICAgICAgcmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNl
ckdlc3R1cmUoKTsKLSAgICBtX21lZGlhU2Vzc2lvbi0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2Vy
KCk7CisgICAgbWVkaWFTZXNzaW9uKCkuc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCk7CiB9CiAK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lyZWxlc3NSb3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2Uo
KQogewotICAgIGJvb2wgaGFzVGFyZ2V0cyA9IG1fbWVkaWFTZXNzaW9uLT5oYXNXaXJlbGVzc1Bs
YXliYWNrVGFyZ2V0cygpOworICAgIGJvb2wgaGFzVGFyZ2V0cyA9IG1lZGlhU2Vzc2lvbigpLmhh
c1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCk7CiAgICAgbV9yZW1vdGUtPmF2YWlsYWJpbGl0eUNo
YW5nZWQoaGFzVGFyZ2V0cyk7CiAKICAgICBlbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxp
dHlDaGFuZ2VkRXZlbnQoKTsKQEAgLTU3OTcsOCArNTgwMiw4IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6c2V0SXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldChib29sIGlzUGxheWluZ1RvV2lyZWxl
c3NUYXJnCiAgICAgICAgIG1fcmVtb3RlLT5pc1BsYXlpbmdUb1JlbW90ZVRhcmdldENoYW5nZWQo
bV9pc1BsYXlpbmdUb1dpcmVsZXNzVGFyZ2V0KTsKICAgICAgICAgQUxXQVlTX0xPRyhsb2dTaXRl
SWRlbnRpZmllciwgbV9pc1BsYXlpbmdUb1dpcmVsZXNzVGFyZ2V0KTsKICAgICAgICAgY29uZmln
dXJlTWVkaWFDb250cm9scygpOwotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+aXNQbGF5aW5nVG9X
aXJlbGVzc1BsYXliYWNrVGFyZ2V0Q2hhbmdlZChtX2lzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQp
OwotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOworICAg
ICAgICBtZWRpYVNlc3Npb24oKS5pc1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXRDaGFu
Z2VkKG1faXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldCk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigp
LmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKICAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0
YXRlKCk7CiAgICAgICAgIHVwZGF0ZVNsZWVwRGlzYWJsaW5nKCk7CiAKQEAgLTU4NDYsNyArNTg1
MSw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9t
U3RyaW5nJiBldmVudFR5cGUsIFJlZjxFdmVudExpCiAKICAgICBpZiAoaXNGaXJzdEF2YWlsYWJp
bGl0eUNoYW5nZWRMaXN0ZW5lcikgewogICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5TGlzdGVuZXJzID0gdHJ1ZTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1Bs
YXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKHRydWUpOworICAgICAgICBtZWRpYVNl
c3Npb24oKS5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyh0cnVlKTsK
ICAgICB9CiAKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICInd2Via2l0cGxheWJhY2t0
YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkJyIpOwpAQCAtNTg3Miw3ICs1ODc3LDcgQEAgYm9vbCBI
VE1MTWVkaWFFbGVtZW50OjpyZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXMKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJyZW1vdmVk
IGxhc3QgbGlzdGVuZXIgPSAiLCBkaWRSZW1vdmVMYXN0QXZhaWxhYmlsaXR5Q2hhbmdlZExpc3Rl
bmVyKTsKICAgICBpZiAoZGlkUmVtb3ZlTGFzdEF2YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lcikg
ewogICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gZmFs
c2U7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJp
bGl0eUxpc3RlbmVycyhmYWxzZSk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLnNldEhhc1BsYXli
YWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGZhbHNlKTsKICAgICAgICAgc2NoZWR1bGVV
cGRhdGVNZWRpYVN0YXRlKCk7CiAgICAgfQogCkBAIC01ODgxLDcgKzU4ODYsNyBAQCBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbVN0cmluZyYgZXZl
bnRUeXBlLCBFdmVudExpcwogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVucXVldWVQbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVudCgpCiB7Ci0gICAgYm9vbCBoYXNUYXJnZXRz
ID0gbV9tZWRpYVNlc3Npb24tPmhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCk7CisgICAgYm9v
bCBoYXNUYXJnZXRzID0gbWVkaWFTZXNzaW9uKCkuaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMo
KTsKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJoYXNUYXJnZXRzID0gIiwgaGFzVGFy
Z2V0cyk7CiAgICAgYXV0byBldmVudCA9IFdlYktpdFBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxp
dHljaGFuZ2VkRXZlbnQsIGhhc1RhcmdldHMpOwogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7
CkBAIC01OTIwLDcgKzU5MjUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW90ZUhhc0F2
YWlsYWJpbGl0eUNhbGxiYWNrc0NoYW5nZWQoKQogCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSLCAiaGFzTGlzdGVuZXJzOiAiLCBoYXNMaXN0ZW5lcnMpOwogICAgIG1faGFzUGxheWJhY2tU
YXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBoYXNMaXN0ZW5lcnM7Ci0gICAgbV9tZWRpYVNl
c3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGhhc0xpc3Rl
bmVycyk7CisgICAgbWVkaWFTZXNzaW9uKCkuc2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxp
dHlMaXN0ZW5lcnMoaGFzTGlzdGVuZXJzKTsKICAgICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUo
KTsKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQpAQCAtNjA3
MSw3ICs2MDc2LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAg
ICAgaWYgKCFkb2N1bWVudCgpLnBhZ2UoKSB8fCAhaXM8SFRNTFZpZGVvRWxlbWVudD4oKnRoaXMp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXBhdXNlZCgpICYmIG1fbWVkaWFTZXNzaW9u
LT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpIHsKKyAgICBpZiAoIXBhdXNl
ZCgpICYmIG1lZGlhU2Vzc2lvbigpLnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2so
KSkgewogICAgICAgICBpZiAoIWRvY3VtZW50KCkuc2V0dGluZ3MoKS5hbGxvd3NJbmxpbmVNZWRp
YVBsYXliYWNrQWZ0ZXJGdWxsc2NyZWVuKCkgfHwgaXNWaWRlb1Rvb1NtYWxsRm9ySW5saW5lUGxh
eWJhY2soKSkKICAgICAgICAgICAgIHBhdXNlSW50ZXJuYWwoKTsKICAgICAgICAgZWxzZSB7CkBA
IC02NTA2LDcgKzY1MTEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByaXZhdGVCcm93c2lu
Z1N0YXRlRGlkQ2hhbmdlKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIGJvb2wgSFRNTE1lZGlh
RWxlbWVudDo6c2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKSBjb25zdAogewogICAgIC8vIEFs
d2F5cyBjcmVhdGUgY29udHJvbHMgZm9yIGF1dG9wbGF5IHZpZGVvIHRoYXQgcmVxdWlyZXMgdXNl
ciBnZXN0dXJlIGR1ZSB0byBiZWluZyBpbiBsb3cgcG93ZXIgbW9kZS4KLSAgICByZXR1cm4gaXNW
aWRlbygpICYmIGF1dG9wbGF5KCkgJiYgbV9tZWRpYVNlc3Npb24tPmhhc0JlaGF2aW9yUmVzdHJp
Y3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9EdWVU
b0xvd1Bvd2VyTW9kZSk7CisgICAgcmV0dXJuIGlzVmlkZW8oKSAmJiBhdXRvcGxheSgpICYmIG1l
ZGlhU2Vzc2lvbigpLmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6
UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9EdWVUb0xvd1Bvd2VyTW9kZSk7CiB9CiAKIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb250cm9scygpCkBAIC02NTE0LDcgKzY1
MTksNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKQog
ICAgIGJvb2wgcmVxdWlyZUNvbnRyb2xzID0gY29udHJvbHMoKTsKIAogICAgIC8vIEFsd2F5cyBj
cmVhdGUgY29udHJvbHMgZm9yIHZpZGVvIHdoZW4gZnVsbHNjcmVlbiBwbGF5YmFjayBpcyByZXF1
aXJlZC4KLSAgICBpZiAoaXNWaWRlbygpICYmIG1fbWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxz
Y3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCisgICAgaWYgKGlzVmlkZW8oKSAmJiBtZWRpYVNlc3Np
b24oKS5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCiAgICAgICAgIHJlcXVp
cmVDb250cm9scyA9IHRydWU7CiAKICAgICBpZiAoc2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXko
KSkKQEAgLTY2MzUsNyArNjY0MCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVk
aWFQbGF5ZXIoKQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgaWYg
KGhhc0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWls
YWJpbGl0eWNoYW5nZWRFdmVudCkgfHwgbV9yZW1vdGUtPmhhc0F2YWlsYWJpbGl0eUNhbGxiYWNr
cygpKSB7CiAgICAgICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMg
PSB0cnVlOwotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFp
bGFiaWxpdHlMaXN0ZW5lcnModHJ1ZSk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLnNldEhhc1Bs
YXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKHRydWUpOwogICAgICAgICBlbnF1ZXVl
UGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkRXZlbnQoKTsgLy8gRW5zdXJlIHRoZSBl
dmVudCBsaXN0ZW5lciBnZXRzIGF0IGxlYXN0IG9uZSBldmVudC4KICAgICB9CiAjZW5kaWYKQEAg
LTY5NDksNyArNjk1NCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJJc0Z1
bGxzY3JlZW4oKSBjb25zdAogCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVySXNG
dWxsc2NyZWVuUGVybWl0dGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24t
PmZ1bGxzY3JlZW5QZXJtaXR0ZWQoKTsKKyAgICByZXR1cm4gbWVkaWFTZXNzaW9uKCkuZnVsbHNj
cmVlblBlcm1pdHRlZCgpOwogfQogCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVy
SXNWaWRlbygpIGNvbnN0CkBAIC03MTU3LDcgKzcxNjIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb25zQWZ0ZXJGaXJzdFVzZXJHZXN0dXJlKE1lZGlh
RWxlbQogCiAgICAgbV9yZW1vdmVkQmVoYXZpb3JSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdl
c3R1cmUgPSB0cnVlOwogCi0gICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJp
Y3Rpb24ocmVzdHJpY3Rpb25zVG9SZW1vdmUpOworICAgIG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJl
aGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25zVG9SZW1vdmUpOwogICAgIGRvY3VtZW50KCku
dG9wRG9jdW1lbnQoKS5ub3RlVXNlckludGVyYWN0aW9uV2l0aE1lZGlhRWxlbWVudCgpOwogfQog
CkBAIC03MTY5LDE0ICs3MTc0LDE0IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUmF0
ZUNoYW5nZVJlc3RyaWN0aW9ucygpCiAKICAgICBjb25zdCBhdXRvJiB0b3BEb2N1bWVudCA9IGRv
Y3VtZW50LnRvcERvY3VtZW50KCk7CiAgICAgaWYgKHRvcERvY3VtZW50LnZpZGVvUGxheWJhY2tS
ZXF1aXJlc1VzZXJHZXN0dXJlKCkpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlv
clJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZp
ZGVvUmF0ZUNoYW5nZSk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLmFkZEJlaGF2aW9yUmVzdHJp
Y3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9SYXRl
Q2hhbmdlKTsKICAgICBlbHNlCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlv
clJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZp
ZGVvUmF0ZUNoYW5nZSk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVz
dHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9S
YXRlQ2hhbmdlKTsKIAogICAgIGlmICh0b3BEb2N1bWVudC5hdWRpb1BsYXliYWNrUmVxdWlyZXNV
c2VyR2VzdHVyZSgpKQotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmlj
dGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVD
aGFuZ2UpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1l
ZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvUmF0ZUNoYW5nZSk7
CiAgICAgZWxzZQotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmlj
dGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVD
aGFuZ2UpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9u
KE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvUmF0ZUNoYW5n
ZSk7CiB9CiAKIFJlZlB0cjxWaWRlb1BsYXliYWNrUXVhbGl0eT4gSFRNTE1lZGlhRWxlbWVudDo6
Z2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKQpAQCAtNzU0MSw3ICs3NTQ2LDcgQEAgYm9vbCBIVE1M
TWVkaWFFbGVtZW50Ojppc1N1c3BlbmRlZCgpIGNvbnN0CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJD
RSkKIHNpemVfdCBIVE1MTWVkaWFFbGVtZW50OjptYXhpbXVtU291cmNlQnVmZmVyU2l6ZShjb25z
dCBTb3VyY2VCdWZmZXImIGJ1ZmZlcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZWRpYVNlc3Np
b24tPm1heGltdW1NZWRpYVNvdXJjZUJ1ZmZlclNpemUoYnVmZmVyKTsKKyAgICByZXR1cm4gbWVk
aWFTZXNzaW9uKCkubWF4aW11bU1lZGlhU291cmNlQnVmZmVyU2l6ZShidWZmZXIpOwogfQogI2Vu
ZGlmCiAKQEAgLTc3NDksNyArNzc1NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRl
TWVkaWFTdGF0ZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fbWVkaWFTdGF0ZSA9IHN0YXRl
OwotICAgIG1fbWVkaWFTZXNzaW9uLT5tZWRpYVN0YXRlRGlkQ2hhbmdlKG1fbWVkaWFTdGF0ZSk7
CisgICAgbWVkaWFTZXNzaW9uKCkubWVkaWFTdGF0ZURpZENoYW5nZShtX21lZGlhU3RhdGUpOwog
CiAgICAgZG9jdW1lbnQoKS51cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogfQpAQCAtNzc2NywxMSAr
Nzc3MiwxMSBAQCBNZWRpYVByb2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgSFRNTE1lZGlhRWxlbWVu
dDo6bWVkaWFTdGF0ZSgpIGNvbnN0CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdF
VCkKICAgICBpZiAobV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycykgewog
ICAgICAgICBzdGF0ZSB8PSBIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVyOwot
ICAgICAgICBpZiAoIW1fbWVkaWFTZXNzaW9uLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxl
ZCgpKQorICAgICAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rp
c2FibGVkKCkpCiAgICAgICAgICAgICBzdGF0ZSB8PSBSZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9u
aXRvcmluZzsKICAgICB9CiAKLSAgICBib29sIHJlcXVpcmVVc2VyR2VzdHVyZSA9IG1fbWVkaWFT
ZXNzaW9uLT5oYXNCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVp
cmVVc2VyR2VzdHVyZVRvQXV0b3BsYXlUb0V4dGVybmFsRGV2aWNlKTsKKyAgICBib29sIHJlcXVp
cmVVc2VyR2VzdHVyZSA9IG1lZGlhU2Vzc2lvbigpLmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVk
aWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9BdXRvcGxheVRvRXh0ZXJuYWxE
ZXZpY2UpOwogICAgIGlmIChtX3JlYWR5U3RhdGUgPj0gSEFWRV9NRVRBREFUQSAmJiAhcmVxdWly
ZVVzZXJHZXN0dXJlICYmICFtX2ZhaWxlZFRvUGxheVRvV2lyZWxlc3NUYXJnZXQpCiAgICAgICAg
IHN0YXRlIHw9IEV4dGVybmFsRGV2aWNlQXV0b1BsYXlDYW5kaWRhdGU7CiAKQEAgLTc5MDUsNyAr
NzkxMCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cHVyZ2VCdWZmZXJlZERhdGFJZlBvc3Np
YmxlKCkKIHsKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIpOwogCi0gICAgaWYgKCFNZW1v
cnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpICYm
IG1fbWVkaWFTZXNzaW9uLT5wcmVmZXJyZWRCdWZmZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJpbmdQ
b2xpY3k6OkRlZmF1bHQpCisgICAgaWYgKCFNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRv
bigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpICYmIG1lZGlhU2Vzc2lvbigpLnByZWZlcnJlZEJ1
ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlcmluZ1BvbGljeTo6RGVmYXVsdCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKGlzUGxheWluZ1RvRXh0ZXJuYWxUYXJnZXQoKSkgewpAQCAtNzkyNiw3
ICs3OTMxLDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpjYW5TYXZlTWVkaWFEYXRhKCkgY29u
c3QKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxh
eWJhY2tDaGFuZ2VkKCkKIHsKLSAgICBpZiAocG90ZW50aWFsbHlQbGF5aW5nKCkgJiYgbV9tZWRp
YVNlc3Npb24tPnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSAmJiAhaXNGdWxs
c2NyZWVuKCkpCisgICAgaWYgKHBvdGVudGlhbGx5UGxheWluZygpICYmIG1lZGlhU2Vzc2lvbigp
LnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSAmJiAhaXNGdWxsc2NyZWVuKCkp
CiAgICAgICAgIGVudGVyRnVsbHNjcmVlbigpOwogfQogCkBAIC03OTQ0LDcgKzc5NDksNyBAQCBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6OmlzVmlkZW9Ub29TbWFsbEZvcklubGluZVBsYXliYWNrKCkK
IHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6aXNWaXNpYmxlSW5WaWV3cG9ydENoYW5nZWQoKQogewog
ICAgIG1fdmlzaWJpbGl0eUNoYW5nZVRhc2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpc10gewotICAg
ICAgICBtX21lZGlhU2Vzc2lvbi0+aXNWaXNpYmxlSW5WaWV3cG9ydENoYW5nZWQoKTsKKyAgICAg
ICAgbWVkaWFTZXNzaW9uKCkuaXNWaXNpYmxlSW5WaWV3cG9ydENoYW5nZWQoKTsKICAgICAgICAg
dXBkYXRlU2hvdWxkQXV0b3BsYXkoKTsKICAgICAgICAgc2NoZWR1bGVQbGF5YmFja0NvbnRyb2xz
TWFuYWdlclVwZGF0ZSgpOwogICAgIH0pOwpAQCAtNzk1NSwyMiArNzk2MCwyMiBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVNob3VsZEF1dG9wbGF5KCkKICAgICBpZiAoIWF1dG9wbGF5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24tPmhhc0JlaGF2
aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6SW52aXNpYmxlQXV0b3BsYXlOb3RQ
ZXJtaXR0ZWQpKQorICAgIGlmICghbWVkaWFTZXNzaW9uKCkuaGFzQmVoYXZpb3JSZXN0cmljdGlv
bihNZWRpYUVsZW1lbnRTZXNzaW9uOjpJbnZpc2libGVBdXRvcGxheU5vdFBlcm1pdHRlZCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGJvb2wgY2FuQXV0b3BsYXkgPSBtZWRpYVNlc3Npb24oKS5h
dXRvcGxheVBlcm1pdHRlZCgpOwogICAgIGlmIChjYW5BdXRvcGxheQotICAgICAgICAmJiBtX21l
ZGlhU2Vzc2lvbi0+c3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQK
LSAgICAgICAgJiYgbV9tZWRpYVNlc3Npb24tPmludGVycnVwdGlvblR5cGUoKSA9PSBQbGF0Zm9y
bU1lZGlhU2Vzc2lvbjo6SW52aXNpYmxlQXV0b3BsYXkpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9u
LT5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcp
OworICAgICAgICAmJiBtZWRpYVNlc3Npb24oKS5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNz
aW9uOjpJbnRlcnJ1cHRlZAorICAgICAgICAmJiBtZWRpYVNlc3Npb24oKS5pbnRlcnJ1cHRpb25U
eXBlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludmlzaWJsZUF1dG9wbGF5KQorICAgICAg
ICBtZWRpYVNlc3Npb24oKS5lbmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1h
eVJlc3VtZVBsYXlpbmcpOwogICAgIGVsc2UgaWYgKCFjYW5BdXRvcGxheQotICAgICAgICAmJiBt
X21lZGlhU2Vzc2lvbi0+c3RhdGUoKSAhPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0
ZWQpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5iZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1l
ZGlhU2Vzc2lvbjo6SW52aXNpYmxlQXV0b3BsYXkpOworICAgICAgICAmJiBtZWRpYVNlc3Npb24o
KS5zdGF0ZSgpICE9IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZCkKKyAgICAgICAg
bWVkaWFTZXNzaW9uKCkuYmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246Oklu
dmlzaWJsZUF1dG9wbGF5KTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVTaG91
bGRQbGF5KCkKIHsKLSAgICBpZiAoIXBhdXNlZCgpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxheWJh
Y2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7Cisg
ICAgaWYgKCFwYXVzZWQoKSAmJiAhbWVkaWFTZXNzaW9uKCkucGxheWJhY2tTdGF0ZUNoYW5nZVBl
cm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CiAgICAgICAgIHNjaGVkdWxl
UmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhET01FeGNlcHRpb246OmNyZWF0ZShOb3RBbGxvd2Vk
RXJyb3IpKTsKICAgICAgICAgcGF1c2VJbnRlcm5hbCgpOwogICAgICAgICBzZXRBdXRvcGxheUV2
ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6UHJldmVudGVkQXV0
b3BsYXkpOwpAQCAtODAwMywxNiArODAwOCwxNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBs
YXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZpb3JSZXN0cmljdGlvbnNUaW1lckZpcmVkKCkKICAg
ICBpZiAobV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zUXVldWUu
aGFzUGVuZGluZ1Rhc2soKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX21lZGlhU2Vz
c2lvbi0+aGFzQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJl
VXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpKQorICAgIGlmICghbWVkaWFTZXNz
aW9uKCkuaGFzQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJl
VXNlckdlc3R1cmVUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBt
X3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZpb3JSZXN0cmljdGlvbnNRdWV1ZS5zY2hlZHVs
ZVRhc2soW3Byb3RlY3RlZFRoaXNdICgpIHsKLSAgICAgICAgTWVkaWFFbGVtZW50U2Vzc2lvbiog
bWVkaWFFbGVtZW50U2Vzc2lvbiA9IHByb3RlY3RlZFRoaXMtPm1fbWVkaWFTZXNzaW9uLmdldCgp
OwotICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNQbGF5aW5nKCkgfHwgbWVkaWFFbGVtZW50
U2Vzc2lvbi0+c3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6QXV0b3BsYXlpbmcgfHwg
bWVkaWFFbGVtZW50U2Vzc2lvbi0+c3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UGxh
eWluZykKKyAgICAgICAgYXV0byYgbWVkaWFFbGVtZW50U2Vzc2lvbiA9IHByb3RlY3RlZFRoaXMt
Pm1lZGlhU2Vzc2lvbigpOworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNQbGF5aW5nKCkg
fHwgbWVkaWFFbGVtZW50U2Vzc2lvbi5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpB
dXRvcGxheWluZyB8fCBtZWRpYUVsZW1lbnRTZXNzaW9uLnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRp
YVNlc3Npb246OlBsYXlpbmcpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbWVkaWFF
bGVtZW50U2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9u
OjpSZXF1aXJlUGxheWJhY2tUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOworICAgICAgICBtZWRp
YUVsZW1lbnRTZXNzaW9uLmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lv
bjo6UmVxdWlyZVBsYXliYWNrVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKICAgICAgICAgcHJv
dGVjdGVkVGhpcy0+c2NoZWR1bGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclVwZGF0ZSgpOwogICAg
IH0pOwogfQpAQCAtODA3OSw3ICs4MDg0LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRJ
bkFjdGl2ZURvY3VtZW50KGJvb2wgaW5BY3RpdmVEb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgbV9pbkFjdGl2ZURvY3VtZW50ID0gaW5BY3RpdmVEb2N1bWVudDsKLSAgICBtX21lZGlh
U2Vzc2lvbi0+aW5BY3RpdmVEb2N1bWVudENoYW5nZWQoKTsKKyAgICBpZiAobV9tZWRpYVNlc3Np
b24pCisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5pbkFjdGl2ZURvY3VtZW50Q2hhbmdlZCgpOwog
fQogCiBIVE1MTWVkaWFFbGVtZW50RW51bXM6OkJ1ZmZlcmluZ1BvbGljeSBIVE1MTWVkaWFFbGVt
ZW50OjpidWZmZXJpbmdQb2xpY3koKSBjb25zdApAQCAtODEyOSw2ICs4MTM1LDEzIEBAIHZvaWQg
SFRNTE1lZGlhRWxlbWVudDo6c2V0U2hvd1Bvc3RlckZsYWcoYm9vbCBmbGFnKQogICAgIGludmFs
aWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKIH0KIAorTWVkaWFFbGVtZW50U2Vzc2lv
biYgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTZXNzaW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
bWVkaWFTZXNzaW9uKQorICAgICAgICBjb25zdF9jYXN0PEhUTUxNZWRpYUVsZW1lbnQmPigqdGhp
cykuaW5pdGlhbGl6ZU1lZGlhU2Vzc2lvbigpOworICAgIHJldHVybiAqbV9tZWRpYVNlc3Npb247
Cit9CisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmlu
ZGV4IDY0NzI0ZWJiOTRlYi4uOGVjZTQxYmY4MzM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaApAQCAtNDkwLDcgKzQ5MCw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8Vmlk
ZW9QbGF5YmFja1F1YWxpdHk+IGdldFZpZGVvUGxheWJhY2tRdWFsaXR5KCk7CiAKICAgICBNZWRp
YVBsYXllcjo6UHJlbG9hZCBwcmVsb2FkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ByZWxvYWQ7
IH0KLSAgICBNZWRpYUVsZW1lbnRTZXNzaW9uJiBtZWRpYVNlc3Npb24oKSBjb25zdCB7IHJldHVy
biAqbV9tZWRpYVNlc3Npb247IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBNZWRpYUVsZW1lbnRTZXNz
aW9uJiBtZWRpYVNlc3Npb24oKSBjb25zdDsKIAogICAgIHZvaWQgcGFnZVNjYWxlRmFjdG9yQ2hh
bmdlZCgpOwogICAgIHZvaWQgdXNlckludGVyZmFjZUxheW91dERpcmVjdGlvbkNoYW5nZWQoKTsK
QEAgLTU3OCw3ICs1NzgsNiBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBIVE1MTWVkaWFF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKTsKLSAgICB2aXJ0dWFsIHZvaWQgZmluaXNoSW5pdGlhbGl6YXRpb24oKTsKICAgICB2aXJ0
dWFsIH5IVE1MTWVkaWFFbGVtZW50KCk7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9tU3RyaW5nJikgb3ZlcnJpZGU7CkBAIC04OTEsNiAr
ODkwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlZ2lzdGVyV2l0aERvY3VtZW50KERvY3VtZW50
Jik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyV2l0aERvY3VtZW50KERvY3VtZW50Jik7CiAKKyAgICB2
b2lkIGluaXRpYWxpemVNZWRpYVNlc3Npb24oKTsKKwogICAgIHZvaWQgdXBkYXRlQ2FwdGlvbkNv
bnRhaW5lcigpOwogICAgIHZvaWQgZW5zdXJlTWVkaWFDb250cm9sc1NoYWRvd1Jvb3QoKTsKIApA
QCAtMTEwNSw2ICsxMTA2LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fdHJhY2tzQXJlUmVhZHkg
OiAxOwogICAgIGJvb2wgbV9oYXZlVmlzaWJsZVRleHRUcmFjayA6IDE7CiAgICAgYm9vbCBtX3By
b2Nlc3NpbmdQcmVmZXJlbmNlQ2hhbmdlIDogMTsKKyAgICBib29sIG1fc2hvdWxkQXVkaW9QbGF5
YmFja1JlcXVpcmVVc2VyR2VzdHVyZSA6IDE7CisgICAgYm9vbCBtX3Nob3VsZFZpZGVvUGxheWJh
Y2tSZXF1aXJlVXNlckdlc3R1cmUgOiAxOwogCiAgICAgQXV0b3BsYXlFdmVudFBsYXliYWNrU3Rh
dGUgbV9hdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZSB7IEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0
YXRlOjpOb25lIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVv
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCmlu
ZGV4IDljM2ZkNWE2M2QzOS4uYjJjZWIxYzVkOWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFZpZGVvRWxlbWVudC5jcHAKQEAgLTc5LDcgKzc5LDYgQEAgUmVmPEhUTUxWaWRlb0VsZW1lbnQ+
IEhUTUxWaWRlb0VsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2MKICAgICBIVE1MVmlkZW9FbGVtZW50UGljdHVyZUluUGljdHVyZTo6cHJvdmlkZVBpY3R1cmVJ
blBpY3R1cmVUbyh2aWRlb0VsZW1lbnQpOwogI2VuZGlmCiAKLSAgICB2aWRlb0VsZW1lbnQtPmZp
bmlzaEluaXRpYWxpemF0aW9uKCk7CiAgICAgdmlkZW9FbGVtZW50LT5zdXNwZW5kSWZOZWVkZWQo
KTsKICAgICByZXR1cm4gdmlkZW9FbGVtZW50OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426692</attachid>
            <date>2021-04-21 08:26:06 -0700</date>
            <delta_ts>2021-04-21 11:29:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224843-20210421082605.patch</filename>
            <type>text/plain</type>
            <size>48432</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmVkNjIyZjc1M2YzZTFh
YTI2YjhmNmU4ODc4NGJkNTc5ZGI5YzIyYS4uYTJiY2I5Mjk5ZGEzMGRhOWYwZjkxNzdkOTczYWEx
YTI1ODM4ZDdjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAyMS0wNC0yMSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEdQVVByb2Nlc3MgbGF1bmNo
ZXMgdW5uZWNlc3NhcmlseSB3aGVuIGxvYWRpbmcgdGhlIGFtYXpvbiBmcm9udCBwYWdlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ4NDMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbWF6b24uY29tIHdh
cyBnb2luZyBtZWRpYS1yZWxhdGVkIGZlYXR1cmUgZGV0ZWN0aW9uIGxpa2Ugc286CisgICAgICAg
IGBgYAorICAgICAgICAhIWguY3JlYXRlRWxlbWVudCgiYXVkaW8iKS5jYW5QbGF5VHlwZQorICAg
ICAgICAhIWguY3JlYXRlRWxlbWVudCgidmlkZW8iKS5jYW5QbGF5VHlwZQorICAgICAgICBgYGAK
KworICAgICAgICBDb25zdHJ1Y3RpbmcgYW4gSFRNTEF1ZGlvRWxlbWVudCAvIEhUTUxWaWRlb0Vs
ZW1lbnQgd291bGQgaW5pdGlhbGl6ZSBhIE1lZGlhU2Vzc2lvbgorICAgICAgICBvYmplY3QsIHdo
aWNoIHdvdWxkIGxhdW5jaCB0aGUgR1BVUHJvY2Vzcy4gUnVubmluZyBzdWNoIGNvZGUgc2hvdWxk
IHJlYWxseSBub3QgcmVxdWlyZQorICAgICAgICBsYXVuY2hpbmcgdGhlIEdQVVByb2Nlc3MgdGhv
dWdoLgorCisgICAgICAgIFRvIGFkZHJlc3MgdGhpcywgSSBtYWRlIHRoZSBNZWRpYVNlc3Npb24g
aW5pdGlhbGl6YXRpb24gbGF6eS4gSW5zdGVhZCBvZiBkb2luZyBpdCB3aGVuCisgICAgICAgIGNv
bnN0cnVjdGluZyBhbiBIVE1MTWVkaWFFbGVtZW50LCB3ZSBub3cgZG8gaXQgYXMgc29vbiBhcyB3
ZSBhY3R1YWxseSBuZWVkIGEgTWVkaWFTZXNzaW9uCisgICAgICAgIGluIHRoZSBtZWRpYVNlc3Np
b24oKSBnZXR0ZXIuIFRoaXMgd2lsbCBhdCB0aGUgdmVyeSBsZWFzdCBoYXBwZW4gaW4gcHJlcGFy
ZUZvckxvYWQoKSBhZnRlcgorICAgICAgICBzZXR0aW5nIHRoZSAnc3JjJyBhdHRyaWJ1dGUuIEhv
d2V2ZXIsIGluIGNhc2VzIHdoZXJlIHRoZSBIVE1MTWVkaWFFbGVtZW50IGlzIG5vdCB1c2VkIGZv
cgorICAgICAgICBhbnl3YXkgbWVhbmluZ2Z1bCAoZS5nIG5vICdzcmMnIGF0dHJpYnV0ZSBpcyBl
dmVyIHNldCksIHRoZW4gd2UgYXZvaWQgbGF1bmNoaW5nIHRoZQorICAgICAgICBHUFVQcm9jZXNz
LgorCisgICAgICAgIEkgaGF2ZSB2ZXJpZmllZCBvbiBhbiBpUGFkIHRoYXQgdmlzaXRpbmcgdGhl
IGFtYXpvbi5jb20gZnJvbnQgcGFnZSBhbmQgc2VhcmNoaW5nIGZvcgorICAgICAgICBzb21ldGhp
bmcgbm8gbG9uZ2VyIGxhdW5jaGVzIHRoZSBHUFVQcm9jZXNzIGFmdGVyIHRoaXMgY2hhbmdlLiBU
aGlzIGNoYW5nZXMgYWxzbyBzZWVtcyB0bworICAgICAgICBiZSBhIH4zLjYlIFBMVU0gcHJvZ3Jl
c3Npb24gb24gaVBob25lIGFuZCBwb3RlbnRpYWxseSBoaWdoZXIgb24gaVBhZC4KKworICAgICAg
ICAqIGh0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXVk
aW9FbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmluaXRpYWxpemVNZWRpYVNlc3Np
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3Rlcldp
dGhEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJl
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OnJlc3VtZUZyb21Eb2N1bWVudFN1c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OmxvYWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjptZWRpYUxvYWRpbmdGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpzZWVrV2l0aFRvbGVyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXlJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwYXVzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjptZWRpYVBsYXllckRpZEFkZEF1ZGlvVHJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6c291cmNlV2FzQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjphZGRCZWhhdmlvclJlc3RyaWN0aW9uc09uRW5kSWZOZWNl
c3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2Vla1RvUGxheWJh
Y2tQb3NpdGlvbkVuZGVkVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjptZWRpYUVuZ2luZVdhc1VwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VkRm9yVXNlckludGVyYWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjaGVja0ZvckF1ZGlvQW5kVmlk
ZW8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBsYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzdG9wV2l0aG91dERlc3Ry
b3lpbmdNZWRpYVBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpz
dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnN1c3BlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6d2Via2l0U2hvd1BsYXliYWNrVGFyZ2V0UGlja2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndpcmVsZXNzUm91dGVzQXZh
aWxhYmxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNl
dElzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZW1vdGVIYXNBdmFpbGFiaWxp
dHlDYWxsYmFja3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNo
b3VsZEZvcmNlQ29udHJvbHNEaXNwbGF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1lZGlhQ29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFQbGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJJc0Z1bGxzY3JlZW5QZXJtaXR0ZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVtb3ZlQmVoYXZpb3JSZXN0
cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6dXBkYXRlUmF0ZUNoYW5nZVJlc3RyaWN0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjptYXhpbXVtU291cmNlQnVmZmVyU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhU3RhdGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cHVyZ2VCdWZmZXJlZERhdGFJZlBvc3Np
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmFsbG93c01lZGlhRG9j
dW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6aXNWaXNpYmxlSW5WaWV3cG9ydENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlU2hvdWxkQXV0b3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlU2hvdWxkUGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpwbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJp
Y3Rpb25zVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRJbkFjdGl2ZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
Om1lZGlhU2Vzc2lvbiBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSk6CisKIDIwMjEtMDQtMjAgIEFkaXR5YSBLZWVydGhp
ICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNzU1MjMpOiBb
aU9TXSBPcGFxdWUgc3lzdGVtIGZpbGwgY29sb3JzIGFyZSBpbmNvcnJlY3QgaW4gZGFyayBtb2Rl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmNwcAppbmRleCA1OWU2MWMzMWUz
YWU4ZWNlNDg0OGQ0NDZlZGQwNDI2OGIxY2NmOTM5Li41MDQ5NWMxN2I5Y2E5NzkyMDNlZjk4NGJm
MjgxNjM0ZTUyMGZhZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5j
cHAKQEAgLTQ3LDcgKzQ3LDYgQEAgaW5saW5lIEhUTUxBdWRpb0VsZW1lbnQ6OkhUTUxBdWRpb0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQKIFJlZjxIVE1MQXVk
aW9FbGVtZW50PiBIVE1MQXVkaW9FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKICAg
ICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IEhUTUxBdWRpb0VsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikpOwotICAgIGVsZW1lbnQtPmZpbmlzaEluaXRpYWxp
emF0aW9uKCk7CiAgICAgZWxlbWVudC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIGVs
ZW1lbnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAz
MjU4ZWZkZjQxZmJiNzZmYWY4ODk3ZjA0YmZlMWE3Y2JmYjg2NzcyLi42YWY1Yjg4ODE0NjliYjc5
ZDE4MjhkNzIwYzU0NDI0NTBmNjg2NmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKQEAgLTQzMiw2ICs0MzIsOCBAQCBIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVk
aWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bQog
ICAgICwgbV90cmFja3NBcmVSZWFkeSh0cnVlKQogICAgICwgbV9oYXZlVmlzaWJsZVRleHRUcmFj
ayhmYWxzZSkKICAgICAsIG1fcHJvY2Vzc2luZ1ByZWZlcmVuY2VDaGFuZ2UoZmFsc2UpCisgICAg
LCBtX3Nob3VsZEF1ZGlvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1cmUoZG9jdW1lbnQudG9wRG9j
dW1lbnQoKS5hdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSgpICYmICFwcm9jZXNzaW5n
VXNlckdlc3R1cmVGb3JNZWRpYSgpKQorICAgICwgbV9zaG91bGRWaWRlb1BsYXliYWNrUmVxdWly
ZVVzZXJHZXN0dXJlKGRvY3VtZW50LnRvcERvY3VtZW50KCkudmlkZW9QbGF5YmFja1JlcXVpcmVz
VXNlckdlc3R1cmUoKSAmJiAhcHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKICNpZiBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgICwgbV9yZW1vdGUoUmVtb3RlUGxh
eWJhY2s6OmNyZWF0ZSgqdGhpcykpCiAjZW5kaWYKQEAgLTQ0OSw4ICs0NTEsOSBAQCBIVE1MTWVk
aWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50JiBkb2N1bQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkRXZlbnRM
aXN0ZW5lcnNUb05vZGUoKnRoaXMpOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmZpbmlz
aEluaXRpYWxpemF0aW9uKCkKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6aW5pdGlhbGl6ZU1lZGlh
U2Vzc2lvbigpCiB7CisgICAgQVNTRVJUKCFtX21lZGlhU2Vzc2lvbik7CiAgICAgbV9tZWRpYVNl
c3Npb24gPSBtYWtlVW5pcXVlPE1lZGlhRWxlbWVudFNlc3Npb24+KCp0aGlzKTsKIAogICAgIG1f
bWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246
OlJlcXVpcmVVc2VyR2VzdHVyZUZvckZ1bGxzY3JlZW4pOwpAQCAtNDY4LDEyICs0NzEsNyBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmZpbmlzaEluaXRpYWxpemF0aW9uKCkKICAgICAgICAgbV9t
ZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6
SW52aXNpYmxlQXV0b3BsYXlOb3RQZXJtaXR0ZWQpOwogCiAgICAgaWYgKGRvY3VtZW50Lm93bmVy
RWxlbWVudCgpIHx8ICFkb2N1bWVudC5pc01lZGlhRG9jdW1lbnQoKSkgewotICAgICAgICBjb25z
dCBhdXRvJiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50KCk7Ci0gICAgICAgIGNv
bnN0IGJvb2wgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmVG
b3JNZWRpYSgpOwotICAgICAgICBjb25zdCBib29sIHNob3VsZEF1ZGlvUGxheWJhY2tSZXF1aXJl
VXNlckdlc3R1cmUgPSB0b3BEb2N1bWVudC5hdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVy
ZSgpICYmICFpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZTsKLSAgICAgICAgY29uc3QgYm9vbCBzaG91
bGRWaWRlb1BsYXliYWNrUmVxdWlyZVVzZXJHZXN0dXJlID0gdG9wRG9jdW1lbnQudmlkZW9QbGF5
YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoKSAmJiAhaXNQcm9jZXNzaW5nVXNlckdlc3R1cmU7Ci0K
LSAgICAgICAgaWYgKHNob3VsZFZpZGVvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1cmUpIHsKKyAg
ICAgICAgaWYgKG1fc2hvdWxkVmlkZW9QbGF5YmFja1JlcXVpcmVVc2VyR2VzdHVyZSkgewogICAg
ICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVt
ZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9SYXRlQ2hhbmdlKTsKICAgICAg
ICAgICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygpLnJlcXVpcmVzVXNlckdlc3R1cmVUb0xvYWRW
aWRlbygpKQogICAgICAgICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3Ry
aWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvckxvYWQpOwpA
QCAtNDgyLDExICs0ODAsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hJbml0aWFs
aXphdGlvbigpCiAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UtPmlzTG93UG93ZXJNb2RlRW5hYmxl
ZCgpKQogICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24o
TWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9EdWVUb0xvd1Bv
d2VyTW9kZSk7CiAKLSAgICAgICAgaWYgKHNob3VsZEF1ZGlvUGxheWJhY2tSZXF1aXJlVXNlckdl
c3R1cmUpCisgICAgICAgIGlmIChtX3Nob3VsZEF1ZGlvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1
cmUpCiAgICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihN
ZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVDaGFuZ2Up
OwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICAgICAgaWYgKHNo
b3VsZFZpZGVvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1cmUgfHwgc2hvdWxkQXVkaW9QbGF5YmFj
a1JlcXVpcmVVc2VyR2VzdHVyZSkKKyAgICAgICAgaWYgKG1fc2hvdWxkVmlkZW9QbGF5YmFja1Jl
cXVpcmVVc2VyR2VzdHVyZSB8fCBtX3Nob3VsZEF1ZGlvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1
cmUpCiAgICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihN
ZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb1Nob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcik7CiAjZW5kaWYKIApAQCAtNTEwLDcgKzUwOCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZmluaXNoSW5pdGlhbGl6YXRpb24oKQogICAgIEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vz
c2lvbigpLmFkZE11dGVkU3RhdGVPYnNlcnZlcih0aGlzKTsKICNlbmRpZgogCi0gICAgbWVkaWFT
ZXNzaW9uKCkuY2xpZW50V2lsbEJlZ2luQXV0b3BsYXlpbmcoKTsKKyAgICBtX21lZGlhU2Vzc2lv
bi0+Y2xpZW50V2lsbEJlZ2luQXV0b3BsYXlpbmcoKTsKIH0KIAogSFRNTE1lZGlhRWxlbWVudDo6
fkhUTUxNZWRpYUVsZW1lbnQoKQpAQCAtNTM5LDcgKzUzNyw4IEBAIEhUTUxNZWRpYUVsZW1lbnQ6
On5IVE1MTWVkaWFFbGVtZW50KCkKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQogICAgIGlmIChoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkud2Via2l0cGxheWJhY2t0
YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQpIHx8IG1fcmVtb3RlLT5oYXNBdmFpbGFiaWxp
dHlDYWxsYmFja3MoKSkgewogICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
TGlzdGVuZXJzID0gZmFsc2U7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhmYWxzZSk7CisgICAgICAgIGlmIChtX21lZGlh
U2Vzc2lvbikKKyAgICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUxpc3RlbmVycyhmYWxzZSk7CiAgICAgICAgIHVwZGF0ZU1lZGlhU3RhdGUo
KTsKICAgICB9CiAjZW5kaWYKQEAgLTYyMyw3ICs2MjIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnJlZ2lzdGVyV2l0aERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBkb2N1
bWVudC5yZWdpc3Rlck1lZGlhRWxlbWVudCgqdGhpcyk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+
cmVnaXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIG1lZGlhU2Vzc2lvbigpLnJlZ2lz
dGVyV2l0aERvY3VtZW50KGRvY3VtZW50KTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVk
aWFDYW5TdGFydCkKICAgICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0
aGlzKTsKQEAgLTY0NCw3ICs2NDMsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVucmVnaXN0
ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGRvY3VtZW50LnVucmVn
aXN0ZXJNZWRpYUVsZW1lbnQoKnRoaXMpOwogCi0gICAgbV9tZWRpYVNlc3Npb24tPnVucmVnaXN0
ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIGlmIChtX21lZGlhU2Vzc2lvbikKKyAgICAg
ICAgbV9tZWRpYVNlc3Npb24tPnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOwogCiAg
ICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQogICAgICAgICBkb2N1bWVudC5y
ZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwpAQCAtNjgwLDEyICs2ODAsMTIgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xk
RG9jdW1lbnQsIERvY3VtZW50JiBuZXcKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJl
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkKIHsKLSAgICBtX21lZGlhU2Vzc2lvbi0+dW5yZWdpc3Rl
cldpdGhEb2N1bWVudChkb2N1bWVudCgpKTsKKyAgICBtZWRpYVNlc3Npb24oKS51bnJlZ2lzdGVy
V2l0aERvY3VtZW50KGRvY3VtZW50KCkpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJl
c3VtZUZyb21Eb2N1bWVudFN1c3BlbnNpb24oKQogewotICAgIG1fbWVkaWFTZXNzaW9uLT5yZWdp
c3RlcldpdGhEb2N1bWVudChkb2N1bWVudCgpKTsKKyAgICBtZWRpYVNlc3Npb24oKS5yZWdpc3Rl
cldpdGhEb2N1bWVudChkb2N1bWVudCgpKTsKICAgICB1cGRhdGVTaG91bGRBdXRvcGxheSgpOwog
fQogCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW4KIAogICAgICAg
ICAvLyBUaGUgYXR0cmlidXRlIG11c3QgYmUgaWdub3JlZCBpZiB0aGUgYXV0b3BsYXkgYXR0cmli
dXRlIGlzIHByZXNlbnQKICAgICAgICAgaWYgKCFhdXRvcGxheSgpICYmICFtX2hhdmVQcmVwYXJl
ZFRvUGxheSAmJiBtX3BsYXllcikKLSAgICAgICAgICAgIG1fcGxheWVyLT5zZXRQcmVsb2FkKG1f
bWVkaWFTZXNzaW9uLT5lZmZlY3RpdmVQcmVsb2FkRm9yRWxlbWVudCgpKTsKKyAgICAgICAgICAg
IG1fcGxheWVyLT5zZXRQcmVsb2FkKG1lZGlhU2Vzc2lvbigpLmVmZmVjdGl2ZVByZWxvYWRGb3JF
bGVtZW50KCkpOwogCiAgICAgfSBlbHNlIGlmIChuYW1lID09IG1lZGlhZ3JvdXBBdHRyKQogICAg
ICAgICBzZXRNZWRpYUdyb3VwKHZhbHVlKTsKQEAgLTgwMCw3ICs4MDAsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUoKQogICAgIGlmICghbV9leHBsaWNp
dGx5TXV0ZWQpIHsKICAgICAgICAgbV9leHBsaWNpdGx5TXV0ZWQgPSB0cnVlOwogICAgICAgICBt
X211dGVkID0gaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtdXRlZEF0dHIpOwot
ICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOworICAgICAg
ICBtZWRpYVNlc3Npb24oKS5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CiAgICAgfQogCiAgICAg
Y29uZmlndXJlTWVkaWFDb250cm9scygpOwpAQCAtMTIwNiw3ICsxMjA2LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCgpCiAgICAgICAgIC8vIDkgLSBJbnZva2UgdGhl
IG1lZGlhIGVsZW1lbnQncyByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtLgogICAgICAgICAv
LyBOb3RlLCB1bmxlc3MgdGhlIHJlc3RyaWN0aW9uIG9uIHJlcXVpcmluZyB1c2VyIGFjdGlvbiBo
YXMgYmVlbiByZW1vdmVkLAogICAgICAgICAvLyBkbyBub3QgYmVnaW4gZG93bmxvYWRpbmcgZGF0
YS4KLSAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5kYXRhTG9hZGluZ1Blcm1pdHRlZCgpKQor
ICAgICAgICBpZiAobWVkaWFTZXNzaW9uKCkuZGF0YUxvYWRpbmdQZXJtaXR0ZWQoKSkKICAgICAg
ICAgICAgIHNlbGVjdE1lZGlhUmVzb3VyY2UoKTsKICAgICB9CiAKQEAgLTEyNTcsNyArMTI1Nyw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXJjZSgpCiAgICAgaWYg
KG1fcmVzb3VyY2VTZWxlY3Rpb25UYXNrUXVldWUuaGFzUGVuZGluZ1Rhc2tzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBhZ2VBbGxvd3NEYXRhTG9hZGlu
ZygpKSB7CisgICAgaWYgKCFtZWRpYVNlc3Npb24oKS5wYWdlQWxsb3dzRGF0YUxvYWRpbmcoKSkg
ewogICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJub3QgYWxsb3dlZCB0byBsb2Fk
IGluIGJhY2tncm91bmQsIHdhaXRpbmciKTsKICAgICAgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZl
bnQoZmFsc2UpOwogICAgICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCkBA
IC0xMjcwLDcgKzEyNzAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVz
b3VyY2UoKQogICAgIC8vIE9uY2UgdGhlIHBhZ2UgaGFzIGFsbG93ZWQgYW4gZWxlbWVudCB0byBs
b2FkIG1lZGlhLCBpdCBpcyBmcmVlIHRvIGxvYWQgYXQgd2lsbC4gVGhpcyBhbGxvd3MgYQogICAg
IC8vIHBsYXlsaXN0IHRoYXQgc3RhcnRzIGluIGEgZm9yZWdyb3VuZCB0YWIgdG8gY29udGludWUg
YXV0b21hdGljYWxseSBpZiB0aGUgdGFiIGlzIHN1YnNlcXVlbnRseQogICAgIC8vIHB1dCBpbnRv
IHRoZSBiYWNrZ3JvdW5kLgotICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3Ry
aWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVQYWdlQ29uc2VudFRvTG9hZE1lZGlh
KTsKKyAgICBtZWRpYVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxl
bWVudFNlc3Npb246OlJlcXVpcmVQYWdlQ29uc2VudFRvTG9hZE1lZGlhKTsKIAogICAgIGF1dG8g
bG9nU2l0ZUlkZW50aWZpZXIgPSBMT0dJREVOVElGSUVSOwogICAgIFVOVVNFRF9QQVJBTShsb2dT
aXRlSWRlbnRpZmllcik7CkBAIC0xNDk1LDE0ICsxNDk1LDE0IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6bG9hZFJlc291cmNlKGNvbnN0IFVSTCYgaW5pdGlhbFVSTCwgQ29udGVudFR5cGUmIGNv
bnRlbnRUCiAgICAgbV9wbGF5ZXItPnNldFByaXZhdGVCcm93c2luZ01vZGUocHJpdmF0ZU1vZGUp
OwogCiAgICAgaWYgKCFhdXRvcGxheSgpICYmICFtX2hhdmVQcmVwYXJlZFRvUGxheSkKLSAgICAg
ICAgbV9wbGF5ZXItPnNldFByZWxvYWQobV9tZWRpYVNlc3Npb24tPmVmZmVjdGl2ZVByZWxvYWRG
b3JFbGVtZW50KCkpOworICAgICAgICBtX3BsYXllci0+c2V0UHJlbG9hZChtZWRpYVNlc3Npb24o
KS5lZmZlY3RpdmVQcmVsb2FkRm9yRWxlbWVudCgpKTsKICAgICBtX3BsYXllci0+c2V0UHJlc2Vy
dmVzUGl0Y2gobV93ZWJraXRQcmVzZXJ2ZXNQaXRjaCk7CiAgICAgbV9wbGF5ZXItPnNldFBpdGNo
Q29ycmVjdGlvbkFsZ29yaXRobShkb2N1bWVudCgpLnNldHRpbmdzKCkucGl0Y2hDb3JyZWN0aW9u
QWxnb3JpdGhtKCkpOwogCiAgICAgaWYgKCFtX2V4cGxpY2l0bHlNdXRlZCkgewogICAgICAgICBt
X2V4cGxpY2l0bHlNdXRlZCA9IHRydWU7CiAgICAgICAgIG1fbXV0ZWQgPSBoYXNBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKG11dGVkQXR0cik7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9u
LT5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLmNhblBy
b2R1Y2VBdWRpb0NoYW5nZWQoKTsKICAgICB9CiAKICAgICB1cGRhdGVWb2x1bWUoKTsKQEAgLTIy
MjMsNyArMjIyMyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFMb2FkaW5nRmFpbGVk
KE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpCiAKICAgICBsb2dNZWRpYUxvYWRSZXF1
ZXN0KGRvY3VtZW50KCkucGFnZSgpLCBTdHJpbmcoKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcoZXJyb3IpLCBmYWxzZSk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50Q2hhcmFjdGVy
aXN0aWNzQ2hhbmdlZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLmNsaWVudENoYXJhY3RlcmlzdGlj
c0NoYW5nZWQoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXROZXR3b3JrU3RhdGUo
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBzdGF0ZSkKQEAgLTI0MTYsNyArMjQxNiw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSBzdGF0ZSkKICAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiAjZW5kaWYKIAot
ICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdlZCgpOwor
ICAgICAgICBtZWRpYVNlc3Npb24oKS5jbGllbnRDaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CiAg
ICAgfQogCiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+PSBIQVZFX0NVUlJFTlRfREFUQSAmJiBvbGRT
dGF0ZSA8IEhBVkVfQ1VSUkVOVF9EQVRBKSB7CkBAIC0yNDU2LDcgKzI0NTYsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3Rh
dGUpCiAKICAgICAvLyBJZiB3ZSB0cmFuc2l0aW9uIHRvIHRoZSBGdXR1cmUgRGF0YSBzdGF0ZSBh
bmQgd2UncmUgYWJvdXQgdG8gYmVnaW4gcGxheWluZywgZW5zdXJlIHBsYXliYWNrIGlzIGFjdHVh
bGx5IHBlcm1pdHRlZCBmaXJzdCwKICAgICAvLyBob25vcmluZyBhbnkgcGxheWJhY2sgZGVuaWFs
IHJlYXNvbnMgc3VjaCBhcyB0aGUgcmVxdWlyZW1lbnQgb2YgYSB1c2VyIGdlc3R1cmUuCi0gICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBIQVZFX0ZVVFVSRV9EQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9G
VVRVUkVfREFUQSAmJiBwb3RlbnRpYWxseVBsYXlpbmcoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBs
YXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkg
eworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSEFWRV9GVVRVUkVfREFUQSAmJiBvbGRTdGF0ZSA8
IEhBVkVfRlVUVVJFX0RBVEEgJiYgcG90ZW50aWFsbHlQbGF5aW5nKCkgJiYgIW1lZGlhU2Vzc2lv
bigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5
aW5nKSkgewogICAgICAgICBhdXRvIGNhblRyYW5zaXRpb24gPSBjYW5UcmFuc2l0aW9uRnJvbUF1
dG9wbGF5VG9QbGF5KCk7CiAgICAgICAgIGlmIChjYW5UcmFuc2l0aW9uICYmIGNhblRyYW5zaXRp
b24udmFsdWUoKSA9PSBNZWRpYVBsYXliYWNrRGVuaWFsUmVhc29uOjpVc2VyR2VzdHVyZVJlcXVp
cmVkKQogICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiQXV0b3BsYXkgYmxv
Y2tlZCwgdXNlciBnZXN0dXJlIHJlcXVpcmVkIik7CkBAIC0yOTc2LDcgKzI5NzYsNyBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OnNlZWtXaXRoVG9sZXJhbmNlKGNvbnN0IE1lZGlhVGltZSYgaW5U
aW1lLCBjb25zdCBNZWRpYVRpbQogICAgICAgICBzZWVrVGFzaygpOwogCiAgICAgaWYgKHByb2Nl
c3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2Vz
dHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLnJl
bW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJH
ZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZWVrVGFzaygpCkBAIC0zNDQ1LDcgKzM0NDUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnBsYXkoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHsKICAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIpOwogCi0gICAgYXV0byBzdWNjZXNzID0gbV9tZWRpYVNlc3Np
b24tPnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5
aW5nKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hh
bmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZyk7CiAgICAgaWYgKCFzdWNj
ZXNzKSB7CiAgICAgICAgIGlmIChzdWNjZXNzLnZhbHVlKCkgPT0gTWVkaWFQbGF5YmFja0Rlbmlh
bFJlYXNvbjo6VXNlckdlc3R1cmVSZXF1aXJlZCkKICAgICAgICAgICAgIHNldEF1dG9wbGF5RXZl
bnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50ZWRBdXRv
cGxheSk7CkBAIC0zNDcxLDcgKzM0NzEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXko
KQogewogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAKLSAgICBhdXRvIHN1Y2Nlc3Mg
PSBtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXli
YWNrU3RhdGU6OlBsYXlpbmcpOworICAgIGF1dG8gc3VjY2VzcyA9IG1lZGlhU2Vzc2lvbigpLnBs
YXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKTsK
ICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJw
bGF5YmFjayBub3QgcGVybWl0dGVkOiAiLCBzdWNjZXNzLnZhbHVlKCkpOwogICAgICAgICBpZiAo
c3VjY2Vzcy52YWx1ZSgpID09IE1lZGlhUGxheWJhY2tEZW5pYWxSZWFzb246OlVzZXJHZXN0dXJl
UmVxdWlyZWQpCkBAIC0zNDk4LDcgKzM0OTgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBs
YXlJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1fbWVkaWFT
ZXNzaW9uLT5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpKSB7CisgICAgaWYgKCFtZWRpYVNlc3Np
b24oKS5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpKSB7CiAgICAgICAgIEFMV0FZU19MT0coTE9H
SURFTlRJRklFUiwgInJldHVybmluZyBiZWNhdXNlIG9mIGludGVycnVwdGlvbiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzU1Miw3ICszNTUyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpwYXVzZSgpCiAgICAgaWYgKG1fd2FpdGluZ1RvRW50ZXJGdWxsc2NyZWVuKQogICAgICAg
ICBtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbiA9IGZhbHNlOwogCi0gICAgaWYgKCFtX21lZGlh
U2Vzc2lvbi0+cGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6
OlBhdXNlZCkpCisgICAgaWYgKCFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hhbmdlUGVy
bWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGF1c2VkKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKHByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkpCkBAIC0zNTc1LDcgKzM1NzUs
NyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlSW50ZXJuYWwoKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbFBhdXNlUGxh
eWJhY2soKSkgeworICAgIGlmICghbWVkaWFTZXNzaW9uKCkuY2xpZW50V2lsbFBhdXNlUGxheWJh
Y2soKSkgewogICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJyZXR1cm5pbmcgYmVj
YXVzZSBvZiBpbnRlcnJ1cHRpb24iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1ODQs
NyArMzU4NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1c2VJbnRlcm5hbCgpCiAgICAg
aWYgKCFtX3BsYXllciB8fCBtX25ldHdvcmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZKSB7CiAgICAg
ICAgIC8vIFVubGVzcyB0aGUgcmVzdHJpY3Rpb24gb24gbWVkaWEgcmVxdWlyaW5nIHVzZXIgYWN0
aW9uIGhhcyBiZWVuIGxpZnRlZAogICAgICAgICAvLyBkb24ndCB0cmlnZ2VyIGxvYWRpbmcgaWYg
YSBzY3JpcHQgY2FsbHMgcGF1c2UoKS4KLSAgICAgICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKQor
ICAgICAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQo
TWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgc2VsZWN0TWVkaWFSZXNvdXJjZSgpOwogICAgIH0KQEAgLTM2NzMsNyArMzY3Myw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEhUTUxNZWRpYUVsZW1lbnQ6OnNldFZvbHVtZShkb3VibGUgdm9sdW1l
KQogICAgIHVwZGF0ZVZvbHVtZSgpOwogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnZv
bHVtZWNoYW5nZUV2ZW50KTsKIAotICAgIGlmIChpc1BsYXlpbmcoKSAmJiAhbV9tZWRpYVNlc3Np
b24tPnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5
aW5nKSkgeworICAgIGlmIChpc1BsYXlpbmcoKSAmJiAhbWVkaWFTZXNzaW9uKCkucGxheWJhY2tT
dGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CiAgICAg
ICAgIHNjaGVkdWxlUmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhET01FeGNlcHRpb246OmNyZWF0
ZShOb3RBbGxvd2VkRXJyb3IpKTsKICAgICAgICAgcGF1c2VJbnRlcm5hbCgpOwogICAgICAgICBz
ZXRBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6
UHJldmVudGVkQXV0b3BsYXkpOwpAQCAtMzczMiw3ICszNzMyLDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRNdXRlZChib29sIG11dGVkKQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFD
S19UQVJHRVQpCiAgICAgICAgIHNjaGVkdWxlVXBkYXRlTWVkaWFTdGF0ZSgpOwogI2VuZGlmCi0g
ICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CisgICAgICAg
IG1lZGlhU2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKICAgICAgICAgdXBkYXRl
U2xlZXBEaXNhYmxpbmcoKTsKICAgICB9CiAKQEAgLTM3ODcsNyArMzc4Nyw3IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
bV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKKyAgICBt
ZWRpYVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Np
b246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7CiB9CiAKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKQEAgLTM5NDEsNyArMzk0MSw3IEBA
IGRvdWJsZSBIVE1MTWVkaWFFbGVtZW50OjpwZXJjZW50TG9hZGVkKCkgY29uc3QKIAogdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckRpZEFkZEF1ZGlvVHJhY2soQXVkaW9UcmFja1By
aXZhdGUmIHRyYWNrKQogewotICAgIGlmIChpc1BsYXlpbmcoKSAmJiAhbV9tZWRpYVNlc3Npb24t
PnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5n
KSkgeworICAgIGlmIChpc1BsYXlpbmcoKSAmJiAhbWVkaWFTZXNzaW9uKCkucGxheWJhY2tTdGF0
ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CiAgICAgICAg
IHNjaGVkdWxlUmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhET01FeGNlcHRpb246OmNyZWF0ZShO
b3RBbGxvd2VkRXJyb3IpKTsKICAgICAgICAgcGF1c2VJbnRlcm5hbCgpOwogICAgICAgICBzZXRB
dXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6UHJl
dmVudGVkQXV0b3BsYXkpOwpAQCAtNDY4NSw3ICs0Njg1LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojpzb3VyY2VXYXNBZGRlZChIVE1MU291cmNlRWxlbWVudCYgc291cmNlKQogICAgIGlmICht
X25ldHdvcmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZKSB7CiAgICAgICAgIG1fbmV4dENoaWxkTm9k
ZVRvQ29uc2lkZXIgPSAmc291cmNlOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAg
IGlmIChtX21lZGlhU2Vzc2lvbi0+ZGF0YUxvYWRpbmdQZXJtaXR0ZWQoKSkKKyAgICAgICAgaWYg
KG1lZGlhU2Vzc2lvbigpLmRhdGFMb2FkaW5nUGVybWl0dGVkKCkpCiAjZW5kaWYKICAgICAgICAg
ICAgIHNlbGVjdE1lZGlhUmVzb3VyY2UoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDc4Myw3ICs0
NzgzLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllclRpbWVDaGFuZ2VkKCkK
ICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VzIHBhdXNlZCB0byB0cnVlIGFuZCBmaXJlcyBhIHNp
bXBsZSBldmVudCBuYW1lZCBwYXVzZSBhdCB0aGUgbWVkaWEgZWxlbWVudC4KICAgICAgICAgICAg
ICAgICBtX3BhdXNlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVu
dE5hbWVzKCkucGF1c2VFdmVudCk7Ci0gICAgICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmNs
aWVudFdpbGxQYXVzZVBsYXliYWNrKCk7CisgICAgICAgICAgICAgICAgbWVkaWFTZXNzaW9uKCku
Y2xpZW50V2lsbFBhdXNlUGxheWJhY2soKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8v
IFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGVuZGVkIGF0IHRoZSBt
ZWRpYSBlbGVtZW50LgogICAgICAgICAgICAgaWYgKCFtX3NlbnRFbmRFdmVudCkgewpAQCAtNDgz
Miw3ICs0ODMyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphZGRCZWhhdmlvclJlc3RyaWN0
aW9uc09uRW5kSWZOZWNlc3NhcnkoKQogICAgIGlmIChpc0Z1bGxzY3JlZW4oKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVk
aWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5h
Z2VyKTsKKyAgICBtZWRpYVNlc3Npb24oKS5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxl
bWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7
CiAgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zVGltZXIu
c3RvcCgpOwogICAgIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9u
c1RpbWVyLnN0YXJ0T25lU2hvdChoaWRlTWVkaWFDb250cm9sc0FmdGVyRW5kZWREZWxheSk7CiB9
CkBAIC00ODYyLDcgKzQ4NjIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlZWtUb1BsYXli
YWNrUG9zaXRpb25FbmRlZFRpbWVyRmlyZWQoKQogICAgIGlmICghbV9pc1NjcnViYmluZ1JlbW90
ZWx5KQogICAgICAgICByZXR1cm47CiAKLSAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6
OnNoYXJlZE1hbmFnZXIoKS5zZXNzaW9uRGlkRW5kUmVtb3RlU2NydWJiaW5nKCptX21lZGlhU2Vz
c2lvbik7CisgICAgUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCku
c2Vzc2lvbkRpZEVuZFJlbW90ZVNjcnViYmluZyhtZWRpYVNlc3Npb24oKSk7CiAgICAgbV9pc1Nj
cnViYmluZ1JlbW90ZWx5ID0gZmFsc2U7CiAgICAgbV9zZWVrVG9QbGF5YmFja1Bvc2l0aW9uRW5k
ZWRUaW1lci5zdG9wKCk7CiAjZW5kaWYKQEAgLTUwNDAsNyArNTA0MCw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFFbmdpbmVXYXNVcGRhdGVkKCkKICAgICB1cGRhdGVSZW5kZXJlcigp
OwogICAgIGVuZFByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCk7CiAKLSAgICBtX21lZGlh
U2Vzc2lvbi0+bWVkaWFFbmdpbmVVcGRhdGVkKCk7CisgICAgbWVkaWFTZXNzaW9uKCkubWVkaWFF
bmdpbmVVcGRhdGVkKCk7CiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIGlmICht
X3BsYXllciAmJiBtX21lZGlhS2V5cykKQEAgLTUxMjIsNyArNTEyMiw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKQogCiAgICAgdXBk
YXRlUmVuZGVyZXIoKTsKIAotICAgIGlmICghcGF1c2VkKCkgJiYgIW1fbWVkaWFTZXNzaW9uLT5w
bGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykp
IHsKKyAgICBpZiAoIXBhdXNlZCgpICYmICFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hh
bmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpIHsKICAgICAgICAgc2No
ZWR1bGVSZWplY3RQZW5kaW5nUGxheVByb21pc2VzKERPTUV4Y2VwdGlvbjo6Y3JlYXRlKE5vdEFs
bG93ZWRFcnJvcikpOwogICAgICAgICBwYXVzZUludGVybmFsKCk7CiAgICAgICAgIHNldEF1dG9w
bGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50
ZWRBdXRvcGxheSk7CkBAIC01MjY3LDcgKzUyNjcsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6
OnN0b3BwZWREdWVUb0Vycm9ycygpIGNvbnN0CiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6cGF1
c2VkRm9yVXNlckludGVyYWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV9tZWRpYVNlc3Npb24t
PnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGVkKQorICAgIGlmICht
ZWRpYVNlc3Npb24oKS5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRl
ZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC01MzM4LDcg
KzUzMzgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAKICAg
ICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJzaG91bGRCZVBsYXlpbmcgPSAiLCBzaG91bGRC
ZVBsYXlpbmcsICIsIHBsYXllclBhdXNlZCA9ICIsIHBsYXllclBhdXNlZCk7CiAKLSAgICBpZiAo
c2hvdWxkQmVQbGF5aW5nICYmIHBsYXllclBhdXNlZCAmJiBtX21lZGlhU2Vzc2lvbi0+cmVxdWly
ZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpICYmIChtX3dhaXRpbmdUb0VudGVyRnVsbHNj
cmVlbiB8fCAhaXNGdWxsc2NyZWVuKCkpKSB7CisgICAgaWYgKHNob3VsZEJlUGxheWluZyAmJiBw
bGF5ZXJQYXVzZWQgJiYgbWVkaWFTZXNzaW9uKCkucmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9Q
bGF5YmFjaygpICYmIChtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbiB8fCAhaXNGdWxsc2NyZWVu
KCkpKSB7CiAgICAgICAgIGlmICghbV93YWl0aW5nVG9FbnRlckZ1bGxzY3JlZW4pCiAgICAgICAg
ICAgICBlbnRlckZ1bGxzY3JlZW4oKTsKIApAQCAtNTM1NCw3ICs1MzU0LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogICAgICAgICBpbnZhbGlkYXRlQ2FjaGVk
VGltZSgpOwogCiAgICAgICAgIGlmIChwbGF5ZXJQYXVzZWQpIHsKLSAgICAgICAgICAgIG1fbWVk
aWFTZXNzaW9uLT5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpOworICAgICAgICAgICAgbWVkaWFT
ZXNzaW9uKCkuY2xpZW50V2lsbEJlZ2luUGxheWJhY2soKTsKIAogICAgICAgICAgICAgLy8gU2V0
IHJhdGUsIG11dGVkIGFuZCB2b2x1bWUgYmVmb3JlIGNhbGxpbmcgcGxheSBpbiBjYXNlIHRoZXkg
d2VyZSBzZXQgYmVmb3JlIHRoZSBtZWRpYSBlbmdpbmUgd2FzIHNldCB1cC4KICAgICAgICAgICAg
IC8vIFRoZSBtZWRpYSBlbmdpbmUgc2hvdWxkIGp1c3Qgc3Rhc2ggdGhlIHJhdGUsIG11dGVkIGFu
ZCB2b2x1bWUgdmFsdWVzIHNpbmNlIGl0IGlzbid0IGFscmVhZHkgcGxheWluZy4KQEAgLTU0MDEs
NyArNTQwMSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2hlY2tGb3JBdWRpb0FuZFZpZGVv
KCkKIHsKICAgICBtX2hhc0V2ZXJIYWRBdWRpbyB8PSBoYXNBdWRpbygpOwogICAgIG1faGFzRXZl
ckhhZFZpZGVvIHw9IGhhc1ZpZGVvKCk7Ci0gICAgbV9tZWRpYVNlc3Npb24tPmNhblByb2R1Y2VB
dWRpb0NoYW5nZWQoKTsKKyAgICBtZWRpYVNlc3Npb24oKS5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2Vk
KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UGxheWluZyhib29sIHBsYXlpbmcp
CkBAIC01NTI4LDcgKzU1MjgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNsZWFyTWVkaWFQ
bGF5ZXIoKQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgaWYgKGhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJp
bGl0eWNoYW5nZWRFdmVudCkgfHwgbV9yZW1vdGUtPmhhc0F2YWlsYWJpbGl0eUNhbGxiYWNrcygp
KSB7CiAgICAgICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBm
YWxzZTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5TGlzdGVuZXJzKGZhbHNlKTsKKyAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uKQorICAg
ICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
TGlzdGVuZXJzKGZhbHNlKTsKIAogICAgICAgICAvLyBTZW5kIGFuIGF2YWlsYWJpbGl0eSBldmVu
dCBpbiBjYXNlIHNjcmlwdHMgd2FudCB0byBoaWRlIHRoZSBwaWNrZXIgd2hlbiB0aGUgZWxlbWVu
dAogICAgICAgICAvLyBkb2Vzbid0IHN1cHBvcnQgcGxheWJhY2sgdG8gYSB0YXJnZXQuCkBAIC01
NTU5LDggKzU1NjAsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjbGVhck1lZGlhUGxheWVy
KCkKICAgICBpZiAobV90ZXh0VHJhY2tzKQogICAgICAgICBjb25maWd1cmVUZXh0VHJhY2tEaXNw
bGF5KCk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdl
ZCgpOwotICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CisgICAg
aWYgKG1fbWVkaWFTZXNzaW9uKSB7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jbGllbnRDaGFy
YWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNl
QXVkaW9DaGFuZ2VkKCk7CisgICAgfQogCiAgICAgbV9yZXNvdXJjZVNlbGVjdGlvblRhc2tRdWV1
ZS5jYW5jZWxBbGxUYXNrcygpOwogCkBAIC01NTg3LDcgKzU1OTAsOCBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnN0b3BXaXRob3V0RGVzdHJveWluZ01lZGlhUGxheWVyKCkKICAgICAvLyBTdG9w
IHRoZSBwbGF5YmFjayB3aXRob3V0IGdlbmVyYXRpbmcgZXZlbnRzCiAgICAgc2V0UGxheWluZyhm
YWxzZSk7CiAgICAgcGF1c2VBbmRVcGRhdGVQbGF5U3RhdGVJbW1lZGlhdGVseSgpOwotICAgIG1f
bWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsQmVET01TdXNwZW5kZWQoKTsKKyAgICBpZiAobV9tZWRp
YVNlc3Npb24pCisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsQmVET01TdXNwZW5k
ZWQoKTsKIAogICAgIHNldEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQ
bGF5YmFja1N0YXRlOjpOb25lKTsKIApAQCAtNTY0Nyw3ICs1NjUxLDggQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpzdG9wKCkKICAgICAvLyBsb2FkZWQgYW5kIGNhbGxpbmcgaXQgYWdhaW4gd29u
J3QgY2F1c2UgYW55IHByb2JsZW1zLgogICAgIGNsZWFyTWVkaWFQbGF5ZXIoKTsKIAotICAgIG1f
bWVkaWFTZXNzaW9uLT5zdG9wU2Vzc2lvbigpOworICAgIGlmIChtX21lZGlhU2Vzc2lvbikKKyAg
ICAgICAgbV9tZWRpYVNlc3Npb24tPnN0b3BTZXNzaW9uKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKQEAgLTU2NjEsNyAr
NTY2Niw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5z
aW9uIHJlYXNvbikKICAgICBjYXNlIFJlYXNvbkZvclN1c3BlbnNpb246OkJhY2tGb3J3YXJkQ2Fj
aGU6CiAgICAgICAgIHN0b3BXaXRob3V0RGVzdHJveWluZ01lZGlhUGxheWVyKCk7CiAgICAgICAg
IHNldEJ1ZmZlcmluZ1BvbGljeShCdWZmZXJpbmdQb2xpY3k6Ok1ha2VSZXNvdXJjZXNQdXJnZWFi
bGUpOwotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRp
YUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlUGFnZUNvbnNlbnRUb1Jlc3VtZU1lZGlhKTsKKyAgICAg
ICAgbWVkaWFTZXNzaW9uKCkuYWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNz
aW9uOjpSZXF1aXJlUGFnZUNvbnNlbnRUb1Jlc3VtZU1lZGlhKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBSZWFzb25Gb3JTdXNwZW5zaW9uOjpQYWdlV2lsbEJlU3VzcGVuZGVkOgogICAgIGNh
c2UgUmVhc29uRm9yU3VzcGVuc2lvbjo6SmF2YVNjcmlwdERlYnVnZ2VyUGF1c2VkOgpAQCAtNTY3
NywxMyArNTY4MiwxMyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlc3VtZSgpCiAKICAgICBz
ZXRJbkFjdGl2ZURvY3VtZW50KHRydWUpOwogCi0gICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGFn
ZUFsbG93c1BsYXliYWNrQWZ0ZXJSZXN1bWluZygpKQorICAgIGlmICghbWVkaWFTZXNzaW9uKCku
cGFnZUFsbG93c1BsYXliYWNrQWZ0ZXJSZXN1bWluZygpKQogICAgICAgICBkb2N1bWVudCgpLmFk
ZE1lZGlhQ2FuU3RhcnRMaXN0ZW5lcigqdGhpcyk7CiAgICAgZWxzZQogICAgICAgICBzZXRQYXVz
ZWRJbnRlcm5hbChmYWxzZSk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JS
ZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlUGFnZUNvbnNlbnRUb1Jlc3Vt
ZU1lZGlhKTsKLSAgICBtX21lZGlhU2Vzc2lvbi0+dXBkYXRlQnVmZmVyaW5nUG9saWN5KCk7Cisg
ICAgbWVkaWFTZXNzaW9uKCkucmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRT
ZXNzaW9uOjpSZXF1aXJlUGFnZUNvbnNlbnRUb1Jlc3VtZU1lZGlhKTsKKyAgICBtZWRpYVNlc3Np
b24oKS51cGRhdGVCdWZmZXJpbmdQb2xpY3koKTsKIAogICAgIGlmIChtX2Vycm9yICYmIG1fZXJy
b3ItPmNvZGUoKSA9PSBNZWRpYUVycm9yOjpNRURJQV9FUlJfQUJPUlRFRCAmJiAhbV9yZXN1bWVU
YXNrUXVldWUuaGFzUGVuZGluZ1Rhc2soKSkgewogICAgICAgICAvLyBSZXN0YXJ0IHRoZSBsb2Fk
IGlmIGl0IHdhcyBhYm9ydGVkIGluIHRoZSBtaWRkbGUgYnkgbW92aW5nIHRoZSBkb2N1bWVudCB0
byB0aGUgYmFjay9mb3J3YXJkIGNhY2hlLgpAQCAtNTcyNCw3ICs1NzI5LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojp2aXNpYmlsaXR5U3RhdGVDaGFuZ2VkKCkKICAgICBBTFdBWVNfTE9HKExP
R0lERU5USUZJRVIsICJ2aXNpYmxlID0gIiwgIW1fZWxlbWVudElzSGlkZGVuKTsKIAogICAgIHVw
ZGF0ZVNsZWVwRGlzYWJsaW5nKCk7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnZpc2liaWxpdHlDaGFu
Z2VkKCk7CisgICAgbWVkaWFTZXNzaW9uKCkudmlzaWJpbGl0eUNoYW5nZWQoKTsKICAgICBpZiAo
bV9wbGF5ZXIpCiAgICAgICAgIG1fcGxheWVyLT5zZXRWaXNpYmxlKCFtX2VsZW1lbnRJc0hpZGRl
bik7CiAKQEAgLTU3MzIsMTAgKzU3MzcsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp2aXNp
YmlsaXR5U3RhdGVDaGFuZ2VkKCkKICAgICBpZiAoIWlzUGxheWluZ0F1ZGlvKSB7CiAgICAgICAg
IGlmIChtX2VsZW1lbnRJc0hpZGRlbikgewogICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVO
VElGSUVSLCAiU3VzcGVuZGluZyBwbGF5YmFjayBhZnRlciBnb2luZyB0byB0aGUgYmFja2dyb3Vu
ZCIpOwotICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmJlZ2luSW50ZXJydXB0aW9uKFBsYXRm
b3JtTWVkaWFTZXNzaW9uOjpFbnRlcmluZ0JhY2tncm91bmQpOworICAgICAgICAgICAgbWVkaWFT
ZXNzaW9uKCkuYmVnaW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkVudGVyaW5n
QmFja2dyb3VuZCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBTFdBWVNfTE9HKExP
R0lERU5USUZJRVIsICJSZXN1bWluZyBwbGF5YmFjayBhZnRlciBlbnRlcmluZyBmb3JlZ3JvdW5k
Iik7Ci0gICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+ZW5kSW50ZXJydXB0aW9uKFBsYXRmb3Jt
TWVkaWFTZXNzaW9uOjpNYXlSZXN1bWVQbGF5aW5nKTsKKyAgICAgICAgICAgIG1lZGlhU2Vzc2lv
bigpLmVuZEludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWlu
Zyk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC01NzY4LDEyICs1NzczLDEyIEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6d2Via2l0U2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCkKICAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIpOwogICAgIGlmIChwcm9jZXNzaW5nVXNlckdlc3R1cmVGb3JN
ZWRpYSgpKQogICAgICAgICByZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uc0FmdGVyRmlyc3RVc2Vy
R2VzdHVyZSgpOwotICAgIG1fbWVkaWFTZXNzaW9uLT5zaG93UGxheWJhY2tUYXJnZXRQaWNrZXIo
KTsKKyAgICBtZWRpYVNlc3Npb24oKS5zaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoKTsKIH0KIAog
dm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp3aXJlbGVzc1JvdXRlc0F2YWlsYWJsZURpZENoYW5nZSgp
CiB7Ci0gICAgYm9vbCBoYXNUYXJnZXRzID0gbV9tZWRpYVNlc3Npb24tPmhhc1dpcmVsZXNzUGxh
eWJhY2tUYXJnZXRzKCk7CisgICAgYm9vbCBoYXNUYXJnZXRzID0gbWVkaWFTZXNzaW9uKCkuaGFz
V2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKTsKICAgICBtX3JlbW90ZS0+YXZhaWxhYmlsaXR5Q2hh
bmdlZChoYXNUYXJnZXRzKTsKIAogICAgIGVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUNoYW5nZWRFdmVudCgpOwpAQCAtNTc5Nyw4ICs1ODAyLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZXRJc1BsYXlpbmdUb1dpcmVsZXNzVGFyZ2V0KGJvb2wgaXNQbGF5aW5nVG9XaXJlbGVz
c1RhcmcKICAgICAgICAgbV9yZW1vdGUtPmlzUGxheWluZ1RvUmVtb3RlVGFyZ2V0Q2hhbmdlZCht
X2lzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpOwogICAgICAgICBBTFdBWVNfTE9HKGxvZ1NpdGVJ
ZGVudGlmaWVyLCBtX2lzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpOwogICAgICAgICBjb25maWd1
cmVNZWRpYUNvbnRyb2xzKCk7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5pc1BsYXlpbmdUb1dp
cmVsZXNzUGxheWJhY2tUYXJnZXRDaGFuZ2VkKG1faXNQbGF5aW5nVG9XaXJlbGVzc1RhcmdldCk7
Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CisgICAg
ICAgIG1lZGlhU2Vzc2lvbigpLmlzUGxheWluZ1RvV2lyZWxlc3NQbGF5YmFja1RhcmdldENoYW5n
ZWQobV9pc1BsYXlpbmdUb1dpcmVsZXNzVGFyZ2V0KTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCku
Y2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOwogICAgICAgICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3Rh
dGUoKTsKICAgICAgICAgdXBkYXRlU2xlZXBEaXNhYmxpbmcoKTsKIApAQCAtNTg0Niw3ICs1ODUx
LDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjphZGRFdmVudExpc3RlbmVyKGNvbnN0IEF0b21T
dHJpbmcmIGV2ZW50VHlwZSwgUmVmPEV2ZW50TGkKIAogICAgIGlmIChpc0ZpcnN0QXZhaWxhYmls
aXR5Q2hhbmdlZExpc3RlbmVyKSB7CiAgICAgICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFi
aWxpdHlMaXN0ZW5lcnMgPSB0cnVlOwotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxh
eWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnModHJ1ZSk7CisgICAgICAgIG1lZGlhU2Vz
c2lvbigpLnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKHRydWUpOwog
ICAgIH0KIAogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgIid3ZWJraXRwbGF5YmFja3Rh
cmdldGF2YWlsYWJpbGl0eWNoYW5nZWQnIik7CkBAIC01ODcyLDcgKzU4NzcsNyBAQCBib29sIEhU
TUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbVN0cmluZyYgZXZl
bnRUeXBlLCBFdmVudExpcwogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgInJlbW92ZWQg
bGFzdCBsaXN0ZW5lciA9ICIsIGRpZFJlbW92ZUxhc3RBdmFpbGFiaWxpdHlDaGFuZ2VkTGlzdGVu
ZXIpOwogICAgIGlmIChkaWRSZW1vdmVMYXN0QXZhaWxhYmlsaXR5Q2hhbmdlZExpc3RlbmVyKSB7
CiAgICAgICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBmYWxz
ZTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmls
aXR5TGlzdGVuZXJzKGZhbHNlKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuc2V0SGFzUGxheWJh
Y2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoZmFsc2UpOwogICAgICAgICBzY2hlZHVsZVVw
ZGF0ZU1lZGlhU3RhdGUoKTsKICAgICB9CiAKQEAgLTU4ODEsNyArNTg4Niw3IEBAIGJvb2wgSFRN
TE1lZGlhRWxlbWVudDo6cmVtb3ZlRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9tU3RyaW5nJiBldmVu
dFR5cGUsIEV2ZW50TGlzCiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5xdWV1ZVBsYXliYWNr
VGFyZ2V0QXZhaWxhYmlsaXR5Q2hhbmdlZEV2ZW50KCkKIHsKLSAgICBib29sIGhhc1RhcmdldHMg
PSBtX21lZGlhU2Vzc2lvbi0+aGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKTsKKyAgICBib29s
IGhhc1RhcmdldHMgPSBtZWRpYVNlc3Npb24oKS5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygp
OwogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgImhhc1RhcmdldHMgPSAiLCBoYXNUYXJn
ZXRzKTsKICAgICBhdXRvIGV2ZW50ID0gV2ViS2l0UGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0
eWNoYW5nZWRFdmVudCwgaGFzVGFyZ2V0cyk7CiAgICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsK
QEAgLTU5MjAsNyArNTkyNSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cmVtb3RlSGFzQXZh
aWxhYmlsaXR5Q2FsbGJhY2tzQ2hhbmdlZCgpCiAKICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJ
RVIsICJoYXNMaXN0ZW5lcnM6ICIsIGhhc0xpc3RlbmVycyk7CiAgICAgbV9oYXNQbGF5YmFja1Rh
cmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9IGhhc0xpc3RlbmVyczsKLSAgICBtX21lZGlhU2Vz
c2lvbi0+c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoaGFzTGlzdGVu
ZXJzKTsKKyAgICBtZWRpYVNlc3Npb24oKS5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUxpc3RlbmVycyhoYXNMaXN0ZW5lcnMpOwogICAgIHNjaGVkdWxlVXBkYXRlTWVkaWFTdGF0ZSgp
OwogfQogI2VuZGlmIC8vIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCkBAIC02MDcx
LDcgKzYwNzYsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmV4aXRGdWxsc2NyZWVuKCkKICAg
ICBpZiAoIWRvY3VtZW50KCkucGFnZSgpIHx8ICFpczxIVE1MVmlkZW9FbGVtZW50PigqdGhpcykp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghcGF1c2VkKCkgJiYgbV9tZWRpYVNlc3Npb24t
PnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSkgeworICAgIGlmICghcGF1c2Vk
KCkgJiYgbWVkaWFTZXNzaW9uKCkucmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygp
KSB7CiAgICAgICAgIGlmICghZG9jdW1lbnQoKS5zZXR0aW5ncygpLmFsbG93c0lubGluZU1lZGlh
UGxheWJhY2tBZnRlckZ1bGxzY3JlZW4oKSB8fCBpc1ZpZGVvVG9vU21hbGxGb3JJbmxpbmVQbGF5
YmFjaygpKQogICAgICAgICAgICAgcGF1c2VJbnRlcm5hbCgpOwogICAgICAgICBlbHNlIHsKQEAg
LTY1MDYsNyArNjUxMSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cHJpdmF0ZUJyb3dzaW5n
U3RhdGVEaWRDaGFuZ2UoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQogYm9vbCBIVE1MTWVkaWFF
bGVtZW50OjpzaG91bGRGb3JjZUNvbnRyb2xzRGlzcGxheSgpIGNvbnN0CiB7CiAgICAgLy8gQWx3
YXlzIGNyZWF0ZSBjb250cm9scyBmb3IgYXV0b3BsYXkgdmlkZW8gdGhhdCByZXF1aXJlcyB1c2Vy
IGdlc3R1cmUgZHVlIHRvIGJlaW5nIGluIGxvdyBwb3dlciBtb2RlLgotICAgIHJldHVybiBpc1Zp
ZGVvKCkgJiYgYXV0b3BsYXkoKSAmJiBtX21lZGlhU2Vzc2lvbi0+aGFzQmVoYXZpb3JSZXN0cmlj
dGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JWaWRlb0R1ZVRv
TG93UG93ZXJNb2RlKTsKKyAgICByZXR1cm4gaXNWaWRlbygpICYmIGF1dG9wbGF5KCkgJiYgbWVk
aWFTZXNzaW9uKCkuaGFzQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpS
ZXF1aXJlVXNlckdlc3R1cmVGb3JWaWRlb0R1ZVRvTG93UG93ZXJNb2RlKTsKIH0KIAogdm9pZCBI
VE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVNZWRpYUNvbnRyb2xzKCkKQEAgLTY1MTQsNyArNjUx
OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlTWVkaWFDb250cm9scygpCiAg
ICAgYm9vbCByZXF1aXJlQ29udHJvbHMgPSBjb250cm9scygpOwogCiAgICAgLy8gQWx3YXlzIGNy
ZWF0ZSBjb250cm9scyBmb3IgdmlkZW8gd2hlbiBmdWxsc2NyZWVuIHBsYXliYWNrIGlzIHJlcXVp
cmVkLgotICAgIGlmIChpc1ZpZGVvKCkgJiYgbV9tZWRpYVNlc3Npb24tPnJlcXVpcmVzRnVsbHNj
cmVlbkZvclZpZGVvUGxheWJhY2soKSkKKyAgICBpZiAoaXNWaWRlbygpICYmIG1lZGlhU2Vzc2lv
bigpLnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSkKICAgICAgICAgcmVxdWly
ZUNvbnRyb2xzID0gdHJ1ZTsKIAogICAgIGlmIChzaG91bGRGb3JjZUNvbnRyb2xzRGlzcGxheSgp
KQpAQCAtNjYzNSw3ICs2NjQwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRp
YVBsYXllcigpCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBpZiAo
aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLndlYmtpdHBsYXliYWNrdGFyZ2V0YXZhaWxh
YmlsaXR5Y2hhbmdlZEV2ZW50KSB8fCBtX3JlbW90ZS0+aGFzQXZhaWxhYmlsaXR5Q2FsbGJhY2tz
KCkpIHsKICAgICAgICAgbV9oYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyA9
IHRydWU7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWls
YWJpbGl0eUxpc3RlbmVycyh0cnVlKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuc2V0SGFzUGxh
eWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnModHJ1ZSk7CiAgICAgICAgIGVucXVldWVQ
bGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVudCgpOyAvLyBFbnN1cmUgdGhlIGV2
ZW50IGxpc3RlbmVyIGdldHMgYXQgbGVhc3Qgb25lIGV2ZW50LgogICAgIH0KICNlbmRpZgpAQCAt
Njk0OSw3ICs2OTU0LDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllcklzRnVs
bHNjcmVlbigpIGNvbnN0CiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJJc0Z1
bGxzY3JlZW5QZXJtaXR0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX21lZGlhU2Vzc2lvbi0+
ZnVsbHNjcmVlblBlcm1pdHRlZCgpOworICAgIHJldHVybiBtZWRpYVNlc3Npb24oKS5mdWxsc2Ny
ZWVuUGVybWl0dGVkKCk7CiB9CiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJJ
c1ZpZGVvKCkgY29uc3QKQEAgLTcxNTcsNyArNzE2Miw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUoTWVkaWFF
bGVtCiAKICAgICBtX3JlbW92ZWRCZWhhdmlvclJlc3RyaWN0aW9uc0FmdGVyRmlyc3RVc2VyR2Vz
dHVyZSA9IHRydWU7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmlj
dGlvbihyZXN0cmljdGlvbnNUb1JlbW92ZSk7CisgICAgbWVkaWFTZXNzaW9uKCkucmVtb3ZlQmVo
YXZpb3JSZXN0cmljdGlvbihyZXN0cmljdGlvbnNUb1JlbW92ZSk7CiAgICAgZG9jdW1lbnQoKS50
b3BEb2N1bWVudCgpLm5vdGVVc2VySW50ZXJhY3Rpb25XaXRoTWVkaWFFbGVtZW50KCk7CiB9CiAK
QEAgLTcxNjksMTQgKzcxNzQsMTQgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVSYXRl
Q2hhbmdlUmVzdHJpY3Rpb25zKCkKIAogICAgIGNvbnN0IGF1dG8mIHRvcERvY3VtZW50ID0gZG9j
dW1lbnQudG9wRG9jdW1lbnQoKTsKICAgICBpZiAodG9wRG9jdW1lbnQudmlkZW9QbGF5YmFja1Jl
cXVpcmVzVXNlckdlc3R1cmUoKSkKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9y
UmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlk
ZW9SYXRlQ2hhbmdlKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuYWRkQmVoYXZpb3JSZXN0cmlj
dGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JWaWRlb1JhdGVD
aGFuZ2UpOwogICAgIGVsc2UKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9y
UmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlk
ZW9SYXRlQ2hhbmdlKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkucmVtb3ZlQmVoYXZpb3JSZXN0
cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JWaWRlb1Jh
dGVDaGFuZ2UpOwogCiAgICAgaWYgKHRvcERvY3VtZW50LmF1ZGlvUGxheWJhY2tSZXF1aXJlc1Vz
ZXJHZXN0dXJlKCkpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0
aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvUmF0ZUNo
YW5nZSk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVk
aWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9SYXRlQ2hhbmdlKTsK
ICAgICBlbHNlCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0
aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvUmF0ZUNo
YW5nZSk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24o
TWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yQXVkaW9SYXRlQ2hhbmdl
KTsKIH0KIAogUmVmUHRyPFZpZGVvUGxheWJhY2tRdWFsaXR5PiBIVE1MTWVkaWFFbGVtZW50Ojpn
ZXRWaWRlb1BsYXliYWNrUXVhbGl0eSgpCkBAIC03NTQxLDcgKzc1NDYsNyBAQCBib29sIEhUTUxN
ZWRpYUVsZW1lbnQ6OmlzU3VzcGVuZGVkKCkgY29uc3QKICNpZiBFTkFCTEUoTUVESUFfU09VUkNF
KQogc2l6ZV90IEhUTUxNZWRpYUVsZW1lbnQ6Om1heGltdW1Tb3VyY2VCdWZmZXJTaXplKGNvbnN0
IFNvdXJjZUJ1ZmZlciYgYnVmZmVyKSBjb25zdAogewotICAgIHJldHVybiBtX21lZGlhU2Vzc2lv
bi0+bWF4aW11bU1lZGlhU291cmNlQnVmZmVyU2l6ZShidWZmZXIpOworICAgIHJldHVybiBtZWRp
YVNlc3Npb24oKS5tYXhpbXVtTWVkaWFTb3VyY2VCdWZmZXJTaXplKGJ1ZmZlcik7CiB9CiAjZW5k
aWYKIApAQCAtNzc0OSw3ICs3NzU0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVN
ZWRpYVN0YXRlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9tZWRpYVN0YXRlID0gc3RhdGU7
Ci0gICAgbV9tZWRpYVNlc3Npb24tPm1lZGlhU3RhdGVEaWRDaGFuZ2UobV9tZWRpYVN0YXRlKTsK
KyAgICBtZWRpYVNlc3Npb24oKS5tZWRpYVN0YXRlRGlkQ2hhbmdlKG1fbWVkaWFTdGF0ZSk7CiAK
ICAgICBkb2N1bWVudCgpLnVwZGF0ZUlzUGxheWluZ01lZGlhKCk7CiB9CkBAIC03NzY3LDExICs3
NzcyLDExIEBAIE1lZGlhUHJvZHVjZXI6Ok1lZGlhU3RhdGVGbGFncyBIVE1MTWVkaWFFbGVtZW50
OjptZWRpYVN0YXRlKCkgY29uc3QKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQogICAgIGlmIChtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKSB7CiAg
ICAgICAgIHN0YXRlIHw9IEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXI7Ci0g
ICAgICAgIGlmICghbV9tZWRpYVNlc3Npb24tPndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVk
KCkpCisgICAgICAgIGlmICghbWVkaWFTZXNzaW9uKCkud2lyZWxlc3NWaWRlb1BsYXliYWNrRGlz
YWJsZWQoKSkKICAgICAgICAgICAgIHN0YXRlIHw9IFJlcXVpcmVzUGxheWJhY2tUYXJnZXRNb25p
dG9yaW5nOwogICAgIH0KIAotICAgIGJvb2wgcmVxdWlyZVVzZXJHZXN0dXJlID0gbV9tZWRpYVNl
c3Npb24tPmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWly
ZVVzZXJHZXN0dXJlVG9BdXRvcGxheVRvRXh0ZXJuYWxEZXZpY2UpOworICAgIGJvb2wgcmVxdWly
ZVVzZXJHZXN0dXJlID0gbWVkaWFTZXNzaW9uKCkuaGFzQmVoYXZpb3JSZXN0cmljdGlvbihNZWRp
YUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0F1dG9wbGF5VG9FeHRlcm5hbERl
dmljZSk7CiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+PSBIQVZFX01FVEFEQVRBICYmICFyZXF1aXJl
VXNlckdlc3R1cmUgJiYgIW1fZmFpbGVkVG9QbGF5VG9XaXJlbGVzc1RhcmdldCkKICAgICAgICAg
c3RhdGUgfD0gRXh0ZXJuYWxEZXZpY2VBdXRvUGxheUNhbmRpZGF0ZTsKIApAQCAtNzkwNSw3ICs3
OTEwLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwdXJnZUJ1ZmZlcmVkRGF0YUlmUG9zc2li
bGUoKQogewogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAKLSAgICBpZiAoIU1lbW9y
eVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9uKCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCkgJiYg
bV9tZWRpYVNlc3Npb24tPnByZWZlcnJlZEJ1ZmZlcmluZ1BvbGljeSgpID09IEJ1ZmZlcmluZ1Bv
bGljeTo6RGVmYXVsdCkKKyAgICBpZiAoIU1lbW9yeVByZXNzdXJlSGFuZGxlcjo6c2luZ2xldG9u
KCkuaXNVbmRlck1lbW9yeVByZXNzdXJlKCkgJiYgbWVkaWFTZXNzaW9uKCkucHJlZmVycmVkQnVm
ZmVyaW5nUG9saWN5KCkgPT0gQnVmZmVyaW5nUG9saWN5OjpEZWZhdWx0KQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoaXNQbGF5aW5nVG9FeHRlcm5hbFRhcmdldCgpKSB7CkBAIC03OTI2LDcg
Kzc5MzEsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmNhblNhdmVNZWRpYURhdGEoKSBjb25z
dAogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmFsbG93c01lZGlhRG9jdW1lbnRJbmxpbmVQbGF5
YmFja0NoYW5nZWQoKQogewotICAgIGlmIChwb3RlbnRpYWxseVBsYXlpbmcoKSAmJiBtX21lZGlh
U2Vzc2lvbi0+cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpICYmICFpc0Z1bGxz
Y3JlZW4oKSkKKyAgICBpZiAocG90ZW50aWFsbHlQbGF5aW5nKCkgJiYgbWVkaWFTZXNzaW9uKCku
cmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpICYmICFpc0Z1bGxzY3JlZW4oKSkK
ICAgICAgICAgZW50ZXJGdWxsc2NyZWVuKCk7CiB9CiAKQEAgLTc5NDQsNyArNzk0OSw3IEBAIGJv
b2wgSFRNTE1lZGlhRWxlbWVudDo6aXNWaWRlb1Rvb1NtYWxsRm9ySW5saW5lUGxheWJhY2soKQog
dm9pZCBIVE1MTWVkaWFFbGVtZW50Ojppc1Zpc2libGVJblZpZXdwb3J0Q2hhbmdlZCgpCiB7CiAg
ICAgbV92aXNpYmlsaXR5Q2hhbmdlVGFza1F1ZXVlLmVucXVldWVUYXNrKFt0aGlzXSB7Ci0gICAg
ICAgIG1fbWVkaWFTZXNzaW9uLT5pc1Zpc2libGVJblZpZXdwb3J0Q2hhbmdlZCgpOworICAgICAg
ICBtZWRpYVNlc3Npb24oKS5pc1Zpc2libGVJblZpZXdwb3J0Q2hhbmdlZCgpOwogICAgICAgICB1
cGRhdGVTaG91bGRBdXRvcGxheSgpOwogICAgICAgICBzY2hlZHVsZVBsYXliYWNrQ29udHJvbHNN
YW5hZ2VyVXBkYXRlKCk7CiAgICAgfSk7CkBAIC03OTU1LDIyICs3OTYwLDIyIEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6dXBkYXRlU2hvdWxkQXV0b3BsYXkoKQogICAgIGlmICghYXV0b3BsYXko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+aGFzQmVoYXZp
b3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpJbnZpc2libGVBdXRvcGxheU5vdFBl
cm1pdHRlZCkpCisgICAgaWYgKCFtZWRpYVNlc3Npb24oKS5oYXNCZWhhdmlvclJlc3RyaWN0aW9u
KE1lZGlhRWxlbWVudFNlc3Npb246OkludmlzaWJsZUF1dG9wbGF5Tm90UGVybWl0dGVkKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBjYW5BdXRvcGxheSA9IG1lZGlhU2Vzc2lvbigpLmF1
dG9wbGF5UGVybWl0dGVkKCk7CiAgICAgaWYgKGNhbkF1dG9wbGF5Ci0gICAgICAgICYmIG1fbWVk
aWFTZXNzaW9uLT5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZAot
ICAgICAgICAmJiBtX21lZGlhU2Vzc2lvbi0+aW50ZXJydXB0aW9uVHlwZSgpID09IFBsYXRmb3Jt
TWVkaWFTZXNzaW9uOjpJbnZpc2libGVBdXRvcGxheSkKLSAgICAgICAgbV9tZWRpYVNlc3Npb24t
PmVuZEludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5UmVzdW1lUGxheWluZyk7
CisgICAgICAgICYmIG1lZGlhU2Vzc2lvbigpLnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Np
b246OkludGVycnVwdGVkCisgICAgICAgICYmIG1lZGlhU2Vzc2lvbigpLmludGVycnVwdGlvblR5
cGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW52aXNpYmxlQXV0b3BsYXkpCisgICAgICAg
IG1lZGlhU2Vzc2lvbigpLmVuZEludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5
UmVzdW1lUGxheWluZyk7CiAgICAgZWxzZSBpZiAoIWNhbkF1dG9wbGF5Ci0gICAgICAgICYmIG1f
bWVkaWFTZXNzaW9uLT5zdGF0ZSgpICE9IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRl
ZCkKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPmJlZ2luSW50ZXJydXB0aW9uKFBsYXRmb3JtTWVk
aWFTZXNzaW9uOjpJbnZpc2libGVBdXRvcGxheSk7CisgICAgICAgICYmIG1lZGlhU2Vzc2lvbigp
LnN0YXRlKCkgIT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGVkKQorICAgICAgICBt
ZWRpYVNlc3Npb24oKS5iZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW52
aXNpYmxlQXV0b3BsYXkpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVNob3Vs
ZFBsYXkoKQogewotICAgIGlmICghcGF1c2VkKCkgJiYgIW1fbWVkaWFTZXNzaW9uLT5wbGF5YmFj
a1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpIHsKKyAg
ICBpZiAoIXBhdXNlZCgpICYmICFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hhbmdlUGVy
bWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpIHsKICAgICAgICAgc2NoZWR1bGVS
ZWplY3RQZW5kaW5nUGxheVByb21pc2VzKERPTUV4Y2VwdGlvbjo6Y3JlYXRlKE5vdEFsbG93ZWRF
cnJvcikpOwogICAgICAgICBwYXVzZUludGVybmFsKCk7CiAgICAgICAgIHNldEF1dG9wbGF5RXZl
bnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50ZWRBdXRv
cGxheSk7CkBAIC04MDAzLDE2ICs4MDA4LDE2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGxh
eWJhY2tDb250cm9sc01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9uc1RpbWVyRmlyZWQoKQogICAg
IGlmIChtX3BsYXliYWNrQ29udHJvbHNNYW5hZ2VyQmVoYXZpb3JSZXN0cmljdGlvbnNRdWV1ZS5o
YXNQZW5kaW5nVGFzaygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIW1fbWVkaWFTZXNz
aW9uLT5oYXNCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVV
c2VyR2VzdHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcikpCisgICAgaWYgKCFtZWRpYVNlc3Np
b24oKS5oYXNCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVV
c2VyR2VzdHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcikpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBwcm90ZWN0ZWRUaGlzKHRoaXMpOwogICAgIG1f
cGxheWJhY2tDb250cm9sc01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9uc1F1ZXVlLnNjaGVkdWxl
VGFzayhbcHJvdGVjdGVkVGhpc10gKCkgewotICAgICAgICBNZWRpYUVsZW1lbnRTZXNzaW9uKiBt
ZWRpYUVsZW1lbnRTZXNzaW9uID0gcHJvdGVjdGVkVGhpcy0+bV9tZWRpYVNlc3Npb24uZ2V0KCk7
Ci0gICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1BsYXlpbmcoKSB8fCBtZWRpYUVsZW1lbnRT
ZXNzaW9uLT5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpBdXRvcGxheWluZyB8fCBt
ZWRpYUVsZW1lbnRTZXNzaW9uLT5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpQbGF5
aW5nKQorICAgICAgICBhdXRvJiBtZWRpYUVsZW1lbnRTZXNzaW9uID0gcHJvdGVjdGVkVGhpcy0+
bWVkaWFTZXNzaW9uKCk7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1BsYXlpbmcoKSB8
fCBtZWRpYUVsZW1lbnRTZXNzaW9uLnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkF1
dG9wbGF5aW5nIHx8IG1lZGlhRWxlbWVudFNlc3Npb24uc3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlh
U2Vzc2lvbjo6UGxheWluZykKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtZWRpYUVs
ZW1lbnRTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246
OlJlcXVpcmVQbGF5YmFja1RvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7CisgICAgICAgIG1lZGlh
RWxlbWVudFNlc3Npb24uYWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9u
OjpSZXF1aXJlUGxheWJhY2tUb0NvbnRyb2xDb250cm9sc01hbmFnZXIpOwogICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5zY2hlZHVsZVBsYXliYWNrQ29udHJvbHNNYW5hZ2VyVXBkYXRlKCk7CiAgICAg
fSk7CiB9CkBAIC04MDc5LDcgKzgwODQsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldElu
QWN0aXZlRG9jdW1lbnQoYm9vbCBpbkFjdGl2ZURvY3VtZW50KQogICAgICAgICByZXR1cm47CiAK
ICAgICBtX2luQWN0aXZlRG9jdW1lbnQgPSBpbkFjdGl2ZURvY3VtZW50OwotICAgIG1fbWVkaWFT
ZXNzaW9uLT5pbkFjdGl2ZURvY3VtZW50Q2hhbmdlZCgpOworICAgIGlmIChtX21lZGlhU2Vzc2lv
bikKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPmluQWN0aXZlRG9jdW1lbnRDaGFuZ2VkKCk7CiB9
CiAKIEhUTUxNZWRpYUVsZW1lbnRFbnVtczo6QnVmZmVyaW5nUG9saWN5IEhUTUxNZWRpYUVsZW1l
bnQ6OmJ1ZmZlcmluZ1BvbGljeSgpIGNvbnN0CkBAIC04MTI5LDYgKzgxMzUsMTMgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjpzZXRTaG93UG9zdGVyRmxhZyhib29sIGZsYWcpCiAgICAgaW52YWxp
ZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwogfQogCitNZWRpYUVsZW1lbnRTZXNzaW9u
JiBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVNlc3Npb24oKSBjb25zdAoreworICAgIGlmICghbV9t
ZWRpYVNlc3Npb24pCisgICAgICAgIGNvbnN0X2Nhc3Q8SFRNTE1lZGlhRWxlbWVudCY+KCp0aGlz
KS5pbml0aWFsaXplTWVkaWFTZXNzaW9uKCk7CisgICAgcmV0dXJuICptX21lZGlhU2Vzc2lvbjsK
K30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5k
ZXggNjQ3MjRlYmI5NGViYjc2NTE4YzdmNDA2OTI1ZjkyMWY2MTE3Mzg1OS4uOGVjZTQxYmY4MzM4
MmY3NjVhZmNiNmY5MGYzMzYyNmVmNzg5ZWUzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmgKQEAgLTQ5MCw3ICs0OTAsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFZpZGVv
UGxheWJhY2tRdWFsaXR5PiBnZXRWaWRlb1BsYXliYWNrUXVhbGl0eSgpOwogCiAgICAgTWVkaWFQ
bGF5ZXI6OlByZWxvYWQgcHJlbG9hZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9wcmVsb2FkOyB9
Ci0gICAgTWVkaWFFbGVtZW50U2Vzc2lvbiYgbWVkaWFTZXNzaW9uKCkgY29uc3QgeyByZXR1cm4g
Km1fbWVkaWFTZXNzaW9uOyB9CisgICAgV0VCQ09SRV9FWFBPUlQgTWVkaWFFbGVtZW50U2Vzc2lv
biYgbWVkaWFTZXNzaW9uKCkgY29uc3Q7CiAKICAgICB2b2lkIHBhZ2VTY2FsZUZhY3RvckNoYW5n
ZWQoKTsKICAgICB2b2lkIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb25DaGFuZ2VkKCk7CkBA
IC01NzgsNyArNTc4LDYgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTE1lZGlhRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmLCBib29sIGNyZWF0ZWRCeVBhcnNl
cik7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaEluaXRpYWxpemF0aW9uKCk7CiAgICAgdmlydHVh
bCB+SFRNTE1lZGlhRWxlbWVudCgpOwogCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBR
dWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbVN0cmluZyYpIG92ZXJyaWRlOwpAQCAtODkxLDYgKzg5
MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCByZWdpc3RlcldpdGhEb2N1bWVudChEb2N1bWVudCYp
OwogICAgIHZvaWQgdW5yZWdpc3RlcldpdGhEb2N1bWVudChEb2N1bWVudCYpOwogCisgICAgdm9p
ZCBpbml0aWFsaXplTWVkaWFTZXNzaW9uKCk7CisKICAgICB2b2lkIHVwZGF0ZUNhcHRpb25Db250
YWluZXIoKTsKICAgICB2b2lkIGVuc3VyZU1lZGlhQ29udHJvbHNTaGFkb3dSb290KCk7CiAKQEAg
LTExMDUsNiArMTEwNiw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3RyYWNrc0FyZVJlYWR5IDog
MTsKICAgICBib29sIG1faGF2ZVZpc2libGVUZXh0VHJhY2sgOiAxOwogICAgIGJvb2wgbV9wcm9j
ZXNzaW5nUHJlZmVyZW5jZUNoYW5nZSA6IDE7CisgICAgYm9vbCBtX3Nob3VsZEF1ZGlvUGxheWJh
Y2tSZXF1aXJlVXNlckdlc3R1cmUgOiAxOworICAgIGJvb2wgbV9zaG91bGRWaWRlb1BsYXliYWNr
UmVxdWlyZVVzZXJHZXN0dXJlIDogMTsKIAogICAgIEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRl
IG1fYXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGUgeyBBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0
ZTo6Tm9uZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcAppbmRl
eCA5YzNmZDVhNjNkMzllYjVjYjVlN2NkMzYxOWJlYWQyYWIzOTBlMzA2Li5iMmNlYjFjNWQ5YjVl
OWU0YmZjNjRjZGRiNzQwNThmMmM4YmM0NDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZp
ZGVvRWxlbWVudC5jcHAKQEAgLTc5LDcgKzc5LDYgQEAgUmVmPEhUTUxWaWRlb0VsZW1lbnQ+IEhU
TUxWaWRlb0VsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2MK
ICAgICBIVE1MVmlkZW9FbGVtZW50UGljdHVyZUluUGljdHVyZTo6cHJvdmlkZVBpY3R1cmVJblBp
Y3R1cmVUbyh2aWRlb0VsZW1lbnQpOwogI2VuZGlmCiAKLSAgICB2aWRlb0VsZW1lbnQtPmZpbmlz
aEluaXRpYWxpemF0aW9uKCk7CiAgICAgdmlkZW9FbGVtZW50LT5zdXNwZW5kSWZOZWVkZWQoKTsK
ICAgICByZXR1cm4gdmlkZW9FbGVtZW50OwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDU1NjhjOTgzMDg1NDQ3NWUzNGEwMjU4YmVkNWQzNDJk
NTRmZWRjYzEuLmU1Mzk3NzM5NWQzNTk1ZjBhOTcwMzYxMzAyZjE0MWUwMTNhMjNlNWQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAyMS0wNC0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIEdQVVByb2Nlc3MgbGF1bmNoZXMgdW5uZWNlc3NhcmlseSB3aGVuIGxvYWRpbmcgdGhlIGFt
YXpvbiBmcm9udCBwYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjQ4NDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgQVBJIHRlc3QgY292ZXJhZ2UuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL0dQVVByb2Nlc3MubW06CisgICAgICAgIChURVNUKToKKwogMjAy
MS0wNC0yMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEZpeCB1c2UtYWZ0ZXItbW92ZSBpbnRyb2R1Y2VkIGluIHIyNzU0MDcKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvR1BVUHJvY2Vzcy5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvR1BVUHJvY2Vzcy5tbQppbmRl
eCAzOTk0ZDc2OWNkM2I0NGEwNWZlODBlMDYwYzU5NDhlNTgwY2JhYTJlLi4zNjQ2MzE2MjZkYjc5
M2MyYjU5MzIzMjc5ZjBlOGI3MTllOTlkZGQ5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0dQVVByb2Nlc3MubW0KKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9HUFVQcm9jZXNzLm1tCkBAIC0yNDksNiArMjQ5LDM5IEBA
IFRFU1QoR1BVUHJvY2VzcywgT25seUxhdW5jaGVzR1BVUHJvY2Vzc1doZW5OZWNlc3NhcnlTVkcp
CiAgICAgRVhQRUNUX0VRKFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29sIF9ncHVQcm9j
ZXNzSWRlbnRpZmllcl0sIDApOwogfQogCitURVNUKEdQVVByb2Nlc3MsIE9ubHlMYXVuY2hlc0dQ
VVByb2Nlc3NXaGVuTmVjZXNzYXJ5TWVkaWFGZWF0dXJlRGV0ZWN0aW9uKQoreworICAgIGF1dG8g
Y29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBp
bml0XSk7CisgICAgV0tQcmVmZXJlbmNlc1NldEJvb2xWYWx1ZUZvcktleUZvclRlc3RpbmcoKF9f
YnJpZGdlIFdLUHJlZmVyZW5jZXNSZWYpW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCB0cnVl
LCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlR1BVUHJvY2Vzc0Zvck1lZGlhRW5h
YmxlZCIpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Qm9vbFZhbHVlRm9yS2V5Rm9yVGVzdGluZygo
X19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIHRy
dWUsIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJDYXB0dXJlVmlkZW9JbkdQVVByb2Nl
c3NFbmFibGVkIikpOworICAgIFdLUHJlZmVyZW5jZXNTZXRCb29sVmFsdWVGb3JLZXlGb3JUZXN0
aW5nKChfX2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKVtjb25maWd1cmF0aW9uIHByZWZlcmVuY2Vz
XSwgdHJ1ZSwgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIlVzZUdQVVByb2Nlc3NGb3JD
YW52YXNSZW5kZXJpbmdFbmFibGVkIikpOworICAgIFdLUHJlZmVyZW5jZXNTZXRCb29sVmFsdWVG
b3JLZXlGb3JUZXN0aW5nKChfX2JyaWRnZSBXS1ByZWZlcmVuY2VzUmVmKVtjb25maWd1cmF0aW9u
IHByZWZlcmVuY2VzXSwgZmFsc2UsIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVc2VH
UFVQcm9jZXNzRm9yRE9NUmVuZGVyaW5nRW5hYmxlZCIpKTsKKworICAgIGF1dG8gd2ViVmlldyA9
IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2Uo
MCwgMCwgNDAwLCA0MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0pOworICAg
IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkVGVzdFBhZ2VOYW1lZDpAInNpbXBsZSJdOworCisg
ICAgX19ibG9jayBib29sIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFT
Y3JpcHQ6QCIhIWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2F1ZGlvJykuY2FuUGxheVR5cGUiIGNv
bXBsZXRpb25IYW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBF
WFBFQ1RfVFJVRSghZXJyb3IpOworICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGJvb2xWYWx1
ZV0pOworICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpydW4oJmRvbmUpOworCisgICAgZG9uZSA9IGZhbHNlOworICAgIFt3ZWJWaWV3IGV2YWx1
YXRlSmF2YVNjcmlwdDpAIiEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKS5jYW5QbGF5
VHlwZSIgY29tcGxldGlvbkhhbmRsZXI6XihpZCByZXN1bHQsIE5TRXJyb3IgKmVycm9yKSB7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKCFlcnJvcik7CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZXN1bHQg
Ym9vbFZhbHVlXSk7CisgICAgICAgIGRvbmUgPSB0cnVlOworICAgIH1dOworICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnJ1bigmZG9uZSk7CisKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGlu
UnVuTG9vcCgxMCk7CisKKyAgICAvLyBUaGlzIHNob3VsZCBub3QgaGF2ZSBsYXVuY2hlZCBhIEdQ
VVByb2Nlc3MuCisgICAgRVhQRUNUX0VRKFtjb25maWd1cmF0aW9uLmdldCgpLnByb2Nlc3NQb29s
IF9ncHVQcm9jZXNzSWRlbnRpZmllcl0sIDApOworfQorCiBURVNUKEdQVVByb2Nlc3MsIENyYXNo
V2hpbGVQbGF5aW5nVmlkZW8pCiB7CiAgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhb
W1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426706</attachid>
            <date>2021-04-21 10:13:34 -0700</date>
            <delta_ts>2021-04-21 10:14:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224843-20210421101333.patch</filename>
            <type>text/plain</type>
            <size>4994</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTJiY2I5Mjk5ZGEzMGRh
OWYwZjkxNzdkOTczYWExYTI1ODM4ZDdjNy4uYzljZDc0NTZjOTBhMDIzMzJmZDIxOTA2ZTlhOWY0
ZWRkNjJkNWFhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIxLTA0LTIxICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgR1BVUHJvY2VzcyBsYXVuY2hl
cyB1bm5lY2Vzc2FyaWx5IHdoZW4gbG9hZGluZyB0aGUgYW1hem9uIGZyb250IHBhZ2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDg0MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluIE9mZmxpbmVBdWRp
b0Rlc3RpbmF0aW9uTm9kZTo6dW5pbml0aWFsaXplKCksIHdlIHdlcmUgc3luY2hyb25pemluZyB3
aXRoIHRoZQorICAgICAgICByZW5kZXIgdGhyZWFkIHRvIG1ha2Ugc3VyZSB0aGF0IE9mZmxpbmVB
dWRpb0Rlc3RpbmF0aW9uTm9kZTo6b2ZmbGluZVJlbmRlcigpIHdhcworICAgICAgICBkb25lIHJ1
bm5pbmcgYmVmb3JlIHByb2NlZWRpbmcgd2l0aCB1bmluaXRpYWxpemF0aW9uLiBIb3dldmVyLCB3
aGVuIGFuIGF1ZGlvCisgICAgICAgIHdvcmtldCBpcyB1c2VkLCBtX3JlbmRlclRocmVhZCBpcyBu
dWxsIGFuZCBubyBzeW5jaHJvbml6YXRpb24gd2l0aCB0aGUgQXVkaW9Xb3JrbGV0CisgICAgICAg
IHRocmVhZCB3b3VsZCBoYXBwZW4uIFRoaXMgcGF0Y2ggYWRkcyB0aGUgbWlzc2luZyBzeW5jaHJv
bml6YXRpb24gd2l0aCB0aGUgQXVkaW9Xb3JrbGV0CisgICAgICAgIHRocmVhZCB3aGVuIHByZXNl
bnQuCisKKyAgICAgICAgVGVzdDogd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC9vZmZsaW5l
YXVkaW9jb250ZXh0LXVuaW5pdGlhbGl6ZWQtY3Jhc2guaHRtbAorCisgICAgICAgICogTW9kdWxl
cy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6T2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlOjp1bmluaXRpYWxpemUpOgorCiAyMDIx
LTA0LTIxICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgR1BVUHJv
Y2VzcyBsYXVuY2hlcyB1bm5lY2Vzc2FyaWx5IHdoZW4gbG9hZGluZyB0aGUgYW1hem9uIGZyb250
IHBhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vT2ZmbGlu
ZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vT2ZmbGluZUF1ZGlvRGVzdGluYXRpb25Ob2RlLmNwcAppbmRleCBmNDFmYjgwMmRhZGM0MzU4
ZTY1MWVjMzFmZWI0NmQzMjQwNDdjOWJmLi40ZDhkNWE4ZDlmNmY4MmM0NjNlNjgwMWQ2NzU4YzEy
N2Y4Mzc1Y2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL09m
ZmxpbmVBdWRpb0Rlc3RpbmF0aW9uTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJhdWRpby9PZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGUuY3BwCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvdGhyZWFkcy9C
aW5hcnlTZW1hcGhvcmUuaD4KICAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzYsOSArNzcs
MTggQEAgdm9pZCBPZmZsaW5lQXVkaW9EZXN0aW5hdGlvbk5vZGU6OnVuaW5pdGlhbGl6ZSgpCiAg
ICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChtX3Jl
bmRlclRocmVhZCkgewotICAgICAgICBtX3JlbmRlclRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24o
KTsKLSAgICAgICAgbV9yZW5kZXJUaHJlYWQgPSBudWxscHRyOworICAgIGlmIChtX3N0YXJ0ZWRS
ZW5kZXJpbmcpIHsKKyAgICAgICAgaWYgKG1fcmVuZGVyVGhyZWFkKSB7CisgICAgICAgICAgICBt
X3JlbmRlclRocmVhZC0+d2FpdEZvckNvbXBsZXRpb24oKTsKKyAgICAgICAgICAgIG1fcmVuZGVy
VGhyZWFkID0gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogd29ya2xldFBy
b3h5ID0gY29udGV4dCgpLmF1ZGlvV29ya2xldCgpLnByb3h5KCkpIHsKKyAgICAgICAgICAgIEJp
bmFyeVNlbWFwaG9yZSBzZW1hcGhvcmU7CisgICAgICAgICAgICB3b3JrbGV0UHJveHktPnBvc3RU
YXNrRm9yTW9kZVRvV29ya2xldEdsb2JhbFNjb3BlKFsmc2VtYXBob3JlXShTY3JpcHRFeGVjdXRp
b25Db250ZXh0JikgbXV0YWJsZSB7CisgICAgICAgICAgICAgICAgc2VtYXBob3JlLnNpZ25hbCgp
OworICAgICAgICAgICAgfSwgV29ya2VyUnVuTG9vcDo6ZGVmYXVsdE1vZGUoKSk7CisgICAgICAg
ICAgICBzZW1hcGhvcmUud2FpdCgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgQXVkaW9Ob2Rl
Ojp1bmluaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwZmY2NWEzYjdmM2VjYzMwZGI5ODExMDFmZDA1NzMx
MmQ5OGRiNWRhLi5hMWYyZmU0OTBiMzRhNGZlNGIzNjY3ZGJiNzIwYmIzMGM5OGQ2MjJiIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDQtMjEgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxl
LmNvbT4KKworICAgICAgICBHUFVQcm9jZXNzIGxhdW5jaGVzIHVubmVjZXNzYXJpbHkgd2hlbiBs
b2FkaW5nIHRoZSBhbWF6b24gZnJvbnQgcGFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0ODQzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIGxheW91dCB0ZXN0IGNvdmVyYWdlLgorCisgICAgICAg
ICogd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC9vZmZsaW5lYXVkaW9jb250ZXh0LXVuaW5p
dGlhbGl6ZWQtY3Jhc2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJhdWRpby9P
ZmZsaW5lQXVkaW9Db250ZXh0L29mZmxpbmVhdWRpb2NvbnRleHQtdW5pbml0aWFsaXplZC1jcmFz
aC5odG1sOiBBZGRlZC4KKwogMjAyMS0wNC0yMCAgQWRpdHlhIEtlZXJ0aGkgIDxha2VlcnRoaUBh
cHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI3NTUyMyk6IFtpT1NdIE9wYXF1ZSBz
eXN0ZW0gZmlsbCBjb2xvcnMgYXJlIGluY29ycmVjdCBpbiBkYXJrIG1vZGUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmF1ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQvb2ZmbGluZWF1ZGlvY29u
dGV4dC11bmluaXRpYWxpemVkLWNyYXNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYmF1
ZGlvL09mZmxpbmVBdWRpb0NvbnRleHQvb2ZmbGluZWF1ZGlvY29udGV4dC11bmluaXRpYWxpemVk
LWNyYXNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NTRkZGY3ZjE3ZWZhYjU4ZTQyZmFiZTM4
NTI1Nzk2NGFlMmM1ZDQxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8v
T2ZmbGluZUF1ZGlvQ29udGV4dC9vZmZsaW5lYXVkaW9jb250ZXh0LXVuaW5pdGlhbGl6ZWQtY3Jh
c2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1RoaXMgdGVzdCBwYXNzZXMgaWYgaXQgZG9l
cyBub3QgY3Jhc2guCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9PZmZsaW5lQXVk
aW9Db250ZXh0L29mZmxpbmVhdWRpb2NvbnRleHQtdW5pbml0aWFsaXplZC1jcmFzaC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC9vZmZsaW5lYXVkaW9jb250
ZXh0LXVuaW5pdGlhbGl6ZWQtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMmExMDUxYmQ3MDY1MDM2
NjBmYmRjYmJhOTFkYjFmYTMzMmI4ZjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vT2ZmbGluZUF1ZGlvQ29udGV4dC9vZmZsaW5lYXVkaW9jb250ZXh0LXVuaW5pdGlh
bGl6ZWQtY3Jhc2guaHRtbApAQCAtMCwwICsxLDI3IEBACis8cD5UaGlzIHRlc3QgcGFzc2VzIGlm
IGl0IGRvZXMgbm90IGNyYXNoLjwvcD4KKzxzY3JpcHQ+CisgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKworICBvbmxvYWQgPSBhc3luYyAoKSA9
PiB7CisgICAgbGV0IGNvbnRleHRzID0gW107CisgICAgb251bmxvYWQgPSAoKSA9PiB7CisgICAg
ICB3aGlsZSAoY29udGV4dHMubGVuZ3RoKSB7CisgICAgICAgIGxldCBjdHggPSBjb250ZXh0cy5w
b3AoKTsKKyAgICAgICAgY3R4LnN0YXJ0UmVuZGVyaW5nKCk7CisgICAgICB9CisgICAgfTsKKwor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTU7IGkrKykgeworICAgICAgbGV0IG9mZmxpbmVBdWRp
b0NvbnRleHQgPSBuZXcgT2ZmbGluZUF1ZGlvQ29udGV4dCh7CisgICAgICAgIGxlbmd0aDogMSwK
KyAgICAgICAgc2FtcGxlUmF0ZTogMzAwMAorICAgICAgfSk7CisgICAgICBjb250ZXh0cy5wdXNo
KG9mZmxpbmVBdWRpb0NvbnRleHQpOworICAgICAgdHJ5IHsKKyAgICAgICAgYXdhaXQgb2ZmbGlu
ZUF1ZGlvQ29udGV4dC5hdWRpb1dvcmtsZXQuYWRkTW9kdWxlKCcnKTsKKyAgICAgIH0gY2F0Y2gg
eworICAgICAgfQorICAgIH0KKyAgfTsKKzwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426716</attachid>
            <date>2021-04-21 11:29:54 -0700</date>
            <delta_ts>2021-04-21 13:53:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224843-20210421112953.patch</filename>
            <type>text/plain</type>
            <size>48529</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmVkNjIyZjc1M2YzZTFh
YTI2YjhmNmU4ODc4NGJkNTc5ZGI5YzIyYS4uYTJiY2I5Mjk5ZGEzMGRhOWYwZjkxNzdkOTczYWEx
YTI1ODM4ZDdjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwMSBAQAorMjAyMS0wNC0yMSAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIEdQVVByb2Nlc3MgbGF1bmNo
ZXMgdW5uZWNlc3NhcmlseSB3aGVuIGxvYWRpbmcgdGhlIGFtYXpvbiBmcm9udCBwYWdlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ4NDMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBbWF6b24uY29tIHdh
cyBnb2luZyBtZWRpYS1yZWxhdGVkIGZlYXR1cmUgZGV0ZWN0aW9uIGxpa2Ugc286CisgICAgICAg
IGBgYAorICAgICAgICAhIWguY3JlYXRlRWxlbWVudCgiYXVkaW8iKS5jYW5QbGF5VHlwZQorICAg
ICAgICAhIWguY3JlYXRlRWxlbWVudCgidmlkZW8iKS5jYW5QbGF5VHlwZQorICAgICAgICBgYGAK
KworICAgICAgICBDb25zdHJ1Y3RpbmcgYW4gSFRNTEF1ZGlvRWxlbWVudCAvIEhUTUxWaWRlb0Vs
ZW1lbnQgd291bGQgaW5pdGlhbGl6ZSBhIE1lZGlhU2Vzc2lvbgorICAgICAgICBvYmplY3QsIHdo
aWNoIHdvdWxkIGxhdW5jaCB0aGUgR1BVUHJvY2Vzcy4gUnVubmluZyBzdWNoIGNvZGUgc2hvdWxk
IHJlYWxseSBub3QgcmVxdWlyZQorICAgICAgICBsYXVuY2hpbmcgdGhlIEdQVVByb2Nlc3MgdGhv
dWdoLgorCisgICAgICAgIFRvIGFkZHJlc3MgdGhpcywgSSBtYWRlIHRoZSBNZWRpYVNlc3Npb24g
aW5pdGlhbGl6YXRpb24gbGF6eS4gSW5zdGVhZCBvZiBkb2luZyBpdCB3aGVuCisgICAgICAgIGNv
bnN0cnVjdGluZyBhbiBIVE1MTWVkaWFFbGVtZW50LCB3ZSBub3cgZG8gaXQgYXMgc29vbiBhcyB3
ZSBhY3R1YWxseSBuZWVkIGEgTWVkaWFTZXNzaW9uCisgICAgICAgIGluIHRoZSBtZWRpYVNlc3Np
b24oKSBnZXR0ZXIuIFRoaXMgd2lsbCBhdCB0aGUgdmVyeSBsZWFzdCBoYXBwZW4gaW4gcHJlcGFy
ZUZvckxvYWQoKSBhZnRlcgorICAgICAgICBzZXR0aW5nIHRoZSAnc3JjJyBhdHRyaWJ1dGUuIEhv
d2V2ZXIsIGluIGNhc2VzIHdoZXJlIHRoZSBIVE1MTWVkaWFFbGVtZW50IGlzIG5vdCB1c2VkIGZv
cgorICAgICAgICBhbnl3YXkgbWVhbmluZ2Z1bCAoZS5nIG5vICdzcmMnIGF0dHJpYnV0ZSBpcyBl
dmVyIHNldCksIHRoZW4gd2UgYXZvaWQgbGF1bmNoaW5nIHRoZQorICAgICAgICBHUFVQcm9jZXNz
LgorCisgICAgICAgIEkgaGF2ZSB2ZXJpZmllZCBvbiBhbiBpUGFkIHRoYXQgdmlzaXRpbmcgdGhl
IGFtYXpvbi5jb20gZnJvbnQgcGFnZSBhbmQgc2VhcmNoaW5nIGZvcgorICAgICAgICBzb21ldGhp
bmcgbm8gbG9uZ2VyIGxhdW5jaGVzIHRoZSBHUFVQcm9jZXNzIGFmdGVyIHRoaXMgY2hhbmdlLiBU
aGlzIGNoYW5nZXMgYWxzbyBzZWVtcyB0bworICAgICAgICBiZSBhIH4zLjYlIFBMVU0gcHJvZ3Jl
c3Npb24gb24gaVBob25lIGFuZCBwb3RlbnRpYWxseSBoaWdoZXIgb24gaVBhZC4KKworICAgICAg
ICAqIGh0bWwvSFRNTEF1ZGlvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXVk
aW9FbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmluaXRpYWxpemVNZWRpYVNlc3Np
b24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6fkhUTUxNZWRpYUVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVnaXN0ZXJXaXRoRG9j
dW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dW5yZWdpc3Rlcldp
dGhEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJl
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OnJlc3VtZUZyb21Eb2N1bWVudFN1c3BlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZWRpYUVsZW1lbnQ6OmxvYWRSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjptZWRpYUxvYWRpbmdGYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpzZWVrV2l0aFRvbGVyYW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBsYXlJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwYXVzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwYXVzZUludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldFZvbHVtZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZXRNdXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
TWVkaWFFbGVtZW50OjpiZWdpblNjcnViYmluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVk
aWFFbGVtZW50OjptZWRpYVBsYXllckRpZEFkZEF1ZGlvVHJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6c291cmNlV2FzQWRkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJUaW1lQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjphZGRCZWhhdmlvclJlc3RyaWN0aW9uc09uRW5kSWZOZWNl
c3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2Vla1RvUGxheWJh
Y2tQb3NpdGlvbkVuZGVkVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjptZWRpYUVuZ2luZVdhc1VwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGF1c2VkRm9yVXNlckludGVyYWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpjaGVja0ZvckF1ZGlvQW5kVmlk
ZW8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBsYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzdG9wV2l0aG91dERlc3Ry
b3lpbmdNZWRpYVBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpz
dG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnN1c3BlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnZpc2liaWxpdHlTdGF0ZUNoYW5nZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6d2Via2l0U2hvd1BsYXliYWNrVGFyZ2V0UGlja2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OndpcmVsZXNzUm91dGVzQXZh
aWxhYmxlRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNl
dElzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6YWRkRXZlbnRMaXN0ZW5lcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFF
bGVtZW50OjpyZW1vdmVFdmVudExpc3RlbmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OmVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUNoYW5nZWRFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpyZW1vdGVIYXNBdmFpbGFiaWxp
dHlDYWxsYmFja3NDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmV4aXRGdWxsc2NyZWVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNo
b3VsZEZvcmNlQ29udHJvbHNEaXNwbGF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1lZGlhQ29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFQbGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJJc0Z1bGxzY3JlZW5QZXJtaXR0ZWQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cmVtb3ZlQmVoYXZpb3JSZXN0
cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6dXBkYXRlUmF0ZUNoYW5nZVJlc3RyaWN0aW9ucyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MTWVkaWFFbGVtZW50OjptYXhpbXVtU291cmNlQnVmZmVyU2l6ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVNZWRpYVN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhU3RhdGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cHVyZ2VCdWZmZXJlZERhdGFJZlBvc3Np
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmFsbG93c01lZGlhRG9j
dW1lbnRJbmxpbmVQbGF5YmFja0NoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6aXNWaXNpYmxlSW5WaWV3cG9ydENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlU2hvdWxkQXV0b3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlU2hvdWxkUGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpwbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJp
Y3Rpb25zVGltZXJGaXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpz
ZXRJbkFjdGl2ZURvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
Om1lZGlhU2Vzc2lvbiBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxWaWRlb0VsZW1lbnQ6OmNyZWF0ZSk6CisKIDIwMjEtMDQtMjAgIEFkaXR5YSBLZWVydGhp
ICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNzU1MjMpOiBb
aU9TXSBPcGFxdWUgc3lzdGVtIGZpbGwgY29sb3JzIGFyZSBpbmNvcnJlY3QgaW4gZGFyayBtb2Rl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmNwcAppbmRleCA1OWU2MWMzMWUz
YWU4ZWNlNDg0OGQ0NDZlZGQwNDI2OGIxY2NmOTM5Li41MDQ5NWMxN2I5Y2E5NzkyMDNlZjk4NGJm
MjgxNjM0ZTUyMGZhZTRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5j
cHAKQEAgLTQ3LDcgKzQ3LDYgQEAgaW5saW5lIEhUTUxBdWRpb0VsZW1lbnQ6OkhUTUxBdWRpb0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQKIFJlZjxIVE1MQXVk
aW9FbGVtZW50PiBIVE1MQXVkaW9FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKICAg
ICBhdXRvIGVsZW1lbnQgPSBhZG9wdFJlZigqbmV3IEhUTUxBdWRpb0VsZW1lbnQodGFnTmFtZSwg
ZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikpOwotICAgIGVsZW1lbnQtPmZpbmlzaEluaXRpYWxp
emF0aW9uKCk7CiAgICAgZWxlbWVudC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIGVs
ZW1lbnQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAz
MjU4ZWZkZjQxZmJiNzZmYWY4ODk3ZjA0YmZlMWE3Y2JmYjg2NzcyLi4zZDlhOWIwMjM0MGY2Mjgy
ZmIyZTZkOTNlYjhhZjk3N2E3MDNjNTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5jcHAKQEAgLTQzMiw2ICs0MzIsOCBAQCBIVE1MTWVkaWFFbGVtZW50OjpIVE1MTWVk
aWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50JiBkb2N1bQog
ICAgICwgbV90cmFja3NBcmVSZWFkeSh0cnVlKQogICAgICwgbV9oYXZlVmlzaWJsZVRleHRUcmFj
ayhmYWxzZSkKICAgICAsIG1fcHJvY2Vzc2luZ1ByZWZlcmVuY2VDaGFuZ2UoZmFsc2UpCisgICAg
LCBtX3Nob3VsZEF1ZGlvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1cmUoZG9jdW1lbnQudG9wRG9j
dW1lbnQoKS5hdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSgpICYmICFwcm9jZXNzaW5n
VXNlckdlc3R1cmVGb3JNZWRpYSgpKQorICAgICwgbV9zaG91bGRWaWRlb1BsYXliYWNrUmVxdWly
ZVVzZXJHZXN0dXJlKGRvY3VtZW50LnRvcERvY3VtZW50KCkudmlkZW9QbGF5YmFja1JlcXVpcmVz
VXNlckdlc3R1cmUoKSAmJiAhcHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKICNpZiBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQogICAgICwgbV9yZW1vdGUoUmVtb3RlUGxh
eWJhY2s6OmNyZWF0ZSgqdGhpcykpCiAjZW5kaWYKQEAgLTQ0OSw4ICs0NTEsOSBAQCBIVE1MTWVk
aWFFbGVtZW50OjpIVE1MTWVkaWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50JiBkb2N1bQogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6YWRkRXZlbnRM
aXN0ZW5lcnNUb05vZGUoKnRoaXMpOwogfQogCi12b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmZpbmlz
aEluaXRpYWxpemF0aW9uKCkKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6aW5pdGlhbGl6ZU1lZGlh
U2Vzc2lvbigpCiB7CisgICAgQVNTRVJUKCFtX21lZGlhU2Vzc2lvbik7CiAgICAgbV9tZWRpYVNl
c3Npb24gPSBtYWtlVW5pcXVlPE1lZGlhRWxlbWVudFNlc3Npb24+KCp0aGlzKTsKIAogICAgIG1f
bWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246
OlJlcXVpcmVVc2VyR2VzdHVyZUZvckZ1bGxzY3JlZW4pOwpAQCAtNDY4LDEyICs0NzEsNyBAQCB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmZpbmlzaEluaXRpYWxpemF0aW9uKCkKICAgICAgICAgbV9t
ZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6
SW52aXNpYmxlQXV0b3BsYXlOb3RQZXJtaXR0ZWQpOwogCiAgICAgaWYgKGRvY3VtZW50Lm93bmVy
RWxlbWVudCgpIHx8ICFkb2N1bWVudC5pc01lZGlhRG9jdW1lbnQoKSkgewotICAgICAgICBjb25z
dCBhdXRvJiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50KCk7Ci0gICAgICAgIGNv
bnN0IGJvb2wgaXNQcm9jZXNzaW5nVXNlckdlc3R1cmUgPSBwcm9jZXNzaW5nVXNlckdlc3R1cmVG
b3JNZWRpYSgpOwotICAgICAgICBjb25zdCBib29sIHNob3VsZEF1ZGlvUGxheWJhY2tSZXF1aXJl
VXNlckdlc3R1cmUgPSB0b3BEb2N1bWVudC5hdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVy
ZSgpICYmICFpc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZTsKLSAgICAgICAgY29uc3QgYm9vbCBzaG91
bGRWaWRlb1BsYXliYWNrUmVxdWlyZVVzZXJHZXN0dXJlID0gdG9wRG9jdW1lbnQudmlkZW9QbGF5
YmFja1JlcXVpcmVzVXNlckdlc3R1cmUoKSAmJiAhaXNQcm9jZXNzaW5nVXNlckdlc3R1cmU7Ci0K
LSAgICAgICAgaWYgKHNob3VsZFZpZGVvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1cmUpIHsKKyAg
ICAgICAgaWYgKG1fc2hvdWxkVmlkZW9QbGF5YmFja1JlcXVpcmVVc2VyR2VzdHVyZSkgewogICAg
ICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVt
ZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9SYXRlQ2hhbmdlKTsKICAgICAg
ICAgICAgIGlmIChkb2N1bWVudC5zZXR0aW5ncygpLnJlcXVpcmVzVXNlckdlc3R1cmVUb0xvYWRW
aWRlbygpKQogICAgICAgICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3Ry
aWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvckxvYWQpOwpA
QCAtNDgyLDExICs0ODAsMTEgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpmaW5pc2hJbml0aWFs
aXphdGlvbigpCiAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UtPmlzTG93UG93ZXJNb2RlRW5hYmxl
ZCgpKQogICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24o
TWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9EdWVUb0xvd1Bv
d2VyTW9kZSk7CiAKLSAgICAgICAgaWYgKHNob3VsZEF1ZGlvUGxheWJhY2tSZXF1aXJlVXNlckdl
c3R1cmUpCisgICAgICAgIGlmIChtX3Nob3VsZEF1ZGlvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1
cmUpCiAgICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihN
ZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVDaGFuZ2Up
OwogCiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKLSAgICAgICAgaWYgKHNo
b3VsZFZpZGVvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1cmUgfHwgc2hvdWxkQXVkaW9QbGF5YmFj
a1JlcXVpcmVVc2VyR2VzdHVyZSkKKyAgICAgICAgaWYgKG1fc2hvdWxkVmlkZW9QbGF5YmFja1Jl
cXVpcmVVc2VyR2VzdHVyZSB8fCBtX3Nob3VsZEF1ZGlvUGxheWJhY2tSZXF1aXJlVXNlckdlc3R1
cmUpCiAgICAgICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihN
ZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb1Nob3dQbGF5YmFja1Rhcmdl
dFBpY2tlcik7CiAjZW5kaWYKIApAQCAtNTEwLDcgKzUwOCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6ZmluaXNoSW5pdGlhbGl6YXRpb24oKQogICAgIEF1ZGlvU2Vzc2lvbjo6c2hhcmVkU2Vz
c2lvbigpLmFkZE11dGVkU3RhdGVPYnNlcnZlcih0aGlzKTsKICNlbmRpZgogCi0gICAgbWVkaWFT
ZXNzaW9uKCkuY2xpZW50V2lsbEJlZ2luQXV0b3BsYXlpbmcoKTsKKyAgICBtX21lZGlhU2Vzc2lv
bi0+Y2xpZW50V2lsbEJlZ2luQXV0b3BsYXlpbmcoKTsKIH0KIAogSFRNTE1lZGlhRWxlbWVudDo6
fkhUTUxNZWRpYUVsZW1lbnQoKQpAQCAtNTM5LDcgKzUzNyw4IEBAIEhUTUxNZWRpYUVsZW1lbnQ6
On5IVE1MTWVkaWFFbGVtZW50KCkKICNpZiBFTkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VU
KQogICAgIGlmIChoYXNFdmVudExpc3RlbmVycyhldmVudE5hbWVzKCkud2Via2l0cGxheWJhY2t0
YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQpIHx8IG1fcmVtb3RlLT5oYXNBdmFpbGFiaWxp
dHlDYWxsYmFja3MoKSkgewogICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
TGlzdGVuZXJzID0gZmFsc2U7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFj
a1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhmYWxzZSk7CisgICAgICAgIGlmIChtX21lZGlh
U2Vzc2lvbikKKyAgICAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1Rhcmdl
dEF2YWlsYWJpbGl0eUxpc3RlbmVycyhmYWxzZSk7CiAgICAgICAgIHVwZGF0ZU1lZGlhU3RhdGUo
KTsKICAgICB9CiAjZW5kaWYKQEAgLTYyMyw3ICs2MjIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnJlZ2lzdGVyV2l0aERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKIHsKICAgICBkb2N1
bWVudC5yZWdpc3Rlck1lZGlhRWxlbWVudCgqdGhpcyk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+
cmVnaXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIG1lZGlhU2Vzc2lvbigpLnJlZ2lz
dGVyV2l0aERvY3VtZW50KGRvY3VtZW50KTsKIAogICAgIGlmIChtX2lzV2FpdGluZ1VudGlsTWVk
aWFDYW5TdGFydCkKICAgICAgICAgZG9jdW1lbnQuYWRkTWVkaWFDYW5TdGFydExpc3RlbmVyKCp0
aGlzKTsKQEAgLTY0NCw3ICs2NDMsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVucmVnaXN0
ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogewogICAgIGRvY3VtZW50LnVucmVn
aXN0ZXJNZWRpYUVsZW1lbnQoKnRoaXMpOwogCi0gICAgbV9tZWRpYVNlc3Npb24tPnVucmVnaXN0
ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIGlmIChtX21lZGlhU2Vzc2lvbikKKyAgICAg
ICAgbV9tZWRpYVNlc3Npb24tPnVucmVnaXN0ZXJXaXRoRG9jdW1lbnQoZG9jdW1lbnQpOwogCiAg
ICAgaWYgKG1faXNXYWl0aW5nVW50aWxNZWRpYUNhblN0YXJ0KQogICAgICAgICBkb2N1bWVudC5y
ZW1vdmVNZWRpYUNhblN0YXJ0TGlzdGVuZXIoKnRoaXMpOwpAQCAtNjgwLDEyICs2ODAsMTIgQEAg
dm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYgb2xk
RG9jdW1lbnQsIERvY3VtZW50JiBuZXcKIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJl
Rm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkKIHsKLSAgICBtX21lZGlhU2Vzc2lvbi0+dW5yZWdpc3Rl
cldpdGhEb2N1bWVudChkb2N1bWVudCgpKTsKKyAgICBtZWRpYVNlc3Npb24oKS51bnJlZ2lzdGVy
V2l0aERvY3VtZW50KGRvY3VtZW50KCkpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJl
c3VtZUZyb21Eb2N1bWVudFN1c3BlbnNpb24oKQogewotICAgIG1fbWVkaWFTZXNzaW9uLT5yZWdp
c3RlcldpdGhEb2N1bWVudChkb2N1bWVudCgpKTsKKyAgICBtZWRpYVNlc3Npb24oKS5yZWdpc3Rl
cldpdGhEb2N1bWVudChkb2N1bWVudCgpKTsKICAgICB1cGRhdGVTaG91bGRBdXRvcGxheSgpOwog
fQogCkBAIC03MzgsNyArNzM4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9tU3RyaW4KIAogICAgICAg
ICAvLyBUaGUgYXR0cmlidXRlIG11c3QgYmUgaWdub3JlZCBpZiB0aGUgYXV0b3BsYXkgYXR0cmli
dXRlIGlzIHByZXNlbnQKICAgICAgICAgaWYgKCFhdXRvcGxheSgpICYmICFtX2hhdmVQcmVwYXJl
ZFRvUGxheSAmJiBtX3BsYXllcikKLSAgICAgICAgICAgIG1fcGxheWVyLT5zZXRQcmVsb2FkKG1f
bWVkaWFTZXNzaW9uLT5lZmZlY3RpdmVQcmVsb2FkRm9yRWxlbWVudCgpKTsKKyAgICAgICAgICAg
IG1fcGxheWVyLT5zZXRQcmVsb2FkKG1lZGlhU2Vzc2lvbigpLmVmZmVjdGl2ZVByZWxvYWRGb3JF
bGVtZW50KCkpOwogCiAgICAgfSBlbHNlIGlmIChuYW1lID09IG1lZGlhZ3JvdXBBdHRyKQogICAg
ICAgICBzZXRNZWRpYUdyb3VwKHZhbHVlKTsKQEAgLTgwMCw3ICs4MDAsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUoKQogICAgIGlmICghbV9leHBsaWNp
dGx5TXV0ZWQpIHsKICAgICAgICAgbV9leHBsaWNpdGx5TXV0ZWQgPSB0cnVlOwogICAgICAgICBt
X211dGVkID0gaGFzQXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihtdXRlZEF0dHIpOwot
ICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOworICAgICAg
ICBtZWRpYVNlc3Npb24oKS5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CiAgICAgfQogCiAgICAg
Y29uZmlndXJlTWVkaWFDb250cm9scygpOwpAQCAtMTIwNiw3ICsxMjA2LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCgpCiAgICAgICAgIC8vIDkgLSBJbnZva2UgdGhl
IG1lZGlhIGVsZW1lbnQncyByZXNvdXJjZSBzZWxlY3Rpb24gYWxnb3JpdGhtLgogICAgICAgICAv
LyBOb3RlLCB1bmxlc3MgdGhlIHJlc3RyaWN0aW9uIG9uIHJlcXVpcmluZyB1c2VyIGFjdGlvbiBo
YXMgYmVlbiByZW1vdmVkLAogICAgICAgICAvLyBkbyBub3QgYmVnaW4gZG93bmxvYWRpbmcgZGF0
YS4KLSAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uLT5kYXRhTG9hZGluZ1Blcm1pdHRlZCgpKQor
ICAgICAgICBpZiAobWVkaWFTZXNzaW9uKCkuZGF0YUxvYWRpbmdQZXJtaXR0ZWQoKSkKICAgICAg
ICAgICAgIHNlbGVjdE1lZGlhUmVzb3VyY2UoKTsKICAgICB9CiAKQEAgLTEyNTcsNyArMTI1Nyw3
IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNvdXJjZSgpCiAgICAgaWYg
KG1fcmVzb3VyY2VTZWxlY3Rpb25UYXNrUXVldWUuaGFzUGVuZGluZ1Rhc2tzKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBhZ2VBbGxvd3NEYXRhTG9hZGlu
ZygpKSB7CisgICAgaWYgKCFtZWRpYVNlc3Npb24oKS5wYWdlQWxsb3dzRGF0YUxvYWRpbmcoKSkg
ewogICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJub3QgYWxsb3dlZCB0byBsb2Fk
IGluIGJhY2tncm91bmQsIHdhaXRpbmciKTsKICAgICAgICAgc2V0U2hvdWxkRGVsYXlMb2FkRXZl
bnQoZmFsc2UpOwogICAgICAgICBpZiAobV9pc1dhaXRpbmdVbnRpbE1lZGlhQ2FuU3RhcnQpCkBA
IC0xMjcwLDcgKzEyNzAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE1lZGlhUmVz
b3VyY2UoKQogICAgIC8vIE9uY2UgdGhlIHBhZ2UgaGFzIGFsbG93ZWQgYW4gZWxlbWVudCB0byBs
b2FkIG1lZGlhLCBpdCBpcyBmcmVlIHRvIGxvYWQgYXQgd2lsbC4gVGhpcyBhbGxvd3MgYQogICAg
IC8vIHBsYXlsaXN0IHRoYXQgc3RhcnRzIGluIGEgZm9yZWdyb3VuZCB0YWIgdG8gY29udGludWUg
YXV0b21hdGljYWxseSBpZiB0aGUgdGFiIGlzIHN1YnNlcXVlbnRseQogICAgIC8vIHB1dCBpbnRv
IHRoZSBiYWNrZ3JvdW5kLgotICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3Ry
aWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVQYWdlQ29uc2VudFRvTG9hZE1lZGlh
KTsKKyAgICBtZWRpYVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxl
bWVudFNlc3Npb246OlJlcXVpcmVQYWdlQ29uc2VudFRvTG9hZE1lZGlhKTsKIAogICAgIGF1dG8g
bG9nU2l0ZUlkZW50aWZpZXIgPSBMT0dJREVOVElGSUVSOwogICAgIFVOVVNFRF9QQVJBTShsb2dT
aXRlSWRlbnRpZmllcik7CkBAIC0xNDk1LDE0ICsxNDk1LDE0IEBAIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6bG9hZFJlc291cmNlKGNvbnN0IFVSTCYgaW5pdGlhbFVSTCwgQ29udGVudFR5cGUmIGNv
bnRlbnRUCiAgICAgbV9wbGF5ZXItPnNldFByaXZhdGVCcm93c2luZ01vZGUocHJpdmF0ZU1vZGUp
OwogCiAgICAgaWYgKCFhdXRvcGxheSgpICYmICFtX2hhdmVQcmVwYXJlZFRvUGxheSkKLSAgICAg
ICAgbV9wbGF5ZXItPnNldFByZWxvYWQobV9tZWRpYVNlc3Npb24tPmVmZmVjdGl2ZVByZWxvYWRG
b3JFbGVtZW50KCkpOworICAgICAgICBtX3BsYXllci0+c2V0UHJlbG9hZChtZWRpYVNlc3Npb24o
KS5lZmZlY3RpdmVQcmVsb2FkRm9yRWxlbWVudCgpKTsKICAgICBtX3BsYXllci0+c2V0UHJlc2Vy
dmVzUGl0Y2gobV93ZWJraXRQcmVzZXJ2ZXNQaXRjaCk7CiAgICAgbV9wbGF5ZXItPnNldFBpdGNo
Q29ycmVjdGlvbkFsZ29yaXRobShkb2N1bWVudCgpLnNldHRpbmdzKCkucGl0Y2hDb3JyZWN0aW9u
QWxnb3JpdGhtKCkpOwogCiAgICAgaWYgKCFtX2V4cGxpY2l0bHlNdXRlZCkgewogICAgICAgICBt
X2V4cGxpY2l0bHlNdXRlZCA9IHRydWU7CiAgICAgICAgIG1fbXV0ZWQgPSBoYXNBdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKG11dGVkQXR0cik7Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9u
LT5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLmNhblBy
b2R1Y2VBdWRpb0NoYW5nZWQoKTsKICAgICB9CiAKICAgICB1cGRhdGVWb2x1bWUoKTsKQEAgLTIy
MjMsNyArMjIyMyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFMb2FkaW5nRmFpbGVk
KE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgZXJyb3IpCiAKICAgICBsb2dNZWRpYUxvYWRSZXF1
ZXN0KGRvY3VtZW50KCkucGFnZSgpLCBTdHJpbmcoKSwgY29udmVydEVudW1lcmF0aW9uVG9TdHJp
bmcoZXJyb3IpLCBmYWxzZSk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50Q2hhcmFjdGVy
aXN0aWNzQ2hhbmdlZCgpOworICAgIG1lZGlhU2Vzc2lvbigpLmNsaWVudENoYXJhY3RlcmlzdGlj
c0NoYW5nZWQoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXROZXR3b3JrU3RhdGUo
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBzdGF0ZSkKQEAgLTI0MTYsNyArMjQxNiw3IEBAIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSBzdGF0ZSkKICAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiAjZW5kaWYKIAot
ICAgICAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdlZCgpOwor
ICAgICAgICBtZWRpYVNlc3Npb24oKS5jbGllbnRDaGFyYWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CiAg
ICAgfQogCiAgICAgaWYgKG1fcmVhZHlTdGF0ZSA+PSBIQVZFX0NVUlJFTlRfREFUQSAmJiBvbGRT
dGF0ZSA8IEhBVkVfQ1VSUkVOVF9EQVRBKSB7CkBAIC0yNDU2LDcgKzI0NTYsNyBAQCB2b2lkIEhU
TUxNZWRpYUVsZW1lbnQ6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgc3Rh
dGUpCiAKICAgICAvLyBJZiB3ZSB0cmFuc2l0aW9uIHRvIHRoZSBGdXR1cmUgRGF0YSBzdGF0ZSBh
bmQgd2UncmUgYWJvdXQgdG8gYmVnaW4gcGxheWluZywgZW5zdXJlIHBsYXliYWNrIGlzIGFjdHVh
bGx5IHBlcm1pdHRlZCBmaXJzdCwKICAgICAvLyBob25vcmluZyBhbnkgcGxheWJhY2sgZGVuaWFs
IHJlYXNvbnMgc3VjaCBhcyB0aGUgcmVxdWlyZW1lbnQgb2YgYSB1c2VyIGdlc3R1cmUuCi0gICAg
aWYgKG1fcmVhZHlTdGF0ZSA9PSBIQVZFX0ZVVFVSRV9EQVRBICYmIG9sZFN0YXRlIDwgSEFWRV9G
VVRVUkVfREFUQSAmJiBwb3RlbnRpYWxseVBsYXlpbmcoKSAmJiAhbV9tZWRpYVNlc3Npb24tPnBs
YXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkg
eworICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gSEFWRV9GVVRVUkVfREFUQSAmJiBvbGRTdGF0ZSA8
IEhBVkVfRlVUVVJFX0RBVEEgJiYgcG90ZW50aWFsbHlQbGF5aW5nKCkgJiYgIW1lZGlhU2Vzc2lv
bigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5
aW5nKSkgewogICAgICAgICBhdXRvIGNhblRyYW5zaXRpb24gPSBjYW5UcmFuc2l0aW9uRnJvbUF1
dG9wbGF5VG9QbGF5KCk7CiAgICAgICAgIGlmIChjYW5UcmFuc2l0aW9uICYmIGNhblRyYW5zaXRp
b24udmFsdWUoKSA9PSBNZWRpYVBsYXliYWNrRGVuaWFsUmVhc29uOjpVc2VyR2VzdHVyZVJlcXVp
cmVkKQogICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiQXV0b3BsYXkgYmxv
Y2tlZCwgdXNlciBnZXN0dXJlIHJlcXVpcmVkIik7CkBAIC0yOTc2LDcgKzI5NzYsNyBAQCB2b2lk
IEhUTUxNZWRpYUVsZW1lbnQ6OnNlZWtXaXRoVG9sZXJhbmNlKGNvbnN0IE1lZGlhVGltZSYgaW5U
aW1lLCBjb25zdCBNZWRpYVRpbQogICAgICAgICBzZWVrVGFzaygpOwogCiAgICAgaWYgKHByb2Nl
c3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1v
dmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2Vz
dHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLnJl
bW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJH
ZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpzZWVrVGFzaygpCkBAIC0zNDQ1LDcgKzM0NDUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnBsYXkoRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkKIHsKICAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIpOwogCi0gICAgYXV0byBzdWNjZXNzID0gbV9tZWRpYVNlc3Np
b24tPnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5
aW5nKTsKKyAgICBhdXRvIHN1Y2Nlc3MgPSBtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hh
bmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZyk7CiAgICAgaWYgKCFzdWNj
ZXNzKSB7CiAgICAgICAgIGlmIChzdWNjZXNzLnZhbHVlKCkgPT0gTWVkaWFQbGF5YmFja0Rlbmlh
bFJlYXNvbjo6VXNlckdlc3R1cmVSZXF1aXJlZCkKICAgICAgICAgICAgIHNldEF1dG9wbGF5RXZl
bnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50ZWRBdXRv
cGxheSk7CkBAIC0zNDcxLDcgKzM0NzEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXko
KQogewogICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUik7CiAKLSAgICBhdXRvIHN1Y2Nlc3Mg
PSBtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXli
YWNrU3RhdGU6OlBsYXlpbmcpOworICAgIGF1dG8gc3VjY2VzcyA9IG1lZGlhU2Vzc2lvbigpLnBs
YXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKTsK
ICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJw
bGF5YmFjayBub3QgcGVybWl0dGVkOiAiLCBzdWNjZXNzLnZhbHVlKCkpOwogICAgICAgICBpZiAo
c3VjY2Vzcy52YWx1ZSgpID09IE1lZGlhUGxheWJhY2tEZW5pYWxSZWFzb246OlVzZXJHZXN0dXJl
UmVxdWlyZWQpCkBAIC0zNDk4LDcgKzM0OTgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBs
YXlJbnRlcm5hbCgpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIW1fbWVkaWFT
ZXNzaW9uLT5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpKSB7CisgICAgaWYgKCFtZWRpYVNlc3Np
b24oKS5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpKSB7CiAgICAgICAgIEFMV0FZU19MT0coTE9H
SURFTlRJRklFUiwgInJldHVybmluZyBiZWNhdXNlIG9mIGludGVycnVwdGlvbiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMzU1Miw3ICszNTUyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpwYXVzZSgpCiAgICAgaWYgKG1fd2FpdGluZ1RvRW50ZXJGdWxsc2NyZWVuKQogICAgICAg
ICBtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbiA9IGZhbHNlOwogCi0gICAgaWYgKCFtX21lZGlh
U2Vzc2lvbi0+cGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6
OlBhdXNlZCkpCisgICAgaWYgKCFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hhbmdlUGVy
bWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGF1c2VkKSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKHByb2Nlc3NpbmdVc2VyR2VzdHVyZUZvck1lZGlhKCkpCkBAIC0zNTc1LDcgKzM1NzUs
NyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlSW50ZXJuYWwoKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+Y2xpZW50V2lsbFBhdXNlUGxh
eWJhY2soKSkgeworICAgIGlmICghbWVkaWFTZXNzaW9uKCkuY2xpZW50V2lsbFBhdXNlUGxheWJh
Y2soKSkgewogICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJyZXR1cm5pbmcgYmVj
YXVzZSBvZiBpbnRlcnJ1cHRpb24iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM1ODQs
NyArMzU4NCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1c2VJbnRlcm5hbCgpCiAgICAg
aWYgKCFtX3BsYXllciB8fCBtX25ldHdvcmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZKSB7CiAgICAg
ICAgIC8vIFVubGVzcyB0aGUgcmVzdHJpY3Rpb24gb24gbWVkaWEgcmVxdWlyaW5nIHVzZXIgYWN0
aW9uIGhhcyBiZWVuIGxpZnRlZAogICAgICAgICAvLyBkb24ndCB0cmlnZ2VyIGxvYWRpbmcgaWYg
YSBzY3JpcHQgY2FsbHMgcGF1c2UoKS4KLSAgICAgICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+cGxh
eWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKQor
ICAgICAgICBpZiAoIW1lZGlhU2Vzc2lvbigpLnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQo
TWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5nKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgc2VsZWN0TWVkaWFSZXNvdXJjZSgpOwogICAgIH0KQEAgLTM2NzMsNyArMzY3Myw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IEhUTUxNZWRpYUVsZW1lbnQ6OnNldFZvbHVtZShkb3VibGUgdm9sdW1l
KQogICAgIHVwZGF0ZVZvbHVtZSgpOwogICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1lcygpLnZv
bHVtZWNoYW5nZUV2ZW50KTsKIAotICAgIGlmIChpc1BsYXlpbmcoKSAmJiAhbV9tZWRpYVNlc3Np
b24tPnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5
aW5nKSkgeworICAgIGlmIChpc1BsYXlpbmcoKSAmJiAhbWVkaWFTZXNzaW9uKCkucGxheWJhY2tT
dGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CiAgICAg
ICAgIHNjaGVkdWxlUmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhET01FeGNlcHRpb246OmNyZWF0
ZShOb3RBbGxvd2VkRXJyb3IpKTsKICAgICAgICAgcGF1c2VJbnRlcm5hbCgpOwogICAgICAgICBz
ZXRBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6
UHJldmVudGVkQXV0b3BsYXkpOwpAQCAtMzczMiw3ICszNzMyLDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpzZXRNdXRlZChib29sIG11dGVkKQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFD
S19UQVJHRVQpCiAgICAgICAgIHNjaGVkdWxlVXBkYXRlTWVkaWFTdGF0ZSgpOwogI2VuZGlmCi0g
ICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CisgICAgICAg
IG1lZGlhU2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0NoYW5nZWQoKTsKICAgICAgICAgdXBkYXRl
U2xlZXBEaXNhYmxpbmcoKTsKICAgICB9CiAKQEAgLTM3ODcsNyArMzc4Nyw3IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6YmVnaW5TY3J1YmJpbmcoKQogICAgICAgICB9CiAgICAgfQogCi0gICAg
bV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vz
c2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKKyAgICBt
ZWRpYVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Np
b246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7CiB9CiAKIHZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5kU2NydWJiaW5nKCkKQEAgLTM5NDEsNyArMzk0MSw3IEBA
IGRvdWJsZSBIVE1MTWVkaWFFbGVtZW50OjpwZXJjZW50TG9hZGVkKCkgY29uc3QKIAogdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllckRpZEFkZEF1ZGlvVHJhY2soQXVkaW9UcmFja1By
aXZhdGUmIHRyYWNrKQogewotICAgIGlmIChpc1BsYXlpbmcoKSAmJiAhbV9tZWRpYVNlc3Npb24t
PnBsYXliYWNrU3RhdGVDaGFuZ2VQZXJtaXR0ZWQoTWVkaWFQbGF5YmFja1N0YXRlOjpQbGF5aW5n
KSkgeworICAgIGlmIChpc1BsYXlpbmcoKSAmJiAhbWVkaWFTZXNzaW9uKCkucGxheWJhY2tTdGF0
ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CiAgICAgICAg
IHNjaGVkdWxlUmVqZWN0UGVuZGluZ1BsYXlQcm9taXNlcyhET01FeGNlcHRpb246OmNyZWF0ZShO
b3RBbGxvd2VkRXJyb3IpKTsKICAgICAgICAgcGF1c2VJbnRlcm5hbCgpOwogICAgICAgICBzZXRB
dXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZShBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6UHJl
dmVudGVkQXV0b3BsYXkpOwpAQCAtNDY4NSw3ICs0Njg1LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojpzb3VyY2VXYXNBZGRlZChIVE1MU291cmNlRWxlbWVudCYgc291cmNlKQogICAgIGlmICht
X25ldHdvcmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZKSB7CiAgICAgICAgIG1fbmV4dENoaWxkTm9k
ZVRvQ29uc2lkZXIgPSAmc291cmNlOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAg
IGlmIChtX21lZGlhU2Vzc2lvbi0+ZGF0YUxvYWRpbmdQZXJtaXR0ZWQoKSkKKyAgICAgICAgaWYg
KG1lZGlhU2Vzc2lvbigpLmRhdGFMb2FkaW5nUGVybWl0dGVkKCkpCiAjZW5kaWYKICAgICAgICAg
ICAgIHNlbGVjdE1lZGlhUmVzb3VyY2UoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDc4Myw3ICs0
NzgzLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjptZWRpYVBsYXllclRpbWVDaGFuZ2VkKCkK
ICAgICAgICAgICAgICAgICAvLyBjaGFuZ2VzIHBhdXNlZCB0byB0cnVlIGFuZCBmaXJlcyBhIHNp
bXBsZSBldmVudCBuYW1lZCBwYXVzZSBhdCB0aGUgbWVkaWEgZWxlbWVudC4KICAgICAgICAgICAg
ICAgICBtX3BhdXNlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgc2NoZWR1bGVFdmVudChldmVu
dE5hbWVzKCkucGF1c2VFdmVudCk7Ci0gICAgICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmNs
aWVudFdpbGxQYXVzZVBsYXliYWNrKCk7CisgICAgICAgICAgICAgICAgbWVkaWFTZXNzaW9uKCku
Y2xpZW50V2lsbFBhdXNlUGxheWJhY2soKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8v
IFF1ZXVlIGEgdGFzayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIGVuZGVkIGF0IHRoZSBt
ZWRpYSBlbGVtZW50LgogICAgICAgICAgICAgaWYgKCFtX3NlbnRFbmRFdmVudCkgewpAQCAtNDgz
Miw3ICs0ODMyLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjphZGRCZWhhdmlvclJlc3RyaWN0
aW9uc09uRW5kSWZOZWNlc3NhcnkoKQogICAgIGlmIChpc0Z1bGxzY3JlZW4oKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbV9tZWRpYVNlc3Npb24tPmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVk
aWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlVG9Db250cm9sQ29udHJvbHNNYW5h
Z2VyKTsKKyAgICBtZWRpYVNlc3Npb24oKS5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxl
bWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQ29udHJvbENvbnRyb2xzTWFuYWdlcik7
CiAgICAgbV9wbGF5YmFja0NvbnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zVGltZXIu
c3RvcCgpOwogICAgIG1fcGxheWJhY2tDb250cm9sc01hbmFnZXJCZWhhdmlvclJlc3RyaWN0aW9u
c1RpbWVyLnN0YXJ0T25lU2hvdChoaWRlTWVkaWFDb250cm9sc0FmdGVyRW5kZWREZWxheSk7CiB9
CkBAIC00ODYyLDcgKzQ4NjIsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNlZWtUb1BsYXli
YWNrUG9zaXRpb25FbmRlZFRpbWVyRmlyZWQoKQogICAgIGlmICghbV9pc1NjcnViYmluZ1JlbW90
ZWx5KQogICAgICAgICByZXR1cm47CiAKLSAgICBQbGF0Zm9ybU1lZGlhU2Vzc2lvbk1hbmFnZXI6
OnNoYXJlZE1hbmFnZXIoKS5zZXNzaW9uRGlkRW5kUmVtb3RlU2NydWJiaW5nKCptX21lZGlhU2Vz
c2lvbik7CisgICAgUGxhdGZvcm1NZWRpYVNlc3Npb25NYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCku
c2Vzc2lvbkRpZEVuZFJlbW90ZVNjcnViYmluZyhtZWRpYVNlc3Npb24oKSk7CiAgICAgbV9pc1Nj
cnViYmluZ1JlbW90ZWx5ID0gZmFsc2U7CiAgICAgbV9zZWVrVG9QbGF5YmFja1Bvc2l0aW9uRW5k
ZWRUaW1lci5zdG9wKCk7CiAjZW5kaWYKQEAgLTUwNDAsNyArNTA0MCw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFFbmdpbmVXYXNVcGRhdGVkKCkKICAgICB1cGRhdGVSZW5kZXJlcigp
OwogICAgIGVuZFByb2Nlc3NpbmdNZWRpYVBsYXllckNhbGxiYWNrKCk7CiAKLSAgICBtX21lZGlh
U2Vzc2lvbi0+bWVkaWFFbmdpbmVVcGRhdGVkKCk7CisgICAgbWVkaWFTZXNzaW9uKCkubWVkaWFF
bmdpbmVVcGRhdGVkKCk7CiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBKQogICAgIGlmICht
X3BsYXllciAmJiBtX21lZGlhS2V5cykKQEAgLTUxMjIsNyArNTEyMiw3IEBAIHZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKQogCiAgICAgdXBk
YXRlUmVuZGVyZXIoKTsKIAotICAgIGlmICghcGF1c2VkKCkgJiYgIW1fbWVkaWFTZXNzaW9uLT5w
bGF5YmFja1N0YXRlQ2hhbmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykp
IHsKKyAgICBpZiAoIXBhdXNlZCgpICYmICFtZWRpYVNlc3Npb24oKS5wbGF5YmFja1N0YXRlQ2hh
bmdlUGVybWl0dGVkKE1lZGlhUGxheWJhY2tTdGF0ZTo6UGxheWluZykpIHsKICAgICAgICAgc2No
ZWR1bGVSZWplY3RQZW5kaW5nUGxheVByb21pc2VzKERPTUV4Y2VwdGlvbjo6Y3JlYXRlKE5vdEFs
bG93ZWRFcnJvcikpOwogICAgICAgICBwYXVzZUludGVybmFsKCk7CiAgICAgICAgIHNldEF1dG9w
bGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlOjpQcmV2ZW50
ZWRBdXRvcGxheSk7CkBAIC01MjY3LDcgKzUyNjcsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6
OnN0b3BwZWREdWVUb0Vycm9ycygpIGNvbnN0CiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6cGF1
c2VkRm9yVXNlckludGVyYWN0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAobV9tZWRpYVNlc3Npb24t
PnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OkludGVycnVwdGVkKQorICAgIGlmICht
ZWRpYVNlc3Npb24oKS5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRl
ZCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC01MzM4LDcg
KzUzMzgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVwZGF0ZVBsYXlTdGF0ZSgpCiAKICAg
ICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJzaG91bGRCZVBsYXlpbmcgPSAiLCBzaG91bGRC
ZVBsYXlpbmcsICIsIHBsYXllclBhdXNlZCA9ICIsIHBsYXllclBhdXNlZCk7CiAKLSAgICBpZiAo
c2hvdWxkQmVQbGF5aW5nICYmIHBsYXllclBhdXNlZCAmJiBtX21lZGlhU2Vzc2lvbi0+cmVxdWly
ZXNGdWxsc2NyZWVuRm9yVmlkZW9QbGF5YmFjaygpICYmIChtX3dhaXRpbmdUb0VudGVyRnVsbHNj
cmVlbiB8fCAhaXNGdWxsc2NyZWVuKCkpKSB7CisgICAgaWYgKHNob3VsZEJlUGxheWluZyAmJiBw
bGF5ZXJQYXVzZWQgJiYgbWVkaWFTZXNzaW9uKCkucmVxdWlyZXNGdWxsc2NyZWVuRm9yVmlkZW9Q
bGF5YmFjaygpICYmIChtX3dhaXRpbmdUb0VudGVyRnVsbHNjcmVlbiB8fCAhaXNGdWxsc2NyZWVu
KCkpKSB7CiAgICAgICAgIGlmICghbV93YWl0aW5nVG9FbnRlckZ1bGxzY3JlZW4pCiAgICAgICAg
ICAgICBlbnRlckZ1bGxzY3JlZW4oKTsKIApAQCAtNTM1NCw3ICs1MzU0LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50Ojp1cGRhdGVQbGF5U3RhdGUoKQogICAgICAgICBpbnZhbGlkYXRlQ2FjaGVk
VGltZSgpOwogCiAgICAgICAgIGlmIChwbGF5ZXJQYXVzZWQpIHsKLSAgICAgICAgICAgIG1fbWVk
aWFTZXNzaW9uLT5jbGllbnRXaWxsQmVnaW5QbGF5YmFjaygpOworICAgICAgICAgICAgbWVkaWFT
ZXNzaW9uKCkuY2xpZW50V2lsbEJlZ2luUGxheWJhY2soKTsKIAogICAgICAgICAgICAgLy8gU2V0
IHJhdGUsIG11dGVkIGFuZCB2b2x1bWUgYmVmb3JlIGNhbGxpbmcgcGxheSBpbiBjYXNlIHRoZXkg
d2VyZSBzZXQgYmVmb3JlIHRoZSBtZWRpYSBlbmdpbmUgd2FzIHNldCB1cC4KICAgICAgICAgICAg
IC8vIFRoZSBtZWRpYSBlbmdpbmUgc2hvdWxkIGp1c3Qgc3Rhc2ggdGhlIHJhdGUsIG11dGVkIGFu
ZCB2b2x1bWUgdmFsdWVzIHNpbmNlIGl0IGlzbid0IGFscmVhZHkgcGxheWluZy4KQEAgLTU0MDEs
NyArNTQwMSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y2hlY2tGb3JBdWRpb0FuZFZpZGVv
KCkKIHsKICAgICBtX2hhc0V2ZXJIYWRBdWRpbyB8PSBoYXNBdWRpbygpOwogICAgIG1faGFzRXZl
ckhhZFZpZGVvIHw9IGhhc1ZpZGVvKCk7Ci0gICAgbV9tZWRpYVNlc3Npb24tPmNhblByb2R1Y2VB
dWRpb0NoYW5nZWQoKTsKKyAgICBtZWRpYVNlc3Npb24oKS5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2Vk
KCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UGxheWluZyhib29sIHBsYXlpbmcp
CkBAIC01NTI4LDcgKzU1MjgsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNsZWFyTWVkaWFQ
bGF5ZXIoKQogI2lmIEVOQUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgaWYgKGhh
c0V2ZW50TGlzdGVuZXJzKGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJp
bGl0eWNoYW5nZWRFdmVudCkgfHwgbV9yZW1vdGUtPmhhc0F2YWlsYWJpbGl0eUNhbGxiYWNrcygp
KSB7CiAgICAgICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSBm
YWxzZTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5TGlzdGVuZXJzKGZhbHNlKTsKKyAgICAgICAgaWYgKG1fbWVkaWFTZXNzaW9uKQorICAg
ICAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5
TGlzdGVuZXJzKGZhbHNlKTsKIAogICAgICAgICAvLyBTZW5kIGFuIGF2YWlsYWJpbGl0eSBldmVu
dCBpbiBjYXNlIHNjcmlwdHMgd2FudCB0byBoaWRlIHRoZSBwaWNrZXIgd2hlbiB0aGUgZWxlbWVu
dAogICAgICAgICAvLyBkb2Vzbid0IHN1cHBvcnQgcGxheWJhY2sgdG8gYSB0YXJnZXQuCkBAIC01
NTU5LDggKzU1NjAsMTAgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpjbGVhck1lZGlhUGxheWVy
KCkKICAgICBpZiAobV90ZXh0VHJhY2tzKQogICAgICAgICBjb25maWd1cmVUZXh0VHJhY2tEaXNw
bGF5KCk7CiAKLSAgICBtX21lZGlhU2Vzc2lvbi0+Y2xpZW50Q2hhcmFjdGVyaXN0aWNzQ2hhbmdl
ZCgpOwotICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNlQXVkaW9DaGFuZ2VkKCk7CisgICAg
aWYgKG1fbWVkaWFTZXNzaW9uKSB7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jbGllbnRDaGFy
YWN0ZXJpc3RpY3NDaGFuZ2VkKCk7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNl
QXVkaW9DaGFuZ2VkKCk7CisgICAgfQogCiAgICAgbV9yZXNvdXJjZVNlbGVjdGlvblRhc2tRdWV1
ZS5jYW5jZWxBbGxUYXNrcygpOwogCkBAIC01NTg3LDcgKzU1OTAsOCBAQCB2b2lkIEhUTUxNZWRp
YUVsZW1lbnQ6OnN0b3BXaXRob3V0RGVzdHJveWluZ01lZGlhUGxheWVyKCkKICAgICAvLyBTdG9w
IHRoZSBwbGF5YmFjayB3aXRob3V0IGdlbmVyYXRpbmcgZXZlbnRzCiAgICAgc2V0UGxheWluZyhm
YWxzZSk7CiAgICAgcGF1c2VBbmRVcGRhdGVQbGF5U3RhdGVJbW1lZGlhdGVseSgpOwotICAgIG1f
bWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsQmVET01TdXNwZW5kZWQoKTsKKyAgICBpZiAobV9tZWRp
YVNlc3Npb24pCisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jbGllbnRXaWxsQmVET01TdXNwZW5k
ZWQoKTsKIAogICAgIHNldEF1dG9wbGF5RXZlbnRQbGF5YmFja1N0YXRlKEF1dG9wbGF5RXZlbnRQ
bGF5YmFja1N0YXRlOjpOb25lKTsKIApAQCAtNTY0Nyw3ICs1NjUxLDggQEAgdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjpzdG9wKCkKICAgICAvLyBsb2FkZWQgYW5kIGNhbGxpbmcgaXQgYWdhaW4gd29u
J3QgY2F1c2UgYW55IHByb2JsZW1zLgogICAgIGNsZWFyTWVkaWFQbGF5ZXIoKTsKIAotICAgIG1f
bWVkaWFTZXNzaW9uLT5zdG9wU2Vzc2lvbigpOworICAgIGlmIChtX21lZGlhU2Vzc2lvbikKKyAg
ICAgICAgbV9tZWRpYVNlc3Npb24tPnN0b3BTZXNzaW9uKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlh
RWxlbWVudDo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uIHJlYXNvbikKQEAgLTU2NjEsNyAr
NTY2Niw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c3VzcGVuZChSZWFzb25Gb3JTdXNwZW5z
aW9uIHJlYXNvbikKICAgICBjYXNlIFJlYXNvbkZvclN1c3BlbnNpb246OkJhY2tGb3J3YXJkQ2Fj
aGU6CiAgICAgICAgIHN0b3BXaXRob3V0RGVzdHJveWluZ01lZGlhUGxheWVyKCk7CiAgICAgICAg
IHNldEJ1ZmZlcmluZ1BvbGljeShCdWZmZXJpbmdQb2xpY3k6Ok1ha2VSZXNvdXJjZXNQdXJnZWFi
bGUpOwotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRp
YUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlUGFnZUNvbnNlbnRUb1Jlc3VtZU1lZGlhKTsKKyAgICAg
ICAgaWYgKG1fbWVkaWFTZXNzaW9uKQorICAgICAgICAgICAgbV9tZWRpYVNlc3Npb24tPmFkZEJl
aGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50
VG9SZXN1bWVNZWRpYSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUmVhc29uRm9yU3VzcGVu
c2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRlZDoKICAgICBjYXNlIFJlYXNvbkZvclN1c3BlbnNpb246
OkphdmFTY3JpcHREZWJ1Z2dlclBhdXNlZDoKQEAgLTU2NzcsMTMgKzU2ODMsMTUgQEAgdm9pZCBI
VE1MTWVkaWFFbGVtZW50OjpyZXN1bWUoKQogCiAgICAgc2V0SW5BY3RpdmVEb2N1bWVudCh0cnVl
KTsKIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24tPnBhZ2VBbGxvd3NQbGF5YmFja0FmdGVyUmVz
dW1pbmcoKSkKKyAgICBpZiAobV9tZWRpYVNlc3Npb24gJiYgIW1fbWVkaWFTZXNzaW9uLT5wYWdl
QWxsb3dzUGxheWJhY2tBZnRlclJlc3VtaW5nKCkpCiAgICAgICAgIGRvY3VtZW50KCkuYWRkTWVk
aWFDYW5TdGFydExpc3RlbmVyKCp0aGlzKTsKICAgICBlbHNlCiAgICAgICAgIHNldFBhdXNlZElu
dGVybmFsKGZhbHNlKTsKIAotICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3Ry
aWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVQYWdlQ29uc2VudFRvUmVzdW1lTWVk
aWEpOwotICAgIG1fbWVkaWFTZXNzaW9uLT51cGRhdGVCdWZmZXJpbmdQb2xpY3koKTsKKyAgICBp
ZiAobV9tZWRpYVNlc3Npb24pIHsKKyAgICAgICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2
aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBhZ2VDb25zZW50VG9S
ZXN1bWVNZWRpYSk7CisgICAgICAgIG1fbWVkaWFTZXNzaW9uLT51cGRhdGVCdWZmZXJpbmdQb2xp
Y3koKTsKKyAgICB9CiAKICAgICBpZiAobV9lcnJvciAmJiBtX2Vycm9yLT5jb2RlKCkgPT0gTWVk
aWFFcnJvcjo6TUVESUFfRVJSX0FCT1JURUQgJiYgIW1fcmVzdW1lVGFza1F1ZXVlLmhhc1BlbmRp
bmdUYXNrKCkpIHsKICAgICAgICAgLy8gUmVzdGFydCB0aGUgbG9hZCBpZiBpdCB3YXMgYWJvcnRl
ZCBpbiB0aGUgbWlkZGxlIGJ5IG1vdmluZyB0aGUgZG9jdW1lbnQgdG8gdGhlIGJhY2svZm9yd2Fy
ZCBjYWNoZS4KQEAgLTU3MjQsNyArNTczMiw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dmlz
aWJpbGl0eVN0YXRlQ2hhbmdlZCgpCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAidmlz
aWJsZSA9ICIsICFtX2VsZW1lbnRJc0hpZGRlbik7CiAKICAgICB1cGRhdGVTbGVlcERpc2FibGlu
ZygpOwotICAgIG1fbWVkaWFTZXNzaW9uLT52aXNpYmlsaXR5Q2hhbmdlZCgpOworICAgIG1lZGlh
U2Vzc2lvbigpLnZpc2liaWxpdHlDaGFuZ2VkKCk7CiAgICAgaWYgKG1fcGxheWVyKQogICAgICAg
ICBtX3BsYXllci0+c2V0VmlzaWJsZSghbV9lbGVtZW50SXNIaWRkZW4pOwogCkBAIC01NzMyLDEw
ICs1NzQwLDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dmlzaWJpbGl0eVN0YXRlQ2hhbmdl
ZCgpCiAgICAgaWYgKCFpc1BsYXlpbmdBdWRpbykgewogICAgICAgICBpZiAobV9lbGVtZW50SXNI
aWRkZW4pIHsKICAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklFUiwgIlN1c3BlbmRp
bmcgcGxheWJhY2sgYWZ0ZXIgZ29pbmcgdG8gdGhlIGJhY2tncm91bmQiKTsKLSAgICAgICAgICAg
IG1fbWVkaWFTZXNzaW9uLT5iZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6
RW50ZXJpbmdCYWNrZ3JvdW5kKTsKKyAgICAgICAgICAgIG1lZGlhU2Vzc2lvbigpLmJlZ2luSW50
ZXJydXB0aW9uKFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpFbnRlcmluZ0JhY2tncm91bmQpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiUmVz
dW1pbmcgcGxheWJhY2sgYWZ0ZXIgZW50ZXJpbmcgZm9yZWdyb3VuZCIpOwotICAgICAgICAgICAg
bV9tZWRpYVNlc3Npb24tPmVuZEludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6TWF5
UmVzdW1lUGxheWluZyk7CisgICAgICAgICAgICBtZWRpYVNlc3Npb24oKS5lbmRJbnRlcnJ1cHRp
b24oUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOwogICAgICAgICB9CiAg
ICAgfQogfQpAQCAtNTc2OCwxMiArNTc3NiwxMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Ondl
YmtpdFNob3dQbGF5YmFja1RhcmdldFBpY2tlcigpCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElG
SUVSKTsKICAgICBpZiAocHJvY2Vzc2luZ1VzZXJHZXN0dXJlRm9yTWVkaWEoKSkKICAgICAgICAg
cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUoKTsKLSAgICBt
X21lZGlhU2Vzc2lvbi0+c2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCk7CisgICAgbWVkaWFTZXNz
aW9uKCkuc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6d2lyZWxlc3NSb3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2UoKQogewotICAgIGJvb2wgaGFz
VGFyZ2V0cyA9IG1fbWVkaWFTZXNzaW9uLT5oYXNXaXJlbGVzc1BsYXliYWNrVGFyZ2V0cygpOwor
ICAgIGJvb2wgaGFzVGFyZ2V0cyA9IG1lZGlhU2Vzc2lvbigpLmhhc1dpcmVsZXNzUGxheWJhY2tU
YXJnZXRzKCk7CiAgICAgbV9yZW1vdGUtPmF2YWlsYWJpbGl0eUNoYW5nZWQoaGFzVGFyZ2V0cyk7
CiAKICAgICBlbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlDaGFuZ2VkRXZlbnQoKTsK
QEAgLTU3OTcsOCArNTgwNSw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0SXNQbGF5aW5n
VG9XaXJlbGVzc1RhcmdldChib29sIGlzUGxheWluZ1RvV2lyZWxlc3NUYXJnCiAgICAgICAgIG1f
cmVtb3RlLT5pc1BsYXlpbmdUb1JlbW90ZVRhcmdldENoYW5nZWQobV9pc1BsYXlpbmdUb1dpcmVs
ZXNzVGFyZ2V0KTsKICAgICAgICAgQUxXQVlTX0xPRyhsb2dTaXRlSWRlbnRpZmllciwgbV9pc1Bs
YXlpbmdUb1dpcmVsZXNzVGFyZ2V0KTsKICAgICAgICAgY29uZmlndXJlTWVkaWFDb250cm9scygp
OwotICAgICAgICBtX21lZGlhU2Vzc2lvbi0+aXNQbGF5aW5nVG9XaXJlbGVzc1BsYXliYWNrVGFy
Z2V0Q2hhbmdlZChtX2lzUGxheWluZ1RvV2lyZWxlc3NUYXJnZXQpOwotICAgICAgICBtX21lZGlh
U2Vzc2lvbi0+Y2FuUHJvZHVjZUF1ZGlvQ2hhbmdlZCgpOworICAgICAgICBtZWRpYVNlc3Npb24o
KS5pc1BsYXlpbmdUb1dpcmVsZXNzUGxheWJhY2tUYXJnZXRDaGFuZ2VkKG1faXNQbGF5aW5nVG9X
aXJlbGVzc1RhcmdldCk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLmNhblByb2R1Y2VBdWRpb0No
YW5nZWQoKTsKICAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7CiAgICAgICAgIHVw
ZGF0ZVNsZWVwRGlzYWJsaW5nKCk7CiAKQEAgLTU4NDYsNyArNTg1NCw3IEBAIGJvb2wgSFRNTE1l
ZGlhRWxlbWVudDo6YWRkRXZlbnRMaXN0ZW5lcihjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUs
IFJlZjxFdmVudExpCiAKICAgICBpZiAoaXNGaXJzdEF2YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5l
cikgewogICAgICAgICBtX2hhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0g
dHJ1ZTsKLSAgICAgICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5TGlzdGVuZXJzKHRydWUpOworICAgICAgICBtZWRpYVNlc3Npb24oKS5zZXRIYXNQbGF5
YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyh0cnVlKTsKICAgICB9CiAKICAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIsICInd2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHlj
aGFuZ2VkJyIpOwpAQCAtNTg3Miw3ICs1ODgwLDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojpy
ZW1vdmVFdmVudExpc3RlbmVyKGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXMK
ICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJyZW1vdmVkIGxhc3QgbGlzdGVuZXIgPSAi
LCBkaWRSZW1vdmVMYXN0QXZhaWxhYmlsaXR5Q2hhbmdlZExpc3RlbmVyKTsKICAgICBpZiAoZGlk
UmVtb3ZlTGFzdEF2YWlsYWJpbGl0eUNoYW5nZWRMaXN0ZW5lcikgewogICAgICAgICBtX2hhc1Bs
YXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzID0gZmFsc2U7Ci0gICAgICAgIG1fbWVk
aWFTZXNzaW9uLT5zZXRIYXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycyhmYWxz
ZSk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxhYmls
aXR5TGlzdGVuZXJzKGZhbHNlKTsKICAgICAgICAgc2NoZWR1bGVVcGRhdGVNZWRpYVN0YXRlKCk7
CiAgICAgfQogCkBAIC01ODgxLDcgKzU4ODksNyBAQCBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OnJl
bW92ZUV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpcwog
CiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVucXVldWVQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0
eUNoYW5nZWRFdmVudCgpCiB7Ci0gICAgYm9vbCBoYXNUYXJnZXRzID0gbV9tZWRpYVNlc3Npb24t
Pmhhc1dpcmVsZXNzUGxheWJhY2tUYXJnZXRzKCk7CisgICAgYm9vbCBoYXNUYXJnZXRzID0gbWVk
aWFTZXNzaW9uKCkuaGFzV2lyZWxlc3NQbGF5YmFja1RhcmdldHMoKTsKICAgICBBTFdBWVNfTE9H
KExPR0lERU5USUZJRVIsICJoYXNUYXJnZXRzID0gIiwgaGFzVGFyZ2V0cyk7CiAgICAgYXV0byBl
dmVudCA9IFdlYktpdFBsYXliYWNrVGFyZ2V0QXZhaWxhYmlsaXR5RXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2Via2l0cGxheWJhY2t0YXJnZXRhdmFpbGFiaWxpdHljaGFuZ2VkRXZlbnQsIGhh
c1RhcmdldHMpOwogICAgIGV2ZW50LT5zZXRUYXJnZXQodGhpcyk7CkBAIC01OTIwLDcgKzU5Mjgs
NyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW90ZUhhc0F2YWlsYWJpbGl0eUNhbGxiYWNr
c0NoYW5nZWQoKQogCiAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiaGFzTGlzdGVuZXJz
OiAiLCBoYXNMaXN0ZW5lcnMpOwogICAgIG1faGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlM
aXN0ZW5lcnMgPSBoYXNMaXN0ZW5lcnM7Ci0gICAgbV9tZWRpYVNlc3Npb24tPnNldEhhc1BsYXli
YWNrVGFyZ2V0QXZhaWxhYmlsaXR5TGlzdGVuZXJzKGhhc0xpc3RlbmVycyk7CisgICAgbWVkaWFT
ZXNzaW9uKCkuc2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMoaGFzTGlz
dGVuZXJzKTsKICAgICBzY2hlZHVsZVVwZGF0ZU1lZGlhU3RhdGUoKTsKIH0KICNlbmRpZiAvLyBF
TkFCTEUoV0lSRUxFU1NfUExBWUJBQ0tfVEFSR0VUKQpAQCAtNjA3MSw3ICs2MDc5LDcgQEAgdm9p
ZCBIVE1MTWVkaWFFbGVtZW50OjpleGl0RnVsbHNjcmVlbigpCiAgICAgaWYgKCFkb2N1bWVudCgp
LnBhZ2UoKSB8fCAhaXM8SFRNTFZpZGVvRWxlbWVudD4oKnRoaXMpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAoIXBhdXNlZCgpICYmIG1fbWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxzY3Jl
ZW5Gb3JWaWRlb1BsYXliYWNrKCkpIHsKKyAgICBpZiAoIXBhdXNlZCgpICYmIG1lZGlhU2Vzc2lv
bigpLnJlcXVpcmVzRnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSkgewogICAgICAgICBpZiAo
IWRvY3VtZW50KCkuc2V0dGluZ3MoKS5hbGxvd3NJbmxpbmVNZWRpYVBsYXliYWNrQWZ0ZXJGdWxs
c2NyZWVuKCkgfHwgaXNWaWRlb1Rvb1NtYWxsRm9ySW5saW5lUGxheWJhY2soKSkKICAgICAgICAg
ICAgIHBhdXNlSW50ZXJuYWwoKTsKICAgICAgICAgZWxzZSB7CkBAIC02NTA2LDcgKzY1MTQsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByaXZhdGVCcm93c2luZ1N0YXRlRGlkQ2hhbmdlKFBB
TDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6c2hvdWxkRm9y
Y2VDb250cm9sc0Rpc3BsYXkoKSBjb25zdAogewogICAgIC8vIEFsd2F5cyBjcmVhdGUgY29udHJv
bHMgZm9yIGF1dG9wbGF5IHZpZGVvIHRoYXQgcmVxdWlyZXMgdXNlciBnZXN0dXJlIGR1ZSB0byBi
ZWluZyBpbiBsb3cgcG93ZXIgbW9kZS4KLSAgICByZXR1cm4gaXNWaWRlbygpICYmIGF1dG9wbGF5
KCkgJiYgbV9tZWRpYVNlc3Npb24tPmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50
U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9EdWVUb0xvd1Bvd2VyTW9kZSk7Cisg
ICAgcmV0dXJuIGlzVmlkZW8oKSAmJiBhdXRvcGxheSgpICYmIG1lZGlhU2Vzc2lvbigpLmhhc0Jl
aGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJl
Rm9yVmlkZW9EdWVUb0xvd1Bvd2VyTW9kZSk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
Y29uZmlndXJlTWVkaWFDb250cm9scygpCkBAIC02NTE0LDcgKzY1MjIsNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OmNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKQogICAgIGJvb2wgcmVxdWlyZUNv
bnRyb2xzID0gY29udHJvbHMoKTsKIAogICAgIC8vIEFsd2F5cyBjcmVhdGUgY29udHJvbHMgZm9y
IHZpZGVvIHdoZW4gZnVsbHNjcmVlbiBwbGF5YmFjayBpcyByZXF1aXJlZC4KLSAgICBpZiAoaXNW
aWRlbygpICYmIG1fbWVkaWFTZXNzaW9uLT5yZXF1aXJlc0Z1bGxzY3JlZW5Gb3JWaWRlb1BsYXli
YWNrKCkpCisgICAgaWYgKGlzVmlkZW8oKSAmJiBtZWRpYVNlc3Npb24oKS5yZXF1aXJlc0Z1bGxz
Y3JlZW5Gb3JWaWRlb1BsYXliYWNrKCkpCiAgICAgICAgIHJlcXVpcmVDb250cm9scyA9IHRydWU7
CiAKICAgICBpZiAoc2hvdWxkRm9yY2VDb250cm9sc0Rpc3BsYXkoKSkKQEAgLTY2MzUsNyArNjY0
Myw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFQbGF5ZXIoKQogI2lmIEVO
QUJMRShXSVJFTEVTU19QTEFZQkFDS19UQVJHRVQpCiAgICAgaWYgKGhhc0V2ZW50TGlzdGVuZXJz
KGV2ZW50TmFtZXMoKS53ZWJraXRwbGF5YmFja3RhcmdldGF2YWlsYWJpbGl0eWNoYW5nZWRFdmVu
dCkgfHwgbV9yZW1vdGUtPmhhc0F2YWlsYWJpbGl0eUNhbGxiYWNrcygpKSB7CiAgICAgICAgIG1f
aGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMgPSB0cnVlOwotICAgICAgICBt
X21lZGlhU2Vzc2lvbi0+c2V0SGFzUGxheWJhY2tUYXJnZXRBdmFpbGFiaWxpdHlMaXN0ZW5lcnMo
dHJ1ZSk7CisgICAgICAgIG1lZGlhU2Vzc2lvbigpLnNldEhhc1BsYXliYWNrVGFyZ2V0QXZhaWxh
YmlsaXR5TGlzdGVuZXJzKHRydWUpOwogICAgICAgICBlbnF1ZXVlUGxheWJhY2tUYXJnZXRBdmFp
bGFiaWxpdHlDaGFuZ2VkRXZlbnQoKTsgLy8gRW5zdXJlIHRoZSBldmVudCBsaXN0ZW5lciBnZXRz
IGF0IGxlYXN0IG9uZSBldmVudC4KICAgICB9CiAjZW5kaWYKQEAgLTY5NDksNyArNjk1Nyw3IEBA
IGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFQbGF5ZXJJc0Z1bGxzY3JlZW4oKSBjb25zdAog
CiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVySXNGdWxsc2NyZWVuUGVybWl0dGVk
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPmZ1bGxzY3JlZW5QZXJtaXR0
ZWQoKTsKKyAgICByZXR1cm4gbWVkaWFTZXNzaW9uKCkuZnVsbHNjcmVlblBlcm1pdHRlZCgpOwog
fQogCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Om1lZGlhUGxheWVySXNWaWRlbygpIGNvbnN0CkBA
IC03MTU3LDcgKzcxNjUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnJlbW92ZUJlaGF2aW9y
UmVzdHJpY3Rpb25zQWZ0ZXJGaXJzdFVzZXJHZXN0dXJlKE1lZGlhRWxlbQogCiAgICAgbV9yZW1v
dmVkQmVoYXZpb3JSZXN0cmljdGlvbnNBZnRlckZpcnN0VXNlckdlc3R1cmUgPSB0cnVlOwogCi0g
ICAgbV9tZWRpYVNlc3Npb24tPnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24ocmVzdHJpY3Rpb25z
VG9SZW1vdmUpOworICAgIG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24o
cmVzdHJpY3Rpb25zVG9SZW1vdmUpOwogICAgIGRvY3VtZW50KCkudG9wRG9jdW1lbnQoKS5ub3Rl
VXNlckludGVyYWN0aW9uV2l0aE1lZGlhRWxlbWVudCgpOwogfQogCkBAIC03MTY5LDE0ICs3MTc3
LDE0IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlUmF0ZUNoYW5nZVJlc3RyaWN0aW9u
cygpCiAKICAgICBjb25zdCBhdXRvJiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50
KCk7CiAgICAgaWYgKHRvcERvY3VtZW50LnZpZGVvUGxheWJhY2tSZXF1aXJlc1VzZXJHZXN0dXJl
KCkpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlh
RWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvUmF0ZUNoYW5nZSk7Cisg
ICAgICAgIG1lZGlhU2Vzc2lvbigpLmFkZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50
U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9SYXRlQ2hhbmdlKTsKICAgICBlbHNl
Ci0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlh
RWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZUZvclZpZGVvUmF0ZUNoYW5nZSk7Cisg
ICAgICAgIG1lZGlhU2Vzc2lvbigpLnJlbW92ZUJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVt
ZW50U2Vzc2lvbjo6UmVxdWlyZVVzZXJHZXN0dXJlRm9yVmlkZW9SYXRlQ2hhbmdlKTsKIAogICAg
IGlmICh0b3BEb2N1bWVudC5hdWRpb1BsYXliYWNrUmVxdWlyZXNVc2VyR2VzdHVyZSgpKQotICAg
ICAgICBtX21lZGlhU2Vzc2lvbi0+YWRkQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRT
ZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVDaGFuZ2UpOworICAgICAgICBt
ZWRpYVNlc3Npb24oKS5hZGRCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246
OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvUmF0ZUNoYW5nZSk7CiAgICAgZWxzZQotICAgICAg
ICBtX21lZGlhU2Vzc2lvbi0+cmVtb3ZlQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRT
ZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVGb3JBdWRpb1JhdGVDaGFuZ2UpOworICAgICAgICBt
ZWRpYVNlc3Npb24oKS5yZW1vdmVCZWhhdmlvclJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Np
b246OlJlcXVpcmVVc2VyR2VzdHVyZUZvckF1ZGlvUmF0ZUNoYW5nZSk7CiB9CiAKIFJlZlB0cjxW
aWRlb1BsYXliYWNrUXVhbGl0eT4gSFRNTE1lZGlhRWxlbWVudDo6Z2V0VmlkZW9QbGF5YmFja1F1
YWxpdHkoKQpAQCAtNzU0MSw3ICs3NTQ5LDcgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojppc1N1
c3BlbmRlZCgpIGNvbnN0CiAjaWYgRU5BQkxFKE1FRElBX1NPVVJDRSkKIHNpemVfdCBIVE1MTWVk
aWFFbGVtZW50OjptYXhpbXVtU291cmNlQnVmZmVyU2l6ZShjb25zdCBTb3VyY2VCdWZmZXImIGJ1
ZmZlcikgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZWRpYVNlc3Npb24tPm1heGltdW1NZWRpYVNv
dXJjZUJ1ZmZlclNpemUoYnVmZmVyKTsKKyAgICByZXR1cm4gbWVkaWFTZXNzaW9uKCkubWF4aW11
bU1lZGlhU291cmNlQnVmZmVyU2l6ZShidWZmZXIpOwogfQogI2VuZGlmCiAKQEAgLTc3NDksNyAr
Nzc1Nyw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6dXBkYXRlTWVkaWFTdGF0ZSgpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIG1fbWVkaWFTdGF0ZSA9IHN0YXRlOwotICAgIG1fbWVkaWFTZXNz
aW9uLT5tZWRpYVN0YXRlRGlkQ2hhbmdlKG1fbWVkaWFTdGF0ZSk7CisgICAgbWVkaWFTZXNzaW9u
KCkubWVkaWFTdGF0ZURpZENoYW5nZShtX21lZGlhU3RhdGUpOwogCiAgICAgZG9jdW1lbnQoKS51
cGRhdGVJc1BsYXlpbmdNZWRpYSgpOwogfQpAQCAtNzc2NywxMSArNzc3NSwxMSBAQCBNZWRpYVBy
b2R1Y2VyOjpNZWRpYVN0YXRlRmxhZ3MgSFRNTE1lZGlhRWxlbWVudDo6bWVkaWFTdGF0ZSgpIGNv
bnN0CiAjaWYgRU5BQkxFKFdJUkVMRVNTX1BMQVlCQUNLX1RBUkdFVCkKICAgICBpZiAobV9oYXNQ
bGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVycykgewogICAgICAgICBzdGF0ZSB8PSBI
YXNQbGF5YmFja1RhcmdldEF2YWlsYWJpbGl0eUxpc3RlbmVyOwotICAgICAgICBpZiAoIW1fbWVk
aWFTZXNzaW9uLT53aXJlbGVzc1ZpZGVvUGxheWJhY2tEaXNhYmxlZCgpKQorICAgICAgICBpZiAo
IW1lZGlhU2Vzc2lvbigpLndpcmVsZXNzVmlkZW9QbGF5YmFja0Rpc2FibGVkKCkpCiAgICAgICAg
ICAgICBzdGF0ZSB8PSBSZXF1aXJlc1BsYXliYWNrVGFyZ2V0TW9uaXRvcmluZzsKICAgICB9CiAK
LSAgICBib29sIHJlcXVpcmVVc2VyR2VzdHVyZSA9IG1fbWVkaWFTZXNzaW9uLT5oYXNCZWhhdmlv
clJlc3RyaWN0aW9uKE1lZGlhRWxlbWVudFNlc3Npb246OlJlcXVpcmVVc2VyR2VzdHVyZVRvQXV0
b3BsYXlUb0V4dGVybmFsRGV2aWNlKTsKKyAgICBib29sIHJlcXVpcmVVc2VyR2VzdHVyZSA9IG1l
ZGlhU2Vzc2lvbigpLmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6
UmVxdWlyZVVzZXJHZXN0dXJlVG9BdXRvcGxheVRvRXh0ZXJuYWxEZXZpY2UpOwogICAgIGlmICht
X3JlYWR5U3RhdGUgPj0gSEFWRV9NRVRBREFUQSAmJiAhcmVxdWlyZVVzZXJHZXN0dXJlICYmICFt
X2ZhaWxlZFRvUGxheVRvV2lyZWxlc3NUYXJnZXQpCiAgICAgICAgIHN0YXRlIHw9IEV4dGVybmFs
RGV2aWNlQXV0b1BsYXlDYW5kaWRhdGU7CiAKQEAgLTc5MDUsNyArNzkxMyw3IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6cHVyZ2VCdWZmZXJlZERhdGFJZlBvc3NpYmxlKCkKIHsKICAgICBBTFdB
WVNfTE9HKExPR0lERU5USUZJRVIpOwogCi0gICAgaWYgKCFNZW1vcnlQcmVzc3VyZUhhbmRsZXI6
OnNpbmdsZXRvbigpLmlzVW5kZXJNZW1vcnlQcmVzc3VyZSgpICYmIG1fbWVkaWFTZXNzaW9uLT5w
cmVmZXJyZWRCdWZmZXJpbmdQb2xpY3koKSA9PSBCdWZmZXJpbmdQb2xpY3k6OkRlZmF1bHQpCisg
ICAgaWYgKCFNZW1vcnlQcmVzc3VyZUhhbmRsZXI6OnNpbmdsZXRvbigpLmlzVW5kZXJNZW1vcnlQ
cmVzc3VyZSgpICYmIG1lZGlhU2Vzc2lvbigpLnByZWZlcnJlZEJ1ZmZlcmluZ1BvbGljeSgpID09
IEJ1ZmZlcmluZ1BvbGljeTo6RGVmYXVsdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGlz
UGxheWluZ1RvRXh0ZXJuYWxUYXJnZXQoKSkgewpAQCAtNzkyNiw3ICs3OTM0LDcgQEAgYm9vbCBI
VE1MTWVkaWFFbGVtZW50OjpjYW5TYXZlTWVkaWFEYXRhKCkgY29uc3QKIAogdm9pZCBIVE1MTWVk
aWFFbGVtZW50OjphbGxvd3NNZWRpYURvY3VtZW50SW5saW5lUGxheWJhY2tDaGFuZ2VkKCkKIHsK
LSAgICBpZiAocG90ZW50aWFsbHlQbGF5aW5nKCkgJiYgbV9tZWRpYVNlc3Npb24tPnJlcXVpcmVz
RnVsbHNjcmVlbkZvclZpZGVvUGxheWJhY2soKSAmJiAhaXNGdWxsc2NyZWVuKCkpCisgICAgaWYg
KHBvdGVudGlhbGx5UGxheWluZygpICYmIG1lZGlhU2Vzc2lvbigpLnJlcXVpcmVzRnVsbHNjcmVl
bkZvclZpZGVvUGxheWJhY2soKSAmJiAhaXNGdWxsc2NyZWVuKCkpCiAgICAgICAgIGVudGVyRnVs
bHNjcmVlbigpOwogfQogCkBAIC03OTQ0LDcgKzc5NTIsNyBAQCBib29sIEhUTUxNZWRpYUVsZW1l
bnQ6OmlzVmlkZW9Ub29TbWFsbEZvcklubGluZVBsYXliYWNrKCkKIHZvaWQgSFRNTE1lZGlhRWxl
bWVudDo6aXNWaXNpYmxlSW5WaWV3cG9ydENoYW5nZWQoKQogewogICAgIG1fdmlzaWJpbGl0eUNo
YW5nZVRhc2tRdWV1ZS5lbnF1ZXVlVGFzayhbdGhpc10gewotICAgICAgICBtX21lZGlhU2Vzc2lv
bi0+aXNWaXNpYmxlSW5WaWV3cG9ydENoYW5nZWQoKTsKKyAgICAgICAgbWVkaWFTZXNzaW9uKCku
aXNWaXNpYmxlSW5WaWV3cG9ydENoYW5nZWQoKTsKICAgICAgICAgdXBkYXRlU2hvdWxkQXV0b3Bs
YXkoKTsKICAgICAgICAgc2NoZWR1bGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclVwZGF0ZSgpOwog
ICAgIH0pOwpAQCAtNzk1NSwyMiArNzk2MywyMiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVw
ZGF0ZVNob3VsZEF1dG9wbGF5KCkKICAgICBpZiAoIWF1dG9wbGF5KCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICghbV9tZWRpYVNlc3Npb24tPmhhc0JlaGF2aW9yUmVzdHJpY3Rpb24oTWVk
aWFFbGVtZW50U2Vzc2lvbjo6SW52aXNpYmxlQXV0b3BsYXlOb3RQZXJtaXR0ZWQpKQorICAgIGlm
ICghbWVkaWFTZXNzaW9uKCkuaGFzQmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNz
aW9uOjpJbnZpc2libGVBdXRvcGxheU5vdFBlcm1pdHRlZCkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGJvb2wgY2FuQXV0b3BsYXkgPSBtZWRpYVNlc3Npb24oKS5hdXRvcGxheVBlcm1pdHRlZCgp
OwogICAgIGlmIChjYW5BdXRvcGxheQotICAgICAgICAmJiBtX21lZGlhU2Vzc2lvbi0+c3RhdGUo
KSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQKLSAgICAgICAgJiYgbV9tZWRp
YVNlc3Npb24tPmludGVycnVwdGlvblR5cGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW52
aXNpYmxlQXV0b3BsYXkpCi0gICAgICAgIG1fbWVkaWFTZXNzaW9uLT5lbmRJbnRlcnJ1cHRpb24o
UGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOworICAgICAgICAmJiBtZWRp
YVNlc3Npb24oKS5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZAor
ICAgICAgICAmJiBtZWRpYVNlc3Npb24oKS5pbnRlcnJ1cHRpb25UeXBlKCkgPT0gUGxhdGZvcm1N
ZWRpYVNlc3Npb246OkludmlzaWJsZUF1dG9wbGF5KQorICAgICAgICBtZWRpYVNlc3Npb24oKS5l
bmRJbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246Ok1heVJlc3VtZVBsYXlpbmcpOwog
ICAgIGVsc2UgaWYgKCFjYW5BdXRvcGxheQotICAgICAgICAmJiBtX21lZGlhU2Vzc2lvbi0+c3Rh
dGUoKSAhPSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW50ZXJydXB0ZWQpCi0gICAgICAgIG1fbWVk
aWFTZXNzaW9uLT5iZWdpbkludGVycnVwdGlvbihQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6SW52aXNp
YmxlQXV0b3BsYXkpOworICAgICAgICAmJiBtZWRpYVNlc3Npb24oKS5zdGF0ZSgpICE9IFBsYXRm
b3JtTWVkaWFTZXNzaW9uOjpJbnRlcnJ1cHRlZCkKKyAgICAgICAgbWVkaWFTZXNzaW9uKCkuYmVn
aW5JbnRlcnJ1cHRpb24oUGxhdGZvcm1NZWRpYVNlc3Npb246OkludmlzaWJsZUF1dG9wbGF5KTsK
IH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojp1cGRhdGVTaG91bGRQbGF5KCkKIHsKLSAgICBp
ZiAoIXBhdXNlZCgpICYmICFtX21lZGlhU2Vzc2lvbi0+cGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1p
dHRlZChNZWRpYVBsYXliYWNrU3RhdGU6OlBsYXlpbmcpKSB7CisgICAgaWYgKCFwYXVzZWQoKSAm
JiAhbWVkaWFTZXNzaW9uKCkucGxheWJhY2tTdGF0ZUNoYW5nZVBlcm1pdHRlZChNZWRpYVBsYXli
YWNrU3RhdGU6OlBsYXlpbmcpKSB7CiAgICAgICAgIHNjaGVkdWxlUmVqZWN0UGVuZGluZ1BsYXlQ
cm9taXNlcyhET01FeGNlcHRpb246OmNyZWF0ZShOb3RBbGxvd2VkRXJyb3IpKTsKICAgICAgICAg
cGF1c2VJbnRlcm5hbCgpOwogICAgICAgICBzZXRBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZShB
dXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZTo6UHJldmVudGVkQXV0b3BsYXkpOwpAQCAtODAwMywx
NiArODAxMSwxNiBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBsYXliYWNrQ29udHJvbHNNYW5h
Z2VyQmVoYXZpb3JSZXN0cmljdGlvbnNUaW1lckZpcmVkKCkKICAgICBpZiAobV9wbGF5YmFja0Nv
bnRyb2xzTWFuYWdlckJlaGF2aW9yUmVzdHJpY3Rpb25zUXVldWUuaGFzUGVuZGluZ1Rhc2soKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX21lZGlhU2Vzc2lvbi0+aGFzQmVoYXZpb3JS
ZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRy
b2xDb250cm9sc01hbmFnZXIpKQorICAgIGlmICghbWVkaWFTZXNzaW9uKCkuaGFzQmVoYXZpb3JS
ZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlVXNlckdlc3R1cmVUb0NvbnRy
b2xDb250cm9sc01hbmFnZXIpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWZQdHI8SFRNTE1l
ZGlhRWxlbWVudD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKICAgICBtX3BsYXliYWNrQ29udHJvbHNN
YW5hZ2VyQmVoYXZpb3JSZXN0cmljdGlvbnNRdWV1ZS5zY2hlZHVsZVRhc2soW3Byb3RlY3RlZFRo
aXNdICgpIHsKLSAgICAgICAgTWVkaWFFbGVtZW50U2Vzc2lvbiogbWVkaWFFbGVtZW50U2Vzc2lv
biA9IHByb3RlY3RlZFRoaXMtPm1fbWVkaWFTZXNzaW9uLmdldCgpOwotICAgICAgICBpZiAocHJv
dGVjdGVkVGhpcy0+aXNQbGF5aW5nKCkgfHwgbWVkaWFFbGVtZW50U2Vzc2lvbi0+c3RhdGUoKSA9
PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6QXV0b3BsYXlpbmcgfHwgbWVkaWFFbGVtZW50U2Vzc2lv
bi0+c3RhdGUoKSA9PSBQbGF0Zm9ybU1lZGlhU2Vzc2lvbjo6UGxheWluZykKKyAgICAgICAgYXV0
byYgbWVkaWFFbGVtZW50U2Vzc2lvbiA9IHByb3RlY3RlZFRoaXMtPm1lZGlhU2Vzc2lvbigpOwor
ICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNQbGF5aW5nKCkgfHwgbWVkaWFFbGVtZW50U2Vz
c2lvbi5zdGF0ZSgpID09IFBsYXRmb3JtTWVkaWFTZXNzaW9uOjpBdXRvcGxheWluZyB8fCBtZWRp
YUVsZW1lbnRTZXNzaW9uLnN0YXRlKCkgPT0gUGxhdGZvcm1NZWRpYVNlc3Npb246OlBsYXlpbmcp
CiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbWVkaWFFbGVtZW50U2Vzc2lvbi0+YWRk
QmVoYXZpb3JSZXN0cmljdGlvbihNZWRpYUVsZW1lbnRTZXNzaW9uOjpSZXF1aXJlUGxheWJhY2tU
b0NvbnRyb2xDb250cm9sc01hbmFnZXIpOworICAgICAgICBtZWRpYUVsZW1lbnRTZXNzaW9uLmFk
ZEJlaGF2aW9yUmVzdHJpY3Rpb24oTWVkaWFFbGVtZW50U2Vzc2lvbjo6UmVxdWlyZVBsYXliYWNr
VG9Db250cm9sQ29udHJvbHNNYW5hZ2VyKTsKICAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2NoZWR1
bGVQbGF5YmFja0NvbnRyb2xzTWFuYWdlclVwZGF0ZSgpOwogICAgIH0pOwogfQpAQCAtODA3OSw3
ICs4MDg3LDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRJbkFjdGl2ZURvY3VtZW50KGJv
b2wgaW5BY3RpdmVEb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pbkFjdGl2ZURv
Y3VtZW50ID0gaW5BY3RpdmVEb2N1bWVudDsKLSAgICBtX21lZGlhU2Vzc2lvbi0+aW5BY3RpdmVE
b2N1bWVudENoYW5nZWQoKTsKKyAgICBpZiAobV9tZWRpYVNlc3Npb24pCisgICAgICAgIG1fbWVk
aWFTZXNzaW9uLT5pbkFjdGl2ZURvY3VtZW50Q2hhbmdlZCgpOwogfQogCiBIVE1MTWVkaWFFbGVt
ZW50RW51bXM6OkJ1ZmZlcmluZ1BvbGljeSBIVE1MTWVkaWFFbGVtZW50OjpidWZmZXJpbmdQb2xp
Y3koKSBjb25zdApAQCAtODEyOSw2ICs4MTM4LDEzIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
c2V0U2hvd1Bvc3RlckZsYWcoYm9vbCBmbGFnKQogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVy
Q29tcG9zaXRpb24oKTsKIH0KIAorTWVkaWFFbGVtZW50U2Vzc2lvbiYgSFRNTE1lZGlhRWxlbWVu
dDo6bWVkaWFTZXNzaW9uKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbWVkaWFTZXNzaW9uKQorICAg
ICAgICBjb25zdF9jYXN0PEhUTUxNZWRpYUVsZW1lbnQmPigqdGhpcykuaW5pdGlhbGl6ZU1lZGlh
U2Vzc2lvbigpOworICAgIHJldHVybiAqbV9tZWRpYVNlc3Npb247Cit9CisKIH0KIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IDY0NzI0ZWJiOTRlYmI3
NjUxOGM3ZjQwNjkyNWY5MjFmNjExNzM4NTkuLjhlY2U0MWJmODMzODJmNzY1YWZjYjZmOTBmMzM2
MjZlZjc4OWVlMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCkBAIC00
OTAsNyArNDkwLDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxWaWRlb1BsYXliYWNrUXVhbGl0eT4g
Z2V0VmlkZW9QbGF5YmFja1F1YWxpdHkoKTsKIAogICAgIE1lZGlhUGxheWVyOjpQcmVsb2FkIHBy
ZWxvYWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbG9hZDsgfQotICAgIE1lZGlhRWxlbWVu
dFNlc3Npb24mIG1lZGlhU2Vzc2lvbigpIGNvbnN0IHsgcmV0dXJuICptX21lZGlhU2Vzc2lvbjsg
fQorICAgIFdFQkNPUkVfRVhQT1JUIE1lZGlhRWxlbWVudFNlc3Npb24mIG1lZGlhU2Vzc2lvbigp
IGNvbnN0OwogCiAgICAgdm9pZCBwYWdlU2NhbGVGYWN0b3JDaGFuZ2VkKCk7CiAgICAgdm9pZCB1
c2VySW50ZXJmYWNlTGF5b3V0RGlyZWN0aW9uQ2hhbmdlZCgpOwpAQCAtNTc4LDcgKzU3OCw2IEBA
IHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEhUTUxNZWRpYUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50JiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwotICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2hJbml0aWFsaXphdGlvbigpOwogICAgIHZpcnR1YWwgfkhUTUxNZWRpYUVsZW1l
bnQoKTsKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21TdHJpbmcmKSBvdmVycmlkZTsKQEAgLTg5MSw2ICs4OTAsOCBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcmVnaXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmKTsKICAgICB2b2lkIHVucmVn
aXN0ZXJXaXRoRG9jdW1lbnQoRG9jdW1lbnQmKTsKIAorICAgIHZvaWQgaW5pdGlhbGl6ZU1lZGlh
U2Vzc2lvbigpOworCiAgICAgdm9pZCB1cGRhdGVDYXB0aW9uQ29udGFpbmVyKCk7CiAgICAgdm9p
ZCBlbnN1cmVNZWRpYUNvbnRyb2xzU2hhZG93Um9vdCgpOwogCkBAIC0xMTA1LDYgKzExMDYsOCBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV90cmFja3NBcmVSZWFkeSA6IDE7CiAgICAgYm9vbCBtX2hh
dmVWaXNpYmxlVGV4dFRyYWNrIDogMTsKICAgICBib29sIG1fcHJvY2Vzc2luZ1ByZWZlcmVuY2VD
aGFuZ2UgOiAxOworICAgIGJvb2wgbV9zaG91bGRBdWRpb1BsYXliYWNrUmVxdWlyZVVzZXJHZXN0
dXJlIDogMTsKKyAgICBib29sIG1fc2hvdWxkVmlkZW9QbGF5YmFja1JlcXVpcmVVc2VyR2VzdHVy
ZSA6IDE7CiAKICAgICBBdXRvcGxheUV2ZW50UGxheWJhY2tTdGF0ZSBtX2F1dG9wbGF5RXZlbnRQ
bGF5YmFja1N0YXRlIHsgQXV0b3BsYXlFdmVudFBsYXliYWNrU3RhdGU6Ok5vbmUgfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKaW5kZXggOWMzZmQ1YTYzZDM5ZWI1
Y2I1ZTdjZDM2MTliZWFkMmFiMzkwZTMwNi4uYjJjZWIxYzVkOWI1ZTllNGJmYzY0Y2RkYjc0MDU4
ZjJjOGJjNDQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQuY3BwCkBA
IC03OSw3ICs3OSw2IEBAIFJlZjxIVE1MVmlkZW9FbGVtZW50PiBIVE1MVmlkZW9FbGVtZW50Ojpj
cmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jCiAgICAgSFRNTFZpZGVvRWxl
bWVudFBpY3R1cmVJblBpY3R1cmU6OnByb3ZpZGVQaWN0dXJlSW5QaWN0dXJlVG8odmlkZW9FbGVt
ZW50KTsKICNlbmRpZgogCi0gICAgdmlkZW9FbGVtZW50LT5maW5pc2hJbml0aWFsaXphdGlvbigp
OwogICAgIHZpZGVvRWxlbWVudC0+c3VzcGVuZElmTmVlZGVkKCk7CiAgICAgcmV0dXJuIHZpZGVv
RWxlbWVudDsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA1NTY4Yzk4MzA4NTQ0NzVlMzRhMDI1OGJlZDVkMzQyZDU0ZmVkY2MxLi5lNTM5Nzcz
OTVkMzU5NWYwYTk3MDM2MTMwMmYxNDFlMDEzYTIzZTVkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMjEtMDQtMjEg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBHUFVQcm9jZXNzIGxh
dW5jaGVzIHVubmVjZXNzYXJpbHkgd2hlbiBsb2FkaW5nIHRoZSBhbWF6b24gZnJvbnQgcGFnZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0ODQzCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0
ZXN0IGNvdmVyYWdlLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9HUFVQcm9jZXNzLm1tOgorICAgICAgICAoVEVTVCk6CisKIDIwMjEtMDQtMjAgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggdXNlLWFm
dGVyLW1vdmUgaW50cm9kdWNlZCBpbiByMjc1NDA3CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL0dQVVByb2Nlc3MubW0gYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL0dQVVByb2Nlc3MubW0KaW5kZXggMzk5NGQ3NjljZDNiNDRh
MDVmZTgwZTA2MGM1OTQ4ZTU4MGNiYWEyZS4uMzY0NjMxNjI2ZGI3OTNjMmI1OTMyMzI3OWYwZThi
NzE5ZTk5ZGRkOSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRD
b2NvYS9HUFVQcm9jZXNzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvR1BVUHJvY2Vzcy5tbQpAQCAtMjQ5LDYgKzI0OSwzOSBAQCBURVNUKEdQVVByb2Nlc3Ms
IE9ubHlMYXVuY2hlc0dQVVByb2Nlc3NXaGVuTmVjZXNzYXJ5U1ZHKQogICAgIEVYUEVDVF9FUShb
Y29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfZ3B1UHJvY2Vzc0lkZW50aWZpZXJdLCAw
KTsKIH0KIAorVEVTVChHUFVQcm9jZXNzLCBPbmx5TGF1bmNoZXNHUFVQcm9jZXNzV2hlbk5lY2Vz
c2FyeU1lZGlhRmVhdHVyZURldGVjdGlvbikKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBh
ZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFdLUHJl
ZmVyZW5jZXNTZXRCb29sVmFsdWVGb3JLZXlGb3JUZXN0aW5nKChfX2JyaWRnZSBXS1ByZWZlcmVu
Y2VzUmVmKVtjb25maWd1cmF0aW9uIHByZWZlcmVuY2VzXSwgdHJ1ZSwgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoIlVzZUdQVVByb2Nlc3NGb3JNZWRpYUVuYWJsZWQiKSk7CisgICAgV0tQ
cmVmZXJlbmNlc1NldEJvb2xWYWx1ZUZvcktleUZvclRlc3RpbmcoKF9fYnJpZGdlIFdLUHJlZmVy
ZW5jZXNSZWYpW2NvbmZpZ3VyYXRpb24gcHJlZmVyZW5jZXNdLCB0cnVlLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiQ2FwdHVyZVZpZGVvSW5HUFVQcm9jZXNzRW5hYmxlZCIpKTsKKyAg
ICBXS1ByZWZlcmVuY2VzU2V0Qm9vbFZhbHVlRm9yS2V5Rm9yVGVzdGluZygoX19icmlkZ2UgV0tQ
cmVmZXJlbmNlc1JlZilbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIHRydWUsIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCJVc2VHUFVQcm9jZXNzRm9yQ2FudmFzUmVuZGVyaW5nRW5h
YmxlZCIpKTsKKyAgICBXS1ByZWZlcmVuY2VzU2V0Qm9vbFZhbHVlRm9yS2V5Rm9yVGVzdGluZygo
X19icmlkZ2UgV0tQcmVmZXJlbmNlc1JlZilbY29uZmlndXJhdGlvbiBwcmVmZXJlbmNlc10sIGZh
bHNlLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVXNlR1BVUHJvY2Vzc0ZvckRPTVJl
bmRlcmluZ0VuYWJsZWQiKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdL
V2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDQwMCwgNDAwKSBj
b25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbd2ViVmlldyBzeW5jaHJv
bm91c2x5TG9hZFRlc3RQYWdlTmFtZWQ6QCJzaW1wbGUiXTsKKworICAgIF9fYmxvY2sgYm9vbCBk
b25lID0gZmFsc2U7CisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiISFkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdhdWRpbycpLmNhblBsYXlUeXBlIiBjb21wbGV0aW9uSGFuZGxlcjpe
KGlkIHJlc3VsdCwgTlNFcnJvciAqZXJyb3IpIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWVycm9y
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW3Jlc3VsdCBib29sVmFsdWVdKTsKKyAgICAgICAgZG9u
ZSA9IHRydWU7CisgICAgfV07CisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6cnVuKCZkb25lKTsK
KworICAgIGRvbmUgPSBmYWxzZTsKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCIh
IWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJykuY2FuUGxheVR5cGUiIGNvbXBsZXRpb25I
YW5kbGVyOl4oaWQgcmVzdWx0LCBOU0Vycm9yICplcnJvcikgeworICAgICAgICBFWFBFQ1RfVFJV
RSghZXJyb3IpOworICAgICAgICBFWFBFQ1RfVFJVRShbcmVzdWx0IGJvb2xWYWx1ZV0pOworICAg
ICAgICBkb25lID0gdHJ1ZTsKKyAgICB9XTsKKyAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmRvbmUpOworCisgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6c3BpblJ1bkxvb3AoMTApOworCisg
ICAgLy8gVGhpcyBzaG91bGQgbm90IGhhdmUgbGF1bmNoZWQgYSBHUFVQcm9jZXNzLgorICAgIEVY
UEVDVF9FUShbY29uZmlndXJhdGlvbi5nZXQoKS5wcm9jZXNzUG9vbCBfZ3B1UHJvY2Vzc0lkZW50
aWZpZXJdLCAwKTsKK30KKwogVEVTVChHUFVQcm9jZXNzLCBDcmFzaFdoaWxlUGxheWluZ1ZpZGVv
KQogewogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>