<?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>177603</bug_id>
          
          <creation_ts>2017-09-28 07:29:36 -0700</creation_ts>
          <short_desc>Use smart pointers for creating, adding and removing renderers</short_desc>
          <delta_ts>2017-09-29 23:46:06 -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>Layout and Rendering</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>hyatt</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1354089</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-28 07:29:36 -0700</bug_when>
    <thetext>RenderPtr everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354090</commentid>
    <comment_count>1</comment_count>
      <attachid>322080</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-28 07:30:01 -0700</bug_when>
    <thetext>Created attachment 322080
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354099</commentid>
    <comment_count>2</comment_count>
      <attachid>322083</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-28 07:52:25 -0700</bug_when>
    <thetext>Created attachment 322083
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354115</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2017-09-28 09:01:55 -0700</bug_when>
    <thetext>Yes, please! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354159</commentid>
    <comment_count>4</comment_count>
      <attachid>322083</attachid>
    <who name="alan">zalan</who>
    <bug_when>2017-09-28 10:11:25 -0700</bug_when>
    <thetext>Comment on attachment 322083
patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:815
&gt; +    auto toBeDeleted = parent.removeChildInternal(child, child.hasLayer() ? NotifyChildren : DontNotifyChildren);

I am a bit worried about the potential UAF errors this introduces. (takeInternal might make it less error prone)

...
RenderObject* nextSibling = child.nextSibling();
...
// We need to scope here because of reasons.
{
    reasonForScoping();
    ...
    parent.removeChildInternal(child);
    ...
}
child.deleteLines();

&gt; Source/WebCore/rendering/RenderGrid.cpp:71
&gt; +    auto&amp; child = baseAddChild&lt;RenderBlock&gt;(WTFMove(newChild), beforeChild);

I wish there was a better way to write this. I am sure we&apos;ll see problems like the moved newChild used later accidentally (I know this is a general problem, the only reason I am picking on this is because newChild is an argument). I&apos;ve run into problems like this in the past.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354262</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-28 13:42:25 -0700</bug_when>
    <thetext>&gt; I am a bit worried about the potential UAF errors this introduces.
&gt; (takeInternal might make it less error prone)

One thing we can do is to use an annotation to make compiler warns on unused return value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354264</commentid>
    <comment_count>6</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2017-09-28 13:43:19 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #5)
&gt; &gt; I am a bit worried about the potential UAF errors this introduces.
&gt; &gt; (takeInternal might make it less error prone)
&gt; 
&gt; One thing we can do is to use an annotation to make compiler warns on unused
&gt; return value.
Yeah, that&apos;s a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354483</commentid>
    <comment_count>7</comment_count>
      <attachid>322181</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-29 02:07:21 -0700</bug_when>
    <thetext>Created attachment 322181
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354494</commentid>
    <comment_count>8</comment_count>
      <attachid>322182</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-29 06:51:23 -0700</bug_when>
    <thetext>Created attachment 322182
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354589</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-29 10:48:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/34742406&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354596</commentid>
    <comment_count>10</comment_count>
      <attachid>322182</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-29 10:51:39 -0700</bug_when>
    <thetext>Comment on attachment 322182
patch

Rejecting attachment 322182 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 322182, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
eePosition.h
patching file Source/WebCore/style/RenderTreeUpdater.cpp
patching file Source/WebCore/style/RenderTreeUpdaterFirstLetter.cpp
patching file Source/WebCore/style/RenderTreeUpdaterGeneratedContent.cpp
patching file Source/WebCore/style/RenderTreeUpdaterListItem.cpp
patching file Source/WebCore/style/RenderTreeUpdaterMultiColumn.cpp

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Zalan Bujtas&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: http://webkit-queues.webkit.org/results/4699618</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354865</commentid>
    <comment_count>11</comment_count>
      <attachid>322283</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-29 23:05:47 -0700</bug_when>
    <thetext>Created attachment 322283
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354871</commentid>
    <comment_count>12</comment_count>
      <attachid>322283</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-29 23:46:04 -0700</bug_when>
    <thetext>Comment on attachment 322283
patch

Clearing flags on attachment: 322283

Committed r222679: &lt;http://trac.webkit.org/changeset/222679&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354872</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-29 23:46:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322080</attachid>
            <date>2017-09-28 07:30:01 -0700</date>
            <delta_ts>2017-09-28 07:52:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderptr-everywhere-11.patch</filename>
            <type>text/plain</type>
            <size>139716</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA0NCw4ICs2MDQ0
LDggQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbgogICAgICAgICBt
X3NhdmVkUGxhY2Vob2xkZXJSZW5kZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5k
ZXJlci0+c3R5bGUoKSk7CiAgICAgfQogCi0gICAgaWYgKG1fZnVsbFNjcmVlbkVsZW1lbnQgIT0g
ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgIFJlbmRlckZ1bGxTY3JlZW46OndyYXBSZW5kZXJl
cihyZW5kZXJlciwgcmVuZGVyZXIgPyByZW5kZXJlci0+cGFyZW50KCkgOiBudWxscHRyLCAqdGhp
cyk7CisgICAgaWYgKG1fZnVsbFNjcmVlbkVsZW1lbnQgIT0gZG9jdW1lbnRFbGVtZW50KCkgJiYg
cmVuZGVyZXIpCisgICAgICAgIFJlbmRlckZ1bGxTY3JlZW46OndyYXBFeGlzdGluZ1JlbmRlcmVy
KCpyZW5kZXJlciwgKnRoaXMpOwogCiAgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+c2V0Q29udGFp
bnNGdWxsU2NyZWVuRWxlbWVudE9uQW5jZXN0b3JzQ3Jvc3NpbmdGcmFtZUJvdW5kYXJpZXModHJ1
ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2
aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDc1LDcgKzQ3NSw3IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJC
bG9jazo6Y29udGludWF0aW9uQmUKICAgICByZXR1cm4gbGFzdDsKIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRUb0NvbnRp
bnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCkKIHsKICAgICBSZW5kZXJCbG9jayogZmxvdyA9IGNvbnRpbnVhdGlvbkJlZm9y
ZShiZWZvcmVDaGlsZCk7CiAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCBpczxSZW5kZXJCbG9j
az4oKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSkpOwpAQCAtNDkxLDcgKzQ5MSw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkZENoaWxkVG9Db250aW51YXRpb24KICAgICB9CiAKICAgICBpZiAobmV3Q2hp
bGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICBiZWZvcmVD
aGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3Jl
Q2hpbGQpOworICAgICAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC01MDAsMjEgKzUwMCwyMSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGls
ZFRvQ29udGludWF0aW9uCiAgICAgYm9vbCBmbG93SXNOb3JtYWwgPSBmbG93LT5pc0lubGluZSgp
IHx8ICFmbG93LT5zdHlsZSgpLmNvbHVtblNwYW4oKTsKIAogICAgIGlmIChmbG93ID09IGJlZm9y
ZUNoaWxkUGFyZW50KSB7Ci0gICAgICAgIGZsb3ctPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRp
b24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAogICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0Y2ggdXAg
aWYgd2UgY2FuLCBzbyB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRoZQogICAgIC8v
IG1pbmltYWwgIyBvZiBjb250aW51YXRpb25zIG5lZWRlZCBmb3IgdGhlIGlubGluZS4KICAgICBp
ZiAoY2hpbGRJc05vcm1hbCA9PSBiY3BJc05vcm1hbCkgewotICAgICAgICBiZWZvcmVDaGlsZFBh
cmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQp
OworICAgICAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmIChmbG93SXNOb3JtYWwgPT0gY2hpbGRJc05vcm1hbCkgewotICAgICAgICBmbG93
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCAwKTsgLy8gSnVzdCB0cmVh
dCBsaWtlIGFuIGFwcGVuZC4KKyAgICAgICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVh
dGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgMCk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQu
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxk
SWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBiZWZvcmVD
aGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxk
KSwgYmVmb3JlQ2hpbGQpOwogfQogCiBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRlckJsb2Nr
OjpjbG9uZSgpIGNvbnN0CkBAIC01MzcsMTUgKzUzNywxNSBAQCBSZW5kZXJQdHI8UmVuZGVyQmxv
Y2s+IFJlbmRlckJsb2NrOjpjbG9uCiAgICAgcmV0dXJuIGNsb25lQmxvY2s7CiB9CiAKLXZvaWQg
UmVuZGVyQmxvY2s6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZChSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBp
ZiAoY29udGludWF0aW9uKCkgJiYgIWlzQW5vbnltb3VzQmxvY2soKSkKLSAgICAgICAgYWRkQ2hp
bGRUb0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBhZGRDaGls
ZFRvQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgZWxz
ZQotICAgICAgICBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVD
aGlsZCk7CisgICAgICAgIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdD
aGlsZCksIGJlZm9yZUNoaWxkKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCkKIHsKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9
IHRoaXMpIHsKICAgICAgICAgUmVuZGVyRWxlbWVudCogYmVmb3JlQ2hpbGRDb250YWluZXIgPSBi
ZWZvcmVDaGlsZC0+cGFyZW50KCk7CkBAIC01NjYsMTYgKzU2NiwxNiBAQCB2b2lkIFJlbmRlckJs
b2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGluCiAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0IHRoZSBjaGlsZCBpbnRvIHRoZSBhbm9ueW1vdXMgYmxvY2sgYm94
IGluc3RlYWQgb2YgaGVyZS4KICAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQtPmlzSW5saW5l
KCkgfHwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpLT5maXJzdENoaWxkKCkgIT0gYmVmb3JlQ2hpbGQp
Ci0gICAgICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+YWRkQ2hpbGQobmV3
Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgYmVmb3JlQ2hpbGQtPnBh
cmVudCgpLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQobmV3Q2hpbGQsIGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQVNTRVJUKGJlZm9yZUNoaWxkQW5v
bnltb3VzQ29udGFpbmVyLT5pc1RhYmxlKCkpOwogICAgICAgICAgICAgaWYgKG5ld0NoaWxkLT5p
c1RhYmxlUGFydCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGludG8gdGhlIGFub255
bW91cyB0YWJsZS4KLSAgICAgICAgICAgICAgICBiZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5l
ci0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICBiZWZv
cmVDaGlsZEFub255bW91c0NvbnRhaW5lci0+YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJl
Zm9yZUNoaWxkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAg
LTYxMiwyMiArNjEyLDIxIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdDb250
aW4KICAgICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxkID0gYmVmb3JlQ2hpbGQgPyBiZWZv
cmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKIAogICAgICAgICBpZiAo
YWZ0ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKLSAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqYWZ0ZXJDaGlsZCkuYWRkQ2hpbGQobmV3Q2hpbGQp
OworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCphZnRlckNoaWxkKS5hZGRDaGls
ZChXVEZNb3ZlKG5ld0NoaWxkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAobmV3Q2hpbGQtPmlzSW5saW5lKCkpIHsKICAgICAgICAgICAgIC8vIE5vIHN1
aXRhYmxlIGV4aXN0aW5nIGFub255bW91cyBib3ggLSBjcmVhdGUgYSBuZXcgb25lLgotICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIG5ld0JveCA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0gICAg
ICAgICAgICBSZW5kZXJCb3g6OmFkZENoaWxkKG5ld0JveCwgYmVmb3JlQ2hpbGQpOwotICAgICAg
ICAgICAgbmV3Qm94LT5hZGRDaGlsZChuZXdDaGlsZCk7CisgICAgICAgICAgICBhdXRvJiBuZXdC
b3ggPSBiYXNlQWRkQ2hpbGQ8UmVuZGVyQm94PihjcmVhdGVBbm9ueW1vdXNCbG9jaygpLCBiZWZv
cmVDaGlsZCk7CisgICAgICAgICAgICBuZXdCb3guYWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaW52YWxpZGF0
ZUxpbmVMYXlvdXRQYXRoKCk7CiAKLSAgICBSZW5kZXJCb3g6OmFkZENoaWxkKG5ld0NoaWxkLCBi
ZWZvcmVDaGlsZCk7CisgICAgUmVuZGVyQm94OjphZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwg
YmVmb3JlQ2hpbGQpOwogIAogICAgIGlmIChtYWRlQm94ZXNOb25JbmxpbmUgJiYgaXM8UmVuZGVy
QmxvY2s+KHBhcmVudCgpKSAmJiBpc0Fub255bW91c0Jsb2NrKCkpCiAgICAgICAgIGRvd25jYXN0
PFJlbmRlckJsb2NrPigqcGFyZW50KCkpLnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2sodGhp
cyk7CkBAIC03MTAsOSArNzA5LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1ha2VDaGlsZHJlbk5v
bklubGluZSgKIAogICAgICAgICBjaGlsZCA9IGlubGluZVJ1bkVuZC0+bmV4dFNpYmxpbmcoKTsK
IAotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBjcmVhdGVBbm9ueW1vdXNCbG9jaygpOwot
ICAgICAgICBpbnNlcnRDaGlsZEludGVybmFsKGJsb2NrLCBpbmxpbmVSdW5TdGFydCwgTm90aWZ5
Q2hpbGRyZW4pOwotICAgICAgICBtb3ZlQ2hpbGRyZW5UbyhibG9jaywgaW5saW5lUnVuU3RhcnQs
IGNoaWxkKTsKKyAgICAgICAgYXV0byBuZXdCbG9jayA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7
CisgICAgICAgIGF1dG8mIGJsb2NrID0gKm5ld0Jsb2NrOworICAgICAgICBpbnNlcnRDaGlsZElu
dGVybmFsKFdURk1vdmUobmV3QmxvY2spLCBpbmxpbmVSdW5TdGFydCwgTm90aWZ5Q2hpbGRyZW4p
OworICAgICAgICBtb3ZlQ2hpbGRyZW5UbygmYmxvY2ssIGlubGluZVJ1blN0YXJ0LCBjaGlsZCk7
CiAgICAgfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtODExLDIxICs4MTEsMTkgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6ZHJvcEFub255bW91c0JveENoaWxkKAogICAgIHBhcmVudC5zZXROZWVkc0xheW91
dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBwYXJlbnQuc2V0Q2hpbGRyZW5JbmxpbmUoY2hp
bGQuY2hpbGRyZW5JbmxpbmUoKSk7CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGNo
aWxkLm5leHRTaWJsaW5nKCk7Ci0gICAgcGFyZW50LnJlbW92ZUNoaWxkSW50ZXJuYWwoY2hpbGQs
IGNoaWxkLmhhc0xheWVyKCkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7
CisKKyAgICBhdXRvIHRvQmVEZWxldGVkID0gcGFyZW50LnJlbW92ZUNoaWxkSW50ZXJuYWwoY2hp
bGQsIGNoaWxkLmhhc0xheWVyKCkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJl
bik7CiAgICAgY2hpbGQubW92ZUFsbENoaWxkcmVuVG8oJnBhcmVudCwgbmV4dFNpYmxpbmcsIGNo
aWxkLmhhc0xheWVyKCkpOwogICAgIC8vIERlbGV0ZSB0aGUgbm93LWVtcHR5IGJsb2NrJ3MgbGlu
ZXMgYW5kIG51a2UgaXQuCiAgICAgY2hpbGQuZGVsZXRlTGluZXMoKTsKLSAgICBjaGlsZC5kZXN0
cm95KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYg
b2xkQ2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJCbG9jazo6dGFrZUNoaWxk
KFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCiB7CiAgICAgLy8gTm8gbmVlZCB0byB3YXN0ZSB0aW1l
IGluIG1lcmdpbmcgb3IgcmVtb3ZpbmcgZW1wdHkgYW5vbnltb3VzIGJsb2Nrcy4KICAgICAvLyBX
ZSBjYW4ganVzdCBiYWlsIG91dCBpZiBvdXIgZG9jdW1lbnQgaXMgZ2V0dGluZyBkZXN0cm95ZWQu
Ci0gICAgaWYgKHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKSB7Ci0gICAgICAgIFJlbmRlckJv
eDo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
IChyZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6
dGFrZUNoaWxkKG9sZENoaWxkKTsKIAogICAgIC8vIElmIHRoaXMgY2hpbGQgaXMgYSBibG9jaywg
YW5kIGlmIG91ciBwcmV2aW91cyBhbmQgbmV4dCBzaWJsaW5ncyBhcmUgYm90aCBhbm9ueW1vdXMg
YmxvY2tzCiAgICAgLy8gd2l0aCBpbmxpbmUgY29udGVudCwgdGhlbiB3ZSBjYW4gZm9sZCB0aGUg
aW5saW5lIGNvbnRlbnQgYmFjayB0b2dldGhlci4KQEAgLTg0OSwxMSArODQ3LDExIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICAgICAgICAgIC8vIENhY2hl
IHRoaXMgdmFsdWUgYXMgaXQgbWlnaHQgZ2V0IGNoYW5nZWQgaW4gc2V0U3R5bGUoKSBjYWxsLgog
ICAgICAgICAgICAgYm9vbCBpbmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIgPSBpbmxpbmVDaGls
ZHJlbkJsb2NrLmhhc0xheWVyKCk7CiAgICAgICAgICAgICBpbmxpbmVDaGlsZHJlbkJsb2NrLnNl
dFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxl
KCksIEJMT0NLKSk7Ci0gICAgICAgICAgICByZW1vdmVDaGlsZEludGVybmFsKGlubGluZUNoaWxk
cmVuQmxvY2ssIGlubGluZUNoaWxkcmVuQmxvY2tIYXNMYXllciA/IE5vdGlmeUNoaWxkcmVuIDog
RG9udE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgIGF1dG8gcmVtb3ZlZENoaWxkID0gcmVt
b3ZlQ2hpbGRJbnRlcm5hbChpbmxpbmVDaGlsZHJlbkJsb2NrLCBpbmxpbmVDaGlsZHJlbkJsb2Nr
SGFzTGF5ZXIgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIE5vdyBqdXN0IHB1dCB0aGUgaW5saW5lQ2hpbGRyZW5CbG9j
ayBpbnNpZGUgdGhlIGJsb2NrQ2hpbGRyZW5CbG9jay4KICAgICAgICAgICAgIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQgPSBwcmV2ID09ICZpbmxpbmVDaGlsZHJlbkJsb2NrID8gYmxvY2tDaGls
ZHJlbkJsb2NrLmZpcnN0Q2hpbGQoKSA6IG51bGxwdHI7Ci0gICAgICAgICAgICBibG9ja0NoaWxk
cmVuQmxvY2suaW5zZXJ0Q2hpbGRJbnRlcm5hbCgmaW5saW5lQ2hpbGRyZW5CbG9jaywgYmVmb3Jl
Q2hpbGQsCisgICAgICAgICAgICBibG9ja0NoaWxkcmVuQmxvY2suaW5zZXJ0Q2hpbGRJbnRlcm5h
bChXVEZNb3ZlKHJlbW92ZWRDaGlsZCksIGJlZm9yZUNoaWxkLAogICAgICAgICAgICAgICAgIChp
bmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIgfHwgYmxvY2tDaGlsZHJlbkJsb2NrLmhhc0xheWVy
KCkpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICAgICAg
bmV4dC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgICAgICAK
QEAgLTg3Nyw3ICs4NzUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJP
YmplCiAKICAgICBpbnZhbGlkYXRlTGluZUxheW91dFBhdGgoKTsKIAotICAgIFJlbmRlckJveDo6
cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOworICAgIGF1dG8gdGFrZW5DaGlsZCA9IFJlbmRlckJveDo6
dGFrZUNoaWxkKG9sZENoaWxkKTsKIAogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBwcmV2ID8g
cHJldiA6IG5leHQ7CiAgICAgaWYgKGNhbk1lcmdlQW5vbnltb3VzQmxvY2tzICYmIGNoaWxkICYm
ICFjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgJiYgIWNoaWxkLT5uZXh0U2libGluZygpICYmIGNh
bkRyb3BBbm9ueW1vdXNCbG9ja0NoaWxkKCkpIHsKQEAgLTkzNCw2ICs5MzIsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplCiAgICAgICAgICAgICBkZXN0cm95KCk7
CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIHRha2VuQ2hpbGQ7CiB9CiAKIGJvb2wgUmVu
ZGVyQmxvY2s6OmNoaWxkcmVuUHJldmVudFNlbGZDb2xsYXBzaW5nKCkgY29uc3QKQEAgLTMzNDAs
MTQgKzMzMzksMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAog
ICAgICAgICBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJl
Y3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQoTGF5b3V0UG9pbnQoYWRkaXRpb25hbE9mZnNldCArIGlu
bGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkg
LSBsb2NhdGlvbigpKSksIHBhaW50Q29udGFpbmVyKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJl
bmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmRE
aXNwbGF5KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBFRGlz
cGxheSBkaXNwbGF5KQorUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y3JlYXRl
QW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KERvY3VtZW50JiBkb2N1bWVudCwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBFRGlzcGxheSBkaXNwbGF5KQogewogICAgIC8vIEZJWE1F
OiBEbyB3ZSBuZWVkIHRvIGNvbnZlcnQgYWxsIG91ciBpbmxpbmUgZGlzcGxheXMgdG8gYmxvY2st
dHlwZSBpbiB0aGUgYW5vbnltb3VzIGxvZ2ljID8KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
QmxvY2s+IG5ld0JveDsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IG5ld0JveDsKICAgICBp
ZiAoZGlzcGxheSA9PSBGTEVYIHx8IGRpc3BsYXkgPT0gSU5MSU5FX0ZMRVgpCi0gICAgICAgIG5l
d0JveCA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyRmxleGlibGVCb3g+KGRvY3VtZW50LCBSZW5k
ZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgRkxFWCkpOwor
ICAgICAgICBuZXdCb3ggPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJGbGV4aWJsZUJveD4oZG9jdW1l
bnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBG
TEVYKSk7CiAgICAgZWxzZQotICAgICAgICBuZXdCb3ggPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRl
ckJsb2NrRmxvdz4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdp
dGhEaXNwbGF5KHN0eWxlLCBCTE9DSykpOworICAgICAgICBuZXdCb3ggPSBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJCbG9ja0Zsb3c+KGRvY3VtZW50LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3Vz
U3R5bGVXaXRoRGlzcGxheShzdHlsZSwgQkxPQ0spKTsKICAgICAKICAgICBuZXdCb3gtPmluaXRp
YWxpemVTdHlsZSgpOwogICAgIHJldHVybiBuZXdCb3g7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDggKzcyLDggQEAg
cHVibGljOgogICAgIC8vIEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24gd2hl
biBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVMaW5lcygpOwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5l
d0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxk
KFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxk
KFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDAp
OwogCkBAIC0xOTYsMTEgKzE5NiwxMSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNvbnRpbnVhdGlvbjsKICAgICB1c2luZyBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
c2V0Q29udGludWF0aW9uOwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9j
az4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyQW5kRGlzcGxheShjb25zdCBSZW5k
ZXJCb3gmIHBhcmVudCwgRURpc3BsYXkgPSBCTE9DSyk7Ci0gICAgUmVuZGVyQmxvY2sqIGNyZWF0
ZUFub255bW91c0Jsb2NrKEVEaXNwbGF5ID0gQkxPQ0spIGNvbnN0OworICAgIHN0YXRpYyBSZW5k
ZXJQdHI8UmVuZGVyQmxvY2s+IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlckFuZERp
c3BsYXkoY29uc3QgUmVuZGVyQm94JiBwYXJlbnQsIEVEaXNwbGF5ID0gQkxPQ0spOworICAgIFJl
bmRlclB0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnltb3VzQmxvY2soRURpc3BsYXkgPSBCTE9D
SykgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQgZHJvcEFub255bW91c0JveENoaWxkKFJlbmRlckJs
b2NrJiBwYXJlbnQsIFJlbmRlckJsb2NrJiBjaGlsZCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJC
b3gmKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9u
eW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHN0YXRpYyBib29sIHNob3VsZFNraXBDcmVhdGluZ1J1bnNGb3JPYmplY3QoUmVuZGVy
T2JqZWN0JiBvYmopCiAgICAgewpAQCAtNDI4LDcgKzQyOCw3IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIGJsb2NrV2lsbEJlRGVzdHJveWVkKCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmRE
aXNwbGF5KERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBFRGlzcGxheSk7CisgICAgc3Rh
dGljIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVB
bmREaXNwbGF5KERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBFRGlzcGxheSk7CiAKICAg
ICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxl
cnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFsIExheW91dFVuaXQg
bG9naWNhbFJpZ2h0RmxvYXRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQsIExheW91dFVuaXQgZml4
ZWRPZmZzZXQsIExheW91dFVuaXQpIGNvbnN0IHsgcmV0dXJuIGZpeGVkT2Zmc2V0OyB9OwpAQCAt
NDQ3LDggKzQ0Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUg
dmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tG
bG93CiAgICAgdmlydHVhbCB2b2lkIG1vdmVBbGxDaGlsZHJlbkluY2x1ZGluZ0Zsb2F0c1RvKFJl
bmRlckJsb2NrJiB0b0Jsb2NrLCBib29sIGZ1bGxSZW1vdmVJbnNlcnQpIHsgbW92ZUFsbENoaWxk
cmVuVG8oJnRvQmxvY2ssIGZ1bGxSZW1vdmVJbnNlcnQpOyB9CiAKLSAgICB2b2lkIGFkZENoaWxk
VG9Db250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCk7Ci0gICAgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9i
amVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIG92ZXJyaWRlOworICAg
IHZvaWQgYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisgICAgdm9pZCBhZGRDaGlsZElnbm9y
aW5nQ29udGludWF0aW9uKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKSBvdmVycmlkZTsKIAogICAgIGJvb2wgaXNTZWxmQ29sbGFwc2lu
Z0Jsb2NrKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGNoaWxkcmVuUHJldmVu
dFNlbGZDb2xsYXBzaW5nKCkgY29uc3Q7CkBAIC01NDcsMTkgKzU0NywxOSBAQCBMYXlvdXRVbml0
IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsCiBMYXlvdXRVbml0IGlubGluZURpcmVjdGlv
bk9mZnNldChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRG
cm9tUm9vdEJsb2NrKTsKIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50UmVzcGVjdGlu
Z0VkaXRpbmdCb3VuZGFyaWVzKFJlbmRlckJsb2NrJiwgUmVuZGVyQm94JiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKIAotaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9jaz4gUmVuZGVyQmxv
Y2s6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlckFuZERpc3BsYXkoY29uc3QgUmVu
ZGVyQm94JiBwYXJlbnQsIEVEaXNwbGF5IGRpc3BsYXkpCitpbmxpbmUgUmVuZGVyUHRyPFJlbmRl
ckJsb2NrPiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyQW5k
RGlzcGxheShjb25zdCBSZW5kZXJCb3gmIHBhcmVudCwgRURpc3BsYXkgZGlzcGxheSkKIHsKICAg
ICByZXR1cm4gY3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KHBhcmVudC5k
b2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSwgZGlzcGxheSk7CiB9CiAKLWlubGluZSBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyQm94PiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNh
bWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29uc3QKK2lubGluZSBSZW5kZXJQ
dHI8UmVuZGVyQm94PiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBl
QXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29uc3QKIHsKICAgICByZXR1cm4gY3JlYXRl
QW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KGRvY3VtZW50KCksIHJlbmRlcmVyLnN0
eWxlKCksIHN0eWxlKCkuZGlzcGxheSgpKTsKIH0KIAotaW5saW5lIFJlbmRlckJsb2NrKiBSZW5k
ZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2soRURpc3BsYXkgZGlzcGxheSkgY29uc3QKK2lu
bGluZSBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNC
bG9jayhFRGlzcGxheSBkaXNwbGF5KSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVBbm9ueW1v
dXNCbG9ja1dpdGhTdHlsZUFuZERpc3BsYXkoZG9jdW1lbnQoKSwgc3R5bGUoKSwgZGlzcGxheSku
cmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVBbm9ueW1vdXNCbG9ja1dpdGhTdHlsZUFuZERp
c3BsYXkoZG9jdW1lbnQoKSwgc3R5bGUoKSwgZGlzcGxheSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgzNSwyNCArMzgzNSwyNCBAQCB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0RXhjbHVkZWRDaGlsCiAgICAgZGV0ZXJtaW5lTG9n
aWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKCpmcmFnbWVudGVkRmxvdyk7CiB9CiAKLXZvaWQgUmVu
ZGVyQmxvY2tGbG93OjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewog
ICAgIGlmIChtdWx0aUNvbHVtbkZsb3coKSAmJiAoIWlzRmllbGRzZXQoKSB8fCAhbmV3Q2hpbGQt
PmlzTGVnZW5kKCkpKQotICAgICAgICByZXR1cm4gbXVsdGlDb2x1bW5GbG93KCktPmFkZENoaWxk
KG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybiBtdWx0aUNvbHVtbkZsb3co
KS0+YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICBhdXRvKiBi
ZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIgPSBiZWZvcmVDaGlsZDsKICAgICBpZiAoYXV0byogY29u
dGFpbmluZ0ZyYWdtZW50ZWRGbG93ID0gZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSkKICAgICAg
ICAgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyID0gY29udGFpbmluZ0ZyYWdtZW50ZWRGbG93LT5y
ZXNvbHZlTW92ZWRDaGlsZChiZWZvcmVDaGlsZCk7Ci0gICAgUmVuZGVyQmxvY2s6OmFkZENoaWxk
KG5ld0NoaWxkLCBiZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIpOworICAgIFJlbmRlckJsb2NrOjph
ZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyKTsKIH0K
IAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgb2xkQ2hp
bGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJCbG9ja0Zsb3c6OnRha2VDaGlsZChS
ZW5kZXJPYmplY3QmIG9sZENoaWxkKQogewogICAgIGlmICghcmVuZGVyVHJlZUJlaW5nRGVzdHJv
eWVkKCkpIHsKICAgICAgICAgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIGZyYWdtZW50ZWRGbG93ID0g
bXVsdGlDb2x1bW5GbG93KCk7CiAgICAgICAgIGlmIChmcmFnbWVudGVkRmxvdyAmJiBmcmFnbWVu
dGVkRmxvdyAhPSAmb2xkQ2hpbGQpCiAgICAgICAgICAgICBmcmFnbWVudGVkRmxvdy0+ZnJhZ21l
bnRlZEZsb3dSZWxhdGl2ZVdpbGxCZVJlbW92ZWQob2xkQ2hpbGQpOwogICAgIH0KLSAgICBSZW5k
ZXJCbG9jazo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6
dGFrZUNoaWxkKG9sZENoaWxkKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrRm9y
UGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoYm9vbCYgcmVsYXlvdXRDaGlsZHJlbiwgTGF5
b3V0VW5pdCYgcGFnZUxvZ2ljYWxIZWlnaHQsIGJvb2wmIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdl
ZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHJl
dmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuaAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDggKzM4Miw4IEBAIHB1YmxpYzoKICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZEZvckZyYWdtZW50YXRpb24oY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCkgY29uc3Q7CiAgICAgYm9vbCBoYXNOZXh0UGFnZShMYXlvdXRVbml0IGxvZ2lj
YWxPZmZzZXQsIFBhZ2VCb3VuZGFyeVJ1bGUgPSBFeGNsdWRlUGFnZUJvdW5kYXJ5KSBjb25zdDsK
IAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVy
T2JqZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwor
ICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgdXBkYXRlQ29sdW1uUHJvZ3Jlc3Npb25Gcm9tU3R5bGUoUmVuZGVy
U3R5bGUmKTsKICAgICB2b2lkIHVwZGF0ZVN0eWxlc0ZvckNvbHVtbkNoaWxkcmVuKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMjIyNjA3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5MzEsMjAgKzQ5MzEsMjEgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJCb3g6OnNwbGl0QW5v
bnltb3VzQgogCiAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJlbnQgYm94
IGludG8gdHdvIGJveGVzIGFuZCBtb3ZlIGNoaWxkcmVuCiAgICAgICAgICAgICAvLyBmcm9tIHxi
ZWZvcmVDaGlsZHwgdG8gZW5kIGludG8gdGhlIG5ldyBwb3N0IGJveC4KLSAgICAgICAgICAgIGF1
dG8qIHBvc3RCb3ggPSBib3hUb1NwbGl0LmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFz
KCp0aGlzKS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBwb3N0Qm94LT5zZXRDaGlsZHJlbklubGlu
ZShib3hUb1NwbGl0LmNoaWxkcmVuSW5saW5lKCkpOworICAgICAgICAgICAgYXV0byBuZXdQb3N0
Qm94ID0gYm94VG9TcGxpdC5jcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcygqdGhpcyk7
CisgICAgICAgICAgICBhdXRvJiBwb3N0Qm94ID0gKm5ld1Bvc3RCb3g7CisgICAgICAgICAgICBw
b3N0Qm94LnNldENoaWxkcmVuSW5saW5lKGJveFRvU3BsaXQuY2hpbGRyZW5JbmxpbmUoKSk7CiAg
ICAgICAgICAgICBSZW5kZXJCb3gqIHBhcmVudEJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oYm94
VG9TcGxpdC5wYXJlbnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGludmFsaWRhdGUg
dGhlIHxwYXJlbnRCb3h8IGJlZm9yZSBpbnNlcnRpbmcgdGhlIG5ldyBub2RlCiAgICAgICAgICAg
ICAvLyBzbyB0aGF0IHRoZSB0YWJsZSByZXBhaW50aW5nIGxvZ2ljIGtub3dzIHRoZSBzdHJ1Y3R1
cmUgaXMgZGlydHkuCiAgICAgICAgICAgICAvLyBTZWUgZm9yIGV4YW1wbGUgUmVuZGVyVGFibGVD
ZWxsOmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50LgogICAgICAgICAgICAgbWFya0JveEZv
clJlbGF5b3V0QWZ0ZXJTcGxpdCgqcGFyZW50Qm94KTsKLSAgICAgICAgICAgIHBhcmVudEJveC0+
aW5zZXJ0Q2hpbGRJbnRlcm5hbChwb3N0Qm94LCBib3hUb1NwbGl0Lm5leHRTaWJsaW5nKCksIE5v
dGlmeUNoaWxkcmVuKTsKLSAgICAgICAgICAgIGJveFRvU3BsaXQubW92ZUNoaWxkcmVuVG8ocG9z
dEJveCwgYmVmb3JlQ2hpbGQsIG51bGxwdHIsIHRydWUpOworICAgICAgICAgICAgcGFyZW50Qm94
LT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3UG9zdEJveCksIGJveFRvU3BsaXQubmV4
dFNpYmxpbmcoKSwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgYm94VG9TcGxpdC5tb3Zl
Q2hpbGRyZW5UbygmcG9zdEJveCwgYmVmb3JlQ2hpbGQsIG51bGxwdHIsIHRydWUpOwogCiAgICAg
ICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KGJveFRvU3BsaXQpOwotICAgICAg
ICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdCgqcG9zdEJveCk7CisgICAgICAgICAg
ICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KHBvc3RCb3gpOwogCi0gICAgICAgICAgICBi
ZWZvcmVDaGlsZCA9IHBvc3RCb3g7CisgICAgICAgICAgICBiZWZvcmVDaGlsZCA9ICZwb3N0Qm94
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gJmJveFRvU3BsaXQ7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24g
MjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OTIsNyArNTkyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbGF5b3V0
T3ZlcmZsb3dSZWN0LnkoKSA8IHkoKSB8fCBsYXlvdXRPdmVyZmxvd1JlY3QubWF4WSgpID4geSgp
ICsgbG9naWNhbEhlaWdodCgpOwogICAgIH0KIAotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlckJveD4gY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVy
Qm94JikgY29uc3QKKyAgICB2aXJ0dWFsIFJlbmRlclB0cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255
bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OTYsMTIgKzI1OTYsMTIgQEAg
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxkVG8oUgogICAgIGlmIChmdWxsUmVt
b3ZlSW5zZXJ0ICYmICh0b0JveE1vZGVsT2JqZWN0LT5pc1JlbmRlckJsb2NrKCkgfHwgdG9Cb3hN
b2RlbE9iamVjdC0+aXNSZW5kZXJJbmxpbmUoKSkpIHsKICAgICAgICAgLy8gVGFrZXMgY2FyZSBv
ZiBhZGRpbmcgdGhlIG5ldyBjaGlsZCBjb3JyZWN0bHkgaWYgdG9CbG9jayBhbmQgZnJvbUJsb2Nr
CiAgICAgICAgIC8vIGhhdmUgZGlmZmVyZW50IGtpbmQgb2YgY2hpbGRyZW4gKGJsb2NrIHZzIGlu
bGluZSkuCi0gICAgICAgIHJlbW92ZUNoaWxkSW50ZXJuYWwoKmNoaWxkLCBOb3RpZnlDaGlsZHJl
bik7Ci0gICAgICAgIHRvQm94TW9kZWxPYmplY3QtPmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGls
ZCk7CisgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSByZW1vdmVDaGlsZEludGVybmFsKCpjaGls
ZCwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICB0b0JveE1vZGVsT2JqZWN0LT5hZGRDaGlsZChX
VEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgYmVmb3JlQ2hpbGQpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IE5vdGlmeUNoaWxkcmVuVHlwZSBub3RpZnlUeXBlID0gZnVsbFJlbW92ZUluc2VydCA/IE5vdGlm
eUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuOwotICAgICAgICByZW1vdmVDaGlsZEludGVy
bmFsKCpjaGlsZCwgbm90aWZ5VHlwZSk7Ci0gICAgICAgIHRvQm94TW9kZWxPYmplY3QtPmluc2Vy
dENoaWxkSW50ZXJuYWwoY2hpbGQsIGJlZm9yZUNoaWxkLCBub3RpZnlUeXBlKTsKKyAgICAgICAg
YXV0byBjaGlsZFRvTW92ZSA9IHJlbW92ZUNoaWxkSW50ZXJuYWwoKmNoaWxkLCBub3RpZnlUeXBl
KTsKKyAgICAgICAgdG9Cb3hNb2RlbE9iamVjdC0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3Zl
KGNoaWxkVG9Nb3ZlKSwgYmVmb3JlQ2hpbGQsIG5vdGlmeVR5cGUpOwogICAgIH0KIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHJldmlzaW9uIDIy
MjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MywzMCArNjMsMzAgQEAgYm9vbCBSZW5kZXJCdXR0b246Omhhc0xpbmVJ
ZkVtcHR5KCkgY29ucwogICAgIHJldHVybiBpczxIVE1MSW5wdXRFbGVtZW50Pihmb3JtQ29udHJv
bEVsZW1lbnQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyQnV0dG9uOjphZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJCdXR0
b246OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQogewogICAgIGlmICghbV9pbm5lcikgewogICAgICAgICAvLyBDcmVh
dGUgYW4gYW5vbnltb3VzIGJsb2NrLgogICAgICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7Ci0g
ICAgICAgIG1faW5uZXIgPSBjcmVhdGVBbm9ueW1vdXNCbG9jayhzdHlsZSgpLmRpc3BsYXkoKSk7
Ci0gICAgICAgIHVwZGF0ZUFub255bW91c0NoaWxkU3R5bGUoKm1faW5uZXIsIG1faW5uZXItPm11
dGFibGVTdHlsZSgpKTsKLSAgICAgICAgUmVuZGVyRmxleGlibGVCb3g6OmFkZENoaWxkKG1faW5u
ZXIpOworICAgICAgICBhdXRvIG5ld0lubmVyID0gY3JlYXRlQW5vbnltb3VzQmxvY2soc3R5bGUo
KS5kaXNwbGF5KCkpOworICAgICAgICB1cGRhdGVBbm9ueW1vdXNDaGlsZFN0eWxlKCpuZXdJbm5l
ciwgbmV3SW5uZXItPm11dGFibGVTdHlsZSgpKTsKKyAgICAgICAgbV9pbm5lciA9ICZiYXNlQWRk
Q2hpbGQ8UmVuZGVyRmxleGlibGVCb3g+KFdURk1vdmUobmV3SW5uZXIpKTsKICAgICB9CiAgICAg
Ci0gICAgbV9pbm5lci0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBtX2lu
bmVyLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogfQogCi12b2lk
IFJlbmRlckJ1dHRvbjo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKK1JlbmRl
clB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlckJ1dHRvbjo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYg
b2xkQ2hpbGQpCiB7CiAgICAgLy8gbV9pbm5lciBzaG91bGQgYmUgdGhlIG9ubHkgY2hpbGQsIGJ1
dCBjaGVja2luZyBmb3IgZGlyZWN0IGNoaWxkcmVuIHdobwogICAgIC8vIGFyZSBub3QgbV9pbm5l
ciBwcmV2ZW50cyBzZWN1cml0eSBwcm9ibGVtcyB3aGVuIHRoYXQgYXNzdW1wdGlvbiBpcwogICAg
IC8vIHZpb2xhdGVkLgogICAgIGlmICgmb2xkQ2hpbGQgPT0gbV9pbm5lciB8fCAhbV9pbm5lciB8
fCBvbGRDaGlsZC5wYXJlbnQoKSA9PSB0aGlzKSB7CiAgICAgICAgIEFTU0VSVCgmb2xkQ2hpbGQg
PT0gbV9pbm5lciB8fCAhbV9pbm5lcik7Ci0gICAgICAgIFJlbmRlckZsZXhpYmxlQm94OjpyZW1v
dmVDaGlsZChvbGRDaGlsZCk7CiAgICAgICAgIG1faW5uZXIgPSBudWxscHRyOwotICAgIH0gZWxz
ZQotICAgICAgICBtX2lubmVyLT5yZW1vdmVDaGlsZChvbGRDaGlsZCk7CisgICAgICAgIHJldHVy
biBSZW5kZXJGbGV4aWJsZUJveDo6dGFrZUNoaWxkKG9sZENoaWxkKTsKKyAgICB9CisgICAgcmV0
dXJuIG1faW5uZXItPnRha2VDaGlsZChvbGRDaGlsZCk7CiB9CiAgICAgCiB2b2lkIFJlbmRlckJ1
dHRvbjo6dXBkYXRlQW5vbnltb3VzQ2hpbGRTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmIGNoaWxk
LCBSZW5kZXJTdHlsZSYgY2hpbGRTdHlsZSkgY29uc3QKQEAgLTEyOCw4ICsxMjgsOSBAQCB2b2lk
IFJlbmRlckJ1dHRvbjo6c2V0VGV4dChjb25zdCBTdHJpbmcmCiAgICAgICAgIGlmIChtX2J1dHRv
blRleHQpCiAgICAgICAgICAgICBtX2J1dHRvblRleHQtPnNldFRleHQoc3RyLmltcGwoKSk7CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9idXR0b25UZXh0ID0gbmV3IFJlbmRlclRleHRG
cmFnbWVudChkb2N1bWVudCgpLCBzdHIpOwotICAgICAgICAgICAgYWRkQ2hpbGQobV9idXR0b25U
ZXh0KTsKKyAgICAgICAgICAgIGF1dG8gbmV3QnV0dG9uVGV4dCA9IGNyZWF0ZVJlbmRlcmVyPFJl
bmRlclRleHRGcmFnbWVudD4oZG9jdW1lbnQoKSwgc3RyKTsKKyAgICAgICAgICAgIG1fYnV0dG9u
VGV4dCA9IG5ld0J1dHRvblRleHQuZ2V0KCk7CisgICAgICAgICAgICBhZGRDaGlsZChXVEZNb3Zl
KG5ld0J1dHRvblRleHQpKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCAr
NDAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QgKmJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDaGls
ZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QgKmJlZm9yZUNoaWxkID0gMCkgb3Zl
cnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVj
dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayhSZW5k
ZXJCbG9jayopIG92ZXJyaWRlIHsgfQogICAgIGJvb2wgY3JlYXRlc0Fub255bW91c1dyYXBwZXIo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDU1LDIzICs0NTUsMjYgQEAgYm9vbCBSZW5kZXJFbGVtZW50OjpjaGlsZFJlcXVpcmVzVGFibGUo
YwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJFbGVtZW50OjphZGRDaGlsZChS
ZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBS
ZW5kZXJFbGVtZW50OjphZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKLSAgICBpZiAoY2hpbGRSZXF1aXJlc1RhYmxl
KCpuZXdDaGlsZCkpIHsKKyAgICBhdXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAgICBpZiAoY2hp
bGRSZXF1aXJlc1RhYmxlKGNoaWxkKSkgewogICAgICAgICBSZW5kZXJUYWJsZSogdGFibGU7CiAg
ICAgICAgIFJlbmRlck9iamVjdCogYWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hp
bGQtPnByZXZpb3VzU2libGluZygpIDogbV9sYXN0Q2hpbGQ7CiAgICAgICAgIGlmIChhZnRlckNo
aWxkICYmIGFmdGVyQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgaXM8UmVuZGVyVGFibGU+KCphZnRl
ckNoaWxkKSAmJiAhYWZ0ZXJDaGlsZC0+aXNCZWZvcmVDb250ZW50KCkpCiAgICAgICAgICAgICB0
YWJsZSA9IGRvd25jYXN0PFJlbmRlclRhYmxlPihhZnRlckNoaWxkKTsKICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICB0YWJsZSA9IFJlbmRlclRhYmxlOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFy
ZW50UmVuZGVyZXIoKnRoaXMpLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGFkZENoaWxkKHRhYmxl
LCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBhdXRvIG5ld1RhYmxlID0gIFJlbmRlclRhYmxl
OjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoKnRoaXMpOworICAgICAgICAgICAg
dGFibGUgPSBuZXdUYWJsZS5nZXQoKTsKKyAgICAgICAgICAgIGFkZENoaWxkKFdURk1vdmUobmV3
VGFibGUpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIH0KLSAgICAgICAgdGFibGUtPmFkZENoaWxk
KG5ld0NoaWxkKTsKKworICAgICAgICB0YWJsZS0+YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCkp
OwogICAgIH0gZWxzZQotICAgICAgICBpbnNlcnRDaGlsZEludGVybmFsKG5ld0NoaWxkLCBiZWZv
cmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICBpbnNlcnRDaGlsZEludGVybmFsKFdU
Rk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwogCi0gICAgaWYg
KGlzPFJlbmRlclRleHQ+KCpuZXdDaGlsZCkpCi0gICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+
KCpuZXdDaGlsZCkuc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlRXF1YWwsIG51bGxwdHIp
OworICAgIGlmIChpczxSZW5kZXJUZXh0PihjaGlsZCkpCisgICAgICAgIGRvd25jYXN0PFJlbmRl
clRleHQ+KGNoaWxkKS5zdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2VFcXVhbCwgbnVsbHB0
cik7CiAKICAgICAvLyBTVkcgY3JlYXRlcyByZW5kZXJlcnMgZm9yIDxnIGRpc3BsYXk9Im5vbmUi
PiwgYXMgU1ZHIHJlcXVpcmVzIGNoaWxkcmVuIG9mIGhpZGRlbgogICAgIC8vIDxnPnMgdG8gaGF2
ZSByZW5kZXJlcnMgLSBhdCBsZWFzdCB0aGF0J3MgaG93IG91ciBpbXBsZW1lbnRhdGlvbiB3b3Jr
cy4gQ29uc2lkZXI6CkBAIC00ODEsMjIgKzQ4NCwzMCBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmFk
ZENoaWxkKFJlbmRlck9iamVjCiAgICAgLy8gICBrbm93IHRoYXQgaXQncyBpbnNpZGUgYSAiaGlk
ZGVuIFNWRyBzdWJ0cmVlIiwgYW5kIHRodXMgcGFpbnRzLCBldmVuIGlmIGl0IHNob3VsZG4ndC4K
ICAgICAvLyBUbyBhdm9pZCB0aGUgcHJvYmxlbSBhbGx0b2dldGhlciwgZGV0ZWN0IGVhcmx5IGlm
IHdlJ3JlIGluc2lkZSBhIGhpZGRlbiBTVkcgc3VidHJlZQogICAgIC8vIGFuZCBzdG9wIGNyZWF0
aW5nIGxheWVycyBhdCBhbGwgZm9yIHRoZXNlIGNhc2VzIC0gdGhleSdyZSBub3QgdXNlZCBhbnl3
YXlzLgotICAgIGlmIChuZXdDaGlsZC0+aGFzTGF5ZXIoKSAmJiAhbGF5ZXJDcmVhdGlvbkFsbG93
ZWRGb3JTdWJ0cmVlKCkpCi0gICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+
KCpuZXdDaGlsZCkubGF5ZXIoKS0+cmVtb3ZlT25seVRoaXNMYXllcigpOworICAgIGlmIChjaGls
ZC5oYXNMYXllcigpICYmICFsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUoKSkKKyAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oY2hpbGQpLmxheWVyKCktPnJlbW92
ZU9ubHlUaGlzTGF5ZXIoKTsKKworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNoaWxkQWRkZWQoKnRo
aXMsIGNoaWxkKTsKK30KIAotICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNoaWxkQWRkZWQoKnRoaXMs
ICpuZXdDaGlsZCk7CitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJFbGVtZW50Ojp0YWtl
Q2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKK3sKKyAgICByZXR1cm4gcmVtb3ZlQ2hpbGRJ
bnRlcm5hbChvbGRDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwogfQogCi12b2lkIFJlbmRlckVsZW1l
bnQ6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCit2b2lkIFJlbmRlckVsZW1l
bnQ6OnJlbW92ZUFuZERlc3Ryb3lDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQogewotICAg
IHJlbW92ZUNoaWxkSW50ZXJuYWwob2xkQ2hpbGQsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICB0YWtl
Q2hpbGQob2xkQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlckVsZW1lbnQ6OmRlc3Ryb3lMZWZ0b3Zl
ckNoaWxkcmVuKCkKIHsKICAgICB3aGlsZSAobV9maXJzdENoaWxkKSB7CiAgICAgICAgIGlmICht
X2ZpcnN0Q2hpbGQtPnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSICYmICFtX2Zp
cnN0Q2hpbGQtPmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBtX2ZpcnN0Q2hpbGQtPnJlbW92ZUZy
b21QYXJlbnQoKTsgLy8gOmZpcnN0LWxldHRlciBmcmFnbWVudCByZW5kZXJlcnMgYXJlIGRlc3Ry
b3llZCBieSB0aGVpciByZW1haW5pbmcgdGV4dCBmcmFnbWVudC4KKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBNZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICAgICAgIGF1dG8gZmlyc3RMZXR0ZXIgPSB0
YWtlQ2hpbGQoKm1fZmlyc3RDaGlsZCk7IC8vIDpmaXJzdC1sZXR0ZXIgZnJhZ21lbnQgcmVuZGVy
ZXJzIGFyZSBkZXN0cm95ZWQgYnkgdGhlaXIgcmVtYWluaW5nIHRleHQgZnJhZ21lbnQuCisgICAg
ICAgICAgICBhdXRvKiBsZWFrZWRQdHIgPSBmaXJzdExldHRlci5sZWFrUHRyKCk7CisgICAgICAg
ICAgICBVTlVTRURfUEFSQU0obGVha2VkUHRyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIERlc3Ryb3kgYW55IGFub255bW91cyBjaGlsZHJlbiByZW1haW5pbmcgaW4gdGhlIHJl
bmRlciB0cmVlLCBhcyB3ZWxsIGFzIGltcGxpY2l0IChzaGFkb3cpIERPTSBlbGVtZW50cyBsaWtl
IHRob3NlIHVzZWQgaW4gdGhlIGVuZ2luZS1iYXNlZCB0ZXh0IGZpZWxkcy4KICAgICAgICAgICAg
IGlmIChtX2ZpcnN0Q2hpbGQtPm5vZGUoKSkKQEAgLTUwNiwyNCArNTE3LDIxIEBAIHZvaWQgUmVu
ZGVyRWxlbWVudDo6ZGVzdHJveUxlZnRvdmVyQ2hpbGQKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
RWxlbWVudDo6aW5zZXJ0Q2hpbGRJbnRlcm5hbChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBOb3RpZnlDaGlsZHJlblR5cGUgbm90aWZ5Q2hpbGRyZW4p
Cit2b2lkIFJlbmRlckVsZW1lbnQ6Omluc2VydENoaWxkSW50ZXJuYWwoUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4gbmV3Q2hpbGRQdHIsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIE5vdGlmeUNo
aWxkcmVuVHlwZSBub3RpZnlDaGlsZHJlbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoIXZpZXcoKS5sYXlvdXRTdGF0ZSgpLCAiTGF5b3V0IG11c3Qgbm90IG11dGF0ZSByZW5k
ZXIgdHJlZSIpOwogCiAgICAgQVNTRVJUKGNhbkhhdmVDaGlsZHJlbigpIHx8IGNhbkhhdmVHZW5l
cmF0ZWRDaGlsZHJlbigpKTsKLSAgICBBU1NFUlQoIW5ld0NoaWxkLT5wYXJlbnQoKSk7Ci0gICAg
QVNTRVJUKCFpc1JlbmRlckJsb2NrRmxvdygpIHx8ICghbmV3Q2hpbGQtPmlzVGFibGVTZWN0aW9u
KCkgJiYgIW5ld0NoaWxkLT5pc1RhYmxlUm93KCkgJiYgIW5ld0NoaWxkLT5pc1RhYmxlQ2VsbCgp
KSk7CisgICAgQVNTRVJUKCFuZXdDaGlsZFB0ci0+cGFyZW50KCkpOworICAgIEFTU0VSVCghaXNS
ZW5kZXJCbG9ja0Zsb3coKSB8fCAoIW5ld0NoaWxkUHRyLT5pc1RhYmxlU2VjdGlvbigpICYmICFu
ZXdDaGlsZFB0ci0+aXNUYWJsZVJvdygpICYmICFuZXdDaGlsZFB0ci0+aXNUYWJsZUNlbGwoKSkp
OwogCiAgICAgd2hpbGUgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAmJiBi
ZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykKICAgICAgICAgYmVmb3JlQ2hpbGQgPSBiZWZv
cmVDaGlsZC0+cGFyZW50KCk7CiAKLSAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1
dCBpZiBpdCBkb2VzIHByZXZlbnQgcmVuZGVyIHRyZWUgY29ycnVwdGlvbgotICAgIC8vIHdoZXJl
IGNoaWxkLT5wYXJlbnQoKSBlbmRzIHVwIGJlaW5nIG93bmVyIGJ1dCBjaGlsZC0+bmV4dFNpYmxp
bmcoKS0+cGFyZW50KCkKLSAgICAvLyBpcyBub3Qgb3duZXIuCi0gICAgaWYgKGJlZm9yZUNoaWxk
ICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCghYmVmb3JlQ2hp
bGQgfHwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOworCisgICAgLy8gVGFrZSB0aGUg
b3duZXJzaGlwLgorICAgIGF1dG8qIG5ld0NoaWxkID0gbmV3Q2hpbGRQdHIubGVha1B0cigpOwog
CiAgICAgbmV3Q2hpbGQtPnNldFBhcmVudCh0aGlzKTsKIApAQCAtNTY1LDcgKzU3Myw3IEBAIHZv
aWQgUmVuZGVyRWxlbWVudDo6aW5zZXJ0Q2hpbGRJbnRlcm5hbCgKICAgICAgICAgbmV3Q2hpbGQt
PnNldEhhc091dGxpbmVBdXRvQW5jZXN0b3IoKTsKIH0KIAotdm9pZCBSZW5kZXJFbGVtZW50Ojpy
ZW1vdmVDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQsIE5vdGlmeUNoaWxkcmVu
VHlwZSBub3RpZnlDaGlsZHJlbikKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlckVsZW1l
bnQ6OnJlbW92ZUNoaWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCwgTm90aWZ5Q2hp
bGRyZW5UeXBlIG5vdGlmeUNoaWxkcmVuKQogewogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVT
U0FHRSghdmlldygpLmxheW91dFN0YXRlKCksICJMYXlvdXQgbXVzdCBub3QgbXV0YXRlIHJlbmRl
ciB0cmVlIik7CiAKQEAgLTYzOCw2ICs2NDYsOCBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnJlbW92
ZUNoaWxkSW50ZXJuYWwoCiAgICAgaWYgKGlzPFJlbmRlckxpc3RNYXJrZXI+KG9sZENoaWxkKSkK
ICAgICAgICAgQVNTRVJUKG1fcmVwYXJlbnRpbmdDaGlsZCB8fCAhZG93bmNhc3Q8UmVuZGVyTGlz
dE1hcmtlcj4ob2xkQ2hpbGQpLmxpc3RJdGVtKCkuaW5MYXlvdXQoKSk7CiAjZW5kaWYKKworICAg
IHJldHVybiBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0Pigmb2xkQ2hpbGQpOwogfQogCiBSZW5kZXJC
bG9jayogUmVuZGVyRWxlbWVudDo6Y29udGFpbmluZ0Jsb2NrRm9yRml4ZWRQb3NpdGlvbigpIGNv
bnN0CkBAIC05MzcsMTAgKzk0NywxMSBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmhhbmRsZUR5bmFt
aWNGbG9hdFBvCiAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnBh
cmVudCgpKS5jaGlsZEJlY2FtZU5vbklubGluZSgqdGhpcyk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgLy8gQW4gYW5vbnltb3VzIGJsb2NrIG11c3QgYmUgbWFkZSB0byB3cmFwIHRoaXMg
aW5saW5lLgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KCpwYXJlbnQoKSkuY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKLSAgICAgICAgICAgIHBh
cmVudCgpLT5pbnNlcnRDaGlsZEludGVybmFsKGJsb2NrLCB0aGlzLCBSZW5kZXJFbGVtZW50OjpO
b3RpZnlDaGlsZHJlbik7Ci0gICAgICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGRJbnRlcm5h
bCgqdGhpcywgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOwotICAgICAgICAgICAgYmxv
Y2stPmluc2VydENoaWxkSW50ZXJuYWwodGhpcywgbnVsbHB0ciwgUmVuZGVyRWxlbWVudDo6Tm90
aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgYXV0byBuZXdCbG9jayA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqcGFyZW50KCkpLmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgICAgICBh
dXRvJiBibG9jayA9ICpuZXdCbG9jazsKKyAgICAgICAgICAgIHBhcmVudCgpLT5pbnNlcnRDaGls
ZEludGVybmFsKFdURk1vdmUobmV3QmxvY2spLCB0aGlzLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlD
aGlsZHJlbik7CisgICAgICAgICAgICBhdXRvIG93bmVkVGhpcyA9IHBhcmVudCgpLT5yZW1vdmVD
aGlsZEludGVybmFsKCp0aGlzLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7CisgICAg
ICAgICAgICBibG9jay5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUob3duZWRUaGlzKSwgbnVs
bHB0ciwgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICB9CiAgICAgfQog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCShyZXZpc2lv
biAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlbmRl
cklubGluZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENo
aWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpIHsgcmV0dXJuIGFkZENoaWxkKG5ld0NoaWxkLCBi
ZWZvcmVDaGlsZCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+LCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7CisgICAgdmlydHVhbCB2b2lkIGFk
ZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKSB7IGFkZENoaWxkKFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHJlbW92ZUFuZERl
c3Ryb3lDaGlsZChSZW5kZXJPYmplY3QmKTsKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rp
b25zIGFyZSB1c2VkIHdoZW4gdGhlIHJlbmRlciB0cmVlIGhpZXJhcmNoeSBjaGFuZ2VzIHRvIG1h
a2Ugc3VyZSBsYXllcnMgZ2V0CiAgICAgLy8gcHJvcGVybHkgYWRkZWQgYW5kIHJlbW92ZWQuIFNp
bmNlIGNvbnRhaW5lcnNoaXAgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGFueSBzdWJjbGFzcywgYW5k
IHNpbmNlIGEgaGllcmFyY2h5CkBAIC05OCw4ICs5OSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJM
YXllciogZmluZE5leHRMYXllcihSZW5kZXJMYXllciogcGFyZW50TGF5ZXIsIFJlbmRlck9iamVj
dCogc3RhcnRQb2ludCwgYm9vbCBjaGVja1BhcmVudCA9IHRydWUpOwogCiAgICAgZW51bSBOb3Rp
ZnlDaGlsZHJlblR5cGUgeyBOb3RpZnlDaGlsZHJlbiwgRG9udE5vdGlmeUNoaWxkcmVuIH07Ci0g
ICAgdm9pZCBpbnNlcnRDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQsIE5vdGlmeUNoaWxkcmVuVHlwZSk7Ci0gICAgdm9pZCByZW1vdmVDaGlsZElu
dGVybmFsKFJlbmRlck9iamVjdCYsIE5vdGlmeUNoaWxkcmVuVHlwZSk7CisgICAgdm9pZCBpbnNl
cnRDaGlsZEludGVybmFsKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+LCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkLCBOb3RpZnlDaGlsZHJlblR5cGUpOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IHJlbW92ZUNoaWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0JiwgTm90aWZ5Q2hpbGRyZW5UeXBl
KTsKIAogICAgIHZpcnR1YWwgUmVuZGVyRWxlbWVudCogaG92ZXJBbmNlc3RvcigpIGNvbnN0Owog
CkBAIC0yODIsNiArMjgzLDggQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbm9Mb25nZXJBZmZlY3Rz
UGFyZW50QmxvY2soKSBjb25zdCB7IHJldHVybiBzX25vTG9uZ2VyQWZmZWN0c1BhcmVudEJsb2Nr
OyB9CiAgICAgYm9vbCBpc1Zpc2libGVJblZpZXdwb3J0KCkgY29uc3Q7CiAKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVD4gVCYgYmFzZUFkZENoaWxkKFJlbmRlclB0cjxUPiBuZXdDaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpOworCiBwcml2YXRlOgogICAg
IFJlbmRlckVsZW1lbnQoQ29udGFpbmVyTm9kZSYsIFJlbmRlclN0eWxlJiYsIEJhc2VUeXBlRmxh
Z3MpOwogICAgIHZvaWQgbm9kZSgpIGNvbnN0ID0gZGVsZXRlOwpAQCAtMzU4LDYgKzM2MSwxNCBA
QCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIH07CiAKK3RlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUPgor
VCYgUmVuZGVyRWxlbWVudDo6YmFzZUFkZENoaWxkKFJlbmRlclB0cjxUPiBuZXdDaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBhdXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsK
KyAgICBkb3duY2FzdDxSPih0aGlzKS0+Ujo6YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJl
Zm9yZUNoaWxkKTsKKyAgICByZXR1cm4gY2hpbGQ7Cit9CisKIGlubGluZSB2b2lkIFJlbmRlckVs
ZW1lbnQ6OnNldEFuY2VzdG9yTGluZUJveERpcnR5KGJvb2wgZikKIHsKICAgICBtX2FuY2VzdG9y
TGluZUJveERpcnR5ID0gZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
dWxsU2NyZWVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnVsbFNjcmVlbi5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NiBAQCBSZW5kZXJGdWxsU2NyZWVuOjpSZW5kZXJGdWxsU2NyZWVuKERvY3VtCiB2b2lkIFJlbmRl
ckZ1bGxTY3JlZW46OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAgaWYgKG1fcGxhY2Vob2xkZXIp
IHsKLSAgICAgICAgcmVtb3ZlRnJvbVBhcmVudCgpOwogICAgICAgICBpZiAoIW1fcGxhY2Vob2xk
ZXItPmJlaW5nRGVzdHJveWVkKCkpCiAgICAgICAgICAgICBtX3BsYWNlaG9sZGVyLT5kZXN0cm95
KCk7CiAgICAgICAgIEFTU0VSVCghbV9wbGFjZWhvbGRlcik7CkBAIC0xMDQsMzggKzEwMyw1MyBA
QCBzdGF0aWMgUmVuZGVyU3R5bGUgY3JlYXRlRnVsbFNjcmVlblN0eWxlCiAgICAgcmV0dXJuIGZ1
bGxzY3JlZW5TdHlsZTsKIH0KIAotUmVuZGVyRnVsbFNjcmVlbiogUmVuZGVyRnVsbFNjcmVlbjo6
d3JhcFJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJFbGVtZW50KiBwYXJlbnQs
IERvY3VtZW50JiBkb2N1bWVudCkKK1JlbmRlclB0cjxSZW5kZXJGdWxsU2NyZWVuPiBSZW5kZXJG
dWxsU2NyZWVuOjp3cmFwTmV3UmVuZGVyZXIoUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IHJlbmRl
cmVyLCBSZW5kZXJFbGVtZW50JiBwYXJlbnQsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBS
ZW5kZXJGdWxsU2NyZWVuKiBmdWxsc2NyZWVuUmVuZGVyZXIgPSBuZXcgUmVuZGVyRnVsbFNjcmVl
bihkb2N1bWVudCwgY3JlYXRlRnVsbFNjcmVlblN0eWxlKCkpOwotICAgIGZ1bGxzY3JlZW5SZW5k
ZXJlci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgaWYgKHBhcmVudCAmJiAhcGFyZW50LT5pc0No
aWxkQWxsb3dlZCgqZnVsbHNjcmVlblJlbmRlcmVyLCBmdWxsc2NyZWVuUmVuZGVyZXItPnN0eWxl
KCkpKSB7Ci0gICAgICAgIGZ1bGxzY3JlZW5SZW5kZXJlci0+ZGVzdHJveSgpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG9iamVjdCkgewotICAgICAgICAvLyB8b2JqZWN0LT5w
YXJlbnQoKXwgY2FuIGJlIG51bGwgaWYgdGhlIG9iamVjdCBpcyBub3QgeWV0IGF0dGFjaGVkCi0g
ICAgICAgIC8vIHRvIHxwYXJlbnR8LgotICAgICAgICBpZiAoUmVuZGVyRWxlbWVudCogcGFyZW50
ID0gb2JqZWN0LT5wYXJlbnQoKSkgewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5p
bmdCbG9jayA9IG9iamVjdC0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
Y29udGFpbmluZ0Jsb2NrKTsKLSAgICAgICAgICAgIC8vIFNpbmNlIHdlIGFyZSBtb3ZpbmcgdGhl
IHxvYmplY3R8IHRvIGEgbmV3IHBhcmVudCB8ZnVsbHNjcmVlblJlbmRlcmVyfCwKLSAgICAgICAg
ICAgIC8vIHRoZSBsaW5lIGJveCB0cmVlIHVuZGVybmVhdGggb3VyIHxjb250YWluaW5nQmxvY2t8
IGlzIG5vdCBsb25nZXIgdmFsaWQuCi0gICAgICAgICAgICBjb250YWluaW5nQmxvY2stPmRlbGV0
ZUxpbmVzKCk7Ci0KLSAgICAgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoZnVsbHNjcmVlblJlbmRl
cmVyLCBvYmplY3QpOwotICAgICAgICAgICAgb2JqZWN0LT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEFsd2F5cyBqdXN0IGRvIGEgZnVsbCBsYXlvdXQg
dG8gZW5zdXJlIHRoYXQgbGluZSBib3hlcyBnZXQgZGVsZXRlZCBwcm9wZXJseS4KLSAgICAgICAg
ICAgIC8vIEJlY2F1c2Ugb2JqZWN0cyBtb3ZlZCBmcm9tIHxwYXJlbnR8IHRvIHxmdWxsc2NyZWVu
UmVuZGVyZXJ8LCB3ZSB3YW50IHRvCi0gICAgICAgICAgICAvLyBtYWtlIG5ldyBsaW5lIGJveGVz
IGluc3RlYWQgb2YgbGVhdmluZyB0aGUgb2xkIG9uZXMgYXJvdW5kLgotICAgICAgICAgICAgcGFy
ZW50LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICAgICAgICAgIGNv
bnRhaW5pbmdCbG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZnVsbHNjcmVlblJlbmRlcmVyLT5hZGRDaGlsZChvYmplY3QpOwotICAg
ICAgICBmdWxsc2NyZWVuUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwotICAgIH0KLSAgICBkb2N1bWVudC5zZXRGdWxsU2NyZWVuUmVuZGVyZXIoZnVsbHNjcmVl
blJlbmRlcmVyKTsKLSAgICByZXR1cm4gZnVsbHNjcmVlblJlbmRlcmVyOworICAgIGF1dG8gbmV3
RnVsbHNjcmVlblJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyRnVsbFNjcmVlbj4oZG9j
dW1lbnQsIGNyZWF0ZUZ1bGxTY3JlZW5TdHlsZSgpKTsKKyAgICBuZXdGdWxsc2NyZWVuUmVuZGVy
ZXItPmluaXRpYWxpemVTdHlsZSgpOworCisgICAgYXV0byYgZnVsbHNjcmVlblJlbmRlcmVyID0g
Km5ld0Z1bGxzY3JlZW5SZW5kZXJlcjsKKyAgICBpZiAoIXBhcmVudC5pc0NoaWxkQWxsb3dlZChm
dWxsc2NyZWVuUmVuZGVyZXIsIGZ1bGxzY3JlZW5SZW5kZXJlci5zdHlsZSgpKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBmdWxsc2NyZWVuUmVuZGVyZXIuYWRkQ2hpbGQoV1RGTW92
ZShyZW5kZXJlcikpOworICAgIGZ1bGxzY3JlZW5SZW5kZXJlci5zZXROZWVkc0xheW91dEFuZFBy
ZWZXaWR0aHNSZWNhbGMoKTsKKworICAgIGRvY3VtZW50LnNldEZ1bGxTY3JlZW5SZW5kZXJlcigm
ZnVsbHNjcmVlblJlbmRlcmVyKTsKKworICAgIHJldHVybiBuZXdGdWxsc2NyZWVuUmVuZGVyZXI7
Cit9CisKK3ZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6d3JhcEV4aXN0aW5nUmVuZGVyZXIoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBhdXRvIG5ld0Z1
bGxzY3JlZW5SZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckZ1bGxTY3JlZW4+KGRvY3Vt
ZW50LCBjcmVhdGVGdWxsU2NyZWVuU3R5bGUoKSk7CisgICAgbmV3RnVsbHNjcmVlblJlbmRlcmVy
LT5pbml0aWFsaXplU3R5bGUoKTsKKworICAgIGF1dG8mIGZ1bGxzY3JlZW5SZW5kZXJlciA9ICpu
ZXdGdWxsc2NyZWVuUmVuZGVyZXI7CisgICAgYXV0byYgcGFyZW50ID0gKnJlbmRlcmVyLnBhcmVu
dCgpOworICAgIGlmICghcGFyZW50LmlzQ2hpbGRBbGxvd2VkKGZ1bGxzY3JlZW5SZW5kZXJlciwg
ZnVsbHNjcmVlblJlbmRlcmVyLnN0eWxlKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5k
ZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Cisg
ICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jayk7CisgICAgLy8gU2luY2Ugd2UgYXJlIG1vdmluZyB0
aGUgfG9iamVjdHwgdG8gYSBuZXcgcGFyZW50IHxmdWxsc2NyZWVuUmVuZGVyZXJ8LAorICAgIC8v
IHRoZSBsaW5lIGJveCB0cmVlIHVuZGVybmVhdGggb3VyIHxjb250YWluaW5nQmxvY2t8IGlzIG5v
dCBsb25nZXIgdmFsaWQuCisgICAgY29udGFpbmluZ0Jsb2NrLT5kZWxldGVMaW5lcygpOworCisg
ICAgcGFyZW50LmFkZENoaWxkKFdURk1vdmUobmV3RnVsbHNjcmVlblJlbmRlcmVyKSwgJnJlbmRl
cmVyKTsKKworICAgIGF1dG8gdG9Nb3ZlID0gcGFyZW50LnRha2VDaGlsZChyZW5kZXJlcik7CisK
KyAgICAvLyBBbHdheXMganVzdCBkbyBhIGZ1bGwgbGF5b3V0IHRvIGVuc3VyZSB0aGF0IGxpbmUg
Ym94ZXMgZ2V0IGRlbGV0ZWQgcHJvcGVybHkuCisgICAgLy8gQmVjYXVzZSBvYmplY3RzIG1vdmVk
IGZyb20gfHBhcmVudHwgdG8gfGZ1bGxzY3JlZW5SZW5kZXJlcnwsIHdlIHdhbnQgdG8KKyAgICAv
LyBtYWtlIG5ldyBsaW5lIGJveGVzIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgb2xkIG9uZXMgYXJv
dW5kLgorICAgIHBhcmVudC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAg
ICBjb250YWluaW5nQmxvY2stPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwor
CisgICAgZnVsbHNjcmVlblJlbmRlcmVyLmFkZENoaWxkKFdURk1vdmUodG9Nb3ZlKSk7CisgICAg
ZnVsbHNjcmVlblJlbmRlcmVyLnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwor
CisgICAgZG9jdW1lbnQuc2V0RnVsbFNjcmVlblJlbmRlcmVyKCZmdWxsc2NyZWVuUmVuZGVyZXIp
OwogfQogCiB2b2lkIFJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKGJvb2wmIHJlcXVp
cmVzUmVuZGVyVHJlZVJlYnVpbGQpCkBAIC0xNTksOCArMTczLDcgQEAgdm9pZCBSZW5kZXJGdWxs
U2NyZWVuOjp1bndyYXBSZW5kZXJlcihibwogICAgICAgICAgICAgICAgIGlmIChhdXRvKiBub25B
bm9ueW1vdXNDaGlsZCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY2hpbGQpLmZpcnN0Q2hpbGQo
KSkKICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBub25Bbm9ueW1vdXNDaGlsZDsKICAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnJlbW92ZUZyb21Q
YXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQtPmRlc3Ryb3koKTsKKyAgICAgICAg
ICAgICAgICAgICAgY2hpbGQtPnJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTE2OSwxNSArMTgyLDE2IEBAIHZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6dW53cmFwUmVuZGVy
ZXIoYm8KICAgICAgICAgICAgIC8vIGx5aW5nIGFyb3VuZCBvbiB0aGUgY2hpbGQuCiAgICAgICAg
ICAgICBpZiAoaXM8UmVuZGVyQm94PigqY2hpbGQpKQogICAgICAgICAgICAgICAgIGRvd25jYXN0
PFJlbmRlckJveD4oKmNoaWxkKS5jbGVhck92ZXJyaWRlU2l6ZSgpOwotICAgICAgICAgICAgY2hp
bGQtPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICAgICAgICAgIHBhcmVudCgpLT5hZGRDaGlsZChj
aGlsZCwgdGhpcyk7CisgICAgICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gY2hpbGQtPnBhcmVu
dCgpLT50YWtlQ2hpbGQoKmNoaWxkKTsKKyAgICAgICAgICAgIHBhcmVudCgpLT5hZGRDaGlsZChX
VEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgdGhpcyk7CiAgICAgICAgICAgICBwYXJlbnQoKS0+c2V0TmVl
ZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYg
KHBsYWNlaG9sZGVyKCkpCi0gICAgICAgIHBsYWNlaG9sZGVyKCktPnJlbW92ZUZyb21QYXJlbnQo
KTsKLSAgICByZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgZG9jdW1lbnQoKS5zZXRGdWxsU2NyZWVu
UmVuZGVyZXIoMCk7CisgICAgICAgIHBsYWNlaG9sZGVyKCktPnJlbW92ZUZyb21QYXJlbnRBbmRE
ZXN0cm95KCk7CisKKyAgICBkb2N1bWVudCgpLnNldEZ1bGxTY3JlZW5SZW5kZXJlcihudWxscHRy
KTsKKyAgICByZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOwogfQogCiB2b2lkIFJlbmRlckZ1
bGxTY3JlZW46OnNldFBsYWNlaG9sZGVyKFJlbmRlckJsb2NrKiBwbGFjZWhvbGRlcikKQEAgLTE5
NywxMiArMjExLDE2IEBAIHZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6Y3JlYXRlUGxhY2Vob2xkZXIK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcGxhY2Vob2xkZXIgPSBuZXcgUmVuZGVy
RnVsbFNjcmVlblBsYWNlaG9sZGVyKCp0aGlzLCBXVEZNb3ZlKCpzdHlsZSkpOwotICAgIG1fcGxh
Y2Vob2xkZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIGlmIChwYXJlbnQoKSkgewotICAgICAg
ICBwYXJlbnQoKS0+YWRkQ2hpbGQobV9wbGFjZWhvbGRlciwgdGhpcyk7Ci0gICAgICAgIHBhcmVu
dCgpLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICB9CisgICAgaWYg
KCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBuZXdQbGFjZWhvbGRlciA9
IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckZ1bGxTY3JlZW5QbGFjZWhvbGRlcj4oKnRoaXMsIFdURk1v
dmUoKnN0eWxlKSk7CisgICAgbmV3UGxhY2Vob2xkZXItPmluaXRpYWxpemVTdHlsZSgpOworCisg
ICAgbV9wbGFjZWhvbGRlciA9IG5ld1BsYWNlaG9sZGVyLmdldCgpOworCisgICAgcGFyZW50KCkt
PmFkZENoaWxkKFdURk1vdmUobmV3UGxhY2Vob2xkZXIpLCB0aGlzKTsKKyAgICBwYXJlbnQoKS0+
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaAkocmV2aXNpb24gMjIyNjA3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyQmxvY2sqIHBsYWNl
aG9sZGVyKCkgeyByZXR1cm4gbV9wbGFjZWhvbGRlcjsgfQogICAgIHZvaWQgY3JlYXRlUGxhY2Vo
b2xkZXIoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiwgY29uc3QgTGF5b3V0UmVjdCYgZnJh
bWVSZWN0KTsKIAotICAgIHN0YXRpYyBSZW5kZXJGdWxsU2NyZWVuKiB3cmFwUmVuZGVyZXIoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyRWxlbWVudCosIERvY3VtZW50Jik7CisgICAgc3RhdGljIFJlbmRl
clB0cjxSZW5kZXJGdWxsU2NyZWVuPiB3cmFwTmV3UmVuZGVyZXIoUmVuZGVyUHRyPFJlbmRlckVs
ZW1lbnQ+LCBSZW5kZXJFbGVtZW50JiBwYXJlbnQsIERvY3VtZW50Jik7CisgICAgc3RhdGljIHZv
aWQgd3JhcEV4aXN0aW5nUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYsIERvY3VtZW50Jik7CiAgICAg
dm9pZCB1bndyYXBSZW5kZXJlcihib29sJiByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkKTsKIAog
ICAgIEl0ZW1Qb3NpdGlvbiBzZWxmQWxpZ25tZW50Tm9ybWFsQmVoYXZpb3IoY29uc3QgUmVuZGVy
Qm94KiA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEl0ZW1Qb3NpdGlvbkNlbnRl
cjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAkocmV2aXNp
b24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NiwxMyArNjYsMTMgQEAgUmVuZGVyR3JpZDo6flJlbmRlckdyaWQo
KQogewogfQogCi12b2lkIFJlbmRlckdyaWQ6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlckdyaWQ6OmFkZENoaWxk
KFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkKQogewotICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQp
OworICAgIGF1dG8mIGNoaWxkID0gYmFzZUFkZENoaWxkPFJlbmRlckJsb2NrPihXVEZNb3ZlKG5l
d0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogCiAgICAgLy8gUG9zaXRpb25lZCBncmlkIGl0ZW1zIGRv
IG5vdCB0YWtlIHVwIHNwYWNlIG9yIG90aGVyd2lzZSBwYXJ0aWNpcGF0ZSBpbiB0aGUgbGF5b3V0
IG9mIHRoZSBncmlkLAogICAgIC8vIGZvciB0aGF0IHJlYXNvbiB3ZSBkb24ndCBuZWVkIHRvIG1h
cmsgdGhlIGdyaWQgYXMgZGlydHkgd2hlbiB0aGV5IGFyZSBhZGRlZC4KLSAgICBpZiAobmV3Q2hp
bGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGlmIChjaGlsZC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIGdyaWQgbmVlZHMgdG8g
YmUgcmVjb21wdXRlZCBhcyBpdCBtaWdodCBjb250YWluIGF1dG8tcGxhY2VkIGl0ZW1zIHRoYXQK
QEAgLTgwLDE4ICs4MCwxOSBAQCB2b2lkIFJlbmRlckdyaWQ6OmFkZENoaWxkKFJlbmRlck9iamVj
dCogCiAgICAgZGlydHlHcmlkKCk7CiB9CiAKLXZvaWQgUmVuZGVyR3JpZDo6cmVtb3ZlQ2hpbGQo
UmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlckdyaWQ6
OnRha2VDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQogewotICAgIFJlbmRlckJsb2NrOjpyZW1v
dmVDaGlsZChjaGlsZCk7CisgICAgYXV0byB0YWtlbkNoaWxkID0gUmVuZGVyQmxvY2s6OnRha2VD
aGlsZChjaGlsZCk7CiAKICAgICAvLyBQb3NpdGlvbmVkIGdyaWQgaXRlbXMgZG8gbm90IHRha2Ug
dXAgc3BhY2Ugb3Igb3RoZXJ3aXNlIHBhcnRpY2lwYXRlIGluIHRoZSBsYXlvdXQgb2YgdGhlIGdy
aWQsCiAgICAgLy8gZm9yIHRoYXQgcmVhc29uIHdlIGRvbid0IG5lZWQgdG8gbWFyayB0aGUgZ3Jp
ZCBhcyBkaXJ0eSB3aGVuIHRoZXkgYXJlIHJlbW92ZWQuCiAgICAgaWYgKGNoaWxkLmlzT3V0T2ZG
bG93UG9zaXRpb25lZCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0YWtlbkNo
aWxkOwogCiAgICAgLy8gVGhlIGdyaWQgbmVlZHMgdG8gYmUgcmVjb21wdXRlZCBhcyBpdCBtaWdo
dCBjb250YWluIGF1dG8tcGxhY2VkIGl0ZW1zIHRoYXQKICAgICAvLyB3aWxsIGNoYW5nZSB0aGVp
ciBwb3NpdGlvbi4KICAgICBkaXJ0eUdyaWQoKTsKKyAgICByZXR1cm4gdGFrZW5DaGlsZDsKIH0K
IAogU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBSZW5kZXJHcmlkOjpzZWxmQWxpZ25tZW50Rm9yQ2hp
bGQoR3JpZEF4aXMgYXhpcywgY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgY29uc3QgUmVuZGVyU3R5
bGUqIGdyaWRTdHlsZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdy
aWQuaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuaAkod29ya2luZyBjb3B5KQpAQCAtNzksOCArNzksOCBAQCBwcml2YXRlOgogICAgIGJv
b2wgaXNSZW5kZXJHcmlkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZv
aWQgY29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdp
ZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
dm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYpIGZpbmFs
OworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIGZpbmFsOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBmaW5hbDsKIAogICAgIFN0eWxlU2VsZkFsaWdu
bWVudERhdGEgc2VsZkFsaWdubWVudEZvckNoaWxkKEdyaWRBeGlzLCBjb25zdCBSZW5kZXJCb3gm
LCBjb25zdCBSZW5kZXJTdHlsZSogPSBudWxscHRyKSBjb25zdDsKICAgICBib29sIHNlbGZBbGln
bm1lbnRDaGFuZ2VkVG9TdHJldGNoKEdyaWRBeGlzLCBjb25zdCBSZW5kZXJTdHlsZSYgb2xkU3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgY29uc3QgUmVuZGVyQm94JikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNp
b24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3MCwxNCArMjcwLDE2IEBAIExheW91dFJlY3QgUmVuZGVySW5s
aW5lOjpsb2NhbENhcmV0UmVjdCgKICAgICByZXR1cm4gY2FyZXRSZWN0OwogfQogCi12b2lkIFJl
bmRlcklubGluZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZChSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBh
dXRvKiBiZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIgPSBiZWZvcmVDaGlsZDsKICAgICBpZiAoYXV0
byogZnJhZ21lbnRlZEZsb3cgPSBlbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpKQogICAgICAgICBi
ZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIgPSBmcmFnbWVudGVkRmxvdy0+cmVzb2x2ZU1vdmVkQ2hp
bGQoYmVmb3JlQ2hpbGQpOwotICAgIGlmIChjb250aW51YXRpb24oKSkKLSAgICAgICAgcmV0dXJu
IGFkZENoaWxkVG9Db250aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkT3JQbGFjZWhvbGRl
cik7Ci0gICAgcmV0dXJuIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQsIGJl
Zm9yZUNoaWxkT3JQbGFjZWhvbGRlcik7CisgICAgaWYgKGNvbnRpbnVhdGlvbigpKSB7CisgICAg
ICAgIGFkZENoaWxkVG9Db250aW51YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxk
T3JQbGFjZWhvbGRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGRPclBsYWNlaG9s
ZGVyKTsKIH0KIAogc3RhdGljIFJlbmRlckJveE1vZGVsT2JqZWN0KiBuZXh0Q29udGludWF0aW9u
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCkBAIC0zMTgsNyArMzIwLDcgQEAgc3RhdGljIGJvb2wg
bmV3Q2hpbGRJc0lubGluZShjb25zdCBSZW5kZQogICAgIHJldHVybiBuZXdDaGlsZC5pc0lubGlu
ZSgpIHwgKHBhcmVudC5jaGlsZFJlcXVpcmVzVGFibGUobmV3Q2hpbGQpICYmIHBhcmVudC5zdHls
ZSgpLmRpc3BsYXkoKSA9PSBJTkxJTkUpOwogfQogCi12b2lkIFJlbmRlcklubGluZTo6YWRkQ2hp
bGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxkSWdub3JpbmdDb250
aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGFwcGVuZCB0aGluZ3Mg
YWZ0ZXIgOmFmdGVyLWdlbmVyYXRlZCBjb250ZW50IGlmIHdlIGhhdmUgaXQuCiAgICAgaWYgKCFi
ZWZvcmVDaGlsZCAmJiBpc0FmdGVyQ29udGVudChsYXN0Q2hpbGQoKSkpCkBAIC0zMzgsMTcgKzM0
MCwxOCBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpCiAgICAgICAg
IGlmIChhdXRvIHBvc2l0aW9uZWRBbmNlc3RvciA9IGluRmxvd1Bvc2l0aW9uZWRJbmxpbmVBbmNl
c3Rvcih0aGlzKSkKICAgICAgICAgICAgIG5ld1N0eWxlLnNldFBvc2l0aW9uKHBvc2l0aW9uZWRB
bmNlc3Rvci0+c3R5bGUoKS5wb3NpdGlvbigpKTsKIAotICAgICAgICBSZW5kZXJCbG9jayogbmV3
Qm94ID0gbmV3IFJlbmRlckJsb2NrRmxvdyhkb2N1bWVudCgpLCBXVEZNb3ZlKG5ld1N0eWxlKSk7
CisgICAgICAgIGF1dG8gbmV3Qm94ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93Pihk
b2N1bWVudCgpLCBXVEZNb3ZlKG5ld1N0eWxlKSk7CiAgICAgICAgIG5ld0JveC0+aW5pdGlhbGl6
ZVN0eWxlKCk7CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250aW51YXRpb24g
PSBjb250aW51YXRpb24oKTsKLSAgICAgICAgc2V0Q29udGludWF0aW9uKG5ld0JveCk7CisgICAg
ICAgIHNldENvbnRpbnVhdGlvbihuZXdCb3guZ2V0KCkpOwogCi0gICAgICAgIHNwbGl0Rmxvdyhi
ZWZvcmVDaGlsZCwgbmV3Qm94LCBuZXdDaGlsZCwgb2xkQ29udGludWF0aW9uKTsKKyAgICAgICAg
c3BsaXRGbG93KGJlZm9yZUNoaWxkLCBXVEZNb3ZlKG5ld0JveCksIFdURk1vdmUobmV3Q2hpbGQp
LCBvbGRDb250aW51YXRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0OjphZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwotICAg
IG5ld0NoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKworICAgIGF1
dG8mIGNoaWxkID0gKm5ld0NoaWxkOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0OjphZGRDaGls
ZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOworICAgIGNoaWxkLnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCiBSZW5kZXJQdHI8UmVuZGVySW5saW5lPiBS
ZW5kZXJJbmxpbmU6OmNsb25lKCkgY29uc3QKQEAgLTQwNyw4ICs0MTAsOCBAQCB2b2lkIFJlbmRl
cklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiAgICAgICAgICAgICAvLyBGSVhNRTogV2hl
biB0aGUgYW5vbnltb3VzIHdyYXBwZXIgaGFzIG11bHRpcGxlIGNoaWxkcmVuLCB3ZSBlbmQgdXAg
dHJhdmVyc2luZyB1cCB0byB0aGUgdG9wbW9zdCB3cmFwcGVyCiAgICAgICAgICAgICAvLyBldmVy
eSB0aW1lLCB3aGljaCBpcyBhIGJpdCB3YXN0ZWZ1bC4KICAgICAgICAgfQotICAgICAgICByZW5k
ZXJlclRvTW92ZS0+cGFyZW50KCktPnJlbW92ZUNoaWxkSW50ZXJuYWwoKnJlbmRlcmVyVG9Nb3Zl
LCBOb3RpZnlDaGlsZHJlbik7Ci0gICAgICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9yaW5n
Q29udGludWF0aW9uKHJlbmRlcmVyVG9Nb3ZlKTsKKyAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9
IHJlbmRlcmVyVG9Nb3ZlLT5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGRJbnRlcm5hbCgqcmVuZGVyZXJU
b01vdmUsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdu
b3JpbmdDb250aW51YXRpb24oV1RGTW92ZShjaGlsZFRvTW92ZSkpOwogICAgICAgICByZW5kZXJl
clRvTW92ZS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIHJl
bmRlcmVyVG9Nb3ZlID0gbmV4dFNpYmxpbmc7CiAgICAgfQpAQCAtNDM1LDcgKzQzOCw3IEBAIHZv
aWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAgICAgICAgIGNsb25l
SW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3VycmVudCkuY2xvbmUoKTsKIAogICAg
ICAgICAgICAgLy8gSW5zZXJ0IG91ciBjaGlsZCBjbG9uZSBhcyB0aGUgZmlyc3QgY2hpbGQuCi0g
ICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihjbG9u
ZUNoaWxkLmxlYWtQdHIoKSk7CisgICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKGNsb25lQ2hpbGQpKTsKIAogICAgICAgICAgICAgLy8g
SG9vayB0aGUgY2xvbmUgdXAgYXMgYSBjb250aW51YXRpb24gb2YgfGN1cnJ8LgogICAgICAgICAg
ICAgUmVuZGVySW5saW5lJiBjdXJyZW50SW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigq
Y3VycmVudCk7CkBAIC00NDcsOCArNDUwLDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5s
aW5lcyhSZW5kZXJCbAogICAgICAgICAgICAgLy8gKmFmdGVyKiBjdXJyZW50Q2hpbGQgYW5kIGFw
cGVuZCB0aGVtIGFsbCB0byB0aGUgY2xvbmUuCiAgICAgICAgICAgICBmb3IgKGF1dG8qIGN1cnJl
bnQgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7IGN1cnJlbnQ7KSB7CiAgICAgICAgICAg
ICAgICAgYXV0byogbmV4dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgY3VycmVudElubGluZS5yZW1vdmVDaGlsZEludGVybmFsKCpjdXJyZW50LCBOb3RpZnlDaGls
ZHJlbik7Ci0gICAgICAgICAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250
aW51YXRpb24oY3VycmVudCk7CisgICAgICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGN1
cnJlbnRJbmxpbmUucmVtb3ZlQ2hpbGRJbnRlcm5hbCgqY3VycmVudCwgTm90aWZ5Q2hpbGRyZW4p
OworICAgICAgICAgICAgICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0
aW9uKFdURk1vdmUoY2hpbGRUb01vdmUpKTsKICAgICAgICAgICAgICAgICBjdXJyZW50LT5zZXRO
ZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgICAgICBjdXJyZW50
ID0gbmV4dDsKICAgICAgICAgICAgIH0KQEAgLTQ2NSwyNyArNDY4LDI4IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAgICAgY2xvbmVCbG9ja0NoaWxkLnJl
c2V0RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmRDaGlsZEluZm9JbmNsdWRpbmdEZXNjZW5kYW50
cygpOwogCiAgICAgLy8gTm93IHdlIGFyZSBhdCB0aGUgYmxvY2sgbGV2ZWwuIFdlIG5lZWQgdG8g
cHV0IHRoZSBjbG9uZSBpbnRvIHRoZSB0b0Jsb2NrLgotICAgIHRvQmxvY2stPmluc2VydENoaWxk
SW50ZXJuYWwoY2xvbmVJbmxpbmUubGVha1B0cigpLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7
CisgICAgdG9CbG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNsb25lSW5saW5lKSwg
bnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwogCiAgICAgLy8gTm93IHRha2UgYWxsIHRoZSBjaGls
ZHJlbiBhZnRlciBjdXJyZW50Q2hpbGQgYW5kIHJlbW92ZSB0aGVtIGZyb20gdGhlIGZyb21CbG9j
awogICAgIC8vIGFuZCBwdXQgdGhlbSBpbiB0aGUgdG9CbG9jay4KICAgICBmb3IgKGF1dG8qIGN1
cnJlbnQgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7IGN1cnJlbnQ7KSB7CiAgICAgICAg
IGF1dG8qIG5leHQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgICAgICBmcm9tQmxvY2st
PnJlbW92ZUNoaWxkSW50ZXJuYWwoKmN1cnJlbnQsIE5vdGlmeUNoaWxkcmVuKTsKLSAgICAgICAg
dG9CbG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChjdXJyZW50LCBudWxscHRyLCBOb3RpZnlDaGls
ZHJlbik7CisgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSBmcm9tQmxvY2stPnJlbW92ZUNoaWxk
SW50ZXJuYWwoKmN1cnJlbnQsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgdG9CbG9jay0+aW5z
ZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgbnVsbHB0ciwgTm90aWZ5Q2hp
bGRyZW4pOwogICAgICAgICBjdXJyZW50ID0gbmV4dDsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
SW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sq
IG5ld0Jsb2NrQm94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IG5ld0NoaWxkLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udCkKK3ZvaWQgUmVuZGVySW5s
aW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyUHRyPFJlbmRl
ckJsb2NrPiBuZXdCbG9ja0JveCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250KQogeworICAgIGF1dG8mIGFkZGVkQmxvY2tCb3gg
PSAqbmV3QmxvY2tCb3g7CiAgICAgUmVuZGVyQmxvY2sqIHByZSA9IG51bGxwdHI7CiAgICAgUmVu
ZGVyQmxvY2sqIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgCisKICAgICAvLyBEZWxl
dGUgb3VyIGxpbmUgYm94ZXMgYmVmb3JlIHdlIGRvIHRoZSBpbmxpbmUgc3BsaXQgaW50byBjb250
aW51YXRpb25zLgogICAgIGJsb2NrLT5kZWxldGVMaW5lcygpOwotICAgIAorCisgICAgUmVuZGVy
UHRyPFJlbmRlckJsb2NrPiBjcmVhdGVkUHJlOwogICAgIGJvb2wgbWFkZU5ld0JlZm9yZUJsb2Nr
ID0gZmFsc2U7CiAgICAgaWYgKGJsb2NrLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgKCFibG9jay0+
cGFyZW50KCkgfHwgIWJsb2NrLT5wYXJlbnQoKS0+Y3JlYXRlc0Fub255bW91c1dyYXBwZXIoKSkp
IHsKICAgICAgICAgLy8gV2UgY2FuIHJldXNlIHRoaXMgYmxvY2sgYW5kIG1ha2UgaXQgdGhlIHBy
ZUJsb2NrIG9mIHRoZSBuZXh0IGNvbnRpbnVhdGlvbi4KQEAgLTQ5OSwxNyArNTAzLDE5IEBAIHZv
aWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWMKICAgICAgICAgYmxvY2sgPSBi
bG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm8gYW5v
bnltb3VzIGJsb2NrIGF2YWlsYWJsZSBmb3IgdXNlLiAgTWFrZSBvbmUuCi0gICAgICAgIHByZSA9
IGJsb2NrLT5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOworICAgICAgICBjcmVhdGVkUHJlID0gYmxv
Y2stPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgIHByZSA9IGNyZWF0ZWRQcmUuZ2V0
KCk7CiAgICAgICAgIG1hZGVOZXdCZWZvcmVCbG9jayA9IHRydWU7CiAgICAgfQogCi0gICAgYXV0
byYgcG9zdCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqcHJlLT5jcmVhdGVBbm9ueW1vdXNCb3hX
aXRoU2FtZVR5cGVBcygqYmxvY2spLnJlbGVhc2UoKSk7CisgICAgYXV0byBjcmVhdGVkUG9zdCA9
IHByZS0+Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoKmJsb2NrKTsKKyAgICBhdXRv
JiBwb3N0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjcmVhdGVkUG9zdCk7CiAKICAgICBSZW5k
ZXJPYmplY3QqIGJveEZpcnN0ID0gbWFkZU5ld0JlZm9yZUJsb2NrID8gYmxvY2stPmZpcnN0Q2hp
bGQoKSA6IHByZS0+bmV4dFNpYmxpbmcoKTsKLSAgICBpZiAobWFkZU5ld0JlZm9yZUJsb2NrKQot
ICAgICAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChwcmUsIGJveEZpcnN0LCBOb3RpZnlD
aGlsZHJlbik7Ci0gICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwobmV3QmxvY2tCb3gsIGJv
eEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7Ci0gICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwo
JnBvc3QsIGJveEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7CisgICAgaWYgKGNyZWF0ZWRQcmUpCisg
ICAgICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY3JlYXRlZFByZSksIGJv
eEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7CisgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwo
V1RGTW92ZShuZXdCbG9ja0JveCksIGJveEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7CisgICAgYmxv
Y2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjcmVhdGVkUG9zdCksIGJveEZpcnN0LCBO
b3RpZnlDaGlsZHJlbik7CiAgICAgYmxvY2stPnNldENoaWxkcmVuSW5saW5lKGZhbHNlKTsKICAg
ICAKICAgICBpZiAobWFkZU5ld0JlZm9yZUJsb2NrKSB7CkBAIC01MTcsMjIgKzUyMywyMiBAQCB2
b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjCiAgICAgICAgIHdoaWxlIChv
KSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAgICAgICAgICAgIG8gPSBu
by0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVDaGlsZEludGVybmFs
KCpubywgTm90aWZ5Q2hpbGRyZW4pOwotICAgICAgICAgICAgcHJlLT5pbnNlcnRDaGlsZEludGVy
bmFsKG5vLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAgICAgICBhdXRvIGNoaWxk
VG9Nb3ZlID0gYmxvY2stPnJlbW92ZUNoaWxkSW50ZXJuYWwoKm5vLCBOb3RpZnlDaGlsZHJlbik7
CisgICAgICAgICAgICBwcmUtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjaGlsZFRvTW92
ZSksIG51bGxwdHIsIE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIG5vLT5zZXROZWVkc0xh
eW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHNwbGl0
SW5saW5lcyhwcmUsICZwb3N0LCBuZXdCbG9ja0JveCwgYmVmb3JlQ2hpbGQsIG9sZENvbnQpOwor
ICAgIHNwbGl0SW5saW5lcyhwcmUsICZwb3N0LCAmYWRkZWRCbG9ja0JveCwgYmVmb3JlQ2hpbGQs
IG9sZENvbnQpOwogCiAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoZSBuZXdCbG9ja0JveCBpc24n
dCBnb2luZyB0byBjb250YWluIGlubGluZSBraWRzLCBzbyBhdm9pZCB3YXN0aW5nCiAgICAgLy8g
dGltZSBpbiBtYWtlQ2hpbGRyZW5Ob25JbmxpbmUgYnkganVzdCBzZXR0aW5nIHRoaXMgZXhwbGlj
aXRseSB1cCBmcm9udC4KLSAgICBuZXdCbG9ja0JveC0+c2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2Up
OworICAgIGFkZGVkQmxvY2tCb3guc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogCiAgICAgLy8g
V2UgZGVsYXllZCBhZGRpbmcgdGhlIG5ld0NoaWxkIHVudGlsIG5vdyBzbyB0aGF0IHRoZSB8bmV3
QmxvY2tCb3h8IHdvdWxkIGJlIGZ1bGx5CiAgICAgLy8gY29ubmVjdGVkLCB0aHVzIGFsbG93aW5n
IG5ld0NoaWxkIGFjY2VzcyB0byBhIHJlbmRlckFyZW5hIHNob3VsZCBpdCBuZWVkCiAgICAgLy8g
dG8gd3JhcCBpdHNlbGYgaW4gYWRkaXRpb25hbCBib3hlcyAoZS5nLiwgdGFibGUgY29uc3RydWN0
aW9uKS4KLSAgICBuZXdCbG9ja0JveC0+YWRkQ2hpbGQobmV3Q2hpbGQpOworICAgIGFkZGVkQmxv
Y2tCb3guYWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCkpOwogCiAgICAgLy8gQWx3YXlzIGp1c3Qg
ZG8gYSBmdWxsIGxheW91dCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBsaW5lIGJveGVzIChlc3Bl
Y2lhbGx5IHdyYXBwZXJzIGZvciBpbWFnZXMpCiAgICAgLy8gZ2V0IGRlbGV0ZWQgcHJvcGVybHku
ICBCZWNhdXNlIG9iamVjdHMgbW92ZXMgZnJvbSB0aGUgcHJlIGJsb2NrIGludG8gdGhlIHBvc3Qg
YmxvY2ssIHdlIHdhbnQgdG8KQEAgLTU1Myw3ICs1NTksNyBAQCBzdGF0aWMgYm9vbCBjYW5Vc2VB
c1BhcmVudEZvckNvbnRpbnVhdGlvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVy
SW5saW5lOjphZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0Nv
bnRpbnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKIHsKICAgICBhdXRvKiBmbG93ID0gY29udGludWF0aW9uQmVmb3JlKGJl
Zm9yZUNoaWxkKTsKICAgICAvLyBJdCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgZGlyZWN0IHBhcmVu
dCBvZiB0aGUgYmVmb3JlQ2hpbGQuCkBAIC01NzgsMjAgKzU4NCwyMCBAQCB2b2lkIFJlbmRlcklu
bGluZTo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogCiAgICAgaWYgKG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
Ci0gICAgICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29u
dGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybiBiZWZvcmVD
aGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hp
bGQpLCBiZWZvcmVDaGlsZCk7CiAKICAgICBpZiAoZmxvdyA9PSBiZWZvcmVDaGlsZEFuY2VzdG9y
KQotICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdD
aGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgIC8vIEEg
Y29udGludWF0aW9uIGFsd2F5cyBjb25zaXN0cyBvZiB0d28gcG90ZW50aWFsIGNhbmRpZGF0ZXM6
IGFuIGlubGluZSBvciBhbiBhbm9ueW1vdXMKICAgICAvLyBibG9jayBib3ggaG9sZGluZyBibG9j
ayBjaGlsZHJlbi4KICAgICBib29sIGNoaWxkSW5saW5lID0gbmV3Q2hpbGRJc0lubGluZSgqbmV3
Q2hpbGQsICp0aGlzKTsKICAgICAvLyBUaGUgZ29hbCBoZXJlIGlzIHRvIG1hdGNoIHVwIGlmIHdl
IGNhbiwgc28gdGhhdCB3ZSBjYW4gY29hbGVzY2UgYW5kIGNyZWF0ZSB0aGUKICAgICAvLyBtaW5p
bWFsICMgb2YgY29udGludWF0aW9ucyBuZWVkZWQgZm9yIHRoZSBpbmxpbmUuCiAgICAgaWYgKGNo
aWxkSW5saW5lID09IGJlZm9yZUNoaWxkQW5jZXN0b3ItPmlzSW5saW5lKCkpCi0gICAgICAgIHJl
dHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5l
d0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9y
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVD
aGlsZCk7CiAgICAgaWYgKGZsb3ctPmlzSW5saW5lKCkgPT0gY2hpbGRJbmxpbmUpCi0gICAgICAg
IHJldHVybiBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkKTsgLy8g
SnVzdCB0cmVhdCBsaWtlIGFuIGFwcGVuZC4KLSAgICByZXR1cm4gYmVmb3JlQ2hpbGRBbmNlc3Rv
ci0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwor
ICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3Zl
KG5ld0NoaWxkKSk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCisgICAgcmV0dXJuIGJl
Zm9yZUNoaWxkQW5jZXN0b3ItPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShu
ZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKIH0KIAogdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC0x
MzY4LDEyICsxMzc0LDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVEcmFnU3RhdGUoYm9v
bCAKIHZvaWQgUmVuZGVySW5saW5lOjpjaGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJFbGVtZW50
JiBjaGlsZCkKIHsKICAgICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJlbnQgZmxvdy4KLSAg
ICBSZW5kZXJCbG9jayogbmV3Qm94ID0gY29udGFpbmluZ0Jsb2NrKCktPmNyZWF0ZUFub255bW91
c0Jsb2NrKCk7CisgICAgYXV0byBuZXdCb3ggPSBjb250YWluaW5nQmxvY2soKS0+Y3JlYXRlQW5v
bnltb3VzQmxvY2soKTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udGludWF0aW9u
ID0gY29udGludWF0aW9uKCk7Ci0gICAgc2V0Q29udGludWF0aW9uKG5ld0JveCk7CisgICAgc2V0
Q29udGludWF0aW9uKG5ld0JveC5nZXQoKSk7CiAgICAgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IGNoaWxkLm5leHRTaWJsaW5nKCk7Ci0gICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbChjaGlsZCwg
Tm90aWZ5Q2hpbGRyZW4pOwotICAgIHNwbGl0RmxvdyhiZWZvcmVDaGlsZCwgbmV3Qm94LCAmY2hp
bGQsIG9sZENvbnRpbnVhdGlvbik7CisgICAgYXV0byByZW1vdmVkQ2hpbGQgPSByZW1vdmVDaGls
ZEludGVybmFsKGNoaWxkLCBOb3RpZnlDaGlsZHJlbik7CisgICAgc3BsaXRGbG93KGJlZm9yZUNo
aWxkLCBXVEZNb3ZlKG5ld0JveCksIFdURk1vdmUocmVtb3ZlZENoaWxkKSwgb2xkQ29udGludWF0
aW9uKTsKIH0KIAogdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDcgQEAgcHVibGljOgogICAgIFJlbmRlcklubGluZShFbGVtZW50JiwgUmVuZGVyU3R5
bGUmJik7CiAgICAgUmVuZGVySW5saW5lKERvY3VtZW50JiwgUmVuZGVyU3R5bGUmJik7CiAKLSAg
ICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJp
ZGU7CiAKICAgICBMYXlvdXRVbml0IG1hcmdpbkxlZnQoKSBjb25zdCBmaW5hbDsKICAgICBMYXlv
dXRVbml0IG1hcmdpblJpZ2h0KCkgY29uc3QgZmluYWw7CkBAIC0xMjEsMTMgKzEyMSwxMSBAQCBw
cml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdlbmVyYXRvckNvbnRleHQ+CiAgICAgdm9p
ZCBnZW5lcmF0ZUN1bGxlZExpbmVCb3hSZWN0cyhHZW5lcmF0b3JDb250ZXh0JiB5aWVsZCwgY29u
c3QgUmVuZGVySW5saW5lKiBjb250YWluZXIpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRDaGlsZFRv
Q29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpOwotICAgIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmpl
Y3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7
CisgICAgdm9pZCBhZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIGFkZENoaWxk
SWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKSBmaW5hbDsKIAotICAgIHZvaWQgc3Bs
aXRJbmxpbmVzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLCBS
ZW5kZXJCbG9jayogbWlkZGxlQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpOwotICAgIHZv
aWQgc3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdC
bG9ja0JveCwKLSAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udCk7CisgICAgdm9pZCBzcGxpdElubGluZXMoUmVuZGVy
QmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRvQmxvY2ssIFJlbmRlckJsb2NrKiBtaWRk
bGVCbG9jaywgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IG9sZENvbnQpOworICAgIHZvaWQgc3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQs
IFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gbmV3QmxvY2tCb3gsIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IG5ld0NoaWxkLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udCk7CiAKICAgICB2b2lk
IGxheW91dCgpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0gLy8gRG8gbm90aGluZyBm
b3IgbGF5b3V0KCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOSArMTA4LDEwIEBAIHZv
aWQgUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZUlubmVyQmxvY2soKQogCiAgICAgLy8gQ3JlYXRlIGFu
IGFub255bW91cyBibG9jay4KICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7Ci0gICAgbV9pbm5l
ckJsb2NrID0gY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAgICBhdXRvIG5ld0lubmVyQmxvY2sg
PSBjcmVhdGVBbm9ueW1vdXNCbG9jaygpOworICAgIG1faW5uZXJCbG9jayA9IG5ld0lubmVyQmxv
Y2suZ2V0KCk7CiAgICAgYWRqdXN0SW5uZXJTdHlsZSgpOwotICAgIFJlbmRlckZsZXhpYmxlQm94
OjphZGRDaGlsZChtX2lubmVyQmxvY2spOworICAgIFJlbmRlckZsZXhpYmxlQm94OjphZGRDaGls
ZChXVEZNb3ZlKG5ld0lubmVyQmxvY2spKTsKIH0KIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRq
dXN0SW5uZXJTdHlsZSgpCkBAIC0xNzIsMjMgKzE3MywyNCBAQCBIVE1MU2VsZWN0RWxlbWVudCYg
UmVuZGVyTWVudUxpc3Q6OnNlbGVjCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTZWxlY3RFbGVt
ZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQogCi12b2lkIFJlbmRlck1lbnVMaXN0Ojph
ZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KQordm9pZCBSZW5kZXJNZW51TGlzdDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4g
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgY3JlYXRlSW5uZXJC
bG9jaygpOwotICAgIG1faW5uZXJCbG9jay0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxk
KTsKKyAgICBhdXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAgICBtX2lubmVyQmxvY2stPmFkZENo
aWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgQVNTRVJUKG1faW5uZXJC
bG9jayA9PSBmaXJzdENoaWxkKCkpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0g
ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgY2FjaGUtPmNoaWxk
cmVuQ2hhbmdlZCh0aGlzLCBuZXdDaGlsZCk7CisgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5n
ZWQodGhpcywgJmNoaWxkKTsKIH0KIAotdm9pZCBSZW5kZXJNZW51TGlzdDo6cmVtb3ZlQ2hpbGQo
UmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlck1l
bnVMaXN0Ojp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKIHsKICAgICBpZiAoJm9s
ZENoaWxkID09IG1faW5uZXJCbG9jayB8fCAhbV9pbm5lckJsb2NrKSB7Ci0gICAgICAgIFJlbmRl
ckZsZXhpYmxlQm94OjpyZW1vdmVDaGlsZChvbGRDaGlsZCk7CiAgICAgICAgIG1faW5uZXJCbG9j
ayA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faW5uZXJCbG9jay0+cmVtb3ZlQ2hpbGQob2xk
Q2hpbGQpOworICAgICAgICByZXR1cm4gUmVuZGVyRmxleGlibGVCb3g6OnRha2VDaGlsZChvbGRD
aGlsZCk7CisgICAgfQorICAgIHJldHVybiBtX2lubmVyQmxvY2stPnRha2VDaGlsZChvbGRDaGls
ZCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCkBAIC0yOTUsOSArMjk3LDEx
IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHQoY29uc3QgU3RyaW4KICAgICBpZiAobV9i
dXR0b25UZXh0KQogICAgICAgICBtX2J1dHRvblRleHQtPnNldFRleHQodGV4dFRvVXNlLmltcGwo
KSwgdHJ1ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1fYnV0dG9uVGV4dCA9IG5ldyBSZW5kZXJU
ZXh0KGRvY3VtZW50KCksIHRleHRUb1VzZSk7Ci0gICAgICAgIGFkZENoaWxkKG1fYnV0dG9uVGV4
dCk7CisgICAgICAgIGF1dG8gbmV3QnV0dG9uVGV4dCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRl
eHQ+KGRvY3VtZW50KCksIHRleHRUb1VzZSk7CisgICAgICAgIG1fYnV0dG9uVGV4dCA9IG5ld0J1
dHRvblRleHQuZ2V0KCk7CisgICAgICAgIGFkZENoaWxkKFdURk1vdmUobmV3QnV0dG9uVGV4dCkp
OwogICAgIH0KKwogICAgIGFkanVzdElubmVyU3R5bGUoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw4ICs2Niw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzTWVudUxpc3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVj
dCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRk
Q2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtl
Q2hpbGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBjcmVhdGVzQW5vbnltb3Vz
V3JhcHBlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgdXBk
YXRlRnJvbUVsZW1lbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg0LDExICsxODQsMTEgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZs
b3c6OmV2YWN1YXRlQW5kRAogICAgIFNwYW5uZXJNYXA6Oml0ZXJhdG9yIGl0OwogICAgIHdoaWxl
ICgoaXQgPSBtX3NwYW5uZXJNYXAuYmVnaW4oKSkgIT0gbV9zcGFubmVyTWFwLmVuZCgpKSB7CiAg
ICAgICAgIFJlbmRlckJveCogc3Bhbm5lciA9IGl0LT5rZXk7Ci0gICAgICAgIG11bHRpY29sQ29u
dGFpbmVyLT5yZW1vdmVDaGlsZCgqc3Bhbm5lcik7CisgICAgICAgIGF1dG8gdGFrZW5TcGFubmVy
ID0gbXVsdGljb2xDb250YWluZXItPnRha2VDaGlsZCgqc3Bhbm5lcik7CiAgICAgICAgIEFTU0VS
VChpdC0+dmFsdWUuZ2V0KCkpOwogICAgICAgICBpZiAoUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIqIHBsYWNlaG9sZGVyID0gaXQtPnZhbHVlLmdldCgpKSB7CiAgICAgICAgICAg
ICBSZW5kZXJCbG9ja0Zsb3cmIG9yaWdpbmFsQ29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVyQmxv
Y2tGbG93PigqcGxhY2Vob2xkZXItPnBhcmVudCgpKTsKLSAgICAgICAgICAgIG9yaWdpbmFsQ29u
dGFpbmVyLmFkZENoaWxkKHNwYW5uZXIsIHBsYWNlaG9sZGVyKTsKKyAgICAgICAgICAgIG9yaWdp
bmFsQ29udGFpbmVyLmFkZENoaWxkKFdURk1vdmUodGFrZW5TcGFubmVyKSwgcGxhY2Vob2xkZXIp
OwogICAgICAgICAgICAgcGxhY2Vob2xkZXItPmRlc3Ryb3koKTsKICAgICAgICAgfQogICAgICAg
ICBtX3NwYW5uZXJNYXAucmVtb3ZlKGl0KTsKQEAgLTM0OCwxNCArMzQ4LDE0IEBAIFJlbmRlck9i
amVjdCogUmVuZGVyTXVsdGlDb2x1bW5GbG93Ojpwcm8KICAgICAgICAgLy8gY29udGVudCBiZWZv
cmUgYW5kIGFmdGVyIHRoZSBzcGFubmVyLCBzbyB0aGF0IGl0IGJlY29tZXMgc2VwYXJhdGUgbGlu
ZSBib3hlcy4gU2Vjb25kbHksCiAgICAgICAgIC8vIHRoaXMgcGxhY2Vob2xkZXIgc2VydmVzIGFz
IGEgYnJlYWsgcG9pbnQgZm9yIGNvbHVtbiBzZXRzLCBzbyB0aGF0LCB3aGVuIGVuY291bnRlcmVk
LCB3ZQogICAgICAgICAvLyBlbmQgZmxvd2luZyBvbmUgY29sdW1uIHNldCBhbmQgbW92ZSB0byB0
aGUgbmV4dCBvbmUuCi0gICAgICAgIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVy
KiBwbGFjZWhvbGRlciA9IFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVh
dGVBbm9ueW1vdXModGhpcywKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4oZGVzY2Vu
ZGFudCksICZjb250YWluZXItPnN0eWxlKCkpOwotICAgICAgICBjb250YWluZXItPmFkZENoaWxk
KHBsYWNlaG9sZGVyLCBkZXNjZW5kYW50Lm5leHRTaWJsaW5nKCkpOwotICAgICAgICBjb250YWlu
ZXItPnJlbW92ZUNoaWxkKGRlc2NlbmRhbnQpOworICAgICAgICBhdXRvIG5ld1BsYWNlaG9sZGVy
ID0gUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI6OmNyZWF0ZUFub255bW91cyh0
aGlzLCBkb3duY2FzdDxSZW5kZXJCb3g+KGRlc2NlbmRhbnQpLCAmY29udGFpbmVyLT5zdHlsZSgp
KTsKKyAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIgPSAqbmV3UGxhY2Vob2xkZXI7CisgICAgICAg
IGNvbnRhaW5lci0+YWRkQ2hpbGQoV1RGTW92ZShuZXdQbGFjZWhvbGRlciksIGRlc2NlbmRhbnQu
bmV4dFNpYmxpbmcoKSk7CisgICAgICAgIGF1dG8gdGFrZW5EZXNjZW5kYW50ID0gY29udGFpbmVy
LT50YWtlQ2hpbGQoZGVzY2VuZGFudCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIGEg
Z3VhcmQgdG8gc3RvcCBhbiBhbmNlc3RvciBmbG93IHRocmVhZCBmcm9tIHByb2Nlc3NpbmcgdGhl
IHNwYW5uZXIuCiAgICAgICAgIGdTaGlmdGluZ1NwYW5uZXIgPSB0cnVlOwotICAgICAgICBtdWx0
aWNvbENvbnRhaW5lci0+UmVuZGVyQmxvY2s6OmFkZENoaWxkKCZkZXNjZW5kYW50LCBpbnNlcnRC
ZWZvcmVNdWx0aWNvbENoaWxkKTsKKyAgICAgICAgbXVsdGljb2xDb250YWluZXItPlJlbmRlckJs
b2NrOjphZGRDaGlsZChXVEZNb3ZlKHRha2VuRGVzY2VuZGFudCksIGluc2VydEJlZm9yZU11bHRp
Y29sQ2hpbGQpOwogICAgICAgICBnU2hpZnRpbmdTcGFubmVyID0gZmFsc2U7CiAgICAgICAgIAog
ICAgICAgICAvLyBUaGUgc3Bhbm5lciBoYXMgbm93IGJlZW4gbW92ZWQgb3V0IGZyb20gdGhlIGZs
b3cgdGhyZWFkLCBidXQgd2UgZG9uJ3Qgd2FudCB0bwpAQCAtMzYzLDggKzM2Myw4IEBAIFJlbmRl
ck9iamVjdCogUmVuZGVyTXVsdGlDb2x1bW5GbG93Ojpwcm8KICAgICAgICAgLy8gY3JlYXRpb24g
b2YgY29sdW1uIHNldHMgb3IgYW55dGhpbmcgbGlrZSB0aGF0LiBDb250aW51ZSBhdCBpdHMgb3Jp
Z2luYWwgcG9zaXRpb24gaW4KICAgICAgICAgLy8gdGhlIHRyZWUsIGkuZS4gd2hlcmUgdGhlIHBs
YWNlaG9sZGVyIHdhcyBqdXN0IHB1dC4KICAgICAgICAgaWYgKHN1YnRyZWVSb290ID09ICZkZXNj
ZW5kYW50KQotICAgICAgICAgICAgc3VidHJlZVJvb3QgPSBwbGFjZWhvbGRlcjsKLSAgICAgICAg
bmV4dERlc2NlbmRhbnQgPSBwbGFjZWhvbGRlcjsKKyAgICAgICAgICAgIHN1YnRyZWVSb290ID0g
JnBsYWNlaG9sZGVyOworICAgICAgICBuZXh0RGVzY2VuZGFudCA9ICZwbGFjZWhvbGRlcjsKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBUaGlzIGlzIHJlZ3VsYXIgbXVsdGljb2wgY29udGVudCwg
aS5lLiBub3QgcGFydCBvZiBhIHNwYW5uZXIuCiAgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNv
bHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obmV4dFJlbmRlcmVySW5GcmFnbWVudGVkRmxvdykpIHsK
QEAgLTM4OSwxNSArMzg5LDE2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyTXVsdGlDb2x1bW5GbG93
Ojpwcm8KICAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBjb2x1bW4gc2V0IHdoZW4gdGhlcmUn
cyBubyBzZXQgYWxyZWFkeSBjcmVhdGVkLiBXZSBhbHNvIGFsd2F5cyBpbnNlcnQKICAgICAvLyBh
bm90aGVyIGNvbHVtbiBzZXQgYWZ0ZXIgYSBzcGFubmVyLiBFdmVuIGlmIGl0IHR1cm5zIG91dCB0
aGF0IHRoZXJlIGFyZSBubyByZW5kZXJlcnMKICAgICAvLyBmb2xsb3dpbmcgdGhlIHNwYW5uZXIs
IHRoZXJlIG1heSBiZSBib3R0b20gbWFyZ2lucyB0aGVyZSwgd2hpY2ggdGFrZSB1cCBzcGFjZS4K
LSAgICBSZW5kZXJNdWx0aUNvbHVtblNldCogbmV3U2V0ID0gbmV3IFJlbmRlck11bHRpQ29sdW1u
U2V0KCp0aGlzLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSht
dWx0aWNvbENvbnRhaW5lci0+c3R5bGUoKSwgQkxPQ0spKTsKKyAgICBhdXRvIG5ld1NldCA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlck11bHRpQ29sdW1uU2V0PigqdGhpcywgUmVuZGVyU3R5bGU6OmNy
ZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkobXVsdGljb2xDb250YWluZXItPnN0eWxlKCks
IEJMT0NLKSk7CiAgICAgbmV3U2V0LT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICBtdWx0aWNvbENv
bnRhaW5lci0+UmVuZGVyQmxvY2s6OmFkZENoaWxkKG5ld1NldCwgaW5zZXJ0QmVmb3JlTXVsdGlj
b2xDaGlsZCk7CisgICAgYXV0byYgc2V0ID0gKm5ld1NldDsKKyAgICBtdWx0aWNvbENvbnRhaW5l
ci0+UmVuZGVyQmxvY2s6OmFkZENoaWxkKFdURk1vdmUobmV3U2V0KSwgaW5zZXJ0QmVmb3JlTXVs
dGljb2xDaGlsZCk7CiAgICAgaW52YWxpZGF0ZUZyYWdtZW50cygpOwogCiAgICAgLy8gV2UgY2Fu
bm90IGhhbmRsZSBpbW1lZGlhdGUgY29sdW1uIHNldCBzaWJsaW5ncyBhdCB0aGUgbW9tZW50IChh
bmQgdGhlcmUncyBubyBuZWVkIGZvcgogICAgIC8vIGl0LCBlaXRoZXIpLiBUaGVyZSBoYXMgdG8g
YmUgYXQgbGVhc3Qgb25lIHNwYW5uZXIgc2VwYXJhdGluZyB0aGVtLgotICAgIEFTU0VSVCghcHJl
dmlvdXNDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV3U2V0KSB8fCAhcHJldmlvdXNDb2x1
bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV3U2V0KS0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgp
KTsKLSAgICBBU1NFUlQoIW5leHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV3U2V0KSB8
fCAhbmV4dENvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihuZXdTZXQpLT5pc1JlbmRlck11bHRp
Q29sdW1uU2V0KCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2V0LCAhcHJldmlvdXNDb2x1bW5TZXRP
clNwYW5uZXJTaWJsaW5nT2YoJnNldCkgfHwgIXByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVyU2li
bGluZ09mKCZzZXQpLT5pc1JlbmRlck11bHRpQ29sdW1uU2V0KCkpOworICAgIEFTU0VSVCghbmV4
dENvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZigmc2V0KSB8fCAhbmV4dENvbHVtblNldE9yU3Bh
bm5lclNpYmxpbmdPZigmc2V0KS0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKTsKICAgICAKICAg
ICByZXR1cm4gbmV4dERlc2NlbmRhbnQ7CiB9CkBAIC00MjgsNyArNDI5LDExIEBAIHZvaWQgUmVu
ZGVyTXVsdGlDb2x1bW5GbG93OjpmcmFnbWVudGVkRmwKICAgICAgICAgICAgICAgICAvLyBXZSBo
YXZlIHRvIG51a2UgdGhlIHBsYWNlaG9sZGVyLCBzaW5jZSB0aGUgYW5jZXN0b3IgYWxyZWFkeSBs
b3N0IHRoZSBtYXBwaW5nIHRvIGl0IHdoZW4KICAgICAgICAgICAgICAgICAvLyB3ZSBzaGlmdGVk
IHRoZSBwbGFjZWhvbGRlciBkb3duIGludG8gdGhpcyBmbG93IHRocmVhZC4KICAgICAgICAgICAg
ICAgICBwbGFjZWhvbGRlci5mcmFnbWVudGVkRmxvdygpLT5tX3NwYW5uZXJNYXAucmVtb3ZlKHNw
YW5uZXIpOwotICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLnBhcmVudCgpLT5yZW1vdmVDaGls
ZChwbGFjZWhvbGRlcik7CisKKyAgICAgICAgICAgICAgICBhdXRvIHRha2VuQ2hpbGQgPSBwbGFj
ZWhvbGRlci5wYXJlbnQoKS0+dGFrZUNoaWxkKHBsYWNlaG9sZGVyKTsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogTWVtb3J5IG1hbmFnZW1lbnQuCisgICAgICAgICAgICAgICAgYXV0byogbGVh
a2VuUHRyID0gdGFrZW5DaGlsZC5sZWFrUHRyKCk7CisgICAgICAgICAgICAgICAgVU5VU0VEX1BB
UkFNKGxlYWtlblB0cik7CiAKICAgICAgICAgICAgICAgICBpZiAoc3VidHJlZVJvb3QgPT0gZGVz
Y2VuZGFudCkKICAgICAgICAgICAgICAgICAgICAgc3VidHJlZVJvb3QgPSBzcGFubmVyOwpAQCAt
NDUwLDcgKzQ1NSwxMSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6aGFuZGxlU3Bhbm5l
CiB7CiAgICAgLy8gVGhlIHBsYWNlaG9sZGVyIG1heSBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVk
LCBidXQgaWYgaXQgaGFzbid0LCBkbyBzbyBub3cuCiAgICAgaWYgKFJlbmRlck11bHRpQ29sdW1u
U3Bhbm5lclBsYWNlaG9sZGVyKiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lck1hcC5nZXQoJmRvd25j
YXN0PFJlbmRlckJveD4oc3Bhbm5lcikpLmdldCgpKSB7Ci0gICAgICAgIHBsYWNlaG9sZGVyLT5w
YXJlbnQoKS0+cmVtb3ZlQ2hpbGQoKnBsYWNlaG9sZGVyKTsKKyAgICAgICAgYXV0byB0YWtlbkNo
aWxkID0gcGxhY2Vob2xkZXItPnBhcmVudCgpLT50YWtlQ2hpbGQoKnBsYWNlaG9sZGVyKTsKKyAg
ICAgICAgLy8gRklYTUU6IE1lbW9yeSBtYW5hZ2VtZW50LgorICAgICAgICBhdXRvKiBsZWFrZW5Q
dHIgPSB0YWtlbkNoaWxkLmxlYWtQdHIoKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlYWtlblB0
cik7CisKICAgICAgICAgbV9zcGFubmVyTWFwLnJlbW92ZSgmZG93bmNhc3Q8UmVuZGVyQm94Pihz
cGFubmVyKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAJ
KHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICsz
NCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbmRlck11bHRpQ29sdW1uU3Bhbm5l
clBsYWNlaG9sZGVyKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcjo6Y3JlYXRl
QW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvdyogZnJhZ21lbnRlZEZsb3csIFJlbmRlckJv
eCYgc3Bhbm5lciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUmVuZGVyUHRyPFJl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPiBSZW5kZXJNdWx0aUNvbHVtblNwYW5u
ZXJQbGFjZWhvbGRlcjo6Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvdyogZnJh
Z21lbnRlZEZsb3csIFJlbmRlckJveCYgc3Bhbm5lciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKQogewogICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnlt
b3VzU3R5bGVXaXRoRGlzcGxheSgqcGFyZW50U3R5bGUsIEJMT0NLKTsKICAgICBuZXdTdHlsZS5z
ZXRDbGVhcihDQk9USCk7IC8vIFdlIGRvbid0IHdhbnQgZmxvYXRzIGluIHRoZSByb3cgcHJlY2Vk
aW5nIHRoZSBzcGFubmVyIHRvIGNvbnRpbnVlIG9uIHRoZSBvdGhlciBzaWRlLgotICAgIGF1dG8g
cGxhY2Vob2xkZXIgPSBuZXcgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoZnJh
Z21lbnRlZEZsb3csIHNwYW5uZXIsIFdURk1vdmUobmV3U3R5bGUpKTsKKyAgICBhdXRvIHBsYWNl
aG9sZGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXI+KGZyYWdtZW50ZWRGbG93LCBzcGFubmVyLCBXVEZNb3ZlKG5ld1N0eWxlKSk7CiAgICAgcGxh
Y2Vob2xkZXItPmluaXRpYWxpemVTdHlsZSgpOwogICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTMgKzM5LDE1IEBAIGNsYXNzIFJlbmRlck11bHRp
Q29sdW1uRmxvdzsKIAogY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIg
ZmluYWwgOiBwdWJsaWMgUmVuZGVyQm94IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVuZGVyTXVs
dGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIGNyZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNv
bHVtbkZsb3cqLCBSZW5kZXJCb3gmIHNwYW5uZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSk7CisgICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlcj4gY3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvdyosIFJlbmRlckJv
eCYgc3Bhbm5lciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIFJlbmRl
ckJveCogc3Bhbm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Bhbm5lcjsgfQogICAgIFJlbmRlck11
bHRpQ29sdW1uRmxvdyogZnJhZ21lbnRlZEZsb3coKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50
ZWRGbG93OyB9CiAgICAgV2Vha1B0cjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cj4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0
cigqdGhpcyk7IH0KIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcy4uLiBB
cmdzPiBmcmllbmQgUmVuZGVyUHRyPFQ+IGNyZWF0ZVJlbmRlcmVyKEFyZ3MmJi4uLik7CisKICAg
ICBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcihSZW5kZXJNdWx0aUNvbHVtbkZs
b3cqLCBSZW5kZXJCb3gmIHNwYW5uZXIsIFJlbmRlclN0eWxlJiYpOwogICAgIGJvb2wgaXNSZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsMTAgKzI0MSwxMCBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6c2V0UGFyZW50KFJlbmRlckVsZW1lCiAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7CiB9
CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tUGFyZW50KCkKK3ZvaWQgUmVuZGVyT2Jq
ZWN0OjpyZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpCiB7CiAgICAgaWYgKHBhcmVudCgpKQot
ICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGQoKnRoaXMpOworICAgICAgICBwYXJlbnQoKS0+
cmVtb3ZlQW5kRGVzdHJveUNoaWxkKCp0aGlzKTsKIH0KIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJP
YmplY3Q6Om5leHRJblByZU9yZGVyKCkgY29uc3QKQEAgLTE0NDgsNyArMTQ0OCwxMiBAQCB2b2lk
IFJlbmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCkKICAgICBpZiAoQVhPYmplY3RDYWNoZSog
Y2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICBjYWNo
ZS0+Y2hpbGRyZW5DaGFuZ2VkKHRoaXMtPnBhcmVudCgpKTsKIAotICAgIHJlbW92ZUZyb21QYXJl
bnQoKTsKKyAgICBpZiAobV9wYXJlbnQpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBo
YXZlIGFsd2F5cyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcGFyZW50IGJlZm9yZSBiZWluZyBkZXN0
cm95ZWQuCisgICAgICAgIGF1dG8gdGFrZW5UaGlzID0gbV9wYXJlbnQtPnRha2VDaGlsZCgqdGhp
cyk7CisgICAgICAgIGF1dG8qIGxlYWtlZFB0ciA9IHRha2VuVGhpcy5sZWFrUHRyKCk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShsZWFrZWRQdHIpOworICAgIH0KIAogICAgIEFTU0VSVChyZW5kZXJU
cmVlQmVpbmdEZXN0cm95ZWQoKSB8fCAhaXM8UmVuZGVyRWxlbWVudD4oKnRoaXMpIHx8ICF2aWV3
KCkuZnJhbWVWaWV3KCkuaGFzU2xvd1JlcGFpbnRPYmplY3QoZG93bmNhc3Q8UmVuZGVyRWxlbWVu
dD4oKnRoaXMpKSk7CiAKQEAgLTE1MTgsNiArMTUyMyw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpk
ZXN0cm95QW5kQ2xlYW51cEFub24KIAogdm9pZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKQogewor
ICAgIEFTU0VSVCghbV9iaXRmaWVsZHMuYmVpbmdEZXN0cm95ZWQoKSk7CiAgICAgbV9iaXRmaWVs
ZHMuc2V0QmVpbmdEZXN0cm95ZWQodHJ1ZSk7CiAKICNpZiBQTEFURk9STShJT1MpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAyMjI2MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTc1MSw3ICs3NTEsNyBAQCBwdWJsaWM6CiAgICAgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHNl
bGVjdGlvblJvb3QoKSBjb25zdDsKICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKHVuc2lnbmVk
JiBzcG9zLCB1bnNpZ25lZCYgZXBvcykgY29uc3Q7CiAgICAgCi0gICAgdm9pZCByZW1vdmVGcm9t
UGFyZW50KCk7CisgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOwogCiAgICAg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlciYgYW5pbWF0aW9uKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYxLDcgKzM2MSw3IEBAIHZvaWQgUmVuZGVyUXVvdGU6OnVwZGF0ZVRleHRSZW5kZXJlcigp
CiAgICAgICAgIHJlbmRlclRleHQtPmRpcnR5TGluZUJveGVzKGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBhZGRDaGlsZChuZXcgUmVuZGVyVGV4dEZyYWdtZW50KGRvY3VtZW50
KCksIG1fdGV4dCkpOworICAgIGFkZENoaWxkKGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRGcmFn
bWVudD4oZG9jdW1lbnQoKSwgbV90ZXh0KSk7CiB9CiAKIFN0cmluZyBSZW5kZXJRdW90ZTo6Y29t
cHV0ZVRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1
YnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5Niw5IEBAIHN0YXRpYyBpbmxpbmUg
UmVuZGVyQmxvY2sqIHJ1YnlBZnRlckJsb2MKICAgICByZXR1cm4gaXNSdWJ5QWZ0ZXJCbG9jayhj
aGlsZCkgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpIDogbnVsbHB0cjsKIH0KIAotc3Rh
dGljIFJlbmRlckJsb2NrKiBjcmVhdGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soUmVuZGVyT2Jq
ZWN0JiBydWJ5KQorc3RhdGljIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnltb3Vz
UnVieUlubGluZUJsb2NrKFJlbmRlck9iamVjdCYgcnVieSkKIHsKLSAgICBSZW5kZXJCbG9jayog
bmV3QmxvY2sgPSBuZXcgUmVuZGVyQmxvY2tGbG93KHJ1YnkuZG9jdW1lbnQoKSwgUmVuZGVyU3R5
bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkocnVieS5zdHlsZSgpLCBJTkxJTkVf
QkxPQ0spKTsKKyAgICBhdXRvIG5ld0Jsb2NrID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tG
bG93PihydWJ5LmRvY3VtZW50KCksIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdp
dGhEaXNwbGF5KHJ1Ynkuc3R5bGUoKSwgSU5MSU5FX0JMT0NLKSk7CiAgICAgbmV3QmxvY2stPmlu
aXRpYWxpemVTdHlsZSgpOwogICAgIHJldHVybiBuZXdCbG9jazsKIH0KQEAgLTEzNyw0MyArMTM3
LDM5IEBAIHZvaWQgUmVuZGVyUnVieUFzSW5saW5lOjpzdHlsZURpZENoYW5nZSgKICAgICBwcm9w
YWdhdGVTdHlsZVRvQW5vbnltb3VzQ2hpbGRyZW4oUHJvcGFnYXRlVG9BbGxDaGlsZHJlbik7CiB9
CiAKLXZvaWQgUmVuZGVyUnVieUFzSW5saW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OmFk
ZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQogewogICAgIC8vIEluc2VydCA6YmVmb3JlIGFuZCA6YWZ0ZXIgY29udGVudCBiZWZv
cmUvYWZ0ZXIgdGhlIFJlbmRlclJ1YnlSdW4ocykKICAgICBpZiAoY2hpbGQtPmlzQmVmb3JlQ29u
dGVudCgpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNJbmxpbmUoKSkgewogICAgICAgICAgICAg
Ly8gQWRkIGdlbmVyYXRlZCBpbmxpbmUgY29udGVudCBub3JtYWxseQotICAgICAgICAgICAgUmVu
ZGVySW5saW5lOjphZGRDaGlsZChjaGlsZCwgZmlyc3RDaGlsZCgpKTsKKyAgICAgICAgICAgIFJl
bmRlcklubGluZTo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGZpcnN0Q2hpbGQoKSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXcmFwIG5vbi1pbmxpbmUgY29udGVudCB3aXRo
IGFuIGFub255bW91cyBpbmxpbmUtYmxvY2suCiAgICAgICAgICAgICBSZW5kZXJCbG9jayogYmVm
b3JlQmxvY2sgPSBydWJ5QmVmb3JlQmxvY2sodGhpcyk7Ci0gICAgICAgICAgICBpZiAoIWJlZm9y
ZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgYmVmb3JlQmxvY2sgPSBjcmVhdGVBbm9ueW1vdXNS
dWJ5SW5saW5lQmxvY2soKnRoaXMpOwotICAgICAgICAgICAgICAgIFJlbmRlcklubGluZTo6YWRk
Q2hpbGQoYmVmb3JlQmxvY2ssIGZpcnN0Q2hpbGQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBiZWZvcmVCbG9jay0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgaWYgKCFiZWZv
cmVCbG9jaykKKyAgICAgICAgICAgICAgICBiZWZvcmVCbG9jayA9ICZiYXNlQWRkQ2hpbGQ8UmVu
ZGVySW5saW5lPihjcmVhdGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soKnRoaXMpLCBmaXJzdENo
aWxkKCkpOworICAgICAgICAgICAgYmVmb3JlQmxvY2stPmFkZENoaWxkKFdURk1vdmUoY2hpbGQp
KTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChjaGlsZC0+aXNB
ZnRlckNvbnRlbnQoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzSW5saW5lKCkpIHsKICAgICAg
ICAgICAgIC8vIEFkZCBnZW5lcmF0ZWQgaW5saW5lIGNvbnRlbnQgbm9ybWFsbHkKLSAgICAgICAg
ICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgUmVuZGVySW5s
aW5lOjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBXcmFwIG5vbi1pbmxpbmUgY29udGVudCB3aXRoIGFuIGFub255bW91cyBpbmxpbmUt
YmxvY2suCiAgICAgICAgICAgICBSZW5kZXJCbG9jayogYWZ0ZXJCbG9jayA9IHJ1YnlBZnRlckJs
b2NrKHRoaXMpOwotICAgICAgICAgICAgaWYgKCFhZnRlckJsb2NrKSB7Ci0gICAgICAgICAgICAg
ICAgYWZ0ZXJCbG9jayA9IGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyk7Ci0g
ICAgICAgICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChhZnRlckJsb2NrKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGFmdGVyQmxvY2stPmFkZENoaWxkKGNoaWxkKTsKKyAgICAg
ICAgICAgIGlmICghYWZ0ZXJCbG9jaykKKyAgICAgICAgICAgICAgICBhZnRlckJsb2NrID0gJmJh
c2VBZGRDaGlsZDxSZW5kZXJJbmxpbmU+KGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygq
dGhpcykpOworICAgICAgICAgICAgYWZ0ZXJCbG9jay0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkp
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgY2hp
bGQgaXMgYSBydWJ5IHJ1biwganVzdCBhZGQgaXQgbm9ybWFsbHkuCiAgICAgaWYgKGNoaWxkLT5p
c1J1YnlSdW4oKSkgewotICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKGNoaWxkLCBiZWZv
cmVDaGlsZCk7CisgICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCks
IGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTg0LDcgKzE4MCw3
IEBAIHZvaWQgUmVuZGVyUnVieUFzSW5saW5lOjphZGRDaGlsZChSZW5kZXIKICAgICAgICAgd2hp
bGUgKHJ1biAmJiAhcnVuLT5pc1J1YnlSdW4oKSkKICAgICAgICAgICAgIHJ1biA9IHJ1bi0+cGFy
ZW50KCk7CiAgICAgICAgIGlmIChydW4pIHsKLSAgICAgICAgICAgIHJ1bi0+YWRkQ2hpbGQoY2hp
bGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIHJ1bi0+YWRkQ2hpbGQoV1RGTW92ZShjaGls
ZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gYmVmb3JlQ2hpbGQgc2hvdWxkIGFsd2F5cyBoYXZl
IGEgcnVuIGFzIHBhcmVudCEKQEAgLTE5NSwxNCArMTkxLDEyIEBAIHZvaWQgUmVuZGVyUnVieUFz
SW5saW5lOjphZGRDaGlsZChSZW5kZXIKICAgICAvLyBpZiBwb3NzaWJsZSwgb3IgY3JlYXRlIGEg
bmV3IHJ1biBvdGhlcndpc2UuCiAgICAgLy8gKFRoZSBSZW5kZXJSdWJ5UnVuIG9iamVjdCB3aWxs
IGhhbmRsZSB0aGUgZGV0YWlscykKICAgICBSZW5kZXJSdWJ5UnVuKiBsYXN0UnVuID0gbGFzdFJ1
YnlSdW4odGhpcyk7Ci0gICAgaWYgKCFsYXN0UnVuIHx8IGxhc3RSdW4tPmhhc1J1YnlUZXh0KCkp
IHsKLSAgICAgICAgbGFzdFJ1biA9IFJlbmRlclJ1YnlSdW46OnN0YXRpY0NyZWF0ZVJ1YnlSdW4o
dGhpcyk7Ci0gICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQobGFzdFJ1biwgYmVmb3JlQ2hp
bGQpOwotICAgIH0KLSAgICBsYXN0UnVuLT5hZGRDaGlsZChjaGlsZCk7CisgICAgaWYgKCFsYXN0
UnVuIHx8IGxhc3RSdW4tPmhhc1J1YnlUZXh0KCkpCisgICAgICAgIGxhc3RSdW4gPSAmYmFzZUFk
ZENoaWxkPFJlbmRlcklubGluZT4oUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVieVJ1bih0
aGlzKSwgYmVmb3JlQ2hpbGQpOworICAgIGxhc3RSdW4tPmFkZENoaWxkKFdURk1vdmUoY2hpbGQp
KTsKIH0KIAotdm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVj
dCYgY2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJSdWJ5QXNJbmxpbmU6OnRh
a2VDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQogewogICAgIC8vIElmIHRoZSBjaGlsZCdzIHBh
cmVudCBpcyAqdGhpcyAobXVzdCBiZSBhIHJ1YnkgcnVuIG9yIGdlbmVyYXRlZCBjb250ZW50IG9y
IGFub255bW91cyBibG9jayksCiAgICAgLy8ganVzdCB1c2UgdGhlIG5vcm1hbCByZW1vdmUgbWV0
aG9kLgpAQCAtMjEwLDIwICsyMDQsMTkgQEAgdm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OnJlbW92
ZUNoaWxkKFJlbgogI2lmbmRlZiBBU1NFUlRfRElTQUJMRUQKICAgICAgICAgQVNTRVJUKGlzUnVi
eUNoaWxkRm9yTm9ybWFsUmVtb3ZhbChjaGlsZCkpOwogI2VuZGlmCi0gICAgICAgIFJlbmRlcklu
bGluZTo6cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBSZW5kZXJJbmxpbmU6OnRha2VDaGlsZChjaGlsZCk7CiAgICAgfQogICAgIC8vIElmIHRoZSBj
aGlsZCdzIHBhcmVudCBpcyBhbiBhbm95bW91cyBibG9jayAobXVzdCBiZSBnZW5lcmF0ZWQgOmJl
Zm9yZS86YWZ0ZXIgY29udGVudCkKICAgICAvLyBqdXN0IHVzZSB0aGUgYmxvY2sncyByZW1vdmUg
bWV0aG9kLgogICAgIGlmIChpc0Fub255bW91c1J1YnlJbmxpbmVCbG9jayhjaGlsZC5wYXJlbnQo
KSkpIHsKICAgICAgICAgQVNTRVJUKGNoaWxkLmlzQmVmb3JlQ29udGVudCgpIHx8IGNoaWxkLmlz
QWZ0ZXJDb250ZW50KCkpOwotICAgICAgICBjaGlsZC5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGQoY2hp
bGQpOwotICAgICAgICByZW1vdmVDaGlsZCgqY2hpbGQucGFyZW50KCkpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIGF1dG8gdGFrZW5DaGlsZCA9IGNoaWxkLnBhcmVudCgpLT50YWtlQ2hpbGQo
Y2hpbGQpOworICAgICAgICByZW1vdmVBbmREZXN0cm95Q2hpbGQoKmNoaWxkLnBhcmVudCgpKTsK
KyAgICAgICAgcmV0dXJuIHRha2VuQ2hpbGQ7CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3aXNlIGZp
bmQgdGhlIGNvbnRhaW5pbmcgcnVuIGFuZCByZW1vdmUgaXQgZnJvbSB0aGVyZS4KLSAgICBmaW5k
UnVieVJ1blBhcmVudChjaGlsZCkucmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIHJldHVybiBmaW5k
UnVieVJ1blBhcmVudChjaGlsZCkudGFrZUNoaWxkKGNoaWxkKTsKIH0KIAogLy89PT0gcnVieSBh
cyBibG9jayBvYmplY3QgPT09CkBAIC0yNDMsNDMgKzIzNiwzOSBAQCB2b2lkIFJlbmRlclJ1YnlB
c0Jsb2NrOjpzdHlsZURpZENoYW5nZShTCiAgICAgcHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0No
aWxkcmVuKFByb3BhZ2F0ZVRvQWxsQ2hpbGRyZW4pOwogfQogCi12b2lkIFJlbmRlclJ1YnlBc0Js
b2NrOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkKQordm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgLy8gSW5zZXJ0
IDpiZWZvcmUgYW5kIDphZnRlciBjb250ZW50IGJlZm9yZS9hZnRlciB0aGUgUmVuZGVyUnVieVJ1
bihzKQogICAgIGlmIChjaGlsZC0+aXNCZWZvcmVDb250ZW50KCkpIHsKICAgICAgICAgaWYgKGNo
aWxkLT5pc0lubGluZSgpKSB7CiAgICAgICAgICAgICAvLyBBZGQgZ2VuZXJhdGVkIGlubGluZSBj
b250ZW50IG5vcm1hbGx5Ci0gICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGNo
aWxkLCBmaXJzdENoaWxkKCkpOworICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGls
ZChXVEZNb3ZlKGNoaWxkKSwgZmlyc3RDaGlsZCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIFdyYXAgbm9uLWlubGluZSBjb250ZW50IHdpdGggYW4gYW5vbnltb3VzIGlubGlu
ZS1ibG9jay4KICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBiZWZvcmVCbG9jayA9IHJ1YnlCZWZv
cmVCbG9jayh0aGlzKTsKLSAgICAgICAgICAgIGlmICghYmVmb3JlQmxvY2spIHsKLSAgICAgICAg
ICAgICAgICBiZWZvcmVCbG9jayA9IGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhp
cyk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChiZWZvcmVCbG9j
aywgZmlyc3RDaGlsZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJlZm9yZUJsb2Nr
LT5hZGRDaGlsZChjaGlsZCk7CisgICAgICAgICAgICBpZiAoIWJlZm9yZUJsb2NrKQorICAgICAg
ICAgICAgICAgIGJlZm9yZUJsb2NrID0gJmJhc2VBZGRDaGlsZDxSZW5kZXJCbG9ja0Zsb3c+KGNy
ZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyksIGZpcnN0Q2hpbGQoKSk7CisgICAg
ICAgICAgICBiZWZvcmVCbG9jay0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGNoaWxkLT5pc0FmdGVyQ29udGVudCgp
KSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNJbmxpbmUoKSkgewogICAgICAgICAgICAgLy8gQWRk
IGdlbmVyYXRlZCBpbmxpbmUgY29udGVudCBub3JtYWxseQotICAgICAgICAgICAgUmVuZGVyQmxv
Y2tGbG93OjphZGRDaGlsZChjaGlsZCk7CisgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFk
ZENoaWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8v
IFdyYXAgbm9uLWlubGluZSBjb250ZW50IHdpdGggYW4gYW5vbnltb3VzIGlubGluZS1ibG9jay4K
ICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBhZnRlckJsb2NrID0gcnVieUFmdGVyQmxvY2sodGhp
cyk7Ci0gICAgICAgICAgICBpZiAoIWFmdGVyQmxvY2spIHsKLSAgICAgICAgICAgICAgICBhZnRl
ckJsb2NrID0gY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKCp0aGlzKTsKLSAgICAgICAg
ICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGFmdGVyQmxvY2spOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYWZ0ZXJCbG9jay0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAg
ICAgaWYgKCFhZnRlckJsb2NrKQorICAgICAgICAgICAgICAgIGFmdGVyQmxvY2sgPSAmYmFzZUFk
ZENoaWxkPFJlbmRlckJsb2NrRmxvdz4oY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKCp0
aGlzKSk7CisgICAgICAgICAgICBhZnRlckJsb2NrLT5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIElmIHRoZSBjaGls
ZCBpcyBhIHJ1YnkgcnVuLCBqdXN0IGFkZCBpdCBub3JtYWxseS4KICAgICBpZiAoY2hpbGQtPmlz
UnVieVJ1bigpKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoY2hpbGQsIGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZNb3ZlKGNo
aWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yOTAsNyAr
Mjc5LDcgQEAgdm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6YWRkQ2hpbGQoUmVuZGVyTwogICAgICAg
ICB3aGlsZSAocnVuICYmICFydW4tPmlzUnVieVJ1bigpKQogICAgICAgICAgICAgcnVuID0gcnVu
LT5wYXJlbnQoKTsKICAgICAgICAgaWYgKHJ1bikgewotICAgICAgICAgICAgcnVuLT5hZGRDaGls
ZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgcnVuLT5hZGRDaGlsZChXVEZNb3Zl
KGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBiZWZvcmVDaGlsZCBzaG91bGQgYWx3YXlz
IGhhdmUgYSBydW4gYXMgcGFyZW50IQpAQCAtMzAxLDE0ICsyOTAsMTIgQEAgdm9pZCBSZW5kZXJS
dWJ5QXNCbG9jazo6YWRkQ2hpbGQoUmVuZGVyTwogICAgIC8vIGlmIHBvc3NpYmxlLCBvciBjcmVh
dGUgYSBuZXcgcnVuIG90aGVyd2lzZS4KICAgICAvLyAoVGhlIFJlbmRlclJ1YnlSdW4gb2JqZWN0
IHdpbGwgaGFuZGxlIHRoZSBkZXRhaWxzKQogICAgIFJlbmRlclJ1YnlSdW4qIGxhc3RSdW4gPSBs
YXN0UnVieVJ1bih0aGlzKTsKLSAgICBpZiAoIWxhc3RSdW4gfHwgbGFzdFJ1bi0+aGFzUnVieVRl
eHQoKSkgewotICAgICAgICBsYXN0UnVuID0gUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVi
eVJ1bih0aGlzKTsKLSAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChsYXN0UnVuLCBi
ZWZvcmVDaGlsZCk7Ci0gICAgfQotICAgIGxhc3RSdW4tPmFkZENoaWxkKGNoaWxkKTsKKyAgICBp
ZiAoIWxhc3RSdW4gfHwgbGFzdFJ1bi0+aGFzUnVieVRleHQoKSkKKyAgICAgICAgbGFzdFJ1biA9
ICZiYXNlQWRkQ2hpbGQ8UmVuZGVyQmxvY2tGbG93PihSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVh
dGVSdWJ5UnVuKHRoaXMpLCBiZWZvcmVDaGlsZCk7CisgICAgbGFzdFJ1bi0+YWRkQ2hpbGQoV1RG
TW92ZShjaGlsZCkpOwogfQogCi12b2lkIFJlbmRlclJ1YnlBc0Jsb2NrOjpyZW1vdmVDaGlsZChS
ZW5kZXJPYmplY3QmIGNoaWxkKQorUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyUnVieUFz
QmxvY2s6OnRha2VDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQogewogICAgIC8vIElmIHRoZSBj
aGlsZCdzIHBhcmVudCBpcyAqdGhpcyAobXVzdCBiZSBhIHJ1YnkgcnVuIG9yIGdlbmVyYXRlZCBj
b250ZW50IG9yIGFub255bW91cyBibG9jayksCiAgICAgLy8ganVzdCB1c2UgdGhlIG5vcm1hbCBy
ZW1vdmUgbWV0aG9kLgpAQCAtMzE2LDIwICszMDMsMTggQEAgdm9pZCBSZW5kZXJSdWJ5QXNCbG9j
azo6cmVtb3ZlQ2hpbGQoUmVuZAogI2lmbmRlZiBBU1NFUlRfRElTQUJMRUQKICAgICAgICAgQVNT
RVJUKGlzUnVieUNoaWxkRm9yTm9ybWFsUmVtb3ZhbChjaGlsZCkpOwogI2VuZGlmCi0gICAgICAg
IFJlbmRlckJsb2NrRmxvdzo6cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OnRha2VDaGlsZChjaGlsZCk7CiAgICAgfQog
ICAgIC8vIElmIHRoZSBjaGlsZCdzIHBhcmVudCBpcyBhbiBhbm95bW91cyBibG9jayAobXVzdCBi
ZSBnZW5lcmF0ZWQgOmJlZm9yZS86YWZ0ZXIgY29udGVudCkKICAgICAvLyBqdXN0IHVzZSB0aGUg
YmxvY2sncyByZW1vdmUgbWV0aG9kLgogICAgIGlmIChpc0Fub255bW91c1J1YnlJbmxpbmVCbG9j
ayhjaGlsZC5wYXJlbnQoKSkpIHsKICAgICAgICAgQVNTRVJUKGNoaWxkLmlzQmVmb3JlQ29udGVu
dCgpIHx8IGNoaWxkLmlzQWZ0ZXJDb250ZW50KCkpOwotICAgICAgICBjaGlsZC5wYXJlbnQoKS0+
cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZW1vdmVDaGlsZCgqY2hpbGQucGFyZW50KCkp
OwotICAgICAgICByZXR1cm47CisgICAgICAgIGNoaWxkLnBhcmVudCgpLT5yZW1vdmVBbmREZXN0
cm95Q2hpbGQoY2hpbGQpOworICAgICAgICByZXR1cm4gdGFrZUNoaWxkKCpjaGlsZC5wYXJlbnQo
KSk7CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3aXNlIGZpbmQgdGhlIGNvbnRhaW5pbmcgcnVuIGFu
ZCByZW1vdmUgaXQgZnJvbSB0aGVyZS4KLSAgICBmaW5kUnVieVJ1blBhcmVudChjaGlsZCkucmVt
b3ZlQ2hpbGQoY2hpbGQpOworICAgIHJldHVybiBmaW5kUnVieVJ1blBhcmVudChjaGlsZCkudGFr
ZUNoaWxkKGNoaWxkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1
NSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJSdWJ5QXNJbmxpbmUoRWxlbWVudCYsIFJlbmRlclN0
eWxlJiYpOwogICAgIHZpcnR1YWwgflJlbmRlclJ1YnlBc0lubGluZSgpOwogCi0gICAgdm9pZCBh
ZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0g
MCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKSBv
dmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRy
PFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIG92ZXJyaWRlOwog
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CkBAIC03NSw4ICs3NSw4IEBAIHB1
YmxpYzoKIAogICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKLSAgICB2b2lkIGFkZENoaWxkKFJl
bmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiB0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkgb3ZlcnJpZGU7CiAKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSdWJ5QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlCYXNlLmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsOCAr
OTYsOSBAQCB2b2lkIFJlbmRlclJ1YnlCYXNlOjptb3ZlSW5saW5lQ2hpbGRyZW4oCiAgICAgICAg
IGlmIChsYXN0Q2hpbGQgJiYgbGFzdENoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgbGFzdENo
aWxkLT5jaGlsZHJlbklubGluZSgpKQogICAgICAgICAgICAgdG9CbG9jayA9IGRvd25jYXN0PFJl
bmRlckJsb2NrPihsYXN0Q2hpbGQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRvQmxv
Y2sgPSB0b0Jhc2UtPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0gICAgICAgICAgICB0b0Jhc2Ut
Pmluc2VydENoaWxkSW50ZXJuYWwodG9CbG9jaywgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwor
ICAgICAgICAgICAgYXV0byBuZXdUb0Jsb2NrID0gdG9CYXNlLT5jcmVhdGVBbm9ueW1vdXNCbG9j
aygpOworICAgICAgICAgICAgdG9CbG9jayA9IG5ld1RvQmxvY2suZ2V0KCk7CisgICAgICAgICAg
ICB0b0Jhc2UtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShuZXdUb0Jsb2NrKSwgbnVsbHB0
ciwgTm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICB9CiAgICAgfQogICAgIC8vIE1vdmUgb3VyIGlu
bGluZSBjaGlsZHJlbiBpbnRvIHRoZSB0YXJnZXQgYmxvY2sgd2UgZGV0ZXJtaW5lZCBhYm92ZS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHJldmlz
aW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODksMTAgKzg5LDggQEAgUmVuZGVyUnVieUJhc2UqIFJlbmRl
clJ1YnlSdW46OnJ1YnlCYXNlKAogUmVuZGVyUnVieUJhc2UqIFJlbmRlclJ1YnlSdW46OnJ1YnlC
YXNlU2FmZSgpCiB7CiAgICAgUmVuZGVyUnVieUJhc2UqIGJhc2UgPSBydWJ5QmFzZSgpOwotICAg
IGlmICghYmFzZSkgewotICAgICAgICBiYXNlID0gY3JlYXRlUnVieUJhc2UoKTsKLSAgICAgICAg
UmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChiYXNlKTsKLSAgICB9CisgICAgaWYgKCFiYXNlKQor
ICAgICAgICBiYXNlID0gJmJhc2VBZGRDaGlsZDxSZW5kZXJCbG9ja0Zsb3c+KGNyZWF0ZVJ1YnlC
YXNlKCkpOwogICAgIHJldHVybiBiYXNlOwogfQogCkBAIC0xMDYsNyArMTA0LDcgQEAgYm9vbCBS
ZW5kZXJSdWJ5UnVuOjppc0NoaWxkQWxsb3dlZChjb25zdAogICAgIHJldHVybiBjaGlsZC5pc0lu
bGluZSgpIHx8IGNoaWxkLmlzUnVieVRleHQoKTsKIH0KIAotdm9pZCBSZW5kZXJSdWJ5UnVuOjph
ZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQor
dm9pZCBSZW5kZXJSdWJ5UnVuOjphZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQpOwogCkBA
IC0xMTUsNyArMTEzLDcgQEAgdm9pZCBSZW5kZXJSdWJ5UnVuOjphZGRDaGlsZChSZW5kZXJPYmpl
YwogICAgICAgICAgICAgLy8gUmVuZGVyUnVieSBoYXMgYWxyZWFkeSBhc2NlcnRhaW5lZCB0aGF0
IHdlIGNhbiBhZGQgdGhlIGNoaWxkIGhlcmUuCiAgICAgICAgICAgICBBU1NFUlQoIWhhc1J1YnlU
ZXh0KCkpOwogICAgICAgICAgICAgLy8gcHJlcGVuZCBydWJ5IHRleHRzIGFzIGZpcnN0IGNoaWxk
Ci0gICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGNoaWxkLCBmaXJzdENoaWxk
KCkpOworICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxk
KSwgZmlyc3RDaGlsZCgpKTsKICAgICAgICAgfSAgZWxzZSBpZiAoYmVmb3JlQ2hpbGQtPmlzUnVi
eVRleHQoKSkgewogICAgICAgICAgICAgLy8gTmV3IHRleHQgaXMgaW5zZXJ0ZWQganVzdCBiZWZv
cmUgYW5vdGhlci4KICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgbmV3IHRleHQgdGFr
ZXMgdGhlIHBsYWNlIG9mIHRoZSBvbGQgb25lLCBhbmQKQEAgLTEyMywzNCArMTIxLDM1IEBAIHZv
aWQgUmVuZGVyUnVieVJ1bjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWMKICAgICAgICAgICAgIEFTU0VS
VChiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcyk7CiAgICAgICAgICAgICBSZW5kZXJFbGVt
ZW50KiBydWJ5ID0gcGFyZW50KCk7CiAgICAgICAgICAgICBBU1NFUlQoaXNSdWJ5KHJ1YnkpKTsK
LSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBuZXdSdW4gPSBzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1
YnkpOwotICAgICAgICAgICAgcnVieS0+YWRkQ2hpbGQobmV3UnVuLCBuZXh0U2libGluZygpKTsK
KyAgICAgICAgICAgIGF1dG8gbmV3UnVuID0gc3RhdGljQ3JlYXRlUnVieVJ1bihydWJ5KTsKKyAg
ICAgICAgICAgIHJ1YnktPmFkZENoaWxkKFdURk1vdmUobmV3UnVuKSwgbmV4dFNpYmxpbmcoKSk7
CiAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBydWJ5IHRleHQgYW5kIG1vdmUgdGhlIG9sZCBv
bmUgdG8gdGhlIG5ldyBydW4KICAgICAgICAgICAgIC8vIE5vdGU6IERvaW5nIGl0IGluIHRoaXMg
b3JkZXIgYW5kIG5vdCB1c2luZyBSZW5kZXJSdWJ5UnVuJ3MgbWV0aG9kcywKICAgICAgICAgICAg
IC8vIGluIG9yZGVyIHRvIGF2b2lkIGF1dG9tYXRpYyByZW1vdmFsIG9mIHRoZSBydWJ5IHJ1biBp
biBjYXNlIHRoZXJlIGlzIG5vCiAgICAgICAgICAgICAvLyBvdGhlciBjaGlsZCBiZXNpZGVzIHRo
ZSBvbGQgcnVieSB0ZXh0LgotICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChj
aGlsZCwgYmVmb3JlQ2hpbGQpOwotICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjpyZW1vdmVD
aGlsZCgqYmVmb3JlQ2hpbGQpOwotICAgICAgICAgICAgbmV3UnVuLT5hZGRDaGlsZChiZWZvcmVD
aGlsZCk7CisgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKFdURk1vdmUoY2hp
bGQpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBhdXRvIHRha2VuQmVmb3JlQ2hpbGQgPSBS
ZW5kZXJCbG9ja0Zsb3c6OnRha2VDaGlsZCgqYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgbmV3
UnVuLT5hZGRDaGlsZChXVEZNb3ZlKHRha2VuQmVmb3JlQ2hpbGQpKTsKICAgICAgICAgfSBlbHNl
IGlmIChoYXNSdWJ5QmFzZSgpKSB7CiAgICAgICAgICAgICAvLyBJbnNlcnRpb24gYmVmb3JlIGEg
cnVieSBiYXNlIG9iamVjdC4KICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBuZWVkIGlu
c2VydCBhIG5ldyBydW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSBhbmQgc3BsaXQgdGhlIGJhc2Uu
CiAgICAgICAgICAgICBSZW5kZXJFbGVtZW50KiBydWJ5ID0gcGFyZW50KCk7Ci0gICAgICAgICAg
ICBSZW5kZXJSdWJ5UnVuKiBuZXdSdW4gPSBzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1YnkpOwotICAg
ICAgICAgICAgcnVieS0+YWRkQ2hpbGQobmV3UnVuLCB0aGlzKTsKLSAgICAgICAgICAgIG5ld1J1
bi0+YWRkQ2hpbGQoY2hpbGQpOwotICAgICAgICAgICAgcnVieUJhc2VTYWZlKCktPm1vdmVDaGls
ZHJlbihuZXdSdW4tPnJ1YnlCYXNlU2FmZSgpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBh
dXRvIG5ld1J1biA9IHN0YXRpY0NyZWF0ZVJ1YnlSdW4ocnVieSk7CisgICAgICAgICAgICBhdXRv
JiBydW4gPSAqbmV3UnVuOworICAgICAgICAgICAgcnVieS0+YWRkQ2hpbGQoV1RGTW92ZShuZXdS
dW4pLCB0aGlzKTsKKyAgICAgICAgICAgIHJ1bi5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7Cisg
ICAgICAgICAgICBydWJ5QmFzZVNhZmUoKS0+bW92ZUNoaWxkcmVuKHJ1bi5ydWJ5QmFzZVNhZmUo
KSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gY2hp
bGQgaXMgbm90IGEgdGV4dCAtPiBpbnNlcnQgaXQgaW50byB0aGUgYmFzZQogICAgICAgICAvLyAo
YXBwZW5kIGl0IGluc3RlYWQgaWYgYmVmb3JlQ2hpbGQgaXMgdGhlIHJ1YnkgdGV4dCkKICAgICAg
ICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5pc1J1YnlUZXh0KCkpCiAgICAgICAg
ICAgICBiZWZvcmVDaGlsZCA9IDA7Ci0gICAgICAgIHJ1YnlCYXNlU2FmZSgpLT5hZGRDaGlsZChj
aGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBydWJ5QmFzZVNhZmUoKS0+YWRkQ2hpbGQoV1RG
TW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyUnVieVJ1
bjo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IFJlbmRlclJ1YnlSdW46OnRha2VDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQogewogICAg
IC8vIElmIHRoZSBjaGlsZCBpcyBhIHJ1YnkgdGV4dCwgdGhlbiBtZXJnZSB0aGUgcnVieSBiYXNl
IHdpdGggdGhlIGJhc2Ugb2YKICAgICAvLyB0aGUgcmlnaHQgc2libGluZyBydW4sIGlmIHBvc3Np
YmxlLgpAQCAtMTcyLDM5ICsxNzEsMzkgQEAgdm9pZCBSZW5kZXJSdWJ5UnVuOjpyZW1vdmVDaGls
ZChSZW5kZXJPYgogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVuZGVyQmxvY2tGbG93OjpyZW1v
dmVDaGlsZChjaGlsZCk7CisgICAgYXV0byB0YWtlbkNoaWxkID0gUmVuZGVyQmxvY2tGbG93Ojp0
YWtlQ2hpbGQoY2hpbGQpOwogCiAgICAgaWYgKCFiZWluZ0Rlc3Ryb3llZCgpICYmICFyZW5kZXJU
cmVlQmVpbmdEZXN0cm95ZWQoKSkgewogICAgICAgICAvLyBDaGVjayBpZiBvdXIgYmFzZSAoaWYg
YW55KSBpcyBub3cgZW1wdHkuIElmIHNvLCBkZXN0cm95IGl0LgogICAgICAgICBSZW5kZXJCbG9j
ayogYmFzZSA9IHJ1YnlCYXNlKCk7CiAgICAgICAgIGlmIChiYXNlICYmICFiYXNlLT5maXJzdENo
aWxkKCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6cmVtb3ZlQ2hpbGQoKmJhc2Up
OworICAgICAgICAgICAgYXV0byB0YWtlbkJhc2UgPSBSZW5kZXJCbG9ja0Zsb3c6OnRha2VDaGls
ZCgqYmFzZSk7CiAgICAgICAgICAgICBiYXNlLT5kZWxldGVMaW5lcygpOwotICAgICAgICAgICAg
YmFzZS0+ZGVzdHJveSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgYW55IG9mIHRoZSBh
Ym92ZSBsZWF2ZXMgdGhlIHJ1biBlbXB0eSwgZGVzdHJveSBpdCBhcyB3ZWxsLgogICAgICAgICBp
ZiAoIWhhc1J1YnlUZXh0KCkgJiYgIWhhc1J1YnlCYXNlKCkpIHsKLSAgICAgICAgICAgIHBhcmVu
dCgpLT5yZW1vdmVDaGlsZCgqdGhpcyk7CisgICAgICAgICAgICBhdXRvIHRha2VuVGhpcyA9IHBh
cmVudCgpLT50YWtlQ2hpbGQoKnRoaXMpOwogICAgICAgICAgICAgZGVsZXRlTGluZXMoKTsKLSAg
ICAgICAgICAgIGRlc3Ryb3koKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB0YWtl
bkNoaWxkOwogfQogCi1SZW5kZXJSdWJ5QmFzZSogUmVuZGVyUnVieVJ1bjo6Y3JlYXRlUnVieUJh
c2UoKSBjb25zdAorUmVuZGVyUHRyPFJlbmRlclJ1YnlCYXNlPiBSZW5kZXJSdWJ5UnVuOjpjcmVh
dGVSdWJ5QmFzZSgpIGNvbnN0CiB7CiAgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpj
cmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlKCksIEJMT0NLKTsKICAgICBuZXdT
dHlsZS5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsgLy8gRklYTUU6IHVzZSBXRUJLSVRfQ0VOVEVSPwot
ICAgIGF1dG8gcmVuZGVyZXIgPSBuZXcgUmVuZGVyUnVieUJhc2UoZG9jdW1lbnQoKSwgV1RGTW92
ZShuZXdTdHlsZSkpOworICAgIGF1dG8gcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJS
dWJ5QmFzZT4oZG9jdW1lbnQoKSwgV1RGTW92ZShuZXdTdHlsZSkpOwogICAgIHJlbmRlcmVyLT5p
bml0aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gcmVuZGVyZXI7CiB9CiAKLVJlbmRlclJ1YnlS
dW4qIFJlbmRlclJ1YnlSdW46OnN0YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3QgUmVuZGVyT2JqZWN0
KiBwYXJlbnRSdWJ5KQorUmVuZGVyUHRyPFJlbmRlclJ1YnlSdW4+IFJlbmRlclJ1YnlSdW46OnN0
YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnRSdWJ5KQogewogICAg
IEFTU0VSVChpc1J1YnkocGFyZW50UnVieSkpOwotICAgIGF1dG8gcmVuZGVyZXIgPSBuZXcgUmVu
ZGVyUnVieVJ1bihwYXJlbnRSdWJ5LT5kb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5v
bnltb3VzU3R5bGVXaXRoRGlzcGxheShwYXJlbnRSdWJ5LT5zdHlsZSgpLCBJTkxJTkVfQkxPQ0sp
KTsKKyAgICBhdXRvIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyUnVieVJ1bj4ocGFy
ZW50UnVieS0+ZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0
aERpc3BsYXkocGFyZW50UnVieS0+c3R5bGUoKSwgSU5MSU5FX0JMT0NLKSk7CiAgICAgcmVuZGVy
ZXItPmluaXRpYWxpemVTdHlsZSgpOwogICAgIHJldHVybiByZW5kZXJlcjsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAkocmV2aXNpb24gMjIyNjA3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMTQgKzU2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7CiAK
ICAgICBib29sIGlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRl
clN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3Qq
IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxk
KFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
ID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJl
bmRlck9iamVjdCYpIG92ZXJyaWRlOwogCiAgICAgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2Nr
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGdldE92ZXJoYW5nKGJvb2wgZmlyc3RMaW5l
LCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIs
IGZsb2F0JiBzdGFydE92ZXJoYW5nLCBmbG9hdCYgZW5kT3ZlcmhhbmcpIGNvbnN0OwogCi0gICAg
c3RhdGljIFJlbmRlclJ1YnlSdW4qIHN0YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3QgUmVuZGVyT2Jq
ZWN0KiBwYXJlbnRSdWJ5KTsKKyAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclJ1YnlSdW4+IHN0
YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnRSdWJ5KTsKICAgICAK
ICAgICB2b2lkIHVwZGF0ZVByaW9yQ29udGV4dEZyb21DYWNoZWRCcmVha0l0ZXJhdG9yKExhenlM
aW5lQnJlYWtJdGVyYXRvciYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2FjaGVkUHJpb3JDaGFyYWN0
ZXJzKFVDaGFyIGxhc3QsIFVDaGFyIHNlY29uZFRvTGFzdCkKQEAgLTc0LDcgKzc0LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgY2FuQnJlYWtCZWZvcmUoY29uc3QgTGF6eUxpbmVCcmVha0l0ZXJhdG9y
JikgY29uc3Q7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgUmVuZGVyUnVieUJhc2UqIGNyZWF0ZVJ1
YnlCYXNlKCkgY29uc3Q7CisgICAgUmVuZGVyUHRyPFJlbmRlclJ1YnlCYXNlPiBjcmVhdGVSdWJ5
QmFzZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNSdWJ5UnVuKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgc3Rh
dGljIGlubGluZSB2b2lkIHJlc2V0U2VjdGlvblBvaW50ZXJJZgogICAgICAgICBwdHIgPSAwOwog
fQogCi12b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVy
UHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAg
ICAgYm9vbCB3cmFwSW5Bbm9ueW1vdXNTZWN0aW9uID0gIWNoaWxkLT5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKTsKIApAQCAtMTUwLDE4ICsxNTAsMTggQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KgogICAgICAgICAgICAgY2FzZSBUQUJMRV9IRUFERVJfR1JPVVA6CiAg
ICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1faGVhZCwgYmVm
b3JlQ2hpbGQpOwogICAgICAgICAgICAgICAgIGlmICghbV9oZWFkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1faGVhZCA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpOworICAg
ICAgICAgICAgICAgICAgICBtX2hlYWQgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNo
aWxkLmdldCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAg
ICByZXNldFNlY3Rpb25Qb2ludGVySWZOb3RCZWZvcmUobV9maXJzdEJvZHksIGJlZm9yZUNoaWxk
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2ZpcnN0Qm9keSkgCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2ZpcnN0Qm9keSA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oY2hp
bGQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBkb3duY2FzdDxSZW5k
ZXJUYWJsZVNlY3Rpb24+KGNoaWxkLmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUQUJMRV9GT09URVJfR1JPVVA6CiAgICAgICAgICAg
ICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1fZm9vdCwgYmVmb3JlQ2hpbGQp
OwogICAgICAgICAgICAgICAgIGlmICghbV9mb290KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
Zm9vdCA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpOworICAgICAgICAgICAg
ICAgICAgICBtX2Zvb3QgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkLmdldCgp
KTsKICAgICAgICAgICAgICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xNjksNyAr
MTY5LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgICAg
ICAgICAgY2FzZSBUQUJMRV9ST1dfR1JPVVA6CiAgICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9u
UG9pbnRlcklmTm90QmVmb3JlKG1fZmlyc3RCb2R5LCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFtX2ZpcnN0Qm9keSkKLSAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkg
PSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9maXJzdEJvZHkgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkLmdldCgp
KTsKICAgICAgICAgICAgICAgICB3cmFwSW5Bbm9ueW1vdXNTZWN0aW9uID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTg3LDE5ICsxODcs
MTkgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgICAgICBp
ZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpCiAgICAgICAg
ICAgICBiZWZvcmVDaGlsZCA9IHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChiZWZvcmVD
aGlsZCk7CiAKLSAgICAgICAgUmVuZGVyQm94OjphZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQp
OworICAgICAgICBSZW5kZXJCb3g6OmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGls
ZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIWJlZm9yZUNoaWxkICYmIGlz
PFJlbmRlclRhYmxlU2VjdGlvbj4obGFzdENoaWxkKCkpICYmIGxhc3RDaGlsZCgpLT5pc0Fub255
bW91cygpICYmICFsYXN0Q2hpbGQoKS0+aXNCZWZvcmVDb250ZW50KCkpIHsKLSAgICAgICAgZG93
bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqbGFzdENoaWxkKCkpLmFkZENoaWxkKGNoaWxkKTsK
KyAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqbGFzdENoaWxkKCkpLmFkZENo
aWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChi
ZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgYmVmb3JlQ2hpbGQt
PnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWN0aW9uID0gYmVm
b3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVT
ZWN0aW9uPihzZWN0aW9uKSAmJiBzZWN0aW9uLT5pc0Fub255bW91cygpKSB7Ci0gICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KCpzZWN0aW9uKS5hZGRDaGlsZChjaGlsZCk7
CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KCpzZWN0aW9uKS5hZGRD
aGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CkBAIC0yMTEsMTYgKzIxMSwxNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5k
ZXJPYmplY3QqCiAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiYgc2VjdGlvbiA9IGRvd25jYXN0
PFJlbmRlclRhYmxlU2VjdGlvbj4oKmxhc3RCb3gpOwogICAgICAgICBpZiAoYmVmb3JlQ2hpbGQg
PT0gJnNlY3Rpb24pCiAgICAgICAgICAgICBiZWZvcmVDaGlsZCA9IHNlY3Rpb24uZmlyc3RSb3co
KTsKLSAgICAgICAgc2VjdGlvbi5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAg
ICBzZWN0aW9uLmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWlzPFJlbmRlclRhYmxl
U2VjdGlvbj4oKmJlZm9yZUNoaWxkKSAmJiBiZWZvcmVDaGlsZC0+c3R5bGUoKS5kaXNwbGF5KCkg
IT0gVEFCTEVfQ0FQVElPTiAmJiBiZWZvcmVDaGlsZC0+c3R5bGUoKS5kaXNwbGF5KCkgIT0gVEFC
TEVfQ09MVU1OX0dST1VQKQogICAgICAgICBiZWZvcmVDaGlsZCA9IG51bGxwdHI7CiAKLSAgICBh
dXRvIHNlY3Rpb24gPSBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255bW91c1dpdGhQYXJl
bnRSZW5kZXJlcigqdGhpcykucmVsZWFzZSgpOwotICAgIGFkZENoaWxkKHNlY3Rpb24sIGJlZm9y
ZUNoaWxkKTsKLSAgICBzZWN0aW9uLT5hZGRDaGlsZChjaGlsZCk7CisgICAgYXV0byBuZXdTZWN0
aW9uID0gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVy
ZXIoKnRoaXMpOworICAgIGF1dG8mIHNlY3Rpb24gPSAqbmV3U2VjdGlvbjsKKyAgICBhZGRDaGls
ZChXVEZNb3ZlKG5ld1NlY3Rpb24pLCBiZWZvcmVDaGlsZCk7CisgICAgc2VjdGlvbi5hZGRDaGls
ZChXVEZNb3ZlKGNoaWxkKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGU6OmFkZENhcHRpb24oY29u
c3QgUmVuZGVyVGFibGVDYXB0aW9uKiBjYXB0aW9uKQpAQCAtMTU3NywxNCArMTU3OCwxNCBAQCBi
b29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGU+IFJlbmRlclRhYmxlOjpjcmVhdGVU
YWJsZVdpdGhTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkKK1JlbmRlclB0cjxSZW5kZXJUYWJsZT4gUmVuZGVyVGFibGU6OmNyZWF0ZVRhYmxlV2l0aFN0
eWxlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAg
IGF1dG8gdGFibGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclRhYmxlPihkb2N1bWVudCwgUmVu
ZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUsIHN0eWxlLmRp
c3BsYXkoKSA9PSBJTkxJTkUgPyBJTkxJTkVfVEFCTEUgOiBUQUJMRSkpOworICAgIGF1dG8gdGFi
bGUgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUYWJsZT4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpj
cmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBzdHlsZS5kaXNwbGF5KCkgPT0g
SU5MSU5FID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpKTsKICAgICB0YWJsZS0+aW5pdGlhbGl6ZVN0
eWxlKCk7CiAgICAgcmV0dXJuIHRhYmxlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFi
bGU+IFJlbmRlclRhYmxlOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3Qg
UmVuZGVyRWxlbWVudCYgcGFyZW50KQorUmVuZGVyUHRyPFJlbmRlclRhYmxlPiBSZW5kZXJUYWJs
ZTo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQm
IHBhcmVudCkKIHsKICAgICByZXR1cm4gUmVuZGVyVGFibGU6OmNyZWF0ZVRhYmxlV2l0aFN0eWxl
KHBhcmVudC5kb2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsx
MjYsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBjYWxjQm9yZGVyRW5kKCkgY29uc3Q7CiAg
ICAgdm9pZCByZWNhbGNCb3JkZXJzSW5Sb3dEaXJlY3Rpb24oKTsKIAotICAgIHZvaWQgYWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIGZp
bmFsOworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBmaW5hbDsKIAogICAgIHN0cnVjdCBDb2x1bW5T
dHJ1Y3QgewogICAgICAgICBleHBsaWNpdCBDb2x1bW5TdHJ1Y3QodW5zaWduZWQgaW5pdGlhbFNw
YW4gPSAxKQpAQCAtMjUwLDggKzI1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJlY2FsY1Nl
Y3Rpb25zKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJs
ZT4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQm
KTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRo
U2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclRhYmxlPiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50
UmVuZGVyZXIoY29uc3QgUmVuZGVyRWxlbWVudCYpOworICAgIFJlbmRlclB0cjxSZW5kZXJCb3g+
IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVy
ZXIpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgY29uc3QgQm9yZGVyVmFsdWUmIHRhYmxlU3RhcnRC
b3JkZXJBZGpvaW5pbmdDZWxsKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCYpIGNvbnN0OwogICAgIGNv
bnN0IEJvcmRlclZhbHVlJiB0YWJsZUVuZEJvcmRlckFkam9pbmluZ0NlbGwoY29uc3QgUmVuZGVy
VGFibGVDZWxsJikgY29uc3Q7CkBAIC0yNzMsNyArMjczLDcgQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgc2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlPiBjcmVhdGVUYWJsZVdpdGhTdHlsZShE
b2N1bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgc3RhdGljIFJlbmRlclB0cjxSZW5k
ZXJUYWJsZT4gY3JlYXRlVGFibGVXaXRoU3R5bGUoRG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHls
ZSYpOwogCiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuICJSZW5kZXJUYWJsZSI7IH0KIApAQCAtMzgwLDcgKzM4MCw3IEBAIGlubGluZSBSZW5kZXJU
YWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjoKIAogaW5saW5lIGJvb2wgaXNEaXJlY3Rpb25TYW1l
KGNvbnN0IFJlbmRlckJveCogdGFibGVJdGVtLCBjb25zdCBSZW5kZXJCb3gqIG90aGVyVGFibGVJ
dGVtKSB7IHJldHVybiB0YWJsZUl0ZW0gJiYgb3RoZXJUYWJsZUl0ZW0gPyB0YWJsZUl0ZW0tPnN0
eWxlKCkuZGlyZWN0aW9uKCkgPT0gb3RoZXJUYWJsZUl0ZW0tPnN0eWxlKCkuZGlyZWN0aW9uKCkg
OiB0cnVlOyB9CiAKLWlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBSZW5kZXJUYWJs
ZTo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5k
ZXJlcikgY29uc3QKK2lubGluZSBSZW5kZXJQdHI8UmVuZGVyQm94PiBSZW5kZXJUYWJsZTo6Y3Jl
YXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikg
Y29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyVGFibGU6OmNyZWF0ZVRhYmxlV2l0aFN0eWxlKHJl
bmRlcmVyLmRvY3VtZW50KCksIHJlbmRlcmVyLnN0eWxlKCkpOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDIyMjYwNykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzY1LDE0ICsxMzY1LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpzY3Jv
bGxiYXJzQ2hhbmdlZCgKICAgICAgICAgc2V0SW50cmluc2ljUGFkZGluZ0FmdGVyKGludHJpbnNp
Y1BhZGRpbmdBZnRlcigpIC0gc2Nyb2xsYmFySGVpZ2h0KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclRhYmxlQ2VsbD4gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVUYWJsZUNlbGxXaXRoU3R5
bGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitSZW5kZXJQ
dHI8UmVuZGVyVGFibGVDZWxsPiBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZVRhYmxlQ2VsbFdpdGhT
dHlsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAg
ICBhdXRvIGNlbGwgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclRhYmxlQ2VsbD4oZG9jdW1lbnQs
IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBUQUJM
RV9DRUxMKSk7CisgICAgYXV0byBjZWxsID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGFibGVDZWxs
Pihkb2N1bWVudCwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXko
c3R5bGUsIFRBQkxFX0NFTEwpKTsKICAgICBjZWxsLT5pbml0aWFsaXplU3R5bGUoKTsKICAgICBy
ZXR1cm4gY2VsbDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlQ2VsbD4gUmVuZGVy
VGFibGVDZWxsOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVy
VGFibGVSb3cmIHBhcmVudCkKK1JlbmRlclB0cjxSZW5kZXJUYWJsZUNlbGw+IFJlbmRlclRhYmxl
Q2VsbDo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlclRhYmxl
Um93JiBwYXJlbnQpCiB7CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlQ2VsbDo6Y3JlYXRlVGFibGVD
ZWxsV2l0aFN0eWxlKHBhcmVudC5kb2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCShyZXZpc2lvbiAy
MjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjZWxsV2lk
dGhDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsV2lkdGhDaGFuZ2VkOyB9CiAgICAgdm9p
ZCBzZXRDZWxsV2lkdGhDaGFuZ2VkKGJvb2wgYiA9IHRydWUpIHsgbV9jZWxsV2lkdGhDaGFuZ2Vk
ID0gYjsgfQogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZUNlbGw+IGNy
ZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVJvdyYpOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1l
VHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0YXRpYyBSZW5k
ZXJQdHI8UmVuZGVyVGFibGVDZWxsPiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIo
Y29uc3QgUmVuZGVyVGFibGVSb3cmKTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQm94PiBjcmVhdGVB
bm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlk
ZTsKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB1bmlmeSB3aGljaCB0YWJsZSBw
YXJ0J3Mgc3R5bGUgd2UgdXNlIGZvciBjb21wdXRpbmcgZGlyZWN0aW9uIGFuZAogICAgIC8vIHdy
aXRpbmcgbW9kZS4gV3JpdGluZyBtb2RlcyBhcmUgbm90IGFsbG93ZWQgb24gcm93IGdyb3VwIGFu
ZCByb3cgYnV0IGRpcmVjdGlvbiBpcy4KQEAgLTEzOCw3ICsxMzgsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwogCiBwcml2
YXRlOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVDZWxsPiBjcmVhdGVU
YWJsZUNlbGxXaXRoU3R5bGUoRG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIHN0
YXRpYyBSZW5kZXJQdHI8UmVuZGVyVGFibGVDZWxsPiBjcmVhdGVUYWJsZUNlbGxXaXRoU3R5bGUo
RG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwogCiAgICAgY29uc3QgY2hhciogcmVuZGVy
TmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIChpc0Fub255bW91cygpIHx8IGlzUHNldWRv
RWxlbWVudCgpKSA/ICJSZW5kZXJUYWJsZUNlbGwgKGFub255bW91cykiIDogIlJlbmRlclRhYmxl
Q2VsbCI7IH0KIApAQCAtMzc1LDcgKzM3NSw3IEBAIGlubGluZSB2b2lkIFJlbmRlclRhYmxlQ2Vs
bDo6aW52YWxpZGF0ZUgKICAgICBtX2hhc0VtcHR5Q29sbGFwc2VkRW5kQm9yZGVyID0gZmFsc2U7
CiB9CiAKLWlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBSZW5kZXJUYWJsZUNlbGw6
OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVy
ZXIpIGNvbnN0CitpbmxpbmUgUmVuZGVyUHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGVDZWxsOjpj
cmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVy
KSBjb25zdAogewogICAgIHJldHVybiBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZVRhYmxlQ2VsbFdp
dGhTdHlsZShyZW5kZXJlci5kb2N1bWVudCgpLCByZW5kZXJlci5zdHlsZSgpKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNpb24g
MjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5k
ZXJUYWJsZVJvdzo6Ym9yZGUKICAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJFbmQoKTsKIH0KIAot
dm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRl
clB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewog
ICAgIGlmICghaXM8UmVuZGVyVGFibGVDZWxsPigqY2hpbGQpKSB7CiAgICAgICAgIFJlbmRlck9i
amVjdCogbGFzdCA9IGJlZm9yZUNoaWxkOwpAQCAtMTE2LDE0ICsxMTYsMTQgQEAgdm9pZCBSZW5k
ZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZQogICAgICAgICAgICAgUmVuZGVyVGFibGVD
ZWxsJiBjZWxsID0gZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqbGFzdCk7CiAgICAgICAgICAg
ICBpZiAoYmVmb3JlQ2hpbGQgPT0gJmNlbGwpCiAgICAgICAgICAgICAgICAgYmVmb3JlQ2hpbGQg
PSBjZWxsLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGNlbGwuYWRkQ2hpbGQoY2hpbGQsIGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgICAgIGNlbGwuYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJl
Zm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgYmVmb3JlQ2hp
bGQtPnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2VsbCA9
IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgICAgIGlmIChpczxSZW5k
ZXJUYWJsZUNlbGw+KGNlbGwpICYmIGNlbGwtPmlzQW5vbnltb3VzKCkpIHsKLSAgICAgICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpjZWxsKS5hZGRDaGlsZChjaGlsZCk7Cisg
ICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqY2VsbCkuYWRkQ2hpbGQo
V1RGTW92ZShjaGlsZCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMTMyLDIxICsxMzIsMjMgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRk
Q2hpbGQoUmVuZGVyT2JqZQogICAgICAgICBpZiAobGFzdCAmJiBsYXN0LT5wYXJlbnQoKSAmJiBs
YXN0LT5wYXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdC0+cGFyZW50KCktPmlzQmVmb3Jl
T3JBZnRlckNvbnRlbnQoKSkgewogICAgICAgICAgICAgLy8gSWYgYmVmb3JlQ2hpbGQgaXMgaW5z
aWRlIGFuIGFub255bW91cyBjZWxsLCBpbnNlcnQgaW50byB0aGUgY2VsbC4KICAgICAgICAgICAg
IGlmICghaXM8UmVuZGVyVGFibGVDZWxsPigqbGFzdCkpIHsKLSAgICAgICAgICAgICAgICBsYXN0
LT5wYXJlbnQoKS0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAg
ICBsYXN0LT5wYXJlbnQoKS0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBJ
ZiBiZWZvcmVDaGlsZCBpcyBpbnNpZGUgYW4gYW5vbnltb3VzIHJvdywgaW5zZXJ0IGludG8gdGhl
IHJvdy4KICAgICAgICAgICAgIGF1dG8mIHBhcmVudCA9ICpsYXN0LT5wYXJlbnQoKTsKICAgICAg
ICAgICAgIGlmIChpczxSZW5kZXJUYWJsZVJvdz4ocGFyZW50KSkgewotICAgICAgICAgICAgICAg
IGF1dG8qIGNlbGwgPSBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRS
ZW5kZXJlcigqdGhpcykucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIHBhcmVudC5hZGRDaGls
ZChjZWxsLCBiZWZvcmVDaGlsZCk7Ci0gICAgICAgICAgICAgICAgY2VsbC0+YWRkQ2hpbGQoY2hp
bGQpOworICAgICAgICAgICAgICAgIGF1dG8gbmV3Q2VsbCA9IFJlbmRlclRhYmxlQ2VsbDo6Y3Jl
YXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBh
dXRvJiBjZWxsID0gKm5ld0NlbGw7CisgICAgICAgICAgICAgICAgcGFyZW50LmFkZENoaWxkKFdU
Rk1vdmUobmV3Q2VsbCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICBjZWxsLmFkZENo
aWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAgICAgYXV0byogY2VsbCA9IFJlbmRlclRhYmxlQ2VsbDo6Y3Jl
YXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKCp0aGlzKS5yZWxlYXNlKCk7Ci0gICAgICAg
IGFkZENoaWxkKGNlbGwsIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgY2VsbC0+YWRkQ2hpbGQoY2hp
bGQpOworICAgICAgICBhdXRvIG5ld0NlbGwgPSBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZUFub255
bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcyk7CisgICAgICAgIGF1dG8mIGNlbGwgPSAqbmV3
Q2VsbDsKKyAgICAgICAgYWRkQ2hpbGQoV1RGTW92ZShuZXdDZWxsKSwgYmVmb3JlQ2hpbGQpOwor
ICAgICAgICBjZWxsLmFkZENoaWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0gCiAKQEAgLTE2MCw3ICsxNjIsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGls
ZChSZW5kZXJPYmplCiAgICAgICAgIHNlY3Rpb24tPmFkZENlbGwoJmNlbGwsIHRoaXMpOwogCiAg
ICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCBpczxSZW5kZXJUYWJsZUNlbGw+KCpiZWZvcmVDaGls
ZCkpOwotICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoJmNlbGwsIGJlZm9yZUNoaWxkKTsKKyAgICBS
ZW5kZXJCb3g6OmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAKICAgICBp
ZiAoYmVmb3JlQ2hpbGQgfHwgbmV4dFJvdygpKQogICAgICAgICBzZWN0aW9uKCktPnNldE5lZWRz
Q2VsbFJlY2FsYygpOwpAQCAtMjcwLDE0ICsyNzIsMTQgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6
aW1hZ2VDaGFuZ2VkKFdyYXBwZQogICAgIHJlcGFpbnQoKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclRhYmxlUm93PiBSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlVGFibGVSb3dXaXRoU3R5bGUo
RG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitSZW5kZXJQdHI8
UmVuZGVyVGFibGVSb3c+IFJlbmRlclRhYmxlUm93OjpjcmVhdGVUYWJsZVJvd1dpdGhTdHlsZShE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBhdXRv
IHJvdyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyVGFibGVSb3c+KGRvY3VtZW50LCBSZW5kZXJT
dHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgVEFCTEVfUk9XKSk7
CisgICAgYXV0byByb3cgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUYWJsZVJvdz4oZG9jdW1lbnQs
IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBUQUJM
RV9ST1cpKTsKICAgICByb3ctPmluaXRpYWxpemVTdHlsZSgpOwogICAgIHJldHVybiByb3c7CiB9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZVJvdz4gUmVuZGVyVGFibGVSb3c6OmNyZWF0
ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24mIHBh
cmVudCkKK1JlbmRlclB0cjxSZW5kZXJUYWJsZVJvdz4gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFu
b255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24mIHBhcmVu
dCkKIHsKICAgICByZXR1cm4gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZVRhYmxlUm93V2l0aFN0eWxl
KHBhcmVudC5kb2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDggKzQ2LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBwYWludE91dGxpbmVGb3JSb3dJZk5l
ZWRlZChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJUYWJsZVJvdz4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRl
cmVyKGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiYpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJCb3g+IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyVGFibGVSb3c+IGNy
ZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24m
KTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5
cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0Um93
SW5kZXgodW5zaWduZWQpOwogICAgIGJvb2wgcm93SW5kZXhXYXNTZXQoKSBjb25zdCB7IHJldHVy
biBtX3Jvd0luZGV4ICE9IHVuc2V0Um93SW5kZXg7IH0KQEAgLTU4LDE0ICs1OCwxNCBAQCBwdWJs
aWM6CiAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ1N0YXJ0Q2VsbChjb25z
dCBSZW5kZXJUYWJsZUNlbGwmKSBjb25zdDsKICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVy
QWRqb2luaW5nRW5kQ2VsbChjb25zdCBSZW5kZXJUYWJsZUNlbGwmKSBjb25zdDsKIAotICAgIHZv
aWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IDApIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKIAogICAg
IGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQ
b2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwogCiAgICAg
dm9pZCBkZXN0cm95QW5kQ29sbGFwc2VBbm9ueW1vdXNTaWJsaW5nUm93cygpOwogCiBwcml2YXRl
OgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVSb3c+IGNyZWF0ZVRhYmxl
Um93V2l0aFN0eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICBzdGF0aWMg
UmVuZGVyUHRyPFJlbmRlclRhYmxlUm93PiBjcmVhdGVUYWJsZVJvd1dpdGhTdHlsZShEb2N1bWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CiAKICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKGlzQW5vbnltb3VzKCkgfHwgaXNQc2V1ZG9FbGVtZW50
KCkpID8gIlJlbmRlclRhYmxlUm93IChhbm9ueW1vdXMpIiA6ICJSZW5kZXJUYWJsZVJvdyI7IH0K
IApAQCAtMTUwLDcgKzE1MCw3IEBAIGlubGluZSBSZW5kZXJUYWJsZVJvdyogUmVuZGVyVGFibGVT
ZWN0aW8KICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KFJlbmRlckJveDo6bGFz
dENoaWxkKCkpOwogfQogCi1pbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gUmVuZGVy
VGFibGVSb3c6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJv
eCYgcmVuZGVyZXIpIGNvbnN0CitpbmxpbmUgUmVuZGVyUHRyPFJlbmRlckJveD4gUmVuZGVyVGFi
bGVSb3c6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYg
cmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlUm93OjpjcmVhdGVUYWJs
ZVJvd1dpdGhTdHlsZShyZW5kZXJlci5kb2N1bWVudCgpLCByZW5kZXJlci5zdHlsZSgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQg
UmVuZGVyVGFibGVTZWN0aW9uOjp3aWxsQmVSZW1vdmVkRnIKICAgICBzZXROZWVkc0NlbGxSZWNh
bGMoKTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlck9iamVj
dCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgaWYgKCFpczxSZW5kZXJUYWJsZVJvdz4oKmNoaWxkKSkg
ewogICAgICAgICBSZW5kZXJPYmplY3QqIGxhc3QgPSBiZWZvcmVDaGlsZDsKQEAgLTEyOCwxNCAr
MTI4LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXIKICAgICAg
ICAgICAgIFJlbmRlclRhYmxlUm93JiByb3cgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKmxh
c3QpOwogICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09ICZyb3cpCiAgICAgICAgICAgICAg
ICAgYmVmb3JlQ2hpbGQgPSByb3cuZmlyc3RDZWxsKCk7Ci0gICAgICAgICAgICByb3cuYWRkQ2hp
bGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIHJvdy5hZGRDaGlsZChXVEZNb3Zl
KGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYmICFiZWZvcmVDaGlsZC0+aXNBbm9ueW1vdXMoKSAm
JiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcykgewogICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByb3cgPSBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICBp
ZiAoaXM8UmVuZGVyVGFibGVSb3c+KHJvdykgJiYgcm93LT5pc0Fub255bW91cygpKSB7Ci0gICAg
ICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCpyb3cpLmFkZENoaWxkKGNoaWxk
KTsKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKnJvdykuYWRkQ2hp
bGQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMTQ2LDEzICsxNDYsMTQgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rp
b246OmFkZENoaWxkKFJlbmRlcgogICAgICAgICB3aGlsZSAobGFzdEJveCAmJiBsYXN0Qm94LT5w
YXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhaXM8UmVuZGVyVGFibGVSb3c+KCpsYXN0Qm94KSkK
ICAgICAgICAgICAgIGxhc3RCb3ggPSBsYXN0Qm94LT5wYXJlbnQoKTsKICAgICAgICAgaWYgKGxh
c3RCb3ggJiYgbGFzdEJveC0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdEJveC0+aXNCZWZvcmVPckFm
dGVyQ29udGVudCgpKSB7Ci0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKmxh
c3RCb3gpLmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBkb3duY2Fz
dDxSZW5kZXJUYWJsZVJvdz4oKmxhc3RCb3gpLmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZv
cmVDaGlsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBhdXRv
KiByb3cgPSBSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVy
KCp0aGlzKS5yZWxlYXNlKCk7Ci0gICAgICAgIGFkZENoaWxkKHJvdywgYmVmb3JlQ2hpbGQpOwot
ICAgICAgICByb3ctPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgYXV0byBuZXdSb3cgPSBSZW5k
ZXJUYWJsZVJvdzo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKCp0aGlzKTsKKyAg
ICAgICAgYXV0byYgcm93ID0gKm5ld1JvdzsKKyAgICAgICAgYWRkQ2hpbGQoV1RGTW92ZShuZXdS
b3cpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJvdy5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE3Niw3ICsxNzcsNyBAQCB2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgICAgIGJlZm9yZUNoaWxkID0gc3Bs
aXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKGJlZm9yZUNoaWxkKTsKIAogICAgIEFTU0VSVCgh
YmVmb3JlQ2hpbGQgfHwgaXM8UmVuZGVyVGFibGVSb3c+KCpiZWZvcmVDaGlsZCkpOwotICAgIFJl
bmRlckJveDo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBSZW5kZXJCb3g6OmFk
ZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiB9CiAKIHZvaWQgUmVuZGVyVGFi
bGVTZWN0aW9uOjplbnN1cmVSb3dzKHVuc2lnbmVkIG51bVJvd3MpCkBAIC0xNTkwLDE0ICsxNTkx
LDE0IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlU2VjdGlvbjoKICAgICByZXR1
cm4gaXQtPnZhbHVlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVTZWN0aW9uPiBS
ZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHlsZShEb2N1bWVudCYg
ZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK1JlbmRlclB0cjxSZW5kZXJUYWJs
ZVNlY3Rpb24+IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlVGFibGVTZWN0aW9uV2l0aFN0eWxl
KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIGF1
dG8gc2VjdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyVGFibGVTZWN0aW9uPihkb2N1bWVu
dCwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUsIFRB
QkxFX1JPV19HUk9VUCkpOworICAgIGF1dG8gc2VjdGlvbiA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRl
clRhYmxlU2VjdGlvbj4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHls
ZVdpdGhEaXNwbGF5KHN0eWxlLCBUQUJMRV9ST1dfR1JPVVApKTsKICAgICBzZWN0aW9uLT5pbml0
aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gc2VjdGlvbjsKIH0KIAotc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclRhYmxlU2VjdGlvbj4gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1vdXNX
aXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGUmIHBhcmVudCkKK1JlbmRlclB0cjxS
ZW5kZXJUYWJsZVNlY3Rpb24+IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlQW5vbnltb3VzV2l0
aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlclRhYmxlJiBwYXJlbnQpCiB7CiAgICAgcmV0dXJu
IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlVGFibGVTZWN0aW9uV2l0aFN0eWxlKHBhcmVudC5k
b2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIFJlbmRlclRhYmxlUm93KiBmaXJzdFJvdygp
IGNvbnN0OwogICAgIFJlbmRlclRhYmxlUm93KiBsYXN0Um93KCkgY29uc3Q7CiAKLSAgICB2b2lk
IGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQg
PSAwKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CiAKICAgICBz
dGQ6Om9wdGlvbmFsPGludD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsKIApA
QCAtMTQyLDggKzE0Miw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogV2UgbWF5IHdhbnQgdG8g
aW50cm9kdWNlIGEgc3RydWN0dXJlIGhvbGRpbmcgdGhlIGluLWZsdXggbGF5b3V0IGluZm9ybWF0
aW9uLgogICAgIExheW91dFVuaXQgZGlzdHJpYnV0ZUV4dHJhTG9naWNhbEhlaWdodFRvUm93cyhM
YXlvdXRVbml0IGV4dHJhTG9naWNhbEhlaWdodCk7CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclRhYmxlU2VjdGlvbj4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVy
KGNvbnN0IFJlbmRlclRhYmxlJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gY3Jl
YXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJUYWJsZVNlY3Rpb24+IGNyZWF0ZUFu
b255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZSYpOworICAgIFJlbmRl
clB0cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJl
bmRlckJveCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIAogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZTsKIApAQCAtMTUxLDcgKzE1MSw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlU2VjdGlvbj4gY3JlYXRlVGFibGVTZWN0aW9uV2l0
aFN0eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICBzdGF0aWMgUmVuZGVy
UHRyPFJlbmRlclRhYmxlU2VjdGlvbj4gY3JlYXRlVGFibGVTZWN0aW9uV2l0aFN0eWxlKERvY3Vt
ZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKIAogICAgIGVudW0gU2hvdWxkSW5jbHVkZUFsbElu
dGVyc2VjdGluZ0NlbGxzIHsKICAgICAgICAgSW5jbHVkZUFsbEludGVyc2VjdGluZ0NlbGxzLApA
QCAtMzM0LDcgKzMzNCw3IEBAIGlubGluZSBDZWxsU3BhbiBSZW5kZXJUYWJsZVNlY3Rpb246OmZ1
bGwKICAgICByZXR1cm4gQ2VsbFNwYW4oMCwgbV9ncmlkLnNpemUoKSk7CiB9CiAKLWlubGluZSBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255
bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpIGNvbnN0Citp
bmxpbmUgUmVuZGVyUHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9u
eW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBjb25zdAog
ewogICAgIHJldHVybiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZVRhYmxlU2VjdGlvbldpdGhT
dHlsZShyZW5kZXJlci5kb2N1bWVudCgpLCByZW5kZXJlci5zdHlsZSgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZl
bmNlZC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTUgKzkz
LDE1IEBAIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxGZW5jZWRPcGVyYXRvcj4gUmUKIAogdm9pZCBS
ZW5kZXJNYXRoTUxGZW5jZWQ6Om1ha2VGZW5jZXMoKQogewotICAgIFJlbmRlclB0cjxSZW5kZXJN
YXRoTUxGZW5jZWRPcGVyYXRvcj4gb3BlbkZlbmNlID0gY3JlYXRlTWF0aE1MT3BlcmF0b3IobV9v
cGVuLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlByZWZpeCwgTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpGZW5jZSk7Ci0gICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChvcGVuRmVuY2Uu
bGVha1B0cigpLCBmaXJzdENoaWxkKCkpOworICAgIGF1dG8gb3BlbkZlbmNlID0gY3JlYXRlTWF0
aE1MT3BlcmF0b3IobV9vcGVuLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlByZWZpeCwgTWF0
aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSk7CisgICAgUmVuZGVyTWF0aE1MUm93OjphZGRD
aGlsZChXVEZNb3ZlKG9wZW5GZW5jZSksIGZpcnN0Q2hpbGQoKSk7CiAKLSAgICBSZW5kZXJQdHI8
UmVuZGVyTWF0aE1MRmVuY2VkT3BlcmF0b3I+IGNsb3NlRmVuY2UgPSBjcmVhdGVNYXRoTUxPcGVy
YXRvcihtX2Nsb3NlLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlBvc3RmaXgsIE1hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeTo6RmVuY2UpOworICAgIGF1dG8gY2xvc2VGZW5jZSA9IGNyZWF0ZU1h
dGhNTE9wZXJhdG9yKG1fY2xvc2UsIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6UG9zdGZpeCwg
TWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSk7CiAgICAgbV9jbG9zZUZlbmNlUmVuZGVy
ZXIgPSBjbG9zZUZlbmNlLmdldCgpOwotICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoY2xv
c2VGZW5jZS5sZWFrUHRyKCkpOworICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoV1RGTW92
ZShjbG9zZUZlbmNlKSk7CiB9CiAKLXZvaWQgUmVuZGVyTWF0aE1MRmVuY2VkOjphZGRDaGlsZChS
ZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5k
ZXJNYXRoTUxGZW5jZWQ6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIC8vIG1ha2UgdGhlIGZlbmNlcyBpZiB0
aGUgcmVuZGVyIG9iamVjdCBpcyBlbXB0eQogICAgIGlmICghZmlyc3RDaGlsZCgpKQpAQCAtMTM5
LDE0ICsxMzksMTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6OmFkZENoaWxkKFJlbmRlcgog
CiAgICAgaWYgKGJlZm9yZUNoaWxkKSB7CiAgICAgICAgIC8vIEFkZGluZyB8eHwgYmVmb3JlIGFu
IGV4aXN0aW5nIHx5fCBlLmcuIGluIGVsZW1lbnQgKHkpIC0gZmlyc3QgaW5zZXJ0IG91ciBuZXcg
Y2hpbGQgfHh8LCB0aGVuIGl0cyBzZXBhcmF0b3IsIHRvIGdldCAoeCwgeSkuCi0gICAgICAgIFJl
bmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgUmVu
ZGVyTWF0aE1MUm93OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAg
ICAgICBpZiAoc2VwYXJhdG9yUmVuZGVyZXIpCi0gICAgICAgICAgICBSZW5kZXJNYXRoTUxSb3c6
OmFkZENoaWxkKHNlcGFyYXRvclJlbmRlcmVyLmxlYWtQdHIoKSwgYmVmb3JlQ2hpbGQpOworICAg
ICAgICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChXVEZNb3ZlKHNlcGFyYXRvclJlbmRl
cmVyKSwgYmVmb3JlQ2hpbGQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEFkZGluZyB8eXwg
YXQgdGhlIGVuZCBvZiBhbiBleGlzdGluZyBlbGVtZW50IGUuZy4gKHgpIC0gaW5zZXJ0IHRoZSBz
ZXBhcmF0b3IgZmlyc3QgYmVmb3JlIHRoZSBjbG9zaW5nIGZlbmNlLCB0aGVuIHx5fCwgdG8gZ2V0
ICh4LCB5KS4KICAgICAgICAgaWYgKHNlcGFyYXRvclJlbmRlcmVyKQotICAgICAgICAgICAgUmVu
ZGVyTWF0aE1MUm93OjphZGRDaGlsZChzZXBhcmF0b3JSZW5kZXJlci5sZWFrUHRyKCksIG1fY2xv
c2VGZW5jZVJlbmRlcmVyKTsKLSAgICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChjaGls
ZCwgbV9jbG9zZUZlbmNlUmVuZGVyZXIpOworICAgICAgICAgICAgUmVuZGVyTWF0aE1MUm93Ojph
ZGRDaGlsZChXVEZNb3ZlKHNlcGFyYXRvclJlbmRlcmVyKSwgbV9jbG9zZUZlbmNlUmVuZGVyZXIp
OworICAgICAgICBSZW5kZXJNYXRoTUxSb3c6OmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBtX2Ns
b3NlRmVuY2VSZW5kZXJlcik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmgJKHJldmlzaW9uIDIy
MjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVu
Y2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogcHJpdmF0ZToK
ICAgICBib29sIGlzUmVuZGVyTWF0aE1MRmVuY2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAi
UmVuZGVyTWF0aE1MRmVuY2VkIjsgfQotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkgZmluYWw7CisgICAgdm9pZCBhZGRDaGls
ZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCkgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpIGZpbmFsOwogCiAgICAgUmVu
ZGVyUHRyPFJlbmRlck1hdGhNTEZlbmNlZE9wZXJhdG9yPiBjcmVhdGVNYXRoTUxPcGVyYXRvcihj
b25zdCBTdHJpbmcmIG9wZXJhdG9yU3RyaW5nLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZv
cm0sIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZyk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lv
biAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRh
aW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE2ICs4OCwxNiBAQCB2b2lkIFJlbmRlclNW
R0NvbnRhaW5lcjo6bGF5b3V0KCkKICAgICBjbGVhck5lZWRzTGF5b3V0KCk7CiB9CiAKLXZvaWQg
UmVuZGVyU1ZHQ29udGFpbmVyOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFkZENoaWxkKFJl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KQogewotICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjphZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hp
bGQpOwotICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRXYXNBZGRlZFRvVHJlZSgqY2hpbGQp
OworICAgIGF1dG8mIGNoaWxkID0gYmFzZUFkZENoaWxkPFJlbmRlclNWR01vZGVsT2JqZWN0PihX
VEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpj
bGllbnRXYXNBZGRlZFRvVHJlZShjaGlsZCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHQ29udGFpbmVy
OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQorUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gUmVuZGVyU1ZHQ29udGFpbmVyOjp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsK
ICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKGNoaWxk
KTsKLSAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6cmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIHJl
dHVybiBSZW5kZXJTVkdNb2RlbE9iamVjdDo6dGFrZUNoaWxkKGNoaWxkKTsKIH0KIAogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVy
LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAgcHJvdGVj
dGVkOgogCiAgICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKIAotICAgIHZvaWQgYWRkQ2hpbGQo
UmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIGZpbmFs
OwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JikgZmluYWw7CisgICAgdm9pZCBh
ZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCA9IDApIGZpbmFsOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGls
ZChSZW5kZXJPYmplY3QmKSBmaW5hbDsKICAgICB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25z
dCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBwYWludENvbnRhaW5lciA9IDApIGZpbmFsOwogCiAg
ICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9v
YmplY3RCb3VuZGluZ0JveDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAsMjkgKzEyMCwyOCBAQCB2b2lkIFJlbmRlclNWR0lubGluZTo6dXBkYXRlRnJvbVN0eWxl
KCkKICAgICBzZXRJbmxpbmUodHJ1ZSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSW5saW5lOjphZGRD
aGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9p
ZCBSZW5kZXJTVkdJbmxpbmU6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0No
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewotICAgIFJlbmRlcklubGluZTo6YWRk
Q2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50
V2FzQWRkZWRUb1RyZWUoKmNoaWxkKTsKKyAgICBhdXRvJiBjaGlsZCA9IGJhc2VBZGRDaGlsZDxS
ZW5kZXJJbmxpbmU+KFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsKIAogICAgIGlmIChhdXRv
KiB0ZXh0QW5jZXN0b3IgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0
b3IoKnRoaXMpKQotICAgICAgICB0ZXh0QW5jZXN0b3ItPnN1YnRyZWVDaGlsZFdhc0FkZGVkKGNo
aWxkKTsKKyAgICAgICAgdGV4dEFuY2VzdG9yLT5zdWJ0cmVlQ2hpbGRXYXNBZGRlZCgmY2hpbGQp
OwogfQogCi12b2lkIFJlbmRlclNWR0lubGluZTo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBj
aGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclNWR0lubGluZTo6dGFrZUNoaWxk
KFJlbmRlck9iamVjdCYgY2hpbGQpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdp
bGxCZVJlbW92ZWRGcm9tVHJlZShjaGlsZCk7CiAKICAgICBhdXRvKiB0ZXh0QW5jZXN0b3IgPSBS
ZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoKnRoaXMpOwotICAgIGlm
ICghdGV4dEFuY2VzdG9yKSB7Ci0gICAgICAgIFJlbmRlcklubGluZTo6cmVtb3ZlQ2hpbGQoY2hp
bGQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGV4dEFuY2VzdG9yKQorICAg
ICAgICByZXR1cm4gUmVuZGVySW5saW5lOjp0YWtlQ2hpbGQoY2hpbGQpOwogCiAgICAgVmVjdG9y
PFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiwgMj4gYWZmZWN0ZWRBdHRyaWJ1dGVzOwogICAgIHRl
eHRBbmNlc3Rvci0+c3VidHJlZUNoaWxkV2lsbEJlUmVtb3ZlZCgmY2hpbGQsIGFmZmVjdGVkQXR0
cmlidXRlcyk7Ci0gICAgUmVuZGVySW5saW5lOjpyZW1vdmVDaGlsZChjaGlsZCk7CisgICAgYXV0
byB0YWtlbkNoaWxkID0gUmVuZGVySW5saW5lOjp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIHRleHRB
bmNlc3Rvci0+c3VidHJlZUNoaWxkV2FzUmVtb3ZlZChhZmZlY3RlZEF0dHJpYnV0ZXMpOworICAg
IHJldHVybiB0YWtlbkNoaWxkOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0lubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYwLDggKzYwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIGZp
bmFsOwogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5k
ZXJTdHlsZSogb2xkU3R5bGUpIGZpbmFsOwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7Ci0g
ICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFkZENo
aWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkID0gbnVsbHB0cikgZmluYWw7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNo
aWxkKFJlbmRlck9iamVjdCYpIGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3Bw
CShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsMTYgKzMwMCwxNyBAQCB2b2lkIFJl
bmRlclNWR1Jvb3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNsaWVudFN0eWxlQ2hhbmdlZCgqdGhpcywgZGlmZiwgc3R5bGUoKSk7CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHUm9vdDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyU1ZHUm9vdDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVu
ZGVyUmVwbGFjZWQ6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7Ci0gICAgU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKCpjaGlsZCk7CisgICAgYXV0byYgY2hpbGQg
PSAqbmV3Q2hpbGQ7CisgICAgUmVuZGVyUmVwbGFjZWQ6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hp
bGQpLCBiZWZvcmVDaGlsZCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVk
VG9UcmVlKGNoaWxkKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdSb290OjpyZW1vdmVDaGlsZChSZW5k
ZXJPYmplY3QmIGNoaWxkKQorUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyU1ZHUm9vdDo6
dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6
OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJlZShjaGlsZCk7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6
OnJlbW92ZUNoaWxkKGNoaWxkKTsKKyAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OnRha2VDaGls
ZChjaGlsZCk7CiB9CiAKIC8vIFJlbmRlckJveCBtZXRob2RzIHdpbGwgZXhwZWN0IGNvb3JkaW5h
dGVzIHcvbyBhbnkgdHJhbnNmb3JtcyBpbiBjb29yZGluYXRlcwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDIyMjYwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04MSw4ICs4MSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJv
bVRyZWUoKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRk
Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDAp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7
CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOworICAgIFJlbmRlclB0cjxSZW5kZXJP
YmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKIAogICAgIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5j
cHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNywyMiArNTE3LDIzIEBAIEZsb2F0
UmVjdCBSZW5kZXJTVkdUZXh0OjpyZXBhaW50UmVjdEluTG8KICAgICByZXR1cm4gcmVwYWludFJl
Y3Q7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHVGV4dDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyU1ZHVGV4dDo6YWRkQ2hp
bGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpCiB7Ci0gICAgUmVuZGVyU1ZHQmxvY2s6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGls
ZCk7CisgICAgYXV0byYgY2hpbGQgPSBiYXNlQWRkQ2hpbGQ8UmVuZGVyU1ZHQmxvY2s+KFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xp
ZW50V2FzQWRkZWRUb1RyZWUoKmNoaWxkKTsKLSAgICBzdWJ0cmVlQ2hpbGRXYXNBZGRlZChjaGls
ZCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsK
KyAgICBzdWJ0cmVlQ2hpbGRXYXNBZGRlZCgmY2hpbGQpOwogfQogCi12b2lkIFJlbmRlclNWR1Rl
eHQ6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiBSZW5kZXJTVkdUZXh0Ojp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAg
ICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKGNoaWxkKTsK
IAogICAgIFZlY3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyosIDI+IGFmZmVjdGVkQXR0cmli
dXRlczsKICAgICBzdWJ0cmVlQ2hpbGRXaWxsQmVSZW1vdmVkKCZjaGlsZCwgYWZmZWN0ZWRBdHRy
aWJ1dGVzKTsKLSAgICBSZW5kZXJTVkdCbG9jazo6cmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIGF1
dG8gdGFrZW5DaGlsZCA9IFJlbmRlclNWR0Jsb2NrOjp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIHN1
YnRyZWVDaGlsZFdhc1JlbW92ZWQoYWZmZWN0ZWRBdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gdGFr
ZW5DaGlsZDsKIH0KIAogLy8gRml4IGZvciA8cmRhcjovL3Byb2JsZW0vODA0ODg3NT4uIFdlIHNo
b3VsZCBub3QgcmVuZGVyIDpmaXJzdC1saW5lIENTUyBTdHlsZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDIyMjYwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Miw4ICs4Miw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG1hcExvY2FsVG9Db250
YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVHJh
bnNmb3JtU3RhdGUmLCBNYXBDb29yZGluYXRlc0ZsYWdzLCBib29sKiB3YXNGaXhlZCkgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVy
KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdl
b21ldHJ5TWFwJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lk
IGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbEJlRGVz
dHJveWVkKCkgb3ZlcnJpZGU7CiAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9Q
YXJlbnRUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3Jt
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaAkocmV2
aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVBvc2l0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAg
IFJlbmRlckVsZW1lbnQmIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9Ci0gICAg
dm9pZCBpbnNlcnQoUmVuZGVyT2JqZWN0Jik7CisgICAgdm9pZCBpbnNlcnQoUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4pOwogICAgIGJvb2wgY2FuSW5zZXJ0KFJlbmRlckVsZW1lbnQmKSBjb25zdDsK
ICAgICBib29sIGNhbkluc2VydChSZW5kZXJUZXh0JikgY29uc3Q7CiAKQEAgLTc4LDEwICs3OCwx
MCBAQCBpbmxpbmUgYm9vbCBSZW5kZXJUcmVlUG9zaXRpb246OmNhbkluc2VyCiAgICAgcmV0dXJu
IG1fcGFyZW50LmlzQ2hpbGRBbGxvd2VkKHJlbmRlcmVyLCBtX3BhcmVudC5zdHlsZSgpKTsKIH0K
IAotaW5saW5lIHZvaWQgUmVuZGVyVHJlZVBvc2l0aW9uOjppbnNlcnQoUmVuZGVyT2JqZWN0JiBy
ZW5kZXJlcikKK2lubGluZSB2b2lkIFJlbmRlclRyZWVQb3NpdGlvbjo6aW5zZXJ0KFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IHJlbmRlcmVyKQogewogICAgIEFTU0VSVChtX2hhc1ZhbGlkTmV4dFNp
YmxpbmcpOwotICAgIG1fcGFyZW50LmFkZENoaWxkKCZyZW5kZXJlciwgbV9uZXh0U2libGluZyk7
CisgICAgbV9wYXJlbnQuYWRkQ2hpbGQoV1RGTW92ZShyZW5kZXJlciksIG1fbmV4dFNpYmxpbmcp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OSwy
NyArMzU5LDI1IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OmNyZWF0ZVJlbmRlcmVyKEUKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgUmVuZGVyVHJlZVBvc2l0aW9uIGluc2VydGlvblBvc2l0aW9u
ID0gY29tcHV0ZUluc2VydGlvblBvc2l0aW9uKCk7Ci0gICAgUmVuZGVyRWxlbWVudCogbmV3UmVu
ZGVyZXIgPSBlbGVtZW50LmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihXVEZNb3ZlKHN0eWxlKSwgaW5z
ZXJ0aW9uUG9zaXRpb24pLmxlYWtQdHIoKTsKKyAgICBhdXRvIG5ld1JlbmRlcmVyID0gZWxlbWVu
dC5jcmVhdGVFbGVtZW50UmVuZGVyZXIoV1RGTW92ZShzdHlsZSksIGluc2VydGlvblBvc2l0aW9u
KTsKICAgICBpZiAoIW5ld1JlbmRlcmVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpbnNl
cnRpb25Qb3NpdGlvbi5jYW5JbnNlcnQoKm5ld1JlbmRlcmVyKSkgewotICAgICAgICBuZXdSZW5k
ZXJlci0+ZGVzdHJveSgpOworICAgIGlmICghaW5zZXJ0aW9uUG9zaXRpb24uY2FuSW5zZXJ0KCpu
ZXdSZW5kZXJlcikpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBlbGVtZW50LnNldFJl
bmRlcmVyKG5ld1JlbmRlcmVyKTsKKyAgICBlbGVtZW50LnNldFJlbmRlcmVyKG5ld1JlbmRlcmVy
LmdldCgpKTsKIAogICAgIG5ld1JlbmRlcmVyLT5pbml0aWFsaXplU3R5bGUoKTsKIAogI2lmIEVO
QUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBpZiAobV9kb2N1bWVudC53ZWJraXRJc0Z1bGxTY3Jl
ZW4oKSAmJiBtX2RvY3VtZW50LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpID09ICZl
bGVtZW50KSB7Ci0gICAgICAgIG5ld1JlbmRlcmVyID0gUmVuZGVyRnVsbFNjcmVlbjo6d3JhcFJl
bmRlcmVyKG5ld1JlbmRlcmVyLCAmaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1fZG9jdW1l
bnQpOworICAgICAgICBuZXdSZW5kZXJlciA9IFJlbmRlckZ1bGxTY3JlZW46OndyYXBOZXdSZW5k
ZXJlcihXVEZNb3ZlKG5ld1JlbmRlcmVyKSwgaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1f
ZG9jdW1lbnQpOwogICAgICAgICBpZiAoIW5ld1JlbmRlcmVyKQogICAgICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbmRpZgotICAgIC8vIE5vdGU6IEFkZGluZyBuZXdSZW5kZXJlciBpbnN0ZWFk
IG9mIHJlbmRlcmVyKCkuIHJlbmRlcmVyKCkgbWF5IGJlIGEgY2hpbGQgb2YgbmV3UmVuZGVyZXIu
Ci0gICAgaW5zZXJ0aW9uUG9zaXRpb24uaW5zZXJ0KCpuZXdSZW5kZXJlcik7CisKKyAgICBpbnNl
cnRpb25Qb3NpdGlvbi5pbnNlcnQoV1RGTW92ZShuZXdSZW5kZXJlcikpOwogCiAgICAgaWYgKEFY
T2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9kb2N1bWVudC5heE9iamVjdENhY2hlKCkpCiAgICAgICAg
IGNhY2hlLT51cGRhdGVDYWNoZUFmdGVyTm9kZUlzQXR0YWNoZWQoJmVsZW1lbnQpOwpAQCAtNDQx
LDcgKzQzOSw3IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXgKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgdGV4dE5vZGUuc2V0UmVuZGVyZXIobmV3UmVuZGVyZXIuZ2V0
KCkpOwotICAgIHJlbmRlclRyZWVQb3NpdGlvbi5pbnNlcnQoKm5ld1JlbmRlcmVyLmxlYWtQdHIo
KSk7CisgICAgcmVuZGVyVHJlZVBvc2l0aW9uLmluc2VydChXVEZNb3ZlKG5ld1JlbmRlcmVyKSk7
CiB9CiAKIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZVRleHRSZW5kZXJlcihUZXh0JiB0
ZXh0LCBjb25zdCBTdHlsZTo6VGV4dFVwZGF0ZSogdGV4dFVwZGF0ZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3Bw
CShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBk
YXRlckZpcnN0TGV0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAg
c3RhdGljIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXJTdHlsZShSZW5kZQogCiAgICAgaWYgKFN0eWxl
OjpkZXRlcm1pbmVDaGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBzZXVkb1N0eWxlKSA9PSBT
dHlsZTo6RGV0YWNoKSB7CiAgICAgICAgIC8vIFRoZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgbmVl
ZHMgdG8gYmUgcmVwbGFjZWQuIENyZWF0ZSBhIG5ldyByZW5kZXJlciBvZiB0aGUgcmlnaHQgdHlw
ZS4KLSAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG5ld0ZpcnN0TGV0dGVyOworICAgICAg
ICBSZW5kZXJQdHI8UmVuZGVyQm94TW9kZWxPYmplY3Q+IG5ld0ZpcnN0TGV0dGVyOwogICAgICAg
ICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKLSAgICAgICAgICAgIG5ld0Zp
cnN0TGV0dGVyID0gbmV3IFJlbmRlcklubGluZShmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCks
IFdURk1vdmUocHNldWRvU3R5bGUpKTsKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gY3Jl
YXRlUmVuZGVyZXI8UmVuZGVySW5saW5lPihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdU
Rk1vdmUocHNldWRvU3R5bGUpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3Rmlyc3RM
ZXR0ZXIgPSBuZXcgUmVuZGVyQmxvY2tGbG93KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwg
V1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVh
dGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwg
V1RGTW92ZShwc2V1ZG9TdHlsZSkpOwogICAgICAgICBuZXdGaXJzdExldHRlci0+aW5pdGlhbGl6
ZVN0eWxlKCk7CiAKICAgICAgICAgLy8gTW92ZSB0aGUgZmlyc3QgbGV0dGVyIGludG8gdGhlIG5l
dyByZW5kZXJlci4KQEAgLTEyMCw4ICsxMjAsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVGaXJzdExl
dHRlclN0eWxlKFJlbmRlCiAgICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmly
c3RMZXR0ZXItPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+
KCpjaGlsZCkpCiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKS5y
ZW1vdmVBbmREZXN0cm95VGV4dEJveGVzKCk7Ci0gICAgICAgICAgICBmaXJzdExldHRlci0+cmVt
b3ZlQ2hpbGQoKmNoaWxkKTsKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChj
aGlsZCwgbnVsbHB0cik7CisgICAgICAgICAgICBhdXRvIHRvTW92ZSA9IGZpcnN0TGV0dGVyLT50
YWtlQ2hpbGQoKmNoaWxkKTsKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChX
VEZNb3ZlKHRvTW92ZSkpOwogICAgICAgICB9CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0
U2libGluZyA9IGZpcnN0TGV0dGVyLT5uZXh0U2libGluZygpOwpAQCAtMTMxLDEyICsxMzEsOCBA
QCBzdGF0aWMgdm9pZCB1cGRhdGVGaXJzdExldHRlclN0eWxlKFJlbmRlCiAgICAgICAgICAgICBy
ZW1haW5pbmdUZXh0LT5zZXRGaXJzdExldHRlcigqbmV3Rmlyc3RMZXR0ZXIpOwogICAgICAgICAg
ICAgbmV3Rmlyc3RMZXR0ZXItPnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdU
ZXh0KTsKICAgICAgICAgfQotICAgICAgICAvLyBUbyBwcmV2ZW50IHJlbW92YWwgb2Ygc2luZ2xl
IGFub255bW91cyBibG9jayBpbiBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQgYW5kIGNhdXNpbmcK
LSAgICAgICAgLy8gfG5leHRTaWJsaW5nfCB0byBnbyBzdGFsZSwgd2UgcmVtb3ZlIHRoZSBvbGQg
Zmlyc3QgbGV0dGVyIHVzaW5nIHJlbW92ZUNoaWxkTm9kZSBmaXJzdC4KLSAgICAgICAgZmlyc3RM
ZXR0ZXJDb250YWluZXItPnJlbW92ZUNoaWxkSW50ZXJuYWwoKmZpcnN0TGV0dGVyLCBSZW5kZXJF
bGVtZW50OjpOb3RpZnlDaGlsZHJlbik7Ci0gICAgICAgIGZpcnN0TGV0dGVyLT5kZXN0cm95KCk7
Ci0gICAgICAgIGZpcnN0TGV0dGVyID0gbmV3Rmlyc3RMZXR0ZXI7Ci0gICAgICAgIGZpcnN0TGV0
dGVyQ29udGFpbmVyLT5hZGRDaGlsZChmaXJzdExldHRlciwgbmV4dFNpYmxpbmcpOworICAgICAg
ICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKCpmaXJzdExldHRl
cik7CisgICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0Zp
cnN0TGV0dGVyKSwgbmV4dFNpYmxpbmcpOwogICAgIH0gZWxzZQogICAgICAgICBmaXJzdExldHRl
ci0+c2V0U3R5bGUoV1RGTW92ZShwc2V1ZG9TdHlsZSkpOwogfQpAQCAtMTQ1LDEzICsxNDEsMTQg
QEAgc3RhdGljIHZvaWQgY3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihSZQogewogICAgIFJlbmRl
ckVsZW1lbnQqIGZpcnN0TGV0dGVyQ29udGFpbmVyID0gY3VycmVudFRleHRDaGlsZC5wYXJlbnQo
KTsKICAgICBhdXRvIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJzdExldHRl
ckJsb2NrLCAqZmlyc3RMZXR0ZXJDb250YWluZXIpOwotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0
KiBmaXJzdExldHRlciA9IG51bGxwdHI7CisgICAgUmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2Jq
ZWN0PiBuZXdGaXJzdExldHRlcjsKICAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElO
TElORSkKLSAgICAgICAgZmlyc3RMZXR0ZXIgPSBuZXcgUmVuZGVySW5saW5lKGZpcnN0TGV0dGVy
QmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgICAgICBuZXdGaXJz
dExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlcklubGluZT4oZmlyc3RMZXR0ZXJCbG9jay5k
b2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7CiAgICAgZWxzZQotICAgICAgICBmaXJz
dExldHRlciA9IG5ldyBSZW5kZXJCbG9ja0Zsb3coZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgp
LCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7Ci0gICAgZmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHls
ZSgpOwotICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChmaXJzdExldHRlciwgJmN1
cnJlbnRUZXh0Q2hpbGQpOworICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVy
PFJlbmRlckJsb2NrRmxvdz4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBz
ZXVkb1N0eWxlKSk7CisgICAgbmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAg
IGF1dG8mIGZpcnN0TGV0dGVyID0gKm5ld0ZpcnN0TGV0dGVyOworICAgIGZpcnN0TGV0dGVyQ29u
dGFpbmVyLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgJmN1cnJlbnRUZXh0Q2hp
bGQpOwogCiAgICAgLy8gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyBnb2luZyB0byBiZSBlaXRoZXIg
YSBnZW5lcmF0ZWQgY29udGVudCBzdHJpbmcgb3IgYSBET00gbm9kZSdzCiAgICAgLy8gc3RyaW5n
LiBXZSB3YW50IHRoZSBvcmlnaW5hbCBzdHJpbmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1lZCBp
biBjYXNlIGZpcnN0LWxldHRlciBoYXMKQEAgLTE4MywzMCArMTgwLDI5IEBAIHN0YXRpYyB2b2lk
IGNyZWF0ZUZpcnN0TGV0dGVyUmVuZGVyZXIoUmUKIAogICAgICAgICAvLyBDb25zdHJ1Y3QgYSB0
ZXh0IGZyYWdtZW50IGZvciB0aGUgdGV4dCBhZnRlciB0aGUgZmlyc3QgbGV0dGVyLgogICAgICAg
ICAvLyBUaGlzIHRleHQgZnJhZ21lbnQgbWlnaHQgYmUgZW1wdHkuCi0gICAgICAgIFJlbmRlclRl
eHRGcmFnbWVudCogcmVtYWluaW5nVGV4dDsKKyAgICAgICAgUmVuZGVyUHRyPFJlbmRlclRleHRG
cmFnbWVudD4gbmV3UmVtYWluaW5nVGV4dDsKICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Q2hpbGQu
dGV4dE5vZGUoKSkKLSAgICAgICAgICAgIHJlbWFpbmluZ1RleHQgPSBuZXcgUmVuZGVyVGV4dEZy
YWdtZW50KCpjdXJyZW50VGV4dENoaWxkLnRleHROb2RlKCksIG9sZFRleHQsIGxlbmd0aCwgb2xk
VGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PigqY3VycmVudFRleHRDaGlsZC50ZXh0
Tm9kZSgpLCBvbGRUZXh0LCBsZW5ndGgsIG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gbmV3IFJlbmRlclRleHRGcmFn
bWVudChmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4
dC5sZW5ndGgoKSAtIGxlbmd0aCk7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3Jl
YXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50
KCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7CiAKLSAgICAg
ICAgaWYgKHJlbWFpbmluZ1RleHQtPnRleHROb2RlKCkpCi0gICAgICAgICAgICByZW1haW5pbmdU
ZXh0LT50ZXh0Tm9kZSgpLT5zZXRSZW5kZXJlcihyZW1haW5pbmdUZXh0KTsKKyAgICAgICAgaWYg
KG5ld1JlbWFpbmluZ1RleHQtPnRleHROb2RlKCkpCisgICAgICAgICAgICBuZXdSZW1haW5pbmdU
ZXh0LT50ZXh0Tm9kZSgpLT5zZXRSZW5kZXJlcihuZXdSZW1haW5pbmdUZXh0LmdldCgpKTsKIAot
ICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQocmVtYWluaW5nVGV4dCwgJmN1
cnJlbnRUZXh0Q2hpbGQpOwotICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQ2hp
bGQoY3VycmVudFRleHRDaGlsZCk7Ci0gICAgICAgIHJlbWFpbmluZ1RleHQtPnNldEZpcnN0TGV0
dGVyKCpmaXJzdExldHRlcik7Ci0gICAgICAgIGZpcnN0TGV0dGVyLT5zZXRGaXJzdExldHRlclJl
bWFpbmluZ1RleHQocmVtYWluaW5nVGV4dCk7CisgICAgICAgIFJlbmRlclRleHRGcmFnbWVudCYg
cmVtYWluaW5nVGV4dCA9ICpuZXdSZW1haW5pbmdUZXh0OworICAgICAgICBmaXJzdExldHRlckNv
bnRhaW5lci0+YWRkQ2hpbGQoV1RGTW92ZShuZXdSZW1haW5pbmdUZXh0KSwgJmN1cnJlbnRUZXh0
Q2hpbGQpOworICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNo
aWxkKGN1cnJlbnRUZXh0Q2hpbGQpOworICAgICAgICByZW1haW5pbmdUZXh0LnNldEZpcnN0TGV0
dGVyKGZpcnN0TGV0dGVyKTsKKyAgICAgICAgZmlyc3RMZXR0ZXIuc2V0Rmlyc3RMZXR0ZXJSZW1h
aW5pbmdUZXh0KCZyZW1haW5pbmdUZXh0KTsKIAogICAgICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBm
cmFnbWVudCBmb3IgdGhlIGZpcnN0IGxldHRlcgotICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQq
IGxldHRlcjsKLSAgICAgICAgaWYgKHJlbWFpbmluZ1RleHQtPnRleHROb2RlKCkpCi0gICAgICAg
ICAgICBsZXR0ZXIgPSBuZXcgUmVuZGVyVGV4dEZyYWdtZW50KCpyZW1haW5pbmdUZXh0LT50ZXh0
Tm9kZSgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOworICAgICAgICBSZW5kZXJQdHI8UmVuZGVyVGV4
dEZyYWdtZW50PiBsZXR0ZXI7CisgICAgICAgIGlmIChyZW1haW5pbmdUZXh0LnRleHROb2RlKCkp
CisgICAgICAgICAgICBsZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+
KCpyZW1haW5pbmdUZXh0LnRleHROb2RlKCksIG9sZFRleHQsIDAsIGxlbmd0aCk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGxldHRlciA9IG5ldyBSZW5kZXJUZXh0RnJhZ21lbnQoZmlyc3RM
ZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOworICAgICAgICAgICAg
bGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJs
b2NrLmRvY3VtZW50KCksIG9sZFRleHQsIDAsIGxlbmd0aCk7CiAKLSAgICAgICAgZmlyc3RMZXR0
ZXItPmFkZENoaWxkKGxldHRlcik7Ci0KLSAgICAgICAgY3VycmVudFRleHRDaGlsZC5kZXN0cm95
KCk7CisgICAgICAgIGZpcnN0TGV0dGVyLmFkZENoaWxkKFdURk1vdmUobGV0dGVyKSk7CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVy
YXRlZENvbnRlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRl
clRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNv
dXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlQ29udGVu
dFJlbmRlcmVycyhSZW5kZQogICAgIGZvciAoY29uc3QgQ29udGVudERhdGEqIGNvbnRlbnQgPSBz
dHlsZS5jb250ZW50RGF0YSgpOyBjb250ZW50OyBjb250ZW50ID0gY29udGVudC0+bmV4dCgpKSB7
CiAgICAgICAgIGF1dG8gY2hpbGQgPSBjb250ZW50LT5jcmVhdGVDb250ZW50UmVuZGVyZXIocmVu
ZGVyZXIuZG9jdW1lbnQoKSwgc3R5bGUpOwogICAgICAgICBpZiAocmVuZGVyZXIuaXNDaGlsZEFs
bG93ZWQoKmNoaWxkLCBzdHlsZSkpCi0gICAgICAgICAgICByZW5kZXJlci5hZGRDaGlsZChjaGls
ZC5sZWFrUHRyKCkpOworICAgICAgICAgICAgcmVuZGVyZXIuYWRkQ2hpbGQoV1RGTW92ZShjaGls
ZCkpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVw
ZGF0ZXJMaXN0SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVu
ZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NCwxMiArODQsMTQgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW06OnVw
ZGF0ZQogICAgIH0KIAogICAgIGF1dG8gbmV3U3R5bGUgPSBsaXN0SXRlbVJlbmRlcmVyLmNvbXB1
dGVNYXJrZXJTdHlsZSgpOworICAgIFJlbmRlclB0cjxSZW5kZXJMaXN0TWFya2VyPiBuZXdNYXJr
ZXJSZW5kZXJlcjsKICAgICBhdXRvKiBtYXJrZXJSZW5kZXJlciA9IGxpc3RJdGVtUmVuZGVyZXIu
bWFya2VyUmVuZGVyZXIoKTsKICAgICBpZiAobWFya2VyUmVuZGVyZXIpCiAgICAgICAgIG1hcmtl
clJlbmRlcmVyLT5zZXRTdHlsZShXVEZNb3ZlKG5ld1N0eWxlKSk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIG1hcmtlclJlbmRlcmVyID0gV2ViQ29yZTo6Y3JlYXRlUmVuZGVyZXI8UmVuZGVyTGlzdE1h
cmtlcj4obGlzdEl0ZW1SZW5kZXJlciwgV1RGTW92ZShuZXdTdHlsZSkpLmxlYWtQdHIoKTsKLSAg
ICAgICAgbWFya2VyUmVuZGVyZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgICAgICBuZXdNYXJr
ZXJSZW5kZXJlciA9IFdlYkNvcmU6OmNyZWF0ZVJlbmRlcmVyPFJlbmRlckxpc3RNYXJrZXI+KGxp
c3RJdGVtUmVuZGVyZXIsIFdURk1vdmUobmV3U3R5bGUpKTsKKyAgICAgICAgbmV3TWFya2VyUmVu
ZGVyZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgICAgICBtYXJrZXJSZW5kZXJlciA9IG5ld01h
cmtlclJlbmRlcmVyLmdldCgpOwogICAgICAgICBsaXN0SXRlbVJlbmRlcmVyLnNldE1hcmtlclJl
bmRlcmVyKG1hcmtlclJlbmRlcmVyKTsKICAgICB9CiAKQEAgLTEwOSw4ICsxMTEsMTEgQEAgdm9p
ZCBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW06OnVwZGF0ZQogICAgIH0KIAogICAgIGlmIChu
ZXdQYXJlbnQgIT0gY3VycmVudFBhcmVudCkgewotICAgICAgICBtYXJrZXJSZW5kZXJlci0+cmVt
b3ZlRnJvbVBhcmVudCgpOwotICAgICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKG1hcmtlclJlbmRl
cmVyLCBmaXJzdE5vbk1hcmtlckNoaWxkKCpuZXdQYXJlbnQpKTsKKyAgICAgICAgaWYgKGN1cnJl
bnRQYXJlbnQpCisgICAgICAgICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKGN1cnJlbnRQYXJlbnQt
PnRha2VDaGlsZCgqbWFya2VyUmVuZGVyZXIpLCBmaXJzdE5vbk1hcmtlckNoaWxkKCpuZXdQYXJl
bnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3UGFyZW50LT5hZGRDaGlsZChXVEZN
b3ZlKG5ld01hcmtlclJlbmRlcmVyKSwgZmlyc3ROb25NYXJrZXJDaGlsZCgqbmV3UGFyZW50KSk7
CisKICAgICAgICAgLy8gSWYgY3VycmVudCBwYXJlbnQgaXMgYW4gYW5vbnltb3VzIGJsb2NrIHRo
YXQgaGFzIGxvc3QgYWxsIGl0cyBjaGlsZHJlbiwgZGVzdHJveSBpdC4KICAgICAgICAgaWYgKGN1
cnJlbnRQYXJlbnQgJiYgY3VycmVudFBhcmVudC0+aXNBbm9ueW1vdXNCbG9jaygpICYmICFjdXJy
ZW50UGFyZW50LT5maXJzdENoaWxkKCkgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVu
dFBhcmVudCkuY29udGludWF0aW9uKCkpCiAgICAgICAgICAgICBjdXJyZW50UGFyZW50LT5kZXN0
cm95KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRp
Q29sdW1uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVl
VXBkYXRlck11bHRpQ29sdW1uLmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNv
cmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDEzICs0NiwxNCBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbjo6
dXBkCiAKIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uOjpjcmVhdGVGcmFnbWVu
dGVkRmxvdyhSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCiB7Ci0gICAgUmVuZGVyTXVsdGlDb2x1bW5G
bG93KiBmcmFnbWVudGVkRmxvdyA9IG5ldyBSZW5kZXJNdWx0aUNvbHVtbkZsb3coZmxvdy5kb2N1
bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShmbG93
LnN0eWxlKCksIEJMT0NLKSk7Ci0gICAgZnJhZ21lbnRlZEZsb3ctPmluaXRpYWxpemVTdHlsZSgp
OworICAgIGF1dG8gbmV3RnJhZ21lbnRlZEZsb3cgPSBXZWJDb3JlOjpjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJNdWx0aUNvbHVtbkZsb3c+KGZsb3cuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0
ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoZmxvdy5zdHlsZSgpLCBCTE9DSykpOworICAgIG5l
d0ZyYWdtZW50ZWRGbG93LT5pbml0aWFsaXplU3R5bGUoKTsKICAgICBmbG93LnNldENoaWxkcmVu
SW5saW5lKGZhbHNlKTsgLy8gRG8gdGhpcyB0byBhdm9pZCB3cmFwcGluZyBpbmxpbmUgY2hpbGRy
ZW4gdGhhdCBhcmUganVzdCBnb2luZyB0byBtb3ZlIGludG8gdGhlIGZsb3cgdGhyZWFkLgogICAg
IGZsb3cuZGVsZXRlTGluZXMoKTsKLSAgICBmbG93LlJlbmRlckJsb2NrOjphZGRDaGlsZChmcmFn
bWVudGVkRmxvdyk7Ci0gICAgZnJhZ21lbnRlZEZsb3ctPnBvcHVsYXRlKCk7IC8vIENhbGxlZCBh
ZnRlciB0aGUgZmxvdyB0aHJlYWQgaXMgaW5zZXJ0ZWQgc28gdGhhdCB3ZSBhcmUgcmVhY2hhYmxl
IGJ5IHRoZSBmbG93IHRocmVhZC4KLSAgICBmbG93LnNldE11bHRpQ29sdW1uRmxvdyhmcmFnbWVu
dGVkRmxvdyk7CisgICAgYXV0byYgZnJhZ21lbnRlZEZsb3cgPSAqbmV3RnJhZ21lbnRlZEZsb3c7
CisgICAgZmxvdy5SZW5kZXJCbG9jazo6YWRkQ2hpbGQoV1RGTW92ZShuZXdGcmFnbWVudGVkRmxv
dykpOworICAgIGZyYWdtZW50ZWRGbG93LnBvcHVsYXRlKCk7IC8vIENhbGxlZCBhZnRlciB0aGUg
ZmxvdyB0aHJlYWQgaXMgaW5zZXJ0ZWQgc28gdGhhdCB3ZSBhcmUgcmVhY2hhYmxlIGJ5IHRoZSBm
bG93IHRocmVhZC4KKyAgICBmbG93LnNldE11bHRpQ29sdW1uRmxvdygmZnJhZ21lbnRlZEZsb3cp
OwogfQogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322083</attachid>
            <date>2017-09-28 07:52:25 -0700</date>
            <delta_ts>2017-09-29 02:07:21 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderptr-everywhere-12.patch</filename>
            <type>text/plain</type>
            <size>139698</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA0NCw4ICs2MDQ0
LDggQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbgogICAgICAgICBt
X3NhdmVkUGxhY2Vob2xkZXJSZW5kZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5k
ZXJlci0+c3R5bGUoKSk7CiAgICAgfQogCi0gICAgaWYgKG1fZnVsbFNjcmVlbkVsZW1lbnQgIT0g
ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgIFJlbmRlckZ1bGxTY3JlZW46OndyYXBSZW5kZXJl
cihyZW5kZXJlciwgcmVuZGVyZXIgPyByZW5kZXJlci0+cGFyZW50KCkgOiBudWxscHRyLCAqdGhp
cyk7CisgICAgaWYgKG1fZnVsbFNjcmVlbkVsZW1lbnQgIT0gZG9jdW1lbnRFbGVtZW50KCkgJiYg
cmVuZGVyZXIpCisgICAgICAgIFJlbmRlckZ1bGxTY3JlZW46OndyYXBFeGlzdGluZ1JlbmRlcmVy
KCpyZW5kZXJlciwgKnRoaXMpOwogCiAgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+c2V0Q29udGFp
bnNGdWxsU2NyZWVuRWxlbWVudE9uQW5jZXN0b3JzQ3Jvc3NpbmdGcmFtZUJvdW5kYXJpZXModHJ1
ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2
aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDc1LDcgKzQ3NSw3IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJC
bG9jazo6Y29udGludWF0aW9uQmUKICAgICByZXR1cm4gbGFzdDsKIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRUb0NvbnRp
bnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCkKIHsKICAgICBSZW5kZXJCbG9jayogZmxvdyA9IGNvbnRpbnVhdGlvbkJlZm9y
ZShiZWZvcmVDaGlsZCk7CiAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCBpczxSZW5kZXJCbG9j
az4oKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSkpOwpAQCAtNDkxLDcgKzQ5MSw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkZENoaWxkVG9Db250aW51YXRpb24KICAgICB9CiAKICAgICBpZiAobmV3Q2hp
bGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICBiZWZvcmVD
aGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3Jl
Q2hpbGQpOworICAgICAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC01MDAsMjEgKzUwMCwyMSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGls
ZFRvQ29udGludWF0aW9uCiAgICAgYm9vbCBmbG93SXNOb3JtYWwgPSBmbG93LT5pc0lubGluZSgp
IHx8ICFmbG93LT5zdHlsZSgpLmNvbHVtblNwYW4oKTsKIAogICAgIGlmIChmbG93ID09IGJlZm9y
ZUNoaWxkUGFyZW50KSB7Ci0gICAgICAgIGZsb3ctPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRp
b24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAogICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0Y2ggdXAg
aWYgd2UgY2FuLCBzbyB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRoZQogICAgIC8v
IG1pbmltYWwgIyBvZiBjb250aW51YXRpb25zIG5lZWRlZCBmb3IgdGhlIGlubGluZS4KICAgICBp
ZiAoY2hpbGRJc05vcm1hbCA9PSBiY3BJc05vcm1hbCkgewotICAgICAgICBiZWZvcmVDaGlsZFBh
cmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQp
OworICAgICAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmIChmbG93SXNOb3JtYWwgPT0gY2hpbGRJc05vcm1hbCkgewotICAgICAgICBmbG93
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCAwKTsgLy8gSnVzdCB0cmVh
dCBsaWtlIGFuIGFwcGVuZC4KKyAgICAgICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVh
dGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgMCk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQu
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxk
SWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBiZWZvcmVD
aGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxk
KSwgYmVmb3JlQ2hpbGQpOwogfQogCiBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRlckJsb2Nr
OjpjbG9uZSgpIGNvbnN0CkBAIC01MzcsMTUgKzUzNywxNSBAQCBSZW5kZXJQdHI8UmVuZGVyQmxv
Y2s+IFJlbmRlckJsb2NrOjpjbG9uCiAgICAgcmV0dXJuIGNsb25lQmxvY2s7CiB9CiAKLXZvaWQg
UmVuZGVyQmxvY2s6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZChSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBp
ZiAoY29udGludWF0aW9uKCkgJiYgIWlzQW5vbnltb3VzQmxvY2soKSkKLSAgICAgICAgYWRkQ2hp
bGRUb0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBhZGRDaGls
ZFRvQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgZWxz
ZQotICAgICAgICBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVD
aGlsZCk7CisgICAgICAgIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdD
aGlsZCksIGJlZm9yZUNoaWxkKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCkKIHsKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9
IHRoaXMpIHsKICAgICAgICAgUmVuZGVyRWxlbWVudCogYmVmb3JlQ2hpbGRDb250YWluZXIgPSBi
ZWZvcmVDaGlsZC0+cGFyZW50KCk7CkBAIC01NjYsMTYgKzU2NiwxNiBAQCB2b2lkIFJlbmRlckJs
b2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGluCiAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0IHRoZSBjaGlsZCBpbnRvIHRoZSBhbm9ueW1vdXMgYmxvY2sgYm94
IGluc3RlYWQgb2YgaGVyZS4KICAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQtPmlzSW5saW5l
KCkgfHwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpLT5maXJzdENoaWxkKCkgIT0gYmVmb3JlQ2hpbGQp
Ci0gICAgICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+YWRkQ2hpbGQobmV3
Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgYmVmb3JlQ2hpbGQtPnBh
cmVudCgpLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQobmV3Q2hpbGQsIGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQVNTRVJUKGJlZm9yZUNoaWxkQW5v
bnltb3VzQ29udGFpbmVyLT5pc1RhYmxlKCkpOwogICAgICAgICAgICAgaWYgKG5ld0NoaWxkLT5p
c1RhYmxlUGFydCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGludG8gdGhlIGFub255
bW91cyB0YWJsZS4KLSAgICAgICAgICAgICAgICBiZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5l
ci0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICBiZWZv
cmVDaGlsZEFub255bW91c0NvbnRhaW5lci0+YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJl
Zm9yZUNoaWxkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAg
LTYxMiwyMiArNjEyLDIxIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdDb250
aW4KICAgICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxkID0gYmVmb3JlQ2hpbGQgPyBiZWZv
cmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKIAogICAgICAgICBpZiAo
YWZ0ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKLSAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqYWZ0ZXJDaGlsZCkuYWRkQ2hpbGQobmV3Q2hpbGQp
OworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCphZnRlckNoaWxkKS5hZGRDaGls
ZChXVEZNb3ZlKG5ld0NoaWxkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAobmV3Q2hpbGQtPmlzSW5saW5lKCkpIHsKICAgICAgICAgICAgIC8vIE5vIHN1
aXRhYmxlIGV4aXN0aW5nIGFub255bW91cyBib3ggLSBjcmVhdGUgYSBuZXcgb25lLgotICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIG5ld0JveCA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0gICAg
ICAgICAgICBSZW5kZXJCb3g6OmFkZENoaWxkKG5ld0JveCwgYmVmb3JlQ2hpbGQpOwotICAgICAg
ICAgICAgbmV3Qm94LT5hZGRDaGlsZChuZXdDaGlsZCk7CisgICAgICAgICAgICBhdXRvJiBuZXdC
b3ggPSBiYXNlQWRkQ2hpbGQ8UmVuZGVyQm94PihjcmVhdGVBbm9ueW1vdXNCbG9jaygpLCBiZWZv
cmVDaGlsZCk7CisgICAgICAgICAgICBuZXdCb3guYWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaW52YWxpZGF0
ZUxpbmVMYXlvdXRQYXRoKCk7CiAKLSAgICBSZW5kZXJCb3g6OmFkZENoaWxkKG5ld0NoaWxkLCBi
ZWZvcmVDaGlsZCk7CisgICAgUmVuZGVyQm94OjphZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwg
YmVmb3JlQ2hpbGQpOwogIAogICAgIGlmIChtYWRlQm94ZXNOb25JbmxpbmUgJiYgaXM8UmVuZGVy
QmxvY2s+KHBhcmVudCgpKSAmJiBpc0Fub255bW91c0Jsb2NrKCkpCiAgICAgICAgIGRvd25jYXN0
PFJlbmRlckJsb2NrPigqcGFyZW50KCkpLnJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2sodGhp
cyk7CkBAIC03MTAsOSArNzA5LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6Om1ha2VDaGlsZHJlbk5v
bklubGluZSgKIAogICAgICAgICBjaGlsZCA9IGlubGluZVJ1bkVuZC0+bmV4dFNpYmxpbmcoKTsK
IAotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBjcmVhdGVBbm9ueW1vdXNCbG9jaygpOwot
ICAgICAgICBpbnNlcnRDaGlsZEludGVybmFsKGJsb2NrLCBpbmxpbmVSdW5TdGFydCwgTm90aWZ5
Q2hpbGRyZW4pOwotICAgICAgICBtb3ZlQ2hpbGRyZW5UbyhibG9jaywgaW5saW5lUnVuU3RhcnQs
IGNoaWxkKTsKKyAgICAgICAgYXV0byBuZXdCbG9jayA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7
CisgICAgICAgIGF1dG8mIGJsb2NrID0gKm5ld0Jsb2NrOworICAgICAgICBpbnNlcnRDaGlsZElu
dGVybmFsKFdURk1vdmUobmV3QmxvY2spLCBpbmxpbmVSdW5TdGFydCwgTm90aWZ5Q2hpbGRyZW4p
OworICAgICAgICBtb3ZlQ2hpbGRyZW5UbygmYmxvY2ssIGlubGluZVJ1blN0YXJ0LCBjaGlsZCk7
CiAgICAgfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAtODExLDIxICs4MTEsMTkgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6ZHJvcEFub255bW91c0JveENoaWxkKAogICAgIHBhcmVudC5zZXROZWVkc0xheW91
dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBwYXJlbnQuc2V0Q2hpbGRyZW5JbmxpbmUoY2hp
bGQuY2hpbGRyZW5JbmxpbmUoKSk7CiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGNo
aWxkLm5leHRTaWJsaW5nKCk7Ci0gICAgcGFyZW50LnJlbW92ZUNoaWxkSW50ZXJuYWwoY2hpbGQs
IGNoaWxkLmhhc0xheWVyKCkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7
CisKKyAgICBhdXRvIHRvQmVEZWxldGVkID0gcGFyZW50LnJlbW92ZUNoaWxkSW50ZXJuYWwoY2hp
bGQsIGNoaWxkLmhhc0xheWVyKCkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJl
bik7CiAgICAgY2hpbGQubW92ZUFsbENoaWxkcmVuVG8oJnBhcmVudCwgbmV4dFNpYmxpbmcsIGNo
aWxkLmhhc0xheWVyKCkpOwogICAgIC8vIERlbGV0ZSB0aGUgbm93LWVtcHR5IGJsb2NrJ3MgbGlu
ZXMgYW5kIG51a2UgaXQuCiAgICAgY2hpbGQuZGVsZXRlTGluZXMoKTsKLSAgICBjaGlsZC5kZXN0
cm95KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYg
b2xkQ2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJCbG9jazo6dGFrZUNoaWxk
KFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCiB7CiAgICAgLy8gTm8gbmVlZCB0byB3YXN0ZSB0aW1l
IGluIG1lcmdpbmcgb3IgcmVtb3ZpbmcgZW1wdHkgYW5vbnltb3VzIGJsb2Nrcy4KICAgICAvLyBX
ZSBjYW4ganVzdCBiYWlsIG91dCBpZiBvdXIgZG9jdW1lbnQgaXMgZ2V0dGluZyBkZXN0cm95ZWQu
Ci0gICAgaWYgKHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKSB7Ci0gICAgICAgIFJlbmRlckJv
eDo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
IChyZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6
dGFrZUNoaWxkKG9sZENoaWxkKTsKIAogICAgIC8vIElmIHRoaXMgY2hpbGQgaXMgYSBibG9jaywg
YW5kIGlmIG91ciBwcmV2aW91cyBhbmQgbmV4dCBzaWJsaW5ncyBhcmUgYm90aCBhbm9ueW1vdXMg
YmxvY2tzCiAgICAgLy8gd2l0aCBpbmxpbmUgY29udGVudCwgdGhlbiB3ZSBjYW4gZm9sZCB0aGUg
aW5saW5lIGNvbnRlbnQgYmFjayB0b2dldGhlci4KQEAgLTg0OSwxMSArODQ3LDExIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICAgICAgICAgIC8vIENhY2hl
IHRoaXMgdmFsdWUgYXMgaXQgbWlnaHQgZ2V0IGNoYW5nZWQgaW4gc2V0U3R5bGUoKSBjYWxsLgog
ICAgICAgICAgICAgYm9vbCBpbmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIgPSBpbmxpbmVDaGls
ZHJlbkJsb2NrLmhhc0xheWVyKCk7CiAgICAgICAgICAgICBpbmxpbmVDaGlsZHJlbkJsb2NrLnNl
dFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxl
KCksIEJMT0NLKSk7Ci0gICAgICAgICAgICByZW1vdmVDaGlsZEludGVybmFsKGlubGluZUNoaWxk
cmVuQmxvY2ssIGlubGluZUNoaWxkcmVuQmxvY2tIYXNMYXllciA/IE5vdGlmeUNoaWxkcmVuIDog
RG9udE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgIGF1dG8gcmVtb3ZlZENoaWxkID0gcmVt
b3ZlQ2hpbGRJbnRlcm5hbChpbmxpbmVDaGlsZHJlbkJsb2NrLCBpbmxpbmVDaGlsZHJlbkJsb2Nr
SGFzTGF5ZXIgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIC8vIE5vdyBqdXN0IHB1dCB0aGUgaW5saW5lQ2hpbGRyZW5CbG9j
ayBpbnNpZGUgdGhlIGJsb2NrQ2hpbGRyZW5CbG9jay4KICAgICAgICAgICAgIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQgPSBwcmV2ID09ICZpbmxpbmVDaGlsZHJlbkJsb2NrID8gYmxvY2tDaGls
ZHJlbkJsb2NrLmZpcnN0Q2hpbGQoKSA6IG51bGxwdHI7Ci0gICAgICAgICAgICBibG9ja0NoaWxk
cmVuQmxvY2suaW5zZXJ0Q2hpbGRJbnRlcm5hbCgmaW5saW5lQ2hpbGRyZW5CbG9jaywgYmVmb3Jl
Q2hpbGQsCisgICAgICAgICAgICBibG9ja0NoaWxkcmVuQmxvY2suaW5zZXJ0Q2hpbGRJbnRlcm5h
bChXVEZNb3ZlKHJlbW92ZWRDaGlsZCksIGJlZm9yZUNoaWxkLAogICAgICAgICAgICAgICAgIChp
bmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIgfHwgYmxvY2tDaGlsZHJlbkJsb2NrLmhhc0xheWVy
KCkpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICAgICAg
bmV4dC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgICAgICAK
QEAgLTg3Nyw3ICs4NzUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJP
YmplCiAKICAgICBpbnZhbGlkYXRlTGluZUxheW91dFBhdGgoKTsKIAotICAgIFJlbmRlckJveDo6
cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOworICAgIGF1dG8gdGFrZW5DaGlsZCA9IFJlbmRlckJveDo6
dGFrZUNoaWxkKG9sZENoaWxkKTsKIAogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBwcmV2ID8g
cHJldiA6IG5leHQ7CiAgICAgaWYgKGNhbk1lcmdlQW5vbnltb3VzQmxvY2tzICYmIGNoaWxkICYm
ICFjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgJiYgIWNoaWxkLT5uZXh0U2libGluZygpICYmIGNh
bkRyb3BBbm9ueW1vdXNCbG9ja0NoaWxkKCkpIHsKQEAgLTkzNCw2ICs5MzIsNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplCiAgICAgICAgICAgICBkZXN0cm95KCk7
CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIHRha2VuQ2hpbGQ7CiB9CiAKIGJvb2wgUmVu
ZGVyQmxvY2s6OmNoaWxkcmVuUHJldmVudFNlbGZDb2xsYXBzaW5nKCkgY29uc3QKQEAgLTMzNDAs
MTQgKzMzMzksMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAog
ICAgICAgICBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJl
Y3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQoTGF5b3V0UG9pbnQoYWRkaXRpb25hbE9mZnNldCArIGlu
bGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkg
LSBsb2NhdGlvbigpKSksIHBhaW50Q29udGFpbmVyKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJl
bmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmRE
aXNwbGF5KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBFRGlz
cGxheSBkaXNwbGF5KQorUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y3JlYXRl
QW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KERvY3VtZW50JiBkb2N1bWVudCwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBFRGlzcGxheSBkaXNwbGF5KQogewogICAgIC8vIEZJWE1F
OiBEbyB3ZSBuZWVkIHRvIGNvbnZlcnQgYWxsIG91ciBpbmxpbmUgZGlzcGxheXMgdG8gYmxvY2st
dHlwZSBpbiB0aGUgYW5vbnltb3VzIGxvZ2ljID8KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
QmxvY2s+IG5ld0JveDsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IG5ld0JveDsKICAgICBp
ZiAoZGlzcGxheSA9PSBGTEVYIHx8IGRpc3BsYXkgPT0gSU5MSU5FX0ZMRVgpCi0gICAgICAgIG5l
d0JveCA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyRmxleGlibGVCb3g+KGRvY3VtZW50LCBSZW5k
ZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgRkxFWCkpOwor
ICAgICAgICBuZXdCb3ggPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJGbGV4aWJsZUJveD4oZG9jdW1l
bnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBG
TEVYKSk7CiAgICAgZWxzZQotICAgICAgICBuZXdCb3ggPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRl
ckJsb2NrRmxvdz4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdp
dGhEaXNwbGF5KHN0eWxlLCBCTE9DSykpOworICAgICAgICBuZXdCb3ggPSBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJCbG9ja0Zsb3c+KGRvY3VtZW50LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3Vz
U3R5bGVXaXRoRGlzcGxheShzdHlsZSwgQkxPQ0spKTsKICAgICAKICAgICBuZXdCb3gtPmluaXRp
YWxpemVTdHlsZSgpOwogICAgIHJldHVybiBuZXdCb3g7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDggKzcyLDggQEAg
cHVibGljOgogICAgIC8vIEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24gd2hl
biBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVMaW5lcygpOwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5l
d0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxk
KFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxk
KFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDAp
OwogCkBAIC0xOTYsMTEgKzE5NiwxMSBAQCBwdWJsaWM6CiAgICAgdXNpbmcgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6OmNvbnRpbnVhdGlvbjsKICAgICB1c2luZyBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
c2V0Q29udGludWF0aW9uOwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9j
az4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyQW5kRGlzcGxheShjb25zdCBSZW5k
ZXJCb3gmIHBhcmVudCwgRURpc3BsYXkgPSBCTE9DSyk7Ci0gICAgUmVuZGVyQmxvY2sqIGNyZWF0
ZUFub255bW91c0Jsb2NrKEVEaXNwbGF5ID0gQkxPQ0spIGNvbnN0OworICAgIHN0YXRpYyBSZW5k
ZXJQdHI8UmVuZGVyQmxvY2s+IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlckFuZERp
c3BsYXkoY29uc3QgUmVuZGVyQm94JiBwYXJlbnQsIEVEaXNwbGF5ID0gQkxPQ0spOworICAgIFJl
bmRlclB0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnltb3VzQmxvY2soRURpc3BsYXkgPSBCTE9D
SykgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQgZHJvcEFub255bW91c0JveENoaWxkKFJlbmRlckJs
b2NrJiBwYXJlbnQsIFJlbmRlckJsb2NrJiBjaGlsZCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJC
b3gmKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9u
eW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIHN0YXRpYyBib29sIHNob3VsZFNraXBDcmVhdGluZ1J1bnNGb3JPYmplY3QoUmVuZGVy
T2JqZWN0JiBvYmopCiAgICAgewpAQCAtNDI4LDcgKzQyOCw3IEBAIHByb3RlY3RlZDoKICAgICB2
b2lkIGJsb2NrV2lsbEJlRGVzdHJveWVkKCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmRE
aXNwbGF5KERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBFRGlzcGxheSk7CisgICAgc3Rh
dGljIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVB
bmREaXNwbGF5KERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBFRGlzcGxheSk7CiAKICAg
ICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxl
cnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFsIExheW91dFVuaXQg
bG9naWNhbFJpZ2h0RmxvYXRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQsIExheW91dFVuaXQgZml4
ZWRPZmZzZXQsIExheW91dFVuaXQpIGNvbnN0IHsgcmV0dXJuIGZpeGVkT2Zmc2V0OyB9OwpAQCAt
NDQ3LDggKzQ0Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUg
dmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tG
bG93CiAgICAgdmlydHVhbCB2b2lkIG1vdmVBbGxDaGlsZHJlbkluY2x1ZGluZ0Zsb2F0c1RvKFJl
bmRlckJsb2NrJiB0b0Jsb2NrLCBib29sIGZ1bGxSZW1vdmVJbnNlcnQpIHsgbW92ZUFsbENoaWxk
cmVuVG8oJnRvQmxvY2ssIGZ1bGxSZW1vdmVJbnNlcnQpOyB9CiAKLSAgICB2b2lkIGFkZENoaWxk
VG9Db250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCk7Ci0gICAgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9i
amVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIG92ZXJyaWRlOworICAg
IHZvaWQgYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisgICAgdm9pZCBhZGRDaGlsZElnbm9y
aW5nQ29udGludWF0aW9uKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKSBvdmVycmlkZTsKIAogICAgIGJvb2wgaXNTZWxmQ29sbGFwc2lu
Z0Jsb2NrKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGNoaWxkcmVuUHJldmVu
dFNlbGZDb2xsYXBzaW5nKCkgY29uc3Q7CkBAIC01NDcsMTkgKzU0NywxOSBAQCBMYXlvdXRVbml0
IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsCiBMYXlvdXRVbml0IGlubGluZURpcmVjdGlv
bk9mZnNldChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRG
cm9tUm9vdEJsb2NrKTsKIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50UmVzcGVjdGlu
Z0VkaXRpbmdCb3VuZGFyaWVzKFJlbmRlckJsb2NrJiwgUmVuZGVyQm94JiwgY29uc3QgTGF5b3V0
UG9pbnQmKTsKIAotaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9jaz4gUmVuZGVyQmxv
Y2s6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlckFuZERpc3BsYXkoY29uc3QgUmVu
ZGVyQm94JiBwYXJlbnQsIEVEaXNwbGF5IGRpc3BsYXkpCitpbmxpbmUgUmVuZGVyUHRyPFJlbmRl
ckJsb2NrPiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyQW5k
RGlzcGxheShjb25zdCBSZW5kZXJCb3gmIHBhcmVudCwgRURpc3BsYXkgZGlzcGxheSkKIHsKICAg
ICByZXR1cm4gY3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KHBhcmVudC5k
b2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSwgZGlzcGxheSk7CiB9CiAKLWlubGluZSBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyQm94PiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNh
bWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29uc3QKK2lubGluZSBSZW5kZXJQ
dHI8UmVuZGVyQm94PiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBl
QXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29uc3QKIHsKICAgICByZXR1cm4gY3JlYXRl
QW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KGRvY3VtZW50KCksIHJlbmRlcmVyLnN0
eWxlKCksIHN0eWxlKCkuZGlzcGxheSgpKTsKIH0KIAotaW5saW5lIFJlbmRlckJsb2NrKiBSZW5k
ZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2soRURpc3BsYXkgZGlzcGxheSkgY29uc3QKK2lu
bGluZSBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNC
bG9jayhFRGlzcGxheSBkaXNwbGF5KSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVBbm9ueW1v
dXNCbG9ja1dpdGhTdHlsZUFuZERpc3BsYXkoZG9jdW1lbnQoKSwgc3R5bGUoKSwgZGlzcGxheSku
cmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVBbm9ueW1vdXNCbG9ja1dpdGhTdHlsZUFuZERp
c3BsYXkoZG9jdW1lbnQoKSwgc3R5bGUoKSwgZGlzcGxheSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgzNSwyNCArMzgzNSwyNCBAQCB2
b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0RXhjbHVkZWRDaGlsCiAgICAgZGV0ZXJtaW5lTG9n
aWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKCpmcmFnbWVudGVkRmxvdyk7CiB9CiAKLXZvaWQgUmVu
ZGVyQmxvY2tGbG93OjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewog
ICAgIGlmIChtdWx0aUNvbHVtbkZsb3coKSAmJiAoIWlzRmllbGRzZXQoKSB8fCAhbmV3Q2hpbGQt
PmlzTGVnZW5kKCkpKQotICAgICAgICByZXR1cm4gbXVsdGlDb2x1bW5GbG93KCktPmFkZENoaWxk
KG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybiBtdWx0aUNvbHVtbkZsb3co
KS0+YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICBhdXRvKiBi
ZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIgPSBiZWZvcmVDaGlsZDsKICAgICBpZiAoYXV0byogY29u
dGFpbmluZ0ZyYWdtZW50ZWRGbG93ID0gZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSkKICAgICAg
ICAgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyID0gY29udGFpbmluZ0ZyYWdtZW50ZWRGbG93LT5y
ZXNvbHZlTW92ZWRDaGlsZChiZWZvcmVDaGlsZCk7Ci0gICAgUmVuZGVyQmxvY2s6OmFkZENoaWxk
KG5ld0NoaWxkLCBiZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIpOworICAgIFJlbmRlckJsb2NrOjph
ZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyKTsKIH0K
IAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgb2xkQ2hp
bGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJCbG9ja0Zsb3c6OnRha2VDaGlsZChS
ZW5kZXJPYmplY3QmIG9sZENoaWxkKQogewogICAgIGlmICghcmVuZGVyVHJlZUJlaW5nRGVzdHJv
eWVkKCkpIHsKICAgICAgICAgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIGZyYWdtZW50ZWRGbG93ID0g
bXVsdGlDb2x1bW5GbG93KCk7CiAgICAgICAgIGlmIChmcmFnbWVudGVkRmxvdyAmJiBmcmFnbWVu
dGVkRmxvdyAhPSAmb2xkQ2hpbGQpCiAgICAgICAgICAgICBmcmFnbWVudGVkRmxvdy0+ZnJhZ21l
bnRlZEZsb3dSZWxhdGl2ZVdpbGxCZVJlbW92ZWQob2xkQ2hpbGQpOwogICAgIH0KLSAgICBSZW5k
ZXJCbG9jazo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOworICAgIHJldHVybiBSZW5kZXJCbG9jazo6
dGFrZUNoaWxkKG9sZENoaWxkKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNoZWNrRm9y
UGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoYm9vbCYgcmVsYXlvdXRDaGlsZHJlbiwgTGF5
b3V0VW5pdCYgcGFnZUxvZ2ljYWxIZWlnaHQsIGJvb2wmIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdl
ZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHJl
dmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zs
b3cuaAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDggKzM4Miw4IEBAIHB1YmxpYzoKICAgICBMYXlv
dXRVbml0IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZEZvckZyYWdtZW50YXRpb24oY29uc3QgUmVuZGVy
Qm94JiBjaGlsZCkgY29uc3Q7CiAgICAgYm9vbCBoYXNOZXh0UGFnZShMYXlvdXRVbml0IGxvZ2lj
YWxPZmZzZXQsIFBhZ2VCb3VuZGFyeVJ1bGUgPSBFeGNsdWRlUGFnZUJvdW5kYXJ5KSBjb25zdDsK
IAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVy
T2JqZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwor
ICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVy
cmlkZTsKIAogICAgIHZvaWQgdXBkYXRlQ29sdW1uUHJvZ3Jlc3Npb25Gcm9tU3R5bGUoUmVuZGVy
U3R5bGUmKTsKICAgICB2b2lkIHVwZGF0ZVN0eWxlc0ZvckNvbHVtbkNoaWxkcmVuKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMjIyNjA3KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ5MzEsMjAgKzQ5MzEsMjEgQEAgUmVuZGVyT2JqZWN0KiBSZW5kZXJCb3g6OnNwbGl0QW5v
bnltb3VzQgogCiAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJlbnQgYm94
IGludG8gdHdvIGJveGVzIGFuZCBtb3ZlIGNoaWxkcmVuCiAgICAgICAgICAgICAvLyBmcm9tIHxi
ZWZvcmVDaGlsZHwgdG8gZW5kIGludG8gdGhlIG5ldyBwb3N0IGJveC4KLSAgICAgICAgICAgIGF1
dG8qIHBvc3RCb3ggPSBib3hUb1NwbGl0LmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFz
KCp0aGlzKS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBwb3N0Qm94LT5zZXRDaGlsZHJlbklubGlu
ZShib3hUb1NwbGl0LmNoaWxkcmVuSW5saW5lKCkpOworICAgICAgICAgICAgYXV0byBuZXdQb3N0
Qm94ID0gYm94VG9TcGxpdC5jcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcygqdGhpcyk7
CisgICAgICAgICAgICBhdXRvJiBwb3N0Qm94ID0gKm5ld1Bvc3RCb3g7CisgICAgICAgICAgICBw
b3N0Qm94LnNldENoaWxkcmVuSW5saW5lKGJveFRvU3BsaXQuY2hpbGRyZW5JbmxpbmUoKSk7CiAg
ICAgICAgICAgICBSZW5kZXJCb3gqIHBhcmVudEJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oYm94
VG9TcGxpdC5wYXJlbnQoKSk7CiAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGludmFsaWRhdGUg
dGhlIHxwYXJlbnRCb3h8IGJlZm9yZSBpbnNlcnRpbmcgdGhlIG5ldyBub2RlCiAgICAgICAgICAg
ICAvLyBzbyB0aGF0IHRoZSB0YWJsZSByZXBhaW50aW5nIGxvZ2ljIGtub3dzIHRoZSBzdHJ1Y3R1
cmUgaXMgZGlydHkuCiAgICAgICAgICAgICAvLyBTZWUgZm9yIGV4YW1wbGUgUmVuZGVyVGFibGVD
ZWxsOmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50LgogICAgICAgICAgICAgbWFya0JveEZv
clJlbGF5b3V0QWZ0ZXJTcGxpdCgqcGFyZW50Qm94KTsKLSAgICAgICAgICAgIHBhcmVudEJveC0+
aW5zZXJ0Q2hpbGRJbnRlcm5hbChwb3N0Qm94LCBib3hUb1NwbGl0Lm5leHRTaWJsaW5nKCksIE5v
dGlmeUNoaWxkcmVuKTsKLSAgICAgICAgICAgIGJveFRvU3BsaXQubW92ZUNoaWxkcmVuVG8ocG9z
dEJveCwgYmVmb3JlQ2hpbGQsIG51bGxwdHIsIHRydWUpOworICAgICAgICAgICAgcGFyZW50Qm94
LT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3UG9zdEJveCksIGJveFRvU3BsaXQubmV4
dFNpYmxpbmcoKSwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgYm94VG9TcGxpdC5tb3Zl
Q2hpbGRyZW5UbygmcG9zdEJveCwgYmVmb3JlQ2hpbGQsIG51bGxwdHIsIHRydWUpOwogCiAgICAg
ICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KGJveFRvU3BsaXQpOwotICAgICAg
ICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdCgqcG9zdEJveCk7CisgICAgICAgICAg
ICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KHBvc3RCb3gpOwogCi0gICAgICAgICAgICBi
ZWZvcmVDaGlsZCA9IHBvc3RCb3g7CisgICAgICAgICAgICBiZWZvcmVDaGlsZCA9ICZwb3N0Qm94
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gJmJveFRvU3BsaXQ7
CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkocmV2aXNpb24g
MjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OTIsNyArNTkyLDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbGF5b3V0
T3ZlcmZsb3dSZWN0LnkoKSA8IHkoKSB8fCBsYXlvdXRPdmVyZmxvd1JlY3QubWF4WSgpID4geSgp
ICsgbG9naWNhbEhlaWdodCgpOwogICAgIH0KIAotICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlckJveD4gY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVy
Qm94JikgY29uc3QKKyAgICB2aXJ0dWFsIFJlbmRlclB0cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255
bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1OTYsMTIgKzI1OTYsMTIgQEAg
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxkVG8oUgogICAgIGlmIChmdWxsUmVt
b3ZlSW5zZXJ0ICYmICh0b0JveE1vZGVsT2JqZWN0LT5pc1JlbmRlckJsb2NrKCkgfHwgdG9Cb3hN
b2RlbE9iamVjdC0+aXNSZW5kZXJJbmxpbmUoKSkpIHsKICAgICAgICAgLy8gVGFrZXMgY2FyZSBv
ZiBhZGRpbmcgdGhlIG5ldyBjaGlsZCBjb3JyZWN0bHkgaWYgdG9CbG9jayBhbmQgZnJvbUJsb2Nr
CiAgICAgICAgIC8vIGhhdmUgZGlmZmVyZW50IGtpbmQgb2YgY2hpbGRyZW4gKGJsb2NrIHZzIGlu
bGluZSkuCi0gICAgICAgIHJlbW92ZUNoaWxkSW50ZXJuYWwoKmNoaWxkLCBOb3RpZnlDaGlsZHJl
bik7Ci0gICAgICAgIHRvQm94TW9kZWxPYmplY3QtPmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGls
ZCk7CisgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSByZW1vdmVDaGlsZEludGVybmFsKCpjaGls
ZCwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICB0b0JveE1vZGVsT2JqZWN0LT5hZGRDaGlsZChX
VEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgYmVmb3JlQ2hpbGQpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IE5vdGlmeUNoaWxkcmVuVHlwZSBub3RpZnlUeXBlID0gZnVsbFJlbW92ZUluc2VydCA/IE5vdGlm
eUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuOwotICAgICAgICByZW1vdmVDaGlsZEludGVy
bmFsKCpjaGlsZCwgbm90aWZ5VHlwZSk7Ci0gICAgICAgIHRvQm94TW9kZWxPYmplY3QtPmluc2Vy
dENoaWxkSW50ZXJuYWwoY2hpbGQsIGJlZm9yZUNoaWxkLCBub3RpZnlUeXBlKTsKKyAgICAgICAg
YXV0byBjaGlsZFRvTW92ZSA9IHJlbW92ZUNoaWxkSW50ZXJuYWwoKmNoaWxkLCBub3RpZnlUeXBl
KTsKKyAgICAgICAgdG9Cb3hNb2RlbE9iamVjdC0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3Zl
KGNoaWxkVG9Nb3ZlKSwgYmVmb3JlQ2hpbGQsIG5vdGlmeVR5cGUpOwogICAgIH0KIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHJldmlzaW9uIDIy
MjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MywzMCArNjMsMzAgQEAgYm9vbCBSZW5kZXJCdXR0b246Omhhc0xpbmVJ
ZkVtcHR5KCkgY29ucwogICAgIHJldHVybiBpczxIVE1MSW5wdXRFbGVtZW50Pihmb3JtQ29udHJv
bEVsZW1lbnQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyQnV0dG9uOjphZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJCdXR0
b246OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQogewogICAgIGlmICghbV9pbm5lcikgewogICAgICAgICAvLyBDcmVh
dGUgYW4gYW5vbnltb3VzIGJsb2NrLgogICAgICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7Ci0g
ICAgICAgIG1faW5uZXIgPSBjcmVhdGVBbm9ueW1vdXNCbG9jayhzdHlsZSgpLmRpc3BsYXkoKSk7
Ci0gICAgICAgIHVwZGF0ZUFub255bW91c0NoaWxkU3R5bGUoKm1faW5uZXIsIG1faW5uZXItPm11
dGFibGVTdHlsZSgpKTsKLSAgICAgICAgUmVuZGVyRmxleGlibGVCb3g6OmFkZENoaWxkKG1faW5u
ZXIpOworICAgICAgICBhdXRvIG5ld0lubmVyID0gY3JlYXRlQW5vbnltb3VzQmxvY2soc3R5bGUo
KS5kaXNwbGF5KCkpOworICAgICAgICB1cGRhdGVBbm9ueW1vdXNDaGlsZFN0eWxlKCpuZXdJbm5l
ciwgbmV3SW5uZXItPm11dGFibGVTdHlsZSgpKTsKKyAgICAgICAgbV9pbm5lciA9ICZiYXNlQWRk
Q2hpbGQ8UmVuZGVyRmxleGlibGVCb3g+KFdURk1vdmUobmV3SW5uZXIpKTsKICAgICB9CiAgICAg
Ci0gICAgbV9pbm5lci0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBtX2lu
bmVyLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogfQogCi12b2lk
IFJlbmRlckJ1dHRvbjo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKK1JlbmRl
clB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlckJ1dHRvbjo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYg
b2xkQ2hpbGQpCiB7CiAgICAgLy8gbV9pbm5lciBzaG91bGQgYmUgdGhlIG9ubHkgY2hpbGQsIGJ1
dCBjaGVja2luZyBmb3IgZGlyZWN0IGNoaWxkcmVuIHdobwogICAgIC8vIGFyZSBub3QgbV9pbm5l
ciBwcmV2ZW50cyBzZWN1cml0eSBwcm9ibGVtcyB3aGVuIHRoYXQgYXNzdW1wdGlvbiBpcwogICAg
IC8vIHZpb2xhdGVkLgogICAgIGlmICgmb2xkQ2hpbGQgPT0gbV9pbm5lciB8fCAhbV9pbm5lciB8
fCBvbGRDaGlsZC5wYXJlbnQoKSA9PSB0aGlzKSB7CiAgICAgICAgIEFTU0VSVCgmb2xkQ2hpbGQg
PT0gbV9pbm5lciB8fCAhbV9pbm5lcik7Ci0gICAgICAgIFJlbmRlckZsZXhpYmxlQm94OjpyZW1v
dmVDaGlsZChvbGRDaGlsZCk7CiAgICAgICAgIG1faW5uZXIgPSBudWxscHRyOwotICAgIH0gZWxz
ZQotICAgICAgICBtX2lubmVyLT5yZW1vdmVDaGlsZChvbGRDaGlsZCk7CisgICAgICAgIHJldHVy
biBSZW5kZXJGbGV4aWJsZUJveDo6dGFrZUNoaWxkKG9sZENoaWxkKTsKKyAgICB9CisgICAgcmV0
dXJuIG1faW5uZXItPnRha2VDaGlsZChvbGRDaGlsZCk7CiB9CiAgICAgCiB2b2lkIFJlbmRlckJ1
dHRvbjo6dXBkYXRlQW5vbnltb3VzQ2hpbGRTdHlsZShjb25zdCBSZW5kZXJPYmplY3QmIGNoaWxk
LCBSZW5kZXJTdHlsZSYgY2hpbGRTdHlsZSkgY29uc3QKQEAgLTEyOCw4ICsxMjgsOSBAQCB2b2lk
IFJlbmRlckJ1dHRvbjo6c2V0VGV4dChjb25zdCBTdHJpbmcmCiAgICAgICAgIGlmIChtX2J1dHRv
blRleHQpCiAgICAgICAgICAgICBtX2J1dHRvblRleHQtPnNldFRleHQoc3RyLmltcGwoKSk7CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9idXR0b25UZXh0ID0gbmV3IFJlbmRlclRleHRG
cmFnbWVudChkb2N1bWVudCgpLCBzdHIpOwotICAgICAgICAgICAgYWRkQ2hpbGQobV9idXR0b25U
ZXh0KTsKKyAgICAgICAgICAgIGF1dG8gbmV3QnV0dG9uVGV4dCA9IGNyZWF0ZVJlbmRlcmVyPFJl
bmRlclRleHRGcmFnbWVudD4oZG9jdW1lbnQoKSwgc3RyKTsKKyAgICAgICAgICAgIG1fYnV0dG9u
VGV4dCA9IG5ld0J1dHRvblRleHQuZ2V0KCk7CisgICAgICAgICAgICBhZGRDaGlsZChXVEZNb3Zl
KG5ld0J1dHRvblRleHQpKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsOCAr
NDAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QgKmJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDaGls
ZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QgKmJlZm9yZUNoaWxkID0gMCkgb3Zl
cnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVj
dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayhSZW5k
ZXJCbG9jayopIG92ZXJyaWRlIHsgfQogICAgIGJvb2wgY3JlYXRlc0Fub255bW91c1dyYXBwZXIo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDU1LDIzICs0NTUsMjYgQEAgYm9vbCBSZW5kZXJFbGVtZW50OjpjaGlsZFJlcXVpcmVzVGFibGUo
YwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJFbGVtZW50OjphZGRDaGlsZChS
ZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBS
ZW5kZXJFbGVtZW50OjphZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKLSAgICBpZiAoY2hpbGRSZXF1aXJlc1RhYmxl
KCpuZXdDaGlsZCkpIHsKKyAgICBhdXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAgICBpZiAoY2hp
bGRSZXF1aXJlc1RhYmxlKGNoaWxkKSkgewogICAgICAgICBSZW5kZXJUYWJsZSogdGFibGU7CiAg
ICAgICAgIFJlbmRlck9iamVjdCogYWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hp
bGQtPnByZXZpb3VzU2libGluZygpIDogbV9sYXN0Q2hpbGQ7CiAgICAgICAgIGlmIChhZnRlckNo
aWxkICYmIGFmdGVyQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgaXM8UmVuZGVyVGFibGU+KCphZnRl
ckNoaWxkKSAmJiAhYWZ0ZXJDaGlsZC0+aXNCZWZvcmVDb250ZW50KCkpCiAgICAgICAgICAgICB0
YWJsZSA9IGRvd25jYXN0PFJlbmRlclRhYmxlPihhZnRlckNoaWxkKTsKICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICB0YWJsZSA9IFJlbmRlclRhYmxlOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFy
ZW50UmVuZGVyZXIoKnRoaXMpLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGFkZENoaWxkKHRhYmxl
LCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBhdXRvIG5ld1RhYmxlID0gIFJlbmRlclRhYmxl
OjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoKnRoaXMpOworICAgICAgICAgICAg
dGFibGUgPSBuZXdUYWJsZS5nZXQoKTsKKyAgICAgICAgICAgIGFkZENoaWxkKFdURk1vdmUobmV3
VGFibGUpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIH0KLSAgICAgICAgdGFibGUtPmFkZENoaWxk
KG5ld0NoaWxkKTsKKworICAgICAgICB0YWJsZS0+YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCkp
OwogICAgIH0gZWxzZQotICAgICAgICBpbnNlcnRDaGlsZEludGVybmFsKG5ld0NoaWxkLCBiZWZv
cmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICBpbnNlcnRDaGlsZEludGVybmFsKFdU
Rk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwogCi0gICAgaWYg
KGlzPFJlbmRlclRleHQ+KCpuZXdDaGlsZCkpCi0gICAgICAgIGRvd25jYXN0PFJlbmRlclRleHQ+
KCpuZXdDaGlsZCkuc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlRXF1YWwsIG51bGxwdHIp
OworICAgIGlmIChpczxSZW5kZXJUZXh0PihjaGlsZCkpCisgICAgICAgIGRvd25jYXN0PFJlbmRl
clRleHQ+KGNoaWxkKS5zdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2VFcXVhbCwgbnVsbHB0
cik7CiAKICAgICAvLyBTVkcgY3JlYXRlcyByZW5kZXJlcnMgZm9yIDxnIGRpc3BsYXk9Im5vbmUi
PiwgYXMgU1ZHIHJlcXVpcmVzIGNoaWxkcmVuIG9mIGhpZGRlbgogICAgIC8vIDxnPnMgdG8gaGF2
ZSByZW5kZXJlcnMgLSBhdCBsZWFzdCB0aGF0J3MgaG93IG91ciBpbXBsZW1lbnRhdGlvbiB3b3Jr
cy4gQ29uc2lkZXI6CkBAIC00ODEsMjIgKzQ4NCwzMCBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmFk
ZENoaWxkKFJlbmRlck9iamVjCiAgICAgLy8gICBrbm93IHRoYXQgaXQncyBpbnNpZGUgYSAiaGlk
ZGVuIFNWRyBzdWJ0cmVlIiwgYW5kIHRodXMgcGFpbnRzLCBldmVuIGlmIGl0IHNob3VsZG4ndC4K
ICAgICAvLyBUbyBhdm9pZCB0aGUgcHJvYmxlbSBhbGx0b2dldGhlciwgZGV0ZWN0IGVhcmx5IGlm
IHdlJ3JlIGluc2lkZSBhIGhpZGRlbiBTVkcgc3VidHJlZQogICAgIC8vIGFuZCBzdG9wIGNyZWF0
aW5nIGxheWVycyBhdCBhbGwgZm9yIHRoZXNlIGNhc2VzIC0gdGhleSdyZSBub3QgdXNlZCBhbnl3
YXlzLgotICAgIGlmIChuZXdDaGlsZC0+aGFzTGF5ZXIoKSAmJiAhbGF5ZXJDcmVhdGlvbkFsbG93
ZWRGb3JTdWJ0cmVlKCkpCi0gICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+
KCpuZXdDaGlsZCkubGF5ZXIoKS0+cmVtb3ZlT25seVRoaXNMYXllcigpOworICAgIGlmIChjaGls
ZC5oYXNMYXllcigpICYmICFsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUoKSkKKyAgICAg
ICAgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oY2hpbGQpLmxheWVyKCktPnJlbW92
ZU9ubHlUaGlzTGF5ZXIoKTsKKworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNoaWxkQWRkZWQoKnRo
aXMsIGNoaWxkKTsKK30KIAotICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNoaWxkQWRkZWQoKnRoaXMs
ICpuZXdDaGlsZCk7CitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJFbGVtZW50Ojp0YWtl
Q2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKK3sKKyAgICByZXR1cm4gcmVtb3ZlQ2hpbGRJ
bnRlcm5hbChvbGRDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwogfQogCi12b2lkIFJlbmRlckVsZW1l
bnQ6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCit2b2lkIFJlbmRlckVsZW1l
bnQ6OnJlbW92ZUFuZERlc3Ryb3lDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQogewotICAg
IHJlbW92ZUNoaWxkSW50ZXJuYWwob2xkQ2hpbGQsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICB0YWtl
Q2hpbGQob2xkQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlckVsZW1lbnQ6OmRlc3Ryb3lMZWZ0b3Zl
ckNoaWxkcmVuKCkKIHsKICAgICB3aGlsZSAobV9maXJzdENoaWxkKSB7CiAgICAgICAgIGlmICht
X2ZpcnN0Q2hpbGQtPnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gRklSU1RfTEVUVEVSICYmICFtX2Zp
cnN0Q2hpbGQtPmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICBtX2ZpcnN0Q2hpbGQtPnJlbW92ZUZy
b21QYXJlbnQoKTsgLy8gOmZpcnN0LWxldHRlciBmcmFnbWVudCByZW5kZXJlcnMgYXJlIGRlc3Ry
b3llZCBieSB0aGVpciByZW1haW5pbmcgdGV4dCBmcmFnbWVudC4KKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBNZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICAgICAgIGF1dG8gZmlyc3RMZXR0ZXIgPSB0
YWtlQ2hpbGQoKm1fZmlyc3RDaGlsZCk7IC8vIDpmaXJzdC1sZXR0ZXIgZnJhZ21lbnQgcmVuZGVy
ZXJzIGFyZSBkZXN0cm95ZWQgYnkgdGhlaXIgcmVtYWluaW5nIHRleHQgZnJhZ21lbnQuCisgICAg
ICAgICAgICBhdXRvKiBsZWFrZWRQdHIgPSBmaXJzdExldHRlci5sZWFrUHRyKCk7CisgICAgICAg
ICAgICBVTlVTRURfUEFSQU0obGVha2VkUHRyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIERlc3Ryb3kgYW55IGFub255bW91cyBjaGlsZHJlbiByZW1haW5pbmcgaW4gdGhlIHJl
bmRlciB0cmVlLCBhcyB3ZWxsIGFzIGltcGxpY2l0IChzaGFkb3cpIERPTSBlbGVtZW50cyBsaWtl
IHRob3NlIHVzZWQgaW4gdGhlIGVuZ2luZS1iYXNlZCB0ZXh0IGZpZWxkcy4KICAgICAgICAgICAg
IGlmIChtX2ZpcnN0Q2hpbGQtPm5vZGUoKSkKQEAgLTUwNiwyNCArNTE3LDIxIEBAIHZvaWQgUmVu
ZGVyRWxlbWVudDo6ZGVzdHJveUxlZnRvdmVyQ2hpbGQKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
RWxlbWVudDo6aW5zZXJ0Q2hpbGRJbnRlcm5hbChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBOb3RpZnlDaGlsZHJlblR5cGUgbm90aWZ5Q2hpbGRyZW4p
Cit2b2lkIFJlbmRlckVsZW1lbnQ6Omluc2VydENoaWxkSW50ZXJuYWwoUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4gbmV3Q2hpbGRQdHIsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIE5vdGlmeUNo
aWxkcmVuVHlwZSBub3RpZnlDaGlsZHJlbikKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX01F
U1NBR0UoIXZpZXcoKS5sYXlvdXRTdGF0ZSgpLCAiTGF5b3V0IG11c3Qgbm90IG11dGF0ZSByZW5k
ZXIgdHJlZSIpOwogCiAgICAgQVNTRVJUKGNhbkhhdmVDaGlsZHJlbigpIHx8IGNhbkhhdmVHZW5l
cmF0ZWRDaGlsZHJlbigpKTsKLSAgICBBU1NFUlQoIW5ld0NoaWxkLT5wYXJlbnQoKSk7Ci0gICAg
QVNTRVJUKCFpc1JlbmRlckJsb2NrRmxvdygpIHx8ICghbmV3Q2hpbGQtPmlzVGFibGVTZWN0aW9u
KCkgJiYgIW5ld0NoaWxkLT5pc1RhYmxlUm93KCkgJiYgIW5ld0NoaWxkLT5pc1RhYmxlQ2VsbCgp
KSk7CisgICAgQVNTRVJUKCFuZXdDaGlsZFB0ci0+cGFyZW50KCkpOworICAgIEFTU0VSVCghaXNS
ZW5kZXJCbG9ja0Zsb3coKSB8fCAoIW5ld0NoaWxkUHRyLT5pc1RhYmxlU2VjdGlvbigpICYmICFu
ZXdDaGlsZFB0ci0+aXNUYWJsZVJvdygpICYmICFuZXdDaGlsZFB0ci0+aXNUYWJsZUNlbGwoKSkp
OwogCiAgICAgd2hpbGUgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAmJiBi
ZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykKICAgICAgICAgYmVmb3JlQ2hpbGQgPSBiZWZv
cmVDaGlsZC0+cGFyZW50KCk7CiAKLSAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1
dCBpZiBpdCBkb2VzIHByZXZlbnQgcmVuZGVyIHRyZWUgY29ycnVwdGlvbgotICAgIC8vIHdoZXJl
IGNoaWxkLT5wYXJlbnQoKSBlbmRzIHVwIGJlaW5nIG93bmVyIGJ1dCBjaGlsZC0+bmV4dFNpYmxp
bmcoKS0+cGFyZW50KCkKLSAgICAvLyBpcyBub3Qgb3duZXIuCi0gICAgaWYgKGJlZm9yZUNoaWxk
ICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VSVCghYmVmb3JlQ2hp
bGQgfHwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOworCisgICAgLy8gVGFrZSB0aGUg
b3duZXJzaGlwLgorICAgIGF1dG8qIG5ld0NoaWxkID0gbmV3Q2hpbGRQdHIubGVha1B0cigpOwog
CiAgICAgbmV3Q2hpbGQtPnNldFBhcmVudCh0aGlzKTsKIApAQCAtNTY1LDcgKzU3Myw3IEBAIHZv
aWQgUmVuZGVyRWxlbWVudDo6aW5zZXJ0Q2hpbGRJbnRlcm5hbCgKICAgICAgICAgbmV3Q2hpbGQt
PnNldEhhc091dGxpbmVBdXRvQW5jZXN0b3IoKTsKIH0KIAotdm9pZCBSZW5kZXJFbGVtZW50Ojpy
ZW1vdmVDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQsIE5vdGlmeUNoaWxkcmVu
VHlwZSBub3RpZnlDaGlsZHJlbikKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlckVsZW1l
bnQ6OnJlbW92ZUNoaWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCwgTm90aWZ5Q2hp
bGRyZW5UeXBlIG5vdGlmeUNoaWxkcmVuKQogewogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfTUVT
U0FHRSghdmlldygpLmxheW91dFN0YXRlKCksICJMYXlvdXQgbXVzdCBub3QgbXV0YXRlIHJlbmRl
ciB0cmVlIik7CiAKQEAgLTYzOCw2ICs2NDYsOCBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OnJlbW92
ZUNoaWxkSW50ZXJuYWwoCiAgICAgaWYgKGlzPFJlbmRlckxpc3RNYXJrZXI+KG9sZENoaWxkKSkK
ICAgICAgICAgQVNTRVJUKG1fcmVwYXJlbnRpbmdDaGlsZCB8fCAhZG93bmNhc3Q8UmVuZGVyTGlz
dE1hcmtlcj4ob2xkQ2hpbGQpLmxpc3RJdGVtKCkuaW5MYXlvdXQoKSk7CiAjZW5kaWYKKworICAg
IHJldHVybiBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0Pigmb2xkQ2hpbGQpOwogfQogCiBSZW5kZXJC
bG9jayogUmVuZGVyRWxlbWVudDo6Y29udGFpbmluZ0Jsb2NrRm9yRml4ZWRQb3NpdGlvbigpIGNv
bnN0CkBAIC05MzcsMTAgKzk0NywxMSBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OmhhbmRsZUR5bmFt
aWNGbG9hdFBvCiAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnBh
cmVudCgpKS5jaGlsZEJlY2FtZU5vbklubGluZSgqdGhpcyk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgLy8gQW4gYW5vbnltb3VzIGJsb2NrIG11c3QgYmUgbWFkZSB0byB3cmFwIHRoaXMg
aW5saW5lLgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gZG93bmNhc3Q8UmVuZGVy
QmxvY2s+KCpwYXJlbnQoKSkuY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKLSAgICAgICAgICAgIHBh
cmVudCgpLT5pbnNlcnRDaGlsZEludGVybmFsKGJsb2NrLCB0aGlzLCBSZW5kZXJFbGVtZW50OjpO
b3RpZnlDaGlsZHJlbik7Ci0gICAgICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGRJbnRlcm5h
bCgqdGhpcywgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOwotICAgICAgICAgICAgYmxv
Y2stPmluc2VydENoaWxkSW50ZXJuYWwodGhpcywgbnVsbHB0ciwgUmVuZGVyRWxlbWVudDo6Tm90
aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgYXV0byBuZXdCbG9jayA9IGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqcGFyZW50KCkpLmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgICAgICBh
dXRvJiBibG9jayA9ICpuZXdCbG9jazsKKyAgICAgICAgICAgIHBhcmVudCgpLT5pbnNlcnRDaGls
ZEludGVybmFsKFdURk1vdmUobmV3QmxvY2spLCB0aGlzLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlD
aGlsZHJlbik7CisgICAgICAgICAgICBhdXRvIG93bmVkVGhpcyA9IHBhcmVudCgpLT5yZW1vdmVD
aGlsZEludGVybmFsKCp0aGlzLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7CisgICAg
ICAgICAgICBibG9jay5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUob3duZWRUaGlzKSwgbnVs
bHB0ciwgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICB9CiAgICAgfQog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCShyZXZpc2lv
biAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1JlbmRl
cklubGluZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzQ2hpbGRBbGxvd2VkKGNvbnN0
IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7Ci0gICAgdmlydHVhbCB2b2lkIGFkZENo
aWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpIHsgcmV0dXJuIGFkZENoaWxkKG5ld0NoaWxkLCBi
ZWZvcmVDaGlsZCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0
Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+LCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7CisgICAgdmlydHVhbCB2b2lkIGFk
ZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKSB7IGFkZENoaWxkKFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7IH0KKyAgICB2aXJ0dWFsIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKTsKKyAgICB2b2lkIHJlbW92ZUFuZERl
c3Ryb3lDaGlsZChSZW5kZXJPYmplY3QmKTsKIAogICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rp
b25zIGFyZSB1c2VkIHdoZW4gdGhlIHJlbmRlciB0cmVlIGhpZXJhcmNoeSBjaGFuZ2VzIHRvIG1h
a2Ugc3VyZSBsYXllcnMgZ2V0CiAgICAgLy8gcHJvcGVybHkgYWRkZWQgYW5kIHJlbW92ZWQuIFNp
bmNlIGNvbnRhaW5lcnNoaXAgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGFueSBzdWJjbGFzcywgYW5k
IHNpbmNlIGEgaGllcmFyY2h5CkBAIC05OCw4ICs5OSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJM
YXllciogZmluZE5leHRMYXllcihSZW5kZXJMYXllciogcGFyZW50TGF5ZXIsIFJlbmRlck9iamVj
dCogc3RhcnRQb2ludCwgYm9vbCBjaGVja1BhcmVudCA9IHRydWUpOwogCiAgICAgZW51bSBOb3Rp
ZnlDaGlsZHJlblR5cGUgeyBOb3RpZnlDaGlsZHJlbiwgRG9udE5vdGlmeUNoaWxkcmVuIH07Ci0g
ICAgdm9pZCBpbnNlcnRDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQsIE5vdGlmeUNoaWxkcmVuVHlwZSk7Ci0gICAgdm9pZCByZW1vdmVDaGlsZElu
dGVybmFsKFJlbmRlck9iamVjdCYsIE5vdGlmeUNoaWxkcmVuVHlwZSk7CisgICAgdm9pZCBpbnNl
cnRDaGlsZEludGVybmFsKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+LCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkLCBOb3RpZnlDaGlsZHJlblR5cGUpOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IHJlbW92ZUNoaWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0JiwgTm90aWZ5Q2hpbGRyZW5UeXBl
KTsKIAogICAgIHZpcnR1YWwgUmVuZGVyRWxlbWVudCogaG92ZXJBbmNlc3RvcigpIGNvbnN0Owog
CkBAIC0yODIsNiArMjgzLDggQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgbm9Mb25nZXJBZmZlY3Rz
UGFyZW50QmxvY2soKSBjb25zdCB7IHJldHVybiBzX25vTG9uZ2VyQWZmZWN0c1BhcmVudEJsb2Nr
OyB9CiAgICAgYm9vbCBpc1Zpc2libGVJblZpZXdwb3J0KCkgY29uc3Q7CiAKKyAgICB0ZW1wbGF0
ZSA8Y2xhc3MgUiwgY2xhc3MgVD4gVCYgYmFzZUFkZENoaWxkKFJlbmRlclB0cjxUPiBuZXdDaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpOworCiBwcml2YXRlOgogICAg
IFJlbmRlckVsZW1lbnQoQ29udGFpbmVyTm9kZSYsIFJlbmRlclN0eWxlJiYsIEJhc2VUeXBlRmxh
Z3MpOwogICAgIHZvaWQgbm9kZSgpIGNvbnN0ID0gZGVsZXRlOwpAQCAtMzU4LDYgKzM2MSwxNCBA
QCBwcm90ZWN0ZWQ6CiAjZW5kaWYKIH07CiAKK3RlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUPgor
VCYgUmVuZGVyRWxlbWVudDo6YmFzZUFkZENoaWxkKFJlbmRlclB0cjxUPiBuZXdDaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3sKKyAgICBhdXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsK
KyAgICBkb3duY2FzdDxSPih0aGlzKS0+Ujo6YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJl
Zm9yZUNoaWxkKTsKKyAgICByZXR1cm4gY2hpbGQ7Cit9CisKIGlubGluZSB2b2lkIFJlbmRlckVs
ZW1lbnQ6OnNldEFuY2VzdG9yTGluZUJveERpcnR5KGJvb2wgZikKIHsKICAgICBtX2FuY2VzdG9y
TGluZUJveERpcnR5ID0gZjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
dWxsU2NyZWVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRnVsbFNjcmVlbi5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNyArNjQs
NiBAQCBSZW5kZXJGdWxsU2NyZWVuOjpSZW5kZXJGdWxsU2NyZWVuKERvY3VtCiB2b2lkIFJlbmRl
ckZ1bGxTY3JlZW46OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAgaWYgKG1fcGxhY2Vob2xkZXIp
IHsKLSAgICAgICAgcmVtb3ZlRnJvbVBhcmVudCgpOwogICAgICAgICBpZiAoIW1fcGxhY2Vob2xk
ZXItPmJlaW5nRGVzdHJveWVkKCkpCiAgICAgICAgICAgICBtX3BsYWNlaG9sZGVyLT5kZXN0cm95
KCk7CiAgICAgICAgIEFTU0VSVCghbV9wbGFjZWhvbGRlcik7CkBAIC0xMDQsMzggKzEwMyw1MyBA
QCBzdGF0aWMgUmVuZGVyU3R5bGUgY3JlYXRlRnVsbFNjcmVlblN0eWxlCiAgICAgcmV0dXJuIGZ1
bGxzY3JlZW5TdHlsZTsKIH0KIAotUmVuZGVyRnVsbFNjcmVlbiogUmVuZGVyRnVsbFNjcmVlbjo6
d3JhcFJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJFbGVtZW50KiBwYXJlbnQs
IERvY3VtZW50JiBkb2N1bWVudCkKK1JlbmRlclB0cjxSZW5kZXJGdWxsU2NyZWVuPiBSZW5kZXJG
dWxsU2NyZWVuOjp3cmFwTmV3UmVuZGVyZXIoUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IHJlbmRl
cmVyLCBSZW5kZXJFbGVtZW50JiBwYXJlbnQsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBS
ZW5kZXJGdWxsU2NyZWVuKiBmdWxsc2NyZWVuUmVuZGVyZXIgPSBuZXcgUmVuZGVyRnVsbFNjcmVl
bihkb2N1bWVudCwgY3JlYXRlRnVsbFNjcmVlblN0eWxlKCkpOwotICAgIGZ1bGxzY3JlZW5SZW5k
ZXJlci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgaWYgKHBhcmVudCAmJiAhcGFyZW50LT5pc0No
aWxkQWxsb3dlZCgqZnVsbHNjcmVlblJlbmRlcmVyLCBmdWxsc2NyZWVuUmVuZGVyZXItPnN0eWxl
KCkpKSB7Ci0gICAgICAgIGZ1bGxzY3JlZW5SZW5kZXJlci0+ZGVzdHJveSgpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG9iamVjdCkgewotICAgICAgICAvLyB8b2JqZWN0LT5w
YXJlbnQoKXwgY2FuIGJlIG51bGwgaWYgdGhlIG9iamVjdCBpcyBub3QgeWV0IGF0dGFjaGVkCi0g
ICAgICAgIC8vIHRvIHxwYXJlbnR8LgotICAgICAgICBpZiAoUmVuZGVyRWxlbWVudCogcGFyZW50
ID0gb2JqZWN0LT5wYXJlbnQoKSkgewotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5p
bmdCbG9jayA9IG9iamVjdC0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
Y29udGFpbmluZ0Jsb2NrKTsKLSAgICAgICAgICAgIC8vIFNpbmNlIHdlIGFyZSBtb3ZpbmcgdGhl
IHxvYmplY3R8IHRvIGEgbmV3IHBhcmVudCB8ZnVsbHNjcmVlblJlbmRlcmVyfCwKLSAgICAgICAg
ICAgIC8vIHRoZSBsaW5lIGJveCB0cmVlIHVuZGVybmVhdGggb3VyIHxjb250YWluaW5nQmxvY2t8
IGlzIG5vdCBsb25nZXIgdmFsaWQuCi0gICAgICAgICAgICBjb250YWluaW5nQmxvY2stPmRlbGV0
ZUxpbmVzKCk7Ci0KLSAgICAgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoZnVsbHNjcmVlblJlbmRl
cmVyLCBvYmplY3QpOwotICAgICAgICAgICAgb2JqZWN0LT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEFsd2F5cyBqdXN0IGRvIGEgZnVsbCBsYXlvdXQg
dG8gZW5zdXJlIHRoYXQgbGluZSBib3hlcyBnZXQgZGVsZXRlZCBwcm9wZXJseS4KLSAgICAgICAg
ICAgIC8vIEJlY2F1c2Ugb2JqZWN0cyBtb3ZlZCBmcm9tIHxwYXJlbnR8IHRvIHxmdWxsc2NyZWVu
UmVuZGVyZXJ8LCB3ZSB3YW50IHRvCi0gICAgICAgICAgICAvLyBtYWtlIG5ldyBsaW5lIGJveGVz
IGluc3RlYWQgb2YgbGVhdmluZyB0aGUgb2xkIG9uZXMgYXJvdW5kLgotICAgICAgICAgICAgcGFy
ZW50LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICAgICAgICAgIGNv
bnRhaW5pbmdCbG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZnVsbHNjcmVlblJlbmRlcmVyLT5hZGRDaGlsZChvYmplY3QpOwotICAg
ICAgICBmdWxsc2NyZWVuUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwotICAgIH0KLSAgICBkb2N1bWVudC5zZXRGdWxsU2NyZWVuUmVuZGVyZXIoZnVsbHNjcmVl
blJlbmRlcmVyKTsKLSAgICByZXR1cm4gZnVsbHNjcmVlblJlbmRlcmVyOworICAgIGF1dG8gbmV3
RnVsbHNjcmVlblJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyRnVsbFNjcmVlbj4oZG9j
dW1lbnQsIGNyZWF0ZUZ1bGxTY3JlZW5TdHlsZSgpKTsKKyAgICBuZXdGdWxsc2NyZWVuUmVuZGVy
ZXItPmluaXRpYWxpemVTdHlsZSgpOworCisgICAgYXV0byYgZnVsbHNjcmVlblJlbmRlcmVyID0g
Km5ld0Z1bGxzY3JlZW5SZW5kZXJlcjsKKyAgICBpZiAoIXBhcmVudC5pc0NoaWxkQWxsb3dlZChm
dWxsc2NyZWVuUmVuZGVyZXIsIGZ1bGxzY3JlZW5SZW5kZXJlci5zdHlsZSgpKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBmdWxsc2NyZWVuUmVuZGVyZXIuYWRkQ2hpbGQoV1RGTW92
ZShyZW5kZXJlcikpOworICAgIGZ1bGxzY3JlZW5SZW5kZXJlci5zZXROZWVkc0xheW91dEFuZFBy
ZWZXaWR0aHNSZWNhbGMoKTsKKworICAgIGRvY3VtZW50LnNldEZ1bGxTY3JlZW5SZW5kZXJlcigm
ZnVsbHNjcmVlblJlbmRlcmVyKTsKKworICAgIHJldHVybiBuZXdGdWxsc2NyZWVuUmVuZGVyZXI7
Cit9CisKK3ZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6d3JhcEV4aXN0aW5nUmVuZGVyZXIoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAgICBhdXRvIG5ld0Z1
bGxzY3JlZW5SZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckZ1bGxTY3JlZW4+KGRvY3Vt
ZW50LCBjcmVhdGVGdWxsU2NyZWVuU3R5bGUoKSk7CisgICAgbmV3RnVsbHNjcmVlblJlbmRlcmVy
LT5pbml0aWFsaXplU3R5bGUoKTsKKworICAgIGF1dG8mIGZ1bGxzY3JlZW5SZW5kZXJlciA9ICpu
ZXdGdWxsc2NyZWVuUmVuZGVyZXI7CisgICAgYXV0byYgcGFyZW50ID0gKnJlbmRlcmVyLnBhcmVu
dCgpOworICAgIGlmICghcGFyZW50LmlzQ2hpbGRBbGxvd2VkKGZ1bGxzY3JlZW5SZW5kZXJlciwg
ZnVsbHNjcmVlblJlbmRlcmVyLnN0eWxlKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZW5k
ZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Cisg
ICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jayk7CisgICAgLy8gU2luY2Ugd2UgYXJlIG1vdmluZyB0
aGUgfG9iamVjdHwgdG8gYSBuZXcgcGFyZW50IHxmdWxsc2NyZWVuUmVuZGVyZXJ8LAorICAgIC8v
IHRoZSBsaW5lIGJveCB0cmVlIHVuZGVybmVhdGggb3VyIHxjb250YWluaW5nQmxvY2t8IGlzIG5v
dCBsb25nZXIgdmFsaWQuCisgICAgY29udGFpbmluZ0Jsb2NrLT5kZWxldGVMaW5lcygpOworCisg
ICAgcGFyZW50LmFkZENoaWxkKFdURk1vdmUobmV3RnVsbHNjcmVlblJlbmRlcmVyKSwgJnJlbmRl
cmVyKTsKKworICAgIGF1dG8gdG9Nb3ZlID0gcGFyZW50LnRha2VDaGlsZChyZW5kZXJlcik7CisK
KyAgICAvLyBBbHdheXMganVzdCBkbyBhIGZ1bGwgbGF5b3V0IHRvIGVuc3VyZSB0aGF0IGxpbmUg
Ym94ZXMgZ2V0IGRlbGV0ZWQgcHJvcGVybHkuCisgICAgLy8gQmVjYXVzZSBvYmplY3RzIG1vdmVk
IGZyb20gfHBhcmVudHwgdG8gfGZ1bGxzY3JlZW5SZW5kZXJlcnwsIHdlIHdhbnQgdG8KKyAgICAv
LyBtYWtlIG5ldyBsaW5lIGJveGVzIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgb2xkIG9uZXMgYXJv
dW5kLgorICAgIHBhcmVudC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAg
ICBjb250YWluaW5nQmxvY2stPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwor
CisgICAgZnVsbHNjcmVlblJlbmRlcmVyLmFkZENoaWxkKFdURk1vdmUodG9Nb3ZlKSk7CisgICAg
ZnVsbHNjcmVlblJlbmRlcmVyLnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwor
CisgICAgZG9jdW1lbnQuc2V0RnVsbFNjcmVlblJlbmRlcmVyKCZmdWxsc2NyZWVuUmVuZGVyZXIp
OwogfQogCiB2b2lkIFJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKGJvb2wmIHJlcXVp
cmVzUmVuZGVyVHJlZVJlYnVpbGQpCkBAIC0xNTksOCArMTczLDcgQEAgdm9pZCBSZW5kZXJGdWxs
U2NyZWVuOjp1bndyYXBSZW5kZXJlcihibwogICAgICAgICAgICAgICAgIGlmIChhdXRvKiBub25B
bm9ueW1vdXNDaGlsZCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY2hpbGQpLmZpcnN0Q2hpbGQo
KSkKICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBub25Bbm9ueW1vdXNDaGlsZDsKICAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnJlbW92ZUZyb21Q
YXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQtPmRlc3Ryb3koKTsKKyAgICAgICAg
ICAgICAgICAgICAgY2hpbGQtPnJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTE2OSwxNSArMTgyLDE2IEBAIHZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6dW53cmFwUmVuZGVy
ZXIoYm8KICAgICAgICAgICAgIC8vIGx5aW5nIGFyb3VuZCBvbiB0aGUgY2hpbGQuCiAgICAgICAg
ICAgICBpZiAoaXM8UmVuZGVyQm94PigqY2hpbGQpKQogICAgICAgICAgICAgICAgIGRvd25jYXN0
PFJlbmRlckJveD4oKmNoaWxkKS5jbGVhck92ZXJyaWRlU2l6ZSgpOwotICAgICAgICAgICAgY2hp
bGQtPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICAgICAgICAgIHBhcmVudCgpLT5hZGRDaGlsZChj
aGlsZCwgdGhpcyk7CisgICAgICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gY2hpbGQtPnBhcmVu
dCgpLT50YWtlQ2hpbGQoKmNoaWxkKTsKKyAgICAgICAgICAgIHBhcmVudCgpLT5hZGRDaGlsZChX
VEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgdGhpcyk7CiAgICAgICAgICAgICBwYXJlbnQoKS0+c2V0TmVl
ZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYg
KHBsYWNlaG9sZGVyKCkpCi0gICAgICAgIHBsYWNlaG9sZGVyKCktPnJlbW92ZUZyb21QYXJlbnQo
KTsKLSAgICByZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgZG9jdW1lbnQoKS5zZXRGdWxsU2NyZWVu
UmVuZGVyZXIoMCk7CisgICAgICAgIHBsYWNlaG9sZGVyKCktPnJlbW92ZUZyb21QYXJlbnRBbmRE
ZXN0cm95KCk7CisKKyAgICBkb2N1bWVudCgpLnNldEZ1bGxTY3JlZW5SZW5kZXJlcihudWxscHRy
KTsKKyAgICByZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOwogfQogCiB2b2lkIFJlbmRlckZ1
bGxTY3JlZW46OnNldFBsYWNlaG9sZGVyKFJlbmRlckJsb2NrKiBwbGFjZWhvbGRlcikKQEAgLTE5
NywxMiArMjExLDE2IEBAIHZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6Y3JlYXRlUGxhY2Vob2xkZXIK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcGxhY2Vob2xkZXIgPSBuZXcgUmVuZGVy
RnVsbFNjcmVlblBsYWNlaG9sZGVyKCp0aGlzLCBXVEZNb3ZlKCpzdHlsZSkpOwotICAgIG1fcGxh
Y2Vob2xkZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIGlmIChwYXJlbnQoKSkgewotICAgICAg
ICBwYXJlbnQoKS0+YWRkQ2hpbGQobV9wbGFjZWhvbGRlciwgdGhpcyk7Ci0gICAgICAgIHBhcmVu
dCgpLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICB9CisgICAgaWYg
KCFwYXJlbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBuZXdQbGFjZWhvbGRlciA9
IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckZ1bGxTY3JlZW5QbGFjZWhvbGRlcj4oKnRoaXMsIFdURk1v
dmUoKnN0eWxlKSk7CisgICAgbmV3UGxhY2Vob2xkZXItPmluaXRpYWxpemVTdHlsZSgpOworCisg
ICAgbV9wbGFjZWhvbGRlciA9IG5ld1BsYWNlaG9sZGVyLmdldCgpOworCisgICAgcGFyZW50KCkt
PmFkZENoaWxkKFdURk1vdmUobmV3UGxhY2Vob2xkZXIpLCB0aGlzKTsKKyAgICBwYXJlbnQoKS0+
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaAkocmV2aXNpb24gMjIyNjA3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNyArNDAsOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyQmxvY2sqIHBsYWNl
aG9sZGVyKCkgeyByZXR1cm4gbV9wbGFjZWhvbGRlcjsgfQogICAgIHZvaWQgY3JlYXRlUGxhY2Vo
b2xkZXIoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiwgY29uc3QgTGF5b3V0UmVjdCYgZnJh
bWVSZWN0KTsKIAotICAgIHN0YXRpYyBSZW5kZXJGdWxsU2NyZWVuKiB3cmFwUmVuZGVyZXIoUmVu
ZGVyT2JqZWN0KiwgUmVuZGVyRWxlbWVudCosIERvY3VtZW50Jik7CisgICAgc3RhdGljIFJlbmRl
clB0cjxSZW5kZXJGdWxsU2NyZWVuPiB3cmFwTmV3UmVuZGVyZXIoUmVuZGVyUHRyPFJlbmRlckVs
ZW1lbnQ+LCBSZW5kZXJFbGVtZW50JiBwYXJlbnQsIERvY3VtZW50Jik7CisgICAgc3RhdGljIHZv
aWQgd3JhcEV4aXN0aW5nUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYsIERvY3VtZW50Jik7CiAgICAg
dm9pZCB1bndyYXBSZW5kZXJlcihib29sJiByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkKTsKIAog
ICAgIEl0ZW1Qb3NpdGlvbiBzZWxmQWxpZ25tZW50Tm9ybWFsQmVoYXZpb3IoY29uc3QgUmVuZGVy
Qm94KiA9IG51bGxwdHIpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEl0ZW1Qb3NpdGlvbkNlbnRl
cjsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAkocmV2aXNp
b24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NiwxMyArNjYsMTMgQEAgUmVuZGVyR3JpZDo6flJlbmRlckdyaWQo
KQogewogfQogCi12b2lkIFJlbmRlckdyaWQ6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlckdyaWQ6OmFkZENoaWxk
KFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkKQogewotICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQp
OworICAgIGF1dG8mIGNoaWxkID0gYmFzZUFkZENoaWxkPFJlbmRlckJsb2NrPihXVEZNb3ZlKG5l
d0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogCiAgICAgLy8gUG9zaXRpb25lZCBncmlkIGl0ZW1zIGRv
IG5vdCB0YWtlIHVwIHNwYWNlIG9yIG90aGVyd2lzZSBwYXJ0aWNpcGF0ZSBpbiB0aGUgbGF5b3V0
IG9mIHRoZSBncmlkLAogICAgIC8vIGZvciB0aGF0IHJlYXNvbiB3ZSBkb24ndCBuZWVkIHRvIG1h
cmsgdGhlIGdyaWQgYXMgZGlydHkgd2hlbiB0aGV5IGFyZSBhZGRlZC4KLSAgICBpZiAobmV3Q2hp
bGQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQorICAgIGlmIChjaGlsZC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIGdyaWQgbmVlZHMgdG8g
YmUgcmVjb21wdXRlZCBhcyBpdCBtaWdodCBjb250YWluIGF1dG8tcGxhY2VkIGl0ZW1zIHRoYXQK
QEAgLTgwLDE4ICs4MCwxOSBAQCB2b2lkIFJlbmRlckdyaWQ6OmFkZENoaWxkKFJlbmRlck9iamVj
dCogCiAgICAgZGlydHlHcmlkKCk7CiB9CiAKLXZvaWQgUmVuZGVyR3JpZDo6cmVtb3ZlQ2hpbGQo
UmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlckdyaWQ6
OnRha2VDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQogewotICAgIFJlbmRlckJsb2NrOjpyZW1v
dmVDaGlsZChjaGlsZCk7CisgICAgYXV0byB0YWtlbkNoaWxkID0gUmVuZGVyQmxvY2s6OnRha2VD
aGlsZChjaGlsZCk7CiAKICAgICAvLyBQb3NpdGlvbmVkIGdyaWQgaXRlbXMgZG8gbm90IHRha2Ug
dXAgc3BhY2Ugb3Igb3RoZXJ3aXNlIHBhcnRpY2lwYXRlIGluIHRoZSBsYXlvdXQgb2YgdGhlIGdy
aWQsCiAgICAgLy8gZm9yIHRoYXQgcmVhc29uIHdlIGRvbid0IG5lZWQgdG8gbWFyayB0aGUgZ3Jp
ZCBhcyBkaXJ0eSB3aGVuIHRoZXkgYXJlIHJlbW92ZWQuCiAgICAgaWYgKGNoaWxkLmlzT3V0T2ZG
bG93UG9zaXRpb25lZCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0YWtlbkNo
aWxkOwogCiAgICAgLy8gVGhlIGdyaWQgbmVlZHMgdG8gYmUgcmVjb21wdXRlZCBhcyBpdCBtaWdo
dCBjb250YWluIGF1dG8tcGxhY2VkIGl0ZW1zIHRoYXQKICAgICAvLyB3aWxsIGNoYW5nZSB0aGVp
ciBwb3NpdGlvbi4KICAgICBkaXJ0eUdyaWQoKTsKKyAgICByZXR1cm4gdGFrZW5DaGlsZDsKIH0K
IAogU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBSZW5kZXJHcmlkOjpzZWxmQWxpZ25tZW50Rm9yQ2hp
bGQoR3JpZEF4aXMgYXhpcywgY29uc3QgUmVuZGVyQm94JiBjaGlsZCwgY29uc3QgUmVuZGVyU3R5
bGUqIGdyaWRTdHlsZSkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdy
aWQuaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckdyaWQuaAkod29ya2luZyBjb3B5KQpAQCAtNzksOCArNzksOCBAQCBwcml2YXRlOgogICAgIGJv
b2wgaXNSZW5kZXJHcmlkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZv
aWQgY29tcHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdp
ZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAg
dm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYpIGZpbmFs
OworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIGZpbmFsOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBmaW5hbDsKIAogICAgIFN0eWxlU2VsZkFsaWdu
bWVudERhdGEgc2VsZkFsaWdubWVudEZvckNoaWxkKEdyaWRBeGlzLCBjb25zdCBSZW5kZXJCb3gm
LCBjb25zdCBSZW5kZXJTdHlsZSogPSBudWxscHRyKSBjb25zdDsKICAgICBib29sIHNlbGZBbGln
bm1lbnRDaGFuZ2VkVG9TdHJldGNoKEdyaWRBeGlzLCBjb25zdCBSZW5kZXJTdHlsZSYgb2xkU3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwgY29uc3QgUmVuZGVyQm94JikgY29uc3Q7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNp
b24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3MCwxNCArMjcwLDE2IEBAIExheW91dFJlY3QgUmVuZGVySW5s
aW5lOjpsb2NhbENhcmV0UmVjdCgKICAgICByZXR1cm4gY2FyZXRSZWN0OwogfQogCi12b2lkIFJl
bmRlcklubGluZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZChSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBh
dXRvKiBiZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIgPSBiZWZvcmVDaGlsZDsKICAgICBpZiAoYXV0
byogZnJhZ21lbnRlZEZsb3cgPSBlbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpKQogICAgICAgICBi
ZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIgPSBmcmFnbWVudGVkRmxvdy0+cmVzb2x2ZU1vdmVkQ2hp
bGQoYmVmb3JlQ2hpbGQpOwotICAgIGlmIChjb250aW51YXRpb24oKSkKLSAgICAgICAgcmV0dXJu
IGFkZENoaWxkVG9Db250aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkT3JQbGFjZWhvbGRl
cik7Ci0gICAgcmV0dXJuIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQsIGJl
Zm9yZUNoaWxkT3JQbGFjZWhvbGRlcik7CisgICAgaWYgKGNvbnRpbnVhdGlvbigpKSB7CisgICAg
ICAgIGFkZENoaWxkVG9Db250aW51YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxk
T3JQbGFjZWhvbGRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGRPclBsYWNlaG9s
ZGVyKTsKIH0KIAogc3RhdGljIFJlbmRlckJveE1vZGVsT2JqZWN0KiBuZXh0Q29udGludWF0aW9u
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCkBAIC0zMTgsNyArMzIwLDcgQEAgc3RhdGljIGJvb2wg
bmV3Q2hpbGRJc0lubGluZShjb25zdCBSZW5kZQogICAgIHJldHVybiBuZXdDaGlsZC5pc0lubGlu
ZSgpIHwgKHBhcmVudC5jaGlsZFJlcXVpcmVzVGFibGUobmV3Q2hpbGQpICYmIHBhcmVudC5zdHls
ZSgpLmRpc3BsYXkoKSA9PSBJTkxJTkUpOwogfQogCi12b2lkIFJlbmRlcklubGluZTo6YWRkQ2hp
bGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxkSWdub3JpbmdDb250
aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpCiB7CiAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGFwcGVuZCB0aGluZ3Mg
YWZ0ZXIgOmFmdGVyLWdlbmVyYXRlZCBjb250ZW50IGlmIHdlIGhhdmUgaXQuCiAgICAgaWYgKCFi
ZWZvcmVDaGlsZCAmJiBpc0FmdGVyQ29udGVudChsYXN0Q2hpbGQoKSkpCkBAIC0zMzgsMTcgKzM0
MCwxOCBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpCiAgICAgICAg
IGlmIChhdXRvIHBvc2l0aW9uZWRBbmNlc3RvciA9IGluRmxvd1Bvc2l0aW9uZWRJbmxpbmVBbmNl
c3Rvcih0aGlzKSkKICAgICAgICAgICAgIG5ld1N0eWxlLnNldFBvc2l0aW9uKHBvc2l0aW9uZWRB
bmNlc3Rvci0+c3R5bGUoKS5wb3NpdGlvbigpKTsKIAotICAgICAgICBSZW5kZXJCbG9jayogbmV3
Qm94ID0gbmV3IFJlbmRlckJsb2NrRmxvdyhkb2N1bWVudCgpLCBXVEZNb3ZlKG5ld1N0eWxlKSk7
CisgICAgICAgIGF1dG8gbmV3Qm94ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93Pihk
b2N1bWVudCgpLCBXVEZNb3ZlKG5ld1N0eWxlKSk7CiAgICAgICAgIG5ld0JveC0+aW5pdGlhbGl6
ZVN0eWxlKCk7CiAgICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250aW51YXRpb24g
PSBjb250aW51YXRpb24oKTsKLSAgICAgICAgc2V0Q29udGludWF0aW9uKG5ld0JveCk7CisgICAg
ICAgIHNldENvbnRpbnVhdGlvbihuZXdCb3guZ2V0KCkpOwogCi0gICAgICAgIHNwbGl0Rmxvdyhi
ZWZvcmVDaGlsZCwgbmV3Qm94LCBuZXdDaGlsZCwgb2xkQ29udGludWF0aW9uKTsKKyAgICAgICAg
c3BsaXRGbG93KGJlZm9yZUNoaWxkLCBXVEZNb3ZlKG5ld0JveCksIFdURk1vdmUobmV3Q2hpbGQp
LCBvbGRDb250aW51YXRpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAotICAgIFJl
bmRlckJveE1vZGVsT2JqZWN0OjphZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwotICAg
IG5ld0NoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKworICAgIGF1
dG8mIGNoaWxkID0gKm5ld0NoaWxkOworICAgIFJlbmRlckJveE1vZGVsT2JqZWN0OjphZGRDaGls
ZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOworICAgIGNoaWxkLnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCiBSZW5kZXJQdHI8UmVuZGVySW5saW5lPiBS
ZW5kZXJJbmxpbmU6OmNsb25lKCkgY29uc3QKQEAgLTQwNyw4ICs0MTAsOCBAQCB2b2lkIFJlbmRl
cklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiAgICAgICAgICAgICAvLyBGSVhNRTogV2hl
biB0aGUgYW5vbnltb3VzIHdyYXBwZXIgaGFzIG11bHRpcGxlIGNoaWxkcmVuLCB3ZSBlbmQgdXAg
dHJhdmVyc2luZyB1cCB0byB0aGUgdG9wbW9zdCB3cmFwcGVyCiAgICAgICAgICAgICAvLyBldmVy
eSB0aW1lLCB3aGljaCBpcyBhIGJpdCB3YXN0ZWZ1bC4KICAgICAgICAgfQotICAgICAgICByZW5k
ZXJlclRvTW92ZS0+cGFyZW50KCktPnJlbW92ZUNoaWxkSW50ZXJuYWwoKnJlbmRlcmVyVG9Nb3Zl
LCBOb3RpZnlDaGlsZHJlbik7Ci0gICAgICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9yaW5n
Q29udGludWF0aW9uKHJlbmRlcmVyVG9Nb3ZlKTsKKyAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9
IHJlbmRlcmVyVG9Nb3ZlLT5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGRJbnRlcm5hbCgqcmVuZGVyZXJU
b01vdmUsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdu
b3JpbmdDb250aW51YXRpb24oV1RGTW92ZShjaGlsZFRvTW92ZSkpOwogICAgICAgICByZW5kZXJl
clRvTW92ZS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIHJl
bmRlcmVyVG9Nb3ZlID0gbmV4dFNpYmxpbmc7CiAgICAgfQpAQCAtNDM1LDcgKzQzOCw3IEBAIHZv
aWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAgICAgICAgIGNsb25l
SW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3VycmVudCkuY2xvbmUoKTsKIAogICAg
ICAgICAgICAgLy8gSW5zZXJ0IG91ciBjaGlsZCBjbG9uZSBhcyB0aGUgZmlyc3QgY2hpbGQuCi0g
ICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihjbG9u
ZUNoaWxkLmxlYWtQdHIoKSk7CisgICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKGNsb25lQ2hpbGQpKTsKIAogICAgICAgICAgICAgLy8g
SG9vayB0aGUgY2xvbmUgdXAgYXMgYSBjb250aW51YXRpb24gb2YgfGN1cnJ8LgogICAgICAgICAg
ICAgUmVuZGVySW5saW5lJiBjdXJyZW50SW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigq
Y3VycmVudCk7CkBAIC00NDcsOCArNDUwLDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5s
aW5lcyhSZW5kZXJCbAogICAgICAgICAgICAgLy8gKmFmdGVyKiBjdXJyZW50Q2hpbGQgYW5kIGFw
cGVuZCB0aGVtIGFsbCB0byB0aGUgY2xvbmUuCiAgICAgICAgICAgICBmb3IgKGF1dG8qIGN1cnJl
bnQgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7IGN1cnJlbnQ7KSB7CiAgICAgICAgICAg
ICAgICAgYXV0byogbmV4dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgY3VycmVudElubGluZS5yZW1vdmVDaGlsZEludGVybmFsKCpjdXJyZW50LCBOb3RpZnlDaGls
ZHJlbik7Ci0gICAgICAgICAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250
aW51YXRpb24oY3VycmVudCk7CisgICAgICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGN1
cnJlbnRJbmxpbmUucmVtb3ZlQ2hpbGRJbnRlcm5hbCgqY3VycmVudCwgTm90aWZ5Q2hpbGRyZW4p
OworICAgICAgICAgICAgICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0
aW9uKFdURk1vdmUoY2hpbGRUb01vdmUpKTsKICAgICAgICAgICAgICAgICBjdXJyZW50LT5zZXRO
ZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgICAgICBjdXJyZW50
ID0gbmV4dDsKICAgICAgICAgICAgIH0KQEAgLTQ2NSwyNyArNDY4LDI4IEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAgICAgY2xvbmVCbG9ja0NoaWxkLnJl
c2V0RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmRDaGlsZEluZm9JbmNsdWRpbmdEZXNjZW5kYW50
cygpOwogCiAgICAgLy8gTm93IHdlIGFyZSBhdCB0aGUgYmxvY2sgbGV2ZWwuIFdlIG5lZWQgdG8g
cHV0IHRoZSBjbG9uZSBpbnRvIHRoZSB0b0Jsb2NrLgotICAgIHRvQmxvY2stPmluc2VydENoaWxk
SW50ZXJuYWwoY2xvbmVJbmxpbmUubGVha1B0cigpLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7
CisgICAgdG9CbG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNsb25lSW5saW5lKSwg
bnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwogCiAgICAgLy8gTm93IHRha2UgYWxsIHRoZSBjaGls
ZHJlbiBhZnRlciBjdXJyZW50Q2hpbGQgYW5kIHJlbW92ZSB0aGVtIGZyb20gdGhlIGZyb21CbG9j
awogICAgIC8vIGFuZCBwdXQgdGhlbSBpbiB0aGUgdG9CbG9jay4KICAgICBmb3IgKGF1dG8qIGN1
cnJlbnQgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7IGN1cnJlbnQ7KSB7CiAgICAgICAg
IGF1dG8qIG5leHQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgICAgICBmcm9tQmxvY2st
PnJlbW92ZUNoaWxkSW50ZXJuYWwoKmN1cnJlbnQsIE5vdGlmeUNoaWxkcmVuKTsKLSAgICAgICAg
dG9CbG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChjdXJyZW50LCBudWxscHRyLCBOb3RpZnlDaGls
ZHJlbik7CisgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSBmcm9tQmxvY2stPnJlbW92ZUNoaWxk
SW50ZXJuYWwoKmN1cnJlbnQsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgdG9CbG9jay0+aW5z
ZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgbnVsbHB0ciwgTm90aWZ5Q2hp
bGRyZW4pOwogICAgICAgICBjdXJyZW50ID0gbmV4dDsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVy
SW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQmxvY2sq
IG5ld0Jsb2NrQm94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IG5ld0NoaWxkLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udCkKK3ZvaWQgUmVuZGVySW5s
aW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyUHRyPFJlbmRl
ckJsb2NrPiBuZXdCbG9ja0JveCwgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJl
bmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250KQogeworICAgIGF1dG8mIGFkZGVkQmxvY2tCb3gg
PSAqbmV3QmxvY2tCb3g7CiAgICAgUmVuZGVyQmxvY2sqIHByZSA9IG51bGxwdHI7CiAgICAgUmVu
ZGVyQmxvY2sqIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgCisKICAgICAvLyBEZWxl
dGUgb3VyIGxpbmUgYm94ZXMgYmVmb3JlIHdlIGRvIHRoZSBpbmxpbmUgc3BsaXQgaW50byBjb250
aW51YXRpb25zLgogICAgIGJsb2NrLT5kZWxldGVMaW5lcygpOwotICAgIAorCisgICAgUmVuZGVy
UHRyPFJlbmRlckJsb2NrPiBjcmVhdGVkUHJlOwogICAgIGJvb2wgbWFkZU5ld0JlZm9yZUJsb2Nr
ID0gZmFsc2U7CiAgICAgaWYgKGJsb2NrLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgKCFibG9jay0+
cGFyZW50KCkgfHwgIWJsb2NrLT5wYXJlbnQoKS0+Y3JlYXRlc0Fub255bW91c1dyYXBwZXIoKSkp
IHsKICAgICAgICAgLy8gV2UgY2FuIHJldXNlIHRoaXMgYmxvY2sgYW5kIG1ha2UgaXQgdGhlIHBy
ZUJsb2NrIG9mIHRoZSBuZXh0IGNvbnRpbnVhdGlvbi4KQEAgLTQ5OSwxNyArNTAzLDE5IEBAIHZv
aWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWMKICAgICAgICAgYmxvY2sgPSBi
bG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gTm8gYW5v
bnltb3VzIGJsb2NrIGF2YWlsYWJsZSBmb3IgdXNlLiAgTWFrZSBvbmUuCi0gICAgICAgIHByZSA9
IGJsb2NrLT5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOworICAgICAgICBjcmVhdGVkUHJlID0gYmxv
Y2stPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgIHByZSA9IGNyZWF0ZWRQcmUuZ2V0
KCk7CiAgICAgICAgIG1hZGVOZXdCZWZvcmVCbG9jayA9IHRydWU7CiAgICAgfQogCi0gICAgYXV0
byYgcG9zdCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqcHJlLT5jcmVhdGVBbm9ueW1vdXNCb3hX
aXRoU2FtZVR5cGVBcygqYmxvY2spLnJlbGVhc2UoKSk7CisgICAgYXV0byBjcmVhdGVkUG9zdCA9
IHByZS0+Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoKmJsb2NrKTsKKyAgICBhdXRv
JiBwb3N0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjcmVhdGVkUG9zdCk7CiAKICAgICBSZW5k
ZXJPYmplY3QqIGJveEZpcnN0ID0gbWFkZU5ld0JlZm9yZUJsb2NrID8gYmxvY2stPmZpcnN0Q2hp
bGQoKSA6IHByZS0+bmV4dFNpYmxpbmcoKTsKLSAgICBpZiAobWFkZU5ld0JlZm9yZUJsb2NrKQot
ICAgICAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChwcmUsIGJveEZpcnN0LCBOb3RpZnlD
aGlsZHJlbik7Ci0gICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwobmV3QmxvY2tCb3gsIGJv
eEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7Ci0gICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwo
JnBvc3QsIGJveEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7CisgICAgaWYgKGNyZWF0ZWRQcmUpCisg
ICAgICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY3JlYXRlZFByZSksIGJv
eEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7CisgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwo
V1RGTW92ZShuZXdCbG9ja0JveCksIGJveEZpcnN0LCBOb3RpZnlDaGlsZHJlbik7CisgICAgYmxv
Y2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjcmVhdGVkUG9zdCksIGJveEZpcnN0LCBO
b3RpZnlDaGlsZHJlbik7CiAgICAgYmxvY2stPnNldENoaWxkcmVuSW5saW5lKGZhbHNlKTsKICAg
ICAKICAgICBpZiAobWFkZU5ld0JlZm9yZUJsb2NrKSB7CkBAIC01MTcsMjIgKzUyMywyMiBAQCB2
b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjCiAgICAgICAgIHdoaWxlIChv
KSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAgICAgICAgICAgIG8gPSBu
by0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVDaGlsZEludGVybmFs
KCpubywgTm90aWZ5Q2hpbGRyZW4pOwotICAgICAgICAgICAgcHJlLT5pbnNlcnRDaGlsZEludGVy
bmFsKG5vLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAgICAgICBhdXRvIGNoaWxk
VG9Nb3ZlID0gYmxvY2stPnJlbW92ZUNoaWxkSW50ZXJuYWwoKm5vLCBOb3RpZnlDaGlsZHJlbik7
CisgICAgICAgICAgICBwcmUtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjaGlsZFRvTW92
ZSksIG51bGxwdHIsIE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIG5vLT5zZXROZWVkc0xh
eW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHNwbGl0
SW5saW5lcyhwcmUsICZwb3N0LCBuZXdCbG9ja0JveCwgYmVmb3JlQ2hpbGQsIG9sZENvbnQpOwor
ICAgIHNwbGl0SW5saW5lcyhwcmUsICZwb3N0LCAmYWRkZWRCbG9ja0JveCwgYmVmb3JlQ2hpbGQs
IG9sZENvbnQpOwogCiAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoZSBuZXdCbG9ja0JveCBpc24n
dCBnb2luZyB0byBjb250YWluIGlubGluZSBraWRzLCBzbyBhdm9pZCB3YXN0aW5nCiAgICAgLy8g
dGltZSBpbiBtYWtlQ2hpbGRyZW5Ob25JbmxpbmUgYnkganVzdCBzZXR0aW5nIHRoaXMgZXhwbGlj
aXRseSB1cCBmcm9udC4KLSAgICBuZXdCbG9ja0JveC0+c2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2Up
OworICAgIGFkZGVkQmxvY2tCb3guc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogCiAgICAgLy8g
V2UgZGVsYXllZCBhZGRpbmcgdGhlIG5ld0NoaWxkIHVudGlsIG5vdyBzbyB0aGF0IHRoZSB8bmV3
QmxvY2tCb3h8IHdvdWxkIGJlIGZ1bGx5CiAgICAgLy8gY29ubmVjdGVkLCB0aHVzIGFsbG93aW5n
IG5ld0NoaWxkIGFjY2VzcyB0byBhIHJlbmRlckFyZW5hIHNob3VsZCBpdCBuZWVkCiAgICAgLy8g
dG8gd3JhcCBpdHNlbGYgaW4gYWRkaXRpb25hbCBib3hlcyAoZS5nLiwgdGFibGUgY29uc3RydWN0
aW9uKS4KLSAgICBuZXdCbG9ja0JveC0+YWRkQ2hpbGQobmV3Q2hpbGQpOworICAgIGFkZGVkQmxv
Y2tCb3guYWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCkpOwogCiAgICAgLy8gQWx3YXlzIGp1c3Qg
ZG8gYSBmdWxsIGxheW91dCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBsaW5lIGJveGVzIChlc3Bl
Y2lhbGx5IHdyYXBwZXJzIGZvciBpbWFnZXMpCiAgICAgLy8gZ2V0IGRlbGV0ZWQgcHJvcGVybHku
ICBCZWNhdXNlIG9iamVjdHMgbW92ZXMgZnJvbSB0aGUgcHJlIGJsb2NrIGludG8gdGhlIHBvc3Qg
YmxvY2ssIHdlIHdhbnQgdG8KQEAgLTU1Myw3ICs1NTksNyBAQCBzdGF0aWMgYm9vbCBjYW5Vc2VB
c1BhcmVudEZvckNvbnRpbnVhdGlvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVy
SW5saW5lOjphZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0Nv
bnRpbnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKIHsKICAgICBhdXRvKiBmbG93ID0gY29udGludWF0aW9uQmVmb3JlKGJl
Zm9yZUNoaWxkKTsKICAgICAvLyBJdCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgZGlyZWN0IHBhcmVu
dCBvZiB0aGUgYmVmb3JlQ2hpbGQuCkBAIC01NzgsMjAgKzU4NCwyMCBAQCB2b2lkIFJlbmRlcklu
bGluZTo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogCiAgICAgaWYgKG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
Ci0gICAgICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29u
dGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybiBiZWZvcmVD
aGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hp
bGQpLCBiZWZvcmVDaGlsZCk7CiAKICAgICBpZiAoZmxvdyA9PSBiZWZvcmVDaGlsZEFuY2VzdG9y
KQotICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdD
aGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgIC8vIEEg
Y29udGludWF0aW9uIGFsd2F5cyBjb25zaXN0cyBvZiB0d28gcG90ZW50aWFsIGNhbmRpZGF0ZXM6
IGFuIGlubGluZSBvciBhbiBhbm9ueW1vdXMKICAgICAvLyBibG9jayBib3ggaG9sZGluZyBibG9j
ayBjaGlsZHJlbi4KICAgICBib29sIGNoaWxkSW5saW5lID0gbmV3Q2hpbGRJc0lubGluZSgqbmV3
Q2hpbGQsICp0aGlzKTsKICAgICAvLyBUaGUgZ29hbCBoZXJlIGlzIHRvIG1hdGNoIHVwIGlmIHdl
IGNhbiwgc28gdGhhdCB3ZSBjYW4gY29hbGVzY2UgYW5kIGNyZWF0ZSB0aGUKICAgICAvLyBtaW5p
bWFsICMgb2YgY29udGludWF0aW9ucyBuZWVkZWQgZm9yIHRoZSBpbmxpbmUuCiAgICAgaWYgKGNo
aWxkSW5saW5lID09IGJlZm9yZUNoaWxkQW5jZXN0b3ItPmlzSW5saW5lKCkpCi0gICAgICAgIHJl
dHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5l
d0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9y
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVD
aGlsZCk7CiAgICAgaWYgKGZsb3ctPmlzSW5saW5lKCkgPT0gY2hpbGRJbmxpbmUpCi0gICAgICAg
IHJldHVybiBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkKTsgLy8g
SnVzdCB0cmVhdCBsaWtlIGFuIGFwcGVuZC4KLSAgICByZXR1cm4gYmVmb3JlQ2hpbGRBbmNlc3Rv
ci0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwor
ICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3Zl
KG5ld0NoaWxkKSk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCisgICAgcmV0dXJuIGJl
Zm9yZUNoaWxkQW5jZXN0b3ItPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShu
ZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKIH0KIAogdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC0x
MzY4LDEyICsxMzc0LDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVEcmFnU3RhdGUoYm9v
bCAKIHZvaWQgUmVuZGVySW5saW5lOjpjaGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJFbGVtZW50
JiBjaGlsZCkKIHsKICAgICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJlbnQgZmxvdy4KLSAg
ICBSZW5kZXJCbG9jayogbmV3Qm94ID0gY29udGFpbmluZ0Jsb2NrKCktPmNyZWF0ZUFub255bW91
c0Jsb2NrKCk7CisgICAgYXV0byBuZXdCb3ggPSBjb250YWluaW5nQmxvY2soKS0+Y3JlYXRlQW5v
bnltb3VzQmxvY2soKTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udGludWF0aW9u
ID0gY29udGludWF0aW9uKCk7Ci0gICAgc2V0Q29udGludWF0aW9uKG5ld0JveCk7CisgICAgc2V0
Q29udGludWF0aW9uKG5ld0JveC5nZXQoKSk7CiAgICAgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IGNoaWxkLm5leHRTaWJsaW5nKCk7Ci0gICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbChjaGlsZCwg
Tm90aWZ5Q2hpbGRyZW4pOwotICAgIHNwbGl0RmxvdyhiZWZvcmVDaGlsZCwgbmV3Qm94LCAmY2hp
bGQsIG9sZENvbnRpbnVhdGlvbik7CisgICAgYXV0byByZW1vdmVkQ2hpbGQgPSByZW1vdmVDaGls
ZEludGVybmFsKGNoaWxkLCBOb3RpZnlDaGlsZHJlbik7CisgICAgc3BsaXRGbG93KGJlZm9yZUNo
aWxkLCBXVEZNb3ZlKG5ld0JveCksIFdURk1vdmUocmVtb3ZlZENoaWxkKSwgb2xkQ29udGludWF0
aW9uKTsKIH0KIAogdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDcgQEAgcHVibGljOgogICAgIFJlbmRlcklubGluZShFbGVtZW50JiwgUmVuZGVyU3R5
bGUmJik7CiAgICAgUmVuZGVySW5saW5lKERvY3VtZW50JiwgUmVuZGVyU3R5bGUmJik7CiAKLSAg
ICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJp
ZGU7CiAKICAgICBMYXlvdXRVbml0IG1hcmdpbkxlZnQoKSBjb25zdCBmaW5hbDsKICAgICBMYXlv
dXRVbml0IG1hcmdpblJpZ2h0KCkgY29uc3QgZmluYWw7CkBAIC0xMjEsMTMgKzEyMSwxMSBAQCBw
cml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdlbmVyYXRvckNvbnRleHQ+CiAgICAgdm9p
ZCBnZW5lcmF0ZUN1bGxlZExpbmVCb3hSZWN0cyhHZW5lcmF0b3JDb250ZXh0JiB5aWVsZCwgY29u
c3QgUmVuZGVySW5saW5lKiBjb250YWluZXIpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRDaGlsZFRv
Q29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpOwotICAgIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmpl
Y3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7
CisgICAgdm9pZCBhZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIGFkZENoaWxk
SWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKSBmaW5hbDsKIAotICAgIHZvaWQgc3Bs
aXRJbmxpbmVzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLCBS
ZW5kZXJCbG9jayogbWlkZGxlQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpOwotICAgIHZv
aWQgc3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdC
bG9ja0JveCwKLSAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udCk7CisgICAgdm9pZCBzcGxpdElubGluZXMoUmVuZGVy
QmxvY2sqIGZyb21CbG9jaywgUmVuZGVyQmxvY2sqIHRvQmxvY2ssIFJlbmRlckJsb2NrKiBtaWRk
bGVCbG9jaywgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IG9sZENvbnQpOworICAgIHZvaWQgc3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQs
IFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gbmV3QmxvY2tCb3gsIFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IG5ld0NoaWxkLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udCk7CiAKICAgICB2b2lk
IGxheW91dCgpIGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0gLy8gRG8gbm90aGluZyBm
b3IgbGF5b3V0KCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVM
aXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOSArMTA4LDEwIEBAIHZv
aWQgUmVuZGVyTWVudUxpc3Q6OmNyZWF0ZUlubmVyQmxvY2soKQogCiAgICAgLy8gQ3JlYXRlIGFu
IGFub255bW91cyBibG9jay4KICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7Ci0gICAgbV9pbm5l
ckJsb2NrID0gY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAgICBhdXRvIG5ld0lubmVyQmxvY2sg
PSBjcmVhdGVBbm9ueW1vdXNCbG9jaygpOworICAgIG1faW5uZXJCbG9jayA9IG5ld0lubmVyQmxv
Y2suZ2V0KCk7CiAgICAgYWRqdXN0SW5uZXJTdHlsZSgpOwotICAgIFJlbmRlckZsZXhpYmxlQm94
OjphZGRDaGlsZChtX2lubmVyQmxvY2spOworICAgIFJlbmRlckZsZXhpYmxlQm94OjphZGRDaGls
ZChXVEZNb3ZlKG5ld0lubmVyQmxvY2spKTsKIH0KIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRq
dXN0SW5uZXJTdHlsZSgpCkBAIC0xNzIsMjMgKzE3MywyNCBAQCBIVE1MU2VsZWN0RWxlbWVudCYg
UmVuZGVyTWVudUxpc3Q6OnNlbGVjCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTZWxlY3RFbGVt
ZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOwogfQogCi12b2lkIFJlbmRlck1lbnVMaXN0Ojph
ZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KQordm9pZCBSZW5kZXJNZW51TGlzdDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4g
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgY3JlYXRlSW5uZXJC
bG9jaygpOwotICAgIG1faW5uZXJCbG9jay0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxk
KTsKKyAgICBhdXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAgICBtX2lubmVyQmxvY2stPmFkZENo
aWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgQVNTRVJUKG1faW5uZXJC
bG9jayA9PSBmaXJzdENoaWxkKCkpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0g
ZG9jdW1lbnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgY2FjaGUtPmNoaWxk
cmVuQ2hhbmdlZCh0aGlzLCBuZXdDaGlsZCk7CisgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5n
ZWQodGhpcywgJmNoaWxkKTsKIH0KIAotdm9pZCBSZW5kZXJNZW51TGlzdDo6cmVtb3ZlQ2hpbGQo
UmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlck1l
bnVMaXN0Ojp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKIHsKICAgICBpZiAoJm9s
ZENoaWxkID09IG1faW5uZXJCbG9jayB8fCAhbV9pbm5lckJsb2NrKSB7Ci0gICAgICAgIFJlbmRl
ckZsZXhpYmxlQm94OjpyZW1vdmVDaGlsZChvbGRDaGlsZCk7CiAgICAgICAgIG1faW5uZXJCbG9j
ayA9IDA7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1faW5uZXJCbG9jay0+cmVtb3ZlQ2hpbGQob2xk
Q2hpbGQpOworICAgICAgICByZXR1cm4gUmVuZGVyRmxleGlibGVCb3g6OnRha2VDaGlsZChvbGRD
aGlsZCk7CisgICAgfQorICAgIHJldHVybiBtX2lubmVyQmxvY2stPnRha2VDaGlsZChvbGRDaGls
ZCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVy
ZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCkBAIC0yOTUsOSArMjk3LDEx
IEBAIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnNldFRleHQoY29uc3QgU3RyaW4KICAgICBpZiAobV9i
dXR0b25UZXh0KQogICAgICAgICBtX2J1dHRvblRleHQtPnNldFRleHQodGV4dFRvVXNlLmltcGwo
KSwgdHJ1ZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1fYnV0dG9uVGV4dCA9IG5ldyBSZW5kZXJU
ZXh0KGRvY3VtZW50KCksIHRleHRUb1VzZSk7Ci0gICAgICAgIGFkZENoaWxkKG1fYnV0dG9uVGV4
dCk7CisgICAgICAgIGF1dG8gbmV3QnV0dG9uVGV4dCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRl
eHQ+KGRvY3VtZW50KCksIHRleHRUb1VzZSk7CisgICAgICAgIG1fYnV0dG9uVGV4dCA9IG5ld0J1
dHRvblRleHQuZ2V0KCk7CisgICAgICAgIGFkZENoaWxkKFdURk1vdmUobmV3QnV0dG9uVGV4dCkp
OwogICAgIH0KKwogICAgIGFkanVzdElubmVyU3R5bGUoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Niw4ICs2Niw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzTWVudUxpc3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVj
dCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRk
Q2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtl
Q2hpbGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBjcmVhdGVzQW5vbnltb3Vz
V3JhcHBlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgdXBk
YXRlRnJvbUVsZW1lbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg0LDExICsxODQsMTEgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZs
b3c6OmV2YWN1YXRlQW5kRAogICAgIFNwYW5uZXJNYXA6Oml0ZXJhdG9yIGl0OwogICAgIHdoaWxl
ICgoaXQgPSBtX3NwYW5uZXJNYXAuYmVnaW4oKSkgIT0gbV9zcGFubmVyTWFwLmVuZCgpKSB7CiAg
ICAgICAgIFJlbmRlckJveCogc3Bhbm5lciA9IGl0LT5rZXk7Ci0gICAgICAgIG11bHRpY29sQ29u
dGFpbmVyLT5yZW1vdmVDaGlsZCgqc3Bhbm5lcik7CisgICAgICAgIGF1dG8gdGFrZW5TcGFubmVy
ID0gbXVsdGljb2xDb250YWluZXItPnRha2VDaGlsZCgqc3Bhbm5lcik7CiAgICAgICAgIEFTU0VS
VChpdC0+dmFsdWUuZ2V0KCkpOwogICAgICAgICBpZiAoUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIqIHBsYWNlaG9sZGVyID0gaXQtPnZhbHVlLmdldCgpKSB7CiAgICAgICAgICAg
ICBSZW5kZXJCbG9ja0Zsb3cmIG9yaWdpbmFsQ29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVyQmxv
Y2tGbG93PigqcGxhY2Vob2xkZXItPnBhcmVudCgpKTsKLSAgICAgICAgICAgIG9yaWdpbmFsQ29u
dGFpbmVyLmFkZENoaWxkKHNwYW5uZXIsIHBsYWNlaG9sZGVyKTsKKyAgICAgICAgICAgIG9yaWdp
bmFsQ29udGFpbmVyLmFkZENoaWxkKFdURk1vdmUodGFrZW5TcGFubmVyKSwgcGxhY2Vob2xkZXIp
OwogICAgICAgICAgICAgcGxhY2Vob2xkZXItPmRlc3Ryb3koKTsKICAgICAgICAgfQogICAgICAg
ICBtX3NwYW5uZXJNYXAucmVtb3ZlKGl0KTsKQEAgLTM0OCwxNCArMzQ4LDE0IEBAIFJlbmRlck9i
amVjdCogUmVuZGVyTXVsdGlDb2x1bW5GbG93Ojpwcm8KICAgICAgICAgLy8gY29udGVudCBiZWZv
cmUgYW5kIGFmdGVyIHRoZSBzcGFubmVyLCBzbyB0aGF0IGl0IGJlY29tZXMgc2VwYXJhdGUgbGlu
ZSBib3hlcy4gU2Vjb25kbHksCiAgICAgICAgIC8vIHRoaXMgcGxhY2Vob2xkZXIgc2VydmVzIGFz
IGEgYnJlYWsgcG9pbnQgZm9yIGNvbHVtbiBzZXRzLCBzbyB0aGF0LCB3aGVuIGVuY291bnRlcmVk
LCB3ZQogICAgICAgICAvLyBlbmQgZmxvd2luZyBvbmUgY29sdW1uIHNldCBhbmQgbW92ZSB0byB0
aGUgbmV4dCBvbmUuCi0gICAgICAgIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVy
KiBwbGFjZWhvbGRlciA9IFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVh
dGVBbm9ueW1vdXModGhpcywKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4oZGVzY2Vu
ZGFudCksICZjb250YWluZXItPnN0eWxlKCkpOwotICAgICAgICBjb250YWluZXItPmFkZENoaWxk
KHBsYWNlaG9sZGVyLCBkZXNjZW5kYW50Lm5leHRTaWJsaW5nKCkpOwotICAgICAgICBjb250YWlu
ZXItPnJlbW92ZUNoaWxkKGRlc2NlbmRhbnQpOworICAgICAgICBhdXRvIG5ld1BsYWNlaG9sZGVy
ID0gUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI6OmNyZWF0ZUFub255bW91cyh0
aGlzLCBkb3duY2FzdDxSZW5kZXJCb3g+KGRlc2NlbmRhbnQpLCAmY29udGFpbmVyLT5zdHlsZSgp
KTsKKyAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIgPSAqbmV3UGxhY2Vob2xkZXI7CisgICAgICAg
IGNvbnRhaW5lci0+YWRkQ2hpbGQoV1RGTW92ZShuZXdQbGFjZWhvbGRlciksIGRlc2NlbmRhbnQu
bmV4dFNpYmxpbmcoKSk7CisgICAgICAgIGF1dG8gdGFrZW5EZXNjZW5kYW50ID0gY29udGFpbmVy
LT50YWtlQ2hpbGQoZGVzY2VuZGFudCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIGEg
Z3VhcmQgdG8gc3RvcCBhbiBhbmNlc3RvciBmbG93IHRocmVhZCBmcm9tIHByb2Nlc3NpbmcgdGhl
IHNwYW5uZXIuCiAgICAgICAgIGdTaGlmdGluZ1NwYW5uZXIgPSB0cnVlOwotICAgICAgICBtdWx0
aWNvbENvbnRhaW5lci0+UmVuZGVyQmxvY2s6OmFkZENoaWxkKCZkZXNjZW5kYW50LCBpbnNlcnRC
ZWZvcmVNdWx0aWNvbENoaWxkKTsKKyAgICAgICAgbXVsdGljb2xDb250YWluZXItPlJlbmRlckJs
b2NrOjphZGRDaGlsZChXVEZNb3ZlKHRha2VuRGVzY2VuZGFudCksIGluc2VydEJlZm9yZU11bHRp
Y29sQ2hpbGQpOwogICAgICAgICBnU2hpZnRpbmdTcGFubmVyID0gZmFsc2U7CiAgICAgICAgIAog
ICAgICAgICAvLyBUaGUgc3Bhbm5lciBoYXMgbm93IGJlZW4gbW92ZWQgb3V0IGZyb20gdGhlIGZs
b3cgdGhyZWFkLCBidXQgd2UgZG9uJ3Qgd2FudCB0bwpAQCAtMzYzLDggKzM2Myw4IEBAIFJlbmRl
ck9iamVjdCogUmVuZGVyTXVsdGlDb2x1bW5GbG93Ojpwcm8KICAgICAgICAgLy8gY3JlYXRpb24g
b2YgY29sdW1uIHNldHMgb3IgYW55dGhpbmcgbGlrZSB0aGF0LiBDb250aW51ZSBhdCBpdHMgb3Jp
Z2luYWwgcG9zaXRpb24gaW4KICAgICAgICAgLy8gdGhlIHRyZWUsIGkuZS4gd2hlcmUgdGhlIHBs
YWNlaG9sZGVyIHdhcyBqdXN0IHB1dC4KICAgICAgICAgaWYgKHN1YnRyZWVSb290ID09ICZkZXNj
ZW5kYW50KQotICAgICAgICAgICAgc3VidHJlZVJvb3QgPSBwbGFjZWhvbGRlcjsKLSAgICAgICAg
bmV4dERlc2NlbmRhbnQgPSBwbGFjZWhvbGRlcjsKKyAgICAgICAgICAgIHN1YnRyZWVSb290ID0g
JnBsYWNlaG9sZGVyOworICAgICAgICBuZXh0RGVzY2VuZGFudCA9ICZwbGFjZWhvbGRlcjsKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBUaGlzIGlzIHJlZ3VsYXIgbXVsdGljb2wgY29udGVudCwg
aS5lLiBub3QgcGFydCBvZiBhIHNwYW5uZXIuCiAgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNv
bHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obmV4dFJlbmRlcmVySW5GcmFnbWVudGVkRmxvdykpIHsK
QEAgLTM4OSwxNSArMzg5LDE2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyTXVsdGlDb2x1bW5GbG93
Ojpwcm8KICAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBjb2x1bW4gc2V0IHdoZW4gdGhlcmUn
cyBubyBzZXQgYWxyZWFkeSBjcmVhdGVkLiBXZSBhbHNvIGFsd2F5cyBpbnNlcnQKICAgICAvLyBh
bm90aGVyIGNvbHVtbiBzZXQgYWZ0ZXIgYSBzcGFubmVyLiBFdmVuIGlmIGl0IHR1cm5zIG91dCB0
aGF0IHRoZXJlIGFyZSBubyByZW5kZXJlcnMKICAgICAvLyBmb2xsb3dpbmcgdGhlIHNwYW5uZXIs
IHRoZXJlIG1heSBiZSBib3R0b20gbWFyZ2lucyB0aGVyZSwgd2hpY2ggdGFrZSB1cCBzcGFjZS4K
LSAgICBSZW5kZXJNdWx0aUNvbHVtblNldCogbmV3U2V0ID0gbmV3IFJlbmRlck11bHRpQ29sdW1u
U2V0KCp0aGlzLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSht
dWx0aWNvbENvbnRhaW5lci0+c3R5bGUoKSwgQkxPQ0spKTsKKyAgICBhdXRvIG5ld1NldCA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlck11bHRpQ29sdW1uU2V0PigqdGhpcywgUmVuZGVyU3R5bGU6OmNy
ZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkobXVsdGljb2xDb250YWluZXItPnN0eWxlKCks
IEJMT0NLKSk7CiAgICAgbmV3U2V0LT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICBtdWx0aWNvbENv
bnRhaW5lci0+UmVuZGVyQmxvY2s6OmFkZENoaWxkKG5ld1NldCwgaW5zZXJ0QmVmb3JlTXVsdGlj
b2xDaGlsZCk7CisgICAgYXV0byYgc2V0ID0gKm5ld1NldDsKKyAgICBtdWx0aWNvbENvbnRhaW5l
ci0+UmVuZGVyQmxvY2s6OmFkZENoaWxkKFdURk1vdmUobmV3U2V0KSwgaW5zZXJ0QmVmb3JlTXVs
dGljb2xDaGlsZCk7CiAgICAgaW52YWxpZGF0ZUZyYWdtZW50cygpOwogCiAgICAgLy8gV2UgY2Fu
bm90IGhhbmRsZSBpbW1lZGlhdGUgY29sdW1uIHNldCBzaWJsaW5ncyBhdCB0aGUgbW9tZW50IChh
bmQgdGhlcmUncyBubyBuZWVkIGZvcgogICAgIC8vIGl0LCBlaXRoZXIpLiBUaGVyZSBoYXMgdG8g
YmUgYXQgbGVhc3Qgb25lIHNwYW5uZXIgc2VwYXJhdGluZyB0aGVtLgotICAgIEFTU0VSVCghcHJl
dmlvdXNDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV3U2V0KSB8fCAhcHJldmlvdXNDb2x1
bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV3U2V0KS0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgp
KTsKLSAgICBBU1NFUlQoIW5leHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV3U2V0KSB8
fCAhbmV4dENvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihuZXdTZXQpLT5pc1JlbmRlck11bHRp
Q29sdW1uU2V0KCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2V0LCAhcHJldmlvdXNDb2x1bW5TZXRP
clNwYW5uZXJTaWJsaW5nT2YoJnNldCkgfHwgIXByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVyU2li
bGluZ09mKCZzZXQpLT5pc1JlbmRlck11bHRpQ29sdW1uU2V0KCkpOworICAgIEFTU0VSVCghbmV4
dENvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZigmc2V0KSB8fCAhbmV4dENvbHVtblNldE9yU3Bh
bm5lclNpYmxpbmdPZigmc2V0KS0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKTsKICAgICAKICAg
ICByZXR1cm4gbmV4dERlc2NlbmRhbnQ7CiB9CkBAIC00MjgsNyArNDI5LDExIEBAIHZvaWQgUmVu
ZGVyTXVsdGlDb2x1bW5GbG93OjpmcmFnbWVudGVkRmwKICAgICAgICAgICAgICAgICAvLyBXZSBo
YXZlIHRvIG51a2UgdGhlIHBsYWNlaG9sZGVyLCBzaW5jZSB0aGUgYW5jZXN0b3IgYWxyZWFkeSBs
b3N0IHRoZSBtYXBwaW5nIHRvIGl0IHdoZW4KICAgICAgICAgICAgICAgICAvLyB3ZSBzaGlmdGVk
IHRoZSBwbGFjZWhvbGRlciBkb3duIGludG8gdGhpcyBmbG93IHRocmVhZC4KICAgICAgICAgICAg
ICAgICBwbGFjZWhvbGRlci5mcmFnbWVudGVkRmxvdygpLT5tX3NwYW5uZXJNYXAucmVtb3ZlKHNw
YW5uZXIpOwotICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLnBhcmVudCgpLT5yZW1vdmVDaGls
ZChwbGFjZWhvbGRlcik7CisKKyAgICAgICAgICAgICAgICBhdXRvIHRha2VuQ2hpbGQgPSBwbGFj
ZWhvbGRlci5wYXJlbnQoKS0+dGFrZUNoaWxkKHBsYWNlaG9sZGVyKTsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogTWVtb3J5IG1hbmFnZW1lbnQuCisgICAgICAgICAgICAgICAgYXV0byogbGVh
a2VuUHRyID0gdGFrZW5DaGlsZC5sZWFrUHRyKCk7CisgICAgICAgICAgICAgICAgVU5VU0VEX1BB
UkFNKGxlYWtlblB0cik7CiAKICAgICAgICAgICAgICAgICBpZiAoc3VidHJlZVJvb3QgPT0gZGVz
Y2VuZGFudCkKICAgICAgICAgICAgICAgICAgICAgc3VidHJlZVJvb3QgPSBzcGFubmVyOwpAQCAt
NDUwLDcgKzQ1NSwxMSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6aGFuZGxlU3Bhbm5l
CiB7CiAgICAgLy8gVGhlIHBsYWNlaG9sZGVyIG1heSBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVk
LCBidXQgaWYgaXQgaGFzbid0LCBkbyBzbyBub3cuCiAgICAgaWYgKFJlbmRlck11bHRpQ29sdW1u
U3Bhbm5lclBsYWNlaG9sZGVyKiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lck1hcC5nZXQoJmRvd25j
YXN0PFJlbmRlckJveD4oc3Bhbm5lcikpLmdldCgpKSB7Ci0gICAgICAgIHBsYWNlaG9sZGVyLT5w
YXJlbnQoKS0+cmVtb3ZlQ2hpbGQoKnBsYWNlaG9sZGVyKTsKKyAgICAgICAgYXV0byB0YWtlbkNo
aWxkID0gcGxhY2Vob2xkZXItPnBhcmVudCgpLT50YWtlQ2hpbGQoKnBsYWNlaG9sZGVyKTsKKyAg
ICAgICAgLy8gRklYTUU6IE1lbW9yeSBtYW5hZ2VtZW50LgorICAgICAgICBhdXRvKiBsZWFrZW5Q
dHIgPSB0YWtlbkNoaWxkLmxlYWtQdHIoKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlYWtlblB0
cik7CisKICAgICAgICAgbV9zcGFubmVyTWFwLnJlbW92ZSgmZG93bmNhc3Q8UmVuZGVyQm94Pihz
cGFubmVyKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAJ
KHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICsz
NCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbmRlck11bHRpQ29sdW1uU3Bhbm5l
clBsYWNlaG9sZGVyKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcjo6Y3JlYXRl
QW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvdyogZnJhZ21lbnRlZEZsb3csIFJlbmRlckJv
eCYgc3Bhbm5lciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUmVuZGVyUHRyPFJl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPiBSZW5kZXJNdWx0aUNvbHVtblNwYW5u
ZXJQbGFjZWhvbGRlcjo6Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvdyogZnJh
Z21lbnRlZEZsb3csIFJlbmRlckJveCYgc3Bhbm5lciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVu
dFN0eWxlKQogewogICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnlt
b3VzU3R5bGVXaXRoRGlzcGxheSgqcGFyZW50U3R5bGUsIEJMT0NLKTsKICAgICBuZXdTdHlsZS5z
ZXRDbGVhcihDQk9USCk7IC8vIFdlIGRvbid0IHdhbnQgZmxvYXRzIGluIHRoZSByb3cgcHJlY2Vk
aW5nIHRoZSBzcGFubmVyIHRvIGNvbnRpbnVlIG9uIHRoZSBvdGhlciBzaWRlLgotICAgIGF1dG8g
cGxhY2Vob2xkZXIgPSBuZXcgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoZnJh
Z21lbnRlZEZsb3csIHNwYW5uZXIsIFdURk1vdmUobmV3U3R5bGUpKTsKKyAgICBhdXRvIHBsYWNl
aG9sZGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXI+KGZyYWdtZW50ZWRGbG93LCBzcGFubmVyLCBXVEZNb3ZlKG5ld1N0eWxlKSk7CiAgICAgcGxh
Y2Vob2xkZXItPmluaXRpYWxpemVTdHlsZSgpOwogICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzksMTMgKzM5LDE1IEBAIGNsYXNzIFJlbmRlck11bHRp
Q29sdW1uRmxvdzsKIAogY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIg
ZmluYWwgOiBwdWJsaWMgUmVuZGVyQm94IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVuZGVyTXVs
dGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqIGNyZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNv
bHVtbkZsb3cqLCBSZW5kZXJCb3gmIHNwYW5uZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRT
dHlsZSk7CisgICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlcj4gY3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvdyosIFJlbmRlckJv
eCYgc3Bhbm5lciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIFJlbmRl
ckJveCogc3Bhbm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Bhbm5lcjsgfQogICAgIFJlbmRlck11
bHRpQ29sdW1uRmxvdyogZnJhZ21lbnRlZEZsb3coKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50
ZWRGbG93OyB9CiAgICAgV2Vha1B0cjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cj4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0
cigqdGhpcyk7IH0KIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcy4uLiBB
cmdzPiBmcmllbmQgUmVuZGVyUHRyPFQ+IGNyZWF0ZVJlbmRlcmVyKEFyZ3MmJi4uLik7CisKICAg
ICBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcihSZW5kZXJNdWx0aUNvbHVtbkZs
b3cqLCBSZW5kZXJCb3gmIHNwYW5uZXIsIFJlbmRlclN0eWxlJiYpOwogICAgIGJvb2wgaXNSZW5k
ZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsMTAgKzI0MSwxMCBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6c2V0UGFyZW50KFJlbmRlckVsZW1lCiAgICAgbV9wYXJlbnQgPSBwYXJlbnQ7CiB9
CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpyZW1vdmVGcm9tUGFyZW50KCkKK3ZvaWQgUmVuZGVyT2Jq
ZWN0OjpyZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpCiB7CiAgICAgaWYgKHBhcmVudCgpKQot
ICAgICAgICBwYXJlbnQoKS0+cmVtb3ZlQ2hpbGQoKnRoaXMpOworICAgICAgICBwYXJlbnQoKS0+
cmVtb3ZlQW5kRGVzdHJveUNoaWxkKCp0aGlzKTsKIH0KIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJP
YmplY3Q6Om5leHRJblByZU9yZGVyKCkgY29uc3QKQEAgLTE0NDgsNyArMTQ0OCwxMiBAQCB2b2lk
IFJlbmRlck9iamVjdDo6d2lsbEJlRGVzdHJveWVkKCkKICAgICBpZiAoQVhPYmplY3RDYWNoZSog
Y2FjaGUgPSBkb2N1bWVudCgpLmV4aXN0aW5nQVhPYmplY3RDYWNoZSgpKQogICAgICAgICBjYWNo
ZS0+Y2hpbGRyZW5DaGFuZ2VkKHRoaXMtPnBhcmVudCgpKTsKIAotICAgIHJlbW92ZUZyb21QYXJl
bnQoKTsKKyAgICBpZiAobV9wYXJlbnQpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBo
YXZlIGFsd2F5cyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgcGFyZW50IGJlZm9yZSBiZWluZyBkZXN0
cm95ZWQuCisgICAgICAgIGF1dG8gdGFrZW5UaGlzID0gbV9wYXJlbnQtPnRha2VDaGlsZCgqdGhp
cyk7CisgICAgICAgIGF1dG8qIGxlYWtlZFB0ciA9IHRha2VuVGhpcy5sZWFrUHRyKCk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShsZWFrZWRQdHIpOworICAgIH0KIAogICAgIEFTU0VSVChyZW5kZXJU
cmVlQmVpbmdEZXN0cm95ZWQoKSB8fCAhaXM8UmVuZGVyRWxlbWVudD4oKnRoaXMpIHx8ICF2aWV3
KCkuZnJhbWVWaWV3KCkuaGFzU2xvd1JlcGFpbnRPYmplY3QoZG93bmNhc3Q8UmVuZGVyRWxlbWVu
dD4oKnRoaXMpKSk7CiAKQEAgLTE1MTgsNiArMTUyMyw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpk
ZXN0cm95QW5kQ2xlYW51cEFub24KIAogdm9pZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKQogewor
ICAgIEFTU0VSVCghbV9iaXRmaWVsZHMuYmVpbmdEZXN0cm95ZWQoKSk7CiAgICAgbV9iaXRmaWVs
ZHMuc2V0QmVpbmdEZXN0cm95ZWQodHJ1ZSk7CiAKICNpZiBQTEFURk9STShJT1MpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAyMjI2MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTc1MSw3ICs3NTEsNyBAQCBwdWJsaWM6CiAgICAgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHNl
bGVjdGlvblJvb3QoKSBjb25zdDsKICAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKHVuc2lnbmVk
JiBzcG9zLCB1bnNpZ25lZCYgZXBvcykgY29uc3Q7CiAgICAgCi0gICAgdm9pZCByZW1vdmVGcm9t
UGFyZW50KCk7CisgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOwogCiAgICAg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlciYgYW5pbWF0aW9uKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzYxLDcgKzM2MSw3IEBAIHZvaWQgUmVuZGVyUXVvdGU6OnVwZGF0ZVRleHRSZW5kZXJlcigp
CiAgICAgICAgIHJlbmRlclRleHQtPmRpcnR5TGluZUJveGVzKGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBhZGRDaGlsZChuZXcgUmVuZGVyVGV4dEZyYWdtZW50KGRvY3VtZW50
KCksIG1fdGV4dCkpOworICAgIGFkZENoaWxkKGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHRGcmFn
bWVudD4oZG9jdW1lbnQoKSwgbV90ZXh0KSk7CiB9CiAKIFN0cmluZyBSZW5kZXJRdW90ZTo6Y29t
cHV0ZVRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1
YnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw5ICs5Niw5IEBAIHN0YXRpYyBpbmxpbmUg
UmVuZGVyQmxvY2sqIHJ1YnlBZnRlckJsb2MKICAgICByZXR1cm4gaXNSdWJ5QWZ0ZXJCbG9jayhj
aGlsZCkgPyBkb3duY2FzdDxSZW5kZXJCbG9jaz4oY2hpbGQpIDogbnVsbHB0cjsKIH0KIAotc3Rh
dGljIFJlbmRlckJsb2NrKiBjcmVhdGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soUmVuZGVyT2Jq
ZWN0JiBydWJ5KQorc3RhdGljIGF1dG8gY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKFJl
bmRlck9iamVjdCYgcnVieSkKIHsKLSAgICBSZW5kZXJCbG9jayogbmV3QmxvY2sgPSBuZXcgUmVu
ZGVyQmxvY2tGbG93KHJ1YnkuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91
c1N0eWxlV2l0aERpc3BsYXkocnVieS5zdHlsZSgpLCBJTkxJTkVfQkxPQ0spKTsKKyAgICBhdXRv
IG5ld0Jsb2NrID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93PihydWJ5LmRvY3VtZW50
KCksIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHJ1Ynkuc3R5
bGUoKSwgSU5MSU5FX0JMT0NLKSk7CiAgICAgbmV3QmxvY2stPmluaXRpYWxpemVTdHlsZSgpOwog
ICAgIHJldHVybiBuZXdCbG9jazsKIH0KQEAgLTEzNyw0MyArMTM3LDM5IEBAIHZvaWQgUmVuZGVy
UnVieUFzSW5saW5lOjpzdHlsZURpZENoYW5nZSgKICAgICBwcm9wYWdhdGVTdHlsZVRvQW5vbnlt
b3VzQ2hpbGRyZW4oUHJvcGFnYXRlVG9BbGxDaGlsZHJlbik7CiB9CiAKLXZvaWQgUmVuZGVyUnVi
eUFzSW5saW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQordm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OmFkZENoaWxkKFJlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIC8v
IEluc2VydCA6YmVmb3JlIGFuZCA6YWZ0ZXIgY29udGVudCBiZWZvcmUvYWZ0ZXIgdGhlIFJlbmRl
clJ1YnlSdW4ocykKICAgICBpZiAoY2hpbGQtPmlzQmVmb3JlQ29udGVudCgpKSB7CiAgICAgICAg
IGlmIChjaGlsZC0+aXNJbmxpbmUoKSkgewogICAgICAgICAgICAgLy8gQWRkIGdlbmVyYXRlZCBp
bmxpbmUgY29udGVudCBub3JtYWxseQotICAgICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGls
ZChjaGlsZCwgZmlyc3RDaGlsZCgpKTsKKyAgICAgICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hp
bGQoV1RGTW92ZShjaGlsZCksIGZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBXcmFwIG5vbi1pbmxpbmUgY29udGVudCB3aXRoIGFuIGFub255bW91cyBpbmxp
bmUtYmxvY2suCiAgICAgICAgICAgICBSZW5kZXJCbG9jayogYmVmb3JlQmxvY2sgPSBydWJ5QmVm
b3JlQmxvY2sodGhpcyk7Ci0gICAgICAgICAgICBpZiAoIWJlZm9yZUJsb2NrKSB7Ci0gICAgICAg
ICAgICAgICAgYmVmb3JlQmxvY2sgPSBjcmVhdGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soKnRo
aXMpOwotICAgICAgICAgICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoYmVmb3JlQmxvY2ss
IGZpcnN0Q2hpbGQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBiZWZvcmVCbG9jay0+
YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgaWYgKCFiZWZvcmVCbG9jaykKKyAgICAgICAg
ICAgICAgICBiZWZvcmVCbG9jayA9ICZiYXNlQWRkQ2hpbGQ8UmVuZGVySW5saW5lPihjcmVhdGVB
bm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soKnRoaXMpLCBmaXJzdENoaWxkKCkpOworICAgICAgICAg
ICAgYmVmb3JlQmxvY2stPmFkZENoaWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChjaGlsZC0+aXNBZnRlckNvbnRlbnQoKSkgewog
ICAgICAgICBpZiAoY2hpbGQtPmlzSW5saW5lKCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBnZW5l
cmF0ZWQgaW5saW5lIGNvbnRlbnQgbm9ybWFsbHkKLSAgICAgICAgICAgIFJlbmRlcklubGluZTo6
YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChXVEZN
b3ZlKGNoaWxkKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXcmFwIG5vbi1p
bmxpbmUgY29udGVudCB3aXRoIGFuIGFub255bW91cyBpbmxpbmUtYmxvY2suCiAgICAgICAgICAg
ICBSZW5kZXJCbG9jayogYWZ0ZXJCbG9jayA9IHJ1YnlBZnRlckJsb2NrKHRoaXMpOwotICAgICAg
ICAgICAgaWYgKCFhZnRlckJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgYWZ0ZXJCbG9jayA9IGNy
ZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyk7Ci0gICAgICAgICAgICAgICAgUmVu
ZGVySW5saW5lOjphZGRDaGlsZChhZnRlckJsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGFmdGVyQmxvY2stPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgIGlmICghYWZ0ZXJC
bG9jaykKKyAgICAgICAgICAgICAgICBhZnRlckJsb2NrID0gJmJhc2VBZGRDaGlsZDxSZW5kZXJJ
bmxpbmU+KGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcykpOworICAgICAgICAg
ICAgYWZ0ZXJCbG9jay0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBydWJ5IHJ1biwg
anVzdCBhZGQgaXQgbm9ybWFsbHkuCiAgICAgaWYgKGNoaWxkLT5pc1J1YnlSdW4oKSkgewotICAg
ICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAg
IFJlbmRlcklubGluZTo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTg0LDcgKzE4MCw3IEBAIHZvaWQgUmVuZGVyUnVi
eUFzSW5saW5lOjphZGRDaGlsZChSZW5kZXIKICAgICAgICAgd2hpbGUgKHJ1biAmJiAhcnVuLT5p
c1J1YnlSdW4oKSkKICAgICAgICAgICAgIHJ1biA9IHJ1bi0+cGFyZW50KCk7CiAgICAgICAgIGlm
IChydW4pIHsKLSAgICAgICAgICAgIHJ1bi0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsK
KyAgICAgICAgICAgIHJ1bi0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gYmVmb3JlQ2hpbGQgc2hvdWxkIGFsd2F5cyBoYXZlIGEgcnVuIGFzIHBhcmVudCEK
QEAgLTE5NSwxNCArMTkxLDEyIEBAIHZvaWQgUmVuZGVyUnVieUFzSW5saW5lOjphZGRDaGlsZChS
ZW5kZXIKICAgICAvLyBpZiBwb3NzaWJsZSwgb3IgY3JlYXRlIGEgbmV3IHJ1biBvdGhlcndpc2Uu
CiAgICAgLy8gKFRoZSBSZW5kZXJSdWJ5UnVuIG9iamVjdCB3aWxsIGhhbmRsZSB0aGUgZGV0YWls
cykKICAgICBSZW5kZXJSdWJ5UnVuKiBsYXN0UnVuID0gbGFzdFJ1YnlSdW4odGhpcyk7Ci0gICAg
aWYgKCFsYXN0UnVuIHx8IGxhc3RSdW4tPmhhc1J1YnlUZXh0KCkpIHsKLSAgICAgICAgbGFzdFJ1
biA9IFJlbmRlclJ1YnlSdW46OnN0YXRpY0NyZWF0ZVJ1YnlSdW4odGhpcyk7Ci0gICAgICAgIFJl
bmRlcklubGluZTo6YWRkQ2hpbGQobGFzdFJ1biwgYmVmb3JlQ2hpbGQpOwotICAgIH0KLSAgICBs
YXN0UnVuLT5hZGRDaGlsZChjaGlsZCk7CisgICAgaWYgKCFsYXN0UnVuIHx8IGxhc3RSdW4tPmhh
c1J1YnlUZXh0KCkpCisgICAgICAgIGxhc3RSdW4gPSAmYmFzZUFkZENoaWxkPFJlbmRlcklubGlu
ZT4oUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVieVJ1bih0aGlzKSwgYmVmb3JlQ2hpbGQp
OworICAgIGxhc3RSdW4tPmFkZENoaWxkKFdURk1vdmUoY2hpbGQpKTsKIH0KIAotdm9pZCBSZW5k
ZXJSdWJ5QXNJbmxpbmU6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCitSZW5kZXJQ
dHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJSdWJ5QXNJbmxpbmU6OnRha2VDaGlsZChSZW5kZXJPYmpl
Y3QmIGNoaWxkKQogewogICAgIC8vIElmIHRoZSBjaGlsZCdzIHBhcmVudCBpcyAqdGhpcyAobXVz
dCBiZSBhIHJ1YnkgcnVuIG9yIGdlbmVyYXRlZCBjb250ZW50IG9yIGFub255bW91cyBibG9jayks
CiAgICAgLy8ganVzdCB1c2UgdGhlIG5vcm1hbCByZW1vdmUgbWV0aG9kLgpAQCAtMjEwLDIwICsy
MDQsMTkgQEAgdm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OnJlbW92ZUNoaWxkKFJlbgogI2lmbmRl
ZiBBU1NFUlRfRElTQUJMRUQKICAgICAgICAgQVNTRVJUKGlzUnVieUNoaWxkRm9yTm9ybWFsUmVt
b3ZhbChjaGlsZCkpOwogI2VuZGlmCi0gICAgICAgIFJlbmRlcklubGluZTo6cmVtb3ZlQ2hpbGQo
Y2hpbGQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBSZW5kZXJJbmxpbmU6OnRh
a2VDaGlsZChjaGlsZCk7CiAgICAgfQogICAgIC8vIElmIHRoZSBjaGlsZCdzIHBhcmVudCBpcyBh
biBhbm95bW91cyBibG9jayAobXVzdCBiZSBnZW5lcmF0ZWQgOmJlZm9yZS86YWZ0ZXIgY29udGVu
dCkKICAgICAvLyBqdXN0IHVzZSB0aGUgYmxvY2sncyByZW1vdmUgbWV0aG9kLgogICAgIGlmIChp
c0Fub255bW91c1J1YnlJbmxpbmVCbG9jayhjaGlsZC5wYXJlbnQoKSkpIHsKICAgICAgICAgQVNT
RVJUKGNoaWxkLmlzQmVmb3JlQ29udGVudCgpIHx8IGNoaWxkLmlzQWZ0ZXJDb250ZW50KCkpOwot
ICAgICAgICBjaGlsZC5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZW1v
dmVDaGlsZCgqY2hpbGQucGFyZW50KCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8g
dGFrZW5DaGlsZCA9IGNoaWxkLnBhcmVudCgpLT50YWtlQ2hpbGQoY2hpbGQpOworICAgICAgICBy
ZW1vdmVBbmREZXN0cm95Q2hpbGQoKmNoaWxkLnBhcmVudCgpKTsKKyAgICAgICAgcmV0dXJuIHRh
a2VuQ2hpbGQ7CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3aXNlIGZpbmQgdGhlIGNvbnRhaW5pbmcg
cnVuIGFuZCByZW1vdmUgaXQgZnJvbSB0aGVyZS4KLSAgICBmaW5kUnVieVJ1blBhcmVudChjaGls
ZCkucmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIHJldHVybiBmaW5kUnVieVJ1blBhcmVudChjaGls
ZCkudGFrZUNoaWxkKGNoaWxkKTsKIH0KIAogLy89PT0gcnVieSBhcyBibG9jayBvYmplY3QgPT09
CkBAIC0yNDMsNDMgKzIzNiwzOSBAQCB2b2lkIFJlbmRlclJ1YnlBc0Jsb2NrOjpzdHlsZURpZENo
YW5nZShTCiAgICAgcHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKFByb3BhZ2F0ZVRv
QWxsQ2hpbGRyZW4pOwogfQogCi12b2lkIFJlbmRlclJ1YnlBc0Jsb2NrOjphZGRDaGlsZChSZW5k
ZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJS
dWJ5QXNCbG9jazo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgLy8gSW5zZXJ0IDpiZWZvcmUgYW5kIDphZnRl
ciBjb250ZW50IGJlZm9yZS9hZnRlciB0aGUgUmVuZGVyUnVieVJ1bihzKQogICAgIGlmIChjaGls
ZC0+aXNCZWZvcmVDb250ZW50KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc0lubGluZSgpKSB7
CiAgICAgICAgICAgICAvLyBBZGQgZ2VuZXJhdGVkIGlubGluZSBjb250ZW50IG5vcm1hbGx5Ci0g
ICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGNoaWxkLCBmaXJzdENoaWxkKCkp
OworICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwg
Zmlyc3RDaGlsZCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdyYXAgbm9u
LWlubGluZSBjb250ZW50IHdpdGggYW4gYW5vbnltb3VzIGlubGluZS1ibG9jay4KICAgICAgICAg
ICAgIFJlbmRlckJsb2NrKiBiZWZvcmVCbG9jayA9IHJ1YnlCZWZvcmVCbG9jayh0aGlzKTsKLSAg
ICAgICAgICAgIGlmICghYmVmb3JlQmxvY2spIHsKLSAgICAgICAgICAgICAgICBiZWZvcmVCbG9j
ayA9IGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyk7Ci0gICAgICAgICAgICAg
ICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChiZWZvcmVCbG9jaywgZmlyc3RDaGlsZCgpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJlZm9yZUJsb2NrLT5hZGRDaGlsZChjaGlsZCk7
CisgICAgICAgICAgICBpZiAoIWJlZm9yZUJsb2NrKQorICAgICAgICAgICAgICAgIGJlZm9yZUJs
b2NrID0gJmJhc2VBZGRDaGlsZDxSZW5kZXJCbG9ja0Zsb3c+KGNyZWF0ZUFub255bW91c1J1YnlJ
bmxpbmVCbG9jaygqdGhpcyksIGZpcnN0Q2hpbGQoKSk7CisgICAgICAgICAgICBiZWZvcmVCbG9j
ay0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgaWYgKGNoaWxkLT5pc0FmdGVyQ29udGVudCgpKSB7CiAgICAgICAgIGlmIChj
aGlsZC0+aXNJbmxpbmUoKSkgewogICAgICAgICAgICAgLy8gQWRkIGdlbmVyYXRlZCBpbmxpbmUg
Y29udGVudCBub3JtYWxseQotICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChj
aGlsZCk7CisgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKFdURk1vdmUoY2hp
bGQpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdyYXAgbm9uLWlubGluZSBj
b250ZW50IHdpdGggYW4gYW5vbnltb3VzIGlubGluZS1ibG9jay4KICAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBhZnRlckJsb2NrID0gcnVieUFmdGVyQmxvY2sodGhpcyk7Ci0gICAgICAgICAgICBp
ZiAoIWFmdGVyQmxvY2spIHsKLSAgICAgICAgICAgICAgICBhZnRlckJsb2NrID0gY3JlYXRlQW5v
bnltb3VzUnVieUlubGluZUJsb2NrKCp0aGlzKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9j
a0Zsb3c6OmFkZENoaWxkKGFmdGVyQmxvY2spOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YWZ0ZXJCbG9jay0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgaWYgKCFhZnRlckJsb2Nr
KQorICAgICAgICAgICAgICAgIGFmdGVyQmxvY2sgPSAmYmFzZUFkZENoaWxkPFJlbmRlckJsb2Nr
Rmxvdz4oY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKCp0aGlzKSk7CisgICAgICAgICAg
ICBhZnRlckJsb2NrLT5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIHJ1YnkgcnVuLCBq
dXN0IGFkZCBpdCBub3JtYWxseS4KICAgICBpZiAoY2hpbGQtPmlzUnVieVJ1bigpKSB7Ci0gICAg
ICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAg
ICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yOTAsNyArMjc5LDcgQEAgdm9pZCBSZW5k
ZXJSdWJ5QXNCbG9jazo6YWRkQ2hpbGQoUmVuZGVyTwogICAgICAgICB3aGlsZSAocnVuICYmICFy
dW4tPmlzUnVieVJ1bigpKQogICAgICAgICAgICAgcnVuID0gcnVuLT5wYXJlbnQoKTsKICAgICAg
ICAgaWYgKHJ1bikgewotICAgICAgICAgICAgcnVuLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hp
bGQpOworICAgICAgICAgICAgcnVuLT5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hp
bGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyAvLyBiZWZvcmVDaGlsZCBzaG91bGQgYWx3YXlzIGhhdmUgYSBydW4gYXMgcGFy
ZW50IQpAQCAtMzAxLDE0ICsyOTAsMTIgQEAgdm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6YWRkQ2hp
bGQoUmVuZGVyTwogICAgIC8vIGlmIHBvc3NpYmxlLCBvciBjcmVhdGUgYSBuZXcgcnVuIG90aGVy
d2lzZS4KICAgICAvLyAoVGhlIFJlbmRlclJ1YnlSdW4gb2JqZWN0IHdpbGwgaGFuZGxlIHRoZSBk
ZXRhaWxzKQogICAgIFJlbmRlclJ1YnlSdW4qIGxhc3RSdW4gPSBsYXN0UnVieVJ1bih0aGlzKTsK
LSAgICBpZiAoIWxhc3RSdW4gfHwgbGFzdFJ1bi0+aGFzUnVieVRleHQoKSkgewotICAgICAgICBs
YXN0UnVuID0gUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVieVJ1bih0aGlzKTsKLSAgICAg
ICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChsYXN0UnVuLCBiZWZvcmVDaGlsZCk7Ci0gICAg
fQotICAgIGxhc3RSdW4tPmFkZENoaWxkKGNoaWxkKTsKKyAgICBpZiAoIWxhc3RSdW4gfHwgbGFz
dFJ1bi0+aGFzUnVieVRleHQoKSkKKyAgICAgICAgbGFzdFJ1biA9ICZiYXNlQWRkQ2hpbGQ8UmVu
ZGVyQmxvY2tGbG93PihSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKHRoaXMpLCBi
ZWZvcmVDaGlsZCk7CisgICAgbGFzdFJ1bi0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogfQog
Ci12b2lkIFJlbmRlclJ1YnlBc0Jsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxk
KQorUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyUnVieUFzQmxvY2s6OnRha2VDaGlsZChS
ZW5kZXJPYmplY3QmIGNoaWxkKQogewogICAgIC8vIElmIHRoZSBjaGlsZCdzIHBhcmVudCBpcyAq
dGhpcyAobXVzdCBiZSBhIHJ1YnkgcnVuIG9yIGdlbmVyYXRlZCBjb250ZW50IG9yIGFub255bW91
cyBibG9jayksCiAgICAgLy8ganVzdCB1c2UgdGhlIG5vcm1hbCByZW1vdmUgbWV0aG9kLgpAQCAt
MzE2LDIwICszMDMsMTggQEAgdm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6cmVtb3ZlQ2hpbGQoUmVu
ZAogI2lmbmRlZiBBU1NFUlRfRElTQUJMRUQKICAgICAgICAgQVNTRVJUKGlzUnVieUNoaWxkRm9y
Tm9ybWFsUmVtb3ZhbChjaGlsZCkpOwogI2VuZGlmCi0gICAgICAgIFJlbmRlckJsb2NrRmxvdzo6
cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBSZW5k
ZXJCbG9ja0Zsb3c6OnRha2VDaGlsZChjaGlsZCk7CiAgICAgfQogICAgIC8vIElmIHRoZSBjaGls
ZCdzIHBhcmVudCBpcyBhbiBhbm95bW91cyBibG9jayAobXVzdCBiZSBnZW5lcmF0ZWQgOmJlZm9y
ZS86YWZ0ZXIgY29udGVudCkKICAgICAvLyBqdXN0IHVzZSB0aGUgYmxvY2sncyByZW1vdmUgbWV0
aG9kLgogICAgIGlmIChpc0Fub255bW91c1J1YnlJbmxpbmVCbG9jayhjaGlsZC5wYXJlbnQoKSkp
IHsKICAgICAgICAgQVNTRVJUKGNoaWxkLmlzQmVmb3JlQ29udGVudCgpIHx8IGNoaWxkLmlzQWZ0
ZXJDb250ZW50KCkpOwotICAgICAgICBjaGlsZC5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGQoY2hpbGQp
OwotICAgICAgICByZW1vdmVDaGlsZCgqY2hpbGQucGFyZW50KCkpOwotICAgICAgICByZXR1cm47
CisgICAgICAgIGNoaWxkLnBhcmVudCgpLT5yZW1vdmVBbmREZXN0cm95Q2hpbGQoY2hpbGQpOwor
ICAgICAgICByZXR1cm4gdGFrZUNoaWxkKCpjaGlsZC5wYXJlbnQoKSk7CiAgICAgfQogCiAgICAg
Ly8gT3RoZXJ3aXNlIGZpbmQgdGhlIGNvbnRhaW5pbmcgcnVuIGFuZCByZW1vdmUgaXQgZnJvbSB0
aGVyZS4KLSAgICBmaW5kUnVieVJ1blBhcmVudChjaGlsZCkucmVtb3ZlQ2hpbGQoY2hpbGQpOwor
ICAgIHJldHVybiBmaW5kUnVieVJ1blBhcmVudChjaGlsZCkudGFrZUNoaWxkKGNoaWxkKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclJ1YnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUnVieS5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUnVieS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoKICAg
ICBSZW5kZXJSdWJ5QXNJbmxpbmUoRWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOwogICAgIHZpcnR1
YWwgflJlbmRlclJ1YnlBc0lubGluZSgpOwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKSBvdmVycmlkZTsKKyAgICB2b2lk
IGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFr
ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBv
bGRTdHlsZSkgb3ZlcnJpZGU7CkBAIC03NSw4ICs3NSw4IEBAIHB1YmxpYzoKIAogICAgIEVsZW1l
bnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlRm9yTm9u
QW5vbnltb3VzKCkpOyB9CiAKLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92
ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGQo
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQg
PSAwKSBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtlQ2hpbGQoUmVu
ZGVyT2JqZWN0JiBjaGlsZCkgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHN0eWxl
RGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBv
dmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNl
LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJ1YnlCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsOCArOTYsOSBAQCB2b2lkIFJlbmRl
clJ1YnlCYXNlOjptb3ZlSW5saW5lQ2hpbGRyZW4oCiAgICAgICAgIGlmIChsYXN0Q2hpbGQgJiYg
bGFzdENoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgbGFzdENoaWxkLT5jaGlsZHJlbklubGlu
ZSgpKQogICAgICAgICAgICAgdG9CbG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPihsYXN0Q2hp
bGQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRvQmxvY2sgPSB0b0Jhc2UtPmNyZWF0
ZUFub255bW91c0Jsb2NrKCk7Ci0gICAgICAgICAgICB0b0Jhc2UtPmluc2VydENoaWxkSW50ZXJu
YWwodG9CbG9jaywgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgYXV0byBu
ZXdUb0Jsb2NrID0gdG9CYXNlLT5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOworICAgICAgICAgICAg
dG9CbG9jayA9IG5ld1RvQmxvY2suZ2V0KCk7CisgICAgICAgICAgICB0b0Jhc2UtPmluc2VydENo
aWxkSW50ZXJuYWwoV1RGTW92ZShuZXdUb0Jsb2NrKSwgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4p
OwogICAgICAgICB9CiAgICAgfQogICAgIC8vIE1vdmUgb3VyIGlubGluZSBjaGlsZHJlbiBpbnRv
IHRoZSB0YXJnZXQgYmxvY2sgd2UgZGV0ZXJtaW5lZCBhYm92ZS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODksMTAgKzg5LDggQEAgUmVuZGVyUnVieUJhc2UqIFJlbmRlclJ1YnlSdW46OnJ1YnlCYXNl
KAogUmVuZGVyUnVieUJhc2UqIFJlbmRlclJ1YnlSdW46OnJ1YnlCYXNlU2FmZSgpCiB7CiAgICAg
UmVuZGVyUnVieUJhc2UqIGJhc2UgPSBydWJ5QmFzZSgpOwotICAgIGlmICghYmFzZSkgewotICAg
ICAgICBiYXNlID0gY3JlYXRlUnVieUJhc2UoKTsKLSAgICAgICAgUmVuZGVyQmxvY2tGbG93Ojph
ZGRDaGlsZChiYXNlKTsKLSAgICB9CisgICAgaWYgKCFiYXNlKQorICAgICAgICBiYXNlID0gJmJh
c2VBZGRDaGlsZDxSZW5kZXJCbG9ja0Zsb3c+KGNyZWF0ZVJ1YnlCYXNlKCkpOwogICAgIHJldHVy
biBiYXNlOwogfQogCkBAIC0xMDYsNyArMTA0LDcgQEAgYm9vbCBSZW5kZXJSdWJ5UnVuOjppc0No
aWxkQWxsb3dlZChjb25zdAogICAgIHJldHVybiBjaGlsZC5pc0lubGluZSgpIHx8IGNoaWxkLmlz
UnVieVRleHQoKTsKIH0KIAotdm9pZCBSZW5kZXJSdWJ5UnVuOjphZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJSdWJ5UnVu
OjphZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCkKIHsKICAgICBBU1NFUlQoY2hpbGQpOwogCkBAIC0xMTUsNyArMTEzLDcgQEAg
dm9pZCBSZW5kZXJSdWJ5UnVuOjphZGRDaGlsZChSZW5kZXJPYmplYwogICAgICAgICAgICAgLy8g
UmVuZGVyUnVieSBoYXMgYWxyZWFkeSBhc2NlcnRhaW5lZCB0aGF0IHdlIGNhbiBhZGQgdGhlIGNo
aWxkIGhlcmUuCiAgICAgICAgICAgICBBU1NFUlQoIWhhc1J1YnlUZXh0KCkpOwogICAgICAgICAg
ICAgLy8gcHJlcGVuZCBydWJ5IHRleHRzIGFzIGZpcnN0IGNoaWxkCi0gICAgICAgICAgICBSZW5k
ZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGNoaWxkLCBmaXJzdENoaWxkKCkpOworICAgICAgICAgICAg
UmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgZmlyc3RDaGlsZCgpKTsK
ICAgICAgICAgfSAgZWxzZSBpZiAoYmVmb3JlQ2hpbGQtPmlzUnVieVRleHQoKSkgewogICAgICAg
ICAgICAgLy8gTmV3IHRleHQgaXMgaW5zZXJ0ZWQganVzdCBiZWZvcmUgYW5vdGhlci4KICAgICAg
ICAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgbmV3IHRleHQgdGFrZXMgdGhlIHBsYWNlIG9mIHRo
ZSBvbGQgb25lLCBhbmQKQEAgLTEyMywzNCArMTIxLDM1IEBAIHZvaWQgUmVuZGVyUnVieVJ1bjo6
YWRkQ2hpbGQoUmVuZGVyT2JqZWMKICAgICAgICAgICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+cGFy
ZW50KCkgPT0gdGhpcyk7CiAgICAgICAgICAgICBSZW5kZXJFbGVtZW50KiBydWJ5ID0gcGFyZW50
KCk7CiAgICAgICAgICAgICBBU1NFUlQoaXNSdWJ5KHJ1YnkpKTsKLSAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBuZXdSdW4gPSBzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1YnkpOwotICAgICAgICAgICAg
cnVieS0+YWRkQ2hpbGQobmV3UnVuLCBuZXh0U2libGluZygpKTsKKyAgICAgICAgICAgIGF1dG8g
bmV3UnVuID0gc3RhdGljQ3JlYXRlUnVieVJ1bihydWJ5KTsKKyAgICAgICAgICAgIHJ1YnktPmFk
ZENoaWxkKFdURk1vdmUobmV3UnVuKSwgbmV4dFNpYmxpbmcoKSk7CiAgICAgICAgICAgICAvLyBB
ZGQgdGhlIG5ldyBydWJ5IHRleHQgYW5kIG1vdmUgdGhlIG9sZCBvbmUgdG8gdGhlIG5ldyBydW4K
ICAgICAgICAgICAgIC8vIE5vdGU6IERvaW5nIGl0IGluIHRoaXMgb3JkZXIgYW5kIG5vdCB1c2lu
ZyBSZW5kZXJSdWJ5UnVuJ3MgbWV0aG9kcywKICAgICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGF2
b2lkIGF1dG9tYXRpYyByZW1vdmFsIG9mIHRoZSBydWJ5IHJ1biBpbiBjYXNlIHRoZXJlIGlzIG5v
CiAgICAgICAgICAgICAvLyBvdGhlciBjaGlsZCBiZXNpZGVzIHRoZSBvbGQgcnVieSB0ZXh0Lgot
ICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQp
OwotICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjpyZW1vdmVDaGlsZCgqYmVmb3JlQ2hpbGQp
OwotICAgICAgICAgICAgbmV3UnVuLT5hZGRDaGlsZChiZWZvcmVDaGlsZCk7CisgICAgICAgICAg
ICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7
CisgICAgICAgICAgICBhdXRvIHRha2VuQmVmb3JlQ2hpbGQgPSBSZW5kZXJCbG9ja0Zsb3c6OnRh
a2VDaGlsZCgqYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgbmV3UnVuLT5hZGRDaGlsZChXVEZN
b3ZlKHRha2VuQmVmb3JlQ2hpbGQpKTsKICAgICAgICAgfSBlbHNlIGlmIChoYXNSdWJ5QmFzZSgp
KSB7CiAgICAgICAgICAgICAvLyBJbnNlcnRpb24gYmVmb3JlIGEgcnVieSBiYXNlIG9iamVjdC4K
ICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBuZWVkIGluc2VydCBhIG5ldyBydW4gYmVm
b3JlIHRoZSBjdXJyZW50IG9uZSBhbmQgc3BsaXQgdGhlIGJhc2UuCiAgICAgICAgICAgICBSZW5k
ZXJFbGVtZW50KiBydWJ5ID0gcGFyZW50KCk7Ci0gICAgICAgICAgICBSZW5kZXJSdWJ5UnVuKiBu
ZXdSdW4gPSBzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1YnkpOwotICAgICAgICAgICAgcnVieS0+YWRk
Q2hpbGQobmV3UnVuLCB0aGlzKTsKLSAgICAgICAgICAgIG5ld1J1bi0+YWRkQ2hpbGQoY2hpbGQp
OwotICAgICAgICAgICAgcnVieUJhc2VTYWZlKCktPm1vdmVDaGlsZHJlbihuZXdSdW4tPnJ1YnlC
YXNlU2FmZSgpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBhdXRvIG5ld1J1biA9IHN0YXRp
Y0NyZWF0ZVJ1YnlSdW4ocnVieSk7CisgICAgICAgICAgICBhdXRvJiBydW4gPSAqbmV3UnVuOwor
ICAgICAgICAgICAgcnVieS0+YWRkQ2hpbGQoV1RGTW92ZShuZXdSdW4pLCB0aGlzKTsKKyAgICAg
ICAgICAgIHJ1bi5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CisgICAgICAgICAgICBydWJ5QmFz
ZVNhZmUoKS0+bW92ZUNoaWxkcmVuKHJ1bi5ydWJ5QmFzZVNhZmUoKSwgYmVmb3JlQ2hpbGQpOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gY2hpbGQgaXMgbm90IGEgdGV4dCAt
PiBpbnNlcnQgaXQgaW50byB0aGUgYmFzZQogICAgICAgICAvLyAoYXBwZW5kIGl0IGluc3RlYWQg
aWYgYmVmb3JlQ2hpbGQgaXMgdGhlIHJ1YnkgdGV4dCkKICAgICAgICAgaWYgKGJlZm9yZUNoaWxk
ICYmIGJlZm9yZUNoaWxkLT5pc1J1YnlUZXh0KCkpCiAgICAgICAgICAgICBiZWZvcmVDaGlsZCA9
IDA7Ci0gICAgICAgIHJ1YnlCYXNlU2FmZSgpLT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQp
OworICAgICAgICBydWJ5QmFzZVNhZmUoKS0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9y
ZUNoaWxkKTsKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyUnVieVJ1bjo6cmVtb3ZlQ2hpbGQoUmVu
ZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclJ1YnlSdW46
OnRha2VDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQogewogICAgIC8vIElmIHRoZSBjaGlsZCBp
cyBhIHJ1YnkgdGV4dCwgdGhlbiBtZXJnZSB0aGUgcnVieSBiYXNlIHdpdGggdGhlIGJhc2Ugb2YK
ICAgICAvLyB0aGUgcmlnaHQgc2libGluZyBydW4sIGlmIHBvc3NpYmxlLgpAQCAtMTcyLDM5ICsx
NzEsMzkgQEAgdm9pZCBSZW5kZXJSdWJ5UnVuOjpyZW1vdmVDaGlsZChSZW5kZXJPYgogICAgICAg
ICB9CiAgICAgfQogCi0gICAgUmVuZGVyQmxvY2tGbG93OjpyZW1vdmVDaGlsZChjaGlsZCk7Cisg
ICAgYXV0byB0YWtlbkNoaWxkID0gUmVuZGVyQmxvY2tGbG93Ojp0YWtlQ2hpbGQoY2hpbGQpOwog
CiAgICAgaWYgKCFiZWluZ0Rlc3Ryb3llZCgpICYmICFyZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQo
KSkgewogICAgICAgICAvLyBDaGVjayBpZiBvdXIgYmFzZSAoaWYgYW55KSBpcyBub3cgZW1wdHku
IElmIHNvLCBkZXN0cm95IGl0LgogICAgICAgICBSZW5kZXJCbG9jayogYmFzZSA9IHJ1YnlCYXNl
KCk7CiAgICAgICAgIGlmIChiYXNlICYmICFiYXNlLT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAg
ICAgIFJlbmRlckJsb2NrRmxvdzo6cmVtb3ZlQ2hpbGQoKmJhc2UpOworICAgICAgICAgICAgYXV0
byB0YWtlbkJhc2UgPSBSZW5kZXJCbG9ja0Zsb3c6OnRha2VDaGlsZCgqYmFzZSk7CiAgICAgICAg
ICAgICBiYXNlLT5kZWxldGVMaW5lcygpOwotICAgICAgICAgICAgYmFzZS0+ZGVzdHJveSgpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgYW55IG9mIHRoZSBhYm92ZSBsZWF2ZXMgdGhlIHJ1
biBlbXB0eSwgZGVzdHJveSBpdCBhcyB3ZWxsLgogICAgICAgICBpZiAoIWhhc1J1YnlUZXh0KCkg
JiYgIWhhc1J1YnlCYXNlKCkpIHsKLSAgICAgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZCgq
dGhpcyk7CisgICAgICAgICAgICBhdXRvIHRha2VuVGhpcyA9IHBhcmVudCgpLT50YWtlQ2hpbGQo
KnRoaXMpOwogICAgICAgICAgICAgZGVsZXRlTGluZXMoKTsKLSAgICAgICAgICAgIGRlc3Ryb3ko
KTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB0YWtlbkNoaWxkOwogfQogCi1SZW5k
ZXJSdWJ5QmFzZSogUmVuZGVyUnVieVJ1bjo6Y3JlYXRlUnVieUJhc2UoKSBjb25zdAorUmVuZGVy
UHRyPFJlbmRlclJ1YnlCYXNlPiBSZW5kZXJSdWJ5UnVuOjpjcmVhdGVSdWJ5QmFzZSgpIGNvbnN0
CiB7CiAgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHls
ZVdpdGhEaXNwbGF5KHN0eWxlKCksIEJMT0NLKTsKICAgICBuZXdTdHlsZS5zZXRUZXh0QWxpZ24o
Q0VOVEVSKTsgLy8gRklYTUU6IHVzZSBXRUJLSVRfQ0VOVEVSPwotICAgIGF1dG8gcmVuZGVyZXIg
PSBuZXcgUmVuZGVyUnVieUJhc2UoZG9jdW1lbnQoKSwgV1RGTW92ZShuZXdTdHlsZSkpOworICAg
IGF1dG8gcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJSdWJ5QmFzZT4oZG9jdW1lbnQo
KSwgV1RGTW92ZShuZXdTdHlsZSkpOwogICAgIHJlbmRlcmVyLT5pbml0aWFsaXplU3R5bGUoKTsK
ICAgICByZXR1cm4gcmVuZGVyZXI7CiB9CiAKLVJlbmRlclJ1YnlSdW4qIFJlbmRlclJ1YnlSdW46
OnN0YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnRSdWJ5KQorUmVu
ZGVyUHRyPFJlbmRlclJ1YnlSdW4+IFJlbmRlclJ1YnlSdW46OnN0YXRpY0NyZWF0ZVJ1YnlSdW4o
Y29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnRSdWJ5KQogewogICAgIEFTU0VSVChpc1J1YnkocGFy
ZW50UnVieSkpOwotICAgIGF1dG8gcmVuZGVyZXIgPSBuZXcgUmVuZGVyUnVieVJ1bihwYXJlbnRS
dWJ5LT5kb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlz
cGxheShwYXJlbnRSdWJ5LT5zdHlsZSgpLCBJTkxJTkVfQkxPQ0spKTsKKyAgICBhdXRvIHJlbmRl
cmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyUnVieVJ1bj4ocGFyZW50UnVieS0+ZG9jdW1lbnQo
KSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkocGFyZW50UnVi
eS0+c3R5bGUoKSwgSU5MSU5FX0JMT0NLKSk7CiAgICAgcmVuZGVyZXItPmluaXRpYWxpemVTdHls
ZSgpOwogICAgIHJldHVybiByZW5kZXJlcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSdWJ5UnVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlSdW4uaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTQgKzU2LDE0
IEBAIHB1YmxpYzoKICAgICB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwg
TGF5b3V0VW5pdCBwYWdlSGVpZ2h0ID0gMCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGlzQ2hpbGRB
bGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5k
ZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJP
YmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7Cisg
ICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJy
aWRlOwogCiAgICAgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGdldE92ZXJoYW5nKGJvb2wgZmlyc3RMaW5lLCBSZW5kZXJPYmplY3QqIHN0
YXJ0UmVuZGVyZXIsIFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIsIGZsb2F0JiBzdGFydE92ZXJo
YW5nLCBmbG9hdCYgZW5kT3ZlcmhhbmcpIGNvbnN0OwogCi0gICAgc3RhdGljIFJlbmRlclJ1YnlS
dW4qIHN0YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnRSdWJ5KTsK
KyAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclJ1YnlSdW4+IHN0YXRpY0NyZWF0ZVJ1YnlSdW4o
Y29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnRSdWJ5KTsKICAgICAKICAgICB2b2lkIHVwZGF0ZVBy
aW9yQ29udGV4dEZyb21DYWNoZWRCcmVha0l0ZXJhdG9yKExhenlMaW5lQnJlYWtJdGVyYXRvciYp
IGNvbnN0OwogICAgIHZvaWQgc2V0Q2FjaGVkUHJpb3JDaGFyYWN0ZXJzKFVDaGFyIGxhc3QsIFVD
aGFyIHNlY29uZFRvTGFzdCkKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIGJvb2wgY2Fu
QnJlYWtCZWZvcmUoY29uc3QgTGF6eUxpbmVCcmVha0l0ZXJhdG9yJikgY29uc3Q7CiAgICAgCiBw
cm90ZWN0ZWQ6Ci0gICAgUmVuZGVyUnVieUJhc2UqIGNyZWF0ZVJ1YnlCYXNlKCkgY29uc3Q7Cisg
ICAgUmVuZGVyUHRyPFJlbmRlclJ1YnlCYXNlPiBjcmVhdGVSdWJ5QmFzZSgpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIGJvb2wgaXNSdWJ5UnVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1
ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZp
c2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJl
c2V0U2VjdGlvblBvaW50ZXJJZgogICAgICAgICBwdHIgPSAwOwogfQogCi12b2lkIFJlbmRlclRh
YmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkKQordm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4g
Y2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgYm9vbCB3cmFwSW5Bbm9u
eW1vdXNTZWN0aW9uID0gIWNoaWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKTsKIApAQCAtMTUw
LDE4ICsxNTAsMTggQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0Kgog
ICAgICAgICAgICAgY2FzZSBUQUJMRV9IRUFERVJfR1JPVVA6CiAgICAgICAgICAgICAgICAgcmVz
ZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1faGVhZCwgYmVmb3JlQ2hpbGQpOwogICAgICAg
ICAgICAgICAgIGlmICghbV9oZWFkKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1faGVhZCA9IGRv
d25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBt
X2hlYWQgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkLmdldCgpKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICByZXNldFNlY3Rpb25Qb2lu
dGVySWZOb3RCZWZvcmUobV9maXJzdEJvZHksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX2ZpcnN0Qm9keSkgCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2ZpcnN0
Qm9keSA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNo
aWxkLmdldCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgd3JhcEluQW5v
bnltb3VzU2VjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBUQUJMRV9GT09URVJfR1JPVVA6CiAgICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9u
UG9pbnRlcklmTm90QmVmb3JlKG1fZm9vdCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgICAg
IGlmICghbV9mb290KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZm9vdCA9IGRvd25jYXN0PFJl
bmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpOworICAgICAgICAgICAgICAgICAgICBtX2Zvb3QgPSBk
b3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkLmdldCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC0xNjksNyArMTY5LDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgICAgICAgICAgY2FzZSBUQUJMRV9S
T1dfR1JPVVA6CiAgICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3Jl
KG1fZmlyc3RCb2R5LCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2ZpcnN0
Qm9keSkKLSAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBkb3duY2FzdDxSZW5kZXJU
YWJsZVNlY3Rpb24+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBk
b3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkLmdldCgpKTsKICAgICAgICAgICAgICAg
ICB3cmFwSW5Bbm9ueW1vdXNTZWN0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTg3LDE5ICsxODcsMTkgQEAgdm9pZCBSZW5kZXJU
YWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYg
YmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpCiAgICAgICAgICAgICBiZWZvcmVDaGlsZCA9
IHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChiZWZvcmVDaGlsZCk7CiAKLSAgICAgICAg
UmVuZGVyQm94OjphZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBSZW5kZXJC
b3g6OmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZiAoIWJlZm9yZUNoaWxkICYmIGlzPFJlbmRlclRhYmxlU2VjdGlv
bj4obGFzdENoaWxkKCkpICYmIGxhc3RDaGlsZCgpLT5pc0Fub255bW91cygpICYmICFsYXN0Q2hp
bGQoKS0+aXNCZWZvcmVDb250ZW50KCkpIHsKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVT
ZWN0aW9uPigqbGFzdENoaWxkKCkpLmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgZG93bmNhc3Q8
UmVuZGVyVGFibGVTZWN0aW9uPigqbGFzdENoaWxkKCkpLmFkZENoaWxkKFdURk1vdmUoY2hpbGQp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVm
b3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMp
IHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWN0aW9uID0gYmVmb3JlQ2hpbGQtPnByZXZpb3Vz
U2libGluZygpOwogICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVTZWN0aW9uPihzZWN0aW9uKSAm
JiBzZWN0aW9uLT5pc0Fub255bW91cygpKSB7Ci0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJU
YWJsZVNlY3Rpb24+KCpzZWN0aW9uKS5hZGRDaGlsZChjaGlsZCk7CisgICAgICAgICAgICBkb3du
Y2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KCpzZWN0aW9uKS5hZGRDaGlsZChXVEZNb3ZlKGNoaWxk
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yMTEsMTYgKzIx
MSwxNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QqCiAgICAgICAg
IFJlbmRlclRhYmxlU2VjdGlvbiYgc2VjdGlvbiA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlv
bj4oKmxhc3RCb3gpOwogICAgICAgICBpZiAoYmVmb3JlQ2hpbGQgPT0gJnNlY3Rpb24pCiAgICAg
ICAgICAgICBiZWZvcmVDaGlsZCA9IHNlY3Rpb24uZmlyc3RSb3coKTsKLSAgICAgICAgc2VjdGlv
bi5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBzZWN0aW9uLmFkZENoaWxk
KFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWlzPFJlbmRlclRhYmxlU2VjdGlvbj4oKmJlZm9yZUNo
aWxkKSAmJiBiZWZvcmVDaGlsZC0+c3R5bGUoKS5kaXNwbGF5KCkgIT0gVEFCTEVfQ0FQVElPTiAm
JiBiZWZvcmVDaGlsZC0+c3R5bGUoKS5kaXNwbGF5KCkgIT0gVEFCTEVfQ09MVU1OX0dST1VQKQog
ICAgICAgICBiZWZvcmVDaGlsZCA9IG51bGxwdHI7CiAKLSAgICBhdXRvIHNlY3Rpb24gPSBSZW5k
ZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcyku
cmVsZWFzZSgpOwotICAgIGFkZENoaWxkKHNlY3Rpb24sIGJlZm9yZUNoaWxkKTsKLSAgICBzZWN0
aW9uLT5hZGRDaGlsZChjaGlsZCk7CisgICAgYXV0byBuZXdTZWN0aW9uID0gUmVuZGVyVGFibGVT
ZWN0aW9uOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoKnRoaXMpOworICAgIGF1
dG8mIHNlY3Rpb24gPSAqbmV3U2VjdGlvbjsKKyAgICBhZGRDaGlsZChXVEZNb3ZlKG5ld1NlY3Rp
b24pLCBiZWZvcmVDaGlsZCk7CisgICAgc2VjdGlvbi5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7
CiB9CiAKIHZvaWQgUmVuZGVyVGFibGU6OmFkZENhcHRpb24oY29uc3QgUmVuZGVyVGFibGVDYXB0
aW9uKiBjYXB0aW9uKQpAQCAtMTU3NywxNCArMTU3OCwxNCBAQCBib29sIFJlbmRlclRhYmxlOjpu
b2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyVGFibGU+IFJlbmRlclRhYmxlOjpjcmVhdGVUYWJsZVdpdGhTdHlsZShEb2N1
bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK1JlbmRlclB0cjxSZW5k
ZXJUYWJsZT4gUmVuZGVyVGFibGU6OmNyZWF0ZVRhYmxlV2l0aFN0eWxlKERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIGF1dG8gdGFibGUgPSBzdGQ6
Om1ha2VfdW5pcXVlPFJlbmRlclRhYmxlPihkb2N1bWVudCwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFu
b255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUsIHN0eWxlLmRpc3BsYXkoKSA9PSBJTkxJTkUg
PyBJTkxJTkVfVEFCTEUgOiBUQUJMRSkpOworICAgIGF1dG8gdGFibGUgPSBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJUYWJsZT4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHls
ZVdpdGhEaXNwbGF5KHN0eWxlLCBzdHlsZS5kaXNwbGF5KCkgPT0gSU5MSU5FID8gSU5MSU5FX1RB
QkxFIDogVEFCTEUpKTsKICAgICB0YWJsZS0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAgICAgcmV0dXJu
IHRhYmxlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGU+IFJlbmRlclRhYmxlOjpj
cmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyRWxlbWVudCYgcGFy
ZW50KQorUmVuZGVyUHRyPFJlbmRlclRhYmxlPiBSZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3Vz
V2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQmIHBhcmVudCkKIHsKICAgICBy
ZXR1cm4gUmVuZGVyVGFibGU6OmNyZWF0ZVRhYmxlV2l0aFN0eWxlKHBhcmVudC5kb2N1bWVudCgp
LCBwYXJlbnQuc3R5bGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGUuaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAg
ICAgTGF5b3V0VW5pdCBjYWxjQm9yZGVyRW5kKCkgY29uc3Q7CiAgICAgdm9pZCByZWNhbGNCb3Jk
ZXJzSW5Sb3dEaXJlY3Rpb24oKTsKIAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIGZpbmFsOworICAgIHZvaWQgYWRk
Q2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQgPSAwKSBmaW5hbDsKIAogICAgIHN0cnVjdCBDb2x1bW5TdHJ1Y3QgewogICAgICAgICBl
eHBsaWNpdCBDb2x1bW5TdHJ1Y3QodW5zaWduZWQgaW5pdGlhbFNwYW4gPSAxKQpAQCAtMjUwLDgg
KzI1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJlY2FsY1NlY3Rpb25zKCk7CiAgICAgfQog
Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZT4gY3JlYXRlQW5vbnltb3Vz
V2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBS
ZW5kZXJCb3gmIHJlbmRlcmVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVuZGVyUHRy
PFJlbmRlclRhYmxlPiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVu
ZGVyRWxlbWVudCYpOworICAgIFJlbmRlclB0cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255bW91c0Jv
eFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgY29uc3QgQm9yZGVyVmFsdWUmIHRhYmxlU3RhcnRCb3JkZXJBZGpvaW5pbmdDZWxs
KGNvbnN0IFJlbmRlclRhYmxlQ2VsbCYpIGNvbnN0OwogICAgIGNvbnN0IEJvcmRlclZhbHVlJiB0
YWJsZUVuZEJvcmRlckFkam9pbmluZ0NlbGwoY29uc3QgUmVuZGVyVGFibGVDZWxsJikgY29uc3Q7
CkBAIC0yNzMsNyArMjczLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2ltcGxpZmllZE5vcm1h
bEZsb3dMYXlvdXQoKSBmaW5hbDsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclRhYmxlPiBjcmVhdGVUYWJsZVdpdGhTdHlsZShEb2N1bWVudCYsIGNvbnN0IFJl
bmRlclN0eWxlJik7CisgICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJUYWJsZT4gY3JlYXRlVGFi
bGVXaXRoU3R5bGUoRG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwogCiAgICAgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJSZW5kZXJUYWJsZSI7
IH0KIApAQCAtMzgwLDcgKzM4MCw3IEBAIGlubGluZSBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRl
clRhYmxlOjoKIAogaW5saW5lIGJvb2wgaXNEaXJlY3Rpb25TYW1lKGNvbnN0IFJlbmRlckJveCog
dGFibGVJdGVtLCBjb25zdCBSZW5kZXJCb3gqIG90aGVyVGFibGVJdGVtKSB7IHJldHVybiB0YWJs
ZUl0ZW0gJiYgb3RoZXJUYWJsZUl0ZW0gPyB0YWJsZUl0ZW0tPnN0eWxlKCkuZGlyZWN0aW9uKCkg
PT0gb3RoZXJUYWJsZUl0ZW0tPnN0eWxlKCkuZGlyZWN0aW9uKCkgOiB0cnVlOyB9CiAKLWlubGlu
ZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBSZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3Vz
Qm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29uc3QKK2lubGlu
ZSBSZW5kZXJQdHI8UmVuZGVyQm94PiBSZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3VzQm94V2l0
aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29uc3QKIHsKICAgICByZXR1
cm4gUmVuZGVyVGFibGU6OmNyZWF0ZVRhYmxlV2l0aFN0eWxlKHJlbmRlcmVyLmRvY3VtZW50KCks
IHJlbmRlcmVyLnN0eWxlKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY1LDE0
ICsxMzY1LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpzY3JvbGxiYXJzQ2hhbmdlZCgKICAg
ICAgICAgc2V0SW50cmluc2ljUGFkZGluZ0FmdGVyKGludHJpbnNpY1BhZGRpbmdBZnRlcigpIC0g
c2Nyb2xsYmFySGVpZ2h0KTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlQ2VsbD4g
UmVuZGVyVGFibGVDZWxsOjpjcmVhdGVUYWJsZUNlbGxXaXRoU3R5bGUoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitSZW5kZXJQdHI8UmVuZGVyVGFibGVDZWxs
PiBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZVRhYmxlQ2VsbFdpdGhTdHlsZShEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBhdXRvIGNlbGwgPSBzdGQ6
Om1ha2VfdW5pcXVlPFJlbmRlclRhYmxlQ2VsbD4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVh
dGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBUQUJMRV9DRUxMKSk7CisgICAgYXV0
byBjZWxsID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGFibGVDZWxsPihkb2N1bWVudCwgUmVuZGVy
U3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUsIFRBQkxFX0NFTEwp
KTsKICAgICBjZWxsLT5pbml0aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gY2VsbDsKIH0KIAot
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlQ2VsbD4gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVB
bm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVSb3cmIHBhcmVudCkK
K1JlbmRlclB0cjxSZW5kZXJUYWJsZUNlbGw+IFJlbmRlclRhYmxlQ2VsbDo6Y3JlYXRlQW5vbnlt
b3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlclRhYmxlUm93JiBwYXJlbnQpCiB7CiAg
ICAgcmV0dXJuIFJlbmRlclRhYmxlQ2VsbDo6Y3JlYXRlVGFibGVDZWxsV2l0aFN0eWxlKHBhcmVu
dC5kb2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEw
OCw4ICsxMDgsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBjZWxsV2lkdGhDaGFuZ2VkKCkgY29uc3Qg
eyByZXR1cm4gbV9jZWxsV2lkdGhDaGFuZ2VkOyB9CiAgICAgdm9pZCBzZXRDZWxsV2lkdGhDaGFu
Z2VkKGJvb2wgYiA9IHRydWUpIHsgbV9jZWxsV2lkdGhDaGFuZ2VkID0gYjsgfQogCi0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZUNlbGw+IGNyZWF0ZUFub255bW91c1dpdGhQ
YXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVJvdyYpOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRl
ckJveCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyVGFibGVD
ZWxsPiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVS
b3cmKTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2Ft
ZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaXMgdXNlZCB0byB1bmlmeSB3aGljaCB0YWJsZSBwYXJ0J3Mgc3R5bGUgd2UgdXNl
IGZvciBjb21wdXRpbmcgZGlyZWN0aW9uIGFuZAogICAgIC8vIHdyaXRpbmcgbW9kZS4gV3JpdGlu
ZyBtb2RlcyBhcmUgbm90IGFsbG93ZWQgb24gcm93IGdyb3VwIGFuZCByb3cgYnV0IGRpcmVjdGlv
biBpcy4KQEAgLTEzOCw3ICsxMzgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBjb21wdXRlUHJl
ZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVDZWxsPiBjcmVhdGVUYWJsZUNlbGxXaXRoU3R5bGUo
RG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVu
ZGVyVGFibGVDZWxsPiBjcmVhdGVUYWJsZUNlbGxXaXRoU3R5bGUoRG9jdW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSYpOwogCiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIChpc0Fub255bW91cygpIHx8IGlzUHNldWRvRWxlbWVudCgpKSA/ICJSZW5k
ZXJUYWJsZUNlbGwgKGFub255bW91cykiIDogIlJlbmRlclRhYmxlQ2VsbCI7IH0KIApAQCAtMzc1
LDcgKzM3NSw3IEBAIGlubGluZSB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6aW52YWxpZGF0ZUgKICAg
ICBtX2hhc0VtcHR5Q29sbGFwc2VkRW5kQm9yZGVyID0gZmFsc2U7CiB9CiAKLWlubGluZSBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZUFub255bW91c0Jv
eFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpIGNvbnN0CitpbmxpbmUg
UmVuZGVyUHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVBbm9ueW1vdXNCb3hX
aXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBjb25zdAogewogICAgIHJl
dHVybiBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZVRhYmxlQ2VsbFdpdGhTdHlsZShyZW5kZXJlci5k
b2N1bWVudCgpLCByZW5kZXJlci5zdHlsZSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA2LDcgKzEwNiw3IEBAIGNvbnN0IEJvcmRlclZhbHVlJiBSZW5kZXJUYWJsZVJvdzo6Ym9yZGUK
ICAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJFbmQoKTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVJv
dzo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCkKK3ZvaWQgUmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGlmICghaXM8UmVuZGVy
VGFibGVDZWxsPigqY2hpbGQpKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogbGFzdCA9IGJlZm9y
ZUNoaWxkOwpAQCAtMTE2LDE0ICsxMTYsMTQgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hp
bGQoUmVuZGVyT2JqZQogICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsJiBjZWxsID0gZG93bmNh
c3Q8UmVuZGVyVGFibGVDZWxsPigqbGFzdCk7CiAgICAgICAgICAgICBpZiAoYmVmb3JlQ2hpbGQg
PT0gJmNlbGwpCiAgICAgICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBjZWxsLmZpcnN0Q2hpbGQo
KTsKLSAgICAgICAgICAgIGNlbGwuYWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAg
ICAgICAgIGNlbGwuYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiAh
YmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRo
aXMpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogY2VsbCA9IGJlZm9yZUNoaWxkLT5wcmV2
aW91c1NpYmxpbmcoKTsKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZUNlbGw+KGNlbGwp
ICYmIGNlbGwtPmlzQW5vbnltb3VzKCkpIHsKLSAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5k
ZXJUYWJsZUNlbGw+KCpjZWxsKS5hZGRDaGlsZChjaGlsZCk7CisgICAgICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqY2VsbCkuYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTMy
LDIxICsxMzIsMjMgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZQog
ICAgICAgICBpZiAobGFzdCAmJiBsYXN0LT5wYXJlbnQoKSAmJiBsYXN0LT5wYXJlbnQoKS0+aXNB
bm9ueW1vdXMoKSAmJiAhbGFzdC0+cGFyZW50KCktPmlzQmVmb3JlT3JBZnRlckNvbnRlbnQoKSkg
ewogICAgICAgICAgICAgLy8gSWYgYmVmb3JlQ2hpbGQgaXMgaW5zaWRlIGFuIGFub255bW91cyBj
ZWxsLCBpbnNlcnQgaW50byB0aGUgY2VsbC4KICAgICAgICAgICAgIGlmICghaXM8UmVuZGVyVGFi
bGVDZWxsPigqbGFzdCkpIHsKLSAgICAgICAgICAgICAgICBsYXN0LT5wYXJlbnQoKS0+YWRkQ2hp
bGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICBsYXN0LT5wYXJlbnQoKS0+
YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBJZiBiZWZvcmVDaGlsZCBpcyBp
bnNpZGUgYW4gYW5vbnltb3VzIHJvdywgaW5zZXJ0IGludG8gdGhlIHJvdy4KICAgICAgICAgICAg
IGF1dG8mIHBhcmVudCA9ICpsYXN0LT5wYXJlbnQoKTsKICAgICAgICAgICAgIGlmIChpczxSZW5k
ZXJUYWJsZVJvdz4ocGFyZW50KSkgewotICAgICAgICAgICAgICAgIGF1dG8qIGNlbGwgPSBSZW5k
ZXJUYWJsZUNlbGw6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcykucmVs
ZWFzZSgpOwotICAgICAgICAgICAgICAgIHBhcmVudC5hZGRDaGlsZChjZWxsLCBiZWZvcmVDaGls
ZCk7Ci0gICAgICAgICAgICAgICAgY2VsbC0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAg
ICAgIGF1dG8gbmV3Q2VsbCA9IFJlbmRlclRhYmxlQ2VsbDo6Y3JlYXRlQW5vbnltb3VzV2l0aFBh
cmVudFJlbmRlcmVyKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBhdXRvJiBjZWxsID0gKm5ld0Nl
bGw7CisgICAgICAgICAgICAgICAgcGFyZW50LmFkZENoaWxkKFdURk1vdmUobmV3Q2VsbCksIGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICBjZWxsLmFkZENoaWxkKFdURk1vdmUoY2hpbGQp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAg
ICAgICAgYXV0byogY2VsbCA9IFJlbmRlclRhYmxlQ2VsbDo6Y3JlYXRlQW5vbnltb3VzV2l0aFBh
cmVudFJlbmRlcmVyKCp0aGlzKS5yZWxlYXNlKCk7Ci0gICAgICAgIGFkZENoaWxkKGNlbGwsIGJl
Zm9yZUNoaWxkKTsKLSAgICAgICAgY2VsbC0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICBhdXRv
IG5ld0NlbGwgPSBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5k
ZXJlcigqdGhpcyk7CisgICAgICAgIGF1dG8mIGNlbGwgPSAqbmV3Q2VsbDsKKyAgICAgICAgYWRk
Q2hpbGQoV1RGTW92ZShuZXdDZWxsKSwgYmVmb3JlQ2hpbGQpOworICAgICAgICBjZWxsLmFkZENo
aWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gCiAKQEAgLTE2MCw3
ICsxNjIsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAg
ICAgIHNlY3Rpb24tPmFkZENlbGwoJmNlbGwsIHRoaXMpOwogCiAgICAgQVNTRVJUKCFiZWZvcmVD
aGlsZCB8fCBpczxSZW5kZXJUYWJsZUNlbGw+KCpiZWZvcmVDaGlsZCkpOwotICAgIFJlbmRlckJv
eDo6YWRkQ2hpbGQoJmNlbGwsIGJlZm9yZUNoaWxkKTsKKyAgICBSZW5kZXJCb3g6OmFkZENoaWxk
KFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAKICAgICBpZiAoYmVmb3JlQ2hpbGQgfHwg
bmV4dFJvdygpKQogICAgICAgICBzZWN0aW9uKCktPnNldE5lZWRzQ2VsbFJlY2FsYygpOwpAQCAt
MjcwLDE0ICsyNzIsMTQgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6aW1hZ2VDaGFuZ2VkKFdyYXBw
ZQogICAgIHJlcGFpbnQoKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlUm93PiBS
ZW5kZXJUYWJsZVJvdzo6Y3JlYXRlVGFibGVSb3dXaXRoU3R5bGUoRG9jdW1lbnQmIGRvY3VtZW50
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitSZW5kZXJQdHI8UmVuZGVyVGFibGVSb3c+IFJl
bmRlclRhYmxlUm93OjpjcmVhdGVUYWJsZVJvd1dpdGhTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQs
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBhdXRvIHJvdyA9IHN0ZDo6bWFrZV91
bmlxdWU8UmVuZGVyVGFibGVSb3c+KGRvY3VtZW50LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnlt
b3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgVEFCTEVfUk9XKSk7CisgICAgYXV0byByb3cgPSBj
cmVhdGVSZW5kZXJlcjxSZW5kZXJUYWJsZVJvdz4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVh
dGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBUQUJMRV9ST1cpKTsKICAgICByb3ct
PmluaXRpYWxpemVTdHlsZSgpOwogICAgIHJldHVybiByb3c7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJUYWJsZVJvdz4gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJl
bnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24mIHBhcmVudCkKK1JlbmRlclB0cjxS
ZW5kZXJUYWJsZVJvdz4gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRS
ZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24mIHBhcmVudCkKIHsKICAgICByZXR1cm4g
UmVuZGVyVGFibGVSb3c6OmNyZWF0ZVRhYmxlUm93V2l0aFN0eWxlKHBhcmVudC5kb2N1bWVudCgp
LCBwYXJlbnQuc3R5bGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVSb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGVSb3cuaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlUm93LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBwYWludE91dGxpbmVGb3JSb3dJZk5lZWRlZChQYWludEluZm8mLCBj
b25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJU
YWJsZVJvdz4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlclRh
YmxlU2VjdGlvbiYpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255
bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyVGFibGVSb3c+IGNyZWF0ZUFub255bW91c1dpdGhQ
YXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24mKTsKKyAgICBSZW5kZXJQdHI8
UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJC
b3gmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0Um93SW5kZXgodW5zaWduZWQpOwog
ICAgIGJvb2wgcm93SW5kZXhXYXNTZXQoKSBjb25zdCB7IHJldHVybiBtX3Jvd0luZGV4ICE9IHVu
c2V0Um93SW5kZXg7IH0KQEAgLTU4LDE0ICs1OCwxNCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQm9y
ZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ1N0YXJ0Q2VsbChjb25zdCBSZW5kZXJUYWJsZUNlbGwm
KSBjb25zdDsKICAgICBjb25zdCBCb3JkZXJWYWx1ZSYgYm9yZGVyQWRqb2luaW5nRW5kQ2VsbChj
b25zdCBSZW5kZXJUYWJsZUNlbGwmKSBjb25zdDsKIAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwor
ICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKIAogICAgIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkZXN0cm95QW5kQ29s
bGFwc2VBbm9ueW1vdXNTaWJsaW5nUm93cygpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVSb3c+IGNyZWF0ZVRhYmxlUm93V2l0aFN0eWxlKERvY3Vt
ZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclRh
YmxlUm93PiBjcmVhdGVUYWJsZVJvd1dpdGhTdHlsZShEb2N1bWVudCYsIGNvbnN0IFJlbmRlclN0
eWxlJik7CiAKICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gKGlzQW5vbnltb3VzKCkgfHwgaXNQc2V1ZG9FbGVtZW50KCkpID8gIlJlbmRlclRhYmxl
Um93IChhbm9ueW1vdXMpIiA6ICJSZW5kZXJUYWJsZVJvdyI7IH0KIApAQCAtMTUwLDcgKzE1MCw3
IEBAIGlubGluZSBSZW5kZXJUYWJsZVJvdyogUmVuZGVyVGFibGVTZWN0aW8KICAgICByZXR1cm4g
ZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KFJlbmRlckJveDo6bGFzdENoaWxkKCkpOwogfQogCi1p
bmxpbmUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFu
b255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpIGNvbnN0
CitpbmxpbmUgUmVuZGVyUHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFub255
bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlUm93OjpjcmVhdGVUYWJsZVJvd1dpdGhTdHlsZShyZW5k
ZXJlci5kb2N1bWVudCgpLCByZW5kZXJlci5zdHlsZSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAyMjI2
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9u
Ojp3aWxsQmVSZW1vdmVkRnIKICAgICBzZXROZWVkc0NlbGxSZWNhbGMoKTsKIH0KIAotdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7
CiAgICAgaWYgKCFpczxSZW5kZXJUYWJsZVJvdz4oKmNoaWxkKSkgewogICAgICAgICBSZW5kZXJP
YmplY3QqIGxhc3QgPSBiZWZvcmVDaGlsZDsKQEAgLTEyOCwxNCArMTI4LDE0IEBAIHZvaWQgUmVu
ZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXIKICAgICAgICAgICAgIFJlbmRlclRhYmxl
Um93JiByb3cgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKmxhc3QpOwogICAgICAgICAgICAg
aWYgKGJlZm9yZUNoaWxkID09ICZyb3cpCiAgICAgICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBy
b3cuZmlyc3RDZWxsKCk7Ci0gICAgICAgICAgICByb3cuYWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNo
aWxkKTsKKyAgICAgICAgICAgIHJvdy5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hp
bGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGJlZm9y
ZUNoaWxkICYmICFiZWZvcmVDaGlsZC0+aXNBbm9ueW1vdXMoKSAmJiBiZWZvcmVDaGlsZC0+cGFy
ZW50KCkgPT0gdGhpcykgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByb3cgPSBiZWZvcmVD
aGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVS
b3c+KHJvdykgJiYgcm93LT5pc0Fub255bW91cygpKSB7Ci0gICAgICAgICAgICAgICAgZG93bmNh
c3Q8UmVuZGVyVGFibGVSb3c+KCpyb3cpLmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKnJvdykuYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MTQ2LDEzICsxNDYsMTQgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRl
cgogICAgICAgICB3aGlsZSAobGFzdEJveCAmJiBsYXN0Qm94LT5wYXJlbnQoKS0+aXNBbm9ueW1v
dXMoKSAmJiAhaXM8UmVuZGVyVGFibGVSb3c+KCpsYXN0Qm94KSkKICAgICAgICAgICAgIGxhc3RC
b3ggPSBsYXN0Qm94LT5wYXJlbnQoKTsKICAgICAgICAgaWYgKGxhc3RCb3ggJiYgbGFzdEJveC0+
aXNBbm9ueW1vdXMoKSAmJiAhbGFzdEJveC0+aXNCZWZvcmVPckFmdGVyQ29udGVudCgpKSB7Ci0g
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKmxhc3RCb3gpLmFkZENoaWxkKGNo
aWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4o
Kmxhc3RCb3gpLmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvKiByb3cgPSBSZW5kZXJUYWJs
ZVJvdzo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKCp0aGlzKS5yZWxlYXNlKCk7
Ci0gICAgICAgIGFkZENoaWxkKHJvdywgYmVmb3JlQ2hpbGQpOwotICAgICAgICByb3ctPmFkZENo
aWxkKGNoaWxkKTsKKyAgICAgICAgYXV0byBuZXdSb3cgPSBSZW5kZXJUYWJsZVJvdzo6Y3JlYXRl
QW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKCp0aGlzKTsKKyAgICAgICAgYXV0byYgcm93ID0g
Km5ld1JvdzsKKyAgICAgICAgYWRkQ2hpbGQoV1RGTW92ZShuZXdSb3cpLCBiZWZvcmVDaGlsZCk7
CisgICAgICAgIHJvdy5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTE3Niw3ICsxNzcsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRk
Q2hpbGQoUmVuZGVyCiAgICAgICAgIGJlZm9yZUNoaWxkID0gc3BsaXRBbm9ueW1vdXNCb3hlc0Fy
b3VuZENoaWxkKGJlZm9yZUNoaWxkKTsKIAogICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgaXM8
UmVuZGVyVGFibGVSb3c+KCpiZWZvcmVDaGlsZCkpOwotICAgIFJlbmRlckJveDo6YWRkQ2hpbGQo
Y2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBSZW5kZXJCb3g6OmFkZENoaWxkKFdURk1vdmUoY2hp
bGQpLCBiZWZvcmVDaGlsZCk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVS
b3dzKHVuc2lnbmVkIG51bVJvd3MpCkBAIC0xNTkwLDE0ICsxNTkxLDE0IEBAIENvbGxhcHNlZEJv
cmRlclZhbHVlIFJlbmRlclRhYmxlU2VjdGlvbjoKICAgICByZXR1cm4gaXQtPnZhbHVlOwogfQog
Ci1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVTZWN0aW9uPiBSZW5kZXJUYWJsZVNlY3Rpb246
OmNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkKK1JlbmRlclB0cjxSZW5kZXJUYWJsZVNlY3Rpb24+IFJlbmRlclRh
YmxlU2VjdGlvbjo6Y3JlYXRlVGFibGVTZWN0aW9uV2l0aFN0eWxlKERvY3VtZW50JiBkb2N1bWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIGF1dG8gc2VjdGlvbiA9IHN0ZDo6
bWFrZV91bmlxdWU8UmVuZGVyVGFibGVTZWN0aW9uPihkb2N1bWVudCwgUmVuZGVyU3R5bGU6OmNy
ZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUsIFRBQkxFX1JPV19HUk9VUCkpOwor
ICAgIGF1dG8gc2VjdGlvbiA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRhYmxlU2VjdGlvbj4oZG9j
dW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxl
LCBUQUJMRV9ST1dfR1JPVVApKTsKICAgICBzZWN0aW9uLT5pbml0aWFsaXplU3R5bGUoKTsKICAg
ICByZXR1cm4gc2VjdGlvbjsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlU2VjdGlv
bj4gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIo
Y29uc3QgUmVuZGVyVGFibGUmIHBhcmVudCkKK1JlbmRlclB0cjxSZW5kZXJUYWJsZVNlY3Rpb24+
IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNv
bnN0IFJlbmRlclRhYmxlJiBwYXJlbnQpCiB7CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlU2VjdGlv
bjo6Y3JlYXRlVGFibGVTZWN0aW9uV2l0aFN0eWxlKHBhcmVudC5kb2N1bWVudCgpLCBwYXJlbnQu
c3R5bGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlU2VjdGlvbi5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAg
cHVibGljOgogICAgIFJlbmRlclRhYmxlUm93KiBmaXJzdFJvdygpIGNvbnN0OwogICAgIFJlbmRl
clRhYmxlUm93KiBsYXN0Um93KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9i
amVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CiAKICAgICBzdGQ6Om9wdGlvbmFsPGludD4g
Zmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVycmlkZTsKIApAQCAtMTQyLDggKzE0Miw4IEBA
IHB1YmxpYzoKICAgICAvLyBGSVhNRTogV2UgbWF5IHdhbnQgdG8gaW50cm9kdWNlIGEgc3RydWN0
dXJlIGhvbGRpbmcgdGhlIGluLWZsdXggbGF5b3V0IGluZm9ybWF0aW9uLgogICAgIExheW91dFVu
aXQgZGlzdHJpYnV0ZUV4dHJhTG9naWNhbEhlaWdodFRvUm93cyhMYXlvdXRVbml0IGV4dHJhTG9n
aWNhbEhlaWdodCk7CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlU2Vj
dGlvbj4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlclRhYmxl
Jik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gY3JlYXRlQW5vbnltb3VzQm94V2l0
aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3RhdGlj
IFJlbmRlclB0cjxSZW5kZXJUYWJsZVNlY3Rpb24+IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRS
ZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZSYpOworICAgIFJlbmRlclB0cjxSZW5kZXJCb3g+IGNy
ZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIAogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmKSBvdmVycmlkZTsKIApAQCAtMTUxLDcgKzE1MSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lk
IHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0
eWxlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclRhYmxlU2VjdGlvbj4gY3JlYXRlVGFibGVTZWN0aW9uV2l0aFN0eWxlKERvY3VtZW50Jiwg
Y29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclRhYmxlU2Vj
dGlvbj4gY3JlYXRlVGFibGVTZWN0aW9uV2l0aFN0eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVy
U3R5bGUmKTsKIAogICAgIGVudW0gU2hvdWxkSW5jbHVkZUFsbEludGVyc2VjdGluZ0NlbGxzIHsK
ICAgICAgICAgSW5jbHVkZUFsbEludGVyc2VjdGluZ0NlbGxzLApAQCAtMzM0LDcgKzMzNCw3IEBA
IGlubGluZSBDZWxsU3BhbiBSZW5kZXJUYWJsZVNlY3Rpb246OmZ1bGwKICAgICByZXR1cm4gQ2Vs
bFNwYW4oMCwgbV9ncmlkLnNpemUoKSk7CiB9CiAKLWlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyQm94PiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlw
ZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpIGNvbnN0CitpbmxpbmUgUmVuZGVyUHRyPFJl
bmRlckJveD4gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5
cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBjb25zdAogewogICAgIHJldHVybiBSZW5k
ZXJUYWJsZVNlY3Rpb246OmNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHlsZShyZW5kZXJlci5kb2N1
bWVudCgpLCByZW5kZXJlci5zdHlsZSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAJKHJldmlzaW9u
IDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1M
RmVuY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTUgKzkzLDE1IEBAIFJlbmRlclB0cjxS
ZW5kZXJNYXRoTUxGZW5jZWRPcGVyYXRvcj4gUmUKIAogdm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6
Om1ha2VGZW5jZXMoKQogewotICAgIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxGZW5jZWRPcGVyYXRv
cj4gb3BlbkZlbmNlID0gY3JlYXRlTWF0aE1MT3BlcmF0b3IobV9vcGVuLCBNYXRoTUxPcGVyYXRv
ckRpY3Rpb25hcnk6OlByZWZpeCwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSk7Ci0g
ICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChvcGVuRmVuY2UubGVha1B0cigpLCBmaXJzdENo
aWxkKCkpOworICAgIGF1dG8gb3BlbkZlbmNlID0gY3JlYXRlTWF0aE1MT3BlcmF0b3IobV9vcGVu
LCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlByZWZpeCwgTWF0aE1MT3BlcmF0b3JEaWN0aW9u
YXJ5OjpGZW5jZSk7CisgICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChXVEZNb3ZlKG9wZW5G
ZW5jZSksIGZpcnN0Q2hpbGQoKSk7CiAKLSAgICBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MRmVuY2Vk
T3BlcmF0b3I+IGNsb3NlRmVuY2UgPSBjcmVhdGVNYXRoTUxPcGVyYXRvcihtX2Nsb3NlLCBNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OlBvc3RmaXgsIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
RmVuY2UpOworICAgIGF1dG8gY2xvc2VGZW5jZSA9IGNyZWF0ZU1hdGhNTE9wZXJhdG9yKG1fY2xv
c2UsIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6UG9zdGZpeCwgTWF0aE1MT3BlcmF0b3JEaWN0
aW9uYXJ5OjpGZW5jZSk7CiAgICAgbV9jbG9zZUZlbmNlUmVuZGVyZXIgPSBjbG9zZUZlbmNlLmdl
dCgpOwotICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoY2xvc2VGZW5jZS5sZWFrUHRyKCkp
OworICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoV1RGTW92ZShjbG9zZUZlbmNlKSk7CiB9
CiAKLXZvaWQgUmVuZGVyTWF0aE1MRmVuY2VkOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6OmFk
ZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQogewogICAgIC8vIG1ha2UgdGhlIGZlbmNlcyBpZiB0aGUgcmVuZGVyIG9iamVjdCBp
cyBlbXB0eQogICAgIGlmICghZmlyc3RDaGlsZCgpKQpAQCAtMTM5LDE0ICsxMzksMTQgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxGZW5jZWQ6OmFkZENoaWxkKFJlbmRlcgogCiAgICAgaWYgKGJlZm9yZUNo
aWxkKSB7CiAgICAgICAgIC8vIEFkZGluZyB8eHwgYmVmb3JlIGFuIGV4aXN0aW5nIHx5fCBlLmcu
IGluIGVsZW1lbnQgKHkpIC0gZmlyc3QgaW5zZXJ0IG91ciBuZXcgY2hpbGQgfHh8LCB0aGVuIGl0
cyBzZXBhcmF0b3IsIHRvIGdldCAoeCwgeSkuCi0gICAgICAgIFJlbmRlck1hdGhNTFJvdzo6YWRk
Q2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRD
aGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICBpZiAoc2VwYXJhdG9y
UmVuZGVyZXIpCi0gICAgICAgICAgICBSZW5kZXJNYXRoTUxSb3c6OmFkZENoaWxkKHNlcGFyYXRv
clJlbmRlcmVyLmxlYWtQdHIoKSwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgUmVuZGVyTWF0
aE1MUm93OjphZGRDaGlsZChXVEZNb3ZlKHNlcGFyYXRvclJlbmRlcmVyKSwgYmVmb3JlQ2hpbGQp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEFkZGluZyB8eXwgYXQgdGhlIGVuZCBvZiBhbiBl
eGlzdGluZyBlbGVtZW50IGUuZy4gKHgpIC0gaW5zZXJ0IHRoZSBzZXBhcmF0b3IgZmlyc3QgYmVm
b3JlIHRoZSBjbG9zaW5nIGZlbmNlLCB0aGVuIHx5fCwgdG8gZ2V0ICh4LCB5KS4KICAgICAgICAg
aWYgKHNlcGFyYXRvclJlbmRlcmVyKQotICAgICAgICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRD
aGlsZChzZXBhcmF0b3JSZW5kZXJlci5sZWFrUHRyKCksIG1fY2xvc2VGZW5jZVJlbmRlcmVyKTsK
LSAgICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChjaGlsZCwgbV9jbG9zZUZlbmNlUmVu
ZGVyZXIpOworICAgICAgICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChXVEZNb3ZlKHNl
cGFyYXRvclJlbmRlcmVyKSwgbV9jbG9zZUZlbmNlUmVuZGVyZXIpOworICAgICAgICBSZW5kZXJN
YXRoTUxSb3c6OmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBtX2Nsb3NlRmVuY2VSZW5kZXJlcik7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEZlbmNlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVy
TWF0aE1MRmVuY2VkKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGNvbnN0IGNo
YXIqIHJlbmRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiUmVuZGVyTWF0aE1MRmVuY2Vk
IjsgfQotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkgZmluYWw7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVy
T2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkgZmluYWw7CiAgICAgdm9p
ZCB1cGRhdGVGcm9tRWxlbWVudCgpIGZpbmFsOwogCiAgICAgUmVuZGVyUHRyPFJlbmRlck1hdGhN
TEZlbmNlZE9wZXJhdG9yPiBjcmVhdGVNYXRoTUxPcGVyYXRvcihjb25zdCBTdHJpbmcmIG9wZXJh
dG9yU3RyaW5nLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZvcm0sIE1hdGhNTE9wZXJhdG9y
RGljdGlvbmFyeTo6RmxhZyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg4LDE2ICs4OCwxNiBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0
KCkKICAgICBjbGVhck5lZWRzTGF5b3V0KCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHQ29udGFpbmVy
OjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KQordm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewotICAgIFJlbmRlclNW
R01vZGVsT2JqZWN0OjphZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOwotICAgIFNWR1Jlc291
cmNlc0NhY2hlOjpjbGllbnRXYXNBZGRlZFRvVHJlZSgqY2hpbGQpOworICAgIGF1dG8mIGNoaWxk
ID0gYmFzZUFkZENoaWxkPFJlbmRlclNWR01vZGVsT2JqZWN0PihXVEZNb3ZlKG5ld0NoaWxkKSwg
YmVmb3JlQ2hpbGQpOworICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRXYXNBZGRlZFRvVHJl
ZShjaGlsZCk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpyZW1vdmVDaGlsZChSZW5k
ZXJPYmplY3QmIGNoaWxkKQorUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyU1ZHQ29udGFp
bmVyOjp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAgICBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKGNoaWxkKTsKLSAgICBSZW5kZXJTVkdN
b2RlbE9iamVjdDo6cmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIHJldHVybiBSZW5kZXJTVkdNb2Rl
bE9iamVjdDo6dGFrZUNoaWxkKGNoaWxkKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHJldmlzaW9uIDIyMjYw
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBs
YXlvdXQoKSBvdmVycmlkZTsKIAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIGZpbmFsOwotICAgIHZvaWQgcmVtb3Zl
Q2hpbGQoUmVuZGVyT2JqZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8
UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIGZpbmFs
OworICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBm
aW5hbDsKICAgICB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNv
bnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiBwYWludENvbnRhaW5lciA9IDApIGZpbmFsOwogCiAgICAgRmxvYXRSZWN0IG9iamVj
dEJvdW5kaW5nQm94KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lLmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMjkgKzEyMCwyOCBA
QCB2b2lkIFJlbmRlclNWR0lubGluZTo6dXBkYXRlRnJvbVN0eWxlKCkKICAgICBzZXRJbmxpbmUo
dHJ1ZSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSW5saW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3Qq
IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJTVkdJbmxpbmU6
OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkKQogewotICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9y
ZUNoaWxkKTsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoKmNo
aWxkKTsKKyAgICBhdXRvJiBjaGlsZCA9IGJhc2VBZGRDaGlsZDxSZW5kZXJJbmxpbmU+KFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVu
dFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsKIAogICAgIGlmIChhdXRvKiB0ZXh0QW5jZXN0b3IgPSBS
ZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoKnRoaXMpKQotICAgICAg
ICB0ZXh0QW5jZXN0b3ItPnN1YnRyZWVDaGlsZFdhc0FkZGVkKGNoaWxkKTsKKyAgICAgICAgdGV4
dEFuY2VzdG9yLT5zdWJ0cmVlQ2hpbGRXYXNBZGRlZCgmY2hpbGQpOwogfQogCi12b2lkIFJlbmRl
clNWR0lubGluZTo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IFJlbmRlclNWR0lubGluZTo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hp
bGQpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJl
ZShjaGlsZCk7CiAKICAgICBhdXRvKiB0ZXh0QW5jZXN0b3IgPSBSZW5kZXJTVkdUZXh0Ojpsb2Nh
dGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoKnRoaXMpOwotICAgIGlmICghdGV4dEFuY2VzdG9yKSB7
Ci0gICAgICAgIFJlbmRlcklubGluZTo6cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmICghdGV4dEFuY2VzdG9yKQorICAgICAgICByZXR1cm4gUmVuZGVy
SW5saW5lOjp0YWtlQ2hpbGQoY2hpbGQpOwogCiAgICAgVmVjdG9yPFNWR1RleHRMYXlvdXRBdHRy
aWJ1dGVzKiwgMj4gYWZmZWN0ZWRBdHRyaWJ1dGVzOwogICAgIHRleHRBbmNlc3Rvci0+c3VidHJl
ZUNoaWxkV2lsbEJlUmVtb3ZlZCgmY2hpbGQsIGFmZmVjdGVkQXR0cmlidXRlcyk7Ci0gICAgUmVu
ZGVySW5saW5lOjpyZW1vdmVDaGlsZChjaGlsZCk7CisgICAgYXV0byB0YWtlbkNoaWxkID0gUmVu
ZGVySW5saW5lOjp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIHRleHRBbmNlc3Rvci0+c3VidHJlZUNo
aWxkV2FzUmVtb3ZlZChhZmZlY3RlZEF0dHJpYnV0ZXMpOworICAgIHJldHVybiB0YWtlbkNoaWxk
OwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lu
bGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW5saW5lLmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDggQEAg
cHJpdmF0ZToKICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIGZpbmFsOwogICAgIHZvaWQgc3R5
bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
IGZpbmFsOwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVDaGls
ZChSZW5kZXJPYmplY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmlu
YWw7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYp
IGZpbmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiAyMjI2MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDAsMTYgKzMwMCwxNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnN0eWxl
RGlkQ2hhbmdlKFN0eWxlCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdl
ZCgqdGhpcywgZGlmZiwgc3R5bGUoKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUm9vdDo6YWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQg
UmVuZGVyU1ZHUm9vdDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6OmFkZENo
aWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdh
c0FkZGVkVG9UcmVlKCpjaGlsZCk7CisgICAgYXV0byYgY2hpbGQgPSAqbmV3Q2hpbGQ7CisgICAg
UmVuZGVyUmVwbGFjZWQ6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7
CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsKIH0K
IAotdm9pZCBSZW5kZXJTVkdSb290OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQor
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyU1ZHUm9vdDo6dGFrZUNoaWxkKFJlbmRlck9i
amVjdCYgY2hpbGQpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92
ZWRGcm9tVHJlZShjaGlsZCk7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6OnJlbW92ZUNoaWxkKGNoaWxk
KTsKKyAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OnRha2VDaGlsZChjaGlsZCk7CiB9CiAKIC8v
IFJlbmRlckJveCBtZXRob2RzIHdpbGwgZXhwZWN0IGNvb3JkaW5hdGVzIHcvbyBhbnkgdHJhbnNm
b3JtcyBpbiBjb29yZGluYXRlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw4
IEBAIHByaXZhdGU6CiAgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKSBvdmVycmlkZTsK
IAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJT
dHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0
KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGls
ZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IDApIG92ZXJyaWRlOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChS
ZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9j
YWxUb1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDIyMjYw
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUxNywyMiArNTE3LDIzIEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0
OjpyZXBhaW50UmVjdEluTG8KICAgICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKLXZvaWQgUmVu
ZGVyU1ZHVGV4dDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyU1ZHVGV4dDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVu
ZGVyU1ZHQmxvY2s6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgYXV0byYgY2hp
bGQgPSBiYXNlQWRkQ2hpbGQ8UmVuZGVyU1ZHQmxvY2s+KFdURk1vdmUobmV3Q2hpbGQpLCBiZWZv
cmVDaGlsZCk7CiAKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUo
KmNoaWxkKTsKLSAgICBzdWJ0cmVlQ2hpbGRXYXNBZGRlZChjaGlsZCk7CisgICAgU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsKKyAgICBzdWJ0cmVlQ2hpbGRX
YXNBZGRlZCgmY2hpbGQpOwogfQogCi12b2lkIFJlbmRlclNWR1RleHQ6OnJlbW92ZUNoaWxkKFJl
bmRlck9iamVjdCYgY2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJTVkdUZXh0
Ojp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAgICBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKGNoaWxkKTsKIAogICAgIFZlY3RvcjxTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcyosIDI+IGFmZmVjdGVkQXR0cmlidXRlczsKICAgICBzdWJ0cmVl
Q2hpbGRXaWxsQmVSZW1vdmVkKCZjaGlsZCwgYWZmZWN0ZWRBdHRyaWJ1dGVzKTsKLSAgICBSZW5k
ZXJTVkdCbG9jazo6cmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIGF1dG8gdGFrZW5DaGlsZCA9IFJl
bmRlclNWR0Jsb2NrOjp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIHN1YnRyZWVDaGlsZFdhc1JlbW92
ZWQoYWZmZWN0ZWRBdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gdGFrZW5DaGlsZDsKIH0KIAogLy8g
Rml4IGZvciA8cmRhcjovL3Byb2JsZW0vODA0ODg3NT4uIFdlIHNob3VsZCBub3QgcmVuZGVyIDpm
aXJzdC1saW5lIENTUyBTdHlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmLCBNYXBD
b29yZGluYXRlc0ZsYWdzLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgY29u
c3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVD
aGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0
cikgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRl
ck9iamVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7
CiAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaAkocmV2aXNpb24gMjIyNjA3KQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlbmRlckVsZW1lbnQmIHBh
cmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9Ci0gICAgdm9pZCBpbnNlcnQoUmVuZGVy
T2JqZWN0Jik7CisgICAgdm9pZCBpbnNlcnQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4pOwogICAg
IGJvb2wgY2FuSW5zZXJ0KFJlbmRlckVsZW1lbnQmKSBjb25zdDsKICAgICBib29sIGNhbkluc2Vy
dChSZW5kZXJUZXh0JikgY29uc3Q7CiAKQEAgLTc4LDEwICs3OCwxMCBAQCBpbmxpbmUgYm9vbCBS
ZW5kZXJUcmVlUG9zaXRpb246OmNhbkluc2VyCiAgICAgcmV0dXJuIG1fcGFyZW50LmlzQ2hpbGRB
bGxvd2VkKHJlbmRlcmVyLCBtX3BhcmVudC5zdHlsZSgpKTsKIH0KIAotaW5saW5lIHZvaWQgUmVu
ZGVyVHJlZVBvc2l0aW9uOjppbnNlcnQoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKK2lubGluZSB2
b2lkIFJlbmRlclRyZWVQb3NpdGlvbjo6aW5zZXJ0KFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHJl
bmRlcmVyKQogewogICAgIEFTU0VSVChtX2hhc1ZhbGlkTmV4dFNpYmxpbmcpOwotICAgIG1fcGFy
ZW50LmFkZENoaWxkKCZyZW5kZXJlciwgbV9uZXh0U2libGluZyk7CisgICAgbV9wYXJlbnQuYWRk
Q2hpbGQoV1RGTW92ZShyZW5kZXJlciksIG1fbmV4dFNpYmxpbmcpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0
ZXIuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJU
cmVlVXBkYXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OSwyNyArMzU5LDI1IEBAIHZvaWQg
UmVuZGVyVHJlZVVwZGF0ZXI6OmNyZWF0ZVJlbmRlcmVyKEUKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUmVuZGVyVHJlZVBvc2l0aW9uIGluc2VydGlvblBvc2l0aW9uID0gY29tcHV0ZUluc2VydGlv
blBvc2l0aW9uKCk7Ci0gICAgUmVuZGVyRWxlbWVudCogbmV3UmVuZGVyZXIgPSBlbGVtZW50LmNy
ZWF0ZUVsZW1lbnRSZW5kZXJlcihXVEZNb3ZlKHN0eWxlKSwgaW5zZXJ0aW9uUG9zaXRpb24pLmxl
YWtQdHIoKTsKKyAgICBhdXRvIG5ld1JlbmRlcmVyID0gZWxlbWVudC5jcmVhdGVFbGVtZW50UmVu
ZGVyZXIoV1RGTW92ZShzdHlsZSksIGluc2VydGlvblBvc2l0aW9uKTsKICAgICBpZiAoIW5ld1Jl
bmRlcmVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpbnNlcnRpb25Qb3NpdGlvbi5jYW5J
bnNlcnQoKm5ld1JlbmRlcmVyKSkgewotICAgICAgICBuZXdSZW5kZXJlci0+ZGVzdHJveSgpOwor
ICAgIGlmICghaW5zZXJ0aW9uUG9zaXRpb24uY2FuSW5zZXJ0KCpuZXdSZW5kZXJlcikpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBlbGVtZW50LnNldFJlbmRlcmVyKG5ld1JlbmRlcmVy
KTsKKyAgICBlbGVtZW50LnNldFJlbmRlcmVyKG5ld1JlbmRlcmVyLmdldCgpKTsKIAogICAgIG5l
d1JlbmRlcmVyLT5pbml0aWFsaXplU3R5bGUoKTsKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKICAgICBpZiAobV9kb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4oKSAmJiBtX2RvY3VtZW50
LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpID09ICZlbGVtZW50KSB7Ci0gICAgICAg
IG5ld1JlbmRlcmVyID0gUmVuZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmRlcmVyKG5ld1JlbmRlcmVy
LCAmaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1fZG9jdW1lbnQpOworICAgICAgICBuZXdS
ZW5kZXJlciA9IFJlbmRlckZ1bGxTY3JlZW46OndyYXBOZXdSZW5kZXJlcihXVEZNb3ZlKG5ld1Jl
bmRlcmVyKSwgaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1fZG9jdW1lbnQpOwogICAgICAg
ICBpZiAoIW5ld1JlbmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgot
ICAgIC8vIE5vdGU6IEFkZGluZyBuZXdSZW5kZXJlciBpbnN0ZWFkIG9mIHJlbmRlcmVyKCkuIHJl
bmRlcmVyKCkgbWF5IGJlIGEgY2hpbGQgb2YgbmV3UmVuZGVyZXIuCi0gICAgaW5zZXJ0aW9uUG9z
aXRpb24uaW5zZXJ0KCpuZXdSZW5kZXJlcik7CisKKyAgICBpbnNlcnRpb25Qb3NpdGlvbi5pbnNl
cnQoV1RGTW92ZShuZXdSZW5kZXJlcikpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
ID0gbV9kb2N1bWVudC5heE9iamVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT51cGRhdGVDYWNo
ZUFmdGVyTm9kZUlzQXR0YWNoZWQoJmVsZW1lbnQpOwpAQCAtNDQxLDcgKzQzOSw3IEBAIHN0YXRp
YyB2b2lkIGNyZWF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXgKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdGV4dE5vZGUuc2V0UmVuZGVyZXIobmV3UmVuZGVyZXIuZ2V0KCkpOwotICAgIHJlbmRlclRy
ZWVQb3NpdGlvbi5pbnNlcnQoKm5ld1JlbmRlcmVyLmxlYWtQdHIoKSk7CisgICAgcmVuZGVyVHJl
ZVBvc2l0aW9uLmluc2VydChXVEZNb3ZlKG5ld1JlbmRlcmVyKSk7CiB9CiAKIHZvaWQgUmVuZGVy
VHJlZVVwZGF0ZXI6OnVwZGF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXh0LCBjb25zdCBTdHlsZTo6
VGV4dFVwZGF0ZSogdGV4dFVwZGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRl
clRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCShyZXZpc2lvbiAyMjI2MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgc3RhdGljIHZvaWQgdXBkYXRl
Rmlyc3RMZXR0ZXJTdHlsZShSZW5kZQogCiAgICAgaWYgKFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2Uo
Zmlyc3RMZXR0ZXItPnN0eWxlKCksIHBzZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0YWNoKSB7CiAg
ICAgICAgIC8vIFRoZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgbmVlZHMgdG8gYmUgcmVwbGFjZWQu
IENyZWF0ZSBhIG5ldyByZW5kZXJlciBvZiB0aGUgcmlnaHQgdHlwZS4KLSAgICAgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIG5ld0ZpcnN0TGV0dGVyOworICAgICAgICBSZW5kZXJQdHI8UmVuZGVy
Qm94TW9kZWxPYmplY3Q+IG5ld0ZpcnN0TGV0dGVyOwogICAgICAgICBpZiAocHNldWRvU3R5bGUu
ZGlzcGxheSgpID09IElOTElORSkKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gbmV3IFJl
bmRlcklubGluZShmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRvU3R5
bGUpKTsKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
SW5saW5lPihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRvU3R5bGUp
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBuZXcgUmVuZGVy
QmxvY2tGbG93KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHls
ZSkpOworICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJC
bG9ja0Zsb3c+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHls
ZSkpOwogICAgICAgICBuZXdGaXJzdExldHRlci0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAKICAgICAg
ICAgLy8gTW92ZSB0aGUgZmlyc3QgbGV0dGVyIGludG8gdGhlIG5ldyByZW5kZXJlci4KQEAgLTEy
MCw4ICsxMjAsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVGaXJzdExldHRlclN0eWxlKFJlbmRlCiAg
ICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hp
bGQoKSkgewogICAgICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpjaGlsZCkpCiAgICAgICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKS5yZW1vdmVBbmREZXN0cm95VGV4
dEJveGVzKCk7Ci0gICAgICAgICAgICBmaXJzdExldHRlci0+cmVtb3ZlQ2hpbGQoKmNoaWxkKTsK
LSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChjaGlsZCwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBhdXRvIHRvTW92ZSA9IGZpcnN0TGV0dGVyLT50YWtlQ2hpbGQoKmNoaWxkKTsK
KyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChXVEZNb3ZlKHRvTW92ZSkpOwog
ICAgICAgICB9CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGZpcnN0TGV0
dGVyLT5uZXh0U2libGluZygpOwpAQCAtMTMxLDEyICsxMzEsOCBAQCBzdGF0aWMgdm9pZCB1cGRh
dGVGaXJzdExldHRlclN0eWxlKFJlbmRlCiAgICAgICAgICAgICByZW1haW5pbmdUZXh0LT5zZXRG
aXJzdExldHRlcigqbmV3Rmlyc3RMZXR0ZXIpOwogICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIt
PnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsKICAgICAgICAgfQot
ICAgICAgICAvLyBUbyBwcmV2ZW50IHJlbW92YWwgb2Ygc2luZ2xlIGFub255bW91cyBibG9jayBp
biBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQgYW5kIGNhdXNpbmcKLSAgICAgICAgLy8gfG5leHRT
aWJsaW5nfCB0byBnbyBzdGFsZSwgd2UgcmVtb3ZlIHRoZSBvbGQgZmlyc3QgbGV0dGVyIHVzaW5n
IHJlbW92ZUNoaWxkTm9kZSBmaXJzdC4KLSAgICAgICAgZmlyc3RMZXR0ZXJDb250YWluZXItPnJl
bW92ZUNoaWxkSW50ZXJuYWwoKmZpcnN0TGV0dGVyLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGls
ZHJlbik7Ci0gICAgICAgIGZpcnN0TGV0dGVyLT5kZXN0cm95KCk7Ci0gICAgICAgIGZpcnN0TGV0
dGVyID0gbmV3Rmlyc3RMZXR0ZXI7Ci0gICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRD
aGlsZChmaXJzdExldHRlciwgbmV4dFNpYmxpbmcpOworICAgICAgICBmaXJzdExldHRlckNvbnRh
aW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKCpmaXJzdExldHRlcik7CisgICAgICAgIGZpcnN0
TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgbmV4dFNp
YmxpbmcpOwogICAgIH0gZWxzZQogICAgICAgICBmaXJzdExldHRlci0+c2V0U3R5bGUoV1RGTW92
ZShwc2V1ZG9TdHlsZSkpOwogfQpAQCAtMTQ1LDEzICsxNDEsMTQgQEAgc3RhdGljIHZvaWQgY3Jl
YXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihSZQogewogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0
dGVyQ29udGFpbmVyID0gY3VycmVudFRleHRDaGlsZC5wYXJlbnQoKTsKICAgICBhdXRvIHBzZXVk
b1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCAqZmlyc3RMZXR0
ZXJDb250YWluZXIpOwotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmaXJzdExldHRlciA9IG51
bGxwdHI7CisgICAgUmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBuZXdGaXJzdExldHRl
cjsKICAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKLSAgICAgICAgZmly
c3RMZXR0ZXIgPSBuZXcgUmVuZGVySW5saW5lKGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwg
V1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJl
bmRlcmVyPFJlbmRlcklubGluZT4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3Zl
KHBzZXVkb1N0eWxlKSk7CiAgICAgZWxzZQotICAgICAgICBmaXJzdExldHRlciA9IG5ldyBSZW5k
ZXJCbG9ja0Zsb3coZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0
eWxlKSk7Ci0gICAgZmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIGZpcnN0TGV0
dGVyQ29udGFpbmVyLT5hZGRDaGlsZChmaXJzdExldHRlciwgJmN1cnJlbnRUZXh0Q2hpbGQpOwor
ICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4o
Zmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7CisgICAg
bmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIGF1dG8mIGZpcnN0TGV0dGVy
ID0gKm5ld0ZpcnN0TGV0dGVyOworICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChX
VEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgJmN1cnJlbnRUZXh0Q2hpbGQpOwogCiAgICAgLy8gVGhl
IG9yaWdpbmFsIHN0cmluZyBpcyBnb2luZyB0byBiZSBlaXRoZXIgYSBnZW5lcmF0ZWQgY29udGVu
dCBzdHJpbmcgb3IgYSBET00gbm9kZSdzCiAgICAgLy8gc3RyaW5nLiBXZSB3YW50IHRoZSBvcmln
aW5hbCBzdHJpbmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1lZCBpbiBjYXNlIGZpcnN0LWxldHRl
ciBoYXMKQEAgLTE4MywzMCArMTgwLDI5IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUZpcnN0TGV0dGVy
UmVuZGVyZXIoUmUKIAogICAgICAgICAvLyBDb25zdHJ1Y3QgYSB0ZXh0IGZyYWdtZW50IGZvciB0
aGUgdGV4dCBhZnRlciB0aGUgZmlyc3QgbGV0dGVyLgogICAgICAgICAvLyBUaGlzIHRleHQgZnJh
Z21lbnQgbWlnaHQgYmUgZW1wdHkuCi0gICAgICAgIFJlbmRlclRleHRGcmFnbWVudCogcmVtYWlu
aW5nVGV4dDsKKyAgICAgICAgUmVuZGVyUHRyPFJlbmRlclRleHRGcmFnbWVudD4gbmV3UmVtYWlu
aW5nVGV4dDsKICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Q2hpbGQudGV4dE5vZGUoKSkKLSAgICAg
ICAgICAgIHJlbWFpbmluZ1RleHQgPSBuZXcgUmVuZGVyVGV4dEZyYWdtZW50KCpjdXJyZW50VGV4
dENoaWxkLnRleHROb2RlKCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxl
bmd0aCk7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVyZXI8UmVu
ZGVyVGV4dEZyYWdtZW50PigqY3VycmVudFRleHRDaGlsZC50ZXh0Tm9kZSgpLCBvbGRUZXh0LCBs
ZW5ndGgsIG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZW1haW5pbmdUZXh0ID0gbmV3IFJlbmRlclRleHRGcmFnbWVudChmaXJzdExldHRlckJs
b2NrLmRvY3VtZW50KCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0
aCk7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
VGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRleHQsIGxlbmd0
aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7CiAKLSAgICAgICAgaWYgKHJlbWFpbmluZ1Rl
eHQtPnRleHROb2RlKCkpCi0gICAgICAgICAgICByZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpLT5z
ZXRSZW5kZXJlcihyZW1haW5pbmdUZXh0KTsKKyAgICAgICAgaWYgKG5ld1JlbWFpbmluZ1RleHQt
PnRleHROb2RlKCkpCisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpLT5z
ZXRSZW5kZXJlcihuZXdSZW1haW5pbmdUZXh0LmdldCgpKTsKIAotICAgICAgICBmaXJzdExldHRl
ckNvbnRhaW5lci0+YWRkQ2hpbGQocmVtYWluaW5nVGV4dCwgJmN1cnJlbnRUZXh0Q2hpbGQpOwot
ICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQ2hpbGQoY3VycmVudFRleHRDaGls
ZCk7Ci0gICAgICAgIHJlbWFpbmluZ1RleHQtPnNldEZpcnN0TGV0dGVyKCpmaXJzdExldHRlcik7
Ci0gICAgICAgIGZpcnN0TGV0dGVyLT5zZXRGaXJzdExldHRlclJlbWFpbmluZ1RleHQocmVtYWlu
aW5nVGV4dCk7CisgICAgICAgIFJlbmRlclRleHRGcmFnbWVudCYgcmVtYWluaW5nVGV4dCA9ICpu
ZXdSZW1haW5pbmdUZXh0OworICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQo
V1RGTW92ZShuZXdSZW1haW5pbmdUZXh0KSwgJmN1cnJlbnRUZXh0Q2hpbGQpOworICAgICAgICBm
aXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKGN1cnJlbnRUZXh0Q2hp
bGQpOworICAgICAgICByZW1haW5pbmdUZXh0LnNldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyKTsK
KyAgICAgICAgZmlyc3RMZXR0ZXIuc2V0Rmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KCZyZW1haW5p
bmdUZXh0KTsKIAogICAgICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3IgdGhlIGZp
cnN0IGxldHRlcgotICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQqIGxldHRlcjsKLSAgICAgICAg
aWYgKHJlbWFpbmluZ1RleHQtPnRleHROb2RlKCkpCi0gICAgICAgICAgICBsZXR0ZXIgPSBuZXcg
UmVuZGVyVGV4dEZyYWdtZW50KCpyZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpLCBvbGRUZXh0LCAw
LCBsZW5ndGgpOworICAgICAgICBSZW5kZXJQdHI8UmVuZGVyVGV4dEZyYWdtZW50PiBsZXR0ZXI7
CisgICAgICAgIGlmIChyZW1haW5pbmdUZXh0LnRleHROb2RlKCkpCisgICAgICAgICAgICBsZXR0
ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KCpyZW1haW5pbmdUZXh0LnRl
eHROb2RlKCksIG9sZFRleHQsIDAsIGxlbmd0aCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGxldHRlciA9IG5ldyBSZW5kZXJUZXh0RnJhZ21lbnQoZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVu
dCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOworICAgICAgICAgICAgbGV0dGVyID0gY3JlYXRlUmVu
ZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9s
ZFRleHQsIDAsIGxlbmd0aCk7CiAKLSAgICAgICAgZmlyc3RMZXR0ZXItPmFkZENoaWxkKGxldHRl
cik7Ci0KLSAgICAgICAgY3VycmVudFRleHRDaGlsZC5kZXN0cm95KCk7CisgICAgICAgIGZpcnN0
TGV0dGVyLmFkZENoaWxkKFdURk1vdmUobGV0dGVyKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyR2VuZXJh
dGVkQ29udGVudC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1JlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlQ29udGVudFJlbmRlcmVycyhSZW5kZQog
ICAgIGZvciAoY29uc3QgQ29udGVudERhdGEqIGNvbnRlbnQgPSBzdHlsZS5jb250ZW50RGF0YSgp
OyBjb250ZW50OyBjb250ZW50ID0gY29udGVudC0+bmV4dCgpKSB7CiAgICAgICAgIGF1dG8gY2hp
bGQgPSBjb250ZW50LT5jcmVhdGVDb250ZW50UmVuZGVyZXIocmVuZGVyZXIuZG9jdW1lbnQoKSwg
c3R5bGUpOwogICAgICAgICBpZiAocmVuZGVyZXIuaXNDaGlsZEFsbG93ZWQoKmNoaWxkLCBzdHls
ZSkpCi0gICAgICAgICAgICByZW5kZXJlci5hZGRDaGlsZChjaGlsZC5sZWFrUHRyKCkpOworICAg
ICAgICAgICAgcmVuZGVyZXIuYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0
SXRlbS5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRl
clRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwxMiArODQsMTQg
QEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW06OnVwZGF0ZQogICAgIH0KIAogICAg
IGF1dG8gbmV3U3R5bGUgPSBsaXN0SXRlbVJlbmRlcmVyLmNvbXB1dGVNYXJrZXJTdHlsZSgpOwor
ICAgIFJlbmRlclB0cjxSZW5kZXJMaXN0TWFya2VyPiBuZXdNYXJrZXJSZW5kZXJlcjsKICAgICBh
dXRvKiBtYXJrZXJSZW5kZXJlciA9IGxpc3RJdGVtUmVuZGVyZXIubWFya2VyUmVuZGVyZXIoKTsK
ICAgICBpZiAobWFya2VyUmVuZGVyZXIpCiAgICAgICAgIG1hcmtlclJlbmRlcmVyLT5zZXRTdHls
ZShXVEZNb3ZlKG5ld1N0eWxlKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1hcmtlclJlbmRlcmVy
ID0gV2ViQ29yZTo6Y3JlYXRlUmVuZGVyZXI8UmVuZGVyTGlzdE1hcmtlcj4obGlzdEl0ZW1SZW5k
ZXJlciwgV1RGTW92ZShuZXdTdHlsZSkpLmxlYWtQdHIoKTsKLSAgICAgICAgbWFya2VyUmVuZGVy
ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgICAgICBuZXdNYXJrZXJSZW5kZXJlciA9IFdlYkNv
cmU6OmNyZWF0ZVJlbmRlcmVyPFJlbmRlckxpc3RNYXJrZXI+KGxpc3RJdGVtUmVuZGVyZXIsIFdU
Rk1vdmUobmV3U3R5bGUpKTsKKyAgICAgICAgbmV3TWFya2VyUmVuZGVyZXItPmluaXRpYWxpemVT
dHlsZSgpOworICAgICAgICBtYXJrZXJSZW5kZXJlciA9IG5ld01hcmtlclJlbmRlcmVyLmdldCgp
OwogICAgICAgICBsaXN0SXRlbVJlbmRlcmVyLnNldE1hcmtlclJlbmRlcmVyKG1hcmtlclJlbmRl
cmVyKTsKICAgICB9CiAKQEAgLTEwOSw4ICsxMTEsMTEgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRl
cjo6TGlzdEl0ZW06OnVwZGF0ZQogICAgIH0KIAogICAgIGlmIChuZXdQYXJlbnQgIT0gY3VycmVu
dFBhcmVudCkgewotICAgICAgICBtYXJrZXJSZW5kZXJlci0+cmVtb3ZlRnJvbVBhcmVudCgpOwot
ICAgICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKG1hcmtlclJlbmRlcmVyLCBmaXJzdE5vbk1hcmtl
ckNoaWxkKCpuZXdQYXJlbnQpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpCisgICAgICAg
ICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKGN1cnJlbnRQYXJlbnQtPnRha2VDaGlsZCgqbWFya2Vy
UmVuZGVyZXIpLCBmaXJzdE5vbk1hcmtlckNoaWxkKCpuZXdQYXJlbnQpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbmV3UGFyZW50LT5hZGRDaGlsZChXVEZNb3ZlKG5ld01hcmtlclJlbmRl
cmVyKSwgZmlyc3ROb25NYXJrZXJDaGlsZCgqbmV3UGFyZW50KSk7CisKICAgICAgICAgLy8gSWYg
Y3VycmVudCBwYXJlbnQgaXMgYW4gYW5vbnltb3VzIGJsb2NrIHRoYXQgaGFzIGxvc3QgYWxsIGl0
cyBjaGlsZHJlbiwgZGVzdHJveSBpdC4KICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQgJiYgY3Vy
cmVudFBhcmVudC0+aXNBbm9ueW1vdXNCbG9jaygpICYmICFjdXJyZW50UGFyZW50LT5maXJzdENo
aWxkKCkgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVudFBhcmVudCkuY29udGludWF0
aW9uKCkpCiAgICAgICAgICAgICBjdXJyZW50UGFyZW50LT5kZXN0cm95KCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1u
LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJl
ZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNCBA
QCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbjo6dXBkCiAKIHZvaWQgUmVuZGVy
VHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uOjpjcmVhdGVGcmFnbWVudGVkRmxvdyhSZW5kZXJCbG9j
a0Zsb3cmIGZsb3cpCiB7Ci0gICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93KiBmcmFnbWVudGVkRmxv
dyA9IG5ldyBSZW5kZXJNdWx0aUNvbHVtbkZsb3coZmxvdy5kb2N1bWVudCgpLCBSZW5kZXJTdHls
ZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShmbG93LnN0eWxlKCksIEJMT0NLKSk7
Ci0gICAgZnJhZ21lbnRlZEZsb3ctPmluaXRpYWxpemVTdHlsZSgpOworICAgIGF1dG8gbmV3RnJh
Z21lbnRlZEZsb3cgPSBXZWJDb3JlOjpjcmVhdGVSZW5kZXJlcjxSZW5kZXJNdWx0aUNvbHVtbkZs
b3c+KGZsb3cuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0
aERpc3BsYXkoZmxvdy5zdHlsZSgpLCBCTE9DSykpOworICAgIG5ld0ZyYWdtZW50ZWRGbG93LT5p
bml0aWFsaXplU3R5bGUoKTsKICAgICBmbG93LnNldENoaWxkcmVuSW5saW5lKGZhbHNlKTsgLy8g
RG8gdGhpcyB0byBhdm9pZCB3cmFwcGluZyBpbmxpbmUgY2hpbGRyZW4gdGhhdCBhcmUganVzdCBn
b2luZyB0byBtb3ZlIGludG8gdGhlIGZsb3cgdGhyZWFkLgogICAgIGZsb3cuZGVsZXRlTGluZXMo
KTsKLSAgICBmbG93LlJlbmRlckJsb2NrOjphZGRDaGlsZChmcmFnbWVudGVkRmxvdyk7Ci0gICAg
ZnJhZ21lbnRlZEZsb3ctPnBvcHVsYXRlKCk7IC8vIENhbGxlZCBhZnRlciB0aGUgZmxvdyB0aHJl
YWQgaXMgaW5zZXJ0ZWQgc28gdGhhdCB3ZSBhcmUgcmVhY2hhYmxlIGJ5IHRoZSBmbG93IHRocmVh
ZC4KLSAgICBmbG93LnNldE11bHRpQ29sdW1uRmxvdyhmcmFnbWVudGVkRmxvdyk7CisgICAgYXV0
byYgZnJhZ21lbnRlZEZsb3cgPSAqbmV3RnJhZ21lbnRlZEZsb3c7CisgICAgZmxvdy5SZW5kZXJC
bG9jazo6YWRkQ2hpbGQoV1RGTW92ZShuZXdGcmFnbWVudGVkRmxvdykpOworICAgIGZyYWdtZW50
ZWRGbG93LnBvcHVsYXRlKCk7IC8vIENhbGxlZCBhZnRlciB0aGUgZmxvdyB0aHJlYWQgaXMgaW5z
ZXJ0ZWQgc28gdGhhdCB3ZSBhcmUgcmVhY2hhYmxlIGJ5IHRoZSBmbG93IHRocmVhZC4KKyAgICBm
bG93LnNldE11bHRpQ29sdW1uRmxvdygmZnJhZ21lbnRlZEZsb3cpOwogfQogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322181</attachid>
            <date>2017-09-29 02:07:21 -0700</date>
            <delta_ts>2017-09-29 06:51:23 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderptr-everywhere-13.patch</filename>
            <type>text/plain</type>
            <size>139305</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjA0NCw4ICs2MDQ0
LDggQEAgdm9pZCBEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbgogICAgICAgICBt
X3NhdmVkUGxhY2Vob2xkZXJSZW5kZXJTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5k
ZXJlci0+c3R5bGUoKSk7CiAgICAgfQogCi0gICAgaWYgKG1fZnVsbFNjcmVlbkVsZW1lbnQgIT0g
ZG9jdW1lbnRFbGVtZW50KCkpCi0gICAgICAgIFJlbmRlckZ1bGxTY3JlZW46OndyYXBSZW5kZXJl
cihyZW5kZXJlciwgcmVuZGVyZXIgPyByZW5kZXJlci0+cGFyZW50KCkgOiBudWxscHRyLCAqdGhp
cyk7CisgICAgaWYgKG1fZnVsbFNjcmVlbkVsZW1lbnQgIT0gZG9jdW1lbnRFbGVtZW50KCkgJiYg
cmVuZGVyZXIpCisgICAgICAgIFJlbmRlckZ1bGxTY3JlZW46OndyYXBFeGlzdGluZ1JlbmRlcmVy
KCpyZW5kZXJlciwgKnRoaXMpOwogCiAgICAgbV9mdWxsU2NyZWVuRWxlbWVudC0+c2V0Q29udGFp
bnNGdWxsU2NyZWVuRWxlbWVudE9uQW5jZXN0b3JzQ3Jvc3NpbmdGcmFtZUJvdW5kYXJpZXModHJ1
ZSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2
aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDc1LDcgKzQ3NSw3IEBAIFJlbmRlckJsb2NrKiBSZW5kZXJC
bG9jazo6Y29udGludWF0aW9uQmUKICAgICByZXR1cm4gbGFzdDsKIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRUb0NvbnRp
bnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCkKIHsKICAgICBSZW5kZXJCbG9jayogZmxvdyA9IGNvbnRpbnVhdGlvbkJlZm9y
ZShiZWZvcmVDaGlsZCk7CiAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCBpczxSZW5kZXJCbG9j
az4oKmJlZm9yZUNoaWxkLT5wYXJlbnQoKSkpOwpAQCAtNDkxLDcgKzQ5MSw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkZENoaWxkVG9Db250aW51YXRpb24KICAgICB9CiAKICAgICBpZiAobmV3Q2hp
bGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkgewotICAgICAgICBiZWZvcmVD
aGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3Jl
Q2hpbGQpOworICAgICAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC01MDAsMjEgKzUwMCwyMSBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGls
ZFRvQ29udGludWF0aW9uCiAgICAgYm9vbCBmbG93SXNOb3JtYWwgPSBmbG93LT5pc0lubGluZSgp
IHx8ICFmbG93LT5zdHlsZSgpLmNvbHVtblNwYW4oKTsKIAogICAgIGlmIChmbG93ID09IGJlZm9y
ZUNoaWxkUGFyZW50KSB7Ci0gICAgICAgIGZsb3ctPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRp
b24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAogICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0Y2ggdXAg
aWYgd2UgY2FuLCBzbyB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRoZQogICAgIC8v
IG1pbmltYWwgIyBvZiBjb250aW51YXRpb25zIG5lZWRlZCBmb3IgdGhlIGlubGluZS4KICAgICBp
ZiAoY2hpbGRJc05vcm1hbCA9PSBiY3BJc05vcm1hbCkgewotICAgICAgICBiZWZvcmVDaGlsZFBh
cmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQp
OworICAgICAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmIChmbG93SXNOb3JtYWwgPT0gY2hpbGRJc05vcm1hbCkgewotICAgICAgICBmbG93
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCAwKTsgLy8gSnVzdCB0cmVh
dCBsaWtlIGFuIGFwcGVuZC4KKyAgICAgICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVh
dGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgMCk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQu
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxk
SWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBiZWZvcmVD
aGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxk
KSwgYmVmb3JlQ2hpbGQpOwogfQogCiBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRlckJsb2Nr
OjpjbG9uZSgpIGNvbnN0CkBAIC01MzcsMTUgKzUzNywxNSBAQCBSZW5kZXJQdHI8UmVuZGVyQmxv
Y2s+IFJlbmRlckJsb2NrOjpjbG9uCiAgICAgcmV0dXJuIGNsb25lQmxvY2s7CiB9CiAKLXZvaWQg
UmVuZGVyQmxvY2s6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZChSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBp
ZiAoY29udGludWF0aW9uKCkgJiYgIWlzQW5vbnltb3VzQmxvY2soKSkKLSAgICAgICAgYWRkQ2hp
bGRUb0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBhZGRDaGls
ZFRvQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgZWxz
ZQotICAgICAgICBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVD
aGlsZCk7CisgICAgICAgIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdD
aGlsZCksIGJlZm9yZUNoaWxkKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQordm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCkKIHsKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9
IHRoaXMpIHsKICAgICAgICAgUmVuZGVyRWxlbWVudCogYmVmb3JlQ2hpbGRDb250YWluZXIgPSBi
ZWZvcmVDaGlsZC0+cGFyZW50KCk7CkBAIC01NjYsMTYgKzU2NiwxNiBAQCB2b2lkIFJlbmRlckJs
b2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGluCiAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAg
ICAgICAgICAgLy8gSW5zZXJ0IHRoZSBjaGlsZCBpbnRvIHRoZSBhbm9ueW1vdXMgYmxvY2sgYm94
IGluc3RlYWQgb2YgaGVyZS4KICAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQtPmlzSW5saW5l
KCkgfHwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpLT5maXJzdENoaWxkKCkgIT0gYmVmb3JlQ2hpbGQp
Ci0gICAgICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+YWRkQ2hpbGQobmV3
Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgYmVmb3JlQ2hpbGQtPnBh
cmVudCgpLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQobmV3Q2hpbGQsIGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGFkZENoaWxkKFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZC0+cGFyZW50KCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgQVNTRVJUKGJlZm9yZUNoaWxkQW5v
bnltb3VzQ29udGFpbmVyLT5pc1RhYmxlKCkpOwogICAgICAgICAgICAgaWYgKG5ld0NoaWxkLT5p
c1RhYmxlUGFydCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gSW5zZXJ0IGludG8gdGhlIGFub255
bW91cyB0YWJsZS4KLSAgICAgICAgICAgICAgICBiZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5l
ci0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICBiZWZv
cmVDaGlsZEFub255bW91c0NvbnRhaW5lci0+YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJl
Zm9yZUNoaWxkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAg
LTYxMiwyMiArNjEyLDIzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdDb250
aW4KICAgICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxkID0gYmVmb3JlQ2hpbGQgPyBiZWZv
cmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBsYXN0Q2hpbGQoKTsKIAogICAgICAgICBpZiAo
YWZ0ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkpIHsKLSAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqYWZ0ZXJDaGlsZCkuYWRkQ2hpbGQobmV3Q2hpbGQp
OworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCphZnRlckNoaWxkKS5hZGRDaGls
ZChXVEZNb3ZlKG5ld0NoaWxkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAobmV3Q2hpbGQtPmlzSW5saW5lKCkpIHsKICAgICAgICAgICAgIC8vIE5vIHN1
aXRhYmxlIGV4aXN0aW5nIGFub255bW91cyBib3ggLSBjcmVhdGUgYSBuZXcgb25lLgotICAgICAg
ICAgICAgUmVuZGVyQmxvY2sqIG5ld0JveCA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0gICAg
ICAgICAgICBSZW5kZXJCb3g6OmFkZENoaWxkKG5ld0JveCwgYmVmb3JlQ2hpbGQpOwotICAgICAg
ICAgICAgbmV3Qm94LT5hZGRDaGlsZChuZXdDaGlsZCk7CisgICAgICAgICAgICBhdXRvIG5ld0Jv
eCA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgICAgICBhdXRvJiBib3ggPSAqbmV3
Qm94OworICAgICAgICAgICAgUmVuZGVyQm94OjphZGRDaGlsZChXVEZNb3ZlKG5ld0JveCksIGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgICAgIGJveC5hZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpbnZhbGlkYXRl
TGluZUxheW91dFBhdGgoKTsKIAotICAgIFJlbmRlckJveDo6YWRkQ2hpbGQobmV3Q2hpbGQsIGJl
Zm9yZUNoaWxkKTsKKyAgICBSZW5kZXJCb3g6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBi
ZWZvcmVDaGlsZCk7CiAgCiAgICAgaWYgKG1hZGVCb3hlc05vbklubGluZSAmJiBpczxSZW5kZXJC
bG9jaz4ocGFyZW50KCkpICYmIGlzQW5vbnltb3VzQmxvY2soKSkKICAgICAgICAgZG93bmNhc3Q8
UmVuZGVyQmxvY2s+KCpwYXJlbnQoKSkucmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCbG9jayh0aGlz
KTsKQEAgLTcxMCw5ICs3MTEsMTAgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9u
SW5saW5lKAogCiAgICAgICAgIGNoaWxkID0gaW5saW5lUnVuRW5kLT5uZXh0U2libGluZygpOwog
Ci0gICAgICAgIFJlbmRlckJsb2NrKiBibG9jayA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0g
ICAgICAgIGluc2VydENoaWxkSW50ZXJuYWwoYmxvY2ssIGlubGluZVJ1blN0YXJ0LCBOb3RpZnlD
aGlsZHJlbik7Ci0gICAgICAgIG1vdmVDaGlsZHJlblRvKGJsb2NrLCBpbmxpbmVSdW5TdGFydCwg
Y2hpbGQpOworICAgICAgICBhdXRvIG5ld0Jsb2NrID0gY3JlYXRlQW5vbnltb3VzQmxvY2soKTsK
KyAgICAgICAgYXV0byYgYmxvY2sgPSAqbmV3QmxvY2s7CisgICAgICAgIGluc2VydENoaWxkSW50
ZXJuYWwoV1RGTW92ZShuZXdCbG9jayksIGlubGluZVJ1blN0YXJ0LCBOb3RpZnlDaGlsZHJlbik7
CisgICAgICAgIG1vdmVDaGlsZHJlblRvKCZibG9jaywgaW5saW5lUnVuU3RhcnQsIGNoaWxkKTsK
ICAgICB9CiAKICNpZm5kZWYgTkRFQlVHCkBAIC04MTEsMjEgKzgxMywxOSBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpkcm9wQW5vbnltb3VzQm94Q2hpbGQoCiAgICAgcGFyZW50LnNldE5lZWRzTGF5b3V0
QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIHBhcmVudC5zZXRDaGlsZHJlbklubGluZShjaGls
ZC5jaGlsZHJlbklubGluZSgpKTsKICAgICBSZW5kZXJPYmplY3QqIG5leHRTaWJsaW5nID0gY2hp
bGQubmV4dFNpYmxpbmcoKTsKLSAgICBwYXJlbnQucmVtb3ZlQ2hpbGRJbnRlcm5hbChjaGlsZCwg
Y2hpbGQuaGFzTGF5ZXIoKSA/IE5vdGlmeUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsK
KworICAgIGF1dG8gdG9CZURlbGV0ZWQgPSBwYXJlbnQudGFrZUNoaWxkSW50ZXJuYWwoY2hpbGQs
IGNoaWxkLmhhc0xheWVyKCkgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7
CiAgICAgY2hpbGQubW92ZUFsbENoaWxkcmVuVG8oJnBhcmVudCwgbmV4dFNpYmxpbmcsIGNoaWxk
Lmhhc0xheWVyKCkpOwogICAgIC8vIERlbGV0ZSB0aGUgbm93LWVtcHR5IGJsb2NrJ3MgbGluZXMg
YW5kIG51a2UgaXQuCiAgICAgY2hpbGQuZGVsZXRlTGluZXMoKTsKLSAgICBjaGlsZC5kZXN0cm95
KCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgb2xk
Q2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJCbG9jazo6dGFrZUNoaWxkKFJl
bmRlck9iamVjdCYgb2xkQ2hpbGQpCiB7CiAgICAgLy8gTm8gbmVlZCB0byB3YXN0ZSB0aW1lIGlu
IG1lcmdpbmcgb3IgcmVtb3ZpbmcgZW1wdHkgYW5vbnltb3VzIGJsb2Nrcy4KICAgICAvLyBXZSBj
YW4ganVzdCBiYWlsIG91dCBpZiBvdXIgZG9jdW1lbnQgaXMgZ2V0dGluZyBkZXN0cm95ZWQuCi0g
ICAgaWYgKHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKSB7Ci0gICAgICAgIFJlbmRlckJveDo6
cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChy
ZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlckJveDo6dGFr
ZUNoaWxkKG9sZENoaWxkKTsKIAogICAgIC8vIElmIHRoaXMgY2hpbGQgaXMgYSBibG9jaywgYW5k
IGlmIG91ciBwcmV2aW91cyBhbmQgbmV4dCBzaWJsaW5ncyBhcmUgYm90aCBhbm9ueW1vdXMgYmxv
Y2tzCiAgICAgLy8gd2l0aCBpbmxpbmUgY29udGVudCwgdGhlbiB3ZSBjYW4gZm9sZCB0aGUgaW5s
aW5lIGNvbnRlbnQgYmFjayB0b2dldGhlci4KQEAgLTg0OSwxMSArODQ5LDExIEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICAgICAgICAgIC8vIENhY2hlIHRo
aXMgdmFsdWUgYXMgaXQgbWlnaHQgZ2V0IGNoYW5nZWQgaW4gc2V0U3R5bGUoKSBjYWxsLgogICAg
ICAgICAgICAgYm9vbCBpbmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIgPSBpbmxpbmVDaGlsZHJl
bkJsb2NrLmhhc0xheWVyKCk7CiAgICAgICAgICAgICBpbmxpbmVDaGlsZHJlbkJsb2NrLnNldFN0
eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlKCks
IEJMT0NLKSk7Ci0gICAgICAgICAgICByZW1vdmVDaGlsZEludGVybmFsKGlubGluZUNoaWxkcmVu
QmxvY2ssIGlubGluZUNoaWxkcmVuQmxvY2tIYXNMYXllciA/IE5vdGlmeUNoaWxkcmVuIDogRG9u
dE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgIGF1dG8gYmxvY2tUb01vdmUgPSB0YWtlQ2hp
bGRJbnRlcm5hbChpbmxpbmVDaGlsZHJlbkJsb2NrLCBpbmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5
ZXIgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIC8vIE5vdyBqdXN0IHB1dCB0aGUgaW5saW5lQ2hpbGRyZW5CbG9jayBpbnNp
ZGUgdGhlIGJsb2NrQ2hpbGRyZW5CbG9jay4KICAgICAgICAgICAgIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQgPSBwcmV2ID09ICZpbmxpbmVDaGlsZHJlbkJsb2NrID8gYmxvY2tDaGlsZHJlbkJs
b2NrLmZpcnN0Q2hpbGQoKSA6IG51bGxwdHI7Ci0gICAgICAgICAgICBibG9ja0NoaWxkcmVuQmxv
Y2suaW5zZXJ0Q2hpbGRJbnRlcm5hbCgmaW5saW5lQ2hpbGRyZW5CbG9jaywgYmVmb3JlQ2hpbGQs
CisgICAgICAgICAgICBibG9ja0NoaWxkcmVuQmxvY2suaW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZN
b3ZlKGJsb2NrVG9Nb3ZlKSwgYmVmb3JlQ2hpbGQsCiAgICAgICAgICAgICAgICAgKGlubGluZUNo
aWxkcmVuQmxvY2tIYXNMYXllciB8fCBibG9ja0NoaWxkcmVuQmxvY2suaGFzTGF5ZXIoKSkgPyBO
b3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7CiAgICAgICAgICAgICBuZXh0LT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgIApAQCAtODc3
LDcgKzg3Nyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKIAog
ICAgIGludmFsaWRhdGVMaW5lTGF5b3V0UGF0aCgpOwogCi0gICAgUmVuZGVyQm94OjpyZW1vdmVD
aGlsZChvbGRDaGlsZCk7CisgICAgYXV0byB0YWtlbkNoaWxkID0gUmVuZGVyQm94Ojp0YWtlQ2hp
bGQob2xkQ2hpbGQpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHByZXYgPyBwcmV2IDog
bmV4dDsKICAgICBpZiAoY2FuTWVyZ2VBbm9ueW1vdXNCbG9ja3MgJiYgY2hpbGQgJiYgIWNoaWxk
LT5wcmV2aW91c1NpYmxpbmcoKSAmJiAhY2hpbGQtPm5leHRTaWJsaW5nKCkgJiYgY2FuRHJvcEFu
b255bW91c0Jsb2NrQ2hpbGQoKSkgewpAQCAtOTM0LDYgKzkzNCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICAgICAgICAgIGRlc3Ryb3koKTsKICAgICAg
ICAgfQogICAgIH0KKyAgICByZXR1cm4gdGFrZW5DaGlsZDsKIH0KIAogYm9vbCBSZW5kZXJCbG9j
azo6Y2hpbGRyZW5QcmV2ZW50U2VsZkNvbGxhcHNpbmcoKSBjb25zdApAQCAtMzM0MCwxNCArMzM0
MSwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0CiAgICAgICAg
IGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIGZs
b29yZWRMYXlvdXRQb2ludChMYXlvdXRQb2ludChhZGRpdGlvbmFsT2Zmc2V0ICsgaW5saW5lRWxl
bWVudENvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSAtIGxvY2F0
aW9uKCkpKSwgcGFpbnRDb250YWluZXIpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxv
Y2s+IFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCbG9ja1dpdGhTdHlsZUFuZERpc3BsYXko
RG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVEaXNwbGF5IGRp
c3BsYXkpCitSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1v
dXNCbG9ja1dpdGhTdHlsZUFuZERpc3BsYXkoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUsIEVEaXNwbGF5IGRpc3BsYXkpCiB7CiAgICAgLy8gRklYTUU6IERvIHdl
IG5lZWQgdG8gY29udmVydCBhbGwgb3VyIGlubGluZSBkaXNwbGF5cyB0byBibG9jay10eXBlIGlu
IHRoZSBhbm9ueW1vdXMgbG9naWMgPwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9jaz4g
bmV3Qm94OworICAgIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gbmV3Qm94OwogICAgIGlmIChkaXNw
bGF5ID09IEZMRVggfHwgZGlzcGxheSA9PSBJTkxJTkVfRkxFWCkKLSAgICAgICAgbmV3Qm94ID0g
c3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJGbGV4aWJsZUJveD4oZG9jdW1lbnQsIFJlbmRlclN0eWxl
OjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBGTEVYKSk7CisgICAgICAg
IG5ld0JveCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckZsZXhpYmxlQm94Pihkb2N1bWVudCwgUmVu
ZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUsIEZMRVgpKTsK
ICAgICBlbHNlCi0gICAgICAgIG5ld0JveCA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyQmxvY2tG
bG93Pihkb2N1bWVudCwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3Bs
YXkoc3R5bGUsIEJMT0NLKSk7CisgICAgICAgIG5ld0JveCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRl
ckJsb2NrRmxvdz4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdp
dGhEaXNwbGF5KHN0eWxlLCBCTE9DSykpOwogICAgIAogICAgIG5ld0JveC0+aW5pdGlhbGl6ZVN0
eWxlKCk7CiAgICAgcmV0dXJuIG5ld0JveDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNzIsOCArNzIsOCBAQCBwdWJsaWM6
CiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBj
YWxsZXJzIGhhdmUgbW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93CiAgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZUxpbmVzKCk7CiAKLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92
ZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVy
UHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAw
KSBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtlQ2hpbGQoUmVuZGVy
T2JqZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCBy
ZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gMCk7CiAKQEAg
LTE5NiwxMSArMTk2LDExIEBAIHB1YmxpYzoKICAgICB1c2luZyBSZW5kZXJCb3hNb2RlbE9iamVj
dDo6Y29udGludWF0aW9uOwogICAgIHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRDb250
aW51YXRpb247CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrPiBjcmVh
dGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXJBbmREaXNwbGF5KGNvbnN0IFJlbmRlckJveCYg
cGFyZW50LCBFRGlzcGxheSA9IEJMT0NLKTsKLSAgICBSZW5kZXJCbG9jayogY3JlYXRlQW5vbnlt
b3VzQmxvY2soRURpc3BsYXkgPSBCTE9DSykgY29uc3Q7CisgICAgc3RhdGljIFJlbmRlclB0cjxS
ZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyQW5kRGlzcGxheShj
b25zdCBSZW5kZXJCb3gmIHBhcmVudCwgRURpc3BsYXkgPSBCTE9DSyk7CisgICAgUmVuZGVyUHRy
PFJlbmRlckJsb2NrPiBjcmVhdGVBbm9ueW1vdXNCbG9jayhFRGlzcGxheSA9IEJMT0NLKSBjb25z
dDsKICAgICBzdGF0aWMgdm9pZCBkcm9wQW5vbnltb3VzQm94Q2hpbGQoUmVuZGVyQmxvY2smIHBh
cmVudCwgUmVuZGVyQmxvY2smIGNoaWxkKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJC
b3g+IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIFJlbmRlclB0cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255bW91c0Jv
eFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
c3RhdGljIGJvb2wgc2hvdWxkU2tpcENyZWF0aW5nUnVuc0Zvck9iamVjdChSZW5kZXJPYmplY3Qm
IG9iaikKICAgICB7CkBAIC00MjgsNyArNDI4LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgYmxv
Y2tXaWxsQmVEZXN0cm95ZWQoKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlckJsb2NrPiBjcmVhdGVBbm9ueW1vdXNCbG9ja1dpdGhTdHlsZUFuZERpc3BsYXko
RG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIEVEaXNwbGF5KTsKKyAgICBzdGF0aWMgUmVu
ZGVyUHRyPFJlbmRlckJsb2NrPiBjcmVhdGVBbm9ueW1vdXNCbG9ja1dpdGhTdHlsZUFuZERpc3Bs
YXkoRG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIEVEaXNwbGF5KTsKIAogICAgIC8vIEZJ
WE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24gd2hlbiBhbGwgY2FsbGVycyBoYXZl
IG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBsb2dpY2Fs
UmlnaHRGbG9hdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCwgTGF5b3V0VW5pdCBmaXhlZE9mZnNl
dCwgTGF5b3V0VW5pdCkgY29uc3QgeyByZXR1cm4gZml4ZWRPZmZzZXQ7IH07CkBAIC00NDcsOCAr
NDQ3LDggQEAgcHJpdmF0ZToKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFs
aXphaW9uIHdoZW4gYWxsIGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAg
ICB2aXJ0dWFsIHZvaWQgbW92ZUFsbENoaWxkcmVuSW5jbHVkaW5nRmxvYXRzVG8oUmVuZGVyQmxv
Y2smIHRvQmxvY2ssIGJvb2wgZnVsbFJlbW92ZUluc2VydCkgeyBtb3ZlQWxsQ2hpbGRyZW5Ubygm
dG9CbG9jaywgZnVsbFJlbW92ZUluc2VydCk7IH0KIAotICAgIHZvaWQgYWRkQ2hpbGRUb0NvbnRp
bnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KTsKLSAgICB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBu
ZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkgb3ZlcnJpZGU7CisgICAgdm9pZCBh
ZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250
aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc1NlbGZDb2xsYXBzaW5nQmxvY2so
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRyZW5QcmV2ZW50U2VsZkNv
bGxhcHNpbmcoKSBjb25zdDsKQEAgLTU0NywxOSArNTQ3LDE5IEBAIExheW91dFVuaXQgYmxvY2tE
aXJlY3Rpb25PZmZzZXQoUmVuZGVyQmwKIExheW91dFVuaXQgaW5saW5lRGlyZWN0aW9uT2Zmc2V0
KFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290
QmxvY2spOwogVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnRSZXNwZWN0aW5nRWRpdGlu
Z0JvdW5kYXJpZXMoUmVuZGVyQmxvY2smLCBSZW5kZXJCb3gmLCBjb25zdCBMYXlvdXRQb2ludCYp
OwogCi1pbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y3Jl
YXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyQW5kRGlzcGxheShjb25zdCBSZW5kZXJCb3gm
IHBhcmVudCwgRURpc3BsYXkgZGlzcGxheSkKK2lubGluZSBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+
IFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXJBbmREaXNwbGF5
KGNvbnN0IFJlbmRlckJveCYgcGFyZW50LCBFRGlzcGxheSBkaXNwbGF5KQogewogICAgIHJldHVy
biBjcmVhdGVBbm9ueW1vdXNCbG9ja1dpdGhTdHlsZUFuZERpc3BsYXkocGFyZW50LmRvY3VtZW50
KCksIHBhcmVudC5zdHlsZSgpLCBkaXNwbGF5KTsKIH0KIAotaW5saW5lIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJCb3g+IFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVB
cyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBjb25zdAoraW5saW5lIFJlbmRlclB0cjxSZW5k
ZXJCb3g+IFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25z
dCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBjb25zdAogewogICAgIHJldHVybiBjcmVhdGVBbm9ueW1v
dXNCbG9ja1dpdGhTdHlsZUFuZERpc3BsYXkoZG9jdW1lbnQoKSwgcmVuZGVyZXIuc3R5bGUoKSwg
c3R5bGUoKS5kaXNwbGF5KCkpOwogfQogCi1pbmxpbmUgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2Nr
OjpjcmVhdGVBbm9ueW1vdXNCbG9jayhFRGlzcGxheSBkaXNwbGF5KSBjb25zdAoraW5saW5lIFJl
bmRlclB0cjxSZW5kZXJCbG9jaz4gUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c0Jsb2NrKEVE
aXNwbGF5IGRpc3BsYXkpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUFub255bW91c0Jsb2Nr
V2l0aFN0eWxlQW5kRGlzcGxheShkb2N1bWVudCgpLCBzdHlsZSgpLCBkaXNwbGF5KS5yZWxlYXNl
KCk7CisgICAgcmV0dXJuIGNyZWF0ZUFub255bW91c0Jsb2NrV2l0aFN0eWxlQW5kRGlzcGxheShk
b2N1bWVudCgpLCBzdHlsZSgpLCBkaXNwbGF5KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJ
KHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zODM1LDI0ICszODM1LDI0IEBAIHZvaWQgUmVu
ZGVyQmxvY2tGbG93OjpsYXlvdXRFeGNsdWRlZENoaWwKICAgICBkZXRlcm1pbmVMb2dpY2FsTGVm
dFBvc2l0aW9uRm9yQ2hpbGQoKmZyYWdtZW50ZWRGbG93KTsKIH0KIAotdm9pZCBSZW5kZXJCbG9j
a0Zsb3c6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQpCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgaWYg
KG11bHRpQ29sdW1uRmxvdygpICYmICghaXNGaWVsZHNldCgpIHx8ICFuZXdDaGlsZC0+aXNMZWdl
bmQoKSkpCi0gICAgICAgIHJldHVybiBtdWx0aUNvbHVtbkZsb3coKS0+YWRkQ2hpbGQobmV3Q2hp
bGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcmV0dXJuIG11bHRpQ29sdW1uRmxvdygpLT5hZGRD
aGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgIGF1dG8qIGJlZm9yZUNo
aWxkT3JQbGFjZWhvbGRlciA9IGJlZm9yZUNoaWxkOwogICAgIGlmIChhdXRvKiBjb250YWluaW5n
RnJhZ21lbnRlZEZsb3cgPSBlbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpKQogICAgICAgICBiZWZv
cmVDaGlsZE9yUGxhY2Vob2xkZXIgPSBjb250YWluaW5nRnJhZ21lbnRlZEZsb3ctPnJlc29sdmVN
b3ZlZENoaWxkKGJlZm9yZUNoaWxkKTsKLSAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQobmV3Q2hp
bGQsIGJlZm9yZUNoaWxkT3JQbGFjZWhvbGRlcik7CisgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxk
KFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIpOwogfQogCi12b2lk
IFJlbmRlckJsb2NrRmxvdzo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKK1Jl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlckJsb2NrRmxvdzo6dGFrZUNoaWxkKFJlbmRlck9i
amVjdCYgb2xkQ2hpbGQpCiB7CiAgICAgaWYgKCFyZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkg
ewogICAgICAgICBSZW5kZXJGcmFnbWVudGVkRmxvdyogZnJhZ21lbnRlZEZsb3cgPSBtdWx0aUNv
bHVtbkZsb3coKTsKICAgICAgICAgaWYgKGZyYWdtZW50ZWRGbG93ICYmIGZyYWdtZW50ZWRGbG93
ICE9ICZvbGRDaGlsZCkKICAgICAgICAgICAgIGZyYWdtZW50ZWRGbG93LT5mcmFnbWVudGVkRmxv
d1JlbGF0aXZlV2lsbEJlUmVtb3ZlZChvbGRDaGlsZCk7CiAgICAgfQotICAgIFJlbmRlckJsb2Nr
OjpyZW1vdmVDaGlsZChvbGRDaGlsZCk7CisgICAgcmV0dXJuIFJlbmRlckJsb2NrOjp0YWtlQ2hp
bGQob2xkQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y2hlY2tGb3JQYWdpbmF0
aW9uTG9naWNhbEhlaWdodENoYW5nZShib29sJiByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0
JiBwYWdlTG9naWNhbEhlaWdodCwgYm9vbCYgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAkocmV2aXNpb24g
MjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zODIsOCArMzgyLDggQEAgcHVibGljOgogICAgIExheW91dFVuaXQg
bG9naWNhbEhlaWdodEZvckNoaWxkRm9yRnJhZ21lbnRhdGlvbihjb25zdCBSZW5kZXJCb3gmIGNo
aWxkKSBjb25zdDsKICAgICBib29sIGhhc05leHRQYWdlKExheW91dFVuaXQgbG9naWNhbE9mZnNl
dCwgUGFnZUJvdW5kYXJ5UnVsZSA9IEV4Y2x1ZGVQYWdlQm91bmRhcnkpIGNvbnN0OwogCi0gICAg
dm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3Qm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5l
d0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CisgICAgUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwog
CiAgICAgdm9pZCB1cGRhdGVDb2x1bW5Qcm9ncmVzc2lvbkZyb21TdHlsZShSZW5kZXJTdHlsZSYp
OwogICAgIHZvaWQgdXBkYXRlU3R5bGVzRm9yQ29sdW1uQ2hpbGRyZW4oKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkz
MSwyMCArNDkzMSwyMSBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckJveDo6c3BsaXRBbm9ueW1vdXNC
CiAKICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gc3BsaXQgdGhlIHBhcmVudCBib3ggaW50byB0
d28gYm94ZXMgYW5kIG1vdmUgY2hpbGRyZW4KICAgICAgICAgICAgIC8vIGZyb20gfGJlZm9yZUNo
aWxkfCB0byBlbmQgaW50byB0aGUgbmV3IHBvc3QgYm94LgotICAgICAgICAgICAgYXV0byogcG9z
dEJveCA9IGJveFRvU3BsaXQuY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoKnRoaXMp
LnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHBvc3RCb3gtPnNldENoaWxkcmVuSW5saW5lKGJveFRv
U3BsaXQuY2hpbGRyZW5JbmxpbmUoKSk7CisgICAgICAgICAgICBhdXRvIG5ld1Bvc3RCb3ggPSBi
b3hUb1NwbGl0LmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKCp0aGlzKTsKKyAgICAg
ICAgICAgIGF1dG8mIHBvc3RCb3ggPSAqbmV3UG9zdEJveDsKKyAgICAgICAgICAgIHBvc3RCb3gu
c2V0Q2hpbGRyZW5JbmxpbmUoYm94VG9TcGxpdC5jaGlsZHJlbklubGluZSgpKTsKICAgICAgICAg
ICAgIFJlbmRlckJveCogcGFyZW50Qm94ID0gZG93bmNhc3Q8UmVuZGVyQm94Pihib3hUb1NwbGl0
LnBhcmVudCgpKTsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSB0aGUgfHBh
cmVudEJveHwgYmVmb3JlIGluc2VydGluZyB0aGUgbmV3IG5vZGUKICAgICAgICAgICAgIC8vIHNv
IHRoYXQgdGhlIHRhYmxlIHJlcGFpbnRpbmcgbG9naWMga25vd3MgdGhlIHN0cnVjdHVyZSBpcyBk
aXJ0eS4KICAgICAgICAgICAgIC8vIFNlZSBmb3IgZXhhbXBsZSBSZW5kZXJUYWJsZUNlbGw6Y2xp
cHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQuCiAgICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlv
dXRBZnRlclNwbGl0KCpwYXJlbnRCb3gpOwotICAgICAgICAgICAgcGFyZW50Qm94LT5pbnNlcnRD
aGlsZEludGVybmFsKHBvc3RCb3gsIGJveFRvU3BsaXQubmV4dFNpYmxpbmcoKSwgTm90aWZ5Q2hp
bGRyZW4pOwotICAgICAgICAgICAgYm94VG9TcGxpdC5tb3ZlQ2hpbGRyZW5Ubyhwb3N0Qm94LCBi
ZWZvcmVDaGlsZCwgbnVsbHB0ciwgdHJ1ZSk7CisgICAgICAgICAgICBwYXJlbnRCb3gtPmluc2Vy
dENoaWxkSW50ZXJuYWwoV1RGTW92ZShuZXdQb3N0Qm94KSwgYm94VG9TcGxpdC5uZXh0U2libGlu
ZygpLCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAgICAgICBib3hUb1NwbGl0Lm1vdmVDaGlsZHJl
blRvKCZwb3N0Qm94LCBiZWZvcmVDaGlsZCwgbnVsbHB0ciwgdHJ1ZSk7CiAKICAgICAgICAgICAg
IG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3BsaXQoYm94VG9TcGxpdCk7Ci0gICAgICAgICAgICBt
YXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KCpwb3N0Qm94KTsKKyAgICAgICAgICAgIG1hcmtC
b3hGb3JSZWxheW91dEFmdGVyU3BsaXQocG9zdEJveCk7CiAKLSAgICAgICAgICAgIGJlZm9yZUNo
aWxkID0gcG9zdEJveDsKKyAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gJnBvc3RCb3g7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSAmYm94VG9TcGxpdDsKICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiAyMjI2MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5Miw3ICs1OTIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBsYXlvdXRPdmVyZmxv
d1JlY3QueSgpIDwgeSgpIHx8IGxheW91dE92ZXJmbG93UmVjdC5tYXhZKCkgPiB5KCkgKyBsb2dp
Y2FsSGVpZ2h0KCk7CiAgICAgfQogCi0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
Qm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBj
b25zdAorICAgIHZpcnR1YWwgUmVuZGVyUHRyPFJlbmRlckJveD4gY3JlYXRlQW5vbnltb3VzQm94
V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JikgY29uc3QKICAgICB7CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2
aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5NiwxMiArMjU5NiwxMiBAQCB2b2lkIFJl
bmRlckJveE1vZGVsT2JqZWN0Ojptb3ZlQ2hpbGRUbyhSCiAgICAgaWYgKGZ1bGxSZW1vdmVJbnNl
cnQgJiYgKHRvQm94TW9kZWxPYmplY3QtPmlzUmVuZGVyQmxvY2soKSB8fCB0b0JveE1vZGVsT2Jq
ZWN0LT5pc1JlbmRlcklubGluZSgpKSkgewogICAgICAgICAvLyBUYWtlcyBjYXJlIG9mIGFkZGlu
ZyB0aGUgbmV3IGNoaWxkIGNvcnJlY3RseSBpZiB0b0Jsb2NrIGFuZCBmcm9tQmxvY2sKICAgICAg
ICAgLy8gaGF2ZSBkaWZmZXJlbnQga2luZCBvZiBjaGlsZHJlbiAoYmxvY2sgdnMgaW5saW5lKS4K
LSAgICAgICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbCgqY2hpbGQsIE5vdGlmeUNoaWxkcmVuKTsKLSAg
ICAgICAgdG9Cb3hNb2RlbE9iamVjdC0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAg
ICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IHRha2VDaGlsZEludGVybmFsKCpjaGlsZCwgTm90aWZ5
Q2hpbGRyZW4pOworICAgICAgICB0b0JveE1vZGVsT2JqZWN0LT5hZGRDaGlsZChXVEZNb3ZlKGNo
aWxkVG9Nb3ZlKSwgYmVmb3JlQ2hpbGQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIE5vdGlmeUNo
aWxkcmVuVHlwZSBub3RpZnlUeXBlID0gZnVsbFJlbW92ZUluc2VydCA/IE5vdGlmeUNoaWxkcmVu
IDogRG9udE5vdGlmeUNoaWxkcmVuOwotICAgICAgICByZW1vdmVDaGlsZEludGVybmFsKCpjaGls
ZCwgbm90aWZ5VHlwZSk7Ci0gICAgICAgIHRvQm94TW9kZWxPYmplY3QtPmluc2VydENoaWxkSW50
ZXJuYWwoY2hpbGQsIGJlZm9yZUNoaWxkLCBub3RpZnlUeXBlKTsKKyAgICAgICAgYXV0byBjaGls
ZFRvTW92ZSA9IHRha2VDaGlsZEludGVybmFsKCpjaGlsZCwgbm90aWZ5VHlwZSk7CisgICAgICAg
IHRvQm94TW9kZWxPYmplY3QtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjaGlsZFRvTW92
ZSksIGJlZm9yZUNoaWxkLCBub3RpZnlUeXBlKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsMzAgKzYzLDMxIEBAIGJvb2wgUmVuZGVyQnV0dG9uOjpoYXNMaW5lSWZFbXB0eSgpIGNv
bnMKICAgICByZXR1cm4gaXM8SFRNTElucHV0RWxlbWVudD4oZm9ybUNvbnRyb2xFbGVtZW50KCkp
OwogfQogCi12b2lkIFJlbmRlckJ1dHRvbjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyQnV0dG9uOjphZGRDaGls
ZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCkKIHsKICAgICBpZiAoIW1faW5uZXIpIHsKICAgICAgICAgLy8gQ3JlYXRlIGFuIGFub255
bW91cyBibG9jay4KICAgICAgICAgQVNTRVJUKCFmaXJzdENoaWxkKCkpOwotICAgICAgICBtX2lu
bmVyID0gY3JlYXRlQW5vbnltb3VzQmxvY2soc3R5bGUoKS5kaXNwbGF5KCkpOwotICAgICAgICB1
cGRhdGVBbm9ueW1vdXNDaGlsZFN0eWxlKCptX2lubmVyLCBtX2lubmVyLT5tdXRhYmxlU3R5bGUo
KSk7Ci0gICAgICAgIFJlbmRlckZsZXhpYmxlQm94OjphZGRDaGlsZChtX2lubmVyKTsKKyAgICAg
ICAgYXV0byBuZXdJbm5lciA9IGNyZWF0ZUFub255bW91c0Jsb2NrKHN0eWxlKCkuZGlzcGxheSgp
KTsKKyAgICAgICAgdXBkYXRlQW5vbnltb3VzQ2hpbGRTdHlsZSgqbmV3SW5uZXIsIG5ld0lubmVy
LT5tdXRhYmxlU3R5bGUoKSk7CisgICAgICAgIG1faW5uZXIgPSBuZXdJbm5lci5nZXQoKTsKKyAg
ICAgICAgUmVuZGVyRmxleGlibGVCb3g6OmFkZENoaWxkKFdURk1vdmUobmV3SW5uZXIpKTsKICAg
ICB9CiAgICAgCi0gICAgbV9pbm5lci0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsK
KyAgICBtX2lubmVyLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwog
fQogCi12b2lkIFJlbmRlckJ1dHRvbjo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGls
ZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlckJ1dHRvbjo6dGFrZUNoaWxkKFJlbmRl
ck9iamVjdCYgb2xkQ2hpbGQpCiB7CiAgICAgLy8gbV9pbm5lciBzaG91bGQgYmUgdGhlIG9ubHkg
Y2hpbGQsIGJ1dCBjaGVja2luZyBmb3IgZGlyZWN0IGNoaWxkcmVuIHdobwogICAgIC8vIGFyZSBu
b3QgbV9pbm5lciBwcmV2ZW50cyBzZWN1cml0eSBwcm9ibGVtcyB3aGVuIHRoYXQgYXNzdW1wdGlv
biBpcwogICAgIC8vIHZpb2xhdGVkLgogICAgIGlmICgmb2xkQ2hpbGQgPT0gbV9pbm5lciB8fCAh
bV9pbm5lciB8fCBvbGRDaGlsZC5wYXJlbnQoKSA9PSB0aGlzKSB7CiAgICAgICAgIEFTU0VSVCgm
b2xkQ2hpbGQgPT0gbV9pbm5lciB8fCAhbV9pbm5lcik7Ci0gICAgICAgIFJlbmRlckZsZXhpYmxl
Qm94OjpyZW1vdmVDaGlsZChvbGRDaGlsZCk7CiAgICAgICAgIG1faW5uZXIgPSBudWxscHRyOwot
ICAgIH0gZWxzZQotICAgICAgICBtX2lubmVyLT5yZW1vdmVDaGlsZChvbGRDaGlsZCk7CisgICAg
ICAgIHJldHVybiBSZW5kZXJGbGV4aWJsZUJveDo6dGFrZUNoaWxkKG9sZENoaWxkKTsKKyAgICB9
CisgICAgcmV0dXJuIG1faW5uZXItPnRha2VDaGlsZChvbGRDaGlsZCk7CiB9CiAgICAgCiB2b2lk
IFJlbmRlckJ1dHRvbjo6dXBkYXRlQW5vbnltb3VzQ2hpbGRTdHlsZShjb25zdCBSZW5kZXJPYmpl
Y3QmIGNoaWxkLCBSZW5kZXJTdHlsZSYgY2hpbGRTdHlsZSkgY29uc3QKQEAgLTEyOCw4ICsxMjks
OSBAQCB2b2lkIFJlbmRlckJ1dHRvbjo6c2V0VGV4dChjb25zdCBTdHJpbmcmCiAgICAgICAgIGlm
IChtX2J1dHRvblRleHQpCiAgICAgICAgICAgICBtX2J1dHRvblRleHQtPnNldFRleHQoc3RyLmlt
cGwoKSk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9idXR0b25UZXh0ID0gbmV3IFJl
bmRlclRleHRGcmFnbWVudChkb2N1bWVudCgpLCBzdHIpOwotICAgICAgICAgICAgYWRkQ2hpbGQo
bV9idXR0b25UZXh0KTsKKyAgICAgICAgICAgIGF1dG8gbmV3QnV0dG9uVGV4dCA9IGNyZWF0ZVJl
bmRlcmVyPFJlbmRlclRleHRGcmFnbWVudD4oZG9jdW1lbnQoKSwgc3RyKTsKKyAgICAgICAgICAg
IG1fYnV0dG9uVGV4dCA9IG5ld0J1dHRvblRleHQuZ2V0KCk7CisgICAgICAgICAgICBhZGRDaGls
ZChXVEZNb3ZlKG5ld0J1dHRvblRleHQpKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9uLmgJKHJldmlzaW9uIDIyMjYwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsOCArNDAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0No
aWxkLCBSZW5kZXJPYmplY3QgKmJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBy
ZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QgKmJlZm9yZUNoaWxk
ID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJl
bmRlck9iamVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNC
bG9jayhSZW5kZXJCbG9jayopIG92ZXJyaWRlIHsgfQogICAgIGJvb2wgY3JlYXRlc0Fub255bW91
c1dyYXBwZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMjYwNykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDU1LDIzICs0NTUsMjYgQEAgYm9vbCBSZW5kZXJFbGVtZW50OjpjaGlsZFJlcXVp
cmVzVGFibGUoYwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJFbGVtZW50Ojph
ZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KQordm9pZCBSZW5kZXJFbGVtZW50OjphZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBu
ZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKLSAgICBpZiAoY2hpbGRSZXF1
aXJlc1RhYmxlKCpuZXdDaGlsZCkpIHsKKyAgICBhdXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAg
ICBpZiAoY2hpbGRSZXF1aXJlc1RhYmxlKGNoaWxkKSkgewogICAgICAgICBSZW5kZXJUYWJsZSog
dGFibGU7CiAgICAgICAgIFJlbmRlck9iamVjdCogYWZ0ZXJDaGlsZCA9IGJlZm9yZUNoaWxkID8g
YmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpIDogbV9sYXN0Q2hpbGQ7CiAgICAgICAgIGlm
IChhZnRlckNoaWxkICYmIGFmdGVyQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgaXM8UmVuZGVyVGFi
bGU+KCphZnRlckNoaWxkKSAmJiAhYWZ0ZXJDaGlsZC0+aXNCZWZvcmVDb250ZW50KCkpCiAgICAg
ICAgICAgICB0YWJsZSA9IGRvd25jYXN0PFJlbmRlclRhYmxlPihhZnRlckNoaWxkKTsKICAgICAg
ICAgZWxzZSB7Ci0gICAgICAgICAgICB0YWJsZSA9IFJlbmRlclRhYmxlOjpjcmVhdGVBbm9ueW1v
dXNXaXRoUGFyZW50UmVuZGVyZXIoKnRoaXMpLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGFkZENo
aWxkKHRhYmxlLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBhdXRvIG5ld1RhYmxlID0gIFJl
bmRlclRhYmxlOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoKnRoaXMpOworICAg
ICAgICAgICAgdGFibGUgPSBuZXdUYWJsZS5nZXQoKTsKKyAgICAgICAgICAgIGFkZENoaWxkKFdU
Rk1vdmUobmV3VGFibGUpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIH0KLSAgICAgICAgdGFibGUt
PmFkZENoaWxkKG5ld0NoaWxkKTsKKworICAgICAgICB0YWJsZS0+YWRkQ2hpbGQoV1RGTW92ZShu
ZXdDaGlsZCkpOwogICAgIH0gZWxzZQotICAgICAgICBpbnNlcnRDaGlsZEludGVybmFsKG5ld0No
aWxkLCBiZWZvcmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICBpbnNlcnRDaGlsZElu
dGVybmFsKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwog
Ci0gICAgaWYgKGlzPFJlbmRlclRleHQ+KCpuZXdDaGlsZCkpCi0gICAgICAgIGRvd25jYXN0PFJl
bmRlclRleHQ+KCpuZXdDaGlsZCkuc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlRXF1YWws
IG51bGxwdHIpOworICAgIGlmIChpczxSZW5kZXJUZXh0PihjaGlsZCkpCisgICAgICAgIGRvd25j
YXN0PFJlbmRlclRleHQ+KGNoaWxkKS5zdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2VFcXVh
bCwgbnVsbHB0cik7CiAKICAgICAvLyBTVkcgY3JlYXRlcyByZW5kZXJlcnMgZm9yIDxnIGRpc3Bs
YXk9Im5vbmUiPiwgYXMgU1ZHIHJlcXVpcmVzIGNoaWxkcmVuIG9mIGhpZGRlbgogICAgIC8vIDxn
PnMgdG8gaGF2ZSByZW5kZXJlcnMgLSBhdCBsZWFzdCB0aGF0J3MgaG93IG91ciBpbXBsZW1lbnRh
dGlvbiB3b3Jrcy4gQ29uc2lkZXI6CkBAIC00ODEsMjIgKzQ4NCwzMCBAQCB2b2lkIFJlbmRlckVs
ZW1lbnQ6OmFkZENoaWxkKFJlbmRlck9iamVjCiAgICAgLy8gICBrbm93IHRoYXQgaXQncyBpbnNp
ZGUgYSAiaGlkZGVuIFNWRyBzdWJ0cmVlIiwgYW5kIHRodXMgcGFpbnRzLCBldmVuIGlmIGl0IHNo
b3VsZG4ndC4KICAgICAvLyBUbyBhdm9pZCB0aGUgcHJvYmxlbSBhbGx0b2dldGhlciwgZGV0ZWN0
IGVhcmx5IGlmIHdlJ3JlIGluc2lkZSBhIGhpZGRlbiBTVkcgc3VidHJlZQogICAgIC8vIGFuZCBz
dG9wIGNyZWF0aW5nIGxheWVycyBhdCBhbGwgZm9yIHRoZXNlIGNhc2VzIC0gdGhleSdyZSBub3Qg
dXNlZCBhbnl3YXlzLgotICAgIGlmIChuZXdDaGlsZC0+aGFzTGF5ZXIoKSAmJiAhbGF5ZXJDcmVh
dGlvbkFsbG93ZWRGb3JTdWJ0cmVlKCkpCi0gICAgICAgIGRvd25jYXN0PFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q+KCpuZXdDaGlsZCkubGF5ZXIoKS0+cmVtb3ZlT25seVRoaXNMYXllcigpOworICAg
IGlmIChjaGlsZC5oYXNMYXllcigpICYmICFsYXllckNyZWF0aW9uQWxsb3dlZEZvclN1YnRyZWUo
KSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4oY2hpbGQpLmxheWVy
KCktPnJlbW92ZU9ubHlUaGlzTGF5ZXIoKTsKKworICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNoaWxk
QWRkZWQoKnRoaXMsIGNoaWxkKTsKK30KIAotICAgIFNWR1JlbmRlclN1cHBvcnQ6OmNoaWxkQWRk
ZWQoKnRoaXMsICpuZXdDaGlsZCk7CitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJFbGVt
ZW50Ojp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKK3sKKyAgICByZXR1cm4gdGFr
ZUNoaWxkSW50ZXJuYWwob2xkQ2hpbGQsIE5vdGlmeUNoaWxkcmVuKTsKIH0KIAotdm9pZCBSZW5k
ZXJFbGVtZW50OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQordm9pZCBSZW5k
ZXJFbGVtZW50OjpyZW1vdmVBbmREZXN0cm95Q2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkK
IHsKLSAgICByZW1vdmVDaGlsZEludGVybmFsKG9sZENoaWxkLCBOb3RpZnlDaGlsZHJlbik7Cisg
ICAgYXV0byB0b0Rlc3Ryb3kgPSB0YWtlQ2hpbGQob2xkQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRl
ckVsZW1lbnQ6OmRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCkKIHsKICAgICB3aGlsZSAobV9maXJz
dENoaWxkKSB7CiAgICAgICAgIGlmIChtX2ZpcnN0Q2hpbGQtPnN0eWxlKCkuc3R5bGVUeXBlKCkg
PT0gRklSU1RfTEVUVEVSICYmICFtX2ZpcnN0Q2hpbGQtPmlzVGV4dCgpKSB7Ci0gICAgICAgICAg
ICBtX2ZpcnN0Q2hpbGQtPnJlbW92ZUZyb21QYXJlbnQoKTsgLy8gOmZpcnN0LWxldHRlciBmcmFn
bWVudCByZW5kZXJlcnMgYXJlIGRlc3Ryb3llZCBieSB0aGVpciByZW1haW5pbmcgdGV4dCBmcmFn
bWVudC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBNZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICAg
ICAgIGF1dG8gZmlyc3RMZXR0ZXIgPSB0YWtlQ2hpbGQoKm1fZmlyc3RDaGlsZCk7IC8vIDpmaXJz
dC1sZXR0ZXIgZnJhZ21lbnQgcmVuZGVyZXJzIGFyZSBkZXN0cm95ZWQgYnkgdGhlaXIgcmVtYWlu
aW5nIHRleHQgZnJhZ21lbnQuCisgICAgICAgICAgICBhdXRvKiBsZWFrZWRQdHIgPSBmaXJzdExl
dHRlci5sZWFrUHRyKCk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0obGVha2VkUHRyKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIERlc3Ryb3kgYW55IGFub255bW91cyBjaGls
ZHJlbiByZW1haW5pbmcgaW4gdGhlIHJlbmRlciB0cmVlLCBhcyB3ZWxsIGFzIGltcGxpY2l0IChz
aGFkb3cpIERPTSBlbGVtZW50cyBsaWtlIHRob3NlIHVzZWQgaW4gdGhlIGVuZ2luZS1iYXNlZCB0
ZXh0IGZpZWxkcy4KICAgICAgICAgICAgIGlmIChtX2ZpcnN0Q2hpbGQtPm5vZGUoKSkKQEAgLTUw
NiwyNCArNTE3LDIxIEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6ZGVzdHJveUxlZnRvdmVyQ2hpbGQK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyRWxlbWVudDo6aW5zZXJ0Q2hpbGRJbnRlcm5hbChSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBOb3RpZnlDaGls
ZHJlblR5cGUgbm90aWZ5Q2hpbGRyZW4pCit2b2lkIFJlbmRlckVsZW1lbnQ6Omluc2VydENoaWxk
SW50ZXJuYWwoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGRQdHIsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQsIE5vdGlmeUNoaWxkcmVuVHlwZSBub3RpZnlDaGlsZHJlbikKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIXZpZXcoKS5sYXlvdXRTdGF0ZSgpLCAiTGF5
b3V0IG11c3Qgbm90IG11dGF0ZSByZW5kZXIgdHJlZSIpOwogCiAgICAgQVNTRVJUKGNhbkhhdmVD
aGlsZHJlbigpIHx8IGNhbkhhdmVHZW5lcmF0ZWRDaGlsZHJlbigpKTsKLSAgICBBU1NFUlQoIW5l
d0NoaWxkLT5wYXJlbnQoKSk7Ci0gICAgQVNTRVJUKCFpc1JlbmRlckJsb2NrRmxvdygpIHx8ICgh
bmV3Q2hpbGQtPmlzVGFibGVTZWN0aW9uKCkgJiYgIW5ld0NoaWxkLT5pc1RhYmxlUm93KCkgJiYg
IW5ld0NoaWxkLT5pc1RhYmxlQ2VsbCgpKSk7CisgICAgQVNTRVJUKCFuZXdDaGlsZFB0ci0+cGFy
ZW50KCkpOworICAgIEFTU0VSVCghaXNSZW5kZXJCbG9ja0Zsb3coKSB8fCAoIW5ld0NoaWxkUHRy
LT5pc1RhYmxlU2VjdGlvbigpICYmICFuZXdDaGlsZFB0ci0+aXNUYWJsZVJvdygpICYmICFuZXdD
aGlsZFB0ci0+aXNUYWJsZUNlbGwoKSkpOwogCiAgICAgd2hpbGUgKGJlZm9yZUNoaWxkICYmIGJl
Zm9yZUNoaWxkLT5wYXJlbnQoKSAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykKICAg
ICAgICAgYmVmb3JlQ2hpbGQgPSBiZWZvcmVDaGlsZC0+cGFyZW50KCk7CiAKLSAgICAvLyBUaGlz
IHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpZiBpdCBkb2VzIHByZXZlbnQgcmVuZGVyIHRyZWUg
Y29ycnVwdGlvbgotICAgIC8vIHdoZXJlIGNoaWxkLT5wYXJlbnQoKSBlbmRzIHVwIGJlaW5nIG93
bmVyIGJ1dCBjaGlsZC0+bmV4dFNpYmxpbmcoKS0+cGFyZW50KCkKLSAgICAvLyBpcyBub3Qgb3du
ZXIuCi0gICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlz
KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRo
aXMpOworCisgICAgLy8gVGFrZSB0aGUgb3duZXJzaGlwLgorICAgIGF1dG8qIG5ld0NoaWxkID0g
bmV3Q2hpbGRQdHIubGVha1B0cigpOwogCiAgICAgbmV3Q2hpbGQtPnNldFBhcmVudCh0aGlzKTsK
IApAQCAtNTY1LDcgKzU3Myw3IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6aW5zZXJ0Q2hpbGRJbnRl
cm5hbCgKICAgICAgICAgbmV3Q2hpbGQtPnNldEhhc091dGxpbmVBdXRvQW5jZXN0b3IoKTsKIH0K
IAotdm9pZCBSZW5kZXJFbGVtZW50OjpyZW1vdmVDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCYg
b2xkQ2hpbGQsIE5vdGlmeUNoaWxkcmVuVHlwZSBub3RpZnlDaGlsZHJlbikKK1JlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IFJlbmRlckVsZW1lbnQ6OnRha2VDaGlsZEludGVybmFsKFJlbmRlck9iamVj
dCYgb2xkQ2hpbGQsIE5vdGlmeUNoaWxkcmVuVHlwZSBub3RpZnlDaGlsZHJlbikKIHsKICAgICBS
RUxFQVNFX0FTU0VSVF9XSVRIX01FU1NBR0UoIXZpZXcoKS5sYXlvdXRTdGF0ZSgpLCAiTGF5b3V0
IG11c3Qgbm90IG11dGF0ZSByZW5kZXIgdHJlZSIpOwogCkBAIC02MzgsNiArNjQ2LDggQEAgdm9p
ZCBSZW5kZXJFbGVtZW50OjpyZW1vdmVDaGlsZEludGVybmFsKAogICAgIGlmIChpczxSZW5kZXJM
aXN0TWFya2VyPihvbGRDaGlsZCkpCiAgICAgICAgIEFTU0VSVChtX3JlcGFyZW50aW5nQ2hpbGQg
fHwgIWRvd25jYXN0PFJlbmRlckxpc3RNYXJrZXI+KG9sZENoaWxkKS5saXN0SXRlbSgpLmluTGF5
b3V0KCkpOwogI2VuZGlmCisKKyAgICByZXR1cm4gUmVuZGVyUHRyPFJlbmRlck9iamVjdD4oJm9s
ZENoaWxkKTsKIH0KIAogUmVuZGVyQmxvY2sqIFJlbmRlckVsZW1lbnQ6OmNvbnRhaW5pbmdCbG9j
a0ZvckZpeGVkUG9zaXRpb24oKSBjb25zdApAQCAtOTM3LDEwICs5NDcsMTEgQEAgdm9pZCBSZW5k
ZXJFbGVtZW50OjpoYW5kbGVEeW5hbWljRmxvYXRQbwogICAgICAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyQm94TW9kZWxPYmplY3Q+KCpwYXJlbnQoKSkuY2hpbGRCZWNhbWVOb25JbmxpbmUoKnRoaXMp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIEFuIGFub255bW91cyBibG9jayBtdXN0
IGJlIG1hZGUgdG8gd3JhcCB0aGlzIGlubGluZS4KLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBi
bG9jayA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqcGFyZW50KCkpLmNyZWF0ZUFub255bW91c0Js
b2NrKCk7Ci0gICAgICAgICAgICBwYXJlbnQoKS0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChibG9jaywg
dGhpcywgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOwotICAgICAgICAgICAgcGFyZW50
KCktPnJlbW92ZUNoaWxkSW50ZXJuYWwoKnRoaXMsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNoaWxk
cmVuKTsKLSAgICAgICAgICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKHRoaXMsIG51bGxw
dHIsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgIGF1dG8gbmV3
QmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnBhcmVudCgpKS5jcmVhdGVBbm9ueW1vdXNC
bG9jaygpOworICAgICAgICAgICAgYXV0byYgYmxvY2sgPSAqbmV3QmxvY2s7CisgICAgICAgICAg
ICBwYXJlbnQoKS0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld0Jsb2NrKSwgdGhpcywg
UmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgYXV0byB0aGlzVG9N
b3ZlID0gcGFyZW50KCktPnRha2VDaGlsZEludGVybmFsKCp0aGlzLCBSZW5kZXJFbGVtZW50OjpO
b3RpZnlDaGlsZHJlbik7CisgICAgICAgICAgICBibG9jay5pbnNlcnRDaGlsZEludGVybmFsKFdU
Rk1vdmUodGhpc1RvTW92ZSksIG51bGxwdHIsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNoaWxkcmVu
KTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODUsOSArODUsMTAgQEAgcHVi
bGljOgogICAgIGJvb2wgaXNSZW5kZXJJbmxpbmUoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpOwot
ICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVj
dCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKSB7IHJldHVy
biBhZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHJl
bW92ZUNoaWxkKFJlbmRlck9iamVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5k
ZXJQdHI8UmVuZGVyT2JqZWN0PiwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIp
OworICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVs
bHB0cikgeyBhZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOyB9CisgICAg
dmlydHVhbCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0Jikg
V0FSTl9VTlVTRURfUkVUVVJOOworICAgIHZvaWQgcmVtb3ZlQW5kRGVzdHJveUNoaWxkKFJlbmRl
ck9iamVjdCYpOwogCiAgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIHVzZWQgd2hl
biB0aGUgcmVuZGVyIHRyZWUgaGllcmFyY2h5IGNoYW5nZXMgdG8gbWFrZSBzdXJlIGxheWVycyBn
ZXQKICAgICAvLyBwcm9wZXJseSBhZGRlZCBhbmQgcmVtb3ZlZC4gU2luY2UgY29udGFpbmVyc2hp
cCBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgYW55IHN1YmNsYXNzLCBhbmQgc2luY2UgYSBoaWVyYXJj
aHkKQEAgLTk4LDggKzk5LDggQEAgcHVibGljOgogICAgIFJlbmRlckxheWVyKiBmaW5kTmV4dExh
eWVyKFJlbmRlckxheWVyKiBwYXJlbnRMYXllciwgUmVuZGVyT2JqZWN0KiBzdGFydFBvaW50LCBi
b29sIGNoZWNrUGFyZW50ID0gdHJ1ZSk7CiAKICAgICBlbnVtIE5vdGlmeUNoaWxkcmVuVHlwZSB7
IE5vdGlmeUNoaWxkcmVuLCBEb250Tm90aWZ5Q2hpbGRyZW4gfTsKLSAgICB2b2lkIGluc2VydENo
aWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgTm90
aWZ5Q2hpbGRyZW5UeXBlKTsKLSAgICB2b2lkIHJlbW92ZUNoaWxkSW50ZXJuYWwoUmVuZGVyT2Jq
ZWN0JiwgTm90aWZ5Q2hpbGRyZW5UeXBlKTsKKyAgICB2b2lkIGluc2VydENoaWxkSW50ZXJuYWwo
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4sIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIE5vdGlm
eUNoaWxkcmVuVHlwZSk7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkSW50
ZXJuYWwoUmVuZGVyT2JqZWN0JiwgTm90aWZ5Q2hpbGRyZW5UeXBlKSBXQVJOX1VOVVNFRF9SRVRV
Uk47CiAKICAgICB2aXJ0dWFsIFJlbmRlckVsZW1lbnQqIGhvdmVyQW5jZXN0b3IoKSBjb25zdDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNw
cAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1
bGxTY3JlZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw2IEBAIFJlbmRlckZ1bGxT
Y3JlZW46OlJlbmRlckZ1bGxTY3JlZW4oRG9jdW0KIHZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6d2ls
bEJlRGVzdHJveWVkKCkKIHsKICAgICBpZiAobV9wbGFjZWhvbGRlcikgewotICAgICAgICByZW1v
dmVGcm9tUGFyZW50KCk7CiAgICAgICAgIGlmICghbV9wbGFjZWhvbGRlci0+YmVpbmdEZXN0cm95
ZWQoKSkKICAgICAgICAgICAgIG1fcGxhY2Vob2xkZXItPmRlc3Ryb3koKTsKICAgICAgICAgQVNT
RVJUKCFtX3BsYWNlaG9sZGVyKTsKQEAgLTEwNCwzOCArMTAzLDUzIEBAIHN0YXRpYyBSZW5kZXJT
dHlsZSBjcmVhdGVGdWxsU2NyZWVuU3R5bGUKICAgICByZXR1cm4gZnVsbHNjcmVlblN0eWxlOwog
fQogCi1SZW5kZXJGdWxsU2NyZWVuKiBSZW5kZXJGdWxsU2NyZWVuOjp3cmFwUmVuZGVyZXIoUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIFJlbmRlckVsZW1lbnQqIHBhcmVudCwgRG9jdW1lbnQmIGRvY3Vt
ZW50KQorUmVuZGVyUHRyPFJlbmRlckZ1bGxTY3JlZW4+IFJlbmRlckZ1bGxTY3JlZW46OndyYXBO
ZXdSZW5kZXJlcihSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gcmVuZGVyZXIsIFJlbmRlckVsZW1l
bnQmIHBhcmVudCwgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIFJlbmRlckZ1bGxTY3JlZW4q
IGZ1bGxzY3JlZW5SZW5kZXJlciA9IG5ldyBSZW5kZXJGdWxsU2NyZWVuKGRvY3VtZW50LCBjcmVh
dGVGdWxsU2NyZWVuU3R5bGUoKSk7Ci0gICAgZnVsbHNjcmVlblJlbmRlcmVyLT5pbml0aWFsaXpl
U3R5bGUoKTsKLSAgICBpZiAocGFyZW50ICYmICFwYXJlbnQtPmlzQ2hpbGRBbGxvd2VkKCpmdWxs
c2NyZWVuUmVuZGVyZXIsIGZ1bGxzY3JlZW5SZW5kZXJlci0+c3R5bGUoKSkpIHsKLSAgICAgICAg
ZnVsbHNjcmVlblJlbmRlcmVyLT5kZXN0cm95KCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICBpZiAob2JqZWN0KSB7Ci0gICAgICAgIC8vIHxvYmplY3QtPnBhcmVudCgpfCBjYW4gYmUg
bnVsbCBpZiB0aGUgb2JqZWN0IGlzIG5vdCB5ZXQgYXR0YWNoZWQKLSAgICAgICAgLy8gdG8gfHBh
cmVudHwuCi0gICAgICAgIGlmIChSZW5kZXJFbGVtZW50KiBwYXJlbnQgPSBvYmplY3QtPnBhcmVu
dCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gb2JqZWN0
LT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIEFTU0VSVChjb250YWluaW5nQmxvY2sp
OwotICAgICAgICAgICAgLy8gU2luY2Ugd2UgYXJlIG1vdmluZyB0aGUgfG9iamVjdHwgdG8gYSBu
ZXcgcGFyZW50IHxmdWxsc2NyZWVuUmVuZGVyZXJ8LAotICAgICAgICAgICAgLy8gdGhlIGxpbmUg
Ym94IHRyZWUgdW5kZXJuZWF0aCBvdXIgfGNvbnRhaW5pbmdCbG9ja3wgaXMgbm90IGxvbmdlciB2
YWxpZC4KLSAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jay0+ZGVsZXRlTGluZXMoKTsKLQotICAg
ICAgICAgICAgcGFyZW50LT5hZGRDaGlsZChmdWxsc2NyZWVuUmVuZGVyZXIsIG9iamVjdCk7Ci0g
ICAgICAgICAgICBvYmplY3QtPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gQWx3YXlzIGp1c3QgZG8gYSBmdWxsIGxheW91dCB0byBlbnN1cmUgdGhhdCBs
aW5lIGJveGVzIGdldCBkZWxldGVkIHByb3Blcmx5LgotICAgICAgICAgICAgLy8gQmVjYXVzZSBv
YmplY3RzIG1vdmVkIGZyb20gfHBhcmVudHwgdG8gfGZ1bGxzY3JlZW5SZW5kZXJlcnwsIHdlIHdh
bnQgdG8KLSAgICAgICAgICAgIC8vIG1ha2UgbmV3IGxpbmUgYm94ZXMgaW5zdGVhZCBvZiBsZWF2
aW5nIHRoZSBvbGQgb25lcyBhcm91bmQuCi0gICAgICAgICAgICBwYXJlbnQtPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrLT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICAgICAgfQotICAgICAgICBm
dWxsc2NyZWVuUmVuZGVyZXItPmFkZENoaWxkKG9iamVjdCk7Ci0gICAgICAgIGZ1bGxzY3JlZW5S
ZW5kZXJlci0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgfQotICAg
IGRvY3VtZW50LnNldEZ1bGxTY3JlZW5SZW5kZXJlcihmdWxsc2NyZWVuUmVuZGVyZXIpOwotICAg
IHJldHVybiBmdWxsc2NyZWVuUmVuZGVyZXI7CisgICAgYXV0byBuZXdGdWxsc2NyZWVuUmVuZGVy
ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJGdWxsU2NyZWVuPihkb2N1bWVudCwgY3JlYXRlRnVs
bFNjcmVlblN0eWxlKCkpOworICAgIG5ld0Z1bGxzY3JlZW5SZW5kZXJlci0+aW5pdGlhbGl6ZVN0
eWxlKCk7CisKKyAgICBhdXRvJiBmdWxsc2NyZWVuUmVuZGVyZXIgPSAqbmV3RnVsbHNjcmVlblJl
bmRlcmVyOworICAgIGlmICghcGFyZW50LmlzQ2hpbGRBbGxvd2VkKGZ1bGxzY3JlZW5SZW5kZXJl
ciwgZnVsbHNjcmVlblJlbmRlcmVyLnN0eWxlKCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGZ1bGxzY3JlZW5SZW5kZXJlci5hZGRDaGlsZChXVEZNb3ZlKHJlbmRlcmVyKSk7Cisg
ICAgZnVsbHNjcmVlblJlbmRlcmVyLnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygp
OworCisgICAgZG9jdW1lbnQuc2V0RnVsbFNjcmVlblJlbmRlcmVyKCZmdWxsc2NyZWVuUmVuZGVy
ZXIpOworCisgICAgcmV0dXJuIG5ld0Z1bGxzY3JlZW5SZW5kZXJlcjsKK30KKwordm9pZCBSZW5k
ZXJGdWxsU2NyZWVuOjp3cmFwRXhpc3RpbmdSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIGF1dG8gbmV3RnVsbHNjcmVlblJlbmRlcmVy
ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyRnVsbFNjcmVlbj4oZG9jdW1lbnQsIGNyZWF0ZUZ1bGxT
Y3JlZW5TdHlsZSgpKTsKKyAgICBuZXdGdWxsc2NyZWVuUmVuZGVyZXItPmluaXRpYWxpemVTdHls
ZSgpOworCisgICAgYXV0byYgZnVsbHNjcmVlblJlbmRlcmVyID0gKm5ld0Z1bGxzY3JlZW5SZW5k
ZXJlcjsKKyAgICBhdXRvJiBwYXJlbnQgPSAqcmVuZGVyZXIucGFyZW50KCk7CisgICAgaWYgKCFw
YXJlbnQuaXNDaGlsZEFsbG93ZWQoZnVsbHNjcmVlblJlbmRlcmVyLCBmdWxsc2NyZWVuUmVuZGVy
ZXIuc3R5bGUoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlbmRlckJsb2NrKiBjb250YWlu
aW5nQmxvY2sgPSByZW5kZXJlci5jb250YWluaW5nQmxvY2soKTsKKyAgICBBU1NFUlQoY29udGFp
bmluZ0Jsb2NrKTsKKyAgICAvLyBTaW5jZSB3ZSBhcmUgbW92aW5nIHRoZSB8b2JqZWN0fCB0byBh
IG5ldyBwYXJlbnQgfGZ1bGxzY3JlZW5SZW5kZXJlcnwsCisgICAgLy8gdGhlIGxpbmUgYm94IHRy
ZWUgdW5kZXJuZWF0aCBvdXIgfGNvbnRhaW5pbmdCbG9ja3wgaXMgbm90IGxvbmdlciB2YWxpZC4K
KyAgICBjb250YWluaW5nQmxvY2stPmRlbGV0ZUxpbmVzKCk7CisKKyAgICBwYXJlbnQuYWRkQ2hp
bGQoV1RGTW92ZShuZXdGdWxsc2NyZWVuUmVuZGVyZXIpLCAmcmVuZGVyZXIpOworCisgICAgYXV0
byB0b01vdmUgPSBwYXJlbnQudGFrZUNoaWxkKHJlbmRlcmVyKTsKKworICAgIC8vIEFsd2F5cyBq
dXN0IGRvIGEgZnVsbCBsYXlvdXQgdG8gZW5zdXJlIHRoYXQgbGluZSBib3hlcyBnZXQgZGVsZXRl
ZCBwcm9wZXJseS4KKyAgICAvLyBCZWNhdXNlIG9iamVjdHMgbW92ZWQgZnJvbSB8cGFyZW50fCB0
byB8ZnVsbHNjcmVlblJlbmRlcmVyfCwgd2Ugd2FudCB0bworICAgIC8vIG1ha2UgbmV3IGxpbmUg
Ym94ZXMgaW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBvbGQgb25lcyBhcm91bmQuCisgICAgcGFyZW50
LnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworICAgIGNvbnRhaW5pbmdCbG9j
ay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisKKyAgICBmdWxsc2NyZWVu
UmVuZGVyZXIuYWRkQ2hpbGQoV1RGTW92ZSh0b01vdmUpKTsKKyAgICBmdWxsc2NyZWVuUmVuZGVy
ZXIuc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisKKyAgICBkb2N1bWVudC5z
ZXRGdWxsU2NyZWVuUmVuZGVyZXIoJmZ1bGxzY3JlZW5SZW5kZXJlcik7CiB9CiAKIHZvaWQgUmVu
ZGVyRnVsbFNjcmVlbjo6dW53cmFwUmVuZGVyZXIoYm9vbCYgcmVxdWlyZXNSZW5kZXJUcmVlUmVi
dWlsZCkKQEAgLTE1OSw4ICsxNzMsNyBAQCB2b2lkIFJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJl
bmRlcmVyKGJvCiAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIG5vbkFub255bW91c0NoaWxkID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpjaGlsZCkuZmlyc3RDaGlsZCgpKQogICAgICAgICAgICAg
ICAgICAgICBjaGlsZCA9IG5vbkFub255bW91c0NoaWxkOwogICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBjaGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgICAg
ICAgICAgICAgICAgICBjaGlsZC0+ZGVzdHJveSgpOworICAgICAgICAgICAgICAgICAgICBjaGls
ZC0+cmVtb3ZlRnJvbVBhcmVudEFuZERlc3Ryb3koKTsKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTY5LDE1ICsxODIs
MTYgQEAgdm9pZCBSZW5kZXJGdWxsU2NyZWVuOjp1bndyYXBSZW5kZXJlcihibwogICAgICAgICAg
ICAgLy8gbHlpbmcgYXJvdW5kIG9uIHRoZSBjaGlsZC4KICAgICAgICAgICAgIGlmIChpczxSZW5k
ZXJCb3g+KCpjaGlsZCkpCiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyQm94PigqY2hp
bGQpLmNsZWFyT3ZlcnJpZGVTaXplKCk7Ci0gICAgICAgICAgICBjaGlsZC0+cmVtb3ZlRnJvbVBh
cmVudCgpOwotICAgICAgICAgICAgcGFyZW50KCktPmFkZENoaWxkKGNoaWxkLCB0aGlzKTsKKyAg
ICAgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSBjaGlsZC0+cGFyZW50KCktPnRha2VDaGlsZCgq
Y2hpbGQpOworICAgICAgICAgICAgcGFyZW50KCktPmFkZENoaWxkKFdURk1vdmUoY2hpbGRUb01v
dmUpLCB0aGlzKTsKICAgICAgICAgICAgIHBhcmVudCgpLT5zZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAocGxhY2Vob2xkZXIoKSkK
LSAgICAgICAgcGxhY2Vob2xkZXIoKS0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgIHJlbW92ZUZy
b21QYXJlbnQoKTsKLSAgICBkb2N1bWVudCgpLnNldEZ1bGxTY3JlZW5SZW5kZXJlcigwKTsKKyAg
ICAgICAgcGxhY2Vob2xkZXIoKS0+cmVtb3ZlRnJvbVBhcmVudEFuZERlc3Ryb3koKTsKKworICAg
IGRvY3VtZW50KCkuc2V0RnVsbFNjcmVlblJlbmRlcmVyKG51bGxwdHIpOworICAgIHJlbW92ZUZy
b21QYXJlbnRBbmREZXN0cm95KCk7CiB9CiAKIHZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6c2V0UGxh
Y2Vob2xkZXIoUmVuZGVyQmxvY2sqIHBsYWNlaG9sZGVyKQpAQCAtMTk3LDEyICsyMTEsMTYgQEAg
dm9pZCBSZW5kZXJGdWxsU2NyZWVuOjpjcmVhdGVQbGFjZWhvbGRlcgogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgbV9wbGFjZWhvbGRlciA9IG5ldyBSZW5kZXJGdWxsU2NyZWVuUGxhY2Vo
b2xkZXIoKnRoaXMsIFdURk1vdmUoKnN0eWxlKSk7Ci0gICAgbV9wbGFjZWhvbGRlci0+aW5pdGlh
bGl6ZVN0eWxlKCk7Ci0gICAgaWYgKHBhcmVudCgpKSB7Ci0gICAgICAgIHBhcmVudCgpLT5hZGRD
aGlsZChtX3BsYWNlaG9sZGVyLCB0aGlzKTsKLSAgICAgICAgcGFyZW50KCktPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgIH0KKyAgICBpZiAoIXBhcmVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIG5ld1BsYWNlaG9sZGVyID0gY3JlYXRlUmVuZGVyZXI8
UmVuZGVyRnVsbFNjcmVlblBsYWNlaG9sZGVyPigqdGhpcywgV1RGTW92ZSgqc3R5bGUpKTsKKyAg
ICBuZXdQbGFjZWhvbGRlci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisKKyAgICBtX3BsYWNlaG9sZGVy
ID0gbmV3UGxhY2Vob2xkZXIuZ2V0KCk7CisKKyAgICBwYXJlbnQoKS0+YWRkQ2hpbGQoV1RGTW92
ZShuZXdQbGFjZWhvbGRlciksIHRoaXMpOworICAgIHBhcmVudCgpLT5zZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckZ1bGxTY3JlZW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3
ICs0MCw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJCbG9jayogcGxhY2Vob2xkZXIoKSB7IHJldHVy
biBtX3BsYWNlaG9sZGVyOyB9CiAgICAgdm9pZCBjcmVhdGVQbGFjZWhvbGRlcihzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+LCBjb25zdCBMYXlvdXRSZWN0JiBmcmFtZVJlY3QpOwogCi0gICAg
c3RhdGljIFJlbmRlckZ1bGxTY3JlZW4qIHdyYXBSZW5kZXJlcihSZW5kZXJPYmplY3QqLCBSZW5k
ZXJFbGVtZW50KiwgRG9jdW1lbnQmKTsKKyAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlckZ1bGxT
Y3JlZW4+IHdyYXBOZXdSZW5kZXJlcihSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4sIFJlbmRlckVs
ZW1lbnQmIHBhcmVudCwgRG9jdW1lbnQmKTsKKyAgICBzdGF0aWMgdm9pZCB3cmFwRXhpc3RpbmdS
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgRG9jdW1lbnQmKTsKICAgICB2b2lkIHVud3JhcFJlbmRl
cmVyKGJvb2wmIHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQpOwogCiAgICAgSXRlbVBvc2l0aW9u
IHNlbGZBbGlnbm1lbnROb3JtYWxCZWhhdmlvcihjb25zdCBSZW5kZXJCb3gqID0gbnVsbHB0cikg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSXRlbVBvc2l0aW9uQ2VudGVyOyB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDEzICs2NiwxNCBAQCBSZW5kZXJHcmlkOjp+UmVuZGVyR3JpZCgpCiB7CiB9CiAKLXZvaWQg
UmVuZGVyR3JpZDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyR3JpZDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVu
ZGVyQmxvY2s6OmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgYXV0byYgY2hp
bGQgPSAqbmV3Q2hpbGQ7CisgICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hp
bGQpLCBiZWZvcmVDaGlsZCk7CiAKICAgICAvLyBQb3NpdGlvbmVkIGdyaWQgaXRlbXMgZG8gbm90
IHRha2UgdXAgc3BhY2Ugb3Igb3RoZXJ3aXNlIHBhcnRpY2lwYXRlIGluIHRoZSBsYXlvdXQgb2Yg
dGhlIGdyaWQsCiAgICAgLy8gZm9yIHRoYXQgcmVhc29uIHdlIGRvbid0IG5lZWQgdG8gbWFyayB0
aGUgZ3JpZCBhcyBkaXJ0eSB3aGVuIHRoZXkgYXJlIGFkZGVkLgotICAgIGlmIChuZXdDaGlsZC0+
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgaWYgKGNoaWxkLmlzT3V0T2ZGbG93UG9zaXRp
b25lZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBUaGUgZ3JpZCBuZWVkcyB0byBiZSBy
ZWNvbXB1dGVkIGFzIGl0IG1pZ2h0IGNvbnRhaW4gYXV0by1wbGFjZWQgaXRlbXMgdGhhdApAQCAt
ODAsMTggKzgxLDE5IEBAIHZvaWQgUmVuZGVyR3JpZDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiAK
ICAgICBkaXJ0eUdyaWQoKTsKIH0KIAotdm9pZCBSZW5kZXJHcmlkOjpyZW1vdmVDaGlsZChSZW5k
ZXJPYmplY3QmIGNoaWxkKQorUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyR3JpZDo6dGFr
ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCiB7Ci0gICAgUmVuZGVyQmxvY2s6OnJlbW92ZUNo
aWxkKGNoaWxkKTsKKyAgICBhdXRvIHRha2VuQ2hpbGQgPSBSZW5kZXJCbG9jazo6dGFrZUNoaWxk
KGNoaWxkKTsKIAogICAgIC8vIFBvc2l0aW9uZWQgZ3JpZCBpdGVtcyBkbyBub3QgdGFrZSB1cCBz
cGFjZSBvciBvdGhlcndpc2UgcGFydGljaXBhdGUgaW4gdGhlIGxheW91dCBvZiB0aGUgZ3JpZCwK
ICAgICAvLyBmb3IgdGhhdCByZWFzb24gd2UgZG9uJ3QgbmVlZCB0byBtYXJrIHRoZSBncmlkIGFz
IGRpcnR5IHdoZW4gdGhleSBhcmUgcmVtb3ZlZC4KICAgICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRha2VuQ2hpbGQ7
CiAKICAgICAvLyBUaGUgZ3JpZCBuZWVkcyB0byBiZSByZWNvbXB1dGVkIGFzIGl0IG1pZ2h0IGNv
bnRhaW4gYXV0by1wbGFjZWQgaXRlbXMgdGhhdAogICAgIC8vIHdpbGwgY2hhbmdlIHRoZWlyIHBv
c2l0aW9uLgogICAgIGRpcnR5R3JpZCgpOworICAgIHJldHVybiB0YWtlbkNoaWxkOwogfQogCiBT
dHlsZVNlbGZBbGlnbm1lbnREYXRhIFJlbmRlckdyaWQ6OnNlbGZBbGlnbm1lbnRGb3JDaGlsZChH
cmlkQXhpcyBheGlzLCBjb25zdCBSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBSZW5kZXJTdHlsZSog
Z3JpZFN0eWxlKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdy
aWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5o
CShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBp
c1JlbmRlckdyaWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCBj
b21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgs
IExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lk
IGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JikgZmluYWw7Cisg
ICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkgZmluYWw7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4g
dGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIGZpbmFsOwogCiAgICAgU3R5bGVTZWxmQWxpZ25tZW50
RGF0YSBzZWxmQWxpZ25tZW50Rm9yQ2hpbGQoR3JpZEF4aXMsIGNvbnN0IFJlbmRlckJveCYsIGNv
bnN0IFJlbmRlclN0eWxlKiA9IG51bGxwdHIpIGNvbnN0OwogICAgIGJvb2wgc2VsZkFsaWdubWVu
dENoYW5nZWRUb1N0cmV0Y2goR3JpZEF4aXMsIGNvbnN0IFJlbmRlclN0eWxlJiBvbGRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAy
MjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjcwLDE0ICsyNzAsMTYgQEAgTGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6
OmxvY2FsQ2FyZXRSZWN0KAogICAgIHJldHVybiBjYXJldFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVy
SW5saW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQordm9pZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJP
YmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGF1dG8q
IGJlZm9yZUNoaWxkT3JQbGFjZWhvbGRlciA9IGJlZm9yZUNoaWxkOwogICAgIGlmIChhdXRvKiBm
cmFnbWVudGVkRmxvdyA9IGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93KCkpCiAgICAgICAgIGJlZm9y
ZUNoaWxkT3JQbGFjZWhvbGRlciA9IGZyYWdtZW50ZWRGbG93LT5yZXNvbHZlTW92ZWRDaGlsZChi
ZWZvcmVDaGlsZCk7Ci0gICAgaWYgKGNvbnRpbnVhdGlvbigpKQotICAgICAgICByZXR1cm4gYWRk
Q2hpbGRUb0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyKTsK
LSAgICByZXR1cm4gYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3Jl
Q2hpbGRPclBsYWNlaG9sZGVyKTsKKyAgICBpZiAoY29udGludWF0aW9uKCkpIHsKKyAgICAgICAg
YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGRPclBs
YWNlaG9sZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhZGRDaGlsZElnbm9yaW5n
Q29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIp
OwogfQogCiBzdGF0aWMgUmVuZGVyQm94TW9kZWxPYmplY3QqIG5leHRDb250aW51YXRpb24oUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcikKQEAgLTMxOCw3ICszMjAsNyBAQCBzdGF0aWMgYm9vbCBuZXdD
aGlsZElzSW5saW5lKGNvbnN0IFJlbmRlCiAgICAgcmV0dXJuIG5ld0NoaWxkLmlzSW5saW5lKCkg
fCAocGFyZW50LmNoaWxkUmVxdWlyZXNUYWJsZShuZXdDaGlsZCkgJiYgcGFyZW50LnN0eWxlKCku
ZGlzcGxheSgpID09IElOTElORSk7CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZEln
bm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVh
dGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCkKIHsKICAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgYXBwZW5kIHRoaW5ncyBhZnRl
ciA6YWZ0ZXItZ2VuZXJhdGVkIGNvbnRlbnQgaWYgd2UgaGF2ZSBpdC4KICAgICBpZiAoIWJlZm9y
ZUNoaWxkICYmIGlzQWZ0ZXJDb250ZW50KGxhc3RDaGlsZCgpKSkKQEAgLTMzOCwxNyArMzQwLDE4
IEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZElnbm9yaW5nQ29udGkKICAgICAgICAgaWYg
KGF1dG8gcG9zaXRpb25lZEFuY2VzdG9yID0gaW5GbG93UG9zaXRpb25lZElubGluZUFuY2VzdG9y
KHRoaXMpKQogICAgICAgICAgICAgbmV3U3R5bGUuc2V0UG9zaXRpb24ocG9zaXRpb25lZEFuY2Vz
dG9yLT5zdHlsZSgpLnBvc2l0aW9uKCkpOwogCi0gICAgICAgIFJlbmRlckJsb2NrKiBuZXdCb3gg
PSBuZXcgUmVuZGVyQmxvY2tGbG93KGRvY3VtZW50KCksIFdURk1vdmUobmV3U3R5bGUpKTsKKyAg
ICAgICAgYXV0byBuZXdCb3ggPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KGRvY3Vt
ZW50KCksIFdURk1vdmUobmV3U3R5bGUpKTsKICAgICAgICAgbmV3Qm94LT5pbml0aWFsaXplU3R5
bGUoKTsKICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnRpbnVhdGlvbiA9IGNv
bnRpbnVhdGlvbigpOwotICAgICAgICBzZXRDb250aW51YXRpb24obmV3Qm94KTsKKyAgICAgICAg
c2V0Q29udGludWF0aW9uKG5ld0JveC5nZXQoKSk7CiAKLSAgICAgICAgc3BsaXRGbG93KGJlZm9y
ZUNoaWxkLCBuZXdCb3gsIG5ld0NoaWxkLCBvbGRDb250aW51YXRpb24pOworICAgICAgICBzcGxp
dEZsb3coYmVmb3JlQ2hpbGQsIFdURk1vdmUobmV3Qm94KSwgV1RGTW92ZShuZXdDaGlsZCksIG9s
ZENvbnRpbnVhdGlvbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCi0gICAgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7Ci0gICAgbmV3
Q2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOworCisgICAgYXV0byYg
Y2hpbGQgPSAqbmV3Q2hpbGQ7CisgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmFkZENoaWxkKFdU
Rk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgY2hpbGQuc2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIFJlbmRlclB0cjxSZW5kZXJJbmxpbmU+IFJlbmRl
cklubGluZTo6Y2xvbmUoKSBjb25zdApAQCAtNDA3LDggKzQxMCw4IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRo
ZSBhbm9ueW1vdXMgd3JhcHBlciBoYXMgbXVsdGlwbGUgY2hpbGRyZW4sIHdlIGVuZCB1cCB0cmF2
ZXJzaW5nIHVwIHRvIHRoZSB0b3Btb3N0IHdyYXBwZXIKICAgICAgICAgICAgIC8vIGV2ZXJ5IHRp
bWUsIHdoaWNoIGlzIGEgYml0IHdhc3RlZnVsLgogICAgICAgICB9Ci0gICAgICAgIHJlbmRlcmVy
VG9Nb3ZlLT5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGRJbnRlcm5hbCgqcmVuZGVyZXJUb01vdmUsIE5v
dGlmeUNoaWxkcmVuKTsKLSAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250
aW51YXRpb24ocmVuZGVyZXJUb01vdmUpOworICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gcmVu
ZGVyZXJUb01vdmUtPnBhcmVudCgpLT50YWtlQ2hpbGRJbnRlcm5hbCgqcmVuZGVyZXJUb01vdmUs
IE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oV1RGTW92ZShjaGlsZFRvTW92ZSkpOwogICAgICAgICByZW5kZXJlclRvTW92
ZS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIHJlbmRlcmVy
VG9Nb3ZlID0gbmV4dFNpYmxpbmc7CiAgICAgfQpAQCAtNDM1LDcgKzQzOCw3IEBAIHZvaWQgUmVu
ZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAgICAgICAgIGNsb25lSW5saW5l
ID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3VycmVudCkuY2xvbmUoKTsKIAogICAgICAgICAg
ICAgLy8gSW5zZXJ0IG91ciBjaGlsZCBjbG9uZSBhcyB0aGUgZmlyc3QgY2hpbGQuCi0gICAgICAg
ICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihjbG9uZUNoaWxk
LmxlYWtQdHIoKSk7CisgICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0Nv
bnRpbnVhdGlvbihXVEZNb3ZlKGNsb25lQ2hpbGQpKTsKIAogICAgICAgICAgICAgLy8gSG9vayB0
aGUgY2xvbmUgdXAgYXMgYSBjb250aW51YXRpb24gb2YgfGN1cnJ8LgogICAgICAgICAgICAgUmVu
ZGVySW5saW5lJiBjdXJyZW50SW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3VycmVu
dCk7CkBAIC00NDcsOCArNDUwLDggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhS
ZW5kZXJCbAogICAgICAgICAgICAgLy8gKmFmdGVyKiBjdXJyZW50Q2hpbGQgYW5kIGFwcGVuZCB0
aGVtIGFsbCB0byB0aGUgY2xvbmUuCiAgICAgICAgICAgICBmb3IgKGF1dG8qIGN1cnJlbnQgPSBj
dXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7IGN1cnJlbnQ7KSB7CiAgICAgICAgICAgICAgICAg
YXV0byogbmV4dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudElubGluZS5yZW1vdmVDaGlsZEludGVybmFsKCpjdXJyZW50LCBOb3RpZnlDaGlsZHJlbik7
Ci0gICAgICAgICAgICAgICAgY2xvbmVJbmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRp
b24oY3VycmVudCk7CisgICAgICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92ZSA9IGN1cnJlbnRJ
bmxpbmUudGFrZUNoaWxkSW50ZXJuYWwoKmN1cnJlbnQsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAg
ICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZN
b3ZlKGNoaWxkVG9Nb3ZlKSk7CiAgICAgICAgICAgICAgICAgY3VycmVudC0+c2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgICAgICAgICAgY3VycmVudCA9IG5leHQ7
CiAgICAgICAgICAgICB9CkBAIC00NjUsMjcgKzQ2OCwyOCBAQCB2b2lkIFJlbmRlcklubGluZTo6
c3BsaXRJbmxpbmVzKFJlbmRlckJsCiAgICAgICAgIGNsb25lQmxvY2tDaGlsZC5yZXNldEVuY2xv
c2luZ0ZyYWdtZW50ZWRGbG93QW5kQ2hpbGRJbmZvSW5jbHVkaW5nRGVzY2VuZGFudHMoKTsKIAog
ICAgIC8vIE5vdyB3ZSBhcmUgYXQgdGhlIGJsb2NrIGxldmVsLiBXZSBuZWVkIHRvIHB1dCB0aGUg
Y2xvbmUgaW50byB0aGUgdG9CbG9jay4KLSAgICB0b0Jsb2NrLT5pbnNlcnRDaGlsZEludGVybmFs
KGNsb25lSW5saW5lLmxlYWtQdHIoKSwgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOworICAgIHRv
QmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjbG9uZUlubGluZSksIG51bGxwdHIs
IE5vdGlmeUNoaWxkcmVuKTsKIAogICAgIC8vIE5vdyB0YWtlIGFsbCB0aGUgY2hpbGRyZW4gYWZ0
ZXIgY3VycmVudENoaWxkIGFuZCByZW1vdmUgdGhlbSBmcm9tIHRoZSBmcm9tQmxvY2sKICAgICAv
LyBhbmQgcHV0IHRoZW0gaW4gdGhlIHRvQmxvY2suCiAgICAgZm9yIChhdXRvKiBjdXJyZW50ID0g
Y3VycmVudENoaWxkLT5uZXh0U2libGluZygpOyBjdXJyZW50OykgewogICAgICAgICBhdXRvKiBu
ZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgZnJvbUJsb2NrLT5yZW1vdmVD
aGlsZEludGVybmFsKCpjdXJyZW50LCBOb3RpZnlDaGlsZHJlbik7Ci0gICAgICAgIHRvQmxvY2st
Pmluc2VydENoaWxkSW50ZXJuYWwoY3VycmVudCwgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwor
ICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gZnJvbUJsb2NrLT50YWtlQ2hpbGRJbnRlcm5hbCgq
Y3VycmVudCwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICB0b0Jsb2NrLT5pbnNlcnRDaGlsZElu
dGVybmFsKFdURk1vdmUoY2hpbGRUb01vdmUpLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7CiAg
ICAgICAgIGN1cnJlbnQgPSBuZXh0OwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6OnNw
bGl0RmxvdyhSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJCbG9jayogbmV3QmxvY2tC
b3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbmV3Q2hpbGQs
IFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250KQordm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0
RmxvdyhSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IG5l
d0Jsb2NrQm94LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyQm94TW9k
ZWxPYmplY3QqIG9sZENvbnQpCiB7CisgICAgYXV0byYgYWRkZWRCbG9ja0JveCA9ICpuZXdCbG9j
a0JveDsKICAgICBSZW5kZXJCbG9jayogcHJlID0gbnVsbHB0cjsKICAgICBSZW5kZXJCbG9jayog
YmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICAKKwogICAgIC8vIERlbGV0ZSBvdXIgbGlu
ZSBib3hlcyBiZWZvcmUgd2UgZG8gdGhlIGlubGluZSBzcGxpdCBpbnRvIGNvbnRpbnVhdGlvbnMu
CiAgICAgYmxvY2stPmRlbGV0ZUxpbmVzKCk7Ci0gICAgCisKKyAgICBSZW5kZXJQdHI8UmVuZGVy
QmxvY2s+IGNyZWF0ZWRQcmU7CiAgICAgYm9vbCBtYWRlTmV3QmVmb3JlQmxvY2sgPSBmYWxzZTsK
ICAgICBpZiAoYmxvY2stPmlzQW5vbnltb3VzQmxvY2soKSAmJiAoIWJsb2NrLT5wYXJlbnQoKSB8
fCAhYmxvY2stPnBhcmVudCgpLT5jcmVhdGVzQW5vbnltb3VzV3JhcHBlcigpKSkgewogICAgICAg
ICAvLyBXZSBjYW4gcmV1c2UgdGhpcyBibG9jayBhbmQgbWFrZSBpdCB0aGUgcHJlQmxvY2sgb2Yg
dGhlIG5leHQgY29udGludWF0aW9uLgpAQCAtNDk5LDE3ICs1MDMsMTkgQEAgdm9pZCBSZW5kZXJJ
bmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJPYmplYwogICAgICAgICBibG9jayA9IGJsb2NrLT5jb250
YWluaW5nQmxvY2soKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBObyBhbm9ueW1vdXMgYmxv
Y2sgYXZhaWxhYmxlIGZvciB1c2UuICBNYWtlIG9uZS4KLSAgICAgICAgcHJlID0gYmxvY2stPmNy
ZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgIGNyZWF0ZWRQcmUgPSBibG9jay0+Y3JlYXRl
QW5vbnltb3VzQmxvY2soKTsKKyAgICAgICAgcHJlID0gY3JlYXRlZFByZS5nZXQoKTsKICAgICAg
ICAgbWFkZU5ld0JlZm9yZUJsb2NrID0gdHJ1ZTsKICAgICB9CiAKLSAgICBhdXRvJiBwb3N0ID0g
ZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpwcmUtPmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlw
ZUFzKCpibG9jaykucmVsZWFzZSgpKTsKKyAgICBhdXRvIGNyZWF0ZWRQb3N0ID0gcHJlLT5jcmVh
dGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcygqYmxvY2spOworICAgIGF1dG8mIHBvc3QgPSBk
b3duY2FzdDxSZW5kZXJCbG9jaz4oKmNyZWF0ZWRQb3N0KTsKIAogICAgIFJlbmRlck9iamVjdCog
Ym94Rmlyc3QgPSBtYWRlTmV3QmVmb3JlQmxvY2sgPyBibG9jay0+Zmlyc3RDaGlsZCgpIDogcHJl
LT5uZXh0U2libGluZygpOwotICAgIGlmIChtYWRlTmV3QmVmb3JlQmxvY2spCi0gICAgICAgIGJs
b2NrLT5pbnNlcnRDaGlsZEludGVybmFsKHByZSwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsK
LSAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChuZXdCbG9ja0JveCwgYm94Rmlyc3QsIE5v
dGlmeUNoaWxkcmVuKTsKLSAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbCgmcG9zdCwgYm94
Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICBpZiAoY3JlYXRlZFByZSkKKyAgICAgICAgYmxv
Y2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjcmVhdGVkUHJlKSwgYm94Rmlyc3QsIE5v
dGlmeUNoaWxkcmVuKTsKKyAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5l
d0Jsb2NrQm94KSwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICBibG9jay0+aW5zZXJ0
Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNyZWF0ZWRQb3N0KSwgYm94Rmlyc3QsIE5vdGlmeUNoaWxk
cmVuKTsKICAgICBibG9jay0+c2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogICAgIAogICAgIGlm
IChtYWRlTmV3QmVmb3JlQmxvY2spIHsKQEAgLTUxNywyMiArNTIzLDIyIEBAIHZvaWQgUmVuZGVy
SW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWMKICAgICAgICAgd2hpbGUgKG8pIHsKICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogbm8gPSBvOwogICAgICAgICAgICAgbyA9IG5vLT5uZXh0U2li
bGluZygpOwotICAgICAgICAgICAgYmxvY2stPnJlbW92ZUNoaWxkSW50ZXJuYWwoKm5vLCBOb3Rp
ZnlDaGlsZHJlbik7Ci0gICAgICAgICAgICBwcmUtPmluc2VydENoaWxkSW50ZXJuYWwobm8sIG51
bGxwdHIsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSBi
bG9jay0+dGFrZUNoaWxkSW50ZXJuYWwoKm5vLCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAgICAg
ICBwcmUtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShjaGlsZFRvTW92ZSksIG51bGxwdHIs
IE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIG5vLT5zZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHNwbGl0SW5saW5lcyhwcmUs
ICZwb3N0LCBuZXdCbG9ja0JveCwgYmVmb3JlQ2hpbGQsIG9sZENvbnQpOworICAgIHNwbGl0SW5s
aW5lcyhwcmUsICZwb3N0LCAmYWRkZWRCbG9ja0JveCwgYmVmb3JlQ2hpbGQsIG9sZENvbnQpOwog
CiAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoZSBuZXdCbG9ja0JveCBpc24ndCBnb2luZyB0byBj
b250YWluIGlubGluZSBraWRzLCBzbyBhdm9pZCB3YXN0aW5nCiAgICAgLy8gdGltZSBpbiBtYWtl
Q2hpbGRyZW5Ob25JbmxpbmUgYnkganVzdCBzZXR0aW5nIHRoaXMgZXhwbGljaXRseSB1cCBmcm9u
dC4KLSAgICBuZXdCbG9ja0JveC0+c2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOworICAgIGFkZGVk
QmxvY2tCb3guc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2UpOwogCiAgICAgLy8gV2UgZGVsYXllZCBh
ZGRpbmcgdGhlIG5ld0NoaWxkIHVudGlsIG5vdyBzbyB0aGF0IHRoZSB8bmV3QmxvY2tCb3h8IHdv
dWxkIGJlIGZ1bGx5CiAgICAgLy8gY29ubmVjdGVkLCB0aHVzIGFsbG93aW5nIG5ld0NoaWxkIGFj
Y2VzcyB0byBhIHJlbmRlckFyZW5hIHNob3VsZCBpdCBuZWVkCiAgICAgLy8gdG8gd3JhcCBpdHNl
bGYgaW4gYWRkaXRpb25hbCBib3hlcyAoZS5nLiwgdGFibGUgY29uc3RydWN0aW9uKS4KLSAgICBu
ZXdCbG9ja0JveC0+YWRkQ2hpbGQobmV3Q2hpbGQpOworICAgIGFkZGVkQmxvY2tCb3guYWRkQ2hp
bGQoV1RGTW92ZShuZXdDaGlsZCkpOwogCiAgICAgLy8gQWx3YXlzIGp1c3QgZG8gYSBmdWxsIGxh
eW91dCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBsaW5lIGJveGVzIChlc3BlY2lhbGx5IHdyYXBw
ZXJzIGZvciBpbWFnZXMpCiAgICAgLy8gZ2V0IGRlbGV0ZWQgcHJvcGVybHkuICBCZWNhdXNlIG9i
amVjdHMgbW92ZXMgZnJvbSB0aGUgcHJlIGJsb2NrIGludG8gdGhlIHBvc3QgYmxvY2ssIHdlIHdh
bnQgdG8KQEAgLTU1Myw3ICs1NTksNyBAQCBzdGF0aWMgYm9vbCBjYW5Vc2VBc1BhcmVudEZvckNv
bnRpbnVhdGlvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjphZGRD
aGlsZFRvQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihS
ZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCkKIHsKICAgICBhdXRvKiBmbG93ID0gY29udGludWF0aW9uQmVmb3JlKGJlZm9yZUNoaWxkKTsK
ICAgICAvLyBJdCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUgZGlyZWN0IHBhcmVudCBvZiB0aGUgYmVm
b3JlQ2hpbGQuCkBAIC01NzgsMjAgKzU4NCwyMCBAQCB2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hp
bGRUb0NvbnRpbnVhdGlvCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgaWYg
KG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJl
dHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5l
d0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9y
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVD
aGlsZCk7CiAKICAgICBpZiAoZmxvdyA9PSBiZWZvcmVDaGlsZEFuY2VzdG9yKQotICAgICAgICBy
ZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3Jl
Q2hpbGQpOworICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgIC8vIEEgY29udGludWF0aW9u
IGFsd2F5cyBjb25zaXN0cyBvZiB0d28gcG90ZW50aWFsIGNhbmRpZGF0ZXM6IGFuIGlubGluZSBv
ciBhbiBhbm9ueW1vdXMKICAgICAvLyBibG9jayBib3ggaG9sZGluZyBibG9jayBjaGlsZHJlbi4K
ICAgICBib29sIGNoaWxkSW5saW5lID0gbmV3Q2hpbGRJc0lubGluZSgqbmV3Q2hpbGQsICp0aGlz
KTsKICAgICAvLyBUaGUgZ29hbCBoZXJlIGlzIHRvIG1hdGNoIHVwIGlmIHdlIGNhbiwgc28gdGhh
dCB3ZSBjYW4gY29hbGVzY2UgYW5kIGNyZWF0ZSB0aGUKICAgICAvLyBtaW5pbWFsICMgb2YgY29u
dGludWF0aW9ucyBuZWVkZWQgZm9yIHRoZSBpbmxpbmUuCiAgICAgaWYgKGNoaWxkSW5saW5lID09
IGJlZm9yZUNoaWxkQW5jZXN0b3ItPmlzSW5saW5lKCkpCi0gICAgICAgIHJldHVybiBiZWZvcmVD
aGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZv
cmVDaGlsZCk7CisgICAgICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZEln
bm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAg
aWYgKGZsb3ctPmlzSW5saW5lKCkgPT0gY2hpbGRJbmxpbmUpCi0gICAgICAgIHJldHVybiBmbG93
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkKTsgLy8gSnVzdCB0cmVhdCBs
aWtlIGFuIGFwcGVuZC4KLSAgICByZXR1cm4gYmVmb3JlQ2hpbGRBbmNlc3Rvci0+YWRkQ2hpbGRJ
Z25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICByZXR1
cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSk7
IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCisgICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5j
ZXN0b3ItPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIGJl
Zm9yZUNoaWxkKTsKIH0KIAogdm9pZCBSZW5kZXJJbmxpbmU6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCkBAIC0xMzY4LDEyICsxMzc0
LDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVEcmFnU3RhdGUoYm9vbCAKIHZvaWQgUmVu
ZGVySW5saW5lOjpjaGlsZEJlY2FtZU5vbklubGluZShSZW5kZXJFbGVtZW50JiBjaGlsZCkKIHsK
ICAgICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJlbnQgZmxvdy4KLSAgICBSZW5kZXJCbG9j
ayogbmV3Qm94ID0gY29udGFpbmluZ0Jsb2NrKCktPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7Cisg
ICAgYXV0byBuZXdCb3ggPSBjb250YWluaW5nQmxvY2soKS0+Y3JlYXRlQW5vbnltb3VzQmxvY2so
KTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udGludWF0aW9uID0gY29udGludWF0
aW9uKCk7Ci0gICAgc2V0Q29udGludWF0aW9uKG5ld0JveCk7CisgICAgc2V0Q29udGludWF0aW9u
KG5ld0JveC5nZXQoKSk7CiAgICAgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IGNoaWxkLm5l
eHRTaWJsaW5nKCk7Ci0gICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbChjaGlsZCwgTm90aWZ5Q2hpbGRy
ZW4pOwotICAgIHNwbGl0RmxvdyhiZWZvcmVDaGlsZCwgbmV3Qm94LCAmY2hpbGQsIG9sZENvbnRp
bnVhdGlvbik7CisgICAgYXV0byByZW1vdmVkQ2hpbGQgPSB0YWtlQ2hpbGRJbnRlcm5hbChjaGls
ZCwgTm90aWZ5Q2hpbGRyZW4pOworICAgIHNwbGl0RmxvdyhiZWZvcmVDaGlsZCwgV1RGTW92ZShu
ZXdCb3gpLCBXVEZNb3ZlKHJlbW92ZWRDaGlsZCksIG9sZENvbnRpbnVhdGlvbik7CiB9CiAKIHZv
aWQgUmVuZGVySW5saW5lOjp1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlcklubGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1
YmxpYzoKICAgICBSZW5kZXJJbmxpbmUoRWxlbWVudCYsIFJlbmRlclN0eWxlJiYpOwogICAgIFJl
bmRlcklubGluZShEb2N1bWVudCYsIFJlbmRlclN0eWxlJiYpOwogCi0gICAgdm9pZCBhZGRDaGls
ZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwogCiAgICAgTGF5
b3V0VW5pdCBtYXJnaW5MZWZ0KCkgY29uc3QgZmluYWw7CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5S
aWdodCgpIGNvbnN0IGZpbmFsOwpAQCAtMTIxLDEzICsxMjEsMTEgQEAgcHJpdmF0ZToKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBHZW5lcmF0b3JDb250ZXh0PgogICAgIHZvaWQgZ2VuZXJhdGVDdWxs
ZWRMaW5lQm94UmVjdHMoR2VuZXJhdG9yQ29udGV4dCYgeWllbGQsIGNvbnN0IFJlbmRlcklubGlu
ZSogY29udGFpbmVyKSBjb25zdDsKIAotICAgIHZvaWQgYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihS
ZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKLSAgICB2
b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpIGZpbmFsOworICAgIHZvaWQgYWRk
Q2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisgICAgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7CiAKLSAgICB2b2lkIHNwbGl0SW5saW5lcyhSZW5k
ZXJCbG9jayogZnJvbUJsb2NrLCBSZW5kZXJCbG9jayogdG9CbG9jaywgUmVuZGVyQmxvY2sqIG1p
ZGRsZUJsb2NrLAotICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250KTsKLSAgICB2b2lkIHNwbGl0RmxvdyhS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJCbG9jayogbmV3QmxvY2tCb3gsCi0gICAg
ICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIG9sZENvbnQpOworICAgIHZvaWQgc3BsaXRJbmxpbmVzKFJlbmRlckJsb2NrKiBmcm9tQmxv
Y2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLCBSZW5kZXJCbG9jayogbWlkZGxlQmxvY2ssIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250KTsKKyAg
ICB2b2lkIHNwbGl0RmxvdyhSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJQdHI8UmVu
ZGVyQmxvY2s+IG5ld0Jsb2NrQm94LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwg
UmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpOwogCiAgICAgdm9pZCBsYXlvdXQoKSBmaW5h
bCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9IC8vIERvIG5vdGhpbmcgZm9yIGxheW91dCgpCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2
aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDkgKzEwOCwxMCBAQCB2b2lkIFJlbmRlck1lbnVM
aXN0OjpjcmVhdGVJbm5lckJsb2NrKCkKIAogICAgIC8vIENyZWF0ZSBhbiBhbm9ueW1vdXMgYmxv
Y2suCiAgICAgQVNTRVJUKCFmaXJzdENoaWxkKCkpOwotICAgIG1faW5uZXJCbG9jayA9IGNyZWF0
ZUFub255bW91c0Jsb2NrKCk7CisgICAgYXV0byBuZXdJbm5lckJsb2NrID0gY3JlYXRlQW5vbnlt
b3VzQmxvY2soKTsKKyAgICBtX2lubmVyQmxvY2sgPSBuZXdJbm5lckJsb2NrLmdldCgpOwogICAg
IGFkanVzdElubmVyU3R5bGUoKTsKLSAgICBSZW5kZXJGbGV4aWJsZUJveDo6YWRkQ2hpbGQobV9p
bm5lckJsb2NrKTsKKyAgICBSZW5kZXJGbGV4aWJsZUJveDo6YWRkQ2hpbGQoV1RGTW92ZShuZXdJ
bm5lckJsb2NrKSk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkanVzdElubmVyU3R5bGUo
KQpAQCAtMTcyLDIzICsxNzMsMjQgQEAgSFRNTFNlbGVjdEVsZW1lbnQmIFJlbmRlck1lbnVMaXN0
OjpzZWxlYwogICAgIHJldHVybiBkb3duY2FzdDxIVE1MU2VsZWN0RWxlbWVudD4obm9kZUZvck5v
bkFub255bW91cygpKTsKIH0KIAotdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVy
TWVudUxpc3Q6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGNyZWF0ZUlubmVyQmxvY2soKTsKLSAgICBt
X2lubmVyQmxvY2stPmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgYXV0byYg
Y2hpbGQgPSAqbmV3Q2hpbGQ7CisgICAgbV9pbm5lckJsb2NrLT5hZGRDaGlsZChXVEZNb3ZlKG5l
d0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgIEFTU0VSVChtX2lubmVyQmxvY2sgPT0gZmlyc3RD
aGlsZCgpKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhp
c3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQodGhp
cywgbmV3Q2hpbGQpOworICAgICAgICBjYWNoZS0+Y2hpbGRyZW5DaGFuZ2VkKHRoaXMsICZjaGls
ZCk7CiB9CiAKLXZvaWQgUmVuZGVyTWVudUxpc3Q6OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYg
b2xkQ2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJNZW51TGlzdDo6dGFrZUNo
aWxkKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCiB7CiAgICAgaWYgKCZvbGRDaGlsZCA9PSBtX2lu
bmVyQmxvY2sgfHwgIW1faW5uZXJCbG9jaykgewotICAgICAgICBSZW5kZXJGbGV4aWJsZUJveDo6
cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwogICAgICAgICBtX2lubmVyQmxvY2sgPSAwOwotICAgIH0g
ZWxzZQotICAgICAgICBtX2lubmVyQmxvY2stPnJlbW92ZUNoaWxkKG9sZENoaWxkKTsKKyAgICAg
ICAgcmV0dXJuIFJlbmRlckZsZXhpYmxlQm94Ojp0YWtlQ2hpbGQob2xkQ2hpbGQpOworICAgIH0K
KyAgICByZXR1cm4gbV9pbm5lckJsb2NrLT50YWtlQ2hpbGQob2xkQ2hpbGQpOwogfQogCiB2b2lk
IFJlbmRlck1lbnVMaXN0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQpAQCAtMjk1LDkgKzI5NywxMSBAQCB2b2lkIFJlbmRl
ck1lbnVMaXN0OjpzZXRUZXh0KGNvbnN0IFN0cmluCiAgICAgaWYgKG1fYnV0dG9uVGV4dCkKICAg
ICAgICAgbV9idXR0b25UZXh0LT5zZXRUZXh0KHRleHRUb1VzZS5pbXBsKCksIHRydWUpOwogICAg
IGVsc2UgewotICAgICAgICBtX2J1dHRvblRleHQgPSBuZXcgUmVuZGVyVGV4dChkb2N1bWVudCgp
LCB0ZXh0VG9Vc2UpOwotICAgICAgICBhZGRDaGlsZChtX2J1dHRvblRleHQpOworICAgICAgICBh
dXRvIG5ld0J1dHRvblRleHQgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0Pihkb2N1bWVudCgp
LCB0ZXh0VG9Vc2UpOworICAgICAgICBtX2J1dHRvblRleHQgPSBuZXdCdXR0b25UZXh0LmdldCgp
OworICAgICAgICBhZGRDaGlsZChXVEZNb3ZlKG5ld0J1dHRvblRleHQpKTsKICAgICB9CisKICAg
ICBhZGp1c3RJbm5lclN0eWxlKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOCArNjYsOCBA
QCBwcml2YXRlOgogCiAgICAgYm9vbCBpc01lbnVMaXN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVD
aGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkg
b3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9i
amVjdCYpIG92ZXJyaWRlOwogICAgIGJvb2wgY3JlYXRlc0Fub255bW91c1dyYXBwZXIoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAgICB2b2lkIHVwZGF0ZUZyb21FbGVtZW50
KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5GbG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTXVsdGlDb2x1bW5GbG93LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4NCwxMSArMTg0LDExIEBAIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93OjpldmFjdWF0ZUFu
ZEQKICAgICBTcGFubmVyTWFwOjppdGVyYXRvciBpdDsKICAgICB3aGlsZSAoKGl0ID0gbV9zcGFu
bmVyTWFwLmJlZ2luKCkpICE9IG1fc3Bhbm5lck1hcC5lbmQoKSkgewogICAgICAgICBSZW5kZXJC
b3gqIHNwYW5uZXIgPSBpdC0+a2V5OwotICAgICAgICBtdWx0aWNvbENvbnRhaW5lci0+cmVtb3Zl
Q2hpbGQoKnNwYW5uZXIpOworICAgICAgICBhdXRvIHRha2VuU3Bhbm5lciA9IG11bHRpY29sQ29u
dGFpbmVyLT50YWtlQ2hpbGQoKnNwYW5uZXIpOwogICAgICAgICBBU1NFUlQoaXQtPnZhbHVlLmdl
dCgpKTsKICAgICAgICAgaWYgKFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBw
bGFjZWhvbGRlciA9IGl0LT52YWx1ZS5nZXQoKSkgewogICAgICAgICAgICAgUmVuZGVyQmxvY2tG
bG93JiBvcmlnaW5hbENvbnRhaW5lciA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKnBsYWNl
aG9sZGVyLT5wYXJlbnQoKSk7Ci0gICAgICAgICAgICBvcmlnaW5hbENvbnRhaW5lci5hZGRDaGls
ZChzcGFubmVyLCBwbGFjZWhvbGRlcik7CisgICAgICAgICAgICBvcmlnaW5hbENvbnRhaW5lci5h
ZGRDaGlsZChXVEZNb3ZlKHRha2VuU3Bhbm5lciksIHBsYWNlaG9sZGVyKTsKICAgICAgICAgICAg
IHBsYWNlaG9sZGVyLT5kZXN0cm95KCk7CiAgICAgICAgIH0KICAgICAgICAgbV9zcGFubmVyTWFw
LnJlbW92ZShpdCk7CkBAIC0zNDgsMTQgKzM0OCwxNCBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck11
bHRpQ29sdW1uRmxvdzo6cHJvCiAgICAgICAgIC8vIGNvbnRlbnQgYmVmb3JlIGFuZCBhZnRlciB0
aGUgc3Bhbm5lciwgc28gdGhhdCBpdCBiZWNvbWVzIHNlcGFyYXRlIGxpbmUgYm94ZXMuIFNlY29u
ZGx5LAogICAgICAgICAvLyB0aGlzIHBsYWNlaG9sZGVyIHNlcnZlcyBhcyBhIGJyZWFrIHBvaW50
IGZvciBjb2x1bW4gc2V0cywgc28gdGhhdCwgd2hlbiBlbmNvdW50ZXJlZCwgd2UKICAgICAgICAg
Ly8gZW5kIGZsb3dpbmcgb25lIGNvbHVtbiBzZXQgYW5kIG1vdmUgdG8gdGhlIG5leHQgb25lLgot
ICAgICAgICBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogcGxhY2Vob2xkZXIg
PSBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcjo6Y3JlYXRlQW5vbnltb3VzKHRo
aXMsCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KGRlc2NlbmRhbnQpLCAmY29udGFp
bmVyLT5zdHlsZSgpKTsKLSAgICAgICAgY29udGFpbmVyLT5hZGRDaGlsZChwbGFjZWhvbGRlciwg
ZGVzY2VuZGFudC5uZXh0U2libGluZygpKTsKLSAgICAgICAgY29udGFpbmVyLT5yZW1vdmVDaGls
ZChkZXNjZW5kYW50KTsKKyAgICAgICAgYXV0byBuZXdQbGFjZWhvbGRlciA9IFJlbmRlck11bHRp
Q29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVhdGVBbm9ueW1vdXModGhpcywgZG93bmNhc3Q8
UmVuZGVyQm94PihkZXNjZW5kYW50KSwgJmNvbnRhaW5lci0+c3R5bGUoKSk7CisgICAgICAgIGF1
dG8mIHBsYWNlaG9sZGVyID0gKm5ld1BsYWNlaG9sZGVyOworICAgICAgICBjb250YWluZXItPmFk
ZENoaWxkKFdURk1vdmUobmV3UGxhY2Vob2xkZXIpLCBkZXNjZW5kYW50Lm5leHRTaWJsaW5nKCkp
OworICAgICAgICBhdXRvIHRha2VuRGVzY2VuZGFudCA9IGNvbnRhaW5lci0+dGFrZUNoaWxkKGRl
c2NlbmRhbnQpOwogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBpcyBhIGd1YXJkIHRvIHN0b3Ag
YW4gYW5jZXN0b3IgZmxvdyB0aHJlYWQgZnJvbSBwcm9jZXNzaW5nIHRoZSBzcGFubmVyLgogICAg
ICAgICBnU2hpZnRpbmdTcGFubmVyID0gdHJ1ZTsKLSAgICAgICAgbXVsdGljb2xDb250YWluZXIt
PlJlbmRlckJsb2NrOjphZGRDaGlsZCgmZGVzY2VuZGFudCwgaW5zZXJ0QmVmb3JlTXVsdGljb2xD
aGlsZCk7CisgICAgICAgIG11bHRpY29sQ29udGFpbmVyLT5SZW5kZXJCbG9jazo6YWRkQ2hpbGQo
V1RGTW92ZSh0YWtlbkRlc2NlbmRhbnQpLCBpbnNlcnRCZWZvcmVNdWx0aWNvbENoaWxkKTsKICAg
ICAgICAgZ1NoaWZ0aW5nU3Bhbm5lciA9IGZhbHNlOwogICAgICAgICAKICAgICAgICAgLy8gVGhl
IHNwYW5uZXIgaGFzIG5vdyBiZWVuIG1vdmVkIG91dCBmcm9tIHRoZSBmbG93IHRocmVhZCwgYnV0
IHdlIGRvbid0IHdhbnQgdG8KQEAgLTM2Myw4ICszNjMsOCBAQCBSZW5kZXJPYmplY3QqIFJlbmRl
ck11bHRpQ29sdW1uRmxvdzo6cHJvCiAgICAgICAgIC8vIGNyZWF0aW9uIG9mIGNvbHVtbiBzZXRz
IG9yIGFueXRoaW5nIGxpa2UgdGhhdC4gQ29udGludWUgYXQgaXRzIG9yaWdpbmFsIHBvc2l0aW9u
IGluCiAgICAgICAgIC8vIHRoZSB0cmVlLCBpLmUuIHdoZXJlIHRoZSBwbGFjZWhvbGRlciB3YXMg
anVzdCBwdXQuCiAgICAgICAgIGlmIChzdWJ0cmVlUm9vdCA9PSAmZGVzY2VuZGFudCkKLSAgICAg
ICAgICAgIHN1YnRyZWVSb290ID0gcGxhY2Vob2xkZXI7Ci0gICAgICAgIG5leHREZXNjZW5kYW50
ID0gcGxhY2Vob2xkZXI7CisgICAgICAgICAgICBzdWJ0cmVlUm9vdCA9ICZwbGFjZWhvbGRlcjsK
KyAgICAgICAgbmV4dERlc2NlbmRhbnQgPSAmcGxhY2Vob2xkZXI7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgLy8gVGhpcyBpcyByZWd1bGFyIG11bHRpY29sIGNvbnRlbnQsIGkuZS4gbm90IHBhcnQg
b2YgYSBzcGFubmVyLgogICAgICAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxh
Y2Vob2xkZXI+KG5leHRSZW5kZXJlckluRnJhZ21lbnRlZEZsb3cpKSB7CkBAIC0zODksMTUgKzM4
OSwxNiBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6cHJvCiAgICAgLy8g
TmVlZCB0byBjcmVhdGUgYSBuZXcgY29sdW1uIHNldCB3aGVuIHRoZXJlJ3Mgbm8gc2V0IGFscmVh
ZHkgY3JlYXRlZC4gV2UgYWxzbyBhbHdheXMgaW5zZXJ0CiAgICAgLy8gYW5vdGhlciBjb2x1bW4g
c2V0IGFmdGVyIGEgc3Bhbm5lci4gRXZlbiBpZiBpdCB0dXJucyBvdXQgdGhhdCB0aGVyZSBhcmUg
bm8gcmVuZGVyZXJzCiAgICAgLy8gZm9sbG93aW5nIHRoZSBzcGFubmVyLCB0aGVyZSBtYXkgYmUg
Ym90dG9tIG1hcmdpbnMgdGhlcmUsIHdoaWNoIHRha2UgdXAgc3BhY2UuCi0gICAgUmVuZGVyTXVs
dGlDb2x1bW5TZXQqIG5ld1NldCA9IG5ldyBSZW5kZXJNdWx0aUNvbHVtblNldCgqdGhpcywgUmVu
ZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkobXVsdGljb2xDb250YWlu
ZXItPnN0eWxlKCksIEJMT0NLKSk7CisgICAgYXV0byBuZXdTZXQgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJNdWx0aUNvbHVtblNldD4oKnRoaXMsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNT
dHlsZVdpdGhEaXNwbGF5KG11bHRpY29sQ29udGFpbmVyLT5zdHlsZSgpLCBCTE9DSykpOwogICAg
IG5ld1NldC0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgbXVsdGljb2xDb250YWluZXItPlJlbmRl
ckJsb2NrOjphZGRDaGlsZChuZXdTZXQsIGluc2VydEJlZm9yZU11bHRpY29sQ2hpbGQpOworICAg
IGF1dG8mIHNldCA9ICpuZXdTZXQ7CisgICAgbXVsdGljb2xDb250YWluZXItPlJlbmRlckJsb2Nr
OjphZGRDaGlsZChXVEZNb3ZlKG5ld1NldCksIGluc2VydEJlZm9yZU11bHRpY29sQ2hpbGQpOwog
ICAgIGludmFsaWRhdGVGcmFnbWVudHMoKTsKIAogICAgIC8vIFdlIGNhbm5vdCBoYW5kbGUgaW1t
ZWRpYXRlIGNvbHVtbiBzZXQgc2libGluZ3MgYXQgdGhlIG1vbWVudCAoYW5kIHRoZXJlJ3Mgbm8g
bmVlZCBmb3IKICAgICAvLyBpdCwgZWl0aGVyKS4gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IG9u
ZSBzcGFubmVyIHNlcGFyYXRpbmcgdGhlbS4KLSAgICBBU1NFUlQoIXByZXZpb3VzQ29sdW1uU2V0
T3JTcGFubmVyU2libGluZ09mKG5ld1NldCkgfHwgIXByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVy
U2libGluZ09mKG5ld1NldCktPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSk7Ci0gICAgQVNTRVJU
KCFuZXh0Q29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKG5ld1NldCkgfHwgIW5leHRDb2x1bW5T
ZXRPclNwYW5uZXJTaWJsaW5nT2YobmV3U2V0KS0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHNldCwgIXByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVyU2libGlu
Z09mKCZzZXQpIHx8ICFwcmV2aW91c0NvbHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZigmc2V0KS0+
aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKTsKKyAgICBBU1NFUlQoIW5leHRDb2x1bW5TZXRPclNw
YW5uZXJTaWJsaW5nT2YoJnNldCkgfHwgIW5leHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2Yo
JnNldCktPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSk7CiAgICAgCiAgICAgcmV0dXJuIG5leHRE
ZXNjZW5kYW50OwogfQpAQCAtNDI4LDcgKzQyOSwxMSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1u
Rmxvdzo6ZnJhZ21lbnRlZEZsCiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBudWtlIHRo
ZSBwbGFjZWhvbGRlciwgc2luY2UgdGhlIGFuY2VzdG9yIGFscmVhZHkgbG9zdCB0aGUgbWFwcGlu
ZyB0byBpdCB3aGVuCiAgICAgICAgICAgICAgICAgLy8gd2Ugc2hpZnRlZCB0aGUgcGxhY2Vob2xk
ZXIgZG93biBpbnRvIHRoaXMgZmxvdyB0aHJlYWQuCiAgICAgICAgICAgICAgICAgcGxhY2Vob2xk
ZXIuZnJhZ21lbnRlZEZsb3coKS0+bV9zcGFubmVyTWFwLnJlbW92ZShzcGFubmVyKTsKLSAgICAg
ICAgICAgICAgICBwbGFjZWhvbGRlci5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGQocGxhY2Vob2xkZXIp
OworCisgICAgICAgICAgICAgICAgYXV0byB0YWtlbkNoaWxkID0gcGxhY2Vob2xkZXIucGFyZW50
KCktPnRha2VDaGlsZChwbGFjZWhvbGRlcik7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IE1l
bW9yeSBtYW5hZ2VtZW50LgorICAgICAgICAgICAgICAgIGF1dG8qIGxlYWtlblB0ciA9IHRha2Vu
Q2hpbGQubGVha1B0cigpOworICAgICAgICAgICAgICAgIFVOVVNFRF9QQVJBTShsZWFrZW5QdHIp
OwogCiAgICAgICAgICAgICAgICAgaWYgKHN1YnRyZWVSb290ID09IGRlc2NlbmRhbnQpCiAgICAg
ICAgICAgICAgICAgICAgIHN1YnRyZWVSb290ID0gc3Bhbm5lcjsKQEAgLTQ1MCw3ICs0NTUsMTEg
QEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OmhhbmRsZVNwYW5uZQogewogICAgIC8vIFRo
ZSBwbGFjZWhvbGRlciBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZCwgYnV0IGlmIGl0IGhh
c24ndCwgZG8gc28gbm93LgogICAgIGlmIChSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlciogcGxhY2Vob2xkZXIgPSBtX3NwYW5uZXJNYXAuZ2V0KCZkb3duY2FzdDxSZW5kZXJCb3g+
KHNwYW5uZXIpKS5nZXQoKSkgewotICAgICAgICBwbGFjZWhvbGRlci0+cGFyZW50KCktPnJlbW92
ZUNoaWxkKCpwbGFjZWhvbGRlcik7CisgICAgICAgIGF1dG8gdGFrZW5DaGlsZCA9IHBsYWNlaG9s
ZGVyLT5wYXJlbnQoKS0+dGFrZUNoaWxkKCpwbGFjZWhvbGRlcik7CisgICAgICAgIC8vIEZJWE1F
OiBNZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICAgYXV0byogbGVha2VuUHRyID0gdGFrZW5DaGls
ZC5sZWFrUHRyKCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShsZWFrZW5QdHIpOworCiAgICAgICAg
IG1fc3Bhbm5lck1hcC5yZW1vdmUoJmRvd25jYXN0PFJlbmRlckJveD4oc3Bhbm5lcikpOwogICAg
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bh
bm5lclBsYWNlaG9sZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCShyZXZpc2lvbiAyMjI2
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTEgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciog
UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI6OmNyZWF0ZUFub255bW91cyhSZW5k
ZXJNdWx0aUNvbHVtbkZsb3cqIGZyYWdtZW50ZWRGbG93LCBSZW5kZXJCb3gmIHNwYW5uZXIsIGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK1JlbmRlclB0cjxSZW5kZXJNdWx0aUNvbHVt
blNwYW5uZXJQbGFjZWhvbGRlcj4gUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI6
OmNyZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVtbkZsb3cqIGZyYWdtZW50ZWRGbG93LCBS
ZW5kZXJCb3gmIHNwYW5uZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAg
ICBhdXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERp
c3BsYXkoKnBhcmVudFN0eWxlLCBCTE9DSyk7CiAgICAgbmV3U3R5bGUuc2V0Q2xlYXIoQ0JPVEgp
OyAvLyBXZSBkb24ndCB3YW50IGZsb2F0cyBpbiB0aGUgcm93IHByZWNlZGluZyB0aGUgc3Bhbm5l
ciB0byBjb250aW51ZSBvbiB0aGUgb3RoZXIgc2lkZS4KLSAgICBhdXRvIHBsYWNlaG9sZGVyID0g
bmV3IFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKGZyYWdtZW50ZWRGbG93LCBz
cGFubmVyLCBXVEZNb3ZlKG5ld1N0eWxlKSk7CisgICAgYXV0byBwbGFjZWhvbGRlciA9IGNyZWF0
ZVJlbmRlcmVyPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPihmcmFnbWVudGVk
Rmxvdywgc3Bhbm5lciwgV1RGTW92ZShuZXdTdHlsZSkpOwogICAgIHBsYWNlaG9sZGVyLT5pbml0
aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gcGxhY2Vob2xkZXI7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXIuaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM5LDEzICszOSwxNSBAQCBjbGFzcyBSZW5kZXJNdWx0aUNvbHVtbkZsb3c7CiAK
IGNsYXNzIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyIGZpbmFsIDogcHVibGlj
IFJlbmRlckJveCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5l
clBsYWNlaG9sZGVyKiBjcmVhdGVBbm9ueW1vdXMoUmVuZGVyTXVsdGlDb2x1bW5GbG93KiwgUmVu
ZGVyQm94JiBzcGFubmVyLCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOworICAgIHN0
YXRpYyBSZW5kZXJQdHI8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+IGNyZWF0
ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVtbkZsb3cqLCBSZW5kZXJCb3gmIHNwYW5uZXIsIGNv
bnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICBSZW5kZXJCb3gqIHNwYW5uZXIo
KSBjb25zdCB7IHJldHVybiBtX3NwYW5uZXI7IH0KICAgICBSZW5kZXJNdWx0aUNvbHVtbkZsb3cq
IGZyYWdtZW50ZWRGbG93KCkgY29uc3QgeyByZXR1cm4gbV9mcmFnbWVudGVkRmxvdzsgfQogICAg
IFdlYWtQdHI8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+IGNyZWF0ZVdlYWtQ
dHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKnRoaXMpOyB9CiAK
IHByaXZhdGU6CisgICAgdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MuLi4gQXJncz4gZnJpZW5kIFJl
bmRlclB0cjxUPiBjcmVhdGVSZW5kZXJlcihBcmdzJiYuLi4pOworCiAgICAgUmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoUmVuZGVyTXVsdGlDb2x1bW5GbG93KiwgUmVuZGVyQm94
JiBzcGFubmVyLCBSZW5kZXJTdHlsZSYmKTsKICAgICBib29sIGlzUmVuZGVyTXVsdGlDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAy
MjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQxLDEwICsyNDEsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFBh
cmVudChSZW5kZXJFbGVtZQogICAgIG1fcGFyZW50ID0gcGFyZW50OwogfQogCi12b2lkIFJlbmRl
ck9iamVjdDo6cmVtb3ZlRnJvbVBhcmVudCgpCit2b2lkIFJlbmRlck9iamVjdDo6cmVtb3ZlRnJv
bVBhcmVudEFuZERlc3Ryb3koKQogewogICAgIGlmIChwYXJlbnQoKSkKLSAgICAgICAgcGFyZW50
KCktPnJlbW92ZUNoaWxkKCp0aGlzKTsKKyAgICAgICAgcGFyZW50KCktPnJlbW92ZUFuZERlc3Ry
b3lDaGlsZCgqdGhpcyk7CiB9CiAKIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpuZXh0SW5Q
cmVPcmRlcigpIGNvbnN0CkBAIC0xNDQ4LDcgKzE0NDgsMTIgQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OndpbGxCZURlc3Ryb3llZCgpCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1l
bnQoKS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKICAgICAgICAgY2FjaGUtPmNoaWxkcmVuQ2hh
bmdlZCh0aGlzLT5wYXJlbnQoKSk7CiAKLSAgICByZW1vdmVGcm9tUGFyZW50KCk7CisgICAgaWYg
KG1fcGFyZW50KSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgaGF2ZSBhbHdheXMgYmVl
biByZW1vdmVkIGZyb20gdGhlIHBhcmVudCBiZWZvcmUgYmVpbmcgZGVzdHJveWVkLgorICAgICAg
ICBhdXRvIHRha2VuVGhpcyA9IG1fcGFyZW50LT50YWtlQ2hpbGQoKnRoaXMpOworICAgICAgICBh
dXRvKiBsZWFrZWRQdHIgPSB0YWtlblRoaXMubGVha1B0cigpOworICAgICAgICBVTlVTRURfUEFS
QU0obGVha2VkUHRyKTsKKyAgICB9CiAKICAgICBBU1NFUlQocmVuZGVyVHJlZUJlaW5nRGVzdHJv
eWVkKCkgfHwgIWlzPFJlbmRlckVsZW1lbnQ+KCp0aGlzKSB8fCAhdmlldygpLmZyYW1lVmlldygp
Lmhhc1Nsb3dSZXBhaW50T2JqZWN0KGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCp0aGlzKSkpOwog
CkBAIC0xNTE4LDYgKzE1MjMsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZGVzdHJveUFuZENsZWFu
dXBBbm9uCiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpkZXN0cm95KCkKIHsKKyAgICBBU1NFUlQoIW1f
Yml0ZmllbGRzLmJlaW5nRGVzdHJveWVkKCkpOwogICAgIG1fYml0ZmllbGRzLnNldEJlaW5nRGVz
dHJveWVkKHRydWUpOwogCiAjaWYgUExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTEsNyArNzUx
LDcgQEAgcHVibGljOgogICAgIFNlbGVjdGlvblN1YnRyZWVSb290JiBzZWxlY3Rpb25Sb290KCkg
Y29uc3Q7CiAgICAgdm9pZCBzZWxlY3Rpb25TdGFydEVuZCh1bnNpZ25lZCYgc3BvcywgdW5zaWdu
ZWQmIGVwb3MpIGNvbnN0OwogICAgIAotICAgIHZvaWQgcmVtb3ZlRnJvbVBhcmVudCgpOworICAg
IHZvaWQgcmVtb3ZlRnJvbVBhcmVudEFuZERlc3Ryb3koKTsKIAogICAgIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXImIGFuaW1hdGlvbigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUXVvdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJRdW90ZS5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MSw3ICszNjEs
NyBAQCB2b2lkIFJlbmRlclF1b3RlOjp1cGRhdGVUZXh0UmVuZGVyZXIoKQogICAgICAgICByZW5k
ZXJUZXh0LT5kaXJ0eUxpbmVCb3hlcyhmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgYWRkQ2hpbGQobmV3IFJlbmRlclRleHRGcmFnbWVudChkb2N1bWVudCgpLCBtX3RleHQpKTsK
KyAgICBhZGRDaGlsZChjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KGRvY3VtZW50
KCksIG1fdGV4dCkpOwogfQogCiBTdHJpbmcgUmVuZGVyUXVvdGU6OmNvbXB1dGVUZXh0KCkgY29u
c3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAJKHJldmlzaW9u
IDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTYsOSArOTYsOSBAQCBzdGF0aWMgaW5saW5lIFJlbmRlckJsb2NrKiBy
dWJ5QWZ0ZXJCbG9jCiAgICAgcmV0dXJuIGlzUnVieUFmdGVyQmxvY2soY2hpbGQpID8gZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KGNoaWxkKSA6IG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZW5kZXJCbG9j
ayogY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKFJlbmRlck9iamVjdCYgcnVieSkKK3N0
YXRpYyBhdXRvIGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jayhSZW5kZXJPYmplY3QmIHJ1
YnkpCiB7Ci0gICAgUmVuZGVyQmxvY2sqIG5ld0Jsb2NrID0gbmV3IFJlbmRlckJsb2NrRmxvdyhy
dWJ5LmRvY3VtZW50KCksIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNw
bGF5KHJ1Ynkuc3R5bGUoKSwgSU5MSU5FX0JMT0NLKSk7CisgICAgYXV0byBuZXdCbG9jayA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4ocnVieS5kb2N1bWVudCgpLCBSZW5kZXJTdHls
ZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShydWJ5LnN0eWxlKCksIElOTElORV9C
TE9DSykpOwogICAgIG5ld0Jsb2NrLT5pbml0aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gbmV3
QmxvY2s7CiB9CkBAIC0xMzcsNDMgKzEzNyw0NSBAQCB2b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6
c3R5bGVEaWRDaGFuZ2UoCiAgICAgcHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0NoaWxkcmVuKFBy
b3BhZ2F0ZVRvQWxsQ2hpbGRyZW4pOwogfQogCi12b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6YWRk
Q2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3Zv
aWQgUmVuZGVyUnVieUFzSW5saW5lOjphZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICAvLyBJbnNlcnQgOmJlZm9y
ZSBhbmQgOmFmdGVyIGNvbnRlbnQgYmVmb3JlL2FmdGVyIHRoZSBSZW5kZXJSdWJ5UnVuKHMpCiAg
ICAgaWYgKGNoaWxkLT5pc0JlZm9yZUNvbnRlbnQoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlz
SW5saW5lKCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBnZW5lcmF0ZWQgaW5saW5lIGNvbnRlbnQg
bm9ybWFsbHkKLSAgICAgICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoY2hpbGQsIGZpcnN0
Q2hpbGQoKSk7CisgICAgICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKFdURk1vdmUoY2hp
bGQpLCBmaXJzdENoaWxkKCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV3Jh
cCBub24taW5saW5lIGNvbnRlbnQgd2l0aCBhbiBhbm9ueW1vdXMgaW5saW5lLWJsb2NrLgogICAg
ICAgICAgICAgUmVuZGVyQmxvY2sqIGJlZm9yZUJsb2NrID0gcnVieUJlZm9yZUJsb2NrKHRoaXMp
OwogICAgICAgICAgICAgaWYgKCFiZWZvcmVCbG9jaykgewotICAgICAgICAgICAgICAgIGJlZm9y
ZUJsb2NrID0gY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKCp0aGlzKTsKLSAgICAgICAg
ICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKGJlZm9yZUJsb2NrLCBmaXJzdENoaWxkKCkp
OworICAgICAgICAgICAgICAgIGF1dG8gbmV3QmxvY2sgPSBjcmVhdGVBbm9ueW1vdXNSdWJ5SW5s
aW5lQmxvY2soKnRoaXMpOworICAgICAgICAgICAgICAgIGJlZm9yZUJsb2NrID0gbmV3QmxvY2su
Z2V0KCk7CisgICAgICAgICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChXVEZNb3ZlKG5l
d0Jsb2NrKSwgZmlyc3RDaGlsZCgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJlZm9y
ZUJsb2NrLT5hZGRDaGlsZChjaGlsZCk7CisgICAgICAgICAgICBiZWZvcmVCbG9jay0+YWRkQ2hp
bGQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKGNoaWxkLT5pc0FmdGVyQ29udGVudCgpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNJ
bmxpbmUoKSkgewogICAgICAgICAgICAgLy8gQWRkIGdlbmVyYXRlZCBpbmxpbmUgY29udGVudCBu
b3JtYWxseQotICAgICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChjaGlsZCk7CisgICAg
ICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdyYXAgbm9uLWlubGluZSBjb250ZW50IHdpdGggYW4g
YW5vbnltb3VzIGlubGluZS1ibG9jay4KICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBhZnRlckJs
b2NrID0gcnVieUFmdGVyQmxvY2sodGhpcyk7CiAgICAgICAgICAgICBpZiAoIWFmdGVyQmxvY2sp
IHsKLSAgICAgICAgICAgICAgICBhZnRlckJsb2NrID0gY3JlYXRlQW5vbnltb3VzUnVieUlubGlu
ZUJsb2NrKCp0aGlzKTsKLSAgICAgICAgICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKGFm
dGVyQmxvY2spOworICAgICAgICAgICAgICAgIGF1dG8gbmV3QmxvY2sgPSBjcmVhdGVBbm9ueW1v
dXNSdWJ5SW5saW5lQmxvY2soKnRoaXMpOworICAgICAgICAgICAgICAgIGFmdGVyQmxvY2sgPSBu
ZXdCbG9jay5nZXQoKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKFdU
Rk1vdmUobmV3QmxvY2spKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFmdGVyQmxvY2st
PmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgIGFmdGVyQmxvY2stPmFkZENoaWxkKFdURk1v
dmUoY2hpbGQpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8g
SWYgdGhlIGNoaWxkIGlzIGEgcnVieSBydW4sIGp1c3QgYWRkIGl0IG5vcm1hbGx5LgogICAgIGlm
IChjaGlsZC0+aXNSdWJ5UnVuKCkpIHsKLSAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChj
aGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKFdURk1v
dmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE4
NCw3ICsxODYsNyBAQCB2b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQoUmVuZGVyCiAg
ICAgICAgIHdoaWxlIChydW4gJiYgIXJ1bi0+aXNSdWJ5UnVuKCkpCiAgICAgICAgICAgICBydW4g
PSBydW4tPnBhcmVudCgpOwogICAgICAgICBpZiAocnVuKSB7Ci0gICAgICAgICAgICBydW4tPmFk
ZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBydW4tPmFkZENoaWxkKFdU
Rk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIGJlZm9yZUNoaWxkIHNob3VsZCBh
bHdheXMgaGF2ZSBhIHJ1biBhcyBwYXJlbnQhCkBAIC0xOTYsMTMgKzE5OCwxNCBAQCB2b2lkIFJl
bmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgLy8gKFRoZSBSZW5kZXJSdWJ5
UnVuIG9iamVjdCB3aWxsIGhhbmRsZSB0aGUgZGV0YWlscykKICAgICBSZW5kZXJSdWJ5UnVuKiBs
YXN0UnVuID0gbGFzdFJ1YnlSdW4odGhpcyk7CiAgICAgaWYgKCFsYXN0UnVuIHx8IGxhc3RSdW4t
Pmhhc1J1YnlUZXh0KCkpIHsKLSAgICAgICAgbGFzdFJ1biA9IFJlbmRlclJ1YnlSdW46OnN0YXRp
Y0NyZWF0ZVJ1YnlSdW4odGhpcyk7Ci0gICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQobGFz
dFJ1biwgYmVmb3JlQ2hpbGQpOworICAgICAgICBhdXRvIG5ld1J1biA9IFJlbmRlclJ1YnlSdW46
OnN0YXRpY0NyZWF0ZVJ1YnlSdW4odGhpcyk7CisgICAgICAgIGxhc3RSdW4gPSBuZXdSdW4uZ2V0
KCk7CisgICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoV1RGTW92ZShuZXdSdW4pLCBiZWZv
cmVDaGlsZCk7CiAgICAgfQotICAgIGxhc3RSdW4tPmFkZENoaWxkKGNoaWxkKTsKKyAgICBsYXN0
UnVuLT5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiB9CiAKLXZvaWQgUmVuZGVyUnVieUFzSW5s
aW5lOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQorUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gUmVuZGVyUnVieUFzSW5saW5lOjp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkK
IHsKICAgICAvLyBJZiB0aGUgY2hpbGQncyBwYXJlbnQgaXMgKnRoaXMgKG11c3QgYmUgYSBydWJ5
IHJ1biBvciBnZW5lcmF0ZWQgY29udGVudCBvciBhbm9ueW1vdXMgYmxvY2spLAogICAgIC8vIGp1
c3QgdXNlIHRoZSBub3JtYWwgcmVtb3ZlIG1ldGhvZC4KQEAgLTIxMCwyMCArMjEzLDIwIEBAIHZv
aWQgUmVuZGVyUnVieUFzSW5saW5lOjpyZW1vdmVDaGlsZChSZW4KICNpZm5kZWYgQVNTRVJUX0RJ
U0FCTEVECiAgICAgICAgIEFTU0VSVChpc1J1YnlDaGlsZEZvck5vcm1hbFJlbW92YWwoY2hpbGQp
KTsKICNlbmRpZgotICAgICAgICBSZW5kZXJJbmxpbmU6OnJlbW92ZUNoaWxkKGNoaWxkKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gUmVuZGVySW5saW5lOjp0YWtlQ2hpbGQoY2hp
bGQpOwogICAgIH0KICAgICAvLyBJZiB0aGUgY2hpbGQncyBwYXJlbnQgaXMgYW4gYW5veW1vdXMg
YmxvY2sgKG11c3QgYmUgZ2VuZXJhdGVkIDpiZWZvcmUvOmFmdGVyIGNvbnRlbnQpCiAgICAgLy8g
anVzdCB1c2UgdGhlIGJsb2NrJ3MgcmVtb3ZlIG1ldGhvZC4KICAgICBpZiAoaXNBbm9ueW1vdXNS
dWJ5SW5saW5lQmxvY2soY2hpbGQucGFyZW50KCkpKSB7CiAgICAgICAgIEFTU0VSVChjaGlsZC5p
c0JlZm9yZUNvbnRlbnQoKSB8fCBjaGlsZC5pc0FmdGVyQ29udGVudCgpKTsKLSAgICAgICAgY2hp
bGQucGFyZW50KCktPnJlbW92ZUNoaWxkKGNoaWxkKTsKLSAgICAgICAgcmVtb3ZlQ2hpbGQoKmNo
aWxkLnBhcmVudCgpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiBwYXJlbnQgPSAq
Y2hpbGQucGFyZW50KCk7CisgICAgICAgIGF1dG8gdGFrZW5DaGlsZCA9IHBhcmVudC50YWtlQ2hp
bGQoY2hpbGQpOworICAgICAgICBwYXJlbnQucmVtb3ZlRnJvbVBhcmVudEFuZERlc3Ryb3koKTsK
KyAgICAgICAgcmV0dXJuIHRha2VuQ2hpbGQ7CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3aXNlIGZp
bmQgdGhlIGNvbnRhaW5pbmcgcnVuIGFuZCByZW1vdmUgaXQgZnJvbSB0aGVyZS4KLSAgICBmaW5k
UnVieVJ1blBhcmVudChjaGlsZCkucmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIHJldHVybiBmaW5k
UnVieVJ1blBhcmVudChjaGlsZCkudGFrZUNoaWxkKGNoaWxkKTsKIH0KIAogLy89PT0gcnVieSBh
cyBibG9jayBvYmplY3QgPT09CkBAIC0yNDMsNDMgKzI0Niw0NSBAQCB2b2lkIFJlbmRlclJ1YnlB
c0Jsb2NrOjpzdHlsZURpZENoYW5nZShTCiAgICAgcHJvcGFnYXRlU3R5bGVUb0Fub255bW91c0No
aWxkcmVuKFByb3BhZ2F0ZVRvQWxsQ2hpbGRyZW4pOwogfQogCi12b2lkIFJlbmRlclJ1YnlBc0Js
b2NrOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkKQordm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgLy8gSW5zZXJ0
IDpiZWZvcmUgYW5kIDphZnRlciBjb250ZW50IGJlZm9yZS9hZnRlciB0aGUgUmVuZGVyUnVieVJ1
bihzKQogICAgIGlmIChjaGlsZC0+aXNCZWZvcmVDb250ZW50KCkpIHsKICAgICAgICAgaWYgKGNo
aWxkLT5pc0lubGluZSgpKSB7CiAgICAgICAgICAgICAvLyBBZGQgZ2VuZXJhdGVkIGlubGluZSBj
b250ZW50IG5vcm1hbGx5Ci0gICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGNo
aWxkLCBmaXJzdENoaWxkKCkpOworICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGls
ZChXVEZNb3ZlKGNoaWxkKSwgZmlyc3RDaGlsZCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIFdyYXAgbm9uLWlubGluZSBjb250ZW50IHdpdGggYW4gYW5vbnltb3VzIGlubGlu
ZS1ibG9jay4KICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBiZWZvcmVCbG9jayA9IHJ1YnlCZWZv
cmVCbG9jayh0aGlzKTsKICAgICAgICAgICAgIGlmICghYmVmb3JlQmxvY2spIHsKLSAgICAgICAg
ICAgICAgICBiZWZvcmVCbG9jayA9IGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhp
cyk7Ci0gICAgICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChiZWZvcmVCbG9j
aywgZmlyc3RDaGlsZCgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld0Jsb2NrID0gY3JlYXRl
QW5vbnltb3VzUnVieUlubGluZUJsb2NrKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBiZWZvcmVC
bG9jayA9IG5ld0Jsb2NrLmdldCgpOworICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6
YWRkQ2hpbGQoV1RGTW92ZShuZXdCbG9jayksIGZpcnN0Q2hpbGQoKSk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBiZWZvcmVCbG9jay0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAg
YmVmb3JlQmxvY2stPmFkZENoaWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgfQogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIGlmIChjaGlsZC0+aXNBZnRlckNvbnRlbnQoKSkgewogICAg
ICAgICBpZiAoY2hpbGQtPmlzSW5saW5lKCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBnZW5lcmF0
ZWQgaW5saW5lIGNvbnRlbnQgbm9ybWFsbHkKLSAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6
YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChX
VEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXcmFwIG5v
bi1pbmxpbmUgY29udGVudCB3aXRoIGFuIGFub255bW91cyBpbmxpbmUtYmxvY2suCiAgICAgICAg
ICAgICBSZW5kZXJCbG9jayogYWZ0ZXJCbG9jayA9IHJ1YnlBZnRlckJsb2NrKHRoaXMpOwogICAg
ICAgICAgICAgaWYgKCFhZnRlckJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgYWZ0ZXJCbG9jayA9
IGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyk7Ci0gICAgICAgICAgICAgICAg
UmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChhZnRlckJsb2NrKTsKKyAgICAgICAgICAgICAgICBh
dXRvIG5ld0Jsb2NrID0gY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKCp0aGlzKTsKKyAg
ICAgICAgICAgICAgICBhZnRlckJsb2NrID0gbmV3QmxvY2suZ2V0KCk7CisgICAgICAgICAgICAg
ICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZNb3ZlKG5ld0Jsb2NrKSk7CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBhZnRlckJsb2NrLT5hZGRDaGlsZChjaGlsZCk7CisgICAgICAg
ICAgICBhZnRlckJsb2NrLT5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIHJ1YnkgcnVu
LCBqdXN0IGFkZCBpdCBub3JtYWxseS4KICAgICBpZiAoY2hpbGQtPmlzUnVieVJ1bigpKSB7Ci0g
ICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAg
ICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hp
bGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yOTAsNyArMjk1LDcgQEAgdm9pZCBS
ZW5kZXJSdWJ5QXNCbG9jazo6YWRkQ2hpbGQoUmVuZGVyTwogICAgICAgICB3aGlsZSAocnVuICYm
ICFydW4tPmlzUnVieVJ1bigpKQogICAgICAgICAgICAgcnVuID0gcnVuLT5wYXJlbnQoKTsKICAg
ICAgICAgaWYgKHJ1bikgewotICAgICAgICAgICAgcnVuLT5hZGRDaGlsZChjaGlsZCwgYmVmb3Jl
Q2hpbGQpOworICAgICAgICAgICAgcnVuLT5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3Jl
Q2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBiZWZvcmVDaGlsZCBzaG91bGQgYWx3YXlzIGhhdmUgYSBydW4gYXMg
cGFyZW50IQpAQCAtMzAyLDEzICszMDcsMTQgQEAgdm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6YWRk
Q2hpbGQoUmVuZGVyTwogICAgIC8vIChUaGUgUmVuZGVyUnVieVJ1biBvYmplY3Qgd2lsbCBoYW5k
bGUgdGhlIGRldGFpbHMpCiAgICAgUmVuZGVyUnVieVJ1biogbGFzdFJ1biA9IGxhc3RSdWJ5UnVu
KHRoaXMpOwogICAgIGlmICghbGFzdFJ1biB8fCBsYXN0UnVuLT5oYXNSdWJ5VGV4dCgpKSB7Ci0g
ICAgICAgIGxhc3RSdW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKHRoaXMp
OwotICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGxhc3RSdW4sIGJlZm9yZUNoaWxk
KTsKKyAgICAgICAgYXV0byBuZXdSdW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5
UnVuKHRoaXMpOworICAgICAgICBsYXN0UnVuID0gbmV3UnVuLmdldCgpOworICAgICAgICBSZW5k
ZXJCbG9ja0Zsb3c6OmFkZENoaWxkKFdURk1vdmUobmV3UnVuKSwgYmVmb3JlQ2hpbGQpOwogICAg
IH0KLSAgICBsYXN0UnVuLT5hZGRDaGlsZChjaGlsZCk7CisgICAgbGFzdFJ1bi0+YWRkQ2hpbGQo
V1RGTW92ZShjaGlsZCkpOwogfQogCi12b2lkIFJlbmRlclJ1YnlBc0Jsb2NrOjpyZW1vdmVDaGls
ZChSZW5kZXJPYmplY3QmIGNoaWxkKQorUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyUnVi
eUFzQmxvY2s6OnRha2VDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQogewogICAgIC8vIElmIHRo
ZSBjaGlsZCdzIHBhcmVudCBpcyAqdGhpcyAobXVzdCBiZSBhIHJ1YnkgcnVuIG9yIGdlbmVyYXRl
ZCBjb250ZW50IG9yIGFub255bW91cyBibG9jayksCiAgICAgLy8ganVzdCB1c2UgdGhlIG5vcm1h
bCByZW1vdmUgbWV0aG9kLgpAQCAtMzE2LDIwICszMjIsMjAgQEAgdm9pZCBSZW5kZXJSdWJ5QXNC
bG9jazo6cmVtb3ZlQ2hpbGQoUmVuZAogI2lmbmRlZiBBU1NFUlRfRElTQUJMRUQKICAgICAgICAg
QVNTRVJUKGlzUnVieUNoaWxkRm9yTm9ybWFsUmVtb3ZhbChjaGlsZCkpOwogI2VuZGlmCi0gICAg
ICAgIFJlbmRlckJsb2NrRmxvdzo6cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBSZW5kZXJCbG9ja0Zsb3c6OnRha2VDaGlsZChjaGlsZCk7CiAgICAg
fQogICAgIC8vIElmIHRoZSBjaGlsZCdzIHBhcmVudCBpcyBhbiBhbm95bW91cyBibG9jayAobXVz
dCBiZSBnZW5lcmF0ZWQgOmJlZm9yZS86YWZ0ZXIgY29udGVudCkKICAgICAvLyBqdXN0IHVzZSB0
aGUgYmxvY2sncyByZW1vdmUgbWV0aG9kLgogICAgIGlmIChpc0Fub255bW91c1J1YnlJbmxpbmVC
bG9jayhjaGlsZC5wYXJlbnQoKSkpIHsKICAgICAgICAgQVNTRVJUKGNoaWxkLmlzQmVmb3JlQ29u
dGVudCgpIHx8IGNoaWxkLmlzQWZ0ZXJDb250ZW50KCkpOwotICAgICAgICBjaGlsZC5wYXJlbnQo
KS0+cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZW1vdmVDaGlsZCgqY2hpbGQucGFyZW50
KCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIHBhcmVudCA9ICpjaGlsZC5wYXJl
bnQoKTsKKyAgICAgICAgYXV0byB0YWtlbkNoaWxkID0gcGFyZW50LnRha2VDaGlsZChjaGlsZCk7
CisgICAgICAgIHBhcmVudC5yZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOworICAgICAgICBy
ZXR1cm4gdGFrZW5DaGlsZDsKICAgICB9CiAKICAgICAvLyBPdGhlcndpc2UgZmluZCB0aGUgY29u
dGFpbmluZyBydW4gYW5kIHJlbW92ZSBpdCBmcm9tIHRoZXJlLgotICAgIGZpbmRSdWJ5UnVuUGFy
ZW50KGNoaWxkKS5yZW1vdmVDaGlsZChjaGlsZCk7CisgICAgcmV0dXJuIGZpbmRSdWJ5UnVuUGFy
ZW50KGNoaWxkKS50YWtlQ2hpbGQoY2hpbGQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmgJKHJldmlzaW9uIDIyMjYw
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDggKzU1LDggQEAgcHVibGljOgogICAgIFJlbmRlclJ1YnlBc0lubGluZShFbGVt
ZW50JiwgUmVuZGVyU3R5bGUmJik7CiAgICAgdmlydHVhbCB+UmVuZGVyUnVieUFzSW5saW5lKCk7
CiAKLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9i
amVjdCYgY2hpbGQpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsK
KyAgICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGls
ZCkgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxl
RGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKQEAgLTc1
LDggKzc1LDggQEAgcHVibGljOgogCiAgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGVGb3JOb25Bbm9ueW1vdXMoKSk7IH0KIAotICAgIHZv
aWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IDApIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGls
ZCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOworICAgIFJlbmRl
clB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKSBvdmVycmlk
ZTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05Niw4ICs5Niw5IEBAIHZvaWQgUmVuZGVyUnVieUJhc2U6Om1vdmVJbmxpbmVDaGls
ZHJlbigKICAgICAgICAgaWYgKGxhc3RDaGlsZCAmJiBsYXN0Q2hpbGQtPmlzQW5vbnltb3VzQmxv
Y2soKSAmJiBsYXN0Q2hpbGQtPmNoaWxkcmVuSW5saW5lKCkpCiAgICAgICAgICAgICB0b0Jsb2Nr
ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGxhc3RDaGlsZCk7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgdG9CbG9jayA9IHRvQmFzZS0+Y3JlYXRlQW5vbnltb3VzQmxvY2soKTsKLSAgICAg
ICAgICAgIHRvQmFzZS0+aW5zZXJ0Q2hpbGRJbnRlcm5hbCh0b0Jsb2NrLCBudWxscHRyLCBOb3Rp
ZnlDaGlsZHJlbik7CisgICAgICAgICAgICBhdXRvIG5ld1RvQmxvY2sgPSB0b0Jhc2UtPmNyZWF0
ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgICAgICB0b0Jsb2NrID0gbmV3VG9CbG9jay5nZXQo
KTsKKyAgICAgICAgICAgIHRvQmFzZS0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld1Rv
QmxvY2spLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ly8gTW92ZSBvdXIgaW5saW5lIGNoaWxkcmVuIGludG8gdGhlIHRhcmdldCBibG9jayB3ZSBkZXRl
cm1pbmVkIGFib3ZlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlS
dW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5
UnVuLmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJ1YnlSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCw4ICs5MCw5IEBAIFJlbmRlclJ1
YnlCYXNlKiBSZW5kZXJSdWJ5UnVuOjpydWJ5QmFzZVMKIHsKICAgICBSZW5kZXJSdWJ5QmFzZSog
YmFzZSA9IHJ1YnlCYXNlKCk7CiAgICAgaWYgKCFiYXNlKSB7Ci0gICAgICAgIGJhc2UgPSBjcmVh
dGVSdWJ5QmFzZSgpOwotICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGJhc2UpOwor
ICAgICAgICBhdXRvIG5ld0Jhc2UgPSBjcmVhdGVSdWJ5QmFzZSgpOworICAgICAgICBiYXNlID0g
bmV3QmFzZS5nZXQoKTsKKyAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZNb3Zl
KG5ld0Jhc2UpKTsKICAgICB9CiAgICAgcmV0dXJuIGJhc2U7CiB9CkBAIC0xMDYsNyArMTA3LDcg
QEAgYm9vbCBSZW5kZXJSdWJ5UnVuOjppc0NoaWxkQWxsb3dlZChjb25zdAogICAgIHJldHVybiBj
aGlsZC5pc0lubGluZSgpIHx8IGNoaWxkLmlzUnVieVRleHQoKTsKIH0KIAotdm9pZCBSZW5kZXJS
dWJ5UnVuOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQordm9pZCBSZW5kZXJSdWJ5UnVuOjphZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBBU1NFUlQoY2hp
bGQpOwogCkBAIC0xMTUsNyArMTE2LDcgQEAgdm9pZCBSZW5kZXJSdWJ5UnVuOjphZGRDaGlsZChS
ZW5kZXJPYmplYwogICAgICAgICAgICAgLy8gUmVuZGVyUnVieSBoYXMgYWxyZWFkeSBhc2NlcnRh
aW5lZCB0aGF0IHdlIGNhbiBhZGQgdGhlIGNoaWxkIGhlcmUuCiAgICAgICAgICAgICBBU1NFUlQo
IWhhc1J1YnlUZXh0KCkpOwogICAgICAgICAgICAgLy8gcHJlcGVuZCBydWJ5IHRleHRzIGFzIGZp
cnN0IGNoaWxkCi0gICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGNoaWxkLCBm
aXJzdENoaWxkKCkpOworICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZN
b3ZlKGNoaWxkKSwgZmlyc3RDaGlsZCgpKTsKICAgICAgICAgfSAgZWxzZSBpZiAoYmVmb3JlQ2hp
bGQtPmlzUnVieVRleHQoKSkgewogICAgICAgICAgICAgLy8gTmV3IHRleHQgaXMgaW5zZXJ0ZWQg
anVzdCBiZWZvcmUgYW5vdGhlci4KICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB0aGUgbmV3
IHRleHQgdGFrZXMgdGhlIHBsYWNlIG9mIHRoZSBvbGQgb25lLCBhbmQKQEAgLTEyMywzNCArMTI0
LDM1IEBAIHZvaWQgUmVuZGVyUnVieVJ1bjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWMKICAgICAgICAg
ICAgIEFTU0VSVChiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcyk7CiAgICAgICAgICAgICBS
ZW5kZXJFbGVtZW50KiBydWJ5ID0gcGFyZW50KCk7CiAgICAgICAgICAgICBBU1NFUlQoaXNSdWJ5
KHJ1YnkpKTsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBuZXdSdW4gPSBzdGF0aWNDcmVhdGVS
dWJ5UnVuKHJ1YnkpOwotICAgICAgICAgICAgcnVieS0+YWRkQ2hpbGQobmV3UnVuLCBuZXh0U2li
bGluZygpKTsKKyAgICAgICAgICAgIGF1dG8gbmV3UnVuID0gc3RhdGljQ3JlYXRlUnVieVJ1bihy
dWJ5KTsKKyAgICAgICAgICAgIHJ1YnktPmFkZENoaWxkKFdURk1vdmUobmV3UnVuKSwgbmV4dFNp
YmxpbmcoKSk7CiAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyBydWJ5IHRleHQgYW5kIG1vdmUg
dGhlIG9sZCBvbmUgdG8gdGhlIG5ldyBydW4KICAgICAgICAgICAgIC8vIE5vdGU6IERvaW5nIGl0
IGluIHRoaXMgb3JkZXIgYW5kIG5vdCB1c2luZyBSZW5kZXJSdWJ5UnVuJ3MgbWV0aG9kcywKICAg
ICAgICAgICAgIC8vIGluIG9yZGVyIHRvIGF2b2lkIGF1dG9tYXRpYyByZW1vdmFsIG9mIHRoZSBy
dWJ5IHJ1biBpbiBjYXNlIHRoZXJlIGlzIG5vCiAgICAgICAgICAgICAvLyBvdGhlciBjaGlsZCBi
ZXNpZGVzIHRoZSBvbGQgcnVieSB0ZXh0LgotICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93Ojph
ZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOwotICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93
OjpyZW1vdmVDaGlsZCgqYmVmb3JlQ2hpbGQpOwotICAgICAgICAgICAgbmV3UnVuLT5hZGRDaGls
ZChiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKFdU
Rk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBhdXRvIHRha2VuQmVmb3Jl
Q2hpbGQgPSBSZW5kZXJCbG9ja0Zsb3c6OnRha2VDaGlsZCgqYmVmb3JlQ2hpbGQpOworICAgICAg
ICAgICAgbmV3UnVuLT5hZGRDaGlsZChXVEZNb3ZlKHRha2VuQmVmb3JlQ2hpbGQpKTsKICAgICAg
ICAgfSBlbHNlIGlmIChoYXNSdWJ5QmFzZSgpKSB7CiAgICAgICAgICAgICAvLyBJbnNlcnRpb24g
YmVmb3JlIGEgcnVieSBiYXNlIG9iamVjdC4KICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3
ZSBuZWVkIGluc2VydCBhIG5ldyBydW4gYmVmb3JlIHRoZSBjdXJyZW50IG9uZSBhbmQgc3BsaXQg
dGhlIGJhc2UuCiAgICAgICAgICAgICBSZW5kZXJFbGVtZW50KiBydWJ5ID0gcGFyZW50KCk7Ci0g
ICAgICAgICAgICBSZW5kZXJSdWJ5UnVuKiBuZXdSdW4gPSBzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1
YnkpOwotICAgICAgICAgICAgcnVieS0+YWRkQ2hpbGQobmV3UnVuLCB0aGlzKTsKLSAgICAgICAg
ICAgIG5ld1J1bi0+YWRkQ2hpbGQoY2hpbGQpOwotICAgICAgICAgICAgcnVieUJhc2VTYWZlKCkt
Pm1vdmVDaGlsZHJlbihuZXdSdW4tPnJ1YnlCYXNlU2FmZSgpLCBiZWZvcmVDaGlsZCk7CisgICAg
ICAgICAgICBhdXRvIG5ld1J1biA9IHN0YXRpY0NyZWF0ZVJ1YnlSdW4ocnVieSk7CisgICAgICAg
ICAgICBhdXRvJiBydW4gPSAqbmV3UnVuOworICAgICAgICAgICAgcnVieS0+YWRkQ2hpbGQoV1RG
TW92ZShuZXdSdW4pLCB0aGlzKTsKKyAgICAgICAgICAgIHJ1bi5hZGRDaGlsZChXVEZNb3ZlKGNo
aWxkKSk7CisgICAgICAgICAgICBydWJ5QmFzZVNhZmUoKS0+bW92ZUNoaWxkcmVuKHJ1bi5ydWJ5
QmFzZVNhZmUoKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgLy8gY2hpbGQgaXMgbm90IGEgdGV4dCAtPiBpbnNlcnQgaXQgaW50byB0aGUgYmFzZQogICAg
ICAgICAvLyAoYXBwZW5kIGl0IGluc3RlYWQgaWYgYmVmb3JlQ2hpbGQgaXMgdGhlIHJ1YnkgdGV4
dCkKICAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5pc1J1YnlUZXh0KCkp
CiAgICAgICAgICAgICBiZWZvcmVDaGlsZCA9IDA7Ci0gICAgICAgIHJ1YnlCYXNlU2FmZSgpLT5h
ZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBydWJ5QmFzZVNhZmUoKS0+YWRk
Q2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICB9CiB9CiAKLXZvaWQgUmVu
ZGVyUnVieVJ1bjo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IFJlbmRlclJ1YnlSdW46OnRha2VDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxk
KQogewogICAgIC8vIElmIHRoZSBjaGlsZCBpcyBhIHJ1YnkgdGV4dCwgdGhlbiBtZXJnZSB0aGUg
cnVieSBiYXNlIHdpdGggdGhlIGJhc2Ugb2YKICAgICAvLyB0aGUgcmlnaHQgc2libGluZyBydW4s
IGlmIHBvc3NpYmxlLgpAQCAtMTcyLDM5ICsxNzQsMzkgQEAgdm9pZCBSZW5kZXJSdWJ5UnVuOjpy
ZW1vdmVDaGlsZChSZW5kZXJPYgogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVuZGVyQmxvY2tG
bG93OjpyZW1vdmVDaGlsZChjaGlsZCk7CisgICAgYXV0byB0YWtlbkNoaWxkID0gUmVuZGVyQmxv
Y2tGbG93Ojp0YWtlQ2hpbGQoY2hpbGQpOwogCiAgICAgaWYgKCFiZWluZ0Rlc3Ryb3llZCgpICYm
ICFyZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkgewogICAgICAgICAvLyBDaGVjayBpZiBvdXIg
YmFzZSAoaWYgYW55KSBpcyBub3cgZW1wdHkuIElmIHNvLCBkZXN0cm95IGl0LgogICAgICAgICBS
ZW5kZXJCbG9jayogYmFzZSA9IHJ1YnlCYXNlKCk7CiAgICAgICAgIGlmIChiYXNlICYmICFiYXNl
LT5maXJzdENoaWxkKCkpIHsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6cmVtb3ZlQ2hp
bGQoKmJhc2UpOworICAgICAgICAgICAgYXV0byB0YWtlbkJhc2UgPSBSZW5kZXJCbG9ja0Zsb3c6
OnRha2VDaGlsZCgqYmFzZSk7CiAgICAgICAgICAgICBiYXNlLT5kZWxldGVMaW5lcygpOwotICAg
ICAgICAgICAgYmFzZS0+ZGVzdHJveSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gSWYgYW55
IG9mIHRoZSBhYm92ZSBsZWF2ZXMgdGhlIHJ1biBlbXB0eSwgZGVzdHJveSBpdCBhcyB3ZWxsLgog
ICAgICAgICBpZiAoIWhhc1J1YnlUZXh0KCkgJiYgIWhhc1J1YnlCYXNlKCkpIHsKLSAgICAgICAg
ICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZCgqdGhpcyk7CisgICAgICAgICAgICBhdXRvIHRha2Vu
VGhpcyA9IHBhcmVudCgpLT50YWtlQ2hpbGQoKnRoaXMpOwogICAgICAgICAgICAgZGVsZXRlTGlu
ZXMoKTsKLSAgICAgICAgICAgIGRlc3Ryb3koKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJl
dHVybiB0YWtlbkNoaWxkOwogfQogCi1SZW5kZXJSdWJ5QmFzZSogUmVuZGVyUnVieVJ1bjo6Y3Jl
YXRlUnVieUJhc2UoKSBjb25zdAorUmVuZGVyUHRyPFJlbmRlclJ1YnlCYXNlPiBSZW5kZXJSdWJ5
UnVuOjpjcmVhdGVSdWJ5QmFzZSgpIGNvbnN0CiB7CiAgICAgYXV0byBuZXdTdHlsZSA9IFJlbmRl
clN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlKCksIEJMT0NLKTsK
ICAgICBuZXdTdHlsZS5zZXRUZXh0QWxpZ24oQ0VOVEVSKTsgLy8gRklYTUU6IHVzZSBXRUJLSVRf
Q0VOVEVSPwotICAgIGF1dG8gcmVuZGVyZXIgPSBuZXcgUmVuZGVyUnVieUJhc2UoZG9jdW1lbnQo
KSwgV1RGTW92ZShuZXdTdHlsZSkpOworICAgIGF1dG8gcmVuZGVyZXIgPSBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJSdWJ5QmFzZT4oZG9jdW1lbnQoKSwgV1RGTW92ZShuZXdTdHlsZSkpOwogICAgIHJl
bmRlcmVyLT5pbml0aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gcmVuZGVyZXI7CiB9CiAKLVJl
bmRlclJ1YnlSdW4qIFJlbmRlclJ1YnlSdW46OnN0YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3QgUmVu
ZGVyT2JqZWN0KiBwYXJlbnRSdWJ5KQorUmVuZGVyUHRyPFJlbmRlclJ1YnlSdW4+IFJlbmRlclJ1
YnlSdW46OnN0YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnRSdWJ5
KQogewogICAgIEFTU0VSVChpc1J1YnkocGFyZW50UnVieSkpOwotICAgIGF1dG8gcmVuZGVyZXIg
PSBuZXcgUmVuZGVyUnVieVJ1bihwYXJlbnRSdWJ5LT5kb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6
Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShwYXJlbnRSdWJ5LT5zdHlsZSgpLCBJTkxJ
TkVfQkxPQ0spKTsKKyAgICBhdXRvIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyUnVi
eVJ1bj4ocGFyZW50UnVieS0+ZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91
c1N0eWxlV2l0aERpc3BsYXkocGFyZW50UnVieS0+c3R5bGUoKSwgSU5MSU5FX0JMT0NLKSk7CiAg
ICAgcmVuZGVyZXItPmluaXRpYWxpemVTdHlsZSgpOwogICAgIHJldHVybiByZW5kZXJlcjsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAkocmV2aXNpb24g
MjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaAkod29y
a2luZyBjb3B5KQpAQCAtNTYsMTQgKzU2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIGxheW91dEJs
b2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlSGVpZ2h0ID0gMCkgb3Zl
cnJpZGU7CiAKICAgICBib29sIGlzQ2hpbGRBbGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNv
bnN0IFJlbmRlclN0eWxlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRDaGlsZChSZW5k
ZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lk
IGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFr
ZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwogCiAgICAgUmVuZGVyQmxvY2sqIGZpcnN0
TGluZUJsb2NrKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGdldE92ZXJoYW5nKGJvb2wg
Zmlyc3RMaW5lLCBSZW5kZXJPYmplY3QqIHN0YXJ0UmVuZGVyZXIsIFJlbmRlck9iamVjdCogZW5k
UmVuZGVyZXIsIGZsb2F0JiBzdGFydE92ZXJoYW5nLCBmbG9hdCYgZW5kT3ZlcmhhbmcpIGNvbnN0
OwogCi0gICAgc3RhdGljIFJlbmRlclJ1YnlSdW4qIHN0YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3Qg
UmVuZGVyT2JqZWN0KiBwYXJlbnRSdWJ5KTsKKyAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclJ1
YnlSdW4+IHN0YXRpY0NyZWF0ZVJ1YnlSdW4oY29uc3QgUmVuZGVyT2JqZWN0KiBwYXJlbnRSdWJ5
KTsKICAgICAKICAgICB2b2lkIHVwZGF0ZVByaW9yQ29udGV4dEZyb21DYWNoZWRCcmVha0l0ZXJh
dG9yKExhenlMaW5lQnJlYWtJdGVyYXRvciYpIGNvbnN0OwogICAgIHZvaWQgc2V0Q2FjaGVkUHJp
b3JDaGFyYWN0ZXJzKFVDaGFyIGxhc3QsIFVDaGFyIHNlY29uZFRvTGFzdCkKQEAgLTc0LDcgKzc0
LDcgQEAgcHVibGljOgogICAgIGJvb2wgY2FuQnJlYWtCZWZvcmUoY29uc3QgTGF6eUxpbmVCcmVh
a0l0ZXJhdG9yJikgY29uc3Q7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgUmVuZGVyUnVieUJhc2Uq
IGNyZWF0ZVJ1YnlCYXNlKCkgY29uc3Q7CisgICAgUmVuZGVyUHRyPFJlbmRlclJ1YnlCYXNlPiBj
cmVhdGVSdWJ5QmFzZSgpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNSdWJ5UnVuKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGFibGUuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlc2V0U2VjdGlvblBvaW50ZXJJZgogICAgICAgICBw
dHIgPSAwOwogfQogCi12b2lkIFJlbmRlclRhYmxlOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNo
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hp
bGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hp
bGQpCiB7CiAgICAgYm9vbCB3cmFwSW5Bbm9ueW1vdXNTZWN0aW9uID0gIWNoaWxkLT5pc091dE9m
Rmxvd1Bvc2l0aW9uZWQoKTsKIApAQCAtMTUwLDE4ICsxNTAsMTggQEAgdm9pZCBSZW5kZXJUYWJs
ZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KgogICAgICAgICAgICAgY2FzZSBUQUJMRV9IRUFERVJf
R1JPVVA6CiAgICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1f
aGVhZCwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgICAgIGlmICghbV9oZWFkKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1faGVhZCA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oY2hp
bGQpOworICAgICAgICAgICAgICAgICAgICBtX2hlYWQgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNl
Y3Rpb24+KGNoaWxkLmdldCgpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICByZXNldFNlY3Rpb25Qb2ludGVySWZOb3RCZWZvcmUobV9maXJzdEJvZHksIGJl
Zm9yZUNoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2ZpcnN0Qm9keSkgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2ZpcnN0Qm9keSA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2Vj
dGlvbj4oY2hpbGQpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBkb3du
Y2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkLmdldCgpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUQUJMRV9GT09URVJfR1JPVVA6CiAg
ICAgICAgICAgICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1fZm9vdCwgYmVm
b3JlQ2hpbGQpOwogICAgICAgICAgICAgICAgIGlmICghbV9mb290KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fZm9vdCA9IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oY2hpbGQpOworICAg
ICAgICAgICAgICAgICAgICBtX2Zvb3QgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNo
aWxkLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9
IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBA
IC0xNjksNyArMTY5LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0
KgogICAgICAgICAgICAgY2FzZSBUQUJMRV9ST1dfR1JPVVA6CiAgICAgICAgICAgICAgICAgcmVz
ZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1fZmlyc3RCb2R5LCBiZWZvcmVDaGlsZCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFtX2ZpcnN0Qm9keSkKLSAgICAgICAgICAgICAgICAgICAgbV9m
aXJzdEJvZHkgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNo
aWxkLmdldCgpKTsKICAgICAgICAgICAgICAgICB3cmFwSW5Bbm9ueW1vdXNTZWN0aW9uID0gZmFs
c2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTg3
LDE5ICsxODcsMTkgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0Kgog
ICAgICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMp
CiAgICAgICAgICAgICBiZWZvcmVDaGlsZCA9IHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGls
ZChiZWZvcmVDaGlsZCk7CiAKLSAgICAgICAgUmVuZGVyQm94OjphZGRDaGlsZChjaGlsZCwgYmVm
b3JlQ2hpbGQpOworICAgICAgICBSZW5kZXJCb3g6OmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBi
ZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoIWJlZm9yZUNo
aWxkICYmIGlzPFJlbmRlclRhYmxlU2VjdGlvbj4obGFzdENoaWxkKCkpICYmIGxhc3RDaGlsZCgp
LT5pc0Fub255bW91cygpICYmICFsYXN0Q2hpbGQoKS0+aXNCZWZvcmVDb250ZW50KCkpIHsKLSAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqbGFzdENoaWxkKCkpLmFkZENoaWxk
KGNoaWxkKTsKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqbGFzdENoaWxk
KCkpLmFkZENoaWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgYmVm
b3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBzZWN0
aW9uID0gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICBpZiAoaXM8UmVu
ZGVyVGFibGVTZWN0aW9uPihzZWN0aW9uKSAmJiBzZWN0aW9uLT5pc0Fub255bW91cygpKSB7Ci0g
ICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KCpzZWN0aW9uKS5hZGRDaGls
ZChjaGlsZCk7CisgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KCpzZWN0
aW9uKS5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICB9CkBAIC0yMTEsMTYgKzIxMSwxNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphZGRD
aGlsZChSZW5kZXJPYmplY3QqCiAgICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiYgc2VjdGlvbiA9
IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oKmxhc3RCb3gpOwogICAgICAgICBpZiAoYmVm
b3JlQ2hpbGQgPT0gJnNlY3Rpb24pCiAgICAgICAgICAgICBiZWZvcmVDaGlsZCA9IHNlY3Rpb24u
Zmlyc3RSb3coKTsKLSAgICAgICAgc2VjdGlvbi5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQp
OworICAgICAgICBzZWN0aW9uLmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWlzPFJl
bmRlclRhYmxlU2VjdGlvbj4oKmJlZm9yZUNoaWxkKSAmJiBiZWZvcmVDaGlsZC0+c3R5bGUoKS5k
aXNwbGF5KCkgIT0gVEFCTEVfQ0FQVElPTiAmJiBiZWZvcmVDaGlsZC0+c3R5bGUoKS5kaXNwbGF5
KCkgIT0gVEFCTEVfQ09MVU1OX0dST1VQKQogICAgICAgICBiZWZvcmVDaGlsZCA9IG51bGxwdHI7
CiAKLSAgICBhdXRvIHNlY3Rpb24gPSBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255bW91
c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcykucmVsZWFzZSgpOwotICAgIGFkZENoaWxkKHNlY3Rp
b24sIGJlZm9yZUNoaWxkKTsKLSAgICBzZWN0aW9uLT5hZGRDaGlsZChjaGlsZCk7CisgICAgYXV0
byBuZXdTZWN0aW9uID0gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFy
ZW50UmVuZGVyZXIoKnRoaXMpOworICAgIGF1dG8mIHNlY3Rpb24gPSAqbmV3U2VjdGlvbjsKKyAg
ICBhZGRDaGlsZChXVEZNb3ZlKG5ld1NlY3Rpb24pLCBiZWZvcmVDaGlsZCk7CisgICAgc2VjdGlv
bi5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGU6OmFkZENh
cHRpb24oY29uc3QgUmVuZGVyVGFibGVDYXB0aW9uKiBjYXB0aW9uKQpAQCAtMTU3NywxNCArMTU3
OCwxNCBAQCBib29sIFJlbmRlclRhYmxlOjpub2RlQXRQb2ludChjb25zdCBIaXRUCiAgICAgcmV0
dXJuIGZhbHNlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGU+IFJlbmRlclRhYmxl
OjpjcmVhdGVUYWJsZVdpdGhTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSkKK1JlbmRlclB0cjxSZW5kZXJUYWJsZT4gUmVuZGVyVGFibGU6OmNyZWF0ZVRh
YmxlV2l0aFN0eWxlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQogewotICAgIGF1dG8gdGFibGUgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclRhYmxlPihkb2N1
bWVudCwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUs
IHN0eWxlLmRpc3BsYXkoKSA9PSBJTkxJTkUgPyBJTkxJTkVfVEFCTEUgOiBUQUJMRSkpOworICAg
IGF1dG8gdGFibGUgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUYWJsZT4oZG9jdW1lbnQsIFJlbmRl
clN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBzdHlsZS5kaXNw
bGF5KCkgPT0gSU5MSU5FID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpKTsKICAgICB0YWJsZS0+aW5p
dGlhbGl6ZVN0eWxlKCk7CiAgICAgcmV0dXJuIHRhYmxlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyVGFibGU+IFJlbmRlclRhYmxlOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVy
ZXIoY29uc3QgUmVuZGVyRWxlbWVudCYgcGFyZW50KQorUmVuZGVyUHRyPFJlbmRlclRhYmxlPiBS
ZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRl
ckVsZW1lbnQmIHBhcmVudCkKIHsKICAgICByZXR1cm4gUmVuZGVyVGFibGU6OmNyZWF0ZVRhYmxl
V2l0aFN0eWxlKHBhcmVudC5kb2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gMjIyNjA3KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyNiw3ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBjYWxjQm9yZGVyRW5kKCkg
Y29uc3Q7CiAgICAgdm9pZCByZWNhbGNCb3JkZXJzSW5Sb3dEaXJlY3Rpb24oKTsKIAotICAgIHZv
aWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCA9IDApIGZpbmFsOworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4g
Y2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBmaW5hbDsKIAogICAgIHN0cnVj
dCBDb2x1bW5TdHJ1Y3QgewogICAgICAgICBleHBsaWNpdCBDb2x1bW5TdHJ1Y3QodW5zaWduZWQg
aW5pdGlhbFNwYW4gPSAxKQpAQCAtMjUwLDggKzI1MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IHJlY2FsY1NlY3Rpb25zKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJUYWJsZT4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRl
ckVsZW1lbnQmKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1v
dXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclRhYmxlPiBjcmVhdGVBbm9ueW1vdXNX
aXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyRWxlbWVudCYpOworICAgIFJlbmRlclB0cjxS
ZW5kZXJCb3g+IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJv
eCYgcmVuZGVyZXIpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgY29uc3QgQm9yZGVyVmFsdWUmIHRh
YmxlU3RhcnRCb3JkZXJBZGpvaW5pbmdDZWxsKGNvbnN0IFJlbmRlclRhYmxlQ2VsbCYpIGNvbnN0
OwogICAgIGNvbnN0IEJvcmRlclZhbHVlJiB0YWJsZUVuZEJvcmRlckFkam9pbmluZ0NlbGwoY29u
c3QgUmVuZGVyVGFibGVDZWxsJikgY29uc3Q7CkBAIC0yNzMsNyArMjczLDcgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgc2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKSBmaW5hbDsKIAogcHJpdmF0
ZToKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlPiBjcmVhdGVUYWJsZVdp
dGhTdHlsZShEb2N1bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgc3RhdGljIFJlbmRl
clB0cjxSZW5kZXJUYWJsZT4gY3JlYXRlVGFibGVXaXRoU3R5bGUoRG9jdW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSYpOwogCiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuICJSZW5kZXJUYWJsZSI7IH0KIApAQCAtMzgwLDcgKzM4MCw3IEBAIGlubGlu
ZSBSZW5kZXJUYWJsZVNlY3Rpb24qIFJlbmRlclRhYmxlOjoKIAogaW5saW5lIGJvb2wgaXNEaXJl
Y3Rpb25TYW1lKGNvbnN0IFJlbmRlckJveCogdGFibGVJdGVtLCBjb25zdCBSZW5kZXJCb3gqIG90
aGVyVGFibGVJdGVtKSB7IHJldHVybiB0YWJsZUl0ZW0gJiYgb3RoZXJUYWJsZUl0ZW0gPyB0YWJs
ZUl0ZW0tPnN0eWxlKCkuZGlyZWN0aW9uKCkgPT0gb3RoZXJUYWJsZUl0ZW0tPnN0eWxlKCkuZGly
ZWN0aW9uKCkgOiB0cnVlOyB9CiAKLWlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBS
ZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVy
Qm94JiByZW5kZXJlcikgY29uc3QKK2lubGluZSBSZW5kZXJQdHI8UmVuZGVyQm94PiBSZW5kZXJU
YWJsZTo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiBy
ZW5kZXJlcikgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyVGFibGU6OmNyZWF0ZVRhYmxlV2l0
aFN0eWxlKHJlbmRlcmVyLmRvY3VtZW50KCksIHJlbmRlcmVyLnN0eWxlKCkpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAJKHJldmlzaW9u
IDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzY1LDE0ICsxMzY1LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVD
ZWxsOjpzY3JvbGxiYXJzQ2hhbmdlZCgKICAgICAgICAgc2V0SW50cmluc2ljUGFkZGluZ0FmdGVy
KGludHJpbnNpY1BhZGRpbmdBZnRlcigpIC0gc2Nyb2xsYmFySGVpZ2h0KTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclRhYmxlQ2VsbD4gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVUYWJsZUNl
bGxXaXRoU3R5bGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
CitSZW5kZXJQdHI8UmVuZGVyVGFibGVDZWxsPiBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZVRhYmxl
Q2VsbFdpdGhTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkKIHsKLSAgICBhdXRvIGNlbGwgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclRhYmxlQ2VsbD4o
ZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0
eWxlLCBUQUJMRV9DRUxMKSk7CisgICAgYXV0byBjZWxsID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
VGFibGVDZWxsPihkb2N1bWVudCwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0
aERpc3BsYXkoc3R5bGUsIFRBQkxFX0NFTEwpKTsKICAgICBjZWxsLT5pbml0aWFsaXplU3R5bGUo
KTsKICAgICByZXR1cm4gY2VsbDsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlQ2Vs
bD4gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29u
c3QgUmVuZGVyVGFibGVSb3cmIHBhcmVudCkKK1JlbmRlclB0cjxSZW5kZXJUYWJsZUNlbGw+IFJl
bmRlclRhYmxlQ2VsbDo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJl
bmRlclRhYmxlUm93JiBwYXJlbnQpCiB7CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlQ2VsbDo6Y3Jl
YXRlVGFibGVDZWxsV2l0aFN0eWxlKHBhcmVudC5kb2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCShy
ZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsOCBAQCBwdWJsaWM6CiAgICAgYm9v
bCBjZWxsV2lkdGhDaGFuZ2VkKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsV2lkdGhDaGFuZ2VkOyB9
CiAgICAgdm9pZCBzZXRDZWxsV2lkdGhDaGFuZ2VkKGJvb2wgYiA9IHRydWUpIHsgbV9jZWxsV2lk
dGhDaGFuZ2VkID0gYjsgfQogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJs
ZUNlbGw+IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJs
ZVJvdyYpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255bW91c0Jv
eFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0
YXRpYyBSZW5kZXJQdHI8UmVuZGVyVGFibGVDZWxsPiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50
UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVSb3cmKTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQm94
PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25z
dCBvdmVycmlkZTsKIAogICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB1bmlmeSB3aGlj
aCB0YWJsZSBwYXJ0J3Mgc3R5bGUgd2UgdXNlIGZvciBjb21wdXRpbmcgZGlyZWN0aW9uIGFuZAog
ICAgIC8vIHdyaXRpbmcgbW9kZS4gV3JpdGluZyBtb2RlcyBhcmUgbm90IGFsbG93ZWQgb24gcm93
IGdyb3VwIGFuZCByb3cgYnV0IGRpcmVjdGlvbiBpcy4KQEAgLTEzOCw3ICsxMzgsNyBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpIG92ZXJyaWRl
OwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVDZWxs
PiBjcmVhdGVUYWJsZUNlbGxXaXRoU3R5bGUoRG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYp
OworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyVGFibGVDZWxsPiBjcmVhdGVUYWJsZUNlbGxX
aXRoU3R5bGUoRG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwogCiAgICAgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIChpc0Fub255bW91cygpIHx8
IGlzUHNldWRvRWxlbWVudCgpKSA/ICJSZW5kZXJUYWJsZUNlbGwgKGFub255bW91cykiIDogIlJl
bmRlclRhYmxlQ2VsbCI7IH0KIApAQCAtMzc1LDcgKzM3NSw3IEBAIGlubGluZSB2b2lkIFJlbmRl
clRhYmxlQ2VsbDo6aW52YWxpZGF0ZUgKICAgICBtX2hhc0VtcHR5Q29sbGFwc2VkRW5kQm9yZGVy
ID0gZmFsc2U7CiB9CiAKLWlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBSZW5kZXJU
YWJsZUNlbGw6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJv
eCYgcmVuZGVyZXIpIGNvbnN0CitpbmxpbmUgUmVuZGVyUHRyPFJlbmRlckJveD4gUmVuZGVyVGFi
bGVDZWxsOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gm
IHJlbmRlcmVyKSBjb25zdAogewogICAgIHJldHVybiBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZVRh
YmxlQ2VsbFdpdGhTdHlsZShyZW5kZXJlci5kb2N1bWVudCgpLCByZW5kZXJlci5zdHlsZSgpKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAko
cmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Um93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDcgKzEwNiw3IEBAIGNvbnN0IEJvcmRlclZh
bHVlJiBSZW5kZXJUYWJsZVJvdzo6Ym9yZGUKICAgICByZXR1cm4gc3R5bGUoKS5ib3JkZXJFbmQo
KTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyVGFibGVSb3c6OmFkZENo
aWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkKQogewogICAgIGlmICghaXM8UmVuZGVyVGFibGVDZWxsPigqY2hpbGQpKSB7CiAgICAgICAg
IFJlbmRlck9iamVjdCogbGFzdCA9IGJlZm9yZUNoaWxkOwpAQCAtMTE2LDE0ICsxMTYsMTQgQEAg
dm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZQogICAgICAgICAgICAgUmVu
ZGVyVGFibGVDZWxsJiBjZWxsID0gZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqbGFzdCk7CiAg
ICAgICAgICAgICBpZiAoYmVmb3JlQ2hpbGQgPT0gJmNlbGwpCiAgICAgICAgICAgICAgICAgYmVm
b3JlQ2hpbGQgPSBjZWxsLmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgICAgIGNlbGwuYWRkQ2hpbGQo
Y2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIGNlbGwuYWRkQ2hpbGQoV1RGTW92ZShj
aGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAg
ICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYg
YmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVj
dCogY2VsbCA9IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgICAgIGlm
IChpczxSZW5kZXJUYWJsZUNlbGw+KGNlbGwpICYmIGNlbGwtPmlzQW5vbnltb3VzKCkpIHsKLSAg
ICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZUNlbGw+KCpjZWxsKS5hZGRDaGlsZChj
aGlsZCk7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqY2VsbCku
YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpAQCAtMTMyLDIxICsxMzIsMjMgQEAgdm9pZCBSZW5kZXJUYWJs
ZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZQogICAgICAgICBpZiAobGFzdCAmJiBsYXN0LT5wYXJl
bnQoKSAmJiBsYXN0LT5wYXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdC0+cGFyZW50KCkt
PmlzQmVmb3JlT3JBZnRlckNvbnRlbnQoKSkgewogICAgICAgICAgICAgLy8gSWYgYmVmb3JlQ2hp
bGQgaXMgaW5zaWRlIGFuIGFub255bW91cyBjZWxsLCBpbnNlcnQgaW50byB0aGUgY2VsbC4KICAg
ICAgICAgICAgIGlmICghaXM8UmVuZGVyVGFibGVDZWxsPigqbGFzdCkpIHsKLSAgICAgICAgICAg
ICAgICBsYXN0LT5wYXJlbnQoKS0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAg
ICAgICAgICAgICBsYXN0LT5wYXJlbnQoKS0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9y
ZUNoaWxkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAvLyBJZiBiZWZvcmVDaGlsZCBpcyBpbnNpZGUgYW4gYW5vbnltb3VzIHJvdywgaW5zZXJ0
IGludG8gdGhlIHJvdy4KICAgICAgICAgICAgIGF1dG8mIHBhcmVudCA9ICpsYXN0LT5wYXJlbnQo
KTsKICAgICAgICAgICAgIGlmIChpczxSZW5kZXJUYWJsZVJvdz4ocGFyZW50KSkgewotICAgICAg
ICAgICAgICAgIGF1dG8qIGNlbGwgPSBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZUFub255bW91c1dp
dGhQYXJlbnRSZW5kZXJlcigqdGhpcykucmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIHBhcmVu
dC5hZGRDaGlsZChjZWxsLCBiZWZvcmVDaGlsZCk7Ci0gICAgICAgICAgICAgICAgY2VsbC0+YWRk
Q2hpbGQoY2hpbGQpOworICAgICAgICAgICAgICAgIGF1dG8gbmV3Q2VsbCA9IFJlbmRlclRhYmxl
Q2VsbDo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKCp0aGlzKTsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBjZWxsID0gKm5ld0NlbGw7CisgICAgICAgICAgICAgICAgcGFyZW50LmFk
ZENoaWxkKFdURk1vdmUobmV3Q2VsbCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgICAgICBj
ZWxsLmFkZENoaWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgYXV0byogY2VsbCA9IFJlbmRlclRhYmxl
Q2VsbDo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKCp0aGlzKS5yZWxlYXNlKCk7
Ci0gICAgICAgIGFkZENoaWxkKGNlbGwsIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgY2VsbC0+YWRk
Q2hpbGQoY2hpbGQpOworICAgICAgICBhdXRvIG5ld0NlbGwgPSBSZW5kZXJUYWJsZUNlbGw6OmNy
ZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcyk7CisgICAgICAgIGF1dG8mIGNl
bGwgPSAqbmV3Q2VsbDsKKyAgICAgICAgYWRkQ2hpbGQoV1RGTW92ZShuZXdDZWxsKSwgYmVmb3Jl
Q2hpbGQpOworICAgICAgICBjZWxsLmFkZENoaWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0gCiAKQEAgLTE2MCw3ICsxNjIsNyBAQCB2b2lkIFJlbmRlclRhYmxlUm93
OjphZGRDaGlsZChSZW5kZXJPYmplCiAgICAgICAgIHNlY3Rpb24tPmFkZENlbGwoJmNlbGwsIHRo
aXMpOwogCiAgICAgQVNTRVJUKCFiZWZvcmVDaGlsZCB8fCBpczxSZW5kZXJUYWJsZUNlbGw+KCpi
ZWZvcmVDaGlsZCkpOwotICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoJmNlbGwsIGJlZm9yZUNoaWxk
KTsKKyAgICBSZW5kZXJCb3g6OmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7
CiAKICAgICBpZiAoYmVmb3JlQ2hpbGQgfHwgbmV4dFJvdygpKQogICAgICAgICBzZWN0aW9uKCkt
PnNldE5lZWRzQ2VsbFJlY2FsYygpOwpAQCAtMjcwLDE0ICsyNzIsMTQgQEAgdm9pZCBSZW5kZXJU
YWJsZVJvdzo6aW1hZ2VDaGFuZ2VkKFdyYXBwZQogICAgIHJlcGFpbnQoKTsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclRhYmxlUm93PiBSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlVGFibGVSb3dX
aXRoU3R5bGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitS
ZW5kZXJQdHI8UmVuZGVyVGFibGVSb3c+IFJlbmRlclRhYmxlUm93OjpjcmVhdGVUYWJsZVJvd1dp
dGhTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsK
LSAgICBhdXRvIHJvdyA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyVGFibGVSb3c+KGRvY3VtZW50
LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgVEFC
TEVfUk9XKSk7CisgICAgYXV0byByb3cgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUYWJsZVJvdz4o
ZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0
eWxlLCBUQUJMRV9ST1cpKTsKICAgICByb3ctPmluaXRpYWxpemVTdHlsZSgpOwogICAgIHJldHVy
biByb3c7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZVJvdz4gUmVuZGVyVGFibGVS
b3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVNl
Y3Rpb24mIHBhcmVudCkKK1JlbmRlclB0cjxSZW5kZXJUYWJsZVJvdz4gUmVuZGVyVGFibGVSb3c6
OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVNlY3Rp
b24mIHBhcmVudCkKIHsKICAgICByZXR1cm4gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZVRhYmxlUm93
V2l0aFN0eWxlKHBhcmVudC5kb2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaAkocmV2aXNpb24gMjIyNjA3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDggKzQ2LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBwYWludE91dGxpbmVG
b3JSb3dJZk5lZWRlZChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZVJvdz4gY3JlYXRlQW5vbnltb3VzV2l0aFBh
cmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiYpOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJl
bmRlckJveCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyVGFi
bGVSb3c+IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJs
ZVNlY3Rpb24mKTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hX
aXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZv
aWQgc2V0Um93SW5kZXgodW5zaWduZWQpOwogICAgIGJvb2wgcm93SW5kZXhXYXNTZXQoKSBjb25z
dCB7IHJldHVybiBtX3Jvd0luZGV4ICE9IHVuc2V0Um93SW5kZXg7IH0KQEAgLTU4LDE0ICs1OCwx
NCBAQCBwdWJsaWM6CiAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckFkam9pbmluZ1N0YXJ0
Q2VsbChjb25zdCBSZW5kZXJUYWJsZUNlbGwmKSBjb25zdDsKICAgICBjb25zdCBCb3JkZXJWYWx1
ZSYgYm9yZGVyQWRqb2luaW5nRW5kQ2VsbChjb25zdCBSZW5kZXJUYWJsZUNlbGwmKSBjb25zdDsK
IAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlk
ZTsKIAogICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pIG92ZXJyaWRl
OwogCiAgICAgdm9pZCBkZXN0cm95QW5kQ29sbGFwc2VBbm9ueW1vdXNTaWJsaW5nUm93cygpOwog
CiBwcml2YXRlOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVSb3c+IGNy
ZWF0ZVRhYmxlUm93V2l0aFN0eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAg
ICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclRhYmxlUm93PiBjcmVhdGVUYWJsZVJvd1dpdGhTdHls
ZShEb2N1bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CiAKICAgICBjb25zdCBjaGFyKiByZW5k
ZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKGlzQW5vbnltb3VzKCkgfHwgaXNQc2V1
ZG9FbGVtZW50KCkpID8gIlJlbmRlclRhYmxlUm93IChhbm9ueW1vdXMpIiA6ICJSZW5kZXJUYWJs
ZVJvdyI7IH0KIApAQCAtMTUwLDcgKzE1MCw3IEBAIGlubGluZSBSZW5kZXJUYWJsZVJvdyogUmVu
ZGVyVGFibGVTZWN0aW8KICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KFJlbmRl
ckJveDo6bGFzdENoaWxkKCkpOwogfQogCi1pbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJv
eD4gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0
IFJlbmRlckJveCYgcmVuZGVyZXIpIGNvbnN0CitpbmxpbmUgUmVuZGVyUHRyPFJlbmRlckJveD4g
UmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJl
bmRlckJveCYgcmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlUm93Ojpj
cmVhdGVUYWJsZVJvd1dpdGhTdHlsZShyZW5kZXJlci5kb2N1bWVudCgpLCByZW5kZXJlci5zdHls
ZSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJs
ZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDcgKzExOCw3
IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjp3aWxsQmVSZW1vdmVkRnIKICAgICBzZXROZWVk
c0NlbGxSZWNhbGMoKTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJl
bmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgaWYgKCFpczxSZW5kZXJUYWJsZVJvdz4o
KmNoaWxkKSkgewogICAgICAgICBSZW5kZXJPYmplY3QqIGxhc3QgPSBiZWZvcmVDaGlsZDsKQEAg
LTEyOCwxNCArMTI4LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5k
ZXIKICAgICAgICAgICAgIFJlbmRlclRhYmxlUm93JiByb3cgPSBkb3duY2FzdDxSZW5kZXJUYWJs
ZVJvdz4oKmxhc3QpOwogICAgICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09ICZyb3cpCiAgICAg
ICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSByb3cuZmlyc3RDZWxsKCk7Ci0gICAgICAgICAgICBy
b3cuYWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIHJvdy5hZGRDaGls
ZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgaWYgKGJlZm9yZUNoaWxkICYmICFiZWZvcmVDaGlsZC0+aXNBbm9u
eW1vdXMoKSAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcykgewogICAgICAgICAgICAg
UmVuZGVyT2JqZWN0KiByb3cgPSBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAg
ICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVSb3c+KHJvdykgJiYgcm93LT5pc0Fub255bW91cygp
KSB7Ci0gICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCpyb3cpLmFkZENo
aWxkKGNoaWxkKTsKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKnJv
dykuYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTQ2LDEzICsxNDYsMTQgQEAgdm9pZCBSZW5kZXJU
YWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlcgogICAgICAgICB3aGlsZSAobGFzdEJveCAmJiBs
YXN0Qm94LT5wYXJlbnQoKS0+aXNBbm9ueW1vdXMoKSAmJiAhaXM8UmVuZGVyVGFibGVSb3c+KCps
YXN0Qm94KSkKICAgICAgICAgICAgIGxhc3RCb3ggPSBsYXN0Qm94LT5wYXJlbnQoKTsKICAgICAg
ICAgaWYgKGxhc3RCb3ggJiYgbGFzdEJveC0+aXNBbm9ueW1vdXMoKSAmJiAhbGFzdEJveC0+aXNC
ZWZvcmVPckFmdGVyQ29udGVudCgpKSB7Ci0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJUYWJs
ZVJvdz4oKmxhc3RCb3gpLmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAg
ICBkb3duY2FzdDxSZW5kZXJUYWJsZVJvdz4oKmxhc3RCb3gpLmFkZENoaWxkKFdURk1vdmUoY2hp
bGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvKiByb3cgPSBSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVu
dFJlbmRlcmVyKCp0aGlzKS5yZWxlYXNlKCk7Ci0gICAgICAgIGFkZENoaWxkKHJvdywgYmVmb3Jl
Q2hpbGQpOwotICAgICAgICByb3ctPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgYXV0byBuZXdS
b3cgPSBSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKCp0
aGlzKTsKKyAgICAgICAgYXV0byYgcm93ID0gKm5ld1JvdzsKKyAgICAgICAgYWRkQ2hpbGQoV1RG
TW92ZShuZXdSb3cpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJvdy5hZGRDaGlsZChXVEZNb3Zl
KGNoaWxkKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE3Niw3ICsxNzcsNyBAQCB2
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgICAgIGJlZm9yZUNo
aWxkID0gc3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKGJlZm9yZUNoaWxkKTsKIAogICAg
IEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgaXM8UmVuZGVyVGFibGVSb3c+KCpiZWZvcmVDaGlsZCkp
OwotICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBSZW5k
ZXJCb3g6OmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiB9CiAKIHZvaWQg
UmVuZGVyVGFibGVTZWN0aW9uOjplbnN1cmVSb3dzKHVuc2lnbmVkIG51bVJvd3MpCkBAIC0xNTkw
LDE0ICsxNTkxLDE0IEBAIENvbGxhcHNlZEJvcmRlclZhbHVlIFJlbmRlclRhYmxlU2VjdGlvbjoK
ICAgICByZXR1cm4gaXQtPnZhbHVlOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVT
ZWN0aW9uPiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHlsZShE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK1JlbmRlclB0cjxS
ZW5kZXJUYWJsZVNlY3Rpb24+IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlVGFibGVTZWN0aW9u
V2l0aFN0eWxlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQog
ewotICAgIGF1dG8gc2VjdGlvbiA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyVGFibGVTZWN0aW9u
Pihkb2N1bWVudCwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXko
c3R5bGUsIFRBQkxFX1JPV19HUk9VUCkpOworICAgIGF1dG8gc2VjdGlvbiA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlclRhYmxlU2VjdGlvbj4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9u
eW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBUQUJMRV9ST1dfR1JPVVApKTsKICAgICBzZWN0
aW9uLT5pbml0aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gc2VjdGlvbjsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclRhYmxlU2VjdGlvbj4gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVB
bm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGUmIHBhcmVudCkKK1Jl
bmRlclB0cjxSZW5kZXJUYWJsZVNlY3Rpb24+IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlQW5v
bnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlclRhYmxlJiBwYXJlbnQpCiB7CiAg
ICAgcmV0dXJuIFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlVGFibGVTZWN0aW9uV2l0aFN0eWxl
KHBhcmVudC5kb2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShyZXZpc2lvbiAyMjI2MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIFJlbmRlclRhYmxlUm93KiBm
aXJzdFJvdygpIGNvbnN0OwogICAgIFJlbmRlclRhYmxlUm93KiBsYXN0Um93KCkgY29uc3Q7CiAK
LSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVm
b3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7
CiAKICAgICBzdGQ6Om9wdGlvbmFsPGludD4gZmlyc3RMaW5lQmFzZWxpbmUoKSBjb25zdCBvdmVy
cmlkZTsKIApAQCAtMTQyLDggKzE0Miw4IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogV2UgbWF5
IHdhbnQgdG8gaW50cm9kdWNlIGEgc3RydWN0dXJlIGhvbGRpbmcgdGhlIGluLWZsdXggbGF5b3V0
IGluZm9ybWF0aW9uLgogICAgIExheW91dFVuaXQgZGlzdHJpYnV0ZUV4dHJhTG9naWNhbEhlaWdo
dFRvUm93cyhMYXlvdXRVbml0IGV4dHJhTG9naWNhbEhlaWdodCk7CiAKLSAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclRhYmxlU2VjdGlvbj4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVu
dFJlbmRlcmVyKGNvbnN0IFJlbmRlclRhYmxlJik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
ckJveD4gY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94Jikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJUYWJsZVNlY3Rpb24+
IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZSYpOwor
ICAgIFJlbmRlclB0cjxSZW5kZXJCb3g+IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFz
KGNvbnN0IFJlbmRlckJveCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIAogICAgIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKSBvdmVycmlkZTsKIApAQCAtMTUxLDcgKzE1
MSw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlU2VjdGlvbj4gY3JlYXRlVGFibGVT
ZWN0aW9uV2l0aFN0eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICBzdGF0
aWMgUmVuZGVyUHRyPFJlbmRlclRhYmxlU2VjdGlvbj4gY3JlYXRlVGFibGVTZWN0aW9uV2l0aFN0
eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKIAogICAgIGVudW0gU2hvdWxkSW5j
bHVkZUFsbEludGVyc2VjdGluZ0NlbGxzIHsKICAgICAgICAgSW5jbHVkZUFsbEludGVyc2VjdGlu
Z0NlbGxzLApAQCAtMzM0LDcgKzMzNCw3IEBAIGlubGluZSBDZWxsU3BhbiBSZW5kZXJUYWJsZVNl
Y3Rpb246OmZ1bGwKICAgICByZXR1cm4gQ2VsbFNwYW4oMCwgbV9ncmlkLnNpemUoKSk7CiB9CiAK
LWlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBSZW5kZXJUYWJsZVNlY3Rpb246OmNy
ZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIp
IGNvbnN0CitpbmxpbmUgUmVuZGVyUHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGVTZWN0aW9uOjpj
cmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVy
KSBjb25zdAogewogICAgIHJldHVybiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZVRhYmxlU2Vj
dGlvbldpdGhTdHlsZShyZW5kZXJlci5kb2N1bWVudCgpLCByZW5kZXJlci5zdHlsZSgpKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2Vk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTEZlbmNlZC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTMsMTUgKzkzLDE1IEBAIFJlbmRlclB0cjxSZW5kZXJNYXRoTUxGZW5jZWRPcGVyYXRvcj4gUmUK
IAogdm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6Om1ha2VGZW5jZXMoKQogewotICAgIFJlbmRlclB0
cjxSZW5kZXJNYXRoTUxGZW5jZWRPcGVyYXRvcj4gb3BlbkZlbmNlID0gY3JlYXRlTWF0aE1MT3Bl
cmF0b3IobV9vcGVuLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlByZWZpeCwgTWF0aE1MT3Bl
cmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSk7Ci0gICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChv
cGVuRmVuY2UubGVha1B0cigpLCBmaXJzdENoaWxkKCkpOworICAgIGF1dG8gb3BlbkZlbmNlID0g
Y3JlYXRlTWF0aE1MT3BlcmF0b3IobV9vcGVuLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlBy
ZWZpeCwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSk7CisgICAgUmVuZGVyTWF0aE1M
Um93OjphZGRDaGlsZChXVEZNb3ZlKG9wZW5GZW5jZSksIGZpcnN0Q2hpbGQoKSk7CiAKLSAgICBS
ZW5kZXJQdHI8UmVuZGVyTWF0aE1MRmVuY2VkT3BlcmF0b3I+IGNsb3NlRmVuY2UgPSBjcmVhdGVN
YXRoTUxPcGVyYXRvcihtX2Nsb3NlLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlBvc3RmaXgs
IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmVuY2UpOworICAgIGF1dG8gY2xvc2VGZW5jZSA9
IGNyZWF0ZU1hdGhNTE9wZXJhdG9yKG1fY2xvc2UsIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6
UG9zdGZpeCwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSk7CiAgICAgbV9jbG9zZUZl
bmNlUmVuZGVyZXIgPSBjbG9zZUZlbmNlLmdldCgpOwotICAgIFJlbmRlck1hdGhNTFJvdzo6YWRk
Q2hpbGQoY2xvc2VGZW5jZS5sZWFrUHRyKCkpOworICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hp
bGQoV1RGTW92ZShjbG9zZUZlbmNlKSk7CiB9CiAKLXZvaWQgUmVuZGVyTWF0aE1MRmVuY2VkOjph
ZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQor
dm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIC8vIG1ha2UgdGhlIGZl
bmNlcyBpZiB0aGUgcmVuZGVyIG9iamVjdCBpcyBlbXB0eQogICAgIGlmICghZmlyc3RDaGlsZCgp
KQpAQCAtMTM5LDE0ICsxMzksMTQgQEAgdm9pZCBSZW5kZXJNYXRoTUxGZW5jZWQ6OmFkZENoaWxk
KFJlbmRlcgogCiAgICAgaWYgKGJlZm9yZUNoaWxkKSB7CiAgICAgICAgIC8vIEFkZGluZyB8eHwg
YmVmb3JlIGFuIGV4aXN0aW5nIHx5fCBlLmcuIGluIGVsZW1lbnQgKHkpIC0gZmlyc3QgaW5zZXJ0
IG91ciBuZXcgY2hpbGQgfHh8LCB0aGVuIGl0cyBzZXBhcmF0b3IsIHRvIGdldCAoeCwgeSkuCi0g
ICAgICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAg
ICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hp
bGQpOwogICAgICAgICBpZiAoc2VwYXJhdG9yUmVuZGVyZXIpCi0gICAgICAgICAgICBSZW5kZXJN
YXRoTUxSb3c6OmFkZENoaWxkKHNlcGFyYXRvclJlbmRlcmVyLmxlYWtQdHIoKSwgYmVmb3JlQ2hp
bGQpOworICAgICAgICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChXVEZNb3ZlKHNlcGFy
YXRvclJlbmRlcmVyKSwgYmVmb3JlQ2hpbGQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEFk
ZGluZyB8eXwgYXQgdGhlIGVuZCBvZiBhbiBleGlzdGluZyBlbGVtZW50IGUuZy4gKHgpIC0gaW5z
ZXJ0IHRoZSBzZXBhcmF0b3IgZmlyc3QgYmVmb3JlIHRoZSBjbG9zaW5nIGZlbmNlLCB0aGVuIHx5
fCwgdG8gZ2V0ICh4LCB5KS4KICAgICAgICAgaWYgKHNlcGFyYXRvclJlbmRlcmVyKQotICAgICAg
ICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChzZXBhcmF0b3JSZW5kZXJlci5sZWFrUHRy
KCksIG1fY2xvc2VGZW5jZVJlbmRlcmVyKTsKLSAgICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRD
aGlsZChjaGlsZCwgbV9jbG9zZUZlbmNlUmVuZGVyZXIpOworICAgICAgICAgICAgUmVuZGVyTWF0
aE1MUm93OjphZGRDaGlsZChXVEZNb3ZlKHNlcGFyYXRvclJlbmRlcmVyKSwgbV9jbG9zZUZlbmNl
UmVuZGVyZXIpOworICAgICAgICBSZW5kZXJNYXRoTUxSb3c6OmFkZENoaWxkKFdURk1vdmUoY2hp
bGQpLCBtX2Nsb3NlRmVuY2VSZW5kZXJlcik7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmgJKHJl
dmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVy
TWF0aE1MRmVuY2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTWF0aE1MRmVuY2VkKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiUmVuZGVyTWF0aE1MRmVuY2VkIjsgfQotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkgZmluYWw7CisgICAgdm9p
ZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCkgZmluYWw7CiAgICAgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpIGZpbmFsOwog
CiAgICAgUmVuZGVyUHRyPFJlbmRlck1hdGhNTEZlbmNlZE9wZXJhdG9yPiBjcmVhdGVNYXRoTUxP
cGVyYXRvcihjb25zdCBTdHJpbmcmIG9wZXJhdG9yU3RyaW5nLCBNYXRoTUxPcGVyYXRvckRpY3Rp
b25hcnk6OkZvcm0sIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmxhZyk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3Bw
CShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDE2ICs4OCwxNyBAQCB2b2lk
IFJlbmRlclNWR0NvbnRhaW5lcjo6bGF5b3V0KCkKICAgICBjbGVhck5lZWRzTGF5b3V0KCk7CiB9
CiAKLXZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmFk
ZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQogewotICAgIFJlbmRlclNWR01vZGVsT2JqZWN0OjphZGRDaGlsZChjaGlsZCwg
YmVmb3JlQ2hpbGQpOwotICAgIFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRXYXNBZGRlZFRvVHJl
ZSgqY2hpbGQpOworICAgIGF1dG8mIGNoaWxkID0gKm5ld0NoaWxkOworICAgIFJlbmRlclNWR01v
ZGVsT2JqZWN0OjphZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOworICAg
IFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRXYXNBZGRlZFRvVHJlZShjaGlsZCk7CiB9CiAKLXZv
aWQgUmVuZGVyU1ZHQ29udGFpbmVyOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQor
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyU1ZHQ29udGFpbmVyOjp0YWtlQ2hpbGQoUmVu
ZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2lsbEJl
UmVtb3ZlZEZyb21UcmVlKGNoaWxkKTsKLSAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6cmVtb3Zl
Q2hpbGQoY2hpbGQpOworICAgIHJldHVybiBSZW5kZXJTVkdNb2RlbE9iamVjdDo6dGFrZUNoaWxk
KGNoaWxkKTsKIH0KIAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0NvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDggKzQ3LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsK
IAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCA9IDApIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0
JikgZmluYWw7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIGZpbmFsOworICAgIFJlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBmaW5hbDsKICAgICB2b2lkIGFk
ZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBh
ZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBwYWludENvbnRh
aW5lciA9IDApIGZpbmFsOwogCiAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAkocmV2aXNpb24g
MjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMjkgKzEyMCwyOSBAQCB2b2lkIFJlbmRlclNWR0lu
bGluZTo6dXBkYXRlRnJvbVN0eWxlKCkKICAgICBzZXRJbmxpbmUodHJ1ZSk7CiB9CiAKLXZvaWQg
UmVuZGVyU1ZHSW5saW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJTVkdJbmxpbmU6OmFkZENoaWxkKFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewot
ICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKLSAgICBTVkdS
ZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoKmNoaWxkKTsKKyAgICBhdXRvJiBj
aGlsZCA9ICpuZXdDaGlsZDsKKyAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKFdURk1vdmUobmV3
Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0Fk
ZGVkVG9UcmVlKGNoaWxkKTsKIAogICAgIGlmIChhdXRvKiB0ZXh0QW5jZXN0b3IgPSBSZW5kZXJT
VkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoKnRoaXMpKQotICAgICAgICB0ZXh0
QW5jZXN0b3ItPnN1YnRyZWVDaGlsZFdhc0FkZGVkKGNoaWxkKTsKKyAgICAgICAgdGV4dEFuY2Vz
dG9yLT5zdWJ0cmVlQ2hpbGRXYXNBZGRlZCgmY2hpbGQpOwogfQogCi12b2lkIFJlbmRlclNWR0lu
bGluZTo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJP
YmplY3Q+IFJlbmRlclNWR0lubGluZTo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCiB7
CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJlZShjaGls
ZCk7CiAKICAgICBhdXRvKiB0ZXh0QW5jZXN0b3IgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5k
ZXJTVkdUZXh0QW5jZXN0b3IoKnRoaXMpOwotICAgIGlmICghdGV4dEFuY2VzdG9yKSB7Ci0gICAg
ICAgIFJlbmRlcklubGluZTo6cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmICghdGV4dEFuY2VzdG9yKQorICAgICAgICByZXR1cm4gUmVuZGVySW5saW5l
Ojp0YWtlQ2hpbGQoY2hpbGQpOwogCiAgICAgVmVjdG9yPFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVz
KiwgMj4gYWZmZWN0ZWRBdHRyaWJ1dGVzOwogICAgIHRleHRBbmNlc3Rvci0+c3VidHJlZUNoaWxk
V2lsbEJlUmVtb3ZlZCgmY2hpbGQsIGFmZmVjdGVkQXR0cmlidXRlcyk7Ci0gICAgUmVuZGVySW5s
aW5lOjpyZW1vdmVDaGlsZChjaGlsZCk7CisgICAgYXV0byB0YWtlbkNoaWxkID0gUmVuZGVySW5s
aW5lOjp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIHRleHRBbmNlc3Rvci0+c3VidHJlZUNoaWxkV2Fz
UmVtb3ZlZChhZmZlY3RlZEF0dHJpYnV0ZXMpOworICAgIHJldHVybiB0YWtlbkNoaWxkOwogfQog
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5s
aW5lLmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDggQEAgcHJpdmF0
ZToKICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIGZpbmFsOwogICAgIHZvaWQgc3R5bGVEaWRD
aGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIGZpbmFs
OwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5k
ZXJPYmplY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7Cisg
ICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIGZpbmFs
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDAsMTYgKzMwMCwxNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnN0eWxlRGlkQ2hh
bmdlKFN0eWxlCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgqdGhp
cywgZGlmZiwgc3R5bGUoKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUm9vdDo6YWRkQ2hpbGQoUmVu
ZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVy
U1ZHUm9vdDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6OmFkZENoaWxkKGNo
aWxkLCBiZWZvcmVDaGlsZCk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVk
VG9UcmVlKCpjaGlsZCk7CisgICAgYXV0byYgY2hpbGQgPSAqbmV3Q2hpbGQ7CisgICAgUmVuZGVy
UmVwbGFjZWQ6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAg
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsKIH0KIAotdm9p
ZCBSZW5kZXJTVkdSb290OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQorUmVuZGVy
UHRyPFJlbmRlck9iamVjdD4gUmVuZGVyU1ZHUm9vdDo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYg
Y2hpbGQpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9t
VHJlZShjaGlsZCk7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6OnJlbW92ZUNoaWxkKGNoaWxkKTsKKyAg
ICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OnRha2VDaGlsZChjaGlsZCk7CiB9CiAKIC8vIFJlbmRl
ckJveCBtZXRob2RzIHdpbGwgZXhwZWN0IGNvb3JkaW5hdGVzIHcvbyBhbnkgdHJhbnNmb3JtcyBp
biBjb29yZGluYXRlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw4IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKSBvdmVycmlkZTsKIAogICAg
IHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotICAgIHZvaWQgcmVt
b3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5k
ZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDAp
IG92ZXJyaWRlOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJP
YmplY3QmKSBvdmVycmlkZTsKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1Bh
cmVudFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxNywyMiArNTE3LDI0IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZXBh
aW50UmVjdEluTG8KICAgICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVyU1ZH
VGV4dDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCkKK3ZvaWQgUmVuZGVyU1ZHVGV4dDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVuZGVyU1ZH
QmxvY2s6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgYXV0byYgY2hpbGQgPSAq
bmV3Q2hpbGQ7CisgICAgUmVuZGVyU1ZHQmxvY2s6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQp
LCBiZWZvcmVDaGlsZCk7CiAKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRU
b1RyZWUoKmNoaWxkKTsKLSAgICBzdWJ0cmVlQ2hpbGRXYXNBZGRlZChjaGlsZCk7CisgICAgU1ZH
UmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsKKyAgICBzdWJ0cmVl
Q2hpbGRXYXNBZGRlZCgmY2hpbGQpOwogfQogCi12b2lkIFJlbmRlclNWR1RleHQ6OnJlbW92ZUNo
aWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJT
VkdUZXh0Ojp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAgICBTVkdSZXNvdXJj
ZXNDYWNoZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKGNoaWxkKTsKIAogICAgIFZlY3Rv
cjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyosIDI+IGFmZmVjdGVkQXR0cmlidXRlczsKICAgICBz
dWJ0cmVlQ2hpbGRXaWxsQmVSZW1vdmVkKCZjaGlsZCwgYWZmZWN0ZWRBdHRyaWJ1dGVzKTsKLSAg
ICBSZW5kZXJTVkdCbG9jazo6cmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIGF1dG8gdGFrZW5DaGls
ZCA9IFJlbmRlclNWR0Jsb2NrOjp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIHN1YnRyZWVDaGlsZFdh
c1JlbW92ZWQoYWZmZWN0ZWRBdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gdGFrZW5DaGlsZDsKIH0K
IAogLy8gRml4IGZvciA8cmRhcjovL3Byb2JsZW0vODA0ODg3NT4uIFdlIHNob3VsZCBub3QgcmVu
ZGVyIDpmaXJzdC1saW5lIENTUyBTdHlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4
ICs4Miw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUm
LCBNYXBDb29yZGluYXRlc0ZsYWdzLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBy
ZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0g
bnVsbHB0cikgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxk
KFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3Zl
cnJpZGU7CiAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zv
cm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaAkocmV2aXNpb24gMjIyNjA3
KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVBvc2l0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlbmRlckVsZW1l
bnQmIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9Ci0gICAgdm9pZCBpbnNlcnQo
UmVuZGVyT2JqZWN0Jik7CisgICAgdm9pZCBpbnNlcnQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4p
OwogICAgIGJvb2wgY2FuSW5zZXJ0KFJlbmRlckVsZW1lbnQmKSBjb25zdDsKICAgICBib29sIGNh
bkluc2VydChSZW5kZXJUZXh0JikgY29uc3Q7CiAKQEAgLTc4LDEwICs3OCwxMCBAQCBpbmxpbmUg
Ym9vbCBSZW5kZXJUcmVlUG9zaXRpb246OmNhbkluc2VyCiAgICAgcmV0dXJuIG1fcGFyZW50Lmlz
Q2hpbGRBbGxvd2VkKHJlbmRlcmVyLCBtX3BhcmVudC5zdHlsZSgpKTsKIH0KIAotaW5saW5lIHZv
aWQgUmVuZGVyVHJlZVBvc2l0aW9uOjppbnNlcnQoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKK2lu
bGluZSB2b2lkIFJlbmRlclRyZWVQb3NpdGlvbjo6aW5zZXJ0KFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IHJlbmRlcmVyKQogewogICAgIEFTU0VSVChtX2hhc1ZhbGlkTmV4dFNpYmxpbmcpOwotICAg
IG1fcGFyZW50LmFkZENoaWxkKCZyZW5kZXJlciwgbV9uZXh0U2libGluZyk7CisgICAgbV9wYXJl
bnQuYWRkQ2hpbGQoV1RGTW92ZShyZW5kZXJlciksIG1fbmV4dFNpYmxpbmcpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVl
VXBkYXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJl
ZVVwZGF0ZXIuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9S
ZW5kZXJUcmVlVXBkYXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OSwyNyArMzU5LDI1IEBA
IHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OmNyZWF0ZVJlbmRlcmVyKEUKICAgICAgICAgcmV0dXJu
OwogCiAgICAgUmVuZGVyVHJlZVBvc2l0aW9uIGluc2VydGlvblBvc2l0aW9uID0gY29tcHV0ZUlu
c2VydGlvblBvc2l0aW9uKCk7Ci0gICAgUmVuZGVyRWxlbWVudCogbmV3UmVuZGVyZXIgPSBlbGVt
ZW50LmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihXVEZNb3ZlKHN0eWxlKSwgaW5zZXJ0aW9uUG9zaXRp
b24pLmxlYWtQdHIoKTsKKyAgICBhdXRvIG5ld1JlbmRlcmVyID0gZWxlbWVudC5jcmVhdGVFbGVt
ZW50UmVuZGVyZXIoV1RGTW92ZShzdHlsZSksIGluc2VydGlvblBvc2l0aW9uKTsKICAgICBpZiAo
IW5ld1JlbmRlcmVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpbnNlcnRpb25Qb3NpdGlv
bi5jYW5JbnNlcnQoKm5ld1JlbmRlcmVyKSkgewotICAgICAgICBuZXdSZW5kZXJlci0+ZGVzdHJv
eSgpOworICAgIGlmICghaW5zZXJ0aW9uUG9zaXRpb24uY2FuSW5zZXJ0KCpuZXdSZW5kZXJlcikp
CiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBlbGVtZW50LnNldFJlbmRlcmVyKG5ld1Jl
bmRlcmVyKTsKKyAgICBlbGVtZW50LnNldFJlbmRlcmVyKG5ld1JlbmRlcmVyLmdldCgpKTsKIAog
ICAgIG5ld1JlbmRlcmVyLT5pbml0aWFsaXplU3R5bGUoKTsKIAogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKICAgICBpZiAobV9kb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4oKSAmJiBtX2Rv
Y3VtZW50LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpID09ICZlbGVtZW50KSB7Ci0g
ICAgICAgIG5ld1JlbmRlcmVyID0gUmVuZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmRlcmVyKG5ld1Jl
bmRlcmVyLCAmaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1fZG9jdW1lbnQpOworICAgICAg
ICBuZXdSZW5kZXJlciA9IFJlbmRlckZ1bGxTY3JlZW46OndyYXBOZXdSZW5kZXJlcihXVEZNb3Zl
KG5ld1JlbmRlcmVyKSwgaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1fZG9jdW1lbnQpOwog
ICAgICAgICBpZiAoIW5ld1JlbmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZgotICAgIC8vIE5vdGU6IEFkZGluZyBuZXdSZW5kZXJlciBpbnN0ZWFkIG9mIHJlbmRlcmVy
KCkuIHJlbmRlcmVyKCkgbWF5IGJlIGEgY2hpbGQgb2YgbmV3UmVuZGVyZXIuCi0gICAgaW5zZXJ0
aW9uUG9zaXRpb24uaW5zZXJ0KCpuZXdSZW5kZXJlcik7CisKKyAgICBpbnNlcnRpb25Qb3NpdGlv
bi5pbnNlcnQoV1RGTW92ZShuZXdSZW5kZXJlcikpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUq
IGNhY2hlID0gbV9kb2N1bWVudC5heE9iamVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT51cGRh
dGVDYWNoZUFmdGVyTm9kZUlzQXR0YWNoZWQoJmVsZW1lbnQpOwpAQCAtNDQxLDcgKzQzOSw3IEBA
IHN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXgKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdGV4dE5vZGUuc2V0UmVuZGVyZXIobmV3UmVuZGVyZXIuZ2V0KCkpOwotICAgIHJl
bmRlclRyZWVQb3NpdGlvbi5pbnNlcnQoKm5ld1JlbmRlcmVyLmxlYWtQdHIoKSk7CisgICAgcmVu
ZGVyVHJlZVBvc2l0aW9uLmluc2VydChXVEZNb3ZlKG5ld1JlbmRlcmVyKSk7CiB9CiAKIHZvaWQg
UmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXh0LCBjb25zdCBT
dHlsZTo6VGV4dFVwZGF0ZSogdGV4dFVwZGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCShyZXZpc2lvbiAy
MjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgc3RhdGljIHZvaWQg
dXBkYXRlRmlyc3RMZXR0ZXJTdHlsZShSZW5kZQogCiAgICAgaWYgKFN0eWxlOjpkZXRlcm1pbmVD
aGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBzZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0YWNo
KSB7CiAgICAgICAgIC8vIFRoZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgbmVlZHMgdG8gYmUgcmVw
bGFjZWQuIENyZWF0ZSBhIG5ldyByZW5kZXJlciBvZiB0aGUgcmlnaHQgdHlwZS4KLSAgICAgICAg
UmVuZGVyQm94TW9kZWxPYmplY3QqIG5ld0ZpcnN0TGV0dGVyOworICAgICAgICBSZW5kZXJQdHI8
UmVuZGVyQm94TW9kZWxPYmplY3Q+IG5ld0ZpcnN0TGV0dGVyOwogICAgICAgICBpZiAocHNldWRv
U3R5bGUuZGlzcGxheSgpID09IElOTElORSkKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0g
bmV3IFJlbmRlcklubGluZShmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNl
dWRvU3R5bGUpKTsKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8
UmVuZGVySW5saW5lPihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRv
U3R5bGUpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBuZXcg
UmVuZGVyQmxvY2tGbG93KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1
ZG9TdHlsZSkpOworICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJCbG9ja0Zsb3c+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1
ZG9TdHlsZSkpOwogICAgICAgICBuZXdGaXJzdExldHRlci0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAK
ICAgICAgICAgLy8gTW92ZSB0aGUgZmlyc3QgbGV0dGVyIGludG8gdGhlIG5ldyByZW5kZXJlci4K
QEAgLTEyMCw4ICsxMjAsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVGaXJzdExldHRlclN0eWxlKFJl
bmRlCiAgICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RMZXR0ZXItPmZp
cnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpjaGlsZCkpCiAg
ICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKS5yZW1vdmVBbmREZXN0
cm95VGV4dEJveGVzKCk7Ci0gICAgICAgICAgICBmaXJzdExldHRlci0+cmVtb3ZlQ2hpbGQoKmNo
aWxkKTsKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChjaGlsZCwgbnVsbHB0
cik7CisgICAgICAgICAgICBhdXRvIHRvTW92ZSA9IGZpcnN0TGV0dGVyLT50YWtlQ2hpbGQoKmNo
aWxkKTsKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChXVEZNb3ZlKHRvTW92
ZSkpOwogICAgICAgICB9CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGZp
cnN0TGV0dGVyLT5uZXh0U2libGluZygpOwpAQCAtMTMxLDEyICsxMzEsOCBAQCBzdGF0aWMgdm9p
ZCB1cGRhdGVGaXJzdExldHRlclN0eWxlKFJlbmRlCiAgICAgICAgICAgICByZW1haW5pbmdUZXh0
LT5zZXRGaXJzdExldHRlcigqbmV3Rmlyc3RMZXR0ZXIpOwogICAgICAgICAgICAgbmV3Rmlyc3RM
ZXR0ZXItPnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsKICAgICAg
ICAgfQotICAgICAgICAvLyBUbyBwcmV2ZW50IHJlbW92YWwgb2Ygc2luZ2xlIGFub255bW91cyBi
bG9jayBpbiBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQgYW5kIGNhdXNpbmcKLSAgICAgICAgLy8g
fG5leHRTaWJsaW5nfCB0byBnbyBzdGFsZSwgd2UgcmVtb3ZlIHRoZSBvbGQgZmlyc3QgbGV0dGVy
IHVzaW5nIHJlbW92ZUNoaWxkTm9kZSBmaXJzdC4KLSAgICAgICAgZmlyc3RMZXR0ZXJDb250YWlu
ZXItPnJlbW92ZUNoaWxkSW50ZXJuYWwoKmZpcnN0TGV0dGVyLCBSZW5kZXJFbGVtZW50OjpOb3Rp
ZnlDaGlsZHJlbik7Ci0gICAgICAgIGZpcnN0TGV0dGVyLT5kZXN0cm95KCk7Ci0gICAgICAgIGZp
cnN0TGV0dGVyID0gbmV3Rmlyc3RMZXR0ZXI7Ci0gICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVy
LT5hZGRDaGlsZChmaXJzdExldHRlciwgbmV4dFNpYmxpbmcpOworICAgICAgICBmaXJzdExldHRl
ckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKCpmaXJzdExldHRlcik7CisgICAgICAg
IGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwg
bmV4dFNpYmxpbmcpOwogICAgIH0gZWxzZQogICAgICAgICBmaXJzdExldHRlci0+c2V0U3R5bGUo
V1RGTW92ZShwc2V1ZG9TdHlsZSkpOwogfQpAQCAtMTQ1LDEzICsxNDEsMTQgQEAgc3RhdGljIHZv
aWQgY3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihSZQogewogICAgIFJlbmRlckVsZW1lbnQqIGZp
cnN0TGV0dGVyQ29udGFpbmVyID0gY3VycmVudFRleHRDaGlsZC5wYXJlbnQoKTsKICAgICBhdXRv
IHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCAqZmly
c3RMZXR0ZXJDb250YWluZXIpOwotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmaXJzdExldHRl
ciA9IG51bGxwdHI7CisgICAgUmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBuZXdGaXJz
dExldHRlcjsKICAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKLSAgICAg
ICAgZmlyc3RMZXR0ZXIgPSBuZXcgUmVuZGVySW5saW5lKGZpcnN0TGV0dGVyQmxvY2suZG9jdW1l
bnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgICAgICBuZXdGaXJzdExldHRlciA9IGNy
ZWF0ZVJlbmRlcmVyPFJlbmRlcklubGluZT4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBX
VEZNb3ZlKHBzZXVkb1N0eWxlKSk7CiAgICAgZWxzZQotICAgICAgICBmaXJzdExldHRlciA9IG5l
dyBSZW5kZXJCbG9ja0Zsb3coZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBz
ZXVkb1N0eWxlKSk7Ci0gICAgZmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIGZp
cnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChmaXJzdExldHRlciwgJmN1cnJlbnRUZXh0Q2hp
bGQpOworICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2Nr
Rmxvdz4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7
CisgICAgbmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIGF1dG8mIGZpcnN0
TGV0dGVyID0gKm5ld0ZpcnN0TGV0dGVyOworICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRD
aGlsZChXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgJmN1cnJlbnRUZXh0Q2hpbGQpOwogCiAgICAg
Ly8gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyBnb2luZyB0byBiZSBlaXRoZXIgYSBnZW5lcmF0ZWQg
Y29udGVudCBzdHJpbmcgb3IgYSBET00gbm9kZSdzCiAgICAgLy8gc3RyaW5nLiBXZSB3YW50IHRo
ZSBvcmlnaW5hbCBzdHJpbmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1lZCBpbiBjYXNlIGZpcnN0
LWxldHRlciBoYXMKQEAgLTE4MywzMCArMTgwLDI5IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUZpcnN0
TGV0dGVyUmVuZGVyZXIoUmUKIAogICAgICAgICAvLyBDb25zdHJ1Y3QgYSB0ZXh0IGZyYWdtZW50
IGZvciB0aGUgdGV4dCBhZnRlciB0aGUgZmlyc3QgbGV0dGVyLgogICAgICAgICAvLyBUaGlzIHRl
eHQgZnJhZ21lbnQgbWlnaHQgYmUgZW1wdHkuCi0gICAgICAgIFJlbmRlclRleHRGcmFnbWVudCog
cmVtYWluaW5nVGV4dDsKKyAgICAgICAgUmVuZGVyUHRyPFJlbmRlclRleHRGcmFnbWVudD4gbmV3
UmVtYWluaW5nVGV4dDsKICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Q2hpbGQudGV4dE5vZGUoKSkK
LSAgICAgICAgICAgIHJlbWFpbmluZ1RleHQgPSBuZXcgUmVuZGVyVGV4dEZyYWdtZW50KCpjdXJy
ZW50VGV4dENoaWxkLnRleHROb2RlKCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgo
KSAtIGxlbmd0aCk7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyVGV4dEZyYWdtZW50PigqY3VycmVudFRleHRDaGlsZC50ZXh0Tm9kZSgpLCBvbGRU
ZXh0LCBsZW5ndGgsIG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gbmV3IFJlbmRlclRleHRGcmFnbWVudChmaXJzdExl
dHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAt
IGxlbmd0aCk7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVyZXI8
UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRleHQs
IGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7CiAKLSAgICAgICAgaWYgKHJlbWFp
bmluZ1RleHQtPnRleHROb2RlKCkpCi0gICAgICAgICAgICByZW1haW5pbmdUZXh0LT50ZXh0Tm9k
ZSgpLT5zZXRSZW5kZXJlcihyZW1haW5pbmdUZXh0KTsKKyAgICAgICAgaWYgKG5ld1JlbWFpbmlu
Z1RleHQtPnRleHROb2RlKCkpCisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0LT50ZXh0Tm9k
ZSgpLT5zZXRSZW5kZXJlcihuZXdSZW1haW5pbmdUZXh0LmdldCgpKTsKIAotICAgICAgICBmaXJz
dExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQocmVtYWluaW5nVGV4dCwgJmN1cnJlbnRUZXh0Q2hp
bGQpOwotICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQ2hpbGQoY3VycmVudFRl
eHRDaGlsZCk7Ci0gICAgICAgIHJlbWFpbmluZ1RleHQtPnNldEZpcnN0TGV0dGVyKCpmaXJzdExl
dHRlcik7Ci0gICAgICAgIGZpcnN0TGV0dGVyLT5zZXRGaXJzdExldHRlclJlbWFpbmluZ1RleHQo
cmVtYWluaW5nVGV4dCk7CisgICAgICAgIFJlbmRlclRleHRGcmFnbWVudCYgcmVtYWluaW5nVGV4
dCA9ICpuZXdSZW1haW5pbmdUZXh0OworICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+YWRk
Q2hpbGQoV1RGTW92ZShuZXdSZW1haW5pbmdUZXh0KSwgJmN1cnJlbnRUZXh0Q2hpbGQpOworICAg
ICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKGN1cnJlbnRU
ZXh0Q2hpbGQpOworICAgICAgICByZW1haW5pbmdUZXh0LnNldEZpcnN0TGV0dGVyKGZpcnN0TGV0
dGVyKTsKKyAgICAgICAgZmlyc3RMZXR0ZXIuc2V0Rmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KCZy
ZW1haW5pbmdUZXh0KTsKIAogICAgICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3Ig
dGhlIGZpcnN0IGxldHRlcgotICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQqIGxldHRlcjsKLSAg
ICAgICAgaWYgKHJlbWFpbmluZ1RleHQtPnRleHROb2RlKCkpCi0gICAgICAgICAgICBsZXR0ZXIg
PSBuZXcgUmVuZGVyVGV4dEZyYWdtZW50KCpyZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpLCBvbGRU
ZXh0LCAwLCBsZW5ndGgpOworICAgICAgICBSZW5kZXJQdHI8UmVuZGVyVGV4dEZyYWdtZW50PiBs
ZXR0ZXI7CisgICAgICAgIGlmIChyZW1haW5pbmdUZXh0LnRleHROb2RlKCkpCisgICAgICAgICAg
ICBsZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KCpyZW1haW5pbmdU
ZXh0LnRleHROb2RlKCksIG9sZFRleHQsIDAsIGxlbmd0aCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGxldHRlciA9IG5ldyBSZW5kZXJUZXh0RnJhZ21lbnQoZmlyc3RMZXR0ZXJCbG9jay5k
b2N1bWVudCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOworICAgICAgICAgICAgbGV0dGVyID0gY3Jl
YXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50
KCksIG9sZFRleHQsIDAsIGxlbmd0aCk7CiAKLSAgICAgICAgZmlyc3RMZXR0ZXItPmFkZENoaWxk
KGxldHRlcik7Ci0KLSAgICAgICAgY3VycmVudFRleHRDaGlsZC5kZXN0cm95KCk7CisgICAgICAg
IGZpcnN0TGV0dGVyLmFkZENoaWxkKFdURk1vdmUobGV0dGVyKSk7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVy
R2VuZXJhdGVkQ29udGVudC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlQ29udGVudFJlbmRlcmVycyhS
ZW5kZQogICAgIGZvciAoY29uc3QgQ29udGVudERhdGEqIGNvbnRlbnQgPSBzdHlsZS5jb250ZW50
RGF0YSgpOyBjb250ZW50OyBjb250ZW50ID0gY29udGVudC0+bmV4dCgpKSB7CiAgICAgICAgIGF1
dG8gY2hpbGQgPSBjb250ZW50LT5jcmVhdGVDb250ZW50UmVuZGVyZXIocmVuZGVyZXIuZG9jdW1l
bnQoKSwgc3R5bGUpOwogICAgICAgICBpZiAocmVuZGVyZXIuaXNDaGlsZEFsbG93ZWQoKmNoaWxk
LCBzdHlsZSkpCi0gICAgICAgICAgICByZW5kZXJlci5hZGRDaGlsZChjaGlsZC5sZWFrUHRyKCkp
OworICAgICAgICAgICAgcmVuZGVyZXIuYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgIH0K
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRl
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0
ZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwxMiAr
ODQsMTQgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW06OnVwZGF0ZQogICAgIH0K
IAogICAgIGF1dG8gbmV3U3R5bGUgPSBsaXN0SXRlbVJlbmRlcmVyLmNvbXB1dGVNYXJrZXJTdHls
ZSgpOworICAgIFJlbmRlclB0cjxSZW5kZXJMaXN0TWFya2VyPiBuZXdNYXJrZXJSZW5kZXJlcjsK
ICAgICBhdXRvKiBtYXJrZXJSZW5kZXJlciA9IGxpc3RJdGVtUmVuZGVyZXIubWFya2VyUmVuZGVy
ZXIoKTsKICAgICBpZiAobWFya2VyUmVuZGVyZXIpCiAgICAgICAgIG1hcmtlclJlbmRlcmVyLT5z
ZXRTdHlsZShXVEZNb3ZlKG5ld1N0eWxlKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1hcmtlclJl
bmRlcmVyID0gV2ViQ29yZTo6Y3JlYXRlUmVuZGVyZXI8UmVuZGVyTGlzdE1hcmtlcj4obGlzdEl0
ZW1SZW5kZXJlciwgV1RGTW92ZShuZXdTdHlsZSkpLmxlYWtQdHIoKTsKLSAgICAgICAgbWFya2Vy
UmVuZGVyZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgICAgICBuZXdNYXJrZXJSZW5kZXJlciA9
IFdlYkNvcmU6OmNyZWF0ZVJlbmRlcmVyPFJlbmRlckxpc3RNYXJrZXI+KGxpc3RJdGVtUmVuZGVy
ZXIsIFdURk1vdmUobmV3U3R5bGUpKTsKKyAgICAgICAgbmV3TWFya2VyUmVuZGVyZXItPmluaXRp
YWxpemVTdHlsZSgpOworICAgICAgICBtYXJrZXJSZW5kZXJlciA9IG5ld01hcmtlclJlbmRlcmVy
LmdldCgpOwogICAgICAgICBsaXN0SXRlbVJlbmRlcmVyLnNldE1hcmtlclJlbmRlcmVyKG1hcmtl
clJlbmRlcmVyKTsKICAgICB9CiAKQEAgLTEwOSw4ICsxMTEsMTEgQEAgdm9pZCBSZW5kZXJUcmVl
VXBkYXRlcjo6TGlzdEl0ZW06OnVwZGF0ZQogICAgIH0KIAogICAgIGlmIChuZXdQYXJlbnQgIT0g
Y3VycmVudFBhcmVudCkgewotICAgICAgICBtYXJrZXJSZW5kZXJlci0+cmVtb3ZlRnJvbVBhcmVu
dCgpOwotICAgICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKG1hcmtlclJlbmRlcmVyLCBmaXJzdE5v
bk1hcmtlckNoaWxkKCpuZXdQYXJlbnQpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpCisg
ICAgICAgICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKGN1cnJlbnRQYXJlbnQtPnRha2VDaGlsZCgq
bWFya2VyUmVuZGVyZXIpLCBmaXJzdE5vbk1hcmtlckNoaWxkKCpuZXdQYXJlbnQpKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbmV3UGFyZW50LT5hZGRDaGlsZChXVEZNb3ZlKG5ld01hcmtl
clJlbmRlcmVyKSwgZmlyc3ROb25NYXJrZXJDaGlsZCgqbmV3UGFyZW50KSk7CisKICAgICAgICAg
Ly8gSWYgY3VycmVudCBwYXJlbnQgaXMgYW4gYW5vbnltb3VzIGJsb2NrIHRoYXQgaGFzIGxvc3Qg
YWxsIGl0cyBjaGlsZHJlbiwgZGVzdHJveSBpdC4KICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQg
JiYgY3VycmVudFBhcmVudC0+aXNBbm9ueW1vdXNCbG9jaygpICYmICFjdXJyZW50UGFyZW50LT5m
aXJzdENoaWxkKCkgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVudFBhcmVudCkuY29u
dGludWF0aW9uKCkpCiAgICAgICAgICAgICBjdXJyZW50UGFyZW50LT5kZXN0cm95KCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRp
Q29sdW1uLmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVu
ZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0
NiwxNCBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbjo6dXBkCiAKIHZvaWQg
UmVuZGVyVHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uOjpjcmVhdGVGcmFnbWVudGVkRmxvdyhSZW5k
ZXJCbG9ja0Zsb3cmIGZsb3cpCiB7Ci0gICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93KiBmcmFnbWVu
dGVkRmxvdyA9IG5ldyBSZW5kZXJNdWx0aUNvbHVtbkZsb3coZmxvdy5kb2N1bWVudCgpLCBSZW5k
ZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShmbG93LnN0eWxlKCksIEJM
T0NLKSk7Ci0gICAgZnJhZ21lbnRlZEZsb3ctPmluaXRpYWxpemVTdHlsZSgpOworICAgIGF1dG8g
bmV3RnJhZ21lbnRlZEZsb3cgPSBXZWJDb3JlOjpjcmVhdGVSZW5kZXJlcjxSZW5kZXJNdWx0aUNv
bHVtbkZsb3c+KGZsb3cuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0
eWxlV2l0aERpc3BsYXkoZmxvdy5zdHlsZSgpLCBCTE9DSykpOworICAgIG5ld0ZyYWdtZW50ZWRG
bG93LT5pbml0aWFsaXplU3R5bGUoKTsKICAgICBmbG93LnNldENoaWxkcmVuSW5saW5lKGZhbHNl
KTsgLy8gRG8gdGhpcyB0byBhdm9pZCB3cmFwcGluZyBpbmxpbmUgY2hpbGRyZW4gdGhhdCBhcmUg
anVzdCBnb2luZyB0byBtb3ZlIGludG8gdGhlIGZsb3cgdGhyZWFkLgogICAgIGZsb3cuZGVsZXRl
TGluZXMoKTsKLSAgICBmbG93LlJlbmRlckJsb2NrOjphZGRDaGlsZChmcmFnbWVudGVkRmxvdyk7
Ci0gICAgZnJhZ21lbnRlZEZsb3ctPnBvcHVsYXRlKCk7IC8vIENhbGxlZCBhZnRlciB0aGUgZmxv
dyB0aHJlYWQgaXMgaW5zZXJ0ZWQgc28gdGhhdCB3ZSBhcmUgcmVhY2hhYmxlIGJ5IHRoZSBmbG93
IHRocmVhZC4KLSAgICBmbG93LnNldE11bHRpQ29sdW1uRmxvdyhmcmFnbWVudGVkRmxvdyk7Cisg
ICAgYXV0byYgZnJhZ21lbnRlZEZsb3cgPSAqbmV3RnJhZ21lbnRlZEZsb3c7CisgICAgZmxvdy5S
ZW5kZXJCbG9jazo6YWRkQ2hpbGQoV1RGTW92ZShuZXdGcmFnbWVudGVkRmxvdykpOworICAgIGZy
YWdtZW50ZWRGbG93LnBvcHVsYXRlKCk7IC8vIENhbGxlZCBhZnRlciB0aGUgZmxvdyB0aHJlYWQg
aXMgaW5zZXJ0ZWQgc28gdGhhdCB3ZSBhcmUgcmVhY2hhYmxlIGJ5IHRoZSBmbG93IHRocmVhZC4K
KyAgICBmbG93LnNldE11bHRpQ29sdW1uRmxvdygmZnJhZ21lbnRlZEZsb3cpOwogfQogCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322182</attachid>
            <date>2017-09-29 06:51:23 -0700</date>
            <delta_ts>2017-09-29 23:05:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderptr-everywhere-14.patch</filename>
            <type>text/plain</type>
            <size>149901</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjY1MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNiBAQAorMjAxNy0wOS0yOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHNtYXJ0IHBvaW50ZXJz
IGZvciBjcmVhdGluZywgYWRkaW5nIGFuZCByZW1vdmluZyByZW5kZXJlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzYwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCBSZW5k
ZXJPYmplY3Qgb3duZXJzaGlwIGlzIGNvbnNpc3RlbnRseSBtYW5hZ2VkIHVzaW5nIFJlbmRlclB0
cnMuIEl0IGFsc28KKyAgICAgICAgY2xhcmlmaWVzIHRoYXQgaW4tdHJlZSByZW5kZXJlcnMgYXJl
IGFsd2F5cyBvd25lZCBieSB0aGUgcGFyZW50IHJlbmRlcmVyLgorCisgICAgICAgIC0gcmVuZGVy
ZXJzIGFyZSBjb25zdHJ1Y3RlZCB3aXRoIGNyZWF0ZVJlbmRlcmVyPD4gd2hpY2ggcmV0dXJucyBS
ZW5kZXJQdHIKKyAgICAgICAgLSBhZGRDaGlsZCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgdGFrZSBS
ZW5kZXJQdHJzCisgICAgICAgIC0gcmVtb3ZlQ2hpbGQgaXMgcmVwbGFjZWQgd2l0aCB0YWtlQ2hp
bGQgdGhhdCByZXR1cm5zIGEgUmVuZGVyUHRyCisgICAgICAgIC0gb25seSBhZGRDaGlsZEludGVy
bmFsL3Rha2VDaGlsZEludGVybmFsIGRlYWwgd2l0aCByYXcgb3duZGVyIHJlbmRlcmVyIHBvaW50
ZXJzLgorCisgICAgICAgIFRoZXJlIGFyZSBzdGlsbCBhIGZldyBleGNlcHRpb24gbGVmdCwgbm90
ZWQgYmVsb3csIHRvIGJlIGZpeGVkIGxhdGVyLgorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVu
Rm9yRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZFRvQ29udGludWF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpkcm9wQW5vbnltb3VzQm94Q2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OnRha2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6Y3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y3Jl
YXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyQW5kRGlzcGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c0Jsb2NrIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2tGbG93Ojp0YWtlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2tGbG93OjpyZW1vdmVDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxkVG8pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCdXR0b24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjphZGRDaGls
ZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCdXR0b246OnRha2VDaGlsZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCdXR0b246OnNldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQnV0dG9uOjpyZW1vdmVDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckJ1dHRvbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckVsZW1lbnQ6OnRha2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJF
bGVtZW50OjpyZW1vdmVBbmREZXN0cm95Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RWxlbWVudDo6ZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4pOgorCisgICAgICAgICAgICBLZWVwIHRo
ZSBleGlzdGluZyBiZWhhdmlvciBhbmQgbGVhayB0aGUgZmlyc3RMZXR0ZXIgcmVuZGVyZXIuIFRo
ZSBjb21tZW50IGNsYWltcyB0aGV5IGdldCBkZXN0cm95ZWQgYnkgUmVuZGVyVGV4dEZyYWdtZW50
LgorICAgICAgICAgICAgVG8gYmUgY2xlYW5lZCB1cCBsYXRlci4KKworICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRWxlbWVudDo6aW5zZXJ0Q2hpbGRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJFbGVtZW50Ojp0YWtlQ2hpbGRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJFbGVtZW50OjpoYW5kbGVEeW5hbWljRmxvYXRQb3NpdGlvbkNoYW5nZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZW1vdmVDaGlsZCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjpyZW1vdmVDaGlsZEludGVybmFsKTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RnVsbFNjcmVlbjo6d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZ1
bGxTY3JlZW46OndyYXBOZXdSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGdWxs
U2NyZWVuOjp3cmFwRXhpc3RpbmdSZW5kZXJlcik6CisKKyAgICAgICAgICAgIFNwbGl0IHdyYXBS
ZW5kZXJlcigpIGludG8gdHdvIGZ1bmN0aW9ucywgd3JhcE5ld1JlbmRlcmVyKCkgYW5kIHdyYXBF
eGlzdGluZ1JlbmRlcmVyKCkuCisgICAgICAgICAgICBUaGUgZmlyc3Qgb25lIGRlYWxzIHdpdGgg
YWRkaW5nIG5ldyByZW5kZXJlcnMgdG8gdGhlIHRyZWUgd2hpbGUgdGhlIGxhdHRlciBtdXRhdGVz
CisgICAgICAgICAgICBleGlzdGluZyByZW5kZXIgdHJlZSBpbi1wbGFjZS4KKworICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRnVsbFNjcmVlbjo6dW53cmFwUmVuZGVyZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRnVsbFNjcmVlbjo6Y3JlYXRlUGxhY2Vob2xkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmRlcmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OmFkZENoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnRha2VDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJHcmlkOjpyZW1vdmVDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckdyaWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVySW5saW5lOjphZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcklubGluZTo6c3BsaXRGbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGlu
ZTo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxp
bmU6OmNoaWxkQmVjYW1lTm9uSW5saW5lKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjpjcmVhdGVJbm5lckJsb2NrKToKKyAgICAgICAgKFJl
bmRlck1lbnVMaXN0OjphZGRDaGlsZCk6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6dGFrZUNo
aWxkKToKKyAgICAgICAgKFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0KToKKyAgICAgICAgKFJlbmRl
ck1lbnVMaXN0OjpyZW1vdmVDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck1lbnVMaXN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OmV2YWN1YXRl
QW5kRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OnBy
b2Nlc3NQb3NzaWJsZVNwYW5uZXJEZXNjZW5kYW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck11bHRpQ29sdW1uRmxvdzo6ZnJhZ21lbnRlZEZsb3dEZXNjZW5kYW50SW5zZXJ0ZWQpOgorCisg
ICAgICAgICAgICBLZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvciBhbmQgbGVhayB0aGUgcGxhY2Vo
b2xkZXIgcmVuZGVyZXIuCisgICAgICAgICAgICBUbyBiZSBjbGVhbmVkIHVwIGxhdGVyLgorCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OmhhbmRsZVNwYW5uZXJSZW1v
dmFsKToKKworICAgICAgICAgICAgS2VlcCB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgYW5kIGxlYWsg
dGhlIHBsYWNlaG9sZGVyIHJlbmRlcmVyLgorICAgICAgICAgICAgVG8gYmUgY2xlYW5lZCB1cCBs
YXRlci4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlcjo6Y3JlYXRlQW5vbnltb3VzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVtb3ZlRnJv
bVBhcmVudEFuZERlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp3aWxs
QmVEZXN0cm95ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVBhcmVudCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJRdW90ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJRdW90ZTo6dXBk
YXRlVGV4dFJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjcmVhdGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2spOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5lOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSdWJ5QXNJbmxpbmU6OnRha2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSdWJ5QXNCbG9jazo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVi
eUFzQmxvY2s6OnRha2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNJbmxp
bmU6OnJlbW92ZUNoaWxkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlB
c0Jsb2NrOjpyZW1vdmVDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clJ1YnkuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieUJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUnVieUJhc2U6Om1vdmVJbmxpbmVDaGlsZHJlbik6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
UnVieVJ1bjo6cnVieUJhc2VTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46
OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OnRha2VDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpjcmVhdGVSdWJ5QmFzZSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlSdW46OnJlbW92ZUNoaWxkKTogRGVsZXRlZC4K
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6YWRkQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNyZWF0ZVRhYmxlV2l0aFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFy
ZW50UmVuZGVyZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFz
IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y3JlYXRlVGFibGVDZWxsV2l0aFN0eWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y3JlYXRlQW5vbnltb3VzV2l0aFBh
cmVudFJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZUFub255bW91c0JveFdpdGhT
YW1lVHlwZUFzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlUm93OjpjcmVhdGVUYWJsZVJvd1dpdGhTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJl
bmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlUm93OjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVB
cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlVGFibGVTZWN0aW9uV2l0aFN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlQW5vbnltb3Vz
V2l0aFBhcmVudFJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255
bW91c0JveFdpdGhTYW1lVHlwZUFzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEZlbmNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxG
ZW5jZWQ6Om1ha2VGZW5jZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MRmVuY2Vk
OjphZGRDaGlsZCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5j
ZWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmFkZENoaWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6dGFrZUNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6cmVtb3ZlQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6CisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5s
aW5lOjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmU6OnRha2VD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbmxpbmU6OnJlbW92ZUNoaWxkKTog
RGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSb290OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
b290Ojp0YWtlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9vdDo6cmVtb3Zl
Q2hpbGQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdUZXh0OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdUZXh0Ojp0YWtlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6
cmVtb3ZlQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
VGV4dC5oOgorICAgICAgICAqIHN0eWxlL1JlbmRlclRyZWVQb3NpdGlvbi5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVHJlZVBvc2l0aW9uOjppbnNlcnQpOgorICAgICAgICAqIHN0eWxlL1Jl
bmRlclRyZWVVcGRhdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVy
OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUZXh0UmVuZGVyZXIp
OgorICAgICAgICAqIHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dXBkYXRlRmlyc3RMZXR0ZXJTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVGaXJzdExldHRlclJlbmRlcmVyKToKKyAgICAgICAgKiBzdHlsZS9SZW5kZXJUcmVl
VXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29u
dGVudFJlbmRlcmVycyk6CisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRl
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW06OnVw
ZGF0ZU1hcmtlcik6CisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVt
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6TXVsdGlDb2x1bW46
OmNyZWF0ZUZyYWdtZW50ZWRGbG93KToKKwogMjAxNy0wOS0yOSAgRW5yaXF1ZSBPY2HDsWEgR29u
esOhbGV6ICA8ZW9jYW5oYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHU3RyZWFtZXJdIFJlZmFj
dG9yIG1lZGlhIHBsYXllciB0byB1c2UgTWVkaWFUaW1lIGNvbnNpc3RlbnRseQpJbmRleDogU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDQ0LDggKzYwNDQsOCBAQCB2b2lk
IERvY3VtZW50Ojp3ZWJraXRXaWxsRW50ZXJGdWxsU2NyZWVuCiAgICAgICAgIG1fc2F2ZWRQbGFj
ZWhvbGRlclJlbmRlclN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyLT5zdHls
ZSgpKTsKICAgICB9CiAKLSAgICBpZiAobV9mdWxsU2NyZWVuRWxlbWVudCAhPSBkb2N1bWVudEVs
ZW1lbnQoKSkKLSAgICAgICAgUmVuZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmRlcmVyKHJlbmRlcmVy
LCByZW5kZXJlciA/IHJlbmRlcmVyLT5wYXJlbnQoKSA6IG51bGxwdHIsICp0aGlzKTsKKyAgICBp
ZiAobV9mdWxsU2NyZWVuRWxlbWVudCAhPSBkb2N1bWVudEVsZW1lbnQoKSAmJiByZW5kZXJlcikK
KyAgICAgICAgUmVuZGVyRnVsbFNjcmVlbjo6d3JhcEV4aXN0aW5nUmVuZGVyZXIoKnJlbmRlcmVy
LCAqdGhpcyk7CiAKICAgICBtX2Z1bGxTY3JlZW5FbGVtZW50LT5zZXRDb250YWluc0Z1bGxTY3Jl
ZW5FbGVtZW50T25BbmNlc3RvcnNDcm9zc2luZ0ZyYW1lQm91bmRhcmllcyh0cnVlKTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAyMjI2
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NzUsNyArNDc1LDcgQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjb250
aW51YXRpb25CZQogICAgIHJldHVybiBsYXN0OwogfQogCi12b2lkIFJlbmRlckJsb2NrOjphZGRD
aGlsZFRvQ29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZFRvQ29udGludWF0aW9uKFJl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
KQogewogICAgIFJlbmRlckJsb2NrKiBmbG93ID0gY29udGludWF0aW9uQmVmb3JlKGJlZm9yZUNo
aWxkKTsKICAgICBBU1NFUlQoIWJlZm9yZUNoaWxkIHx8IGlzPFJlbmRlckJsb2NrPigqYmVmb3Jl
Q2hpbGQtPnBhcmVudCgpKSk7CkBAIC00OTEsNyArNDkxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbgogICAgIH0KIAogICAgIGlmIChuZXdDaGlsZC0+aXNGbG9h
dGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKSB7Ci0gICAgICAgIGJlZm9yZUNoaWxkUGFyZW50
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7Cisg
ICAgICAgIGJlZm9yZUNoaWxkUGFyZW50LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdU
Rk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTUwMCwyMSArNTAwLDIxIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkVG9Db250aW51
YXRpb24KICAgICBib29sIGZsb3dJc05vcm1hbCA9IGZsb3ctPmlzSW5saW5lKCkgfHwgIWZsb3ct
PnN0eWxlKCkuY29sdW1uU3BhbigpOwogCiAgICAgaWYgKGZsb3cgPT0gYmVmb3JlQ2hpbGRQYXJl
bnQpIHsKLSAgICAgICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGls
ZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0
aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgCiAgICAgLy8gVGhlIGdvYWwgaGVyZSBpcyB0byBtYXRjaCB1cCBpZiB3ZSBjYW4s
IHNvIHRoYXQgd2UgY2FuIGNvYWxlc2NlIGFuZCBjcmVhdGUgdGhlCiAgICAgLy8gbWluaW1hbCAj
IG9mIGNvbnRpbnVhdGlvbnMgbmVlZGVkIGZvciB0aGUgaW5saW5lLgogICAgIGlmIChjaGlsZElz
Tm9ybWFsID09IGJjcElzTm9ybWFsKSB7Ci0gICAgICAgIGJlZm9yZUNoaWxkUGFyZW50LT5hZGRD
aGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAg
IGJlZm9yZUNoaWxkUGFyZW50LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUo
bmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KGZsb3dJc05vcm1hbCA9PSBjaGlsZElzTm9ybWFsKSB7Ci0gICAgICAgIGZsb3ctPmFkZENoaWxk
SWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQsIDApOyAvLyBKdXN0IHRyZWF0IGxpa2UgYW4g
YXBwZW5kLgorICAgICAgICBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1v
dmUobmV3Q2hpbGQpLCAwKTsgLy8gSnVzdCB0cmVhdCBsaWtlIGFuIGFwcGVuZC4KICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBiZWZvcmVDaGlsZFBhcmVudC0+YWRkQ2hpbGRJZ25vcmluZ0Nv
bnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgIGJlZm9yZUNoaWxkUGFyZW50
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVD
aGlsZCk7CiB9CiAKIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gUmVuZGVyQmxvY2s6OmNsb25lKCkg
Y29uc3QKQEAgLTUzNywxNSArNTM3LDE1IEBAIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gUmVuZGVy
QmxvY2s6OmNsb24KICAgICByZXR1cm4gY2xvbmVCbG9jazsKIH0KIAotdm9pZCBSZW5kZXJCbG9j
azo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGlmIChjb250aW51
YXRpb24oKSAmJiAhaXNBbm9ueW1vdXNCbG9jaygpKQotICAgICAgICBhZGRDaGlsZFRvQ29udGlu
dWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIGFkZENoaWxkVG9Db250aW51
YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICBlbHNlCi0gICAgICAg
IGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAg
ICAgICAgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVm
b3JlQ2hpbGQpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQp
Cit2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewog
ICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykgewog
ICAgICAgICBSZW5kZXJFbGVtZW50KiBiZWZvcmVDaGlsZENvbnRhaW5lciA9IGJlZm9yZUNoaWxk
LT5wYXJlbnQoKTsKQEAgLTU2NiwxNiArNTY2LDE2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZENo
aWxkSWdub3JpbmdDb250aW4KICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAv
LyBJbnNlcnQgdGhlIGNoaWxkIGludG8gdGhlIGFub255bW91cyBibG9jayBib3ggaW5zdGVhZCBv
ZiBoZXJlLgogICAgICAgICAgICAgICAgIGlmIChuZXdDaGlsZC0+aXNJbmxpbmUoKSB8fCBiZWZv
cmVDaGlsZC0+cGFyZW50KCktPmZpcnN0Q2hpbGQoKSAhPSBiZWZvcmVDaGlsZCkKLSAgICAgICAg
ICAgICAgICAgICAgYmVmb3JlQ2hpbGQtPnBhcmVudCgpLT5hZGRDaGlsZChuZXdDaGlsZCwgYmVm
b3JlQ2hpbGQpOworICAgICAgICAgICAgICAgICAgICBiZWZvcmVDaGlsZC0+cGFyZW50KCktPmFk
ZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBhZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQt
PnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGQoV1RGTW92ZShuZXdDaGls
ZCksIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBBU1NFUlQoYmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250
YWluZXItPmlzVGFibGUoKSk7CiAgICAgICAgICAgICBpZiAobmV3Q2hpbGQtPmlzVGFibGVQYXJ0
KCkpIHsKICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgaW50byB0aGUgYW5vbnltb3VzIHRhYmxl
LgotICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxkQW5vbnltb3VzQ29udGFpbmVyLT5hZGRDaGls
ZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxkQW5v
bnltb3VzQ29udGFpbmVyLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIApAQCAtNjEyLDIyICs2
MTIsMjMgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbgogICAgICAg
ICBSZW5kZXJPYmplY3QqIGFmdGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5w
cmV2aW91c1NpYmxpbmcoKSA6IGxhc3RDaGlsZCgpOwogCiAgICAgICAgIGlmIChhZnRlckNoaWxk
ICYmIGFmdGVyQ2hpbGQtPmlzQW5vbnltb3VzQmxvY2soKSkgewotICAgICAgICAgICAgZG93bmNh
c3Q8UmVuZGVyQmxvY2s+KCphZnRlckNoaWxkKS5hZGRDaGlsZChuZXdDaGlsZCk7CisgICAgICAg
ICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmFmdGVyQ2hpbGQpLmFkZENoaWxkKFdURk1vdmUo
bmV3Q2hpbGQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChuZXdDaGlsZC0+aXNJbmxpbmUoKSkgewogICAgICAgICAgICAgLy8gTm8gc3VpdGFibGUgZXhp
c3RpbmcgYW5vbnltb3VzIGJveCAtIGNyZWF0ZSBhIG5ldyBvbmUuCi0gICAgICAgICAgICBSZW5k
ZXJCbG9jayogbmV3Qm94ID0gY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKLSAgICAgICAgICAgIFJl
bmRlckJveDo6YWRkQ2hpbGQobmV3Qm94LCBiZWZvcmVDaGlsZCk7Ci0gICAgICAgICAgICBuZXdC
b3gtPmFkZENoaWxkKG5ld0NoaWxkKTsKKyAgICAgICAgICAgIGF1dG8gbmV3Qm94ID0gY3JlYXRl
QW5vbnltb3VzQmxvY2soKTsKKyAgICAgICAgICAgIGF1dG8mIGJveCA9ICpuZXdCb3g7CisgICAg
ICAgICAgICBSZW5kZXJCb3g6OmFkZENoaWxkKFdURk1vdmUobmV3Qm94KSwgYmVmb3JlQ2hpbGQp
OworICAgICAgICAgICAgYm94LmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAogICAgIGludmFsaWRhdGVMaW5lTGF5b3V0
UGF0aCgpOwogCi0gICAgUmVuZGVyQm94OjphZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQp
OworICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxk
KTsKICAKICAgICBpZiAobWFkZUJveGVzTm9uSW5saW5lICYmIGlzPFJlbmRlckJsb2NrPihwYXJl
bnQoKSkgJiYgaXNBbm9ueW1vdXNCbG9jaygpKQogICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9j
az4oKnBhcmVudCgpKS5yZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKHRoaXMpOwpAQCAtNzEw
LDkgKzcxMSwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjptYWtlQ2hpbGRyZW5Ob25JbmxpbmUoCiAK
ICAgICAgICAgY2hpbGQgPSBpbmxpbmVSdW5FbmQtPm5leHRTaWJsaW5nKCk7CiAKLSAgICAgICAg
UmVuZGVyQmxvY2sqIGJsb2NrID0gY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKLSAgICAgICAgaW5z
ZXJ0Q2hpbGRJbnRlcm5hbChibG9jaywgaW5saW5lUnVuU3RhcnQsIE5vdGlmeUNoaWxkcmVuKTsK
LSAgICAgICAgbW92ZUNoaWxkcmVuVG8oYmxvY2ssIGlubGluZVJ1blN0YXJ0LCBjaGlsZCk7Cisg
ICAgICAgIGF1dG8gbmV3QmxvY2sgPSBjcmVhdGVBbm9ueW1vdXNCbG9jaygpOworICAgICAgICBh
dXRvJiBibG9jayA9ICpuZXdCbG9jazsKKyAgICAgICAgaW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZN
b3ZlKG5ld0Jsb2NrKSwgaW5saW5lUnVuU3RhcnQsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAg
bW92ZUNoaWxkcmVuVG8oJmJsb2NrLCBpbmxpbmVSdW5TdGFydCwgY2hpbGQpOwogICAgIH0KIAog
I2lmbmRlZiBOREVCVUcKQEAgLTgxMSwyMSArODEzLDE5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRy
b3BBbm9ueW1vdXNCb3hDaGlsZCgKICAgICBwYXJlbnQuc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7CiAgICAgcGFyZW50LnNldENoaWxkcmVuSW5saW5lKGNoaWxkLmNoaWxkcmVu
SW5saW5lKCkpOwogICAgIFJlbmRlck9iamVjdCogbmV4dFNpYmxpbmcgPSBjaGlsZC5uZXh0U2li
bGluZygpOwotICAgIHBhcmVudC5yZW1vdmVDaGlsZEludGVybmFsKGNoaWxkLCBjaGlsZC5oYXNM
YXllcigpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hpbGRyZW4pOworCisgICAgYXV0
byB0b0JlRGVsZXRlZCA9IHBhcmVudC50YWtlQ2hpbGRJbnRlcm5hbChjaGlsZCwgY2hpbGQuaGFz
TGF5ZXIoKSA/IE5vdGlmeUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKICAgICBjaGls
ZC5tb3ZlQWxsQ2hpbGRyZW5UbygmcGFyZW50LCBuZXh0U2libGluZywgY2hpbGQuaGFzTGF5ZXIo
KSk7CiAgICAgLy8gRGVsZXRlIHRoZSBub3ctZW1wdHkgYmxvY2sncyBsaW5lcyBhbmQgbnVrZSBp
dC4KICAgICBjaGlsZC5kZWxldGVMaW5lcygpOwotICAgIGNoaWxkLmRlc3Ryb3koKTsKIH0KIAot
dm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKK1Jl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlckJsb2NrOjp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0
JiBvbGRDaGlsZCkKIHsKICAgICAvLyBObyBuZWVkIHRvIHdhc3RlIHRpbWUgaW4gbWVyZ2luZyBv
ciByZW1vdmluZyBlbXB0eSBhbm9ueW1vdXMgYmxvY2tzLgogICAgIC8vIFdlIGNhbiBqdXN0IGJh
aWwgb3V0IGlmIG91ciBkb2N1bWVudCBpcyBnZXR0aW5nIGRlc3Ryb3llZC4KLSAgICBpZiAocmVu
ZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpIHsKLSAgICAgICAgUmVuZGVyQm94OjpyZW1vdmVDaGls
ZChvbGRDaGlsZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKHJlbmRlclRyZWVC
ZWluZ0Rlc3Ryb3llZCgpKQorICAgICAgICByZXR1cm4gUmVuZGVyQm94Ojp0YWtlQ2hpbGQob2xk
Q2hpbGQpOwogCiAgICAgLy8gSWYgdGhpcyBjaGlsZCBpcyBhIGJsb2NrLCBhbmQgaWYgb3VyIHBy
ZXZpb3VzIGFuZCBuZXh0IHNpYmxpbmdzIGFyZSBib3RoIGFub255bW91cyBibG9ja3MKICAgICAv
LyB3aXRoIGlubGluZSBjb250ZW50LCB0aGVuIHdlIGNhbiBmb2xkIHRoZSBpbmxpbmUgY29udGVu
dCBiYWNrIHRvZ2V0aGVyLgpAQCAtODQ5LDExICs4NDksMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6
cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZQogICAgICAgICAgICAgLy8gQ2FjaGUgdGhpcyB2YWx1ZSBh
cyBpdCBtaWdodCBnZXQgY2hhbmdlZCBpbiBzZXRTdHlsZSgpIGNhbGwuCiAgICAgICAgICAgICBi
b29sIGlubGluZUNoaWxkcmVuQmxvY2tIYXNMYXllciA9IGlubGluZUNoaWxkcmVuQmxvY2suaGFz
TGF5ZXIoKTsKICAgICAgICAgICAgIGlubGluZUNoaWxkcmVuQmxvY2suc2V0U3R5bGUoUmVuZGVy
U3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUoKSwgQkxPQ0spKTsK
LSAgICAgICAgICAgIHJlbW92ZUNoaWxkSW50ZXJuYWwoaW5saW5lQ2hpbGRyZW5CbG9jaywgaW5s
aW5lQ2hpbGRyZW5CbG9ja0hhc0xheWVyID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hp
bGRyZW4pOworICAgICAgICAgICAgYXV0byBibG9ja1RvTW92ZSA9IHRha2VDaGlsZEludGVybmFs
KGlubGluZUNoaWxkcmVuQmxvY2ssIGlubGluZUNoaWxkcmVuQmxvY2tIYXNMYXllciA/IE5vdGlm
eUNoaWxkcmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gTm93IGp1c3QgcHV0IHRoZSBpbmxpbmVDaGlsZHJlbkJsb2NrIGluc2lkZSB0aGUgYmxv
Y2tDaGlsZHJlbkJsb2NrLgogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9
IHByZXYgPT0gJmlubGluZUNoaWxkcmVuQmxvY2sgPyBibG9ja0NoaWxkcmVuQmxvY2suZmlyc3RD
aGlsZCgpIDogbnVsbHB0cjsKLSAgICAgICAgICAgIGJsb2NrQ2hpbGRyZW5CbG9jay5pbnNlcnRD
aGlsZEludGVybmFsKCZpbmxpbmVDaGlsZHJlbkJsb2NrLCBiZWZvcmVDaGlsZCwKKyAgICAgICAg
ICAgIGJsb2NrQ2hpbGRyZW5CbG9jay5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoYmxvY2tU
b01vdmUpLCBiZWZvcmVDaGlsZCwKICAgICAgICAgICAgICAgICAoaW5saW5lQ2hpbGRyZW5CbG9j
a0hhc0xheWVyIHx8IGJsb2NrQ2hpbGRyZW5CbG9jay5oYXNMYXllcigpKSA/IE5vdGlmeUNoaWxk
cmVuIDogRG9udE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIG5leHQtPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICAgICAgCkBAIC04NzcsNyArODc3LDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZQogCiAgICAgaW52YWxp
ZGF0ZUxpbmVMYXlvdXRQYXRoKCk7CiAKLSAgICBSZW5kZXJCb3g6OnJlbW92ZUNoaWxkKG9sZENo
aWxkKTsKKyAgICBhdXRvIHRha2VuQ2hpbGQgPSBSZW5kZXJCb3g6OnRha2VDaGlsZChvbGRDaGls
ZCk7CiAKICAgICBSZW5kZXJPYmplY3QqIGNoaWxkID0gcHJldiA/IHByZXYgOiBuZXh0OwogICAg
IGlmIChjYW5NZXJnZUFub255bW91c0Jsb2NrcyAmJiBjaGlsZCAmJiAhY2hpbGQtPnByZXZpb3Vz
U2libGluZygpICYmICFjaGlsZC0+bmV4dFNpYmxpbmcoKSAmJiBjYW5Ecm9wQW5vbnltb3VzQmxv
Y2tDaGlsZCgpKSB7CkBAIC05MzQsNiArOTM0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3Zl
Q2hpbGQoUmVuZGVyT2JqZQogICAgICAgICAgICAgZGVzdHJveSgpOwogICAgICAgICB9CiAgICAg
fQorICAgIHJldHVybiB0YWtlbkNoaWxkOwogfQogCiBib29sIFJlbmRlckJsb2NrOjpjaGlsZHJl
blByZXZlbnRTZWxmQ29sbGFwc2luZygpIGNvbnN0CkBAIC0zMzQwLDE0ICszMzQxLDE0IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3QKICAgICAgICAgaW5saW5lRWxl
bWVudENvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZExheW91
dFBvaW50KExheW91dFBvaW50KGFkZGl0aW9uYWxPZmZzZXQgKyBpbmxpbmVFbGVtZW50Q29udGlu
dWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpIC0gbG9jYXRpb24oKSkpLCBw
YWludENvbnRhaW5lcik7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9jaz4gUmVuZGVy
QmxvY2s6OmNyZWF0ZUFub255bW91c0Jsb2NrV2l0aFN0eWxlQW5kRGlzcGxheShEb2N1bWVudCYg
ZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRURpc3BsYXkgZGlzcGxheSkKK1Jl
bmRlclB0cjxSZW5kZXJCbG9jaz4gUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c0Jsb2NrV2l0
aFN0eWxlQW5kRGlzcGxheShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgRURpc3BsYXkgZGlzcGxheSkKIHsKICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBj
b252ZXJ0IGFsbCBvdXIgaW5saW5lIGRpc3BsYXlzIHRvIGJsb2NrLXR5cGUgaW4gdGhlIGFub255
bW91cyBsb2dpYyA/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrPiBuZXdCb3g7Cisg
ICAgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBuZXdCb3g7CiAgICAgaWYgKGRpc3BsYXkgPT0gRkxF
WCB8fCBkaXNwbGF5ID09IElOTElORV9GTEVYKQotICAgICAgICBuZXdCb3ggPSBzdGQ6Om1ha2Vf
dW5pcXVlPFJlbmRlckZsZXhpYmxlQm94Pihkb2N1bWVudCwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFu
b255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUsIEZMRVgpKTsKKyAgICAgICAgbmV3Qm94ID0g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyRmxleGlibGVCb3g+KGRvY3VtZW50LCBSZW5kZXJTdHlsZTo6
Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgRkxFWCkpOwogICAgIGVsc2UK
LSAgICAgICAgbmV3Qm94ID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJCbG9ja0Zsb3c+KGRvY3Vt
ZW50LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwg
QkxPQ0spKTsKKyAgICAgICAgbmV3Qm94ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyQmxvY2tGbG93
Pihkb2N1bWVudCwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXko
c3R5bGUsIEJMT0NLKSk7CiAgICAgCiAgICAgbmV3Qm94LT5pbml0aWFsaXplU3R5bGUoKTsKICAg
ICByZXR1cm4gbmV3Qm94OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw4ICs3Miw4IEBAIHB1YmxpYzoKICAgICAvLyBG
SVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxlcnMgaGF2
ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlTGluZXMo
KTsKIAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVu
ZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVy
T2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRl
OworICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBv
dmVycmlkZTsKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hp
bGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSAwKTsKIApAQCAtMTk2LDExICsx
OTYsMTEgQEAgcHVibGljOgogICAgIHVzaW5nIFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51
YXRpb247CiAgICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldENvbnRpbnVhdGlvbjsK
IAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2s+IGNyZWF0ZUFub255bW91
c1dpdGhQYXJlbnRSZW5kZXJlckFuZERpc3BsYXkoY29uc3QgUmVuZGVyQm94JiBwYXJlbnQsIEVE
aXNwbGF5ID0gQkxPQ0spOwotICAgIFJlbmRlckJsb2NrKiBjcmVhdGVBbm9ueW1vdXNCbG9jayhF
RGlzcGxheSA9IEJMT0NLKSBjb25zdDsKKyAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlckJsb2Nr
PiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXJBbmREaXNwbGF5KGNvbnN0IFJlbmRl
ckJveCYgcGFyZW50LCBFRGlzcGxheSA9IEJMT0NLKTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQmxv
Y2s+IGNyZWF0ZUFub255bW91c0Jsb2NrKEVEaXNwbGF5ID0gQkxPQ0spIGNvbnN0OwogICAgIHN0
YXRpYyB2b2lkIGRyb3BBbm9ueW1vdXNCb3hDaGlsZChSZW5kZXJCbG9jayYgcGFyZW50LCBSZW5k
ZXJCbG9jayYgY2hpbGQpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gY3JlYXRl
QW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlckJveD4gY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVU
eXBlQXMoY29uc3QgUmVuZGVyQm94JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgYm9v
bCBzaG91bGRTa2lwQ3JlYXRpbmdSdW5zRm9yT2JqZWN0KFJlbmRlck9iamVjdCYgb2JqKQogICAg
IHsKQEAgLTQyOCw3ICs0MjgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBibG9ja1dpbGxCZURl
c3Ryb3llZCgpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
QmxvY2s+IGNyZWF0ZUFub255bW91c0Jsb2NrV2l0aFN0eWxlQW5kRGlzcGxheShEb2N1bWVudCYs
IGNvbnN0IFJlbmRlclN0eWxlJiwgRURpc3BsYXkpOworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVu
ZGVyQmxvY2s+IGNyZWF0ZUFub255bW91c0Jsb2NrV2l0aFN0eWxlQW5kRGlzcGxheShEb2N1bWVu
dCYsIGNvbnN0IFJlbmRlclN0eWxlJiwgRURpc3BsYXkpOwogCiAgICAgLy8gRklYTUUtQkxPQ0tG
TE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUgbW92ZWQgdG8g
UmVuZGVyQmxvY2tGbG93CiAgICAgdmlydHVhbCBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodEZsb2F0
T2Zmc2V0Rm9yTGluZShMYXlvdXRVbml0LCBMYXlvdXRVbml0IGZpeGVkT2Zmc2V0LCBMYXlvdXRV
bml0KSBjb25zdCB7IHJldHVybiBmaXhlZE9mZnNldDsgfTsKQEAgLTQ0Nyw4ICs0NDcsOCBAQCBw
cml2YXRlOgogICAgIC8vIEZJWE1FLUJMT0NLRkxPVzogUmVtb3ZlIHZpcnR1YWxpemFpb24gd2hl
biBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwogICAgIHZpcnR1YWwg
dm9pZCBtb3ZlQWxsQ2hpbGRyZW5JbmNsdWRpbmdGbG9hdHNUbyhSZW5kZXJCbG9jayYgdG9CbG9j
aywgYm9vbCBmdWxsUmVtb3ZlSW5zZXJ0KSB7IG1vdmVBbGxDaGlsZHJlblRvKCZ0b0Jsb2NrLCBm
dWxsUmVtb3ZlSW5zZXJ0KTsgfQogCi0gICAgdm9pZCBhZGRDaGlsZFRvQ29udGludWF0aW9uKFJl
bmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwotICAgIHZv
aWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkVG9D
b250aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpOworICAgIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihS
ZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGlzU2VsZkNvbGxhcHNpbmdCbG9jaygpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZHJlblByZXZlbnRTZWxmQ29sbGFwc2luZygp
IGNvbnN0OwpAQCAtNTQ3LDE5ICs1NDcsMTkgQEAgTGF5b3V0VW5pdCBibG9ja0RpcmVjdGlvbk9m
ZnNldChSZW5kZXJCbAogTGF5b3V0VW5pdCBpbmxpbmVEaXJlY3Rpb25PZmZzZXQoUmVuZGVyQmxv
Y2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jayk7CiBW
aXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFJlc3BlY3RpbmdFZGl0aW5nQm91bmRhcmll
cyhSZW5kZXJCbG9jayYsIFJlbmRlckJveCYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKLWlubGlu
ZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2s+IFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1v
dXNXaXRoUGFyZW50UmVuZGVyZXJBbmREaXNwbGF5KGNvbnN0IFJlbmRlckJveCYgcGFyZW50LCBF
RGlzcGxheSBkaXNwbGF5KQoraW5saW5lIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gUmVuZGVyQmxv
Y2s6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlckFuZERpc3BsYXkoY29uc3QgUmVu
ZGVyQm94JiBwYXJlbnQsIEVEaXNwbGF5IGRpc3BsYXkpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUFu
b255bW91c0Jsb2NrV2l0aFN0eWxlQW5kRGlzcGxheShwYXJlbnQuZG9jdW1lbnQoKSwgcGFyZW50
LnN0eWxlKCksIGRpc3BsYXkpOwogfQogCi1pbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJv
eD4gUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJl
bmRlckJveCYgcmVuZGVyZXIpIGNvbnN0CitpbmxpbmUgUmVuZGVyUHRyPFJlbmRlckJveD4gUmVu
ZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJv
eCYgcmVuZGVyZXIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNyZWF0ZUFub255bW91c0Jsb2NrV2l0
aFN0eWxlQW5kRGlzcGxheShkb2N1bWVudCgpLCByZW5kZXJlci5zdHlsZSgpLCBzdHlsZSgpLmRp
c3BsYXkoKSk7CiB9CiAKLWlubGluZSBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmNyZWF0ZUFu
b255bW91c0Jsb2NrKEVEaXNwbGF5IGRpc3BsYXkpIGNvbnN0CitpbmxpbmUgUmVuZGVyUHRyPFJl
bmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2soRURpc3BsYXkgZGlz
cGxheSkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVB
bmREaXNwbGF5KGRvY3VtZW50KCksIHN0eWxlKCksIGRpc3BsYXkpLnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gY3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KGRvY3VtZW50KCks
IHN0eWxlKCksIGRpc3BsYXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNpb24g
MjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4MzUsMjQgKzM4MzUsMjQgQEAgdm9pZCBSZW5kZXJCbG9ja0Zs
b3c6OmxheW91dEV4Y2x1ZGVkQ2hpbAogICAgIGRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25G
b3JDaGlsZCgqZnJhZ21lbnRlZEZsb3cpOwogfQogCi12b2lkIFJlbmRlckJsb2NrRmxvdzo6YWRk
Q2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkK
K3ZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBu
ZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBpZiAobXVsdGlDb2x1
bW5GbG93KCkgJiYgKCFpc0ZpZWxkc2V0KCkgfHwgIW5ld0NoaWxkLT5pc0xlZ2VuZCgpKSkKLSAg
ICAgICAgcmV0dXJuIG11bHRpQ29sdW1uRmxvdygpLT5hZGRDaGlsZChuZXdDaGlsZCwgYmVmb3Jl
Q2hpbGQpOworICAgICAgICByZXR1cm4gbXVsdGlDb2x1bW5GbG93KCktPmFkZENoaWxkKFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgYXV0byogYmVmb3JlQ2hpbGRPclBsYWNl
aG9sZGVyID0gYmVmb3JlQ2hpbGQ7CiAgICAgaWYgKGF1dG8qIGNvbnRhaW5pbmdGcmFnbWVudGVk
RmxvdyA9IGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93KCkpCiAgICAgICAgIGJlZm9yZUNoaWxkT3JQ
bGFjZWhvbGRlciA9IGNvbnRhaW5pbmdGcmFnbWVudGVkRmxvdy0+cmVzb2x2ZU1vdmVkQ2hpbGQo
YmVmb3JlQ2hpbGQpOwotICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChuZXdDaGlsZCwgYmVmb3Jl
Q2hpbGRPclBsYWNlaG9sZGVyKTsKKyAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoV1RGTW92ZShu
ZXdDaGlsZCksIGJlZm9yZUNoaWxkT3JQbGFjZWhvbGRlcik7CiB9CiAKLXZvaWQgUmVuZGVyQmxv
Y2tGbG93OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQorUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4gUmVuZGVyQmxvY2tGbG93Ojp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRD
aGlsZCkKIHsKICAgICBpZiAoIXJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKSB7CiAgICAgICAg
IFJlbmRlckZyYWdtZW50ZWRGbG93KiBmcmFnbWVudGVkRmxvdyA9IG11bHRpQ29sdW1uRmxvdygp
OwogICAgICAgICBpZiAoZnJhZ21lbnRlZEZsb3cgJiYgZnJhZ21lbnRlZEZsb3cgIT0gJm9sZENo
aWxkKQogICAgICAgICAgICAgZnJhZ21lbnRlZEZsb3ctPmZyYWdtZW50ZWRGbG93UmVsYXRpdmVX
aWxsQmVSZW1vdmVkKG9sZENoaWxkKTsKICAgICB9Ci0gICAgUmVuZGVyQmxvY2s6OnJlbW92ZUNo
aWxkKG9sZENoaWxkKTsKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnRha2VDaGlsZChvbGRDaGls
ZCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpjaGVja0ZvclBhZ2luYXRpb25Mb2dpY2Fs
SGVpZ2h0Q2hhbmdlKGJvb2wmIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQmIHBhZ2VMb2dp
Y2FsSGVpZ2h0LCBib29sJiBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCShyZXZpc2lvbiAyMjI2MDcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4Miw4ICszODIsOCBAQCBwdWJsaWM6CiAgICAgTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0Rm9yQ2hpbGRGb3JGcmFnbWVudGF0aW9uKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0
OwogICAgIGJvb2wgaGFzTmV4dFBhZ2UoTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBQYWdlQm91
bmRhcnlSdWxlID0gRXhjbHVkZVBhZ2VCb3VuZGFyeSkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZENo
aWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAw
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRl
OworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiB0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IHVwZGF0ZUNvbHVtblByb2dyZXNzaW9uRnJvbVN0eWxlKFJlbmRlclN0eWxlJik7CiAgICAgdm9p
ZCB1cGRhdGVTdHlsZXNGb3JDb2x1bW5DaGlsZHJlbigpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTMxLDIwICs0OTMx
LDIxIEBAIFJlbmRlck9iamVjdCogUmVuZGVyQm94OjpzcGxpdEFub255bW91c0IKIAogICAgICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBzcGxpdCB0aGUgcGFyZW50IGJveCBpbnRvIHR3byBib3hlcyBh
bmQgbW92ZSBjaGlsZHJlbgogICAgICAgICAgICAgLy8gZnJvbSB8YmVmb3JlQ2hpbGR8IHRvIGVu
ZCBpbnRvIHRoZSBuZXcgcG9zdCBib3guCi0gICAgICAgICAgICBhdXRvKiBwb3N0Qm94ID0gYm94
VG9TcGxpdC5jcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcygqdGhpcykucmVsZWFzZSgp
OwotICAgICAgICAgICAgcG9zdEJveC0+c2V0Q2hpbGRyZW5JbmxpbmUoYm94VG9TcGxpdC5jaGls
ZHJlbklubGluZSgpKTsKKyAgICAgICAgICAgIGF1dG8gbmV3UG9zdEJveCA9IGJveFRvU3BsaXQu
Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoKnRoaXMpOworICAgICAgICAgICAgYXV0
byYgcG9zdEJveCA9ICpuZXdQb3N0Qm94OworICAgICAgICAgICAgcG9zdEJveC5zZXRDaGlsZHJl
bklubGluZShib3hUb1NwbGl0LmNoaWxkcmVuSW5saW5lKCkpOwogICAgICAgICAgICAgUmVuZGVy
Qm94KiBwYXJlbnRCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KGJveFRvU3BsaXQucGFyZW50KCkp
OwogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBpbnZhbGlkYXRlIHRoZSB8cGFyZW50Qm94fCBi
ZWZvcmUgaW5zZXJ0aW5nIHRoZSBuZXcgbm9kZQogICAgICAgICAgICAgLy8gc28gdGhhdCB0aGUg
dGFibGUgcmVwYWludGluZyBsb2dpYyBrbm93cyB0aGUgc3RydWN0dXJlIGlzIGRpcnR5LgogICAg
ICAgICAgICAgLy8gU2VlIGZvciBleGFtcGxlIFJlbmRlclRhYmxlQ2VsbDpjbGlwcGVkT3ZlcmZs
b3dSZWN0Rm9yUmVwYWludC4KICAgICAgICAgICAgIG1hcmtCb3hGb3JSZWxheW91dEFmdGVyU3Bs
aXQoKnBhcmVudEJveCk7Ci0gICAgICAgICAgICBwYXJlbnRCb3gtPmluc2VydENoaWxkSW50ZXJu
YWwocG9zdEJveCwgYm94VG9TcGxpdC5uZXh0U2libGluZygpLCBOb3RpZnlDaGlsZHJlbik7Ci0g
ICAgICAgICAgICBib3hUb1NwbGl0Lm1vdmVDaGlsZHJlblRvKHBvc3RCb3gsIGJlZm9yZUNoaWxk
LCBudWxscHRyLCB0cnVlKTsKKyAgICAgICAgICAgIHBhcmVudEJveC0+aW5zZXJ0Q2hpbGRJbnRl
cm5hbChXVEZNb3ZlKG5ld1Bvc3RCb3gpLCBib3hUb1NwbGl0Lm5leHRTaWJsaW5nKCksIE5vdGlm
eUNoaWxkcmVuKTsKKyAgICAgICAgICAgIGJveFRvU3BsaXQubW92ZUNoaWxkcmVuVG8oJnBvc3RC
b3gsIGJlZm9yZUNoaWxkLCBudWxscHRyLCB0cnVlKTsKIAogICAgICAgICAgICAgbWFya0JveEZv
clJlbGF5b3V0QWZ0ZXJTcGxpdChib3hUb1NwbGl0KTsKLSAgICAgICAgICAgIG1hcmtCb3hGb3JS
ZWxheW91dEFmdGVyU3BsaXQoKnBvc3RCb3gpOworICAgICAgICAgICAgbWFya0JveEZvclJlbGF5
b3V0QWZ0ZXJTcGxpdChwb3N0Qm94KTsKIAotICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBwb3N0
Qm94OworICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSAmcG9zdEJveDsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICBiZWZvcmVDaGlsZCA9ICZib3hUb1NwbGl0OwogICAgIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNTkyLDcg
KzU5Miw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGxheW91dE92ZXJmbG93UmVjdC55KCkg
PCB5KCkgfHwgbGF5b3V0T3ZlcmZsb3dSZWN0Lm1heFkoKSA+IHkoKSArIGxvZ2ljYWxIZWlnaHQo
KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3g+IGNyZWF0
ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0CisgICAg
dmlydHVhbCBSZW5kZXJQdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5
cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMjI2
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTk2LDEyICsyNTk2LDEyIEBAIHZvaWQgUmVuZGVyQm94TW9k
ZWxPYmplY3Q6Om1vdmVDaGlsZFRvKFIKICAgICBpZiAoZnVsbFJlbW92ZUluc2VydCAmJiAodG9C
b3hNb2RlbE9iamVjdC0+aXNSZW5kZXJCbG9jaygpIHx8IHRvQm94TW9kZWxPYmplY3QtPmlzUmVu
ZGVySW5saW5lKCkpKSB7CiAgICAgICAgIC8vIFRha2VzIGNhcmUgb2YgYWRkaW5nIHRoZSBuZXcg
Y2hpbGQgY29ycmVjdGx5IGlmIHRvQmxvY2sgYW5kIGZyb21CbG9jawogICAgICAgICAvLyBoYXZl
IGRpZmZlcmVudCBraW5kIG9mIGNoaWxkcmVuIChibG9jayB2cyBpbmxpbmUpLgotICAgICAgICBy
ZW1vdmVDaGlsZEludGVybmFsKCpjaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwotICAgICAgICB0b0Jv
eE1vZGVsT2JqZWN0LT5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBhdXRv
IGNoaWxkVG9Nb3ZlID0gdGFrZUNoaWxkSW50ZXJuYWwoKmNoaWxkLCBOb3RpZnlDaGlsZHJlbik7
CisgICAgICAgIHRvQm94TW9kZWxPYmplY3QtPmFkZENoaWxkKFdURk1vdmUoY2hpbGRUb01vdmUp
LCBiZWZvcmVDaGlsZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTm90aWZ5Q2hpbGRyZW5UeXBl
IG5vdGlmeVR5cGUgPSBmdWxsUmVtb3ZlSW5zZXJ0ID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90
aWZ5Q2hpbGRyZW47Ci0gICAgICAgIHJlbW92ZUNoaWxkSW50ZXJuYWwoKmNoaWxkLCBub3RpZnlU
eXBlKTsKLSAgICAgICAgdG9Cb3hNb2RlbE9iamVjdC0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChjaGls
ZCwgYmVmb3JlQ2hpbGQsIG5vdGlmeVR5cGUpOworICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0g
dGFrZUNoaWxkSW50ZXJuYWwoKmNoaWxkLCBub3RpZnlUeXBlKTsKKyAgICAgICAgdG9Cb3hNb2Rl
bE9iamVjdC0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgYmVmb3Jl
Q2hpbGQsIG5vdGlmeVR5cGUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJ1dHRvbi5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCdXR0b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywzMCAr
NjMsMzEgQEAgYm9vbCBSZW5kZXJCdXR0b246Omhhc0xpbmVJZkVtcHR5KCkgY29ucwogICAgIHJl
dHVybiBpczxIVE1MSW5wdXRFbGVtZW50Pihmb3JtQ29udHJvbEVsZW1lbnQoKSk7CiB9CiAKLXZv
aWQgUmVuZGVyQnV0dG9uOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJCdXR0b246OmFkZENoaWxkKFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewog
ICAgIGlmICghbV9pbm5lcikgewogICAgICAgICAvLyBDcmVhdGUgYW4gYW5vbnltb3VzIGJsb2Nr
LgogICAgICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7Ci0gICAgICAgIG1faW5uZXIgPSBjcmVh
dGVBbm9ueW1vdXNCbG9jayhzdHlsZSgpLmRpc3BsYXkoKSk7Ci0gICAgICAgIHVwZGF0ZUFub255
bW91c0NoaWxkU3R5bGUoKm1faW5uZXIsIG1faW5uZXItPm11dGFibGVTdHlsZSgpKTsKLSAgICAg
ICAgUmVuZGVyRmxleGlibGVCb3g6OmFkZENoaWxkKG1faW5uZXIpOworICAgICAgICBhdXRvIG5l
d0lubmVyID0gY3JlYXRlQW5vbnltb3VzQmxvY2soc3R5bGUoKS5kaXNwbGF5KCkpOworICAgICAg
ICB1cGRhdGVBbm9ueW1vdXNDaGlsZFN0eWxlKCpuZXdJbm5lciwgbmV3SW5uZXItPm11dGFibGVT
dHlsZSgpKTsKKyAgICAgICAgbV9pbm5lciA9IG5ld0lubmVyLmdldCgpOworICAgICAgICBSZW5k
ZXJGbGV4aWJsZUJveDo6YWRkQ2hpbGQoV1RGTW92ZShuZXdJbm5lcikpOwogICAgIH0KICAgICAK
LSAgICBtX2lubmVyLT5hZGRDaGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgIG1faW5u
ZXItPmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiB9CiAKLXZvaWQg
UmVuZGVyQnV0dG9uOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQorUmVuZGVy
UHRyPFJlbmRlck9iamVjdD4gUmVuZGVyQnV0dG9uOjp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBv
bGRDaGlsZCkKIHsKICAgICAvLyBtX2lubmVyIHNob3VsZCBiZSB0aGUgb25seSBjaGlsZCwgYnV0
IGNoZWNraW5nIGZvciBkaXJlY3QgY2hpbGRyZW4gd2hvCiAgICAgLy8gYXJlIG5vdCBtX2lubmVy
IHByZXZlbnRzIHNlY3VyaXR5IHByb2JsZW1zIHdoZW4gdGhhdCBhc3N1bXB0aW9uIGlzCiAgICAg
Ly8gdmlvbGF0ZWQuCiAgICAgaWYgKCZvbGRDaGlsZCA9PSBtX2lubmVyIHx8ICFtX2lubmVyIHx8
IG9sZENoaWxkLnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgQVNTRVJUKCZvbGRDaGlsZCA9
PSBtX2lubmVyIHx8ICFtX2lubmVyKTsKLSAgICAgICAgUmVuZGVyRmxleGlibGVCb3g6OnJlbW92
ZUNoaWxkKG9sZENoaWxkKTsKICAgICAgICAgbV9pbm5lciA9IG51bGxwdHI7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIG1faW5uZXItPnJlbW92ZUNoaWxkKG9sZENoaWxkKTsKKyAgICAgICAgcmV0dXJu
IFJlbmRlckZsZXhpYmxlQm94Ojp0YWtlQ2hpbGQob2xkQ2hpbGQpOworICAgIH0KKyAgICByZXR1
cm4gbV9pbm5lci0+dGFrZUNoaWxkKG9sZENoaWxkKTsKIH0KICAgICAKIHZvaWQgUmVuZGVyQnV0
dG9uOjp1cGRhdGVBbm9ueW1vdXNDaGlsZFN0eWxlKGNvbnN0IFJlbmRlck9iamVjdCYgY2hpbGQs
IFJlbmRlclN0eWxlJiBjaGlsZFN0eWxlKSBjb25zdApAQCAtMTI4LDggKzEyOSw5IEBAIHZvaWQg
UmVuZGVyQnV0dG9uOjpzZXRUZXh0KGNvbnN0IFN0cmluZyYKICAgICAgICAgaWYgKG1fYnV0dG9u
VGV4dCkKICAgICAgICAgICAgIG1fYnV0dG9uVGV4dC0+c2V0VGV4dChzdHIuaW1wbCgpKTsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2J1dHRvblRleHQgPSBuZXcgUmVuZGVyVGV4dEZy
YWdtZW50KGRvY3VtZW50KCksIHN0cik7Ci0gICAgICAgICAgICBhZGRDaGlsZChtX2J1dHRvblRl
eHQpOworICAgICAgICAgICAgYXV0byBuZXdCdXR0b25UZXh0ID0gY3JlYXRlUmVuZGVyZXI8UmVu
ZGVyVGV4dEZyYWdtZW50Pihkb2N1bWVudCgpLCBzdHIpOworICAgICAgICAgICAgbV9idXR0b25U
ZXh0ID0gbmV3QnV0dG9uVGV4dC5nZXQoKTsKKyAgICAgICAgICAgIGFkZENoaWxkKFdURk1vdmUo
bmV3QnV0dG9uVGV4dCkpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCdXR0b24uaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1dHRvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw4ICs0
MCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRl
ck9iamVjdCAqYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUNoaWxk
KFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCAqYmVmb3JlQ2hpbGQgPSAwKSBvdmVy
cmlkZTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0Jsb2NrKFJlbmRl
ckJsb2NrKikgb3ZlcnJpZGUgeyB9CiAgICAgYm9vbCBjcmVhdGVzQW5vbnltb3VzV3JhcHBlcigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NTUsMjMgKzQ1NSwyNiBAQCBib29sIFJlbmRlckVsZW1lbnQ6OmNoaWxkUmVxdWlyZXNUYWJsZShj
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFJlbmRlckVsZW1lbnQ6OmFkZENoaWxkKFJl
bmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJl
bmRlckVsZW1lbnQ6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewotICAgIGlmIChjaGlsZFJlcXVpcmVzVGFibGUo
Km5ld0NoaWxkKSkgeworICAgIGF1dG8mIGNoaWxkID0gKm5ld0NoaWxkOworICAgIGlmIChjaGls
ZFJlcXVpcmVzVGFibGUoY2hpbGQpKSB7CiAgICAgICAgIFJlbmRlclRhYmxlKiB0YWJsZTsKICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBhZnRlckNoaWxkID0gYmVmb3JlQ2hpbGQgPyBiZWZvcmVDaGls
ZC0+cHJldmlvdXNTaWJsaW5nKCkgOiBtX2xhc3RDaGlsZDsKICAgICAgICAgaWYgKGFmdGVyQ2hp
bGQgJiYgYWZ0ZXJDaGlsZC0+aXNBbm9ueW1vdXMoKSAmJiBpczxSZW5kZXJUYWJsZT4oKmFmdGVy
Q2hpbGQpICYmICFhZnRlckNoaWxkLT5pc0JlZm9yZUNvbnRlbnQoKSkKICAgICAgICAgICAgIHRh
YmxlID0gZG93bmNhc3Q8UmVuZGVyVGFibGU+KGFmdGVyQ2hpbGQpOwogICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIHRhYmxlID0gUmVuZGVyVGFibGU6OmNyZWF0ZUFub255bW91c1dpdGhQYXJl
bnRSZW5kZXJlcigqdGhpcykucmVsZWFzZSgpOwotICAgICAgICAgICAgYWRkQ2hpbGQodGFibGUs
IGJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIGF1dG8gbmV3VGFibGUgPSAgUmVuZGVyVGFibGU6
OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcyk7CisgICAgICAgICAgICB0
YWJsZSA9IG5ld1RhYmxlLmdldCgpOworICAgICAgICAgICAgYWRkQ2hpbGQoV1RGTW92ZShuZXdU
YWJsZSksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgfQotICAgICAgICB0YWJsZS0+YWRkQ2hpbGQo
bmV3Q2hpbGQpOworCisgICAgICAgIHRhYmxlLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSk7
CiAgICAgfSBlbHNlCi0gICAgICAgIGluc2VydENoaWxkSW50ZXJuYWwobmV3Q2hpbGQsIGJlZm9y
ZUNoaWxkLCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAgIGluc2VydENoaWxkSW50ZXJuYWwoV1RG
TW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkLCBOb3RpZnlDaGlsZHJlbik7CiAKLSAgICBpZiAo
aXM8UmVuZGVyVGV4dD4oKm5ld0NoaWxkKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4o
Km5ld0NoaWxkKS5zdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2VFcXVhbCwgbnVsbHB0cik7
CisgICAgaWYgKGlzPFJlbmRlclRleHQ+KGNoaWxkKSkKKyAgICAgICAgZG93bmNhc3Q8UmVuZGVy
VGV4dD4oY2hpbGQpLnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZUVxdWFsLCBudWxscHRy
KTsKIAogICAgIC8vIFNWRyBjcmVhdGVzIHJlbmRlcmVycyBmb3IgPGcgZGlzcGxheT0ibm9uZSI+
LCBhcyBTVkcgcmVxdWlyZXMgY2hpbGRyZW4gb2YgaGlkZGVuCiAgICAgLy8gPGc+cyB0byBoYXZl
IHJlbmRlcmVycyAtIGF0IGxlYXN0IHRoYXQncyBob3cgb3VyIGltcGxlbWVudGF0aW9uIHdvcmtz
LiBDb25zaWRlcjoKQEAgLTQ4MSwyMiArNDg0LDMwIEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6YWRk
Q2hpbGQoUmVuZGVyT2JqZWMKICAgICAvLyAgIGtub3cgdGhhdCBpdCdzIGluc2lkZSBhICJoaWRk
ZW4gU1ZHIHN1YnRyZWUiLCBhbmQgdGh1cyBwYWludHMsIGV2ZW4gaWYgaXQgc2hvdWxkbid0Lgog
ICAgIC8vIFRvIGF2b2lkIHRoZSBwcm9ibGVtIGFsbHRvZ2V0aGVyLCBkZXRlY3QgZWFybHkgaWYg
d2UncmUgaW5zaWRlIGEgaGlkZGVuIFNWRyBzdWJ0cmVlCiAgICAgLy8gYW5kIHN0b3AgY3JlYXRp
bmcgbGF5ZXJzIGF0IGFsbCBmb3IgdGhlc2UgY2FzZXMgLSB0aGV5J3JlIG5vdCB1c2VkIGFueXdh
eXMuCi0gICAgaWYgKG5ld0NoaWxkLT5oYXNMYXllcigpICYmICFsYXllckNyZWF0aW9uQWxsb3dl
ZEZvclN1YnRyZWUoKSkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4o
Km5ld0NoaWxkKS5sYXllcigpLT5yZW1vdmVPbmx5VGhpc0xheWVyKCk7CisgICAgaWYgKGNoaWxk
Lmhhc0xheWVyKCkgJiYgIWxheWVyQ3JlYXRpb25BbGxvd2VkRm9yU3VidHJlZSgpKQorICAgICAg
ICBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihjaGlsZCkubGF5ZXIoKS0+cmVtb3Zl
T25seVRoaXNMYXllcigpOworCisgICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y2hpbGRBZGRlZCgqdGhp
cywgY2hpbGQpOworfQogCi0gICAgU1ZHUmVuZGVyU3VwcG9ydDo6Y2hpbGRBZGRlZCgqdGhpcywg
Km5ld0NoaWxkKTsKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlckVsZW1lbnQ6OnRha2VD
aGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQoreworICAgIHJldHVybiB0YWtlQ2hpbGRJbnRl
cm5hbChvbGRDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwogfQogCi12b2lkIFJlbmRlckVsZW1lbnQ6
OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCit2b2lkIFJlbmRlckVsZW1lbnQ6
OnJlbW92ZUFuZERlc3Ryb3lDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQogewotICAgIHJl
bW92ZUNoaWxkSW50ZXJuYWwob2xkQ2hpbGQsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICBhdXRvIHRv
RGVzdHJveSA9IHRha2VDaGlsZChvbGRDaGlsZCk7CiB9CiAKIHZvaWQgUmVuZGVyRWxlbWVudDo6
ZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKQogewogICAgIHdoaWxlIChtX2ZpcnN0Q2hpbGQpIHsK
ICAgICAgICAgaWYgKG1fZmlyc3RDaGlsZC0+c3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBGSVJTVF9M
RVRURVIgJiYgIW1fZmlyc3RDaGlsZC0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgIG1fZmlyc3RD
aGlsZC0+cmVtb3ZlRnJvbVBhcmVudCgpOyAvLyA6Zmlyc3QtbGV0dGVyIGZyYWdtZW50IHJlbmRl
cmVycyBhcmUgZGVzdHJveWVkIGJ5IHRoZWlyIHJlbWFpbmluZyB0ZXh0IGZyYWdtZW50LgorICAg
ICAgICAgICAgLy8gRklYTUU6IE1lbW9yeSBtYW5hZ2VtZW50LgorICAgICAgICAgICAgYXV0byBm
aXJzdExldHRlciA9IHRha2VDaGlsZCgqbV9maXJzdENoaWxkKTsgLy8gOmZpcnN0LWxldHRlciBm
cmFnbWVudCByZW5kZXJlcnMgYXJlIGRlc3Ryb3llZCBieSB0aGVpciByZW1haW5pbmcgdGV4dCBm
cmFnbWVudC4KKyAgICAgICAgICAgIGF1dG8qIGxlYWtlZFB0ciA9IGZpcnN0TGV0dGVyLmxlYWtQ
dHIoKTsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShsZWFrZWRQdHIpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gRGVzdHJveSBhbnkgYW5vbnltb3VzIGNoaWxkcmVuIHJlbWFp
bmluZyBpbiB0aGUgcmVuZGVyIHRyZWUsIGFzIHdlbGwgYXMgaW1wbGljaXQgKHNoYWRvdykgRE9N
IGVsZW1lbnRzIGxpa2UgdGhvc2UgdXNlZCBpbiB0aGUgZW5naW5lLWJhc2VkIHRleHQgZmllbGRz
LgogICAgICAgICAgICAgaWYgKG1fZmlyc3RDaGlsZC0+bm9kZSgpKQpAQCAtNTA2LDI0ICs1MTcs
MjEgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpkZXN0cm95TGVmdG92ZXJDaGlsZAogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJFbGVtZW50OjppbnNlcnRDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCog
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIE5vdGlmeUNoaWxkcmVuVHlwZSBu
b3RpZnlDaGlsZHJlbikKK3ZvaWQgUmVuZGVyRWxlbWVudDo6aW5zZXJ0Q2hpbGRJbnRlcm5hbChS
ZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZFB0ciwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCwgTm90aWZ5Q2hpbGRyZW5UeXBlIG5vdGlmeUNoaWxkcmVuKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUX1dJVEhfTUVTU0FHRSghdmlldygpLmxheW91dFN0YXRlKCksICJMYXlvdXQgbXVzdCBu
b3QgbXV0YXRlIHJlbmRlciB0cmVlIik7CiAKICAgICBBU1NFUlQoY2FuSGF2ZUNoaWxkcmVuKCkg
fHwgY2FuSGF2ZUdlbmVyYXRlZENoaWxkcmVuKCkpOwotICAgIEFTU0VSVCghbmV3Q2hpbGQtPnBh
cmVudCgpKTsKLSAgICBBU1NFUlQoIWlzUmVuZGVyQmxvY2tGbG93KCkgfHwgKCFuZXdDaGlsZC0+
aXNUYWJsZVNlY3Rpb24oKSAmJiAhbmV3Q2hpbGQtPmlzVGFibGVSb3coKSAmJiAhbmV3Q2hpbGQt
PmlzVGFibGVDZWxsKCkpKTsKKyAgICBBU1NFUlQoIW5ld0NoaWxkUHRyLT5wYXJlbnQoKSk7Cisg
ICAgQVNTRVJUKCFpc1JlbmRlckJsb2NrRmxvdygpIHx8ICghbmV3Q2hpbGRQdHItPmlzVGFibGVT
ZWN0aW9uKCkgJiYgIW5ld0NoaWxkUHRyLT5pc1RhYmxlUm93KCkgJiYgIW5ld0NoaWxkUHRyLT5p
c1RhYmxlQ2VsbCgpKSk7CiAKICAgICB3aGlsZSAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQt
PnBhcmVudCgpICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQogICAgICAgICBiZWZv
cmVDaGlsZCA9IGJlZm9yZUNoaWxkLT5wYXJlbnQoKTsKIAotICAgIC8vIFRoaXMgc2hvdWxkIG5l
dmVyIGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMgcHJldmVudCByZW5kZXIgdHJlZSBjb3JydXB0aW9u
Ci0gICAgLy8gd2hlcmUgY2hpbGQtPnBhcmVudCgpIGVuZHMgdXAgYmVpbmcgb3duZXIgYnV0IGNo
aWxkLT5uZXh0U2libGluZygpLT5wYXJlbnQoKQotICAgIC8vIGlzIG5vdCBvd25lci4KLSAgICBp
ZiAoYmVmb3JlQ2hpbGQgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpICE9IHRoaXMpIHsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNT
RVJUKCFiZWZvcmVDaGlsZCB8fCBiZWZvcmVDaGlsZC0+cGFyZW50KCkgPT0gdGhpcyk7CisKKyAg
ICAvLyBUYWtlIHRoZSBvd25lcnNoaXAuCisgICAgYXV0byogbmV3Q2hpbGQgPSBuZXdDaGlsZFB0
ci5sZWFrUHRyKCk7CiAKICAgICBuZXdDaGlsZC0+c2V0UGFyZW50KHRoaXMpOwogCkBAIC01NjUs
NyArNTczLDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjppbnNlcnRDaGlsZEludGVybmFsKAogICAg
ICAgICBuZXdDaGlsZC0+c2V0SGFzT3V0bGluZUF1dG9BbmNlc3RvcigpOwogfQogCi12b2lkIFJl
bmRlckVsZW1lbnQ6OnJlbW92ZUNoaWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCwg
Tm90aWZ5Q2hpbGRyZW5UeXBlIG5vdGlmeUNoaWxkcmVuKQorUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gUmVuZGVyRWxlbWVudDo6dGFrZUNoaWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0JiBvbGRDaGls
ZCwgTm90aWZ5Q2hpbGRyZW5UeXBlIG5vdGlmeUNoaWxkcmVuKQogewogICAgIFJFTEVBU0VfQVNT
RVJUX1dJVEhfTUVTU0FHRSghdmlldygpLmxheW91dFN0YXRlKCksICJMYXlvdXQgbXVzdCBub3Qg
bXV0YXRlIHJlbmRlciB0cmVlIik7CiAKQEAgLTYzOCw2ICs2NDYsOCBAQCB2b2lkIFJlbmRlckVs
ZW1lbnQ6OnJlbW92ZUNoaWxkSW50ZXJuYWwoCiAgICAgaWYgKGlzPFJlbmRlckxpc3RNYXJrZXI+
KG9sZENoaWxkKSkKICAgICAgICAgQVNTRVJUKG1fcmVwYXJlbnRpbmdDaGlsZCB8fCAhZG93bmNh
c3Q8UmVuZGVyTGlzdE1hcmtlcj4ob2xkQ2hpbGQpLmxpc3RJdGVtKCkuaW5MYXlvdXQoKSk7CiAj
ZW5kaWYKKworICAgIHJldHVybiBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0Pigmb2xkQ2hpbGQpOwog
fQogCiBSZW5kZXJCbG9jayogUmVuZGVyRWxlbWVudDo6Y29udGFpbmluZ0Jsb2NrRm9yRml4ZWRQ
b3NpdGlvbigpIGNvbnN0CkBAIC05MzcsMTAgKzk0NywxMSBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6
OmhhbmRsZUR5bmFtaWNGbG9hdFBvCiAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3hNb2Rl
bE9iamVjdD4oKnBhcmVudCgpKS5jaGlsZEJlY2FtZU5vbklubGluZSgqdGhpcyk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgLy8gQW4gYW5vbnltb3VzIGJsb2NrIG11c3QgYmUgbWFkZSB0
byB3cmFwIHRoaXMgaW5saW5lLgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGJsb2NrID0gZG93
bmNhc3Q8UmVuZGVyQmxvY2s+KCpwYXJlbnQoKSkuY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKLSAg
ICAgICAgICAgIHBhcmVudCgpLT5pbnNlcnRDaGlsZEludGVybmFsKGJsb2NrLCB0aGlzLCBSZW5k
ZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7Ci0gICAgICAgICAgICBwYXJlbnQoKS0+cmVtb3Zl
Q2hpbGRJbnRlcm5hbCgqdGhpcywgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOwotICAg
ICAgICAgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwodGhpcywgbnVsbHB0ciwgUmVuZGVy
RWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgYXV0byBuZXdCbG9jayA9IGRv
d25jYXN0PFJlbmRlckJsb2NrPigqcGFyZW50KCkpLmNyZWF0ZUFub255bW91c0Jsb2NrKCk7Cisg
ICAgICAgICAgICBhdXRvJiBibG9jayA9ICpuZXdCbG9jazsKKyAgICAgICAgICAgIHBhcmVudCgp
LT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3QmxvY2spLCB0aGlzLCBSZW5kZXJFbGVt
ZW50OjpOb3RpZnlDaGlsZHJlbik7CisgICAgICAgICAgICBhdXRvIHRoaXNUb01vdmUgPSBwYXJl
bnQoKS0+dGFrZUNoaWxkSW50ZXJuYWwoKnRoaXMsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNoaWxk
cmVuKTsKKyAgICAgICAgICAgIGJsb2NrLmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZSh0aGlz
VG9Nb3ZlKSwgbnVsbHB0ciwgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOwogICAgICAg
ICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSwxMCBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc1JlbmRlcklubGluZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzQ2hpbGRB
bGxvd2VkKGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5l
d0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7Ci0gICAgdmlydHVh
bCB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpIHsgcmV0dXJuIGFkZENoaWxk
KG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ2hpbGQo
UmVuZGVyT2JqZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cik7CisgICAgdmly
dHVhbCB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKSB7IGFk
ZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7IH0KKyAgICB2aXJ0dWFsIFJl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBXQVJOX1VOVVNF
RF9SRVRVUk47CisgICAgdm9pZCByZW1vdmVBbmREZXN0cm95Q2hpbGQoUmVuZGVyT2JqZWN0Jik7
CiAKICAgICAvLyBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIHRoZSByZW5k
ZXIgdHJlZSBoaWVyYXJjaHkgY2hhbmdlcyB0byBtYWtlIHN1cmUgbGF5ZXJzIGdldAogICAgIC8v
IHByb3Blcmx5IGFkZGVkIGFuZCByZW1vdmVkLiBTaW5jZSBjb250YWluZXJzaGlwIGNhbiBiZSBp
bXBsZW1lbnRlZCBieSBhbnkgc3ViY2xhc3MsIGFuZCBzaW5jZSBhIGhpZXJhcmNoeQpAQCAtOTgs
OCArOTksOCBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTGF5ZXIqIGZpbmROZXh0TGF5ZXIoUmVuZGVy
TGF5ZXIqIHBhcmVudExheWVyLCBSZW5kZXJPYmplY3QqIHN0YXJ0UG9pbnQsIGJvb2wgY2hlY2tQ
YXJlbnQgPSB0cnVlKTsKIAogICAgIGVudW0gTm90aWZ5Q2hpbGRyZW5UeXBlIHsgTm90aWZ5Q2hp
bGRyZW4sIERvbnROb3RpZnlDaGlsZHJlbiB9OwotICAgIHZvaWQgaW5zZXJ0Q2hpbGRJbnRlcm5h
bChSZW5kZXJPYmplY3QqLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBOb3RpZnlDaGlsZHJl
blR5cGUpOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGRJbnRlcm5hbChSZW5kZXJPYmplY3QmLCBOb3Rp
ZnlDaGlsZHJlblR5cGUpOworICAgIHZvaWQgaW5zZXJ0Q2hpbGRJbnRlcm5hbChSZW5kZXJQdHI8
UmVuZGVyT2JqZWN0PiwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW5U
eXBlKTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtlQ2hpbGRJbnRlcm5hbChSZW5k
ZXJPYmplY3QmLCBOb3RpZnlDaGlsZHJlblR5cGUpIFdBUk5fVU5VU0VEX1JFVFVSTjsKIAogICAg
IHZpcnR1YWwgUmVuZGVyRWxlbWVudCogaG92ZXJBbmNlc3RvcigpIGNvbnN0OwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uY3BwCShyZXZpc2lv
biAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDYgQEAgUmVuZGVyRnVsbFNjcmVlbjo6UmVu
ZGVyRnVsbFNjcmVlbihEb2N1bQogdm9pZCBSZW5kZXJGdWxsU2NyZWVuOjp3aWxsQmVEZXN0cm95
ZWQoKQogewogICAgIGlmIChtX3BsYWNlaG9sZGVyKSB7Ci0gICAgICAgIHJlbW92ZUZyb21QYXJl
bnQoKTsKICAgICAgICAgaWYgKCFtX3BsYWNlaG9sZGVyLT5iZWluZ0Rlc3Ryb3llZCgpKQogICAg
ICAgICAgICAgbV9wbGFjZWhvbGRlci0+ZGVzdHJveSgpOwogICAgICAgICBBU1NFUlQoIW1fcGxh
Y2Vob2xkZXIpOwpAQCAtMTA0LDM4ICsxMDMsNTMgQEAgc3RhdGljIFJlbmRlclN0eWxlIGNyZWF0
ZUZ1bGxTY3JlZW5TdHlsZQogICAgIHJldHVybiBmdWxsc2NyZWVuU3R5bGU7CiB9CiAKLVJlbmRl
ckZ1bGxTY3JlZW4qIFJlbmRlckZ1bGxTY3JlZW46OndyYXBSZW5kZXJlcihSZW5kZXJPYmplY3Qq
IG9iamVjdCwgUmVuZGVyRWxlbWVudCogcGFyZW50LCBEb2N1bWVudCYgZG9jdW1lbnQpCitSZW5k
ZXJQdHI8UmVuZGVyRnVsbFNjcmVlbj4gUmVuZGVyRnVsbFNjcmVlbjo6d3JhcE5ld1JlbmRlcmVy
KFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiByZW5kZXJlciwgUmVuZGVyRWxlbWVudCYgcGFyZW50
LCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgUmVuZGVyRnVsbFNjcmVlbiogZnVsbHNjcmVl
blJlbmRlcmVyID0gbmV3IFJlbmRlckZ1bGxTY3JlZW4oZG9jdW1lbnQsIGNyZWF0ZUZ1bGxTY3Jl
ZW5TdHlsZSgpKTsKLSAgICBmdWxsc2NyZWVuUmVuZGVyZXItPmluaXRpYWxpemVTdHlsZSgpOwot
ICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC0+aXNDaGlsZEFsbG93ZWQoKmZ1bGxzY3JlZW5SZW5k
ZXJlciwgZnVsbHNjcmVlblJlbmRlcmVyLT5zdHlsZSgpKSkgewotICAgICAgICBmdWxsc2NyZWVu
UmVuZGVyZXItPmRlc3Ryb3koKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChv
YmplY3QpIHsKLSAgICAgICAgLy8gfG9iamVjdC0+cGFyZW50KCl8IGNhbiBiZSBudWxsIGlmIHRo
ZSBvYmplY3QgaXMgbm90IHlldCBhdHRhY2hlZAotICAgICAgICAvLyB0byB8cGFyZW50fC4KLSAg
ICAgICAgaWYgKFJlbmRlckVsZW1lbnQqIHBhcmVudCA9IG9iamVjdC0+cGFyZW50KCkpIHsKLSAg
ICAgICAgICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2sgPSBvYmplY3QtPmNvbnRhaW5p
bmdCbG9jaygpOwotICAgICAgICAgICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jayk7Ci0gICAgICAg
ICAgICAvLyBTaW5jZSB3ZSBhcmUgbW92aW5nIHRoZSB8b2JqZWN0fCB0byBhIG5ldyBwYXJlbnQg
fGZ1bGxzY3JlZW5SZW5kZXJlcnwsCi0gICAgICAgICAgICAvLyB0aGUgbGluZSBib3ggdHJlZSB1
bmRlcm5lYXRoIG91ciB8Y29udGFpbmluZ0Jsb2NrfCBpcyBub3QgbG9uZ2VyIHZhbGlkLgotICAg
ICAgICAgICAgY29udGFpbmluZ0Jsb2NrLT5kZWxldGVMaW5lcygpOwotCi0gICAgICAgICAgICBw
YXJlbnQtPmFkZENoaWxkKGZ1bGxzY3JlZW5SZW5kZXJlciwgb2JqZWN0KTsKLSAgICAgICAgICAg
IG9iamVjdC0+cmVtb3ZlRnJvbVBhcmVudCgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBBbHdheXMganVzdCBkbyBhIGZ1bGwgbGF5b3V0IHRvIGVuc3VyZSB0aGF0IGxpbmUgYm94ZXMg
Z2V0IGRlbGV0ZWQgcHJvcGVybHkuCi0gICAgICAgICAgICAvLyBCZWNhdXNlIG9iamVjdHMgbW92
ZWQgZnJvbSB8cGFyZW50fCB0byB8ZnVsbHNjcmVlblJlbmRlcmVyfCwgd2Ugd2FudCB0bwotICAg
ICAgICAgICAgLy8gbWFrZSBuZXcgbGluZSBib3hlcyBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIG9s
ZCBvbmVzIGFyb3VuZC4KLSAgICAgICAgICAgIHBhcmVudC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCk7Ci0gICAgICAgICAgICBjb250YWluaW5nQmxvY2stPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgICAgICB9Ci0gICAgICAgIGZ1bGxzY3JlZW5S
ZW5kZXJlci0+YWRkQ2hpbGQob2JqZWN0KTsKLSAgICAgICAgZnVsbHNjcmVlblJlbmRlcmVyLT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAgICB9Ci0gICAgZG9jdW1lbnQu
c2V0RnVsbFNjcmVlblJlbmRlcmVyKGZ1bGxzY3JlZW5SZW5kZXJlcik7Ci0gICAgcmV0dXJuIGZ1
bGxzY3JlZW5SZW5kZXJlcjsKKyAgICBhdXRvIG5ld0Z1bGxzY3JlZW5SZW5kZXJlciA9IGNyZWF0
ZVJlbmRlcmVyPFJlbmRlckZ1bGxTY3JlZW4+KGRvY3VtZW50LCBjcmVhdGVGdWxsU2NyZWVuU3R5
bGUoKSk7CisgICAgbmV3RnVsbHNjcmVlblJlbmRlcmVyLT5pbml0aWFsaXplU3R5bGUoKTsKKwor
ICAgIGF1dG8mIGZ1bGxzY3JlZW5SZW5kZXJlciA9ICpuZXdGdWxsc2NyZWVuUmVuZGVyZXI7Cisg
ICAgaWYgKCFwYXJlbnQuaXNDaGlsZEFsbG93ZWQoZnVsbHNjcmVlblJlbmRlcmVyLCBmdWxsc2Ny
ZWVuUmVuZGVyZXIuc3R5bGUoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgZnVs
bHNjcmVlblJlbmRlcmVyLmFkZENoaWxkKFdURk1vdmUocmVuZGVyZXIpKTsKKyAgICBmdWxsc2Ny
ZWVuUmVuZGVyZXIuc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisKKyAgICBk
b2N1bWVudC5zZXRGdWxsU2NyZWVuUmVuZGVyZXIoJmZ1bGxzY3JlZW5SZW5kZXJlcik7CisKKyAg
ICByZXR1cm4gbmV3RnVsbHNjcmVlblJlbmRlcmVyOworfQorCit2b2lkIFJlbmRlckZ1bGxTY3Jl
ZW46OndyYXBFeGlzdGluZ1JlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBEb2N1bWVu
dCYgZG9jdW1lbnQpCit7CisgICAgYXV0byBuZXdGdWxsc2NyZWVuUmVuZGVyZXIgPSBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJGdWxsU2NyZWVuPihkb2N1bWVudCwgY3JlYXRlRnVsbFNjcmVlblN0eWxl
KCkpOworICAgIG5ld0Z1bGxzY3JlZW5SZW5kZXJlci0+aW5pdGlhbGl6ZVN0eWxlKCk7CisKKyAg
ICBhdXRvJiBmdWxsc2NyZWVuUmVuZGVyZXIgPSAqbmV3RnVsbHNjcmVlblJlbmRlcmVyOworICAg
IGF1dG8mIHBhcmVudCA9ICpyZW5kZXJlci5wYXJlbnQoKTsKKyAgICBpZiAoIXBhcmVudC5pc0No
aWxkQWxsb3dlZChmdWxsc2NyZWVuUmVuZGVyZXIsIGZ1bGxzY3JlZW5SZW5kZXJlci5zdHlsZSgp
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9
IHJlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpOworICAgIEFTU0VSVChjb250YWluaW5nQmxvY2sp
OworICAgIC8vIFNpbmNlIHdlIGFyZSBtb3ZpbmcgdGhlIHxvYmplY3R8IHRvIGEgbmV3IHBhcmVu
dCB8ZnVsbHNjcmVlblJlbmRlcmVyfCwKKyAgICAvLyB0aGUgbGluZSBib3ggdHJlZSB1bmRlcm5l
YXRoIG91ciB8Y29udGFpbmluZ0Jsb2NrfCBpcyBub3QgbG9uZ2VyIHZhbGlkLgorICAgIGNvbnRh
aW5pbmdCbG9jay0+ZGVsZXRlTGluZXMoKTsKKworICAgIHBhcmVudC5hZGRDaGlsZChXVEZNb3Zl
KG5ld0Z1bGxzY3JlZW5SZW5kZXJlciksICZyZW5kZXJlcik7CisKKyAgICBhdXRvIHRvTW92ZSA9
IHBhcmVudC50YWtlQ2hpbGQocmVuZGVyZXIpOworCisgICAgLy8gQWx3YXlzIGp1c3QgZG8gYSBm
dWxsIGxheW91dCB0byBlbnN1cmUgdGhhdCBsaW5lIGJveGVzIGdldCBkZWxldGVkIHByb3Blcmx5
LgorICAgIC8vIEJlY2F1c2Ugb2JqZWN0cyBtb3ZlZCBmcm9tIHxwYXJlbnR8IHRvIHxmdWxsc2Ny
ZWVuUmVuZGVyZXJ8LCB3ZSB3YW50IHRvCisgICAgLy8gbWFrZSBuZXcgbGluZSBib3hlcyBpbnN0
ZWFkIG9mIGxlYXZpbmcgdGhlIG9sZCBvbmVzIGFyb3VuZC4KKyAgICBwYXJlbnQuc2V0TmVlZHNM
YXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgY29udGFpbmluZ0Jsb2NrLT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKworICAgIGZ1bGxzY3JlZW5SZW5kZXJlci5h
ZGRDaGlsZChXVEZNb3ZlKHRvTW92ZSkpOworICAgIGZ1bGxzY3JlZW5SZW5kZXJlci5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKworICAgIGRvY3VtZW50LnNldEZ1bGxTY3Jl
ZW5SZW5kZXJlcigmZnVsbHNjcmVlblJlbmRlcmVyKTsKIH0KIAogdm9pZCBSZW5kZXJGdWxsU2Ny
ZWVuOjp1bndyYXBSZW5kZXJlcihib29sJiByZXF1aXJlc1JlbmRlclRyZWVSZWJ1aWxkKQpAQCAt
MTU5LDggKzE3Myw3IEBAIHZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6dW53cmFwUmVuZGVyZXIoYm8K
ICAgICAgICAgICAgICAgICBpZiAoYXV0byogbm9uQW5vbnltb3VzQ2hpbGQgPSBkb3duY2FzdDxS
ZW5kZXJCbG9jaz4oKmNoaWxkKS5maXJzdENoaWxkKCkpCiAgICAgICAgICAgICAgICAgICAgIGNo
aWxkID0gbm9uQW5vbnltb3VzQ2hpbGQ7CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGNoaWxkLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGNoaWxkLT5kZXN0cm95KCk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5yZW1vdmVG
cm9tUGFyZW50QW5kRGVzdHJveSgpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNjksMTUgKzE4MiwxOCBAQCB2b2lk
IFJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKGJvCiAgICAgICAgICAgICAvLyBseWlu
ZyBhcm91bmQgb24gdGhlIGNoaWxkLgogICAgICAgICAgICAgaWYgKGlzPFJlbmRlckJveD4oKmNo
aWxkKSkKICAgICAgICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCb3g+KCpjaGlsZCkuY2xlYXJP
dmVycmlkZVNpemUoKTsKLSAgICAgICAgICAgIGNoaWxkLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0g
ICAgICAgICAgICBwYXJlbnQoKS0+YWRkQ2hpbGQoY2hpbGQsIHRoaXMpOworICAgICAgICAgICAg
YXV0byBjaGlsZFRvTW92ZSA9IGNoaWxkLT5wYXJlbnQoKS0+dGFrZUNoaWxkKCpjaGlsZCk7Cisg
ICAgICAgICAgICBwYXJlbnQoKS0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZFRvTW92ZSksIHRoaXMp
OwogICAgICAgICAgICAgcGFyZW50KCktPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChwbGFjZWhvbGRlcigpKQotICAgICAgICBw
bGFjZWhvbGRlcigpLT5yZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgcmVtb3ZlRnJvbVBhcmVudCgp
OwotICAgIGRvY3VtZW50KCkuc2V0RnVsbFNjcmVlblJlbmRlcmVyKDApOworICAgICAgICBwbGFj
ZWhvbGRlcigpLT5yZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOworICAgIEFTU0VSVCghcGxh
Y2Vob2xkZXIoKSk7CisKKyAgICByZW1vdmVGcm9tUGFyZW50QW5kRGVzdHJveSgpOworICAgIAor
ICAgIEFTU0VSVCghZG9jdW1lbnQoKS5mdWxsU2NyZWVuUmVuZGVyZXIoKSk7CiB9CiAKIHZvaWQg
UmVuZGVyRnVsbFNjcmVlbjo6c2V0UGxhY2Vob2xkZXIoUmVuZGVyQmxvY2sqIHBsYWNlaG9sZGVy
KQpAQCAtMTk3LDEyICsyMTMsMTYgQEAgdm9pZCBSZW5kZXJGdWxsU2NyZWVuOjpjcmVhdGVQbGFj
ZWhvbGRlcgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wbGFjZWhvbGRlciA9IG5l
dyBSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xkZXIoKnRoaXMsIFdURk1vdmUoKnN0eWxlKSk7Ci0g
ICAgbV9wbGFjZWhvbGRlci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgaWYgKHBhcmVudCgpKSB7
Ci0gICAgICAgIHBhcmVudCgpLT5hZGRDaGlsZChtX3BsYWNlaG9sZGVyLCB0aGlzKTsKLSAgICAg
ICAgcGFyZW50KCktPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwotICAgIH0K
KyAgICBpZiAoIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG5ld1BsYWNl
aG9sZGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyRnVsbFNjcmVlblBsYWNlaG9sZGVyPigqdGhp
cywgV1RGTW92ZSgqc3R5bGUpKTsKKyAgICBuZXdQbGFjZWhvbGRlci0+aW5pdGlhbGl6ZVN0eWxl
KCk7CisKKyAgICBtX3BsYWNlaG9sZGVyID0gbmV3UGxhY2Vob2xkZXIuZ2V0KCk7CisKKyAgICBw
YXJlbnQoKS0+YWRkQ2hpbGQoV1RGTW92ZShuZXdQbGFjZWhvbGRlciksIHRoaXMpOworICAgIHBh
cmVudCgpLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oCShyZXZpc2lv
biAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJCbG9j
ayogcGxhY2Vob2xkZXIoKSB7IHJldHVybiBtX3BsYWNlaG9sZGVyOyB9CiAgICAgdm9pZCBjcmVh
dGVQbGFjZWhvbGRlcihzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+LCBjb25zdCBMYXlvdXRS
ZWN0JiBmcmFtZVJlY3QpOwogCi0gICAgc3RhdGljIFJlbmRlckZ1bGxTY3JlZW4qIHdyYXBSZW5k
ZXJlcihSZW5kZXJPYmplY3QqLCBSZW5kZXJFbGVtZW50KiwgRG9jdW1lbnQmKTsKKyAgICBzdGF0
aWMgUmVuZGVyUHRyPFJlbmRlckZ1bGxTY3JlZW4+IHdyYXBOZXdSZW5kZXJlcihSZW5kZXJQdHI8
UmVuZGVyRWxlbWVudD4sIFJlbmRlckVsZW1lbnQmIHBhcmVudCwgRG9jdW1lbnQmKTsKKyAgICBz
dGF0aWMgdm9pZCB3cmFwRXhpc3RpbmdSZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgRG9jdW1lbnQm
KTsKICAgICB2b2lkIHVud3JhcFJlbmRlcmVyKGJvb2wmIHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVp
bGQpOwogCiAgICAgSXRlbVBvc2l0aW9uIHNlbGZBbGlnbm1lbnROb3JtYWxCZWhhdmlvcihjb25z
dCBSZW5kZXJCb3gqID0gbnVsbHB0cikgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gSXRlbVBvc2l0
aW9uQ2VudGVyOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuY3Bw
CShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3Jp
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDEzICs2NiwxNCBAQCBSZW5kZXJHcmlkOjp+UmVu
ZGVyR3JpZCgpCiB7CiB9CiAKLXZvaWQgUmVuZGVyR3JpZDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0
KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyR3JpZDo6
YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVuZGVyQmxvY2s6OmFkZENoaWxkKG5ld0NoaWxkLCBiZWZv
cmVDaGlsZCk7CisgICAgYXV0byYgY2hpbGQgPSAqbmV3Q2hpbGQ7CisgICAgUmVuZGVyQmxvY2s6
OmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAKICAgICAvLyBQb3Np
dGlvbmVkIGdyaWQgaXRlbXMgZG8gbm90IHRha2UgdXAgc3BhY2Ugb3Igb3RoZXJ3aXNlIHBhcnRp
Y2lwYXRlIGluIHRoZSBsYXlvdXQgb2YgdGhlIGdyaWQsCiAgICAgLy8gZm9yIHRoYXQgcmVhc29u
IHdlIGRvbid0IG5lZWQgdG8gbWFyayB0aGUgZ3JpZCBhcyBkaXJ0eSB3aGVuIHRoZXkgYXJlIGFk
ZGVkLgotICAgIGlmIChuZXdDaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCisgICAgaWYg
KGNoaWxkLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBUaGUgZ3JpZCBuZWVkcyB0byBiZSByZWNvbXB1dGVkIGFzIGl0IG1pZ2h0IGNvbnRhaW4gYXV0
by1wbGFjZWQgaXRlbXMgdGhhdApAQCAtODAsMTggKzgxLDE5IEBAIHZvaWQgUmVuZGVyR3JpZDo6
YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiAKICAgICBkaXJ0eUdyaWQoKTsKIH0KIAotdm9pZCBSZW5k
ZXJHcmlkOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQorUmVuZGVyUHRyPFJlbmRl
ck9iamVjdD4gUmVuZGVyR3JpZDo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCiB7Ci0g
ICAgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKGNoaWxkKTsKKyAgICBhdXRvIHRha2VuQ2hpbGQg
PSBSZW5kZXJCbG9jazo6dGFrZUNoaWxkKGNoaWxkKTsKIAogICAgIC8vIFBvc2l0aW9uZWQgZ3Jp
ZCBpdGVtcyBkbyBub3QgdGFrZSB1cCBzcGFjZSBvciBvdGhlcndpc2UgcGFydGljaXBhdGUgaW4g
dGhlIGxheW91dCBvZiB0aGUgZ3JpZCwKICAgICAvLyBmb3IgdGhhdCByZWFzb24gd2UgZG9uJ3Qg
bmVlZCB0byBtYXJrIHRoZSBncmlkIGFzIGRpcnR5IHdoZW4gdGhleSBhcmUgcmVtb3ZlZC4KICAg
ICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRha2VuQ2hpbGQ7CiAKICAgICAvLyBUaGUgZ3JpZCBuZWVkcyB0byBiZSBy
ZWNvbXB1dGVkIGFzIGl0IG1pZ2h0IGNvbnRhaW4gYXV0by1wbGFjZWQgaXRlbXMgdGhhdAogICAg
IC8vIHdpbGwgY2hhbmdlIHRoZWlyIHBvc2l0aW9uLgogICAgIGRpcnR5R3JpZCgpOworICAgIHJl
dHVybiB0YWtlbkNoaWxkOwogfQogCiBTdHlsZVNlbGZBbGlnbm1lbnREYXRhIFJlbmRlckdyaWQ6
OnNlbGZBbGlnbm1lbnRGb3JDaGlsZChHcmlkQXhpcyBheGlzLCBjb25zdCBSZW5kZXJCb3gmIGNo
aWxkLCBjb25zdCBSZW5kZXJTdHlsZSogZ3JpZFN0eWxlKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw4ICs3OSw4
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc1JlbmRlckdyaWQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAgICAgdm9pZCBjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlv
dXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29u
c3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQo
UmVuZGVyT2JqZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVy
T2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkgZmluYWw7CisgICAg
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIGZpbmFsOwog
CiAgICAgU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBzZWxmQWxpZ25tZW50Rm9yQ2hpbGQoR3JpZEF4
aXMsIGNvbnN0IFJlbmRlckJveCYsIGNvbnN0IFJlbmRlclN0eWxlKiA9IG51bGxwdHIpIGNvbnN0
OwogICAgIGJvb2wgc2VsZkFsaWdubWVudENoYW5nZWRUb1N0cmV0Y2goR3JpZEF4aXMsIGNvbnN0
IFJlbmRlclN0eWxlJiBvbGRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBjb25z
dCBSZW5kZXJCb3gmKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDE0ICsyNzAsMTYgQEAg
TGF5b3V0UmVjdCBSZW5kZXJJbmxpbmU6OmxvY2FsQ2FyZXRSZWN0KAogICAgIHJldHVybiBjYXJl
dFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5l
d0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJJbmxpbmU6OmFk
ZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQogewogICAgIGF1dG8qIGJlZm9yZUNoaWxkT3JQbGFjZWhvbGRlciA9IGJlZm9y
ZUNoaWxkOwogICAgIGlmIChhdXRvKiBmcmFnbWVudGVkRmxvdyA9IGVuY2xvc2luZ0ZyYWdtZW50
ZWRGbG93KCkpCiAgICAgICAgIGJlZm9yZUNoaWxkT3JQbGFjZWhvbGRlciA9IGZyYWdtZW50ZWRG
bG93LT5yZXNvbHZlTW92ZWRDaGlsZChiZWZvcmVDaGlsZCk7Ci0gICAgaWYgKGNvbnRpbnVhdGlv
bigpKQotICAgICAgICByZXR1cm4gYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVm
b3JlQ2hpbGRPclBsYWNlaG9sZGVyKTsKLSAgICByZXR1cm4gYWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyKTsKKyAgICBpZiAoY29u
dGludWF0aW9uKCkpIHsKKyAgICAgICAgYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5l
d0NoaWxkKSwgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBi
ZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIpOwogfQogCiBzdGF0aWMgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIG5leHRDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKQEAgLTMxOCw3ICsz
MjAsNyBAQCBzdGF0aWMgYm9vbCBuZXdDaGlsZElzSW5saW5lKGNvbnN0IFJlbmRlCiAgICAgcmV0
dXJuIG5ld0NoaWxkLmlzSW5saW5lKCkgfCAocGFyZW50LmNoaWxkUmVxdWlyZXNUYWJsZShuZXdD
aGlsZCkgJiYgcGFyZW50LnN0eWxlKCkuZGlzcGxheSgpID09IElOTElORSk7CiB9CiAKLXZvaWQg
UmVuZGVySW5saW5lOjphZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlck9iamVjdCog
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlcklubGluZTo6
YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdD
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICAvLyBNYWtlIHN1cmUgd2Ug
ZG9uJ3QgYXBwZW5kIHRoaW5ncyBhZnRlciA6YWZ0ZXItZ2VuZXJhdGVkIGNvbnRlbnQgaWYgd2Ug
aGF2ZSBpdC4KICAgICBpZiAoIWJlZm9yZUNoaWxkICYmIGlzQWZ0ZXJDb250ZW50KGxhc3RDaGls
ZCgpKSkKQEAgLTMzOCwxNyArMzQwLDE4IEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZEln
bm9yaW5nQ29udGkKICAgICAgICAgaWYgKGF1dG8gcG9zaXRpb25lZEFuY2VzdG9yID0gaW5GbG93
UG9zaXRpb25lZElubGluZUFuY2VzdG9yKHRoaXMpKQogICAgICAgICAgICAgbmV3U3R5bGUuc2V0
UG9zaXRpb24ocG9zaXRpb25lZEFuY2VzdG9yLT5zdHlsZSgpLnBvc2l0aW9uKCkpOwogCi0gICAg
ICAgIFJlbmRlckJsb2NrKiBuZXdCb3ggPSBuZXcgUmVuZGVyQmxvY2tGbG93KGRvY3VtZW50KCks
IFdURk1vdmUobmV3U3R5bGUpKTsKKyAgICAgICAgYXV0byBuZXdCb3ggPSBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJCbG9ja0Zsb3c+KGRvY3VtZW50KCksIFdURk1vdmUobmV3U3R5bGUpKTsKICAgICAg
ICAgbmV3Qm94LT5pbml0aWFsaXplU3R5bGUoKTsKICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmpl
Y3QqIG9sZENvbnRpbnVhdGlvbiA9IGNvbnRpbnVhdGlvbigpOwotICAgICAgICBzZXRDb250aW51
YXRpb24obmV3Qm94KTsKKyAgICAgICAgc2V0Q29udGludWF0aW9uKG5ld0JveC5nZXQoKSk7CiAK
LSAgICAgICAgc3BsaXRGbG93KGJlZm9yZUNoaWxkLCBuZXdCb3gsIG5ld0NoaWxkLCBvbGRDb250
aW51YXRpb24pOworICAgICAgICBzcGxpdEZsb3coYmVmb3JlQ2hpbGQsIFdURk1vdmUobmV3Qm94
KSwgV1RGTW92ZShuZXdDaGlsZCksIG9sZENvbnRpbnVhdGlvbik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgCi0gICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmFkZENoaWxkKG5ld0NoaWxk
LCBiZWZvcmVDaGlsZCk7Ci0gICAgbmV3Q2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRo
c1JlY2FsYygpOworCisgICAgYXV0byYgY2hpbGQgPSAqbmV3Q2hpbGQ7CisgICAgUmVuZGVyQm94
TW9kZWxPYmplY3Q6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Cisg
ICAgY2hpbGQuc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIFJlbmRl
clB0cjxSZW5kZXJJbmxpbmU+IFJlbmRlcklubGluZTo6Y2xvbmUoKSBjb25zdApAQCAtNDA3LDgg
KzQxMCw4IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBhbm9ueW1vdXMgd3JhcHBlciBoYXMgbXVsdGlwbGUg
Y2hpbGRyZW4sIHdlIGVuZCB1cCB0cmF2ZXJzaW5nIHVwIHRvIHRoZSB0b3Btb3N0IHdyYXBwZXIK
ICAgICAgICAgICAgIC8vIGV2ZXJ5IHRpbWUsIHdoaWNoIGlzIGEgYml0IHdhc3RlZnVsLgogICAg
ICAgICB9Ci0gICAgICAgIHJlbmRlcmVyVG9Nb3ZlLT5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGRJbnRl
cm5hbCgqcmVuZGVyZXJUb01vdmUsIE5vdGlmeUNoaWxkcmVuKTsKLSAgICAgICAgY2xvbmVJbmxp
bmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24ocmVuZGVyZXJUb01vdmUpOworICAgICAg
ICBhdXRvIGNoaWxkVG9Nb3ZlID0gcmVuZGVyZXJUb01vdmUtPnBhcmVudCgpLT50YWtlQ2hpbGRJ
bnRlcm5hbCgqcmVuZGVyZXJUb01vdmUsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgY2xvbmVJ
bmxpbmUtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShjaGlsZFRvTW92ZSkp
OwogICAgICAgICByZW5kZXJlclRvTW92ZS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVj
YWxjKCk7CiAgICAgICAgIHJlbmRlcmVyVG9Nb3ZlID0gbmV4dFNpYmxpbmc7CiAgICAgfQpAQCAt
NDM1LDcgKzQzOCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwK
ICAgICAgICAgICAgIGNsb25lSW5saW5lID0gZG93bmNhc3Q8UmVuZGVySW5saW5lPigqY3VycmVu
dCkuY2xvbmUoKTsKIAogICAgICAgICAgICAgLy8gSW5zZXJ0IG91ciBjaGlsZCBjbG9uZSBhcyB0
aGUgZmlyc3QgY2hpbGQuCi0gICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbihjbG9uZUNoaWxkLmxlYWtQdHIoKSk7CisgICAgICAgICAgICBjbG9uZUlu
bGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKGNsb25lQ2hpbGQpKTsK
IAogICAgICAgICAgICAgLy8gSG9vayB0aGUgY2xvbmUgdXAgYXMgYSBjb250aW51YXRpb24gb2Yg
fGN1cnJ8LgogICAgICAgICAgICAgUmVuZGVySW5saW5lJiBjdXJyZW50SW5saW5lID0gZG93bmNh
c3Q8UmVuZGVySW5saW5lPigqY3VycmVudCk7CkBAIC00NDcsOCArNDUwLDggQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhSZW5kZXJCbAogICAgICAgICAgICAgLy8gKmFmdGVyKiBj
dXJyZW50Q2hpbGQgYW5kIGFwcGVuZCB0aGVtIGFsbCB0byB0aGUgY2xvbmUuCiAgICAgICAgICAg
ICBmb3IgKGF1dG8qIGN1cnJlbnQgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7IGN1cnJl
bnQ7KSB7CiAgICAgICAgICAgICAgICAgYXV0byogbmV4dCA9IGN1cnJlbnQtPm5leHRTaWJsaW5n
KCk7Ci0gICAgICAgICAgICAgICAgY3VycmVudElubGluZS5yZW1vdmVDaGlsZEludGVybmFsKCpj
dXJyZW50LCBOb3RpZnlDaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgY2xvbmVJbmxpbmUtPmFk
ZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oY3VycmVudCk7CisgICAgICAgICAgICAgICAgYXV0
byBjaGlsZFRvTW92ZSA9IGN1cnJlbnRJbmxpbmUudGFrZUNoaWxkSW50ZXJuYWwoKmN1cnJlbnQs
IE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJ
Z25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSk7CiAgICAgICAgICAgICAg
ICAgY3VycmVudC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAg
ICAgICAgICAgY3VycmVudCA9IG5leHQ7CiAgICAgICAgICAgICB9CkBAIC00NjUsMjcgKzQ2OCwy
OCBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxpbmVzKFJlbmRlckJsCiAgICAgICAgIGNs
b25lQmxvY2tDaGlsZC5yZXNldEVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93QW5kQ2hpbGRJbmZvSW5j
bHVkaW5nRGVzY2VuZGFudHMoKTsKIAogICAgIC8vIE5vdyB3ZSBhcmUgYXQgdGhlIGJsb2NrIGxl
dmVsLiBXZSBuZWVkIHRvIHB1dCB0aGUgY2xvbmUgaW50byB0aGUgdG9CbG9jay4KLSAgICB0b0Js
b2NrLT5pbnNlcnRDaGlsZEludGVybmFsKGNsb25lSW5saW5lLmxlYWtQdHIoKSwgbnVsbHB0ciwg
Tm90aWZ5Q2hpbGRyZW4pOworICAgIHRvQmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92
ZShjbG9uZUlubGluZSksIG51bGxwdHIsIE5vdGlmeUNoaWxkcmVuKTsKIAogICAgIC8vIE5vdyB0
YWtlIGFsbCB0aGUgY2hpbGRyZW4gYWZ0ZXIgY3VycmVudENoaWxkIGFuZCByZW1vdmUgdGhlbSBm
cm9tIHRoZSBmcm9tQmxvY2sKICAgICAvLyBhbmQgcHV0IHRoZW0gaW4gdGhlIHRvQmxvY2suCiAg
ICAgZm9yIChhdXRvKiBjdXJyZW50ID0gY3VycmVudENoaWxkLT5uZXh0U2libGluZygpOyBjdXJy
ZW50OykgewogICAgICAgICBhdXRvKiBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAg
ICAgICAgZnJvbUJsb2NrLT5yZW1vdmVDaGlsZEludGVybmFsKCpjdXJyZW50LCBOb3RpZnlDaGls
ZHJlbik7Ci0gICAgICAgIHRvQmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwoY3VycmVudCwgbnVs
bHB0ciwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gZnJvbUJs
b2NrLT50YWtlQ2hpbGRJbnRlcm5hbCgqY3VycmVudCwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAg
ICB0b0Jsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY2hpbGRUb01vdmUpLCBudWxs
cHRyLCBOb3RpZnlDaGlsZHJlbik7CiAgICAgICAgIGN1cnJlbnQgPSBuZXh0OwogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
LCBSZW5kZXJCbG9jayogbmV3QmxvY2tCb3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250KQor
dm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBS
ZW5kZXJQdHI8UmVuZGVyQmxvY2s+IG5ld0Jsb2NrQm94LCBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0
PiBuZXdDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpCiB7CisgICAgYXV0byYg
YWRkZWRCbG9ja0JveCA9ICpuZXdCbG9ja0JveDsKICAgICBSZW5kZXJCbG9jayogcHJlID0gbnVs
bHB0cjsKICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBjb250YWluaW5nQmxvY2soKTsKLSAgICAK
KwogICAgIC8vIERlbGV0ZSBvdXIgbGluZSBib3hlcyBiZWZvcmUgd2UgZG8gdGhlIGlubGluZSBz
cGxpdCBpbnRvIGNvbnRpbnVhdGlvbnMuCiAgICAgYmxvY2stPmRlbGV0ZUxpbmVzKCk7Ci0gICAg
CisKKyAgICBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IGNyZWF0ZWRQcmU7CiAgICAgYm9vbCBtYWRl
TmV3QmVmb3JlQmxvY2sgPSBmYWxzZTsKICAgICBpZiAoYmxvY2stPmlzQW5vbnltb3VzQmxvY2so
KSAmJiAoIWJsb2NrLT5wYXJlbnQoKSB8fCAhYmxvY2stPnBhcmVudCgpLT5jcmVhdGVzQW5vbnlt
b3VzV3JhcHBlcigpKSkgewogICAgICAgICAvLyBXZSBjYW4gcmV1c2UgdGhpcyBibG9jayBhbmQg
bWFrZSBpdCB0aGUgcHJlQmxvY2sgb2YgdGhlIG5leHQgY29udGludWF0aW9uLgpAQCAtNDk5LDE3
ICs1MDMsMTkgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJPYmplYwogICAg
ICAgICBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBObyBhbm9ueW1vdXMgYmxvY2sgYXZhaWxhYmxlIGZvciB1c2UuICBNYWtlIG9uZS4K
LSAgICAgICAgcHJlID0gYmxvY2stPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgIGNy
ZWF0ZWRQcmUgPSBibG9jay0+Y3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAgICAgICAgcHJlID0g
Y3JlYXRlZFByZS5nZXQoKTsKICAgICAgICAgbWFkZU5ld0JlZm9yZUJsb2NrID0gdHJ1ZTsKICAg
ICB9CiAKLSAgICBhdXRvJiBwb3N0ID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KCpwcmUtPmNyZWF0
ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKCpibG9jaykucmVsZWFzZSgpKTsKKyAgICBhdXRv
IGNyZWF0ZWRQb3N0ID0gcHJlLT5jcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcygqYmxv
Y2spOworICAgIGF1dG8mIHBvc3QgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmNyZWF0ZWRQb3N0
KTsKIAogICAgIFJlbmRlck9iamVjdCogYm94Rmlyc3QgPSBtYWRlTmV3QmVmb3JlQmxvY2sgPyBi
bG9jay0+Zmlyc3RDaGlsZCgpIDogcHJlLT5uZXh0U2libGluZygpOwotICAgIGlmIChtYWRlTmV3
QmVmb3JlQmxvY2spCi0gICAgICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKHByZSwgYm94
Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKLSAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChu
ZXdCbG9ja0JveCwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKLSAgICBibG9jay0+aW5zZXJ0
Q2hpbGRJbnRlcm5hbCgmcG9zdCwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICBpZiAo
Y3JlYXRlZFByZSkKKyAgICAgICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShj
cmVhdGVkUHJlKSwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICBibG9jay0+aW5zZXJ0
Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld0Jsb2NrQm94KSwgYm94Rmlyc3QsIE5vdGlmeUNoaWxk
cmVuKTsKKyAgICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNyZWF0ZWRQb3N0
KSwgYm94Rmlyc3QsIE5vdGlmeUNoaWxkcmVuKTsKICAgICBibG9jay0+c2V0Q2hpbGRyZW5Jbmxp
bmUoZmFsc2UpOwogICAgIAogICAgIGlmIChtYWRlTmV3QmVmb3JlQmxvY2spIHsKQEAgLTUxNywy
MiArNTIzLDIyIEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWMKICAg
ICAgICAgd2hpbGUgKG8pIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbm8gPSBvOwogICAg
ICAgICAgICAgbyA9IG5vLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgYmxvY2stPnJlbW92
ZUNoaWxkSW50ZXJuYWwoKm5vLCBOb3RpZnlDaGlsZHJlbik7Ci0gICAgICAgICAgICBwcmUtPmlu
c2VydENoaWxkSW50ZXJuYWwobm8sIG51bGxwdHIsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAg
ICAgIGF1dG8gY2hpbGRUb01vdmUgPSBibG9jay0+dGFrZUNoaWxkSW50ZXJuYWwoKm5vLCBOb3Rp
ZnlDaGlsZHJlbik7CisgICAgICAgICAgICBwcmUtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92
ZShjaGlsZFRvTW92ZSksIG51bGxwdHIsIE5vdGlmeUNoaWxkcmVuKTsKICAgICAgICAgICAgIG5v
LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIHNwbGl0SW5saW5lcyhwcmUsICZwb3N0LCBuZXdCbG9ja0JveCwgYmVmb3JlQ2hpbGQs
IG9sZENvbnQpOworICAgIHNwbGl0SW5saW5lcyhwcmUsICZwb3N0LCAmYWRkZWRCbG9ja0JveCwg
YmVmb3JlQ2hpbGQsIG9sZENvbnQpOwogCiAgICAgLy8gV2UgYWxyZWFkeSBrbm93IHRoZSBuZXdC
bG9ja0JveCBpc24ndCBnb2luZyB0byBjb250YWluIGlubGluZSBraWRzLCBzbyBhdm9pZCB3YXN0
aW5nCiAgICAgLy8gdGltZSBpbiBtYWtlQ2hpbGRyZW5Ob25JbmxpbmUgYnkganVzdCBzZXR0aW5n
IHRoaXMgZXhwbGljaXRseSB1cCBmcm9udC4KLSAgICBuZXdCbG9ja0JveC0+c2V0Q2hpbGRyZW5J
bmxpbmUoZmFsc2UpOworICAgIGFkZGVkQmxvY2tCb3guc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2Up
OwogCiAgICAgLy8gV2UgZGVsYXllZCBhZGRpbmcgdGhlIG5ld0NoaWxkIHVudGlsIG5vdyBzbyB0
aGF0IHRoZSB8bmV3QmxvY2tCb3h8IHdvdWxkIGJlIGZ1bGx5CiAgICAgLy8gY29ubmVjdGVkLCB0
aHVzIGFsbG93aW5nIG5ld0NoaWxkIGFjY2VzcyB0byBhIHJlbmRlckFyZW5hIHNob3VsZCBpdCBu
ZWVkCiAgICAgLy8gdG8gd3JhcCBpdHNlbGYgaW4gYWRkaXRpb25hbCBib3hlcyAoZS5nLiwgdGFi
bGUgY29uc3RydWN0aW9uKS4KLSAgICBuZXdCbG9ja0JveC0+YWRkQ2hpbGQobmV3Q2hpbGQpOwor
ICAgIGFkZGVkQmxvY2tCb3guYWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCkpOwogCiAgICAgLy8g
QWx3YXlzIGp1c3QgZG8gYSBmdWxsIGxheW91dCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBsaW5l
IGJveGVzIChlc3BlY2lhbGx5IHdyYXBwZXJzIGZvciBpbWFnZXMpCiAgICAgLy8gZ2V0IGRlbGV0
ZWQgcHJvcGVybHkuICBCZWNhdXNlIG9iamVjdHMgbW92ZXMgZnJvbSB0aGUgcHJlIGJsb2NrIGlu
dG8gdGhlIHBvc3QgYmxvY2ssIHdlIHdhbnQgdG8KQEAgLTU1Myw3ICs1NTksNyBAQCBzdGF0aWMg
Ym9vbCBjYW5Vc2VBc1BhcmVudEZvckNvbnRpbnVhdGlvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlck9iamVjdCog
bmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlcklubGluZTo6
YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBhdXRvKiBmbG93ID0gY29udGludWF0
aW9uQmVmb3JlKGJlZm9yZUNoaWxkKTsKICAgICAvLyBJdCBtYXkgb3IgbWF5IG5vdCBiZSB0aGUg
ZGlyZWN0IHBhcmVudCBvZiB0aGUgYmVmb3JlQ2hpbGQuCkBAIC01NzgsMjAgKzU4NCwyMCBAQCB2
b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvCiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogCiAgICAgaWYgKG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGls
ZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJl
dHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdU
Rk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAKICAgICBpZiAoZmxvdyA9PSBiZWZvcmVD
aGlsZEFuY2VzdG9yKQotICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICByZXR1cm4gZmxvdy0+YWRk
Q2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQp
OwogICAgIC8vIEEgY29udGludWF0aW9uIGFsd2F5cyBjb25zaXN0cyBvZiB0d28gcG90ZW50aWFs
IGNhbmRpZGF0ZXM6IGFuIGlubGluZSBvciBhbiBhbm9ueW1vdXMKICAgICAvLyBibG9jayBib3gg
aG9sZGluZyBibG9jayBjaGlsZHJlbi4KICAgICBib29sIGNoaWxkSW5saW5lID0gbmV3Q2hpbGRJ
c0lubGluZSgqbmV3Q2hpbGQsICp0aGlzKTsKICAgICAvLyBUaGUgZ29hbCBoZXJlIGlzIHRvIG1h
dGNoIHVwIGlmIHdlIGNhbiwgc28gdGhhdCB3ZSBjYW4gY29hbGVzY2UgYW5kIGNyZWF0ZSB0aGUK
ICAgICAvLyBtaW5pbWFsICMgb2YgY29udGludWF0aW9ucyBuZWVkZWQgZm9yIHRoZSBpbmxpbmUu
CiAgICAgaWYgKGNoaWxkSW5saW5lID09IGJlZm9yZUNoaWxkQW5jZXN0b3ItPmlzSW5saW5lKCkp
Ci0gICAgICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29u
dGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybiBiZWZvcmVD
aGlsZEFuY2VzdG9yLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hp
bGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgaWYgKGZsb3ctPmlzSW5saW5lKCkgPT0gY2hpbGRJbmxp
bmUpCi0gICAgICAgIHJldHVybiBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5l
d0NoaWxkKTsgLy8gSnVzdCB0cmVhdCBsaWtlIGFuIGFwcGVuZC4KLSAgICByZXR1cm4gYmVmb3Jl
Q2hpbGRBbmNlc3Rvci0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihuZXdDaGlsZCwgYmVm
b3JlQ2hpbGQpOworICAgICAgICByZXR1cm4gZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVh
dGlvbihXVEZNb3ZlKG5ld0NoaWxkKSk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCisg
ICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5jZXN0b3ItPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRp
b24oV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKIH0KIAogdm9pZCBSZW5kZXJJbmxp
bmU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZXQpCkBAIC0xMzY4LDEyICsxMzc0LDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVE
cmFnU3RhdGUoYm9vbCAKIHZvaWQgUmVuZGVySW5saW5lOjpjaGlsZEJlY2FtZU5vbklubGluZShS
ZW5kZXJFbGVtZW50JiBjaGlsZCkKIHsKICAgICAvLyBXZSBoYXZlIHRvIHNwbGl0IHRoZSBwYXJl
bnQgZmxvdy4KLSAgICBSZW5kZXJCbG9jayogbmV3Qm94ID0gY29udGFpbmluZ0Jsb2NrKCktPmNy
ZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgYXV0byBuZXdCb3ggPSBjb250YWluaW5nQmxvY2so
KS0+Y3JlYXRlQW5vbnltb3VzQmxvY2soKTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xk
Q29udGludWF0aW9uID0gY29udGludWF0aW9uKCk7Ci0gICAgc2V0Q29udGludWF0aW9uKG5ld0Jv
eCk7CisgICAgc2V0Q29udGludWF0aW9uKG5ld0JveC5nZXQoKSk7CiAgICAgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nKCk7Ci0gICAgcmVtb3ZlQ2hpbGRJbnRl
cm5hbChjaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOwotICAgIHNwbGl0RmxvdyhiZWZvcmVDaGlsZCwg
bmV3Qm94LCAmY2hpbGQsIG9sZENvbnRpbnVhdGlvbik7CisgICAgYXV0byByZW1vdmVkQ2hpbGQg
PSB0YWtlQ2hpbGRJbnRlcm5hbChjaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOworICAgIHNwbGl0Rmxv
dyhiZWZvcmVDaGlsZCwgV1RGTW92ZShuZXdCb3gpLCBXVEZNb3ZlKHJlbW92ZWRDaGlsZCksIG9s
ZENvbnRpbnVhdGlvbik7CiB9CiAKIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVIaXRUZXN0UmVz
dWx0KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gMjIyNjA3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJJbmxpbmUoRWxlbWVudCYs
IFJlbmRlclN0eWxlJiYpOwogICAgIFJlbmRlcklubGluZShEb2N1bWVudCYsIFJlbmRlclN0eWxl
JiYpOwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5k
ZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9
IDApIG92ZXJyaWRlOwogCiAgICAgTGF5b3V0VW5pdCBtYXJnaW5MZWZ0KCkgY29uc3QgZmluYWw7
CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5SaWdodCgpIGNvbnN0IGZpbmFsOwpAQCAtMTIxLDEzICsx
MjEsMTEgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBHZW5lcmF0b3JDb250ZXh0
PgogICAgIHZvaWQgZ2VuZXJhdGVDdWxsZWRMaW5lQm94UmVjdHMoR2VuZXJhdG9yQ29udGV4dCYg
eWllbGQsIGNvbnN0IFJlbmRlcklubGluZSogY29udGFpbmVyKSBjb25zdDsKIAotICAgIHZvaWQg
YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKTsKLSAgICB2b2lkIGFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24o
UmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxw
dHIpIGZpbmFsOworICAgIHZvaWQgYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJQdHI8UmVu
ZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CisgICAgdm9p
ZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5l
d0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7CiAKLSAg
ICB2b2lkIHNwbGl0SW5saW5lcyhSZW5kZXJCbG9jayogZnJvbUJsb2NrLCBSZW5kZXJCbG9jayog
dG9CbG9jaywgUmVuZGVyQmxvY2sqIG1pZGRsZUJsb2NrLAotICAgICAgICAgICAgICAgICAgICAg
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250
KTsKLSAgICB2b2lkIHNwbGl0RmxvdyhSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBSZW5kZXJC
bG9jayogbmV3QmxvY2tCb3gsCi0gICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXdD
aGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpOworICAgIHZvaWQgc3BsaXRJbmxp
bmVzKFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLCBSZW5kZXJC
bG9jayogbWlkZGxlQmxvY2ssIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJveE1v
ZGVsT2JqZWN0KiBvbGRDb250KTsKKyAgICB2b2lkIHNwbGl0RmxvdyhSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkLCBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IG5ld0Jsb2NrQm94LCBSZW5kZXJQdHI8
UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpOwog
CiAgICAgdm9pZCBsYXlvdXQoKSBmaW5hbCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9IC8vIERv
IG5vdGhpbmcgZm9yIGxheW91dCgpCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDkgKzEw
OCwxMCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpjcmVhdGVJbm5lckJsb2NrKCkKIAogICAgIC8v
IENyZWF0ZSBhbiBhbm9ueW1vdXMgYmxvY2suCiAgICAgQVNTRVJUKCFmaXJzdENoaWxkKCkpOwot
ICAgIG1faW5uZXJCbG9jayA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgYXV0byBuZXdJ
bm5lckJsb2NrID0gY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAgICBtX2lubmVyQmxvY2sgPSBu
ZXdJbm5lckJsb2NrLmdldCgpOwogICAgIGFkanVzdElubmVyU3R5bGUoKTsKLSAgICBSZW5kZXJG
bGV4aWJsZUJveDo6YWRkQ2hpbGQobV9pbm5lckJsb2NrKTsKKyAgICBSZW5kZXJGbGV4aWJsZUJv
eDo6YWRkQ2hpbGQoV1RGTW92ZShuZXdJbm5lckJsb2NrKSk7CiB9CiAKIHZvaWQgUmVuZGVyTWVu
dUxpc3Q6OmFkanVzdElubmVyU3R5bGUoKQpAQCAtMTcyLDIzICsxNzMsMjQgQEAgSFRNTFNlbGVj
dEVsZW1lbnQmIFJlbmRlck1lbnVMaXN0OjpzZWxlYwogICAgIHJldHVybiBkb3duY2FzdDxIVE1M
U2VsZWN0RWxlbWVudD4obm9kZUZvck5vbkFub255bW91cygpKTsKIH0KIAotdm9pZCBSZW5kZXJN
ZW51TGlzdDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyTWVudUxpc3Q6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGNy
ZWF0ZUlubmVyQmxvY2soKTsKLSAgICBtX2lubmVyQmxvY2stPmFkZENoaWxkKG5ld0NoaWxkLCBi
ZWZvcmVDaGlsZCk7CisgICAgYXV0byYgY2hpbGQgPSAqbmV3Q2hpbGQ7CisgICAgbV9pbm5lckJs
b2NrLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgIEFTU0VS
VChtX2lubmVyQmxvY2sgPT0gZmlyc3RDaGlsZCgpKTsKIAogICAgIGlmIChBWE9iamVjdENhY2hl
KiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCi0gICAgICAgIGNh
Y2hlLT5jaGlsZHJlbkNoYW5nZWQodGhpcywgbmV3Q2hpbGQpOworICAgICAgICBjYWNoZS0+Y2hp
bGRyZW5DaGFuZ2VkKHRoaXMsICZjaGlsZCk7CiB9CiAKLXZvaWQgUmVuZGVyTWVudUxpc3Q6OnJl
bW92ZUNoaWxkKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0
PiBSZW5kZXJNZW51TGlzdDo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCiB7CiAg
ICAgaWYgKCZvbGRDaGlsZCA9PSBtX2lubmVyQmxvY2sgfHwgIW1faW5uZXJCbG9jaykgewotICAg
ICAgICBSZW5kZXJGbGV4aWJsZUJveDo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwogICAgICAgICBt
X2lubmVyQmxvY2sgPSAwOwotICAgIH0gZWxzZQotICAgICAgICBtX2lubmVyQmxvY2stPnJlbW92
ZUNoaWxkKG9sZENoaWxkKTsKKyAgICAgICAgcmV0dXJuIFJlbmRlckZsZXhpYmxlQm94Ojp0YWtl
Q2hpbGQob2xkQ2hpbGQpOworICAgIH0KKyAgICByZXR1cm4gbV9pbm5lckJsb2NrLT50YWtlQ2hp
bGQob2xkQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlck1lbnVMaXN0OjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQpAQCAtMjk1
LDkgKzI5NywxMSBAQCB2b2lkIFJlbmRlck1lbnVMaXN0OjpzZXRUZXh0KGNvbnN0IFN0cmluCiAg
ICAgaWYgKG1fYnV0dG9uVGV4dCkKICAgICAgICAgbV9idXR0b25UZXh0LT5zZXRUZXh0KHRleHRU
b1VzZS5pbXBsKCksIHRydWUpOwogICAgIGVsc2UgewotICAgICAgICBtX2J1dHRvblRleHQgPSBu
ZXcgUmVuZGVyVGV4dChkb2N1bWVudCgpLCB0ZXh0VG9Vc2UpOwotICAgICAgICBhZGRDaGlsZCht
X2J1dHRvblRleHQpOworICAgICAgICBhdXRvIG5ld0J1dHRvblRleHQgPSBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJUZXh0Pihkb2N1bWVudCgpLCB0ZXh0VG9Vc2UpOworICAgICAgICBtX2J1dHRvblRl
eHQgPSBuZXdCdXR0b25UZXh0LmdldCgpOworICAgICAgICBhZGRDaGlsZChXVEZNb3ZlKG5ld0J1
dHRvblRleHQpKTsKICAgICB9CisKICAgICBhZGp1c3RJbm5lclN0eWxlKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiAyMjI2
MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsOCArNjYsOCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc01lbnVMaXN0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCBhZGRDaGlsZChS
ZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwogICAgIGJvb2wgY3JlYXRl
c0Fub255bW91c1dyYXBwZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAKICAg
ICB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCkgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93LmNwcAkocmV2aXNpb24g
MjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NCwxMSArMTg0LDExIEBAIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5GbG93OjpldmFjdWF0ZUFuZEQKICAgICBTcGFubmVyTWFwOjppdGVyYXRvciBpdDsK
ICAgICB3aGlsZSAoKGl0ID0gbV9zcGFubmVyTWFwLmJlZ2luKCkpICE9IG1fc3Bhbm5lck1hcC5l
bmQoKSkgewogICAgICAgICBSZW5kZXJCb3gqIHNwYW5uZXIgPSBpdC0+a2V5OwotICAgICAgICBt
dWx0aWNvbENvbnRhaW5lci0+cmVtb3ZlQ2hpbGQoKnNwYW5uZXIpOworICAgICAgICBhdXRvIHRh
a2VuU3Bhbm5lciA9IG11bHRpY29sQ29udGFpbmVyLT50YWtlQ2hpbGQoKnNwYW5uZXIpOwogICAg
ICAgICBBU1NFUlQoaXQtPnZhbHVlLmdldCgpKTsKICAgICAgICAgaWYgKFJlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBwbGFjZWhvbGRlciA9IGl0LT52YWx1ZS5nZXQoKSkgewog
ICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93JiBvcmlnaW5hbENvbnRhaW5lciA9IGRvd25jYXN0
PFJlbmRlckJsb2NrRmxvdz4oKnBsYWNlaG9sZGVyLT5wYXJlbnQoKSk7Ci0gICAgICAgICAgICBv
cmlnaW5hbENvbnRhaW5lci5hZGRDaGlsZChzcGFubmVyLCBwbGFjZWhvbGRlcik7CisgICAgICAg
ICAgICBvcmlnaW5hbENvbnRhaW5lci5hZGRDaGlsZChXVEZNb3ZlKHRha2VuU3Bhbm5lciksIHBs
YWNlaG9sZGVyKTsKICAgICAgICAgICAgIHBsYWNlaG9sZGVyLT5kZXN0cm95KCk7CiAgICAgICAg
IH0KICAgICAgICAgbV9zcGFubmVyTWFwLnJlbW92ZShpdCk7CkBAIC0zNDgsMTQgKzM0OCwxNCBA
QCBSZW5kZXJPYmplY3QqIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6cHJvCiAgICAgICAgIC8vIGNv
bnRlbnQgYmVmb3JlIGFuZCBhZnRlciB0aGUgc3Bhbm5lciwgc28gdGhhdCBpdCBiZWNvbWVzIHNl
cGFyYXRlIGxpbmUgYm94ZXMuIFNlY29uZGx5LAogICAgICAgICAvLyB0aGlzIHBsYWNlaG9sZGVy
IHNlcnZlcyBhcyBhIGJyZWFrIHBvaW50IGZvciBjb2x1bW4gc2V0cywgc28gdGhhdCwgd2hlbiBl
bmNvdW50ZXJlZCwgd2UKICAgICAgICAgLy8gZW5kIGZsb3dpbmcgb25lIGNvbHVtbiBzZXQgYW5k
IG1vdmUgdG8gdGhlIG5leHQgb25lLgotICAgICAgICBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQ
bGFjZWhvbGRlciogcGxhY2Vob2xkZXIgPSBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlcjo6Y3JlYXRlQW5vbnltb3VzKHRoaXMsCi0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJC
b3g+KGRlc2NlbmRhbnQpLCAmY29udGFpbmVyLT5zdHlsZSgpKTsKLSAgICAgICAgY29udGFpbmVy
LT5hZGRDaGlsZChwbGFjZWhvbGRlciwgZGVzY2VuZGFudC5uZXh0U2libGluZygpKTsKLSAgICAg
ICAgY29udGFpbmVyLT5yZW1vdmVDaGlsZChkZXNjZW5kYW50KTsKKyAgICAgICAgYXV0byBuZXdQ
bGFjZWhvbGRlciA9IFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVhdGVB
bm9ueW1vdXModGhpcywgZG93bmNhc3Q8UmVuZGVyQm94PihkZXNjZW5kYW50KSwgJmNvbnRhaW5l
ci0+c3R5bGUoKSk7CisgICAgICAgIGF1dG8mIHBsYWNlaG9sZGVyID0gKm5ld1BsYWNlaG9sZGVy
OworICAgICAgICBjb250YWluZXItPmFkZENoaWxkKFdURk1vdmUobmV3UGxhY2Vob2xkZXIpLCBk
ZXNjZW5kYW50Lm5leHRTaWJsaW5nKCkpOworICAgICAgICBhdXRvIHRha2VuRGVzY2VuZGFudCA9
IGNvbnRhaW5lci0+dGFrZUNoaWxkKGRlc2NlbmRhbnQpOwogICAgICAgICAKICAgICAgICAgLy8g
VGhpcyBpcyBhIGd1YXJkIHRvIHN0b3AgYW4gYW5jZXN0b3IgZmxvdyB0aHJlYWQgZnJvbSBwcm9j
ZXNzaW5nIHRoZSBzcGFubmVyLgogICAgICAgICBnU2hpZnRpbmdTcGFubmVyID0gdHJ1ZTsKLSAg
ICAgICAgbXVsdGljb2xDb250YWluZXItPlJlbmRlckJsb2NrOjphZGRDaGlsZCgmZGVzY2VuZGFu
dCwgaW5zZXJ0QmVmb3JlTXVsdGljb2xDaGlsZCk7CisgICAgICAgIG11bHRpY29sQ29udGFpbmVy
LT5SZW5kZXJCbG9jazo6YWRkQ2hpbGQoV1RGTW92ZSh0YWtlbkRlc2NlbmRhbnQpLCBpbnNlcnRC
ZWZvcmVNdWx0aWNvbENoaWxkKTsKICAgICAgICAgZ1NoaWZ0aW5nU3Bhbm5lciA9IGZhbHNlOwog
ICAgICAgICAKICAgICAgICAgLy8gVGhlIHNwYW5uZXIgaGFzIG5vdyBiZWVuIG1vdmVkIG91dCBm
cm9tIHRoZSBmbG93IHRocmVhZCwgYnV0IHdlIGRvbid0IHdhbnQgdG8KQEAgLTM2Myw4ICszNjMs
OCBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6cHJvCiAgICAgICAgIC8v
IGNyZWF0aW9uIG9mIGNvbHVtbiBzZXRzIG9yIGFueXRoaW5nIGxpa2UgdGhhdC4gQ29udGludWUg
YXQgaXRzIG9yaWdpbmFsIHBvc2l0aW9uIGluCiAgICAgICAgIC8vIHRoZSB0cmVlLCBpLmUuIHdo
ZXJlIHRoZSBwbGFjZWhvbGRlciB3YXMganVzdCBwdXQuCiAgICAgICAgIGlmIChzdWJ0cmVlUm9v
dCA9PSAmZGVzY2VuZGFudCkKLSAgICAgICAgICAgIHN1YnRyZWVSb290ID0gcGxhY2Vob2xkZXI7
Ci0gICAgICAgIG5leHREZXNjZW5kYW50ID0gcGxhY2Vob2xkZXI7CisgICAgICAgICAgICBzdWJ0
cmVlUm9vdCA9ICZwbGFjZWhvbGRlcjsKKyAgICAgICAgbmV4dERlc2NlbmRhbnQgPSAmcGxhY2Vo
b2xkZXI7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gVGhpcyBpcyByZWd1bGFyIG11bHRpY29s
IGNvbnRlbnQsIGkuZS4gbm90IHBhcnQgb2YgYSBzcGFubmVyLgogICAgICAgICBpZiAoaXM8UmVu
ZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KG5leHRSZW5kZXJlckluRnJhZ21lbnRl
ZEZsb3cpKSB7CkBAIC0zODksMTUgKzM4OSwxNiBAQCBSZW5kZXJPYmplY3QqIFJlbmRlck11bHRp
Q29sdW1uRmxvdzo6cHJvCiAgICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgY29sdW1uIHNldCB3
aGVuIHRoZXJlJ3Mgbm8gc2V0IGFscmVhZHkgY3JlYXRlZC4gV2UgYWxzbyBhbHdheXMgaW5zZXJ0
CiAgICAgLy8gYW5vdGhlciBjb2x1bW4gc2V0IGFmdGVyIGEgc3Bhbm5lci4gRXZlbiBpZiBpdCB0
dXJucyBvdXQgdGhhdCB0aGVyZSBhcmUgbm8gcmVuZGVyZXJzCiAgICAgLy8gZm9sbG93aW5nIHRo
ZSBzcGFubmVyLCB0aGVyZSBtYXkgYmUgYm90dG9tIG1hcmdpbnMgdGhlcmUsIHdoaWNoIHRha2Ug
dXAgc3BhY2UuCi0gICAgUmVuZGVyTXVsdGlDb2x1bW5TZXQqIG5ld1NldCA9IG5ldyBSZW5kZXJN
dWx0aUNvbHVtblNldCgqdGhpcywgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0
aERpc3BsYXkobXVsdGljb2xDb250YWluZXItPnN0eWxlKCksIEJMT0NLKSk7CisgICAgYXV0byBu
ZXdTZXQgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJNdWx0aUNvbHVtblNldD4oKnRoaXMsIFJlbmRl
clN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KG11bHRpY29sQ29udGFpbmVy
LT5zdHlsZSgpLCBCTE9DSykpOwogICAgIG5ld1NldC0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAg
bXVsdGljb2xDb250YWluZXItPlJlbmRlckJsb2NrOjphZGRDaGlsZChuZXdTZXQsIGluc2VydEJl
Zm9yZU11bHRpY29sQ2hpbGQpOworICAgIGF1dG8mIHNldCA9ICpuZXdTZXQ7CisgICAgbXVsdGlj
b2xDb250YWluZXItPlJlbmRlckJsb2NrOjphZGRDaGlsZChXVEZNb3ZlKG5ld1NldCksIGluc2Vy
dEJlZm9yZU11bHRpY29sQ2hpbGQpOwogICAgIGludmFsaWRhdGVGcmFnbWVudHMoKTsKIAogICAg
IC8vIFdlIGNhbm5vdCBoYW5kbGUgaW1tZWRpYXRlIGNvbHVtbiBzZXQgc2libGluZ3MgYXQgdGhl
IG1vbWVudCAoYW5kIHRoZXJlJ3Mgbm8gbmVlZCBmb3IKICAgICAvLyBpdCwgZWl0aGVyKS4gVGhl
cmUgaGFzIHRvIGJlIGF0IGxlYXN0IG9uZSBzcGFubmVyIHNlcGFyYXRpbmcgdGhlbS4KLSAgICBB
U1NFUlQoIXByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKG5ld1NldCkgfHwgIXBy
ZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKG5ld1NldCktPmlzUmVuZGVyTXVsdGlD
b2x1bW5TZXQoKSk7Ci0gICAgQVNTRVJUKCFuZXh0Q29sdW1uU2V0T3JTcGFubmVyU2libGluZ09m
KG5ld1NldCkgfHwgIW5leHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV3U2V0KS0+aXNS
ZW5kZXJNdWx0aUNvbHVtblNldCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNldCwgIXByZXZpb3Vz
Q29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKCZzZXQpIHx8ICFwcmV2aW91c0NvbHVtblNldE9y
U3Bhbm5lclNpYmxpbmdPZigmc2V0KS0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKTsKKyAgICBB
U1NFUlQoIW5leHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YoJnNldCkgfHwgIW5leHRDb2x1
bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YoJnNldCktPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSk7
CiAgICAgCiAgICAgcmV0dXJuIG5leHREZXNjZW5kYW50OwogfQpAQCAtNDI4LDcgKzQyOSwxMSBA
QCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6ZnJhZ21lbnRlZEZsCiAgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB0byBudWtlIHRoZSBwbGFjZWhvbGRlciwgc2luY2UgdGhlIGFuY2VzdG9y
IGFscmVhZHkgbG9zdCB0aGUgbWFwcGluZyB0byBpdCB3aGVuCiAgICAgICAgICAgICAgICAgLy8g
d2Ugc2hpZnRlZCB0aGUgcGxhY2Vob2xkZXIgZG93biBpbnRvIHRoaXMgZmxvdyB0aHJlYWQuCiAg
ICAgICAgICAgICAgICAgcGxhY2Vob2xkZXIuZnJhZ21lbnRlZEZsb3coKS0+bV9zcGFubmVyTWFw
LnJlbW92ZShzcGFubmVyKTsKLSAgICAgICAgICAgICAgICBwbGFjZWhvbGRlci5wYXJlbnQoKS0+
cmVtb3ZlQ2hpbGQocGxhY2Vob2xkZXIpOworCisgICAgICAgICAgICAgICAgYXV0byB0YWtlbkNo
aWxkID0gcGxhY2Vob2xkZXIucGFyZW50KCktPnRha2VDaGlsZChwbGFjZWhvbGRlcik7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IE1lbW9yeSBtYW5hZ2VtZW50LgorICAgICAgICAgICAgICAg
IGF1dG8qIGxlYWtlblB0ciA9IHRha2VuQ2hpbGQubGVha1B0cigpOworICAgICAgICAgICAgICAg
IFVOVVNFRF9QQVJBTShsZWFrZW5QdHIpOwogCiAgICAgICAgICAgICAgICAgaWYgKHN1YnRyZWVS
b290ID09IGRlc2NlbmRhbnQpCiAgICAgICAgICAgICAgICAgICAgIHN1YnRyZWVSb290ID0gc3Bh
bm5lcjsKQEAgLTQ1MCw3ICs0NTUsMTEgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3c6Omhh
bmRsZVNwYW5uZQogewogICAgIC8vIFRoZSBwbGFjZWhvbGRlciBtYXkgYWxyZWFkeSBoYXZlIGJl
ZW4gcmVtb3ZlZCwgYnV0IGlmIGl0IGhhc24ndCwgZG8gc28gbm93LgogICAgIGlmIChSZW5kZXJN
dWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlciogcGxhY2Vob2xkZXIgPSBtX3NwYW5uZXJNYXAu
Z2V0KCZkb3duY2FzdDxSZW5kZXJCb3g+KHNwYW5uZXIpKS5nZXQoKSkgewotICAgICAgICBwbGFj
ZWhvbGRlci0+cGFyZW50KCktPnJlbW92ZUNoaWxkKCpwbGFjZWhvbGRlcik7CisgICAgICAgIGF1
dG8gdGFrZW5DaGlsZCA9IHBsYWNlaG9sZGVyLT5wYXJlbnQoKS0+dGFrZUNoaWxkKCpwbGFjZWhv
bGRlcik7CisgICAgICAgIC8vIEZJWE1FOiBNZW1vcnkgbWFuYWdlbWVudC4KKyAgICAgICAgYXV0
byogbGVha2VuUHRyID0gdGFrZW5DaGlsZC5sZWFrUHRyKCk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShsZWFrZW5QdHIpOworCiAgICAgICAgIG1fc3Bhbm5lck1hcC5yZW1vdmUoJmRvd25jYXN0PFJl
bmRlckJveD4oc3Bhbm5lcikpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vo
b2xkZXIuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCwxMSArMzQsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW5kZXJNdWx0aUNv
bHVtblNwYW5uZXJQbGFjZWhvbGRlciogUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXI6OmNyZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVtbkZsb3cqIGZyYWdtZW50ZWRGbG93
LCBSZW5kZXJCb3gmIHNwYW5uZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKK1Jl
bmRlclB0cjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4gUmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXI6OmNyZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVt
bkZsb3cqIGZyYWdtZW50ZWRGbG93LCBSZW5kZXJCb3gmIHNwYW5uZXIsIGNvbnN0IFJlbmRlclN0
eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICBhdXRvIG5ld1N0eWxlID0gUmVuZGVyU3R5bGU6OmNy
ZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoKnBhcmVudFN0eWxlLCBCTE9DSyk7CiAgICAg
bmV3U3R5bGUuc2V0Q2xlYXIoQ0JPVEgpOyAvLyBXZSBkb24ndCB3YW50IGZsb2F0cyBpbiB0aGUg
cm93IHByZWNlZGluZyB0aGUgc3Bhbm5lciB0byBjb250aW51ZSBvbiB0aGUgb3RoZXIgc2lkZS4K
LSAgICBhdXRvIHBsYWNlaG9sZGVyID0gbmV3IFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNl
aG9sZGVyKGZyYWdtZW50ZWRGbG93LCBzcGFubmVyLCBXVEZNb3ZlKG5ld1N0eWxlKSk7CisgICAg
YXV0byBwbGFjZWhvbGRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5l
clBsYWNlaG9sZGVyPihmcmFnbWVudGVkRmxvdywgc3Bhbm5lciwgV1RGTW92ZShuZXdTdHlsZSkp
OwogICAgIHBsYWNlaG9sZGVyLT5pbml0aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gcGxhY2Vo
b2xkZXI7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5TcGFubmVyUGxhY2Vob2xkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaAkocmV2aXNpb24gMjIy
NjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU3Bhbm5l
clBsYWNlaG9sZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDEzICszOSwxNSBAQCBjbGFzcyBS
ZW5kZXJNdWx0aUNvbHVtbkZsb3c7CiAKIGNsYXNzIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyIGZpbmFsIDogcHVibGljIFJlbmRlckJveCB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBjcmVhdGVBbm9ueW1vdXMoUmVu
ZGVyTXVsdGlDb2x1bW5GbG93KiwgUmVuZGVyQm94JiBzcGFubmVyLCBjb25zdCBSZW5kZXJTdHls
ZSogcGFyZW50U3R5bGUpOworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyTXVsdGlDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXI+IGNyZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVtbkZsb3cq
LCBSZW5kZXJCb3gmIHNwYW5uZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CiAK
ICAgICBSZW5kZXJCb3gqIHNwYW5uZXIoKSBjb25zdCB7IHJldHVybiBtX3NwYW5uZXI7IH0KICAg
ICBSZW5kZXJNdWx0aUNvbHVtbkZsb3cqIGZyYWdtZW50ZWRGbG93KCkgY29uc3QgeyByZXR1cm4g
bV9mcmFnbWVudGVkRmxvdzsgfQogICAgIFdlYWtQdHI8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXI+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNy
ZWF0ZVdlYWtQdHIoKnRoaXMpOyB9CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8Y2xhc3MgVCwg
Y2xhc3MuLi4gQXJncz4gZnJpZW5kIFJlbmRlclB0cjxUPiBjcmVhdGVSZW5kZXJlcihBcmdzJiYu
Li4pOworCiAgICAgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoUmVuZGVyTXVs
dGlDb2x1bW5GbG93KiwgUmVuZGVyQm94JiBzcGFubmVyLCBSZW5kZXJTdHlsZSYmKTsKICAgICBi
b29sIGlzUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDEwICsyNDEsMTAgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6OnNldFBhcmVudChSZW5kZXJFbGVtZQogICAgIG1fcGFyZW50ID0g
cGFyZW50OwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVBhcmVudCgpCit2b2lk
IFJlbmRlck9iamVjdDo6cmVtb3ZlRnJvbVBhcmVudEFuZERlc3Ryb3koKQogewotICAgIGlmIChw
YXJlbnQoKSkKLSAgICAgICAgcGFyZW50KCktPnJlbW92ZUNoaWxkKCp0aGlzKTsKKyAgICBBU1NF
UlQobV9wYXJlbnQpOworICAgIG1fcGFyZW50LT5yZW1vdmVBbmREZXN0cm95Q2hpbGQoKnRoaXMp
OwogfQogCiBSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6bmV4dEluUHJlT3JkZXIoKSBjb25z
dApAQCAtMTQ0OCw3ICsxNDQ4LDEyIEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95
ZWQoKQogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdB
WE9iamVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQodGhpcy0+cGFy
ZW50KCkpOwogCi0gICAgcmVtb3ZlRnJvbVBhcmVudCgpOworICAgIGlmIChtX3BhcmVudCkgewor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGhhdmUgYWx3YXlzIGJlZW4gcmVtb3ZlZCBmcm9t
IHRoZSBwYXJlbnQgYmVmb3JlIGJlaW5nIGRlc3Ryb3llZC4KKyAgICAgICAgYXV0byB0YWtlblRo
aXMgPSBtX3BhcmVudC0+dGFrZUNoaWxkKCp0aGlzKTsKKyAgICAgICAgYXV0byogbGVha2VkUHRy
ID0gdGFrZW5UaGlzLmxlYWtQdHIoKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlYWtlZFB0cik7
CisgICAgfQogCiAgICAgQVNTRVJUKHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpIHx8ICFpczxS
ZW5kZXJFbGVtZW50PigqdGhpcykgfHwgIXZpZXcoKS5mcmFtZVZpZXcoKS5oYXNTbG93UmVwYWlu
dE9iamVjdChkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqdGhpcykpKTsKIApAQCAtMTUxOCw2ICsx
NTIzLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3lBbmRDbGVhbnVwQW5vbgogCiB2b2lk
IFJlbmRlck9iamVjdDo6ZGVzdHJveSgpCiB7CisgICAgQVNTRVJUKCFtX2JpdGZpZWxkcy5iZWlu
Z0Rlc3Ryb3llZCgpKTsKICAgICBtX2JpdGZpZWxkcy5zZXRCZWluZ0Rlc3Ryb3llZCh0cnVlKTsK
IAogI2lmIFBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzUxLDcgKzc1MSw3IEBAIHB1YmxpYzoK
ICAgICBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgc2VsZWN0aW9uUm9vdCgpIGNvbnN0OwogICAgIHZv
aWQgc2VsZWN0aW9uU3RhcnRFbmQodW5zaWduZWQmIHNwb3MsIHVuc2lnbmVkJiBlcG9zKSBjb25z
dDsKICAgICAKLSAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2b2lkIHJlbW92ZUZy
b21QYXJlbnRBbmREZXN0cm95KCk7CiAKICAgICBDU1NBbmltYXRpb25Db250cm9sbGVyJiBhbmlt
YXRpb24oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclF1
b3RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUXVv
dGUuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUXVvdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNyArMzYxLDcgQEAgdm9pZCBSZW5k
ZXJRdW90ZTo6dXBkYXRlVGV4dFJlbmRlcmVyKCkKICAgICAgICAgcmVuZGVyVGV4dC0+ZGlydHlM
aW5lQm94ZXMoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGFkZENoaWxkKG5l
dyBSZW5kZXJUZXh0RnJhZ21lbnQoZG9jdW1lbnQoKSwgbV90ZXh0KSk7CisgICAgYWRkQ2hpbGQo
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50Pihkb2N1bWVudCgpLCBtX3RleHQpKTsK
IH0KIAogU3RyaW5nIFJlbmRlclF1b3RlOjpjb21wdXRlVGV4dCgpIGNvbnN0CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDkgKzk2LDkgQEAgc3RhdGljIGlubGluZSBSZW5kZXJCbG9jayogcnVieUFmdGVyQmxvYwog
ICAgIHJldHVybiBpc1J1YnlBZnRlckJsb2NrKGNoaWxkKSA/IGRvd25jYXN0PFJlbmRlckJsb2Nr
PihjaGlsZCkgOiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyQmxvY2sqIGNyZWF0ZUFub255
bW91c1J1YnlJbmxpbmVCbG9jayhSZW5kZXJPYmplY3QmIHJ1YnkpCitzdGF0aWMgYXV0byBjcmVh
dGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soUmVuZGVyT2JqZWN0JiBydWJ5KQogewotICAgIFJl
bmRlckJsb2NrKiBuZXdCbG9jayA9IG5ldyBSZW5kZXJCbG9ja0Zsb3cocnVieS5kb2N1bWVudCgp
LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShydWJ5LnN0eWxl
KCksIElOTElORV9CTE9DSykpOworICAgIGF1dG8gbmV3QmxvY2sgPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJCbG9ja0Zsb3c+KHJ1YnkuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255
bW91c1N0eWxlV2l0aERpc3BsYXkocnVieS5zdHlsZSgpLCBJTkxJTkVfQkxPQ0spKTsKICAgICBu
ZXdCbG9jay0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAgICAgcmV0dXJuIG5ld0Jsb2NrOwogfQpAQCAt
MTM3LDQzICsxMzcsNDUgQEAgdm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OnN0eWxlRGlkQ2hhbmdl
KAogICAgIHByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihQcm9wYWdhdGVUb0FsbENo
aWxkcmVuKTsKIH0KIAotdm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OmFkZENoaWxkKFJlbmRlck9i
amVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlclJ1YnlB
c0lubGluZTo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgLy8gSW5zZXJ0IDpiZWZvcmUgYW5kIDphZnRlciBj
b250ZW50IGJlZm9yZS9hZnRlciB0aGUgUmVuZGVyUnVieVJ1bihzKQogICAgIGlmIChjaGlsZC0+
aXNCZWZvcmVDb250ZW50KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc0lubGluZSgpKSB7CiAg
ICAgICAgICAgICAvLyBBZGQgZ2VuZXJhdGVkIGlubGluZSBjb250ZW50IG5vcm1hbGx5Ci0gICAg
ICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKGNoaWxkLCBmaXJzdENoaWxkKCkpOworICAg
ICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgZmlyc3RDaGls
ZCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdyYXAgbm9uLWlubGluZSBj
b250ZW50IHdpdGggYW4gYW5vbnltb3VzIGlubGluZS1ibG9jay4KICAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBiZWZvcmVCbG9jayA9IHJ1YnlCZWZvcmVCbG9jayh0aGlzKTsKICAgICAgICAgICAg
IGlmICghYmVmb3JlQmxvY2spIHsKLSAgICAgICAgICAgICAgICBiZWZvcmVCbG9jayA9IGNyZWF0
ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyk7Ci0gICAgICAgICAgICAgICAgUmVuZGVy
SW5saW5lOjphZGRDaGlsZChiZWZvcmVCbG9jaywgZmlyc3RDaGlsZCgpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIG5ld0Jsb2NrID0gY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKCp0aGlz
KTsKKyAgICAgICAgICAgICAgICBiZWZvcmVCbG9jayA9IG5ld0Jsb2NrLmdldCgpOworICAgICAg
ICAgICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoV1RGTW92ZShuZXdCbG9jayksIGZpcnN0
Q2hpbGQoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBiZWZvcmVCbG9jay0+YWRkQ2hp
bGQoY2hpbGQpOworICAgICAgICAgICAgYmVmb3JlQmxvY2stPmFkZENoaWxkKFdURk1vdmUoY2hp
bGQpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChjaGlsZC0+
aXNBZnRlckNvbnRlbnQoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzSW5saW5lKCkpIHsKICAg
ICAgICAgICAgIC8vIEFkZCBnZW5lcmF0ZWQgaW5saW5lIGNvbnRlbnQgbm9ybWFsbHkKLSAgICAg
ICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgUmVuZGVy
SW5saW5lOjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBXcmFwIG5vbi1pbmxpbmUgY29udGVudCB3aXRoIGFuIGFub255bW91cyBpbmxp
bmUtYmxvY2suCiAgICAgICAgICAgICBSZW5kZXJCbG9jayogYWZ0ZXJCbG9jayA9IHJ1YnlBZnRl
ckJsb2NrKHRoaXMpOwogICAgICAgICAgICAgaWYgKCFhZnRlckJsb2NrKSB7Ci0gICAgICAgICAg
ICAgICAgYWZ0ZXJCbG9jayA9IGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyk7
Ci0gICAgICAgICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChhZnRlckJsb2NrKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIG5ld0Jsb2NrID0gY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJs
b2NrKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBhZnRlckJsb2NrID0gbmV3QmxvY2suZ2V0KCk7
CisgICAgICAgICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChXVEZNb3ZlKG5ld0Jsb2Nr
KSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhZnRlckJsb2NrLT5hZGRDaGlsZChjaGls
ZCk7CisgICAgICAgICAgICBhZnRlckJsb2NrLT5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAg
ICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIElmIHRoZSBjaGlsZCBp
cyBhIHJ1YnkgcnVuLCBqdXN0IGFkZCBpdCBub3JtYWxseS4KICAgICBpZiAoY2hpbGQtPmlzUnVi
eVJ1bigpKSB7Ci0gICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNo
aWxkKTsKKyAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVm
b3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xODQsNyArMTg2LDcgQEAg
dm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OmFkZENoaWxkKFJlbmRlcgogICAgICAgICB3aGlsZSAo
cnVuICYmICFydW4tPmlzUnVieVJ1bigpKQogICAgICAgICAgICAgcnVuID0gcnVuLT5wYXJlbnQo
KTsKICAgICAgICAgaWYgKHJ1bikgewotICAgICAgICAgICAgcnVuLT5hZGRDaGlsZChjaGlsZCwg
YmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgcnVuLT5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwg
YmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBiZWZvcmVDaGlsZCBzaG91bGQgYWx3YXlzIGhhdmUgYSBy
dW4gYXMgcGFyZW50IQpAQCAtMTk2LDEzICsxOTgsMTQgQEAgdm9pZCBSZW5kZXJSdWJ5QXNJbmxp
bmU6OmFkZENoaWxkKFJlbmRlcgogICAgIC8vIChUaGUgUmVuZGVyUnVieVJ1biBvYmplY3Qgd2ls
bCBoYW5kbGUgdGhlIGRldGFpbHMpCiAgICAgUmVuZGVyUnVieVJ1biogbGFzdFJ1biA9IGxhc3RS
dWJ5UnVuKHRoaXMpOwogICAgIGlmICghbGFzdFJ1biB8fCBsYXN0UnVuLT5oYXNSdWJ5VGV4dCgp
KSB7Ci0gICAgICAgIGxhc3RSdW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVu
KHRoaXMpOwotICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKGxhc3RSdW4sIGJlZm9yZUNo
aWxkKTsKKyAgICAgICAgYXV0byBuZXdSdW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVS
dWJ5UnVuKHRoaXMpOworICAgICAgICBsYXN0UnVuID0gbmV3UnVuLmdldCgpOworICAgICAgICBS
ZW5kZXJJbmxpbmU6OmFkZENoaWxkKFdURk1vdmUobmV3UnVuKSwgYmVmb3JlQ2hpbGQpOwogICAg
IH0KLSAgICBsYXN0UnVuLT5hZGRDaGlsZChjaGlsZCk7CisgICAgbGFzdFJ1bi0+YWRkQ2hpbGQo
V1RGTW92ZShjaGlsZCkpOwogfQogCi12b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6cmVtb3ZlQ2hp
bGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclJ1
YnlBc0lubGluZTo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCiB7CiAgICAgLy8gSWYg
dGhlIGNoaWxkJ3MgcGFyZW50IGlzICp0aGlzIChtdXN0IGJlIGEgcnVieSBydW4gb3IgZ2VuZXJh
dGVkIGNvbnRlbnQgb3IgYW5vbnltb3VzIGJsb2NrKSwKICAgICAvLyBqdXN0IHVzZSB0aGUgbm9y
bWFsIHJlbW92ZSBtZXRob2QuCkBAIC0yMTAsMjAgKzIxMywyMCBAQCB2b2lkIFJlbmRlclJ1YnlB
c0lubGluZTo6cmVtb3ZlQ2hpbGQoUmVuCiAjaWZuZGVmIEFTU0VSVF9ESVNBQkxFRAogICAgICAg
ICBBU1NFUlQoaXNSdWJ5Q2hpbGRGb3JOb3JtYWxSZW1vdmFsKGNoaWxkKSk7CiAjZW5kaWYKLSAg
ICAgICAgUmVuZGVySW5saW5lOjpyZW1vdmVDaGlsZChjaGlsZCk7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIFJlbmRlcklubGluZTo6dGFrZUNoaWxkKGNoaWxkKTsKICAgICB9CiAg
ICAgLy8gSWYgdGhlIGNoaWxkJ3MgcGFyZW50IGlzIGFuIGFub3ltb3VzIGJsb2NrIChtdXN0IGJl
IGdlbmVyYXRlZCA6YmVmb3JlLzphZnRlciBjb250ZW50KQogICAgIC8vIGp1c3QgdXNlIHRoZSBi
bG9jaydzIHJlbW92ZSBtZXRob2QuCiAgICAgaWYgKGlzQW5vbnltb3VzUnVieUlubGluZUJsb2Nr
KGNoaWxkLnBhcmVudCgpKSkgewogICAgICAgICBBU1NFUlQoY2hpbGQuaXNCZWZvcmVDb250ZW50
KCkgfHwgY2hpbGQuaXNBZnRlckNvbnRlbnQoKSk7Ci0gICAgICAgIGNoaWxkLnBhcmVudCgpLT5y
ZW1vdmVDaGlsZChjaGlsZCk7Ci0gICAgICAgIHJlbW92ZUNoaWxkKCpjaGlsZC5wYXJlbnQoKSk7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgcGFyZW50ID0gKmNoaWxkLnBhcmVudCgp
OworICAgICAgICBhdXRvIHRha2VuQ2hpbGQgPSBwYXJlbnQudGFrZUNoaWxkKGNoaWxkKTsKKyAg
ICAgICAgcGFyZW50LnJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7CisgICAgICAgIHJldHVy
biB0YWtlbkNoaWxkOwogICAgIH0KIAogICAgIC8vIE90aGVyd2lzZSBmaW5kIHRoZSBjb250YWlu
aW5nIHJ1biBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlcmUuCi0gICAgZmluZFJ1YnlSdW5QYXJlbnQo
Y2hpbGQpLnJlbW92ZUNoaWxkKGNoaWxkKTsKKyAgICByZXR1cm4gZmluZFJ1YnlSdW5QYXJlbnQo
Y2hpbGQpLnRha2VDaGlsZChjaGlsZCk7CiB9CiAKIC8vPT09IHJ1YnkgYXMgYmxvY2sgb2JqZWN0
ID09PQpAQCAtMjQzLDQzICsyNDYsNDUgQEAgdm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6c3R5bGVE
aWRDaGFuZ2UoUwogICAgIHByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihQcm9wYWdh
dGVUb0FsbENoaWxkcmVuKTsKIH0KIAotdm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6YWRkQ2hpbGQo
UmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVu
ZGVyUnVieUFzQmxvY2s6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIC8vIEluc2VydCA6YmVmb3JlIGFuZCA6
YWZ0ZXIgY29udGVudCBiZWZvcmUvYWZ0ZXIgdGhlIFJlbmRlclJ1YnlSdW4ocykKICAgICBpZiAo
Y2hpbGQtPmlzQmVmb3JlQ29udGVudCgpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNJbmxpbmUo
KSkgewogICAgICAgICAgICAgLy8gQWRkIGdlbmVyYXRlZCBpbmxpbmUgY29udGVudCBub3JtYWxs
eQotICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChjaGlsZCwgZmlyc3RDaGls
ZCgpKTsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoV1RGTW92ZShjaGls
ZCksIGZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXcmFw
IG5vbi1pbmxpbmUgY29udGVudCB3aXRoIGFuIGFub255bW91cyBpbmxpbmUtYmxvY2suCiAgICAg
ICAgICAgICBSZW5kZXJCbG9jayogYmVmb3JlQmxvY2sgPSBydWJ5QmVmb3JlQmxvY2sodGhpcyk7
CiAgICAgICAgICAgICBpZiAoIWJlZm9yZUJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgYmVmb3Jl
QmxvY2sgPSBjcmVhdGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soKnRoaXMpOwotICAgICAgICAg
ICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoYmVmb3JlQmxvY2ssIGZpcnN0Q2hpbGQo
KSk7CisgICAgICAgICAgICAgICAgYXV0byBuZXdCbG9jayA9IGNyZWF0ZUFub255bW91c1J1YnlJ
bmxpbmVCbG9jaygqdGhpcyk7CisgICAgICAgICAgICAgICAgYmVmb3JlQmxvY2sgPSBuZXdCbG9j
ay5nZXQoKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKFdURk1v
dmUobmV3QmxvY2spLCBmaXJzdENoaWxkKCkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
YmVmb3JlQmxvY2stPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgIGJlZm9yZUJsb2NrLT5h
ZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAoY2hpbGQtPmlzQWZ0ZXJDb250ZW50KCkpIHsKICAgICAgICAgaWYgKGNoaWxk
LT5pc0lubGluZSgpKSB7CiAgICAgICAgICAgICAvLyBBZGQgZ2VuZXJhdGVkIGlubGluZSBjb250
ZW50IG5vcm1hbGx5Ci0gICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGNoaWxk
KTsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV3JhcCBub24taW5saW5lIGNvbnRl
bnQgd2l0aCBhbiBhbm9ueW1vdXMgaW5saW5lLWJsb2NrLgogICAgICAgICAgICAgUmVuZGVyQmxv
Y2sqIGFmdGVyQmxvY2sgPSBydWJ5QWZ0ZXJCbG9jayh0aGlzKTsKICAgICAgICAgICAgIGlmICgh
YWZ0ZXJCbG9jaykgewotICAgICAgICAgICAgICAgIGFmdGVyQmxvY2sgPSBjcmVhdGVBbm9ueW1v
dXNSdWJ5SW5saW5lQmxvY2soKnRoaXMpOwotICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrRmxv
dzo6YWRkQ2hpbGQoYWZ0ZXJCbG9jayk7CisgICAgICAgICAgICAgICAgYXV0byBuZXdCbG9jayA9
IGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyk7CisgICAgICAgICAgICAgICAg
YWZ0ZXJCbG9jayA9IG5ld0Jsb2NrLmdldCgpOworICAgICAgICAgICAgICAgIFJlbmRlckJsb2Nr
Rmxvdzo6YWRkQ2hpbGQoV1RGTW92ZShuZXdCbG9jaykpOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYWZ0ZXJCbG9jay0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgYWZ0ZXJCbG9j
ay0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBydWJ5IHJ1biwganVzdCBhZGQgaXQg
bm9ybWFsbHkuCiAgICAgaWYgKGNoaWxkLT5pc1J1YnlSdW4oKSkgewotICAgICAgICBSZW5kZXJC
bG9ja0Zsb3c6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIFJlbmRlckJs
b2NrRmxvdzo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMjkwLDcgKzI5NSw3IEBAIHZvaWQgUmVuZGVyUnVieUFzQmxv
Y2s6OmFkZENoaWxkKFJlbmRlck8KICAgICAgICAgd2hpbGUgKHJ1biAmJiAhcnVuLT5pc1J1YnlS
dW4oKSkKICAgICAgICAgICAgIHJ1biA9IHJ1bi0+cGFyZW50KCk7CiAgICAgICAgIGlmIChydW4p
IHsKLSAgICAgICAgICAgIHJ1bi0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAg
ICAgICAgIHJ1bi0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gYmVmb3JlQ2hpbGQgc2hvdWxkIGFsd2F5cyBoYXZlIGEgcnVuIGFzIHBhcmVudCEKQEAgLTMw
MiwxMyArMzA3LDE0IEBAIHZvaWQgUmVuZGVyUnVieUFzQmxvY2s6OmFkZENoaWxkKFJlbmRlck8K
ICAgICAvLyAoVGhlIFJlbmRlclJ1YnlSdW4gb2JqZWN0IHdpbGwgaGFuZGxlIHRoZSBkZXRhaWxz
KQogICAgIFJlbmRlclJ1YnlSdW4qIGxhc3RSdW4gPSBsYXN0UnVieVJ1bih0aGlzKTsKICAgICBp
ZiAoIWxhc3RSdW4gfHwgbGFzdFJ1bi0+aGFzUnVieVRleHQoKSkgewotICAgICAgICBsYXN0UnVu
ID0gUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVieVJ1bih0aGlzKTsKLSAgICAgICAgUmVu
ZGVyQmxvY2tGbG93OjphZGRDaGlsZChsYXN0UnVuLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIGF1
dG8gbmV3UnVuID0gUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVieVJ1bih0aGlzKTsKKyAg
ICAgICAgbGFzdFJ1biA9IG5ld1J1bi5nZXQoKTsKKyAgICAgICAgUmVuZGVyQmxvY2tGbG93Ojph
ZGRDaGlsZChXVEZNb3ZlKG5ld1J1biksIGJlZm9yZUNoaWxkKTsKICAgICB9Ci0gICAgbGFzdFJ1
bi0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGxhc3RSdW4tPmFkZENoaWxkKFdURk1vdmUoY2hpbGQp
KTsKIH0KIAotdm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0
JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclJ1YnlBc0Jsb2NrOjp0YWtl
Q2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAgICAvLyBJZiB0aGUgY2hpbGQncyBwYXJl
bnQgaXMgKnRoaXMgKG11c3QgYmUgYSBydWJ5IHJ1biBvciBnZW5lcmF0ZWQgY29udGVudCBvciBh
bm9ueW1vdXMgYmxvY2spLAogICAgIC8vIGp1c3QgdXNlIHRoZSBub3JtYWwgcmVtb3ZlIG1ldGhv
ZC4KQEAgLTMxNiwyMCArMzIyLDIwIEBAIHZvaWQgUmVuZGVyUnVieUFzQmxvY2s6OnJlbW92ZUNo
aWxkKFJlbmQKICNpZm5kZWYgQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIEFTU0VSVChpc1J1YnlD
aGlsZEZvck5vcm1hbFJlbW92YWwoY2hpbGQpKTsKICNlbmRpZgotICAgICAgICBSZW5kZXJCbG9j
a0Zsb3c6OnJlbW92ZUNoaWxkKGNoaWxkKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gUmVuZGVyQmxvY2tGbG93Ojp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIH0KICAgICAvLyBJZiB0
aGUgY2hpbGQncyBwYXJlbnQgaXMgYW4gYW5veW1vdXMgYmxvY2sgKG11c3QgYmUgZ2VuZXJhdGVk
IDpiZWZvcmUvOmFmdGVyIGNvbnRlbnQpCiAgICAgLy8ganVzdCB1c2UgdGhlIGJsb2NrJ3MgcmVt
b3ZlIG1ldGhvZC4KICAgICBpZiAoaXNBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soY2hpbGQucGFy
ZW50KCkpKSB7CiAgICAgICAgIEFTU0VSVChjaGlsZC5pc0JlZm9yZUNvbnRlbnQoKSB8fCBjaGls
ZC5pc0FmdGVyQ29udGVudCgpKTsKLSAgICAgICAgY2hpbGQucGFyZW50KCktPnJlbW92ZUNoaWxk
KGNoaWxkKTsKLSAgICAgICAgcmVtb3ZlQ2hpbGQoKmNoaWxkLnBhcmVudCgpKTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICBhdXRvJiBwYXJlbnQgPSAqY2hpbGQucGFyZW50KCk7CisgICAgICAg
IGF1dG8gdGFrZW5DaGlsZCA9IHBhcmVudC50YWtlQ2hpbGQoY2hpbGQpOworICAgICAgICBwYXJl
bnQucmVtb3ZlRnJvbVBhcmVudEFuZERlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJuIHRha2VuQ2hp
bGQ7CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3aXNlIGZpbmQgdGhlIGNvbnRhaW5pbmcgcnVuIGFu
ZCByZW1vdmUgaXQgZnJvbSB0aGVyZS4KLSAgICBmaW5kUnVieVJ1blBhcmVudChjaGlsZCkucmVt
b3ZlQ2hpbGQoY2hpbGQpOworICAgIHJldHVybiBmaW5kUnVieVJ1blBhcmVudChjaGlsZCkudGFr
ZUNoaWxkKGNoaWxkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw4ICs1
NSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJSdWJ5QXNJbmxpbmUoRWxlbWVudCYsIFJlbmRlclN0
eWxlJiYpOwogICAgIHZpcnR1YWwgflJlbmRlclJ1YnlBc0lubGluZSgpOwogCi0gICAgdm9pZCBh
ZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0g
MCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKSBv
dmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRy
PFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIG92ZXJyaWRlOwog
CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CkBAIC03NSw4ICs3NSw4IEBAIHB1
YmxpYzoKIAogICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKLSAgICB2b2lkIGFkZENoaWxkKFJl
bmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIG92ZXJyaWRlOwor
ICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiB0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkgb3ZlcnJpZGU7CiAKIHByb3RlY3Rl
ZDoKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSdWJ5QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJ1YnlCYXNlLmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsOCAr
OTYsOSBAQCB2b2lkIFJlbmRlclJ1YnlCYXNlOjptb3ZlSW5saW5lQ2hpbGRyZW4oCiAgICAgICAg
IGlmIChsYXN0Q2hpbGQgJiYgbGFzdENoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkgJiYgbGFzdENo
aWxkLT5jaGlsZHJlbklubGluZSgpKQogICAgICAgICAgICAgdG9CbG9jayA9IGRvd25jYXN0PFJl
bmRlckJsb2NrPihsYXN0Q2hpbGQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHRvQmxv
Y2sgPSB0b0Jhc2UtPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0gICAgICAgICAgICB0b0Jhc2Ut
Pmluc2VydENoaWxkSW50ZXJuYWwodG9CbG9jaywgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwor
ICAgICAgICAgICAgYXV0byBuZXdUb0Jsb2NrID0gdG9CYXNlLT5jcmVhdGVBbm9ueW1vdXNCbG9j
aygpOworICAgICAgICAgICAgdG9CbG9jayA9IG5ld1RvQmxvY2suZ2V0KCk7CisgICAgICAgICAg
ICB0b0Jhc2UtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShuZXdUb0Jsb2NrKSwgbnVsbHB0
ciwgTm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICB9CiAgICAgfQogICAgIC8vIE1vdmUgb3VyIGlu
bGluZSBjaGlsZHJlbiBpbnRvIHRoZSB0YXJnZXQgYmxvY2sgd2UgZGV0ZXJtaW5lZCBhYm92ZS4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5jcHAJKHJldmlz
aW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsOSBAQCBSZW5kZXJSdWJ5QmFzZSogUmVuZGVy
UnVieVJ1bjo6cnVieUJhc2VTCiB7CiAgICAgUmVuZGVyUnVieUJhc2UqIGJhc2UgPSBydWJ5QmFz
ZSgpOwogICAgIGlmICghYmFzZSkgewotICAgICAgICBiYXNlID0gY3JlYXRlUnVieUJhc2UoKTsK
LSAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChiYXNlKTsKKyAgICAgICAgYXV0byBu
ZXdCYXNlID0gY3JlYXRlUnVieUJhc2UoKTsKKyAgICAgICAgYmFzZSA9IG5ld0Jhc2UuZ2V0KCk7
CisgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoV1RGTW92ZShuZXdCYXNlKSk7CiAg
ICAgfQogICAgIHJldHVybiBiYXNlOwogfQpAQCAtMTA2LDcgKzEwNyw3IEBAIGJvb2wgUmVuZGVy
UnVieVJ1bjo6aXNDaGlsZEFsbG93ZWQoY29uc3QKICAgICByZXR1cm4gY2hpbGQuaXNJbmxpbmUo
KSB8fCBjaGlsZC5pc1J1YnlUZXh0KCk7CiB9CiAKLXZvaWQgUmVuZGVyUnVieVJ1bjo6YWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQg
UmVuZGVyUnVieVJ1bjo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgQVNTRVJUKGNoaWxkKTsKIApAQCAtMTE1
LDcgKzExNiw3IEBAIHZvaWQgUmVuZGVyUnVieVJ1bjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWMKICAg
ICAgICAgICAgIC8vIFJlbmRlclJ1YnkgaGFzIGFscmVhZHkgYXNjZXJ0YWluZWQgdGhhdCB3ZSBj
YW4gYWRkIHRoZSBjaGlsZCBoZXJlLgogICAgICAgICAgICAgQVNTRVJUKCFoYXNSdWJ5VGV4dCgp
KTsKICAgICAgICAgICAgIC8vIHByZXBlbmQgcnVieSB0ZXh0cyBhcyBmaXJzdCBjaGlsZAotICAg
ICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChjaGlsZCwgZmlyc3RDaGlsZCgpKTsK
KyAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGZp
cnN0Q2hpbGQoKSk7CiAgICAgICAgIH0gIGVsc2UgaWYgKGJlZm9yZUNoaWxkLT5pc1J1YnlUZXh0
KCkpIHsKICAgICAgICAgICAgIC8vIE5ldyB0ZXh0IGlzIGluc2VydGVkIGp1c3QgYmVmb3JlIGFu
b3RoZXIuCiAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgdGhlIG5ldyB0ZXh0IHRha2VzIHRo
ZSBwbGFjZSBvZiB0aGUgb2xkIG9uZSwgYW5kCkBAIC0xMjMsMzQgKzEyNCwzNSBAQCB2b2lkIFJl
bmRlclJ1YnlSdW46OmFkZENoaWxkKFJlbmRlck9iamVjCiAgICAgICAgICAgICBBU1NFUlQoYmVm
b3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOwogICAgICAgICAgICAgUmVuZGVyRWxlbWVudCog
cnVieSA9IHBhcmVudCgpOwogICAgICAgICAgICAgQVNTRVJUKGlzUnVieShydWJ5KSk7Ci0gICAg
ICAgICAgICBSZW5kZXJCbG9jayogbmV3UnVuID0gc3RhdGljQ3JlYXRlUnVieVJ1bihydWJ5KTsK
LSAgICAgICAgICAgIHJ1YnktPmFkZENoaWxkKG5ld1J1biwgbmV4dFNpYmxpbmcoKSk7CisgICAg
ICAgICAgICBhdXRvIG5ld1J1biA9IHN0YXRpY0NyZWF0ZVJ1YnlSdW4ocnVieSk7CisgICAgICAg
ICAgICBydWJ5LT5hZGRDaGlsZChXVEZNb3ZlKG5ld1J1biksIG5leHRTaWJsaW5nKCkpOwogICAg
ICAgICAgICAgLy8gQWRkIHRoZSBuZXcgcnVieSB0ZXh0IGFuZCBtb3ZlIHRoZSBvbGQgb25lIHRv
IHRoZSBuZXcgcnVuCiAgICAgICAgICAgICAvLyBOb3RlOiBEb2luZyBpdCBpbiB0aGlzIG9yZGVy
IGFuZCBub3QgdXNpbmcgUmVuZGVyUnVieVJ1bidzIG1ldGhvZHMsCiAgICAgICAgICAgICAvLyBp
biBvcmRlciB0byBhdm9pZCBhdXRvbWF0aWMgcmVtb3ZhbCBvZiB0aGUgcnVieSBydW4gaW4gY2Fz
ZSB0aGVyZSBpcyBubwogICAgICAgICAgICAgLy8gb3RoZXIgY2hpbGQgYmVzaWRlcyB0aGUgb2xk
IHJ1YnkgdGV4dC4KLSAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoY2hpbGQs
IGJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6cmVtb3ZlQ2hpbGQo
KmJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAgIG5ld1J1bi0+YWRkQ2hpbGQoYmVmb3JlQ2hpbGQp
OworICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwg
YmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgYXV0byB0YWtlbkJlZm9yZUNoaWxkID0gUmVuZGVy
QmxvY2tGbG93Ojp0YWtlQ2hpbGQoKmJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAgIG5ld1J1bi0+
YWRkQ2hpbGQoV1RGTW92ZSh0YWtlbkJlZm9yZUNoaWxkKSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
aGFzUnVieUJhc2UoKSkgewogICAgICAgICAgICAgLy8gSW5zZXJ0aW9uIGJlZm9yZSBhIHJ1Ynkg
YmFzZSBvYmplY3QuCiAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgbmVlZCBpbnNlcnQg
YSBuZXcgcnVuIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgYW5kIHNwbGl0IHRoZSBiYXNlLgogICAg
ICAgICAgICAgUmVuZGVyRWxlbWVudCogcnVieSA9IHBhcmVudCgpOwotICAgICAgICAgICAgUmVu
ZGVyUnVieVJ1biogbmV3UnVuID0gc3RhdGljQ3JlYXRlUnVieVJ1bihydWJ5KTsKLSAgICAgICAg
ICAgIHJ1YnktPmFkZENoaWxkKG5ld1J1biwgdGhpcyk7Ci0gICAgICAgICAgICBuZXdSdW4tPmFk
ZENoaWxkKGNoaWxkKTsKLSAgICAgICAgICAgIHJ1YnlCYXNlU2FmZSgpLT5tb3ZlQ2hpbGRyZW4o
bmV3UnVuLT5ydWJ5QmFzZVNhZmUoKSwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgYXV0byBu
ZXdSdW4gPSBzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1YnkpOworICAgICAgICAgICAgYXV0byYgcnVu
ID0gKm5ld1J1bjsKKyAgICAgICAgICAgIHJ1YnktPmFkZENoaWxkKFdURk1vdmUobmV3UnVuKSwg
dGhpcyk7CisgICAgICAgICAgICBydW4uYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOworICAgICAg
ICAgICAgcnVieUJhc2VTYWZlKCktPm1vdmVDaGlsZHJlbihydW4ucnVieUJhc2VTYWZlKCksIGJl
Zm9yZUNoaWxkKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIGNoaWxkIGlz
IG5vdCBhIHRleHQgLT4gaW5zZXJ0IGl0IGludG8gdGhlIGJhc2UKICAgICAgICAgLy8gKGFwcGVu
ZCBpdCBpbnN0ZWFkIGlmIGJlZm9yZUNoaWxkIGlzIHRoZSBydWJ5IHRleHQpCiAgICAgICAgIGlm
IChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+aXNSdWJ5VGV4dCgpKQogICAgICAgICAgICAg
YmVmb3JlQ2hpbGQgPSAwOwotICAgICAgICBydWJ5QmFzZVNhZmUoKS0+YWRkQ2hpbGQoY2hpbGQs
IGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcnVieUJhc2VTYWZlKCktPmFkZENoaWxkKFdURk1vdmUo
Y2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgfQogfQogCi12b2lkIFJlbmRlclJ1YnlSdW46OnJl
bW92ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBS
ZW5kZXJSdWJ5UnVuOjp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAgICAvLyBJ
ZiB0aGUgY2hpbGQgaXMgYSBydWJ5IHRleHQsIHRoZW4gbWVyZ2UgdGhlIHJ1YnkgYmFzZSB3aXRo
IHRoZSBiYXNlIG9mCiAgICAgLy8gdGhlIHJpZ2h0IHNpYmxpbmcgcnVuLCBpZiBwb3NzaWJsZS4K
QEAgLTE3MiwzOSArMTc0LDM5IEBAIHZvaWQgUmVuZGVyUnVieVJ1bjo6cmVtb3ZlQ2hpbGQoUmVu
ZGVyT2IKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlbmRlckJsb2NrRmxvdzo6cmVtb3ZlQ2hp
bGQoY2hpbGQpOworICAgIGF1dG8gdGFrZW5DaGlsZCA9IFJlbmRlckJsb2NrRmxvdzo6dGFrZUNo
aWxkKGNoaWxkKTsKIAogICAgIGlmICghYmVpbmdEZXN0cm95ZWQoKSAmJiAhcmVuZGVyVHJlZUJl
aW5nRGVzdHJveWVkKCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgb3VyIGJhc2UgKGlmIGFueSkg
aXMgbm93IGVtcHR5LiBJZiBzbywgZGVzdHJveSBpdC4KICAgICAgICAgUmVuZGVyQmxvY2sqIGJh
c2UgPSBydWJ5QmFzZSgpOwogICAgICAgICBpZiAoYmFzZSAmJiAhYmFzZS0+Zmlyc3RDaGlsZCgp
KSB7Ci0gICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OnJlbW92ZUNoaWxkKCpiYXNlKTsKKyAg
ICAgICAgICAgIGF1dG8gdGFrZW5CYXNlID0gUmVuZGVyQmxvY2tGbG93Ojp0YWtlQ2hpbGQoKmJh
c2UpOwogICAgICAgICAgICAgYmFzZS0+ZGVsZXRlTGluZXMoKTsKLSAgICAgICAgICAgIGJhc2Ut
PmRlc3Ryb3koKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIGFueSBvZiB0aGUgYWJvdmUg
bGVhdmVzIHRoZSBydW4gZW1wdHksIGRlc3Ryb3kgaXQgYXMgd2VsbC4KICAgICAgICAgaWYgKCFo
YXNSdWJ5VGV4dCgpICYmICFoYXNSdWJ5QmFzZSgpKSB7Ci0gICAgICAgICAgICBwYXJlbnQoKS0+
cmVtb3ZlQ2hpbGQoKnRoaXMpOworICAgICAgICAgICAgYXV0byB0YWtlblRoaXMgPSBwYXJlbnQo
KS0+dGFrZUNoaWxkKCp0aGlzKTsKICAgICAgICAgICAgIGRlbGV0ZUxpbmVzKCk7Ci0gICAgICAg
ICAgICBkZXN0cm95KCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gdGFrZW5DaGls
ZDsKIH0KIAotUmVuZGVyUnVieUJhc2UqIFJlbmRlclJ1YnlSdW46OmNyZWF0ZVJ1YnlCYXNlKCkg
Y29uc3QKK1JlbmRlclB0cjxSZW5kZXJSdWJ5QmFzZT4gUmVuZGVyUnVieVJ1bjo6Y3JlYXRlUnVi
eUJhc2UoKSBjb25zdAogewogICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
QW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSgpLCBCTE9DSyk7CiAgICAgbmV3U3R5bGUu
c2V0VGV4dEFsaWduKENFTlRFUik7IC8vIEZJWE1FOiB1c2UgV0VCS0lUX0NFTlRFUj8KLSAgICBh
dXRvIHJlbmRlcmVyID0gbmV3IFJlbmRlclJ1YnlCYXNlKGRvY3VtZW50KCksIFdURk1vdmUobmV3
U3R5bGUpKTsKKyAgICBhdXRvIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyUnVieUJh
c2U+KGRvY3VtZW50KCksIFdURk1vdmUobmV3U3R5bGUpKTsKICAgICByZW5kZXJlci0+aW5pdGlh
bGl6ZVN0eWxlKCk7CiAgICAgcmV0dXJuIHJlbmRlcmVyOwogfQogCi1SZW5kZXJSdWJ5UnVuKiBS
ZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKGNvbnN0IFJlbmRlck9iamVjdCogcGFy
ZW50UnVieSkKK1JlbmRlclB0cjxSZW5kZXJSdWJ5UnVuPiBSZW5kZXJSdWJ5UnVuOjpzdGF0aWND
cmVhdGVSdWJ5UnVuKGNvbnN0IFJlbmRlck9iamVjdCogcGFyZW50UnVieSkKIHsKICAgICBBU1NF
UlQoaXNSdWJ5KHBhcmVudFJ1YnkpKTsKLSAgICBhdXRvIHJlbmRlcmVyID0gbmV3IFJlbmRlclJ1
YnlSdW4ocGFyZW50UnVieS0+ZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91
c1N0eWxlV2l0aERpc3BsYXkocGFyZW50UnVieS0+c3R5bGUoKSwgSU5MSU5FX0JMT0NLKSk7Cisg
ICAgYXV0byByZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclJ1YnlSdW4+KHBhcmVudFJ1
YnktPmRvY3VtZW50KCksIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNw
bGF5KHBhcmVudFJ1YnktPnN0eWxlKCksIElOTElORV9CTE9DSykpOwogICAgIHJlbmRlcmVyLT5p
bml0aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gcmVuZGVyZXI7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDE0ICs1NiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5
b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUhlaWdodCA9IDApIG92ZXJyaWRlOwogCiAgICAg
Ym9vbCBpc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHls
ZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotICAgIHZvaWQgcmVt
b3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5k
ZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDAp
IG92ZXJyaWRlOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJP
YmplY3QmKSBvdmVycmlkZTsKIAogICAgIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNv
bnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBnZXRPdmVyaGFuZyhib29sIGZpcnN0TGluZSwgUmVu
ZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBSZW5kZXJPYmplY3QqIGVuZFJlbmRlcmVyLCBmbG9h
dCYgc3RhcnRPdmVyaGFuZywgZmxvYXQmIGVuZE92ZXJoYW5nKSBjb25zdDsKIAotICAgIHN0YXRp
YyBSZW5kZXJSdWJ5UnVuKiBzdGF0aWNDcmVhdGVSdWJ5UnVuKGNvbnN0IFJlbmRlck9iamVjdCog
cGFyZW50UnVieSk7CisgICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJSdWJ5UnVuPiBzdGF0aWND
cmVhdGVSdWJ5UnVuKGNvbnN0IFJlbmRlck9iamVjdCogcGFyZW50UnVieSk7CiAgICAgCiAgICAg
dm9pZCB1cGRhdGVQcmlvckNvbnRleHRGcm9tQ2FjaGVkQnJlYWtJdGVyYXRvcihMYXp5TGluZUJy
ZWFrSXRlcmF0b3ImKSBjb25zdDsKICAgICB2b2lkIHNldENhY2hlZFByaW9yQ2hhcmFjdGVycyhV
Q2hhciBsYXN0LCBVQ2hhciBzZWNvbmRUb0xhc3QpCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoK
ICAgICBib29sIGNhbkJyZWFrQmVmb3JlKGNvbnN0IExhenlMaW5lQnJlYWtJdGVyYXRvciYpIGNv
bnN0OwogICAgIAogcHJvdGVjdGVkOgotICAgIFJlbmRlclJ1YnlCYXNlKiBjcmVhdGVSdWJ5QmFz
ZSgpIGNvbnN0OworICAgIFJlbmRlclB0cjxSZW5kZXJSdWJ5QmFzZT4gY3JlYXRlUnVieUJhc2Uo
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBib29sIGlzUnVieVJ1bigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCByZXNldFNlY3Rpb25Qb2ludGVySWYKICAgICAgICAgcHRyID0gMDsKIH0KIAot
dm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlclB0cjxS
ZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGJv
b2wgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9ICFjaGlsZC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCk7CiAKQEAgLTE1MCwxOCArMTUwLDE4IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJl
bmRlck9iamVjdCoKICAgICAgICAgICAgIGNhc2UgVEFCTEVfSEVBREVSX0dST1VQOgogICAgICAg
ICAgICAgICAgIHJlc2V0U2VjdGlvblBvaW50ZXJJZk5vdEJlZm9yZShtX2hlYWQsIGJlZm9yZUNo
aWxkKTsKICAgICAgICAgICAgICAgICBpZiAoIW1faGVhZCkgewotICAgICAgICAgICAgICAgICAg
ICBtX2hlYWQgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9oZWFkID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZC5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcmVz
ZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1fZmlyc3RCb2R5LCBiZWZvcmVDaGlsZCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9maXJzdEJvZHkpIAotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9maXJzdEJvZHkgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gZG93bmNhc3Q8UmVuZGVyVGFi
bGVTZWN0aW9uPihjaGlsZC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHdyYXBJbkFub255bW91c1NlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgVEFCTEVfRk9PVEVSX0dST1VQOgogICAgICAgICAgICAgICAg
IHJlc2V0U2VjdGlvblBvaW50ZXJJZk5vdEJlZm9yZShtX2Zvb3QsIGJlZm9yZUNoaWxkKTsKICAg
ICAgICAgICAgICAgICBpZiAoIW1fZm9vdCkgewotICAgICAgICAgICAgICAgICAgICBtX2Zvb3Qg
PSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9mb290ID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZC5nZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHdyYXBJbkFub255bW91c1NlY3Rpb24gPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY5LDcgKzE2OSw3
IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCoKICAgICAgICAgICAg
IGNhc2UgVEFCTEVfUk9XX0dST1VQOgogICAgICAgICAgICAgICAgIHJlc2V0U2VjdGlvblBvaW50
ZXJJZk5vdEJlZm9yZShtX2ZpcnN0Qm9keSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgICAg
IGlmICghbV9maXJzdEJvZHkpCi0gICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gZG93
bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIG1f
Zmlyc3RCb2R5ID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZC5nZXQoKSk7CiAg
ICAgICAgICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTE4NywxOSArMTg3LDE5IEBA
IHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCoKICAgICAgICAgaWYgKGJl
Zm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQogICAgICAgICAgICAg
YmVmb3JlQ2hpbGQgPSBzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoYmVmb3JlQ2hpbGQp
OwogCi0gICAgICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAg
ICAgICAgUmVuZGVyQm94OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFiZWZvcmVDaGlsZCAmJiBpczxSZW5k
ZXJUYWJsZVNlY3Rpb24+KGxhc3RDaGlsZCgpKSAmJiBsYXN0Q2hpbGQoKS0+aXNBbm9ueW1vdXMo
KSAmJiAhbGFzdENoaWxkKCktPmlzQmVmb3JlQ29udGVudCgpKSB7Ci0gICAgICAgIGRvd25jYXN0
PFJlbmRlclRhYmxlU2VjdGlvbj4oKmxhc3RDaGlsZCgpKS5hZGRDaGlsZChjaGlsZCk7CisgICAg
ICAgIGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oKmxhc3RDaGlsZCgpKS5hZGRDaGlsZChX
VEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZiAoYmVmb3Jl
Q2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc0Fub255bW91cygpICYmIGJlZm9yZUNoaWxkLT5wYXJl
bnQoKSA9PSB0aGlzKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogc2VjdGlvbiA9IGJlZm9yZUNo
aWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgaWYgKGlzPFJlbmRlclRhYmxlU2VjdGlv
bj4oc2VjdGlvbikgJiYgc2VjdGlvbi0+aXNBbm9ueW1vdXMoKSkgewotICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqc2VjdGlvbikuYWRkQ2hpbGQoY2hpbGQpOworICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqc2VjdGlvbikuYWRkQ2hpbGQo
V1RGTW92ZShjaGlsZCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjExLDE2ICsyMTEsMTcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2Jq
ZWN0KgogICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24mIHNlY3Rpb24gPSBkb3duY2FzdDxSZW5k
ZXJUYWJsZVNlY3Rpb24+KCpsYXN0Qm94KTsKICAgICAgICAgaWYgKGJlZm9yZUNoaWxkID09ICZz
ZWN0aW9uKQogICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBzZWN0aW9uLmZpcnN0Um93KCk7Ci0g
ICAgICAgIHNlY3Rpb24uYWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgc2Vj
dGlvbi5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKGJlZm9yZUNoaWxkICYmICFpczxSZW5kZXJUYWJsZVNlY3Rp
b24+KCpiZWZvcmVDaGlsZCkgJiYgYmVmb3JlQ2hpbGQtPnN0eWxlKCkuZGlzcGxheSgpICE9IFRB
QkxFX0NBUFRJT04gJiYgYmVmb3JlQ2hpbGQtPnN0eWxlKCkuZGlzcGxheSgpICE9IFRBQkxFX0NP
TFVNTl9HUk9VUCkKICAgICAgICAgYmVmb3JlQ2hpbGQgPSBudWxscHRyOwogCi0gICAgYXV0byBz
ZWN0aW9uID0gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVu
ZGVyZXIoKnRoaXMpLnJlbGVhc2UoKTsKLSAgICBhZGRDaGlsZChzZWN0aW9uLCBiZWZvcmVDaGls
ZCk7Ci0gICAgc2VjdGlvbi0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGF1dG8gbmV3U2VjdGlvbiA9
IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKCp0
aGlzKTsKKyAgICBhdXRvJiBzZWN0aW9uID0gKm5ld1NlY3Rpb247CisgICAgYWRkQ2hpbGQoV1RG
TW92ZShuZXdTZWN0aW9uKSwgYmVmb3JlQ2hpbGQpOworICAgIHNlY3Rpb24uYWRkQ2hpbGQoV1RG
TW92ZShjaGlsZCkpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlOjphZGRDYXB0aW9uKGNvbnN0IFJl
bmRlclRhYmxlQ2FwdGlvbiogY2FwdGlvbikKQEAgLTE1NzcsMTQgKzE1NzgsMTQgQEAgYm9vbCBS
ZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlPiBSZW5kZXJUYWJsZTo6Y3JlYXRlVGFibGVX
aXRoU3R5bGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitS
ZW5kZXJQdHI8UmVuZGVyVGFibGU+IFJlbmRlclRhYmxlOjpjcmVhdGVUYWJsZVdpdGhTdHlsZShE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBhdXRv
IHRhYmxlID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJUYWJsZT4oZG9jdW1lbnQsIFJlbmRlclN0
eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBzdHlsZS5kaXNwbGF5
KCkgPT0gSU5MSU5FID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpKTsKKyAgICBhdXRvIHRhYmxlID0g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyVGFibGU+KGRvY3VtZW50LCBSZW5kZXJTdHlsZTo6Y3JlYXRl
QW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgc3R5bGUuZGlzcGxheSgpID09IElOTElO
RSA/IElOTElORV9UQUJMRSA6IFRBQkxFKSk7CiAgICAgdGFibGUtPmluaXRpYWxpemVTdHlsZSgp
OwogICAgIHJldHVybiB0YWJsZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlPiBS
ZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRl
ckVsZW1lbnQmIHBhcmVudCkKK1JlbmRlclB0cjxSZW5kZXJUYWJsZT4gUmVuZGVyVGFibGU6OmNy
ZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50JiBwYXJl
bnQpCiB7CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlOjpjcmVhdGVUYWJsZVdpdGhTdHlsZShwYXJl
bnQuZG9jdW1lbnQoKSwgcGFyZW50LnN0eWxlKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNyArMTI2LDcg
QEAgcHVibGljOgogICAgIExheW91dFVuaXQgY2FsY0JvcmRlckVuZCgpIGNvbnN0OwogICAgIHZv
aWQgcmVjYWxjQm9yZGVyc0luUm93RGlyZWN0aW9uKCk7CiAKLSAgICB2b2lkIGFkZENoaWxkKFJl
bmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBmaW5hbDsK
KyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gMCkgZmluYWw7CiAKICAgICBzdHJ1Y3QgQ29sdW1uU3RydWN0
IHsKICAgICAgICAgZXhwbGljaXQgQ29sdW1uU3RydWN0KHVuc2lnbmVkIGluaXRpYWxTcGFuID0g
MSkKQEAgLTI1MCw4ICsyNTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZWNhbGNTZWN0aW9u
cygpOwogICAgIH0KIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGU+IGNy
ZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVtZW50Jik7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVU
eXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgc3Rh
dGljIFJlbmRlclB0cjxSZW5kZXJUYWJsZT4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRl
cmVyKGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyQm94PiBjcmVh
dGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBj
b25zdCBvdmVycmlkZTsKIAogICAgIGNvbnN0IEJvcmRlclZhbHVlJiB0YWJsZVN0YXJ0Qm9yZGVy
QWRqb2luaW5nQ2VsbChjb25zdCBSZW5kZXJUYWJsZUNlbGwmKSBjb25zdDsKICAgICBjb25zdCBC
b3JkZXJWYWx1ZSYgdGFibGVFbmRCb3JkZXJBZGpvaW5pbmdDZWxsKGNvbnN0IFJlbmRlclRhYmxl
Q2VsbCYpIGNvbnN0OwpAQCAtMjczLDcgKzI3Myw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHNp
bXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkgZmluYWw7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZT4gY3JlYXRlVGFibGVXaXRoU3R5bGUoRG9jdW1l
bnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyVGFi
bGU+IGNyZWF0ZVRhYmxlV2l0aFN0eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsK
IAogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAi
UmVuZGVyVGFibGUiOyB9CiAKQEAgLTM4MCw3ICszODAsNyBAQCBpbmxpbmUgUmVuZGVyVGFibGVT
ZWN0aW9uKiBSZW5kZXJUYWJsZTo6CiAKIGlubGluZSBib29sIGlzRGlyZWN0aW9uU2FtZShjb25z
dCBSZW5kZXJCb3gqIHRhYmxlSXRlbSwgY29uc3QgUmVuZGVyQm94KiBvdGhlclRhYmxlSXRlbSkg
eyByZXR1cm4gdGFibGVJdGVtICYmIG90aGVyVGFibGVJdGVtID8gdGFibGVJdGVtLT5zdHlsZSgp
LmRpcmVjdGlvbigpID09IG90aGVyVGFibGVJdGVtLT5zdHlsZSgpLmRpcmVjdGlvbigpIDogdHJ1
ZTsgfQogCi1pbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGU6OmNy
ZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIp
IGNvbnN0CitpbmxpbmUgUmVuZGVyUHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGU6OmNyZWF0ZUFu
b255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVyZXIpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlOjpjcmVhdGVUYWJsZVdpdGhTdHlsZShyZW5kZXJl
ci5kb2N1bWVudCgpLCByZW5kZXJlci5zdHlsZSgpKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM2NSwxNCArMTM2NSwxNCBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2Nyb2xsYmFy
c0NoYW5nZWQoCiAgICAgICAgIHNldEludHJpbnNpY1BhZGRpbmdBZnRlcihpbnRyaW5zaWNQYWRk
aW5nQWZ0ZXIoKSAtIHNjcm9sbGJhckhlaWdodCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJUYWJsZUNlbGw+IFJlbmRlclRhYmxlQ2VsbDo6Y3JlYXRlVGFibGVDZWxsV2l0aFN0eWxlKERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQorUmVuZGVyUHRyPFJl
bmRlclRhYmxlQ2VsbD4gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVUYWJsZUNlbGxXaXRoU3R5bGUo
RG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAgYXV0
byBjZWxsID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJUYWJsZUNlbGw+KGRvY3VtZW50LCBSZW5k
ZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgVEFCTEVfQ0VM
TCkpOworICAgIGF1dG8gY2VsbCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRhYmxlQ2VsbD4oZG9j
dW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxl
LCBUQUJMRV9DRUxMKSk7CiAgICAgY2VsbC0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAgICAgcmV0dXJu
IGNlbGw7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZUNlbGw+IFJlbmRlclRhYmxl
Q2VsbDo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlclRhYmxl
Um93JiBwYXJlbnQpCitSZW5kZXJQdHI8UmVuZGVyVGFibGVDZWxsPiBSZW5kZXJUYWJsZUNlbGw6
OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVJvdyYg
cGFyZW50KQogewogICAgIHJldHVybiBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZVRhYmxlQ2VsbFdp
dGhTdHlsZShwYXJlbnQuZG9jdW1lbnQoKSwgcGFyZW50LnN0eWxlKCkpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkocmV2aXNpb24gMjIyNjA3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDgsOCArMTA4LDggQEAgcHVibGljOgogICAgIGJvb2wgY2VsbFdpZHRoQ2hh
bmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFdpZHRoQ2hhbmdlZDsgfQogICAgIHZvaWQgc2V0
Q2VsbFdpZHRoQ2hhbmdlZChib29sIGIgPSB0cnVlKSB7IG1fY2VsbFdpZHRoQ2hhbmdlZCA9IGI7
IH0KIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVDZWxsPiBjcmVhdGVB
bm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVSb3cmKTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVB
cyhjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVuZGVyUHRy
PFJlbmRlclRhYmxlQ2VsbD4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0
IFJlbmRlclRhYmxlUm93Jik7CisgICAgUmVuZGVyUHRyPFJlbmRlckJveD4gY3JlYXRlQW5vbnlt
b3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JikgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdW5pZnkgd2hpY2ggdGFibGUgcGFydCdz
IHN0eWxlIHdlIHVzZSBmb3IgY29tcHV0aW5nIGRpcmVjdGlvbiBhbmQKICAgICAvLyB3cml0aW5n
IG1vZGUuIFdyaXRpbmcgbW9kZXMgYXJlIG5vdCBhbGxvd2VkIG9uIHJvdyBncm91cCBhbmQgcm93
IGJ1dCBkaXJlY3Rpb24gaXMuCkBAIC0xMzgsNyArMTM4LDcgQEAgcHJvdGVjdGVkOgogICAgIHZv
aWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToK
LSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlQ2VsbD4gY3JlYXRlVGFibGVD
ZWxsV2l0aFN0eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICBzdGF0aWMg
UmVuZGVyUHRyPFJlbmRlclRhYmxlQ2VsbD4gY3JlYXRlVGFibGVDZWxsV2l0aFN0eWxlKERvY3Vt
ZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKIAogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAoaXNBbm9ueW1vdXMoKSB8fCBpc1BzZXVkb0VsZW1l
bnQoKSkgPyAiUmVuZGVyVGFibGVDZWxsIChhbm9ueW1vdXMpIiA6ICJSZW5kZXJUYWJsZUNlbGwi
OyB9CiAKQEAgLTM3NSw3ICszNzUsNyBAQCBpbmxpbmUgdm9pZCBSZW5kZXJUYWJsZUNlbGw6Omlu
dmFsaWRhdGVICiAgICAgbV9oYXNFbXB0eUNvbGxhcHNlZEVuZEJvcmRlciA9IGZhbHNlOwogfQog
Ci1pbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGVDZWxsOjpjcmVh
dGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBj
b25zdAoraW5saW5lIFJlbmRlclB0cjxSZW5kZXJCb3g+IFJlbmRlclRhYmxlQ2VsbDo6Y3JlYXRl
QW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29u
c3QKIHsKICAgICByZXR1cm4gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVUYWJsZUNlbGxXaXRoU3R5
bGUocmVuZGVyZXIuZG9jdW1lbnQoKSwgcmVuZGVyZXIuc3R5bGUoKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDIyMjYw
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBjb25zdCBCb3JkZXJWYWx1ZSYgUmVuZGVyVGFi
bGVSb3c6OmJvcmRlCiAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7CiB9CiAKLXZvaWQg
UmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJQdHI8
UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICBp
ZiAoIWlzPFJlbmRlclRhYmxlQ2VsbD4oKmNoaWxkKSkgewogICAgICAgICBSZW5kZXJPYmplY3Qq
IGxhc3QgPSBiZWZvcmVDaGlsZDsKQEAgLTExNiwxNCArMTE2LDE0IEBAIHZvaWQgUmVuZGVyVGFi
bGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamUKICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCYg
Y2VsbCA9IGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKmxhc3QpOwogICAgICAgICAgICAgaWYg
KGJlZm9yZUNoaWxkID09ICZjZWxsKQogICAgICAgICAgICAgICAgIGJlZm9yZUNoaWxkID0gY2Vs
bC5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBjZWxsLmFkZENoaWxkKGNoaWxkLCBiZWZvcmVD
aGlsZCk7CisgICAgICAgICAgICBjZWxsLmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVD
aGlsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYmVm
b3JlQ2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc0Fub255bW91cygpICYmIGJlZm9yZUNoaWxkLT5w
YXJlbnQoKSA9PSB0aGlzKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNlbGwgPSBiZWZv
cmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGFi
bGVDZWxsPihjZWxsKSAmJiBjZWxsLT5pc0Fub255bW91cygpKSB7Ci0gICAgICAgICAgICAgICAg
ZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqY2VsbCkuYWRkQ2hpbGQoY2hpbGQpOworICAgICAg
ICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKmNlbGwpLmFkZENoaWxkKFdURk1v
dmUoY2hpbGQpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTEzMiwyMSArMTMyLDIzIEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OmFkZENoaWxk
KFJlbmRlck9iamUKICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC0+cGFyZW50KCkgJiYgbGFzdC0+
cGFyZW50KCktPmlzQW5vbnltb3VzKCkgJiYgIWxhc3QtPnBhcmVudCgpLT5pc0JlZm9yZU9yQWZ0
ZXJDb250ZW50KCkpIHsKICAgICAgICAgICAgIC8vIElmIGJlZm9yZUNoaWxkIGlzIGluc2lkZSBh
biBhbm9ueW1vdXMgY2VsbCwgaW5zZXJ0IGludG8gdGhlIGNlbGwuCiAgICAgICAgICAgICBpZiAo
IWlzPFJlbmRlclRhYmxlQ2VsbD4oKmxhc3QpKSB7Ci0gICAgICAgICAgICAgICAgbGFzdC0+cGFy
ZW50KCktPmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICAgICAgbGFz
dC0+cGFyZW50KCktPmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gSWYgYmVm
b3JlQ2hpbGQgaXMgaW5zaWRlIGFuIGFub255bW91cyByb3csIGluc2VydCBpbnRvIHRoZSByb3cu
CiAgICAgICAgICAgICBhdXRvJiBwYXJlbnQgPSAqbGFzdC0+cGFyZW50KCk7CiAgICAgICAgICAg
ICBpZiAoaXM8UmVuZGVyVGFibGVSb3c+KHBhcmVudCkpIHsKLSAgICAgICAgICAgICAgICBhdXRv
KiBjZWxsID0gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVy
ZXIoKnRoaXMpLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBwYXJlbnQuYWRkQ2hpbGQoY2Vs
bCwgYmVmb3JlQ2hpbGQpOwotICAgICAgICAgICAgICAgIGNlbGwtPmFkZENoaWxkKGNoaWxkKTsK
KyAgICAgICAgICAgICAgICBhdXRvIG5ld0NlbGwgPSBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZUFu
b255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcyk7CisgICAgICAgICAgICAgICAgYXV0byYg
Y2VsbCA9ICpuZXdDZWxsOworICAgICAgICAgICAgICAgIHBhcmVudC5hZGRDaGlsZChXVEZNb3Zl
KG5ld0NlbGwpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICAgICAgY2VsbC5hZGRDaGlsZChX
VEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIGF1dG8qIGNlbGwgPSBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZUFu
b255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcykucmVsZWFzZSgpOwotICAgICAgICBhZGRD
aGlsZChjZWxsLCBiZWZvcmVDaGlsZCk7Ci0gICAgICAgIGNlbGwtPmFkZENoaWxkKGNoaWxkKTsK
KyAgICAgICAgYXV0byBuZXdDZWxsID0gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVBbm9ueW1vdXNX
aXRoUGFyZW50UmVuZGVyZXIoKnRoaXMpOworICAgICAgICBhdXRvJiBjZWxsID0gKm5ld0NlbGw7
CisgICAgICAgIGFkZENoaWxkKFdURk1vdmUobmV3Q2VsbCksIGJlZm9yZUNoaWxkKTsKKyAgICAg
ICAgY2VsbC5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
IAogCkBAIC0xNjAsNyArMTYyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVu
ZGVyT2JqZQogICAgICAgICBzZWN0aW9uLT5hZGRDZWxsKCZjZWxsLCB0aGlzKTsKIAogICAgIEFT
U0VSVCghYmVmb3JlQ2hpbGQgfHwgaXM8UmVuZGVyVGFibGVDZWxsPigqYmVmb3JlQ2hpbGQpKTsK
LSAgICBSZW5kZXJCb3g6OmFkZENoaWxkKCZjZWxsLCBiZWZvcmVDaGlsZCk7CisgICAgUmVuZGVy
Qm94OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogCiAgICAgaWYgKGJl
Zm9yZUNoaWxkIHx8IG5leHRSb3coKSkKICAgICAgICAgc2VjdGlvbigpLT5zZXROZWVkc0NlbGxS
ZWNhbGMoKTsKQEAgLTI3MCwxNCArMjcyLDE0IEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6OmltYWdl
Q2hhbmdlZChXcmFwcGUKICAgICByZXBhaW50KCk7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJUYWJsZVJvdz4gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZVRhYmxlUm93V2l0aFN0eWxlKERvY3Vt
ZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQorUmVuZGVyUHRyPFJlbmRl
clRhYmxlUm93PiBSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlVGFibGVSb3dXaXRoU3R5bGUoRG9jdW1l
bnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAgYXV0byByb3cg
PSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclRhYmxlUm93Pihkb2N1bWVudCwgUmVuZGVyU3R5bGU6
OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUsIFRBQkxFX1JPVykpOworICAg
IGF1dG8gcm93ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGFibGVSb3c+KGRvY3VtZW50LCBSZW5k
ZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgVEFCTEVfUk9X
KSk7CiAgICAgcm93LT5pbml0aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gcm93OwogfQogCi1z
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVSb3c+IFJlbmRlclRhYmxlUm93OjpjcmVhdGVBbm9u
eW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uJiBwYXJlbnQp
CitSZW5kZXJQdHI8UmVuZGVyVGFibGVSb3c+IFJlbmRlclRhYmxlUm93OjpjcmVhdGVBbm9ueW1v
dXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uJiBwYXJlbnQpCiB7
CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlUm93OjpjcmVhdGVUYWJsZVJvd1dpdGhTdHlsZShwYXJl
bnQuZG9jdW1lbnQoKSwgcGFyZW50LnN0eWxlKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4
ICs0Niw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnRPdXRsaW5lRm9yUm93SWZOZWVkZWQo
UGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyVGFibGVSb3c+IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihj
b25zdCBSZW5kZXJUYWJsZVNlY3Rpb24mKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94
PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25z
dCBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclRhYmxlUm93PiBjcmVhdGVB
bm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uJik7Cisg
ICAgUmVuZGVyUHRyPFJlbmRlckJveD4gY3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMo
Y29uc3QgUmVuZGVyQm94JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldFJvd0luZGV4
KHVuc2lnbmVkKTsKICAgICBib29sIHJvd0luZGV4V2FzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9y
b3dJbmRleCAhPSB1bnNldFJvd0luZGV4OyB9CkBAIC01OCwxNCArNTgsMTQgQEAgcHVibGljOgog
ICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdTdGFydENlbGwoY29uc3QgUmVu
ZGVyVGFibGVDZWxsJikgY29uc3Q7CiAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJvcmRlckFkam9p
bmluZ0VuZENlbGwoY29uc3QgUmVuZGVyVGFibGVDZWxsJikgY29uc3Q7CiAKLSAgICB2b2lkIGFk
ZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAw
KSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNo
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CiAKICAgICBib29s
IG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
ZGVzdHJveUFuZENvbGxhcHNlQW5vbnltb3VzU2libGluZ1Jvd3MoKTsKIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlUm93PiBjcmVhdGVUYWJsZVJvd1dp
dGhTdHlsZShEb2N1bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgc3RhdGljIFJlbmRl
clB0cjxSZW5kZXJUYWJsZVJvdz4gY3JlYXRlVGFibGVSb3dXaXRoU3R5bGUoRG9jdW1lbnQmLCBj
b25zdCBSZW5kZXJTdHlsZSYpOwogCiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIChpc0Fub255bW91cygpIHx8IGlzUHNldWRvRWxlbWVudCgpKSA/
ICJSZW5kZXJUYWJsZVJvdyAoYW5vbnltb3VzKSIgOiAiUmVuZGVyVGFibGVSb3ciOyB9CiAKQEAg
LTE1MCw3ICsxNTAsNyBAQCBpbmxpbmUgUmVuZGVyVGFibGVSb3cqIFJlbmRlclRhYmxlU2VjdGlv
CiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlUm93PihSZW5kZXJCb3g6Omxhc3RDaGls
ZCgpKTsKIH0KIAotaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3g+IFJlbmRlclRhYmxl
Um93OjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJl
bmRlcmVyKSBjb25zdAoraW5saW5lIFJlbmRlclB0cjxSZW5kZXJCb3g+IFJlbmRlclRhYmxlUm93
OjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRl
cmVyKSBjb25zdAogewogICAgIHJldHVybiBSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlVGFibGVSb3dX
aXRoU3R5bGUocmVuZGVyZXIuZG9jdW1lbnQoKSwgcmVuZGVyZXIuc3R5bGUoKSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAko
cmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyCiAgICAgc2V0TmVlZHNDZWxsUmVjYWxjKCk7
CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNo
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246
OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQogewogICAgIGlmICghaXM8UmVuZGVyVGFibGVSb3c+KCpjaGlsZCkpIHsKICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0ID0gYmVmb3JlQ2hpbGQ7CkBAIC0xMjgsMTQgKzEyOCwx
NCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAgICAgICAgICAg
ICBSZW5kZXJUYWJsZVJvdyYgcm93ID0gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCpsYXN0KTsK
ICAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSAmcm93KQogICAgICAgICAgICAgICAgIGJl
Zm9yZUNoaWxkID0gcm93LmZpcnN0Q2VsbCgpOwotICAgICAgICAgICAgcm93LmFkZENoaWxkKGNo
aWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICByb3cuYWRkQ2hpbGQoV1RGTW92ZShjaGls
ZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3VzKCkgJiYgYmVm
b3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCog
cm93ID0gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICAgICAgaWYgKGlz
PFJlbmRlclRhYmxlUm93Pihyb3cpICYmIHJvdy0+aXNBbm9ueW1vdXMoKSkgewotICAgICAgICAg
ICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlUm93Pigqcm93KS5hZGRDaGlsZChjaGlsZCk7Cisg
ICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCpyb3cpLmFkZENoaWxkKFdU
Rk1vdmUoY2hpbGQpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTE0NiwxMyArMTQ2LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjph
ZGRDaGlsZChSZW5kZXIKICAgICAgICAgd2hpbGUgKGxhc3RCb3ggJiYgbGFzdEJveC0+cGFyZW50
KCktPmlzQW5vbnltb3VzKCkgJiYgIWlzPFJlbmRlclRhYmxlUm93PigqbGFzdEJveCkpCiAgICAg
ICAgICAgICBsYXN0Qm94ID0gbGFzdEJveC0+cGFyZW50KCk7CiAgICAgICAgIGlmIChsYXN0Qm94
ICYmIGxhc3RCb3gtPmlzQW5vbnltb3VzKCkgJiYgIWxhc3RCb3gtPmlzQmVmb3JlT3JBZnRlckNv
bnRlbnQoKSkgewotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCpsYXN0Qm94
KS5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVu
ZGVyVGFibGVSb3c+KCpsYXN0Qm94KS5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hp
bGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byogcm93
ID0gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhp
cykucmVsZWFzZSgpOwotICAgICAgICBhZGRDaGlsZChyb3csIGJlZm9yZUNoaWxkKTsKLSAgICAg
ICAgcm93LT5hZGRDaGlsZChjaGlsZCk7CisgICAgICAgIGF1dG8gbmV3Um93ID0gUmVuZGVyVGFi
bGVSb3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcyk7CisgICAgICAg
IGF1dG8mIHJvdyA9ICpuZXdSb3c7CisgICAgICAgIGFkZENoaWxkKFdURk1vdmUobmV3Um93KSwg
YmVmb3JlQ2hpbGQpOworICAgICAgICByb3cuYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNzYsNyArMTc3LDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlcgogICAgICAgICBiZWZvcmVDaGlsZCA9IHNwbGl0QW5v
bnltb3VzQm94ZXNBcm91bmRDaGlsZChiZWZvcmVDaGlsZCk7CiAKICAgICBBU1NFUlQoIWJlZm9y
ZUNoaWxkIHx8IGlzPFJlbmRlclRhYmxlUm93PigqYmVmb3JlQ2hpbGQpKTsKLSAgICBSZW5kZXJC
b3g6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgUmVuZGVyQm94OjphZGRDaGls
ZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6ZW5zdXJlUm93cyh1bnNpZ25lZCBudW1Sb3dzKQpAQCAtMTU5MCwxNCArMTU5MSwxNCBA
QCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZVNlY3Rpb246CiAgICAgcmV0dXJuIGl0
LT52YWx1ZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlU2VjdGlvbj4gUmVuZGVy
VGFibGVTZWN0aW9uOjpjcmVhdGVUYWJsZVNlY3Rpb25XaXRoU3R5bGUoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitSZW5kZXJQdHI8UmVuZGVyVGFibGVTZWN0
aW9uPiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHlsZShEb2N1
bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBhdXRvIHNl
Y3Rpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclRhYmxlU2VjdGlvbj4oZG9jdW1lbnQsIFJl
bmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBUQUJMRV9S
T1dfR1JPVVApKTsKKyAgICBhdXRvIHNlY3Rpb24gPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUYWJs
ZVNlY3Rpb24+KGRvY3VtZW50LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRo
RGlzcGxheShzdHlsZSwgVEFCTEVfUk9XX0dST1VQKSk7CiAgICAgc2VjdGlvbi0+aW5pdGlhbGl6
ZVN0eWxlKCk7CiAgICAgcmV0dXJuIHNlY3Rpb247CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJUYWJsZVNlY3Rpb24+IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlQW5vbnltb3VzV2l0aFBh
cmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlclRhYmxlJiBwYXJlbnQpCitSZW5kZXJQdHI8UmVuZGVy
VGFibGVTZWN0aW9uPiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255bW91c1dpdGhQYXJl
bnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZSYgcGFyZW50KQogewogICAgIHJldHVybiBSZW5k
ZXJUYWJsZVNlY3Rpb246OmNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHlsZShwYXJlbnQuZG9jdW1l
bnQoKSwgcGFyZW50LnN0eWxlKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJUYWJsZVJvdyogZmlyc3RSb3coKSBjb25z
dDsKICAgICBSZW5kZXJUYWJsZVJvdyogbGFzdFJvdygpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRD
aGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwogCiAgICAgc3RkOjpv
cHRpb25hbDxpbnQ+IGZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKQEAgLTE0
Miw4ICsxNDIsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFdlIG1heSB3YW50IHRvIGludHJv
ZHVjZSBhIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBpbi1mbHV4IGxheW91dCBpbmZvcm1hdGlvbi4K
ICAgICBMYXlvdXRVbml0IGRpc3RyaWJ1dGVFeHRyYUxvZ2ljYWxIZWlnaHRUb1Jvd3MoTGF5b3V0
VW5pdCBleHRyYUxvZ2ljYWxIZWlnaHQpOwogCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJUYWJsZVNlY3Rpb24+IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25z
dCBSZW5kZXJUYWJsZSYpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3g+IGNyZWF0ZUFu
b255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0IG92ZXJyaWRl
OworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyVGFibGVTZWN0aW9uPiBjcmVhdGVBbm9ueW1v
dXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGUmKTsKKyAgICBSZW5kZXJQdHI8
UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJC
b3gmKSBjb25zdCBvdmVycmlkZTsKICAgICAKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNv
bnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7CiAKQEAgLTE1MSw3ICsxNTEsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJUYWJsZVNlY3Rpb24+IGNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHls
ZShEb2N1bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgc3RhdGljIFJlbmRlclB0cjxS
ZW5kZXJUYWJsZVNlY3Rpb24+IGNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHlsZShEb2N1bWVudCYs
IGNvbnN0IFJlbmRlclN0eWxlJik7CiAKICAgICBlbnVtIFNob3VsZEluY2x1ZGVBbGxJbnRlcnNl
Y3RpbmdDZWxscyB7CiAgICAgICAgIEluY2x1ZGVBbGxJbnRlcnNlY3RpbmdDZWxscywKQEAgLTMz
NCw3ICszMzQsNyBAQCBpbmxpbmUgQ2VsbFNwYW4gUmVuZGVyVGFibGVTZWN0aW9uOjpmdWxsCiAg
ICAgcmV0dXJuIENlbGxTcGFuKDAsIG1fZ3JpZC5zaXplKCkpOwogfQogCi1pbmxpbmUgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1vdXNC
b3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBjb25zdAoraW5saW5l
IFJlbmRlclB0cjxSZW5kZXJCb3g+IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlQW5vbnltb3Vz
Qm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29uc3QKIHsKICAg
ICByZXR1cm4gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVUYWJsZVNlY3Rpb25XaXRoU3R5bGUo
cmVuZGVyZXIuZG9jdW1lbnQoKSwgcmVuZGVyZXIuc3R5bGUoKSk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQu
Y3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1s
L1JlbmRlck1hdGhNTEZlbmNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDE1ICs5MywxNSBA
QCBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MRmVuY2VkT3BlcmF0b3I+IFJlCiAKIHZvaWQgUmVuZGVy
TWF0aE1MRmVuY2VkOjptYWtlRmVuY2VzKCkKIHsKLSAgICBSZW5kZXJQdHI8UmVuZGVyTWF0aE1M
RmVuY2VkT3BlcmF0b3I+IG9wZW5GZW5jZSA9IGNyZWF0ZU1hdGhNTE9wZXJhdG9yKG1fb3Blbiwg
TWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpQcmVmaXgsIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFy
eTo6RmVuY2UpOwotICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQob3BlbkZlbmNlLmxlYWtQ
dHIoKSwgZmlyc3RDaGlsZCgpKTsKKyAgICBhdXRvIG9wZW5GZW5jZSA9IGNyZWF0ZU1hdGhNTE9w
ZXJhdG9yKG1fb3BlbiwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpQcmVmaXgsIE1hdGhNTE9w
ZXJhdG9yRGljdGlvbmFyeTo6RmVuY2UpOworICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQo
V1RGTW92ZShvcGVuRmVuY2UpLCBmaXJzdENoaWxkKCkpOwogCi0gICAgUmVuZGVyUHRyPFJlbmRl
ck1hdGhNTEZlbmNlZE9wZXJhdG9yPiBjbG9zZUZlbmNlID0gY3JlYXRlTWF0aE1MT3BlcmF0b3Io
bV9jbG9zZSwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpQb3N0Zml4LCBNYXRoTUxPcGVyYXRv
ckRpY3Rpb25hcnk6OkZlbmNlKTsKKyAgICBhdXRvIGNsb3NlRmVuY2UgPSBjcmVhdGVNYXRoTUxP
cGVyYXRvcihtX2Nsb3NlLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlBvc3RmaXgsIE1hdGhN
TE9wZXJhdG9yRGljdGlvbmFyeTo6RmVuY2UpOwogICAgIG1fY2xvc2VGZW5jZVJlbmRlcmVyID0g
Y2xvc2VGZW5jZS5nZXQoKTsKLSAgICBSZW5kZXJNYXRoTUxSb3c6OmFkZENoaWxkKGNsb3NlRmVu
Y2UubGVha1B0cigpKTsKKyAgICBSZW5kZXJNYXRoTUxSb3c6OmFkZENoaWxkKFdURk1vdmUoY2xv
c2VGZW5jZSkpOwogfQogCi12b2lkIFJlbmRlck1hdGhNTEZlbmNlZDo6YWRkQ2hpbGQoUmVuZGVy
T2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyTWF0
aE1MRmVuY2VkOjphZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICAvLyBtYWtlIHRoZSBmZW5jZXMgaWYgdGhlIHJl
bmRlciBvYmplY3QgaXMgZW1wdHkKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKQEAgLTEzOSwxNCAr
MTM5LDE0IEBAIHZvaWQgUmVuZGVyTWF0aE1MRmVuY2VkOjphZGRDaGlsZChSZW5kZXIKIAogICAg
IGlmIChiZWZvcmVDaGlsZCkgewogICAgICAgICAvLyBBZGRpbmcgfHh8IGJlZm9yZSBhbiBleGlz
dGluZyB8eXwgZS5nLiBpbiBlbGVtZW50ICh5KSAtIGZpcnN0IGluc2VydCBvdXIgbmV3IGNoaWxk
IHx4fCwgdGhlbiBpdHMgc2VwYXJhdG9yLCB0byBnZXQgKHgsIHkpLgotICAgICAgICBSZW5kZXJN
YXRoTUxSb3c6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIFJlbmRlck1h
dGhNTFJvdzo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAg
aWYgKHNlcGFyYXRvclJlbmRlcmVyKQotICAgICAgICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRD
aGlsZChzZXBhcmF0b3JSZW5kZXJlci5sZWFrUHRyKCksIGJlZm9yZUNoaWxkKTsKKyAgICAgICAg
ICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoV1RGTW92ZShzZXBhcmF0b3JSZW5kZXJlciks
IGJlZm9yZUNoaWxkKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBBZGRpbmcgfHl8IGF0IHRo
ZSBlbmQgb2YgYW4gZXhpc3RpbmcgZWxlbWVudCBlLmcuICh4KSAtIGluc2VydCB0aGUgc2VwYXJh
dG9yIGZpcnN0IGJlZm9yZSB0aGUgY2xvc2luZyBmZW5jZSwgdGhlbiB8eXwsIHRvIGdldCAoeCwg
eSkuCiAgICAgICAgIGlmIChzZXBhcmF0b3JSZW5kZXJlcikKLSAgICAgICAgICAgIFJlbmRlck1h
dGhNTFJvdzo6YWRkQ2hpbGQoc2VwYXJhdG9yUmVuZGVyZXIubGVha1B0cigpLCBtX2Nsb3NlRmVu
Y2VSZW5kZXJlcik7Ci0gICAgICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoY2hpbGQsIG1f
Y2xvc2VGZW5jZVJlbmRlcmVyKTsKKyAgICAgICAgICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hp
bGQoV1RGTW92ZShzZXBhcmF0b3JSZW5kZXJlciksIG1fY2xvc2VGZW5jZVJlbmRlcmVyKTsKKyAg
ICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgbV9jbG9zZUZl
bmNlUmVuZGVyZXIpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oCShyZXZpc2lvbiAyMjI2MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAg
Ym9vbCBpc1JlbmRlck1hdGhNTEZlbmNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0K
ICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIlJlbmRl
ck1hdGhNTEZlbmNlZCI7IH0KLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIGZpbmFsOworICAgIHZvaWQgYWRkQ2hpbGQoUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIGZp
bmFsOwogICAgIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKSBmaW5hbDsKIAogICAgIFJlbmRlclB0
cjxSZW5kZXJNYXRoTUxGZW5jZWRPcGVyYXRvcj4gY3JlYXRlTWF0aE1MT3BlcmF0b3IoY29uc3Qg
U3RyaW5nJiBvcGVyYXRvclN0cmluZywgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGb3JtLCBN
YXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZsYWcpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMjIy
NjA3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxOSArODgsMTkgQEAgdm9pZCBSZW5kZXJTVkdDb250
YWluZXI6OmxheW91dCgpCiAgICAgY2xlYXJOZWVkc0xheW91dCgpOwogfQogCi12b2lkIFJlbmRl
clNWR0NvbnRhaW5lcjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRDaGlsZChSZW5kZXJQ
dHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsK
LSAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsK
LSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoKmNoaWxkKTsKKyAg
ICBhdXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRk
Q2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICBTVkdSZXNvdXJjZXND
YWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoY2hpbGQpOwogfQogCi12b2lkIFJlbmRlclNWR0Nv
bnRhaW5lcjo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IFJlbmRlclNWR0NvbnRhaW5lcjo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hp
bGQpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJl
ZShjaGlsZCk7Ci0gICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnJlbW92ZUNoaWxkKGNoaWxkKTsK
KyAgICByZXR1cm4gUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnRha2VDaGlsZChjaGlsZCk7CiB9CiAK
LQogYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnNlbGZXaWxsUGFpbnQoKQogewogICAgIGF1dG8q
IHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNGb3JSZW5kZXJl
cigqdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Nv
bnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDgg
KzQ3LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKIAotICAg
IHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCA9IDApIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JikgZmlu
YWw7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIGZpbmFsOworICAgIFJlbmRlclB0cjxSZW5kZXJP
YmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBmaW5hbDsKICAgICB2b2lkIGFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlv
bmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBwYWludENvbnRhaW5lciA9
IDApIGZpbmFsOwogCiAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAkocmV2aXNpb24gMjIyNjA3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjAsMjkgKzEyMCwyOSBAQCB2b2lkIFJlbmRlclNWR0lubGluZTo6
dXBkYXRlRnJvbVN0eWxlKCkKICAgICBzZXRJbmxpbmUodHJ1ZSk7CiB9CiAKLXZvaWQgUmVuZGVy
U1ZHSW5saW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkKQordm9pZCBSZW5kZXJTVkdJbmxpbmU6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewotICAgIFJl
bmRlcklubGluZTo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKLSAgICBTVkdSZXNvdXJj
ZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoKmNoaWxkKTsKKyAgICBhdXRvJiBjaGlsZCA9
ICpuZXdDaGlsZDsKKyAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQp
LCBiZWZvcmVDaGlsZCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9U
cmVlKGNoaWxkKTsKIAogICAgIGlmIChhdXRvKiB0ZXh0QW5jZXN0b3IgPSBSZW5kZXJTVkdUZXh0
Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoKnRoaXMpKQotICAgICAgICB0ZXh0QW5jZXN0
b3ItPnN1YnRyZWVDaGlsZFdhc0FkZGVkKGNoaWxkKTsKKyAgICAgICAgdGV4dEFuY2VzdG9yLT5z
dWJ0cmVlQ2hpbGRXYXNBZGRlZCgmY2hpbGQpOwogfQogCi12b2lkIFJlbmRlclNWR0lubGluZTo6
cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IFJlbmRlclNWR0lubGluZTo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCiB7CiAgICAg
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJlZShjaGlsZCk7CiAK
ICAgICBhdXRvKiB0ZXh0QW5jZXN0b3IgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdU
ZXh0QW5jZXN0b3IoKnRoaXMpOwotICAgIGlmICghdGV4dEFuY2VzdG9yKSB7Ci0gICAgICAgIFJl
bmRlcklubGluZTo6cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmICghdGV4dEFuY2VzdG9yKQorICAgICAgICByZXR1cm4gUmVuZGVySW5saW5lOjp0YWtl
Q2hpbGQoY2hpbGQpOwogCiAgICAgVmVjdG9yPFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiwgMj4g
YWZmZWN0ZWRBdHRyaWJ1dGVzOwogICAgIHRleHRBbmNlc3Rvci0+c3VidHJlZUNoaWxkV2lsbEJl
UmVtb3ZlZCgmY2hpbGQsIGFmZmVjdGVkQXR0cmlidXRlcyk7Ci0gICAgUmVuZGVySW5saW5lOjpy
ZW1vdmVDaGlsZChjaGlsZCk7CisgICAgYXV0byB0YWtlbkNoaWxkID0gUmVuZGVySW5saW5lOjp0
YWtlQ2hpbGQoY2hpbGQpOwogICAgIHRleHRBbmNlc3Rvci0+c3VidHJlZUNoaWxkV2FzUmVtb3Zl
ZChhZmZlY3RlZEF0dHJpYnV0ZXMpOworICAgIHJldHVybiB0YWtlbkNoaWxkOwogfQogCiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGluZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmgJ
KHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHSW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDggQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIGZpbmFsOwogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2Uo
U3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIGZpbmFsOwogCi0g
ICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkID0gbnVsbHB0cikgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmpl
Y3QmKSBmaW5hbDsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNo
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7CisgICAgUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIGZpbmFsOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDAsMTYgKzMwMCwxNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnN0eWxlRGlkQ2hhbmdlKFN0
eWxlCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgqdGhpcywgZGlm
Ziwgc3R5bGUoKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUm9vdDo6YWRkQ2hpbGQoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyU1ZHUm9v
dDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6OmFkZENoaWxkKGNoaWxkLCBi
ZWZvcmVDaGlsZCk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVl
KCpjaGlsZCk7CisgICAgYXV0byYgY2hpbGQgPSAqbmV3Q2hpbGQ7CisgICAgUmVuZGVyUmVwbGFj
ZWQ6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgU1ZHUmVz
b3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsKIH0KIAotdm9pZCBSZW5k
ZXJTVkdSb290OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQorUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4gUmVuZGVyU1ZHUm9vdDo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQp
CiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJlZShj
aGlsZCk7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6OnJlbW92ZUNoaWxkKGNoaWxkKTsKKyAgICByZXR1
cm4gUmVuZGVyUmVwbGFjZWQ6OnRha2VDaGlsZChjaGlsZCk7CiB9CiAKIC8vIFJlbmRlckJveCBt
ZXRob2RzIHdpbGwgZXhwZWN0IGNvb3JkaW5hdGVzIHcvbyBhbnkgdHJhbnNmb3JtcyBpbiBjb29y
ZGluYXRlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw4IEBAIHByaXZhdGU6
CiAgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5
bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQ2hp
bGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8
UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJy
aWRlOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3Qm
KSBvdmVycmlkZTsKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxUb1BhcmVudFRy
YW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxNywyMiArNTE3LDI0IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0OjpyZXBhaW50UmVj
dEluTG8KICAgICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHVGV4dDo6
YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkK
K3ZvaWQgUmVuZGVyU1ZHVGV4dDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3
Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVuZGVyU1ZHQmxvY2s6
OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgYXV0byYgY2hpbGQgPSAqbmV3Q2hp
bGQ7CisgICAgUmVuZGVyU1ZHQmxvY2s6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZv
cmVDaGlsZCk7CiAKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUo
KmNoaWxkKTsKLSAgICBzdWJ0cmVlQ2hpbGRXYXNBZGRlZChjaGlsZCk7CisgICAgU1ZHUmVzb3Vy
Y2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsKKyAgICBzdWJ0cmVlQ2hpbGRX
YXNBZGRlZCgmY2hpbGQpOwogfQogCi12b2lkIFJlbmRlclNWR1RleHQ6OnJlbW92ZUNoaWxkKFJl
bmRlck9iamVjdCYgY2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJTVkdUZXh0
Ojp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAgICBTVkdSZXNvdXJjZXNDYWNo
ZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKGNoaWxkKTsKIAogICAgIFZlY3RvcjxTVkdU
ZXh0TGF5b3V0QXR0cmlidXRlcyosIDI+IGFmZmVjdGVkQXR0cmlidXRlczsKICAgICBzdWJ0cmVl
Q2hpbGRXaWxsQmVSZW1vdmVkKCZjaGlsZCwgYWZmZWN0ZWRBdHRyaWJ1dGVzKTsKLSAgICBSZW5k
ZXJTVkdCbG9jazo6cmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIGF1dG8gdGFrZW5DaGlsZCA9IFJl
bmRlclNWR0Jsb2NrOjp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIHN1YnRyZWVDaGlsZFdhc1JlbW92
ZWQoYWZmZWN0ZWRBdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gdGFrZW5DaGlsZDsKIH0KIAogLy8g
Rml4IGZvciA8cmRhcjovL3Byb2JsZW0vODA0ODg3NT4uIFdlIHNob3VsZCBub3QgcmVuZGVyIDpm
aXJzdC1saW5lIENTUyBTdHlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw4
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVHJhbnNmb3JtU3RhdGUmLCBNYXBD
b29yZGluYXRlc0ZsYWdzLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgY29u
c3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFwJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVD
aGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0
cikgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRl
ck9iamVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7
CiAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaAkocmV2aXNpb24gMjIyNjA3KQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVBvc2l0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlbmRlckVsZW1lbnQmIHBh
cmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9Ci0gICAgdm9pZCBpbnNlcnQoUmVuZGVy
T2JqZWN0Jik7CisgICAgdm9pZCBpbnNlcnQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4pOwogICAg
IGJvb2wgY2FuSW5zZXJ0KFJlbmRlckVsZW1lbnQmKSBjb25zdDsKICAgICBib29sIGNhbkluc2Vy
dChSZW5kZXJUZXh0JikgY29uc3Q7CiAKQEAgLTc4LDEwICs3OCwxMCBAQCBpbmxpbmUgYm9vbCBS
ZW5kZXJUcmVlUG9zaXRpb246OmNhbkluc2VyCiAgICAgcmV0dXJuIG1fcGFyZW50LmlzQ2hpbGRB
bGxvd2VkKHJlbmRlcmVyLCBtX3BhcmVudC5zdHlsZSgpKTsKIH0KIAotaW5saW5lIHZvaWQgUmVu
ZGVyVHJlZVBvc2l0aW9uOjppbnNlcnQoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKK2lubGluZSB2
b2lkIFJlbmRlclRyZWVQb3NpdGlvbjo6aW5zZXJ0KFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHJl
bmRlcmVyKQogewogICAgIEFTU0VSVChtX2hhc1ZhbGlkTmV4dFNpYmxpbmcpOwotICAgIG1fcGFy
ZW50LmFkZENoaWxkKCZyZW5kZXJlciwgbV9uZXh0U2libGluZyk7CisgICAgbV9wYXJlbnQuYWRk
Q2hpbGQoV1RGTW92ZShyZW5kZXJlciksIG1fbmV4dFNpYmxpbmcpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0
ZXIuY3BwCShyZXZpc2lvbiAyMjI2MDcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJU
cmVlVXBkYXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OSwyNyArMzU5LDI1IEBAIHZvaWQg
UmVuZGVyVHJlZVVwZGF0ZXI6OmNyZWF0ZVJlbmRlcmVyKEUKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUmVuZGVyVHJlZVBvc2l0aW9uIGluc2VydGlvblBvc2l0aW9uID0gY29tcHV0ZUluc2VydGlv
blBvc2l0aW9uKCk7Ci0gICAgUmVuZGVyRWxlbWVudCogbmV3UmVuZGVyZXIgPSBlbGVtZW50LmNy
ZWF0ZUVsZW1lbnRSZW5kZXJlcihXVEZNb3ZlKHN0eWxlKSwgaW5zZXJ0aW9uUG9zaXRpb24pLmxl
YWtQdHIoKTsKKyAgICBhdXRvIG5ld1JlbmRlcmVyID0gZWxlbWVudC5jcmVhdGVFbGVtZW50UmVu
ZGVyZXIoV1RGTW92ZShzdHlsZSksIGluc2VydGlvblBvc2l0aW9uKTsKICAgICBpZiAoIW5ld1Jl
bmRlcmVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpbnNlcnRpb25Qb3NpdGlvbi5jYW5J
bnNlcnQoKm5ld1JlbmRlcmVyKSkgewotICAgICAgICBuZXdSZW5kZXJlci0+ZGVzdHJveSgpOwor
ICAgIGlmICghaW5zZXJ0aW9uUG9zaXRpb24uY2FuSW5zZXJ0KCpuZXdSZW5kZXJlcikpCiAgICAg
ICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBlbGVtZW50LnNldFJlbmRlcmVyKG5ld1JlbmRlcmVy
KTsKKyAgICBlbGVtZW50LnNldFJlbmRlcmVyKG5ld1JlbmRlcmVyLmdldCgpKTsKIAogICAgIG5l
d1JlbmRlcmVyLT5pbml0aWFsaXplU3R5bGUoKTsKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKICAgICBpZiAobV9kb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4oKSAmJiBtX2RvY3VtZW50
LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpID09ICZlbGVtZW50KSB7Ci0gICAgICAg
IG5ld1JlbmRlcmVyID0gUmVuZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmRlcmVyKG5ld1JlbmRlcmVy
LCAmaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1fZG9jdW1lbnQpOworICAgICAgICBuZXdS
ZW5kZXJlciA9IFJlbmRlckZ1bGxTY3JlZW46OndyYXBOZXdSZW5kZXJlcihXVEZNb3ZlKG5ld1Jl
bmRlcmVyKSwgaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1fZG9jdW1lbnQpOwogICAgICAg
ICBpZiAoIW5ld1JlbmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZgot
ICAgIC8vIE5vdGU6IEFkZGluZyBuZXdSZW5kZXJlciBpbnN0ZWFkIG9mIHJlbmRlcmVyKCkuIHJl
bmRlcmVyKCkgbWF5IGJlIGEgY2hpbGQgb2YgbmV3UmVuZGVyZXIuCi0gICAgaW5zZXJ0aW9uUG9z
aXRpb24uaW5zZXJ0KCpuZXdSZW5kZXJlcik7CisKKyAgICBpbnNlcnRpb25Qb3NpdGlvbi5pbnNl
cnQoV1RGTW92ZShuZXdSZW5kZXJlcikpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hl
ID0gbV9kb2N1bWVudC5heE9iamVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT51cGRhdGVDYWNo
ZUFmdGVyTm9kZUlzQXR0YWNoZWQoJmVsZW1lbnQpOwpAQCAtNDQxLDcgKzQzOSw3IEBAIHN0YXRp
YyB2b2lkIGNyZWF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXgKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdGV4dE5vZGUuc2V0UmVuZGVyZXIobmV3UmVuZGVyZXIuZ2V0KCkpOwotICAgIHJlbmRlclRy
ZWVQb3NpdGlvbi5pbnNlcnQoKm5ld1JlbmRlcmVyLmxlYWtQdHIoKSk7CisgICAgcmVuZGVyVHJl
ZVBvc2l0aW9uLmluc2VydChXVEZNb3ZlKG5ld1JlbmRlcmVyKSk7CiB9CiAKIHZvaWQgUmVuZGVy
VHJlZVVwZGF0ZXI6OnVwZGF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXh0LCBjb25zdCBTdHlsZTo6
VGV4dFVwZGF0ZSogdGV4dFVwZGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRl
clRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCShyZXZpc2lvbiAyMjI2MDcp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgc3RhdGljIHZvaWQgdXBkYXRl
Rmlyc3RMZXR0ZXJTdHlsZShSZW5kZQogCiAgICAgaWYgKFN0eWxlOjpkZXRlcm1pbmVDaGFuZ2Uo
Zmlyc3RMZXR0ZXItPnN0eWxlKCksIHBzZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0YWNoKSB7CiAg
ICAgICAgIC8vIFRoZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgbmVlZHMgdG8gYmUgcmVwbGFjZWQu
IENyZWF0ZSBhIG5ldyByZW5kZXJlciBvZiB0aGUgcmlnaHQgdHlwZS4KLSAgICAgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIG5ld0ZpcnN0TGV0dGVyOworICAgICAgICBSZW5kZXJQdHI8UmVuZGVy
Qm94TW9kZWxPYmplY3Q+IG5ld0ZpcnN0TGV0dGVyOwogICAgICAgICBpZiAocHNldWRvU3R5bGUu
ZGlzcGxheSgpID09IElOTElORSkKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gbmV3IFJl
bmRlcklubGluZShmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRvU3R5
bGUpKTsKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
SW5saW5lPihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNldWRvU3R5bGUp
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBuZXcgUmVuZGVy
QmxvY2tGbG93KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHls
ZSkpOworICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJC
bG9ja0Zsb3c+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHls
ZSkpOwogICAgICAgICBuZXdGaXJzdExldHRlci0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAKICAgICAg
ICAgLy8gTW92ZSB0aGUgZmlyc3QgbGV0dGVyIGludG8gdGhlIG5ldyByZW5kZXJlci4KQEAgLTEy
MCw4ICsxMjAsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVGaXJzdExldHRlclN0eWxlKFJlbmRlCiAg
ICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RMZXR0ZXItPmZpcnN0Q2hp
bGQoKSkgewogICAgICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpjaGlsZCkpCiAgICAgICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKS5yZW1vdmVBbmREZXN0cm95VGV4
dEJveGVzKCk7Ci0gICAgICAgICAgICBmaXJzdExldHRlci0+cmVtb3ZlQ2hpbGQoKmNoaWxkKTsK
LSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChjaGlsZCwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBhdXRvIHRvTW92ZSA9IGZpcnN0TGV0dGVyLT50YWtlQ2hpbGQoKmNoaWxkKTsK
KyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChXVEZNb3ZlKHRvTW92ZSkpOwog
ICAgICAgICB9CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGZpcnN0TGV0
dGVyLT5uZXh0U2libGluZygpOwpAQCAtMTMxLDEyICsxMzEsOCBAQCBzdGF0aWMgdm9pZCB1cGRh
dGVGaXJzdExldHRlclN0eWxlKFJlbmRlCiAgICAgICAgICAgICByZW1haW5pbmdUZXh0LT5zZXRG
aXJzdExldHRlcigqbmV3Rmlyc3RMZXR0ZXIpOwogICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIt
PnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsKICAgICAgICAgfQot
ICAgICAgICAvLyBUbyBwcmV2ZW50IHJlbW92YWwgb2Ygc2luZ2xlIGFub255bW91cyBibG9jayBp
biBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQgYW5kIGNhdXNpbmcKLSAgICAgICAgLy8gfG5leHRT
aWJsaW5nfCB0byBnbyBzdGFsZSwgd2UgcmVtb3ZlIHRoZSBvbGQgZmlyc3QgbGV0dGVyIHVzaW5n
IHJlbW92ZUNoaWxkTm9kZSBmaXJzdC4KLSAgICAgICAgZmlyc3RMZXR0ZXJDb250YWluZXItPnJl
bW92ZUNoaWxkSW50ZXJuYWwoKmZpcnN0TGV0dGVyLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGls
ZHJlbik7Ci0gICAgICAgIGZpcnN0TGV0dGVyLT5kZXN0cm95KCk7Ci0gICAgICAgIGZpcnN0TGV0
dGVyID0gbmV3Rmlyc3RMZXR0ZXI7Ci0gICAgICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRD
aGlsZChmaXJzdExldHRlciwgbmV4dFNpYmxpbmcpOworICAgICAgICBmaXJzdExldHRlckNvbnRh
aW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKCpmaXJzdExldHRlcik7CisgICAgICAgIGZpcnN0
TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgbmV4dFNp
YmxpbmcpOwogICAgIH0gZWxzZQogICAgICAgICBmaXJzdExldHRlci0+c2V0U3R5bGUoV1RGTW92
ZShwc2V1ZG9TdHlsZSkpOwogfQpAQCAtMTQ1LDEzICsxNDEsMTQgQEAgc3RhdGljIHZvaWQgY3Jl
YXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihSZQogewogICAgIFJlbmRlckVsZW1lbnQqIGZpcnN0TGV0
dGVyQ29udGFpbmVyID0gY3VycmVudFRleHRDaGlsZC5wYXJlbnQoKTsKICAgICBhdXRvIHBzZXVk
b1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCAqZmlyc3RMZXR0
ZXJDb250YWluZXIpOwotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmaXJzdExldHRlciA9IG51
bGxwdHI7CisgICAgUmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBuZXdGaXJzdExldHRl
cjsKICAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKLSAgICAgICAgZmly
c3RMZXR0ZXIgPSBuZXcgUmVuZGVySW5saW5lKGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwg
V1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJl
bmRlcmVyPFJlbmRlcklubGluZT4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3Zl
KHBzZXVkb1N0eWxlKSk7CiAgICAgZWxzZQotICAgICAgICBmaXJzdExldHRlciA9IG5ldyBSZW5k
ZXJCbG9ja0Zsb3coZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0
eWxlKSk7Ci0gICAgZmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAgIGZpcnN0TGV0
dGVyQ29udGFpbmVyLT5hZGRDaGlsZChmaXJzdExldHRlciwgJmN1cnJlbnRUZXh0Q2hpbGQpOwor
ICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4o
Zmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7CisgICAg
bmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIGF1dG8mIGZpcnN0TGV0dGVy
ID0gKm5ld0ZpcnN0TGV0dGVyOworICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChX
VEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgJmN1cnJlbnRUZXh0Q2hpbGQpOwogCiAgICAgLy8gVGhl
IG9yaWdpbmFsIHN0cmluZyBpcyBnb2luZyB0byBiZSBlaXRoZXIgYSBnZW5lcmF0ZWQgY29udGVu
dCBzdHJpbmcgb3IgYSBET00gbm9kZSdzCiAgICAgLy8gc3RyaW5nLiBXZSB3YW50IHRoZSBvcmln
aW5hbCBzdHJpbmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1lZCBpbiBjYXNlIGZpcnN0LWxldHRl
ciBoYXMKQEAgLTE4MywzMCArMTgwLDI5IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUZpcnN0TGV0dGVy
UmVuZGVyZXIoUmUKIAogICAgICAgICAvLyBDb25zdHJ1Y3QgYSB0ZXh0IGZyYWdtZW50IGZvciB0
aGUgdGV4dCBhZnRlciB0aGUgZmlyc3QgbGV0dGVyLgogICAgICAgICAvLyBUaGlzIHRleHQgZnJh
Z21lbnQgbWlnaHQgYmUgZW1wdHkuCi0gICAgICAgIFJlbmRlclRleHRGcmFnbWVudCogcmVtYWlu
aW5nVGV4dDsKKyAgICAgICAgUmVuZGVyUHRyPFJlbmRlclRleHRGcmFnbWVudD4gbmV3UmVtYWlu
aW5nVGV4dDsKICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Q2hpbGQudGV4dE5vZGUoKSkKLSAgICAg
ICAgICAgIHJlbWFpbmluZ1RleHQgPSBuZXcgUmVuZGVyVGV4dEZyYWdtZW50KCpjdXJyZW50VGV4
dENoaWxkLnRleHROb2RlKCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxl
bmd0aCk7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVyZXI8UmVu
ZGVyVGV4dEZyYWdtZW50PigqY3VycmVudFRleHRDaGlsZC50ZXh0Tm9kZSgpLCBvbGRUZXh0LCBs
ZW5ndGgsIG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICByZW1haW5pbmdUZXh0ID0gbmV3IFJlbmRlclRleHRGcmFnbWVudChmaXJzdExldHRlckJs
b2NrLmRvY3VtZW50KCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0
aCk7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVy
VGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRleHQsIGxlbmd0
aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7CiAKLSAgICAgICAgaWYgKHJlbWFpbmluZ1Rl
eHQtPnRleHROb2RlKCkpCi0gICAgICAgICAgICByZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpLT5z
ZXRSZW5kZXJlcihyZW1haW5pbmdUZXh0KTsKKyAgICAgICAgaWYgKG5ld1JlbWFpbmluZ1RleHQt
PnRleHROb2RlKCkpCisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpLT5z
ZXRSZW5kZXJlcihuZXdSZW1haW5pbmdUZXh0LmdldCgpKTsKIAotICAgICAgICBmaXJzdExldHRl
ckNvbnRhaW5lci0+YWRkQ2hpbGQocmVtYWluaW5nVGV4dCwgJmN1cnJlbnRUZXh0Q2hpbGQpOwot
ICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQ2hpbGQoY3VycmVudFRleHRDaGls
ZCk7Ci0gICAgICAgIHJlbWFpbmluZ1RleHQtPnNldEZpcnN0TGV0dGVyKCpmaXJzdExldHRlcik7
Ci0gICAgICAgIGZpcnN0TGV0dGVyLT5zZXRGaXJzdExldHRlclJlbWFpbmluZ1RleHQocmVtYWlu
aW5nVGV4dCk7CisgICAgICAgIFJlbmRlclRleHRGcmFnbWVudCYgcmVtYWluaW5nVGV4dCA9ICpu
ZXdSZW1haW5pbmdUZXh0OworICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQo
V1RGTW92ZShuZXdSZW1haW5pbmdUZXh0KSwgJmN1cnJlbnRUZXh0Q2hpbGQpOworICAgICAgICBm
aXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKGN1cnJlbnRUZXh0Q2hp
bGQpOworICAgICAgICByZW1haW5pbmdUZXh0LnNldEZpcnN0TGV0dGVyKGZpcnN0TGV0dGVyKTsK
KyAgICAgICAgZmlyc3RMZXR0ZXIuc2V0Rmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0KCZyZW1haW5p
bmdUZXh0KTsKIAogICAgICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVudCBmb3IgdGhlIGZp
cnN0IGxldHRlcgotICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQqIGxldHRlcjsKLSAgICAgICAg
aWYgKHJlbWFpbmluZ1RleHQtPnRleHROb2RlKCkpCi0gICAgICAgICAgICBsZXR0ZXIgPSBuZXcg
UmVuZGVyVGV4dEZyYWdtZW50KCpyZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpLCBvbGRUZXh0LCAw
LCBsZW5ndGgpOworICAgICAgICBSZW5kZXJQdHI8UmVuZGVyVGV4dEZyYWdtZW50PiBsZXR0ZXI7
CisgICAgICAgIGlmIChyZW1haW5pbmdUZXh0LnRleHROb2RlKCkpCisgICAgICAgICAgICBsZXR0
ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KCpyZW1haW5pbmdUZXh0LnRl
eHROb2RlKCksIG9sZFRleHQsIDAsIGxlbmd0aCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGxldHRlciA9IG5ldyBSZW5kZXJUZXh0RnJhZ21lbnQoZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVu
dCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOworICAgICAgICAgICAgbGV0dGVyID0gY3JlYXRlUmVu
ZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9s
ZFRleHQsIDAsIGxlbmd0aCk7CiAKLSAgICAgICAgZmlyc3RMZXR0ZXItPmFkZENoaWxkKGxldHRl
cik7Ci0KLSAgICAgICAgY3VycmVudFRleHRDaGlsZC5kZXN0cm95KCk7CisgICAgICAgIGZpcnN0
TGV0dGVyLmFkZENoaWxkKFdURk1vdmUobGV0dGVyKSk7CiAgICAgfQogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRlbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyR2VuZXJh
dGVkQ29udGVudC5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxl
L1JlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlQ29udGVudFJlbmRlcmVycyhSZW5kZQog
ICAgIGZvciAoY29uc3QgQ29udGVudERhdGEqIGNvbnRlbnQgPSBzdHlsZS5jb250ZW50RGF0YSgp
OyBjb250ZW50OyBjb250ZW50ID0gY29udGVudC0+bmV4dCgpKSB7CiAgICAgICAgIGF1dG8gY2hp
bGQgPSBjb250ZW50LT5jcmVhdGVDb250ZW50UmVuZGVyZXIocmVuZGVyZXIuZG9jdW1lbnQoKSwg
c3R5bGUpOwogICAgICAgICBpZiAocmVuZGVyZXIuaXNDaGlsZEFsbG93ZWQoKmNoaWxkLCBzdHls
ZSkpCi0gICAgICAgICAgICByZW5kZXJlci5hZGRDaGlsZChjaGlsZC5sZWFrUHRyKCkpOworICAg
ICAgICAgICAgcmVuZGVyZXIuYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0SXRlbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0
SXRlbS5jcHAJKHJldmlzaW9uIDIyMjYwNykKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRl
clRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwxMiArODQsMTQg
QEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW06OnVwZGF0ZQogICAgIH0KIAogICAg
IGF1dG8gbmV3U3R5bGUgPSBsaXN0SXRlbVJlbmRlcmVyLmNvbXB1dGVNYXJrZXJTdHlsZSgpOwor
ICAgIFJlbmRlclB0cjxSZW5kZXJMaXN0TWFya2VyPiBuZXdNYXJrZXJSZW5kZXJlcjsKICAgICBh
dXRvKiBtYXJrZXJSZW5kZXJlciA9IGxpc3RJdGVtUmVuZGVyZXIubWFya2VyUmVuZGVyZXIoKTsK
ICAgICBpZiAobWFya2VyUmVuZGVyZXIpCiAgICAgICAgIG1hcmtlclJlbmRlcmVyLT5zZXRTdHls
ZShXVEZNb3ZlKG5ld1N0eWxlKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1hcmtlclJlbmRlcmVy
ID0gV2ViQ29yZTo6Y3JlYXRlUmVuZGVyZXI8UmVuZGVyTGlzdE1hcmtlcj4obGlzdEl0ZW1SZW5k
ZXJlciwgV1RGTW92ZShuZXdTdHlsZSkpLmxlYWtQdHIoKTsKLSAgICAgICAgbWFya2VyUmVuZGVy
ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgICAgICBuZXdNYXJrZXJSZW5kZXJlciA9IFdlYkNv
cmU6OmNyZWF0ZVJlbmRlcmVyPFJlbmRlckxpc3RNYXJrZXI+KGxpc3RJdGVtUmVuZGVyZXIsIFdU
Rk1vdmUobmV3U3R5bGUpKTsKKyAgICAgICAgbmV3TWFya2VyUmVuZGVyZXItPmluaXRpYWxpemVT
dHlsZSgpOworICAgICAgICBtYXJrZXJSZW5kZXJlciA9IG5ld01hcmtlclJlbmRlcmVyLmdldCgp
OwogICAgICAgICBsaXN0SXRlbVJlbmRlcmVyLnNldE1hcmtlclJlbmRlcmVyKG1hcmtlclJlbmRl
cmVyKTsKICAgICB9CiAKQEAgLTEwOSw4ICsxMTEsMTEgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRl
cjo6TGlzdEl0ZW06OnVwZGF0ZQogICAgIH0KIAogICAgIGlmIChuZXdQYXJlbnQgIT0gY3VycmVu
dFBhcmVudCkgewotICAgICAgICBtYXJrZXJSZW5kZXJlci0+cmVtb3ZlRnJvbVBhcmVudCgpOwot
ICAgICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKG1hcmtlclJlbmRlcmVyLCBmaXJzdE5vbk1hcmtl
ckNoaWxkKCpuZXdQYXJlbnQpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQpCisgICAgICAg
ICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKGN1cnJlbnRQYXJlbnQtPnRha2VDaGlsZCgqbWFya2Vy
UmVuZGVyZXIpLCBmaXJzdE5vbk1hcmtlckNoaWxkKCpuZXdQYXJlbnQpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbmV3UGFyZW50LT5hZGRDaGlsZChXVEZNb3ZlKG5ld01hcmtlclJlbmRl
cmVyKSwgZmlyc3ROb25NYXJrZXJDaGlsZCgqbmV3UGFyZW50KSk7CisKICAgICAgICAgLy8gSWYg
Y3VycmVudCBwYXJlbnQgaXMgYW4gYW5vbnltb3VzIGJsb2NrIHRoYXQgaGFzIGxvc3QgYWxsIGl0
cyBjaGlsZHJlbiwgZGVzdHJveSBpdC4KICAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQgJiYgY3Vy
cmVudFBhcmVudC0+aXNBbm9ueW1vdXNCbG9jaygpICYmICFjdXJyZW50UGFyZW50LT5maXJzdENo
aWxkKCkgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVudFBhcmVudCkuY29udGludWF0
aW9uKCkpCiAgICAgICAgICAgICBjdXJyZW50UGFyZW50LT5kZXN0cm95KCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1u
LmNwcAkocmV2aXNpb24gMjIyNjA3KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJl
ZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEzICs0NiwxNCBA
QCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbjo6dXBkCiAKIHZvaWQgUmVuZGVy
VHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uOjpjcmVhdGVGcmFnbWVudGVkRmxvdyhSZW5kZXJCbG9j
a0Zsb3cmIGZsb3cpCiB7Ci0gICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93KiBmcmFnbWVudGVkRmxv
dyA9IG5ldyBSZW5kZXJNdWx0aUNvbHVtbkZsb3coZmxvdy5kb2N1bWVudCgpLCBSZW5kZXJTdHls
ZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShmbG93LnN0eWxlKCksIEJMT0NLKSk7
Ci0gICAgZnJhZ21lbnRlZEZsb3ctPmluaXRpYWxpemVTdHlsZSgpOworICAgIGF1dG8gbmV3RnJh
Z21lbnRlZEZsb3cgPSBXZWJDb3JlOjpjcmVhdGVSZW5kZXJlcjxSZW5kZXJNdWx0aUNvbHVtbkZs
b3c+KGZsb3cuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0
aERpc3BsYXkoZmxvdy5zdHlsZSgpLCBCTE9DSykpOworICAgIG5ld0ZyYWdtZW50ZWRGbG93LT5p
bml0aWFsaXplU3R5bGUoKTsKICAgICBmbG93LnNldENoaWxkcmVuSW5saW5lKGZhbHNlKTsgLy8g
RG8gdGhpcyB0byBhdm9pZCB3cmFwcGluZyBpbmxpbmUgY2hpbGRyZW4gdGhhdCBhcmUganVzdCBn
b2luZyB0byBtb3ZlIGludG8gdGhlIGZsb3cgdGhyZWFkLgogICAgIGZsb3cuZGVsZXRlTGluZXMo
KTsKLSAgICBmbG93LlJlbmRlckJsb2NrOjphZGRDaGlsZChmcmFnbWVudGVkRmxvdyk7Ci0gICAg
ZnJhZ21lbnRlZEZsb3ctPnBvcHVsYXRlKCk7IC8vIENhbGxlZCBhZnRlciB0aGUgZmxvdyB0aHJl
YWQgaXMgaW5zZXJ0ZWQgc28gdGhhdCB3ZSBhcmUgcmVhY2hhYmxlIGJ5IHRoZSBmbG93IHRocmVh
ZC4KLSAgICBmbG93LnNldE11bHRpQ29sdW1uRmxvdyhmcmFnbWVudGVkRmxvdyk7CisgICAgYXV0
byYgZnJhZ21lbnRlZEZsb3cgPSAqbmV3RnJhZ21lbnRlZEZsb3c7CisgICAgZmxvdy5SZW5kZXJC
bG9jazo6YWRkQ2hpbGQoV1RGTW92ZShuZXdGcmFnbWVudGVkRmxvdykpOworICAgIGZyYWdtZW50
ZWRGbG93LnBvcHVsYXRlKCk7IC8vIENhbGxlZCBhZnRlciB0aGUgZmxvdyB0aHJlYWQgaXMgaW5z
ZXJ0ZWQgc28gdGhhdCB3ZSBhcmUgcmVhY2hhYmxlIGJ5IHRoZSBmbG93IHRocmVhZC4KKyAgICBm
bG93LnNldE11bHRpQ29sdW1uRmxvdygmZnJhZ21lbnRlZEZsb3cpOwogfQogCiAK
</data>
<flag name="review"
          id="342084"
          type_id="1"
          status="+"
          setter="zalan"
    />
    <flag name="commit-queue"
          id="342101"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322283</attachid>
            <date>2017-09-29 23:05:47 -0700</date>
            <delta_ts>2017-09-29 23:46:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>renderptr-everywhere-15.patch</filename>
            <type>text/plain</type>
            <size>149796</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNiBAQAorMjAxNy0wOS0yOSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgVXNlIHNtYXJ0IHBvaW50ZXJz
IGZvciBjcmVhdGluZywgYWRkaW5nIGFuZCByZW1vdmluZyByZW5kZXJlcnMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzYwMworCisgICAgICAgIFJl
dmlld2VkIGJ5IFphbGFuIEJ1anRhcy4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2ggUmVuZGVy
T2JqZWN0IG93bmVyc2hpcCBpcyBjb25zaXN0ZW50bHkgbWFuYWdlZCB1c2luZyBSZW5kZXJQdHJz
LiBJdCBhbHNvCisgICAgICAgIGNsYXJpZmllcyB0aGF0IGluLXRyZWUgcmVuZGVyZXJzIGFyZSBh
bHdheXMgb3duZWQgYnkgdGhlIHBhcmVudCByZW5kZXJlci4KKworICAgICAgICAtIHJlbmRlcmVy
cyBhcmUgY29uc3RydWN0ZWQgd2l0aCBjcmVhdGVSZW5kZXJlcjw+IHdoaWNoIHJldHVybnMgUmVu
ZGVyUHRyCisgICAgICAgIC0gYWRkQ2hpbGQgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHRha2UgUmVu
ZGVyUHRycworICAgICAgICAtIHJlbW92ZUNoaWxkIGlzIHJlcGxhY2VkIHdpdGggdGFrZUNoaWxk
IHRoYXQgcmV0dXJucyBhIFJlbmRlclB0cgorICAgICAgICAtIG9ubHkgYWRkQ2hpbGRJbnRlcm5h
bC90YWtlQ2hpbGRJbnRlcm5hbCBkZWFsIHdpdGggcmF3IG93bmRlciByZW5kZXJlciBwb2ludGVy
cy4KKworICAgICAgICBUaGVyZSBhcmUgc3RpbGwgYSBmZXcgZXhjZXB0aW9uIGxlZnQsIG5vdGVk
IGJlbG93LCB0byBiZSBmaXhlZCBsYXRlci4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2Via2l0V2lsbEVudGVyRnVsbFNjcmVlbkZv
ckVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6Om1ha2VDaGlsZHJlbk5vbklubGluZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6ZHJvcEFub255bW91c0JveENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjp0YWtlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNyZWF0ZUFub255bW91c0Jsb2NrV2l0aFN0eWxlQW5kRGlzcGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNyZWF0
ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlckFuZERpc3BsYXkpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCbG9jayBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrRmxvdzo6dGFrZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
Rmxvdzo6cmVtb3ZlQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6c3BsaXRBbm9ueW1vdXNCb3hlc0Fyb3VuZENoaWxkKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzIGNvbnN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94TW9kZWxPYmplY3Q6Om1vdmVDaGlsZFRvKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQnV0dG9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJ1dHRvbjo6YWRkQ2hpbGQp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQnV0dG9uOjp0YWtlQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQnV0dG9uOjpzZXRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJ1dHRvbjo6cmVtb3ZlQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCdXR0b24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjphZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJFbGVtZW50Ojp0YWtlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxl
bWVudDo6cmVtb3ZlQW5kRGVzdHJveUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OmRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKToKKworICAgICAgICAgICAgS2VlcCB0aGUg
ZXhpc3RpbmcgYmVoYXZpb3IgYW5kIGxlYWsgdGhlIGZpcnN0TGV0dGVyIHJlbmRlcmVyLiBUaGUg
Y29tbWVudCBjbGFpbXMgdGhleSBnZXQgZGVzdHJveWVkIGJ5IFJlbmRlclRleHRGcmFnbWVudC4K
KyAgICAgICAgICAgIFRvIGJlIGNsZWFuZWQgdXAgbGF0ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckVsZW1lbnQ6Omluc2VydENoaWxkSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6dGFrZUNoaWxkSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRWxlbWVudDo6aGFuZGxlRHluYW1pY0Zsb2F0UG9zaXRpb25DaGFuZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVtb3ZlQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6cmVtb3ZlQ2hpbGRJbnRlcm5hbCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckVsZW1lbnQ6OmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZ1
bGxTY3JlZW46OndpbGxCZURlc3Ryb3llZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGdWxs
U2NyZWVuOjp3cmFwTmV3UmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRnVsbFNj
cmVlbjo6d3JhcEV4aXN0aW5nUmVuZGVyZXIpOgorCisgICAgICAgICAgICBTcGxpdCB3cmFwUmVu
ZGVyZXIoKSBpbnRvIHR3byBmdW5jdGlvbnMsIHdyYXBOZXdSZW5kZXJlcigpIGFuZCB3cmFwRXhp
c3RpbmdSZW5kZXJlcigpLgorICAgICAgICAgICAgVGhlIGZpcnN0IG9uZSBkZWFscyB3aXRoIGFk
ZGluZyBuZXcgcmVuZGVyZXJzIHRvIHRoZSB0cmVlIHdoaWxlIHRoZSBsYXR0ZXIgbXV0YXRlcwor
ICAgICAgICAgICAgZXhpc3RpbmcgcmVuZGVyIHRyZWUgaW4tcGxhY2UuCisKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZ1bGxTY3JlZW46OmNyZWF0ZVBsYWNlaG9sZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZ1bGxTY3JlZW46OndyYXBSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckZ1bGxTY3JlZW4uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
R3JpZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjphZGRDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjp0YWtlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyR3JpZDo6cmVtb3ZlQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJHcmlkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcklubGluZTo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbmxpbmU6OnNwbGl0Rmxvdyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6
OmFkZENoaWxkVG9Db250aW51YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5l
OjpjaGlsZEJlY2FtZU5vbklubGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGlu
ZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6Y3JlYXRlSW5uZXJCbG9jayk6CisgICAgICAgIChSZW5k
ZXJNZW51TGlzdDo6YWRkQ2hpbGQpOgorICAgICAgICAoUmVuZGVyTWVudUxpc3Q6OnRha2VDaGls
ZCk6CisgICAgICAgIChSZW5kZXJNZW51TGlzdDo6c2V0VGV4dCk6CisgICAgICAgIChSZW5kZXJN
ZW51TGlzdDo6cmVtb3ZlQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJNZW51TGlzdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93OjpldmFjdWF0ZUFu
ZERlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93Ojpwcm9j
ZXNzUG9zc2libGVTcGFubmVyRGVzY2VuZGFudCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
dWx0aUNvbHVtbkZsb3c6OmZyYWdtZW50ZWRGbG93RGVzY2VuZGFudEluc2VydGVkKToKKworICAg
ICAgICAgICAgS2VlcCB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgYW5kIGxlYWsgdGhlIHBsYWNlaG9s
ZGVyIHJlbmRlcmVyLgorICAgICAgICAgICAgVG8gYmUgY2xlYW5lZCB1cCBsYXRlci4KKworICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5GbG93OjpoYW5kbGVTcGFubmVyUmVtb3Zh
bCk6CisKKyAgICAgICAgICAgIEtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW9yIGFuZCBsZWFrIHRo
ZSBwbGFjZWhvbGRlciByZW5kZXJlci4KKyAgICAgICAgICAgIFRvIGJlIGNsZWFuZWQgdXAgbGF0
ZXIuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vo
b2xkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxh
Y2Vob2xkZXI6OmNyZWF0ZUFub255bW91cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11
bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21Q
YXJlbnRBbmREZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6d2lsbEJl
RGVzdHJveWVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6ZGVzdHJveSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUZyb21QYXJlbnQpOiBEZWxldGVk
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUXVvdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUXVvdGU6OnVwZGF0
ZVRleHRSZW5kZXJlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJsb2NrKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUnVieUFzSW5saW5lOjp0YWtlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUnVieUFzQmxvY2s6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1YnlB
c0Jsb2NrOjp0YWtlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieUFzSW5saW5l
OjpyZW1vdmVDaGlsZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5QXNC
bG9jazo6cmVtb3ZlQ2hpbGQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJS
dWJ5Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclJ1YnlCYXNlOjptb3ZlSW5saW5lQ2hpbGRyZW4pOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJ1
YnlSdW46OnJ1YnlCYXNlU2FmZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjph
ZGRDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjp0YWtlQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6Y3JlYXRlUnVieUJhc2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVieVJ1bik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSdWJ5UnVuOjpyZW1vdmVDaGlsZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJ1YnlSdW4uaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmFkZENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjcmVhdGVUYWJsZVdpdGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVu
dFJlbmRlcmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyBj
b25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZVRhYmxlQ2VsbFdpdGhTdHlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZUFub255bW91c1dpdGhQYXJl
bnRSZW5kZXJlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2Ft
ZVR5cGVBcyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93OjphZGRDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlVGFibGVSb3dXaXRoU3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5k
ZXJlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMg
Y29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255bW91c1dp
dGhQYXJlbnRSZW5kZXJlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlv
bi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1v
dXNCb3hXaXRoU2FtZVR5cGVBcyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxGZW5jZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MRmVu
Y2VkOjptYWtlRmVuY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTEZlbmNlZDo6
YWRkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRmVuY2Vk
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjphZGRDaGlsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OnRha2VDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdDb250YWluZXI6OnJlbW92ZUNoaWxkKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lubGlu
ZTo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lOjp0YWtlQ2hp
bGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW5saW5lOjpyZW1vdmVDaGlsZCk6IERl
bGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyU1ZHUm9vdDo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUm9v
dDo6dGFrZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jvb3Q6OnJlbW92ZUNo
aWxkKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHVGV4dDo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHVGV4dDo6dGFrZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnJl
bW92ZUNoaWxkKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Rl
eHQuaDoKKyAgICAgICAgKiBzdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRyZWVQb3NpdGlvbjo6aW5zZXJ0KToKKyAgICAgICAgKiBzdHlsZS9SZW5k
ZXJUcmVlVXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6
Y3JlYXRlUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVGV4dFJlbmRlcmVyKToK
KyAgICAgICAgKiBzdHlsZS9SZW5kZXJUcmVlVXBkYXRlckZpcnN0TGV0dGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OnVwZGF0ZUZpcnN0TGV0dGVyU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
Y3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcik6CisgICAgICAgICogc3R5bGUvUmVuZGVyVHJlZVVw
ZGF0ZXJHZW5lcmF0ZWRDb250ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNvbnRl
bnRSZW5kZXJlcnMpOgorICAgICAgICAqIHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6Okxpc3RJdGVtOjp1cGRh
dGVNYXJrZXIpOgorICAgICAgICAqIHN0eWxlL1JlbmRlclRyZWVVcGRhdGVyTXVsdGlDb2x1bW4u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uOjpj
cmVhdGVGcmFnbWVudGVkRmxvdyk6CisKIDIwMTctMDktMjkgIFphbGFuIEJ1anRhcyAgPHphbGFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgcmVkdW5kYW50IFJlbmRlck9iamVjdDo6c2Vs
ZWN0aW9uUm9vdCBhbmQgZGVwZW5kZW5jaWVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYwNDgsOCArNjA0OCw4IEBAIHZvaWQgRG9jdW1lbnQ6OndlYmtpdFdp
bGxFbnRlckZ1bGxTY3JlZW4KICAgICAgICAgbV9zYXZlZFBsYWNlaG9sZGVyUmVuZGVyU3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIocmVuZGVyZXItPnN0eWxlKCkpOwogICAgIH0KIAotICAg
IGlmIChtX2Z1bGxTY3JlZW5FbGVtZW50ICE9IGRvY3VtZW50RWxlbWVudCgpKQotICAgICAgICBS
ZW5kZXJGdWxsU2NyZWVuOjp3cmFwUmVuZGVyZXIocmVuZGVyZXIsIHJlbmRlcmVyID8gcmVuZGVy
ZXItPnBhcmVudCgpIDogbnVsbHB0ciwgKnRoaXMpOworICAgIGlmIChtX2Z1bGxTY3JlZW5FbGVt
ZW50ICE9IGRvY3VtZW50RWxlbWVudCgpICYmIHJlbmRlcmVyKQorICAgICAgICBSZW5kZXJGdWxs
U2NyZWVuOjp3cmFwRXhpc3RpbmdSZW5kZXJlcigqcmVuZGVyZXIsICp0aGlzKTsKIAogICAgIG1f
ZnVsbFNjcmVlbkVsZW1lbnQtPnNldENvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnRPbkFuY2VzdG9y
c0Nyb3NzaW5nRnJhbWVCb3VuZGFyaWVzKHRydWUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3NSw3ICs0
NzUsNyBAQCBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6OmNvbnRpbnVhdGlvbkJlCiAgICAgcmV0
dXJuIGxhc3Q7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkVG9Db250aW51YXRpb24o
UmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQg
UmVuZGVyQmxvY2s6OmFkZENoaWxkVG9Db250aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgUmVuZGVyQmxv
Y2sqIGZsb3cgPSBjb250aW51YXRpb25CZWZvcmUoYmVmb3JlQ2hpbGQpOwogICAgIEFTU0VSVCgh
YmVmb3JlQ2hpbGQgfHwgaXM8UmVuZGVyQmxvY2s+KCpiZWZvcmVDaGlsZC0+cGFyZW50KCkpKTsK
QEAgLTQ5MSw3ICs0OTEsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZFRvQ29udGludWF0
aW9uCiAgICAgfQogCiAgICAgaWYgKG5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3Np
dGlvbmVkKCkpIHsKLSAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgYmVmb3JlQ2hpbGRQ
YXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIGJl
Zm9yZUNoaWxkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNTAwLDIxICs1MDAsMjEg
QEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRUb0NvbnRpbnVhdGlvbgogICAgIGJvb2wgZmxv
d0lzTm9ybWFsID0gZmxvdy0+aXNJbmxpbmUoKSB8fCAhZmxvdy0+c3R5bGUoKS5jb2x1bW5TcGFu
KCk7CiAKICAgICBpZiAoZmxvdyA9PSBiZWZvcmVDaGlsZFBhcmVudCkgewotICAgICAgICBmbG93
LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7Cisg
ICAgICAgIGZsb3ctPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdDaGls
ZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICAvLyBU
aGUgZ29hbCBoZXJlIGlzIHRvIG1hdGNoIHVwIGlmIHdlIGNhbiwgc28gdGhhdCB3ZSBjYW4gY29h
bGVzY2UgYW5kIGNyZWF0ZSB0aGUKICAgICAvLyBtaW5pbWFsICMgb2YgY29udGludWF0aW9ucyBu
ZWVkZWQgZm9yIHRoZSBpbmxpbmUuCiAgICAgaWYgKGNoaWxkSXNOb3JtYWwgPT0gYmNwSXNOb3Jt
YWwpIHsKLSAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3JpbmdDb250aW51
YXRpb24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgYmVmb3JlQ2hpbGRQYXJlbnQt
PmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNo
aWxkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoZmxvd0lzTm9ybWFsID09IGNo
aWxkSXNOb3JtYWwpIHsKLSAgICAgICAgZmxvdy0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlv
bihuZXdDaGlsZCwgMCk7IC8vIEp1c3QgdHJlYXQgbGlrZSBhbiBhcHBlbmQuCisgICAgICAgIGZs
b3ctPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIDApOyAv
LyBKdXN0IHRyZWF0IGxpa2UgYW4gYXBwZW5kLgogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGJlZm9yZUNoaWxkUGFyZW50LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxk
LCBiZWZvcmVDaGlsZCk7CisgICAgYmVmb3JlQ2hpbGRQYXJlbnQtPmFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKIH0KIAogUmVuZGVy
UHRyPFJlbmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y2xvbmUoKSBjb25zdApAQCAtNTM3LDE1ICs1
MzcsMTUgQEAgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y2xvbgogICAgIHJl
dHVybiBjbG9uZUJsb2NrOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjphZGRDaGlsZChSZW5kZXJP
YmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJC
bG9jazo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgaWYgKGNvbnRpbnVhdGlvbigpICYmICFpc0Fub255
bW91c0Jsb2NrKCkpCi0gICAgICAgIGFkZENoaWxkVG9Db250aW51YXRpb24obmV3Q2hpbGQsIGJl
Zm9yZUNoaWxkKTsKKyAgICAgICAgYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0No
aWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgIGVsc2UKLSAgICAgICAgYWRkQ2hpbGRJZ25vcmluZ0Nv
bnRpbnVhdGlvbihuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICBhZGRDaGlsZElnbm9y
aW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiB9CiAKLXZv
aWQgUmVuZGVyQmxvY2s6OmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0
KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyQmxvY2s6
OmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3
Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgaWYgKGJlZm9yZUNoaWxk
ICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKSB7CiAgICAgICAgIFJlbmRlckVsZW1l
bnQqIGJlZm9yZUNoaWxkQ29udGFpbmVyID0gYmVmb3JlQ2hpbGQtPnBhcmVudCgpOwpAQCAtNTY2
LDE2ICs1NjYsMTYgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbgog
ICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgY2hpbGQg
aW50byB0aGUgYW5vbnltb3VzIGJsb2NrIGJveCBpbnN0ZWFkIG9mIGhlcmUuCiAgICAgICAgICAg
ICAgICAgaWYgKG5ld0NoaWxkLT5pc0lubGluZSgpIHx8IGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+
Zmlyc3RDaGlsZCgpICE9IGJlZm9yZUNoaWxkKQotICAgICAgICAgICAgICAgICAgICBiZWZvcmVD
aGlsZC0+cGFyZW50KCktPmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAg
ICAgICAgICAgICAgIGJlZm9yZUNoaWxkLT5wYXJlbnQoKS0+YWRkQ2hpbGQoV1RGTW92ZShuZXdD
aGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIGFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZC0+cGFyZW50KCkpOworICAgICAg
ICAgICAgICAgICAgICBhZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQtPnBh
cmVudCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIEFTU0VSVChiZWZvcmVDaGlsZEFub255bW91c0NvbnRhaW5lci0+aXNUYWJsZSgpKTsK
ICAgICAgICAgICAgIGlmIChuZXdDaGlsZC0+aXNUYWJsZVBhcnQoKSkgewogICAgICAgICAgICAg
ICAgIC8vIEluc2VydCBpbnRvIHRoZSBhbm9ueW1vdXMgdGFibGUuCi0gICAgICAgICAgICAgICAg
YmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVD
aGlsZCk7CisgICAgICAgICAgICAgICAgYmVmb3JlQ2hpbGRBbm9ueW1vdXNDb250YWluZXItPmFk
ZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogCkBAIC02MTIsMjIgKzYxMiwyMyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGRDaGlsZElnbm9yaW5nQ29udGluCiAgICAgICAgIFJlbmRlck9iamVjdCogYWZ0
ZXJDaGlsZCA9IGJlZm9yZUNoaWxkID8gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpIDog
bGFzdENoaWxkKCk7CiAKICAgICAgICAgaWYgKGFmdGVyQ2hpbGQgJiYgYWZ0ZXJDaGlsZC0+aXNB
bm9ueW1vdXNCbG9jaygpKSB7Ci0gICAgICAgICAgICBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmFm
dGVyQ2hpbGQpLmFkZENoaWxkKG5ld0NoaWxkKTsKKyAgICAgICAgICAgIGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqYWZ0ZXJDaGlsZCkuYWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5ld0NoaWxkLT5pc0lubGlu
ZSgpKSB7CiAgICAgICAgICAgICAvLyBObyBzdWl0YWJsZSBleGlzdGluZyBhbm9ueW1vdXMgYm94
IC0gY3JlYXRlIGEgbmV3IG9uZS4KLSAgICAgICAgICAgIFJlbmRlckJsb2NrKiBuZXdCb3ggPSBj
cmVhdGVBbm9ueW1vdXNCbG9jaygpOwotICAgICAgICAgICAgUmVuZGVyQm94OjphZGRDaGlsZChu
ZXdCb3gsIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAgIG5ld0JveC0+YWRkQ2hpbGQobmV3Q2hp
bGQpOworICAgICAgICAgICAgYXV0byBuZXdCb3ggPSBjcmVhdGVBbm9ueW1vdXNCbG9jaygpOwor
ICAgICAgICAgICAgYXV0byYgYm94ID0gKm5ld0JveDsKKyAgICAgICAgICAgIFJlbmRlckJveDo6
YWRkQ2hpbGQoV1RGTW92ZShuZXdCb3gpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBib3gu
YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgaW52YWxpZGF0ZUxpbmVMYXlvdXRQYXRoKCk7CiAKLSAgICBSZW5k
ZXJCb3g6OmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgUmVuZGVyQm94Ojph
ZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hpbGQpOwogIAogICAgIGlmIChtYWRl
Qm94ZXNOb25JbmxpbmUgJiYgaXM8UmVuZGVyQmxvY2s+KHBhcmVudCgpKSAmJiBpc0Fub255bW91
c0Jsb2NrKCkpCiAgICAgICAgIGRvd25jYXN0PFJlbmRlckJsb2NrPigqcGFyZW50KCkpLnJlbW92
ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2sodGhpcyk7CkBAIC03MTAsOSArNzExLDEwIEBAIHZvaWQg
UmVuZGVyQmxvY2s6Om1ha2VDaGlsZHJlbk5vbklubGluZSgKIAogICAgICAgICBjaGlsZCA9IGlu
bGluZVJ1bkVuZC0+bmV4dFNpYmxpbmcoKTsKIAotICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sg
PSBjcmVhdGVBbm9ueW1vdXNCbG9jaygpOwotICAgICAgICBpbnNlcnRDaGlsZEludGVybmFsKGJs
b2NrLCBpbmxpbmVSdW5TdGFydCwgTm90aWZ5Q2hpbGRyZW4pOwotICAgICAgICBtb3ZlQ2hpbGRy
ZW5UbyhibG9jaywgaW5saW5lUnVuU3RhcnQsIGNoaWxkKTsKKyAgICAgICAgYXV0byBuZXdCbG9j
ayA9IGNyZWF0ZUFub255bW91c0Jsb2NrKCk7CisgICAgICAgIGF1dG8mIGJsb2NrID0gKm5ld0Js
b2NrOworICAgICAgICBpbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3QmxvY2spLCBpbmxp
bmVSdW5TdGFydCwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICBtb3ZlQ2hpbGRyZW5UbygmYmxv
Y2ssIGlubGluZVJ1blN0YXJ0LCBjaGlsZCk7CiAgICAgfQogCiAjaWZuZGVmIE5ERUJVRwpAQCAt
ODExLDIxICs4MTMsMTkgQEAgdm9pZCBSZW5kZXJCbG9jazo6ZHJvcEFub255bW91c0JveENoaWxk
KAogICAgIHBhcmVudC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBw
YXJlbnQuc2V0Q2hpbGRyZW5JbmxpbmUoY2hpbGQuY2hpbGRyZW5JbmxpbmUoKSk7CiAgICAgUmVu
ZGVyT2JqZWN0KiBuZXh0U2libGluZyA9IGNoaWxkLm5leHRTaWJsaW5nKCk7Ci0gICAgcGFyZW50
LnJlbW92ZUNoaWxkSW50ZXJuYWwoY2hpbGQsIGNoaWxkLmhhc0xheWVyKCkgPyBOb3RpZnlDaGls
ZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7CisKKyAgICBhdXRvIHRvQmVEZWxldGVkID0gcGFy
ZW50LnRha2VDaGlsZEludGVybmFsKGNoaWxkLCBjaGlsZC5oYXNMYXllcigpID8gTm90aWZ5Q2hp
bGRyZW4gOiBEb250Tm90aWZ5Q2hpbGRyZW4pOwogICAgIGNoaWxkLm1vdmVBbGxDaGlsZHJlblRv
KCZwYXJlbnQsIG5leHRTaWJsaW5nLCBjaGlsZC5oYXNMYXllcigpKTsKICAgICAvLyBEZWxldGUg
dGhlIG5vdy1lbXB0eSBibG9jaydzIGxpbmVzIGFuZCBudWtlIGl0LgogICAgIGNoaWxkLmRlbGV0
ZUxpbmVzKCk7Ci0gICAgY2hpbGQuZGVzdHJveSgpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpy
ZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQorUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gUmVuZGVyQmxvY2s6OnRha2VDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQogewogICAg
IC8vIE5vIG5lZWQgdG8gd2FzdGUgdGltZSBpbiBtZXJnaW5nIG9yIHJlbW92aW5nIGVtcHR5IGFu
b255bW91cyBibG9ja3MuCiAgICAgLy8gV2UgY2FuIGp1c3QgYmFpbCBvdXQgaWYgb3VyIGRvY3Vt
ZW50IGlzIGdldHRpbmcgZGVzdHJveWVkLgotICAgIGlmIChyZW5kZXJUcmVlQmVpbmdEZXN0cm95
ZWQoKSkgewotICAgICAgICBSZW5kZXJCb3g6OnJlbW92ZUNoaWxkKG9sZENoaWxkKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCisg
ICAgICAgIHJldHVybiBSZW5kZXJCb3g6OnRha2VDaGlsZChvbGRDaGlsZCk7CiAKICAgICAvLyBJ
ZiB0aGlzIGNoaWxkIGlzIGEgYmxvY2ssIGFuZCBpZiBvdXIgcHJldmlvdXMgYW5kIG5leHQgc2li
bGluZ3MgYXJlIGJvdGggYW5vbnltb3VzIGJsb2NrcwogICAgIC8vIHdpdGggaW5saW5lIGNvbnRl
bnQsIHRoZW4gd2UgY2FuIGZvbGQgdGhlIGlubGluZSBjb250ZW50IGJhY2sgdG9nZXRoZXIuCkBA
IC04NDksMTEgKzg0OSwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJP
YmplCiAgICAgICAgICAgICAvLyBDYWNoZSB0aGlzIHZhbHVlIGFzIGl0IG1pZ2h0IGdldCBjaGFu
Z2VkIGluIHNldFN0eWxlKCkgY2FsbC4KICAgICAgICAgICAgIGJvb2wgaW5saW5lQ2hpbGRyZW5C
bG9ja0hhc0xheWVyID0gaW5saW5lQ2hpbGRyZW5CbG9jay5oYXNMYXllcigpOwogICAgICAgICAg
ICAgaW5saW5lQ2hpbGRyZW5CbG9jay5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnlt
b3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSgpLCBCTE9DSykpOwotICAgICAgICAgICAgcmVtb3Zl
Q2hpbGRJbnRlcm5hbChpbmxpbmVDaGlsZHJlbkJsb2NrLCBpbmxpbmVDaGlsZHJlbkJsb2NrSGFz
TGF5ZXIgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbik7CisgICAgICAgICAg
ICBhdXRvIGJsb2NrVG9Nb3ZlID0gdGFrZUNoaWxkSW50ZXJuYWwoaW5saW5lQ2hpbGRyZW5CbG9j
aywgaW5saW5lQ2hpbGRyZW5CbG9ja0hhc0xheWVyID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90
aWZ5Q2hpbGRyZW4pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBOb3cganVzdCBwdXQg
dGhlIGlubGluZUNoaWxkcmVuQmxvY2sgaW5zaWRlIHRoZSBibG9ja0NoaWxkcmVuQmxvY2suCiAg
ICAgICAgICAgICBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gcHJldiA9PSAmaW5saW5lQ2hp
bGRyZW5CbG9jayA/IGJsb2NrQ2hpbGRyZW5CbG9jay5maXJzdENoaWxkKCkgOiBudWxscHRyOwot
ICAgICAgICAgICAgYmxvY2tDaGlsZHJlbkJsb2NrLmluc2VydENoaWxkSW50ZXJuYWwoJmlubGlu
ZUNoaWxkcmVuQmxvY2ssIGJlZm9yZUNoaWxkLAorICAgICAgICAgICAgYmxvY2tDaGlsZHJlbkJs
b2NrLmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShibG9ja1RvTW92ZSksIGJlZm9yZUNoaWxk
LAogICAgICAgICAgICAgICAgIChpbmxpbmVDaGlsZHJlbkJsb2NrSGFzTGF5ZXIgfHwgYmxvY2tD
aGlsZHJlbkJsb2NrLmhhc0xheWVyKCkpID8gTm90aWZ5Q2hpbGRyZW4gOiBEb250Tm90aWZ5Q2hp
bGRyZW4pOwogICAgICAgICAgICAgbmV4dC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVj
YWxjKCk7CiAgICAgICAgICAgICAKQEAgLTg3Nyw3ICs4NzcsNyBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplCiAKICAgICBpbnZhbGlkYXRlTGluZUxheW91dFBhdGgo
KTsKIAotICAgIFJlbmRlckJveDo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOworICAgIGF1dG8gdGFr
ZW5DaGlsZCA9IFJlbmRlckJveDo6dGFrZUNoaWxkKG9sZENoaWxkKTsKIAogICAgIFJlbmRlck9i
amVjdCogY2hpbGQgPSBwcmV2ID8gcHJldiA6IG5leHQ7CiAgICAgaWYgKGNhbk1lcmdlQW5vbnlt
b3VzQmxvY2tzICYmIGNoaWxkICYmICFjaGlsZC0+cHJldmlvdXNTaWJsaW5nKCkgJiYgIWNoaWxk
LT5uZXh0U2libGluZygpICYmIGNhbkRyb3BBbm9ueW1vdXNCbG9ja0NoaWxkKCkpIHsKQEAgLTkz
NCw2ICs5MzQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplCiAg
ICAgICAgICAgICBkZXN0cm95KCk7CiAgICAgICAgIH0KICAgICB9CisgICAgcmV0dXJuIHRha2Vu
Q2hpbGQ7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6OmNoaWxkcmVuUHJldmVudFNlbGZDb2xsYXBz
aW5nKCkgY29uc3QKQEAgLTMzNDAsMTQgKzMzNDEsMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkt
PmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkTGF5b3V0UG9pbnQoTGF5b3V0UG9pbnQo
YWRkaXRpb25hbE9mZnNldCArIGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+Y29udGFpbmlu
Z0Jsb2NrKCktPmxvY2F0aW9uKCkgLSBsb2NhdGlvbigpKSksIHBhaW50Q29udGFpbmVyKTsKIH0K
IAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnlt
b3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBFRGlzcGxheSBkaXNwbGF5KQorUmVuZGVyUHRyPFJlbmRlckJsb2Nr
PiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KERv
Y3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBFRGlzcGxheSBkaXNw
bGF5KQogewogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGNvbnZlcnQgYWxsIG91ciBpbmxp
bmUgZGlzcGxheXMgdG8gYmxvY2stdHlwZSBpbiB0aGUgYW5vbnltb3VzIGxvZ2ljID8KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2s+IG5ld0JveDsKKyAgICBSZW5kZXJQdHI8UmVuZGVy
QmxvY2s+IG5ld0JveDsKICAgICBpZiAoZGlzcGxheSA9PSBGTEVYIHx8IGRpc3BsYXkgPT0gSU5M
SU5FX0ZMRVgpCi0gICAgICAgIG5ld0JveCA9IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyRmxleGli
bGVCb3g+KGRvY3VtZW50LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlz
cGxheShzdHlsZSwgRkxFWCkpOworICAgICAgICBuZXdCb3ggPSBjcmVhdGVSZW5kZXJlcjxSZW5k
ZXJGbGV4aWJsZUJveD4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHls
ZVdpdGhEaXNwbGF5KHN0eWxlLCBGTEVYKSk7CiAgICAgZWxzZQotICAgICAgICBuZXdCb3ggPSBz
dGQ6Om1ha2VfdW5pcXVlPFJlbmRlckJsb2NrRmxvdz4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpj
cmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBCTE9DSykpOworICAgICAgICBu
ZXdCb3ggPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KGRvY3VtZW50LCBSZW5kZXJT
dHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgQkxPQ0spKTsKICAg
ICAKICAgICBuZXdCb3gtPmluaXRpYWxpemVTdHlsZSgpOwogICAgIHJldHVybiBuZXdCb3g7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMjIyNjc4
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTcyLDggKzcyLDggQEAgcHVibGljOgogICAgIC8vIEZJWE1FLUJMT0NLRkxPVzogUmVt
b3ZlIHZpcnR1YWxpemFpb24gd2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJs
b2NrRmxvdwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVMaW5lcygpOwogCi0gICAgdm9pZCBhZGRD
aGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0g
MCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwogCiAgICAgdmly
dHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBw
YWdlTG9naWNhbEhlaWdodCA9IDApOwogCkBAIC0xOTYsMTEgKzE5NiwxMSBAQCBwdWJsaWM6CiAg
ICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNvbnRpbnVhdGlvbjsKICAgICB1c2luZyBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0Q29udGludWF0aW9uOwogCi0gICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVy
QW5kRGlzcGxheShjb25zdCBSZW5kZXJCb3gmIHBhcmVudCwgRURpc3BsYXkgPSBCTE9DSyk7Ci0g
ICAgUmVuZGVyQmxvY2sqIGNyZWF0ZUFub255bW91c0Jsb2NrKEVEaXNwbGF5ID0gQkxPQ0spIGNv
bnN0OworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IGNyZWF0ZUFub255bW91c1dp
dGhQYXJlbnRSZW5kZXJlckFuZERpc3BsYXkoY29uc3QgUmVuZGVyQm94JiBwYXJlbnQsIEVEaXNw
bGF5ID0gQkxPQ0spOworICAgIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnltb3Vz
QmxvY2soRURpc3BsYXkgPSBCTE9DSykgY29uc3Q7CiAgICAgc3RhdGljIHZvaWQgZHJvcEFub255
bW91c0JveENoaWxkKFJlbmRlckJsb2NrJiBwYXJlbnQsIFJlbmRlckJsb2NrJiBjaGlsZCk7CiAK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2Ft
ZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8
UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJC
b3gmKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHN0YXRpYyBib29sIHNob3VsZFNraXBDcmVhdGlu
Z1J1bnNGb3JPYmplY3QoUmVuZGVyT2JqZWN0JiBvYmopCiAgICAgewpAQCAtNDI4LDcgKzQyOCw3
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGJsb2NrV2lsbEJlRGVzdHJveWVkKCk7CiAKIHByaXZh
dGU6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5vbnlt
b3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUm
LCBFRGlzcGxheSk7CisgICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJCbG9jaz4gY3JlYXRlQW5v
bnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5
bGUmLCBFRGlzcGxheSk7CiAKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFs
aXphaW9uIHdoZW4gYWxsIGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAg
ICB2aXJ0dWFsIExheW91dFVuaXQgbG9naWNhbFJpZ2h0RmxvYXRPZmZzZXRGb3JMaW5lKExheW91
dFVuaXQsIExheW91dFVuaXQgZml4ZWRPZmZzZXQsIExheW91dFVuaXQpIGNvbnN0IHsgcmV0dXJu
IGZpeGVkT2Zmc2V0OyB9OwpAQCAtNDQ3LDggKzQ0Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gRklY
TUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YWlvbiB3aGVuIGFsbCBjYWxsZXJzIGhhdmUg
bW92ZWQgdG8gUmVuZGVyQmxvY2tGbG93CiAgICAgdmlydHVhbCB2b2lkIG1vdmVBbGxDaGlsZHJl
bkluY2x1ZGluZ0Zsb2F0c1RvKFJlbmRlckJsb2NrJiB0b0Jsb2NrLCBib29sIGZ1bGxSZW1vdmVJ
bnNlcnQpIHsgbW92ZUFsbENoaWxkcmVuVG8oJnRvQmxvY2ssIGZ1bGxSZW1vdmVJbnNlcnQpOyB9
CiAKLSAgICB2b2lkIGFkZENoaWxkVG9Db250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7Ci0gICAgdm9pZCBhZGRDaGlsZElnbm9yaW5n
Q29udGludWF0aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGRUb0NvbnRpbnVhdGlvbihSZW5kZXJQ
dHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7Cisg
ICAgdm9pZCBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKSBvdmVycmlkZTsKIAogICAg
IGJvb2wgaXNTZWxmQ29sbGFwc2luZ0Jsb2NrKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIGNoaWxkcmVuUHJldmVudFNlbGZDb2xsYXBzaW5nKCkgY29uc3Q7CkBAIC01NDcsMTkg
KzU0NywxOSBAQCBMYXlvdXRVbml0IGJsb2NrRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsCiBMYXlv
dXRVbml0IGlubGluZURpcmVjdGlvbk9mZnNldChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25z
dCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrKTsKIFZpc2libGVQb3NpdGlvbiBwb3Np
dGlvbkZvclBvaW50UmVzcGVjdGluZ0VkaXRpbmdCb3VuZGFyaWVzKFJlbmRlckJsb2NrJiwgUmVu
ZGVyQm94JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAotaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJCbG9jaz4gUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJl
ckFuZERpc3BsYXkoY29uc3QgUmVuZGVyQm94JiBwYXJlbnQsIEVEaXNwbGF5IGRpc3BsYXkpCitp
bmxpbmUgUmVuZGVyUHRyPFJlbmRlckJsb2NrPiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3Vz
V2l0aFBhcmVudFJlbmRlcmVyQW5kRGlzcGxheShjb25zdCBSZW5kZXJCb3gmIHBhcmVudCwgRURp
c3BsYXkgZGlzcGxheSkKIHsKICAgICByZXR1cm4gY3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5
bGVBbmREaXNwbGF5KHBhcmVudC5kb2N1bWVudCgpLCBwYXJlbnQuc3R5bGUoKSwgZGlzcGxheSk7
CiB9CiAKLWlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBSZW5kZXJCbG9jazo6Y3Jl
YXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikg
Y29uc3QKK2lubGluZSBSZW5kZXJQdHI8UmVuZGVyQm94PiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5v
bnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29uc3QK
IHsKICAgICByZXR1cm4gY3JlYXRlQW5vbnltb3VzQmxvY2tXaXRoU3R5bGVBbmREaXNwbGF5KGRv
Y3VtZW50KCksIHJlbmRlcmVyLnN0eWxlKCksIHN0eWxlKCkuZGlzcGxheSgpKTsKIH0KIAotaW5s
aW5lIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2soRURpc3Bs
YXkgZGlzcGxheSkgY29uc3QKK2lubGluZSBSZW5kZXJQdHI8UmVuZGVyQmxvY2s+IFJlbmRlckJs
b2NrOjpjcmVhdGVBbm9ueW1vdXNCbG9jayhFRGlzcGxheSBkaXNwbGF5KSBjb25zdAogewotICAg
IHJldHVybiBjcmVhdGVBbm9ueW1vdXNCbG9ja1dpdGhTdHlsZUFuZERpc3BsYXkoZG9jdW1lbnQo
KSwgc3R5bGUoKSwgZGlzcGxheSkucmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVBbm9ueW1v
dXNCbG9ja1dpdGhTdHlsZUFuZERpc3BsYXkoZG9jdW1lbnQoKSwgc3R5bGUoKSwgZGlzcGxheSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAyMjI2NzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgzNSwyNCArMzgzNSwyNCBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0RXhjbHVkZWRD
aGlsCiAgICAgZGV0ZXJtaW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKCpmcmFnbWVudGVk
Rmxvdyk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChSZW5kZXJPYmplY3Qq
IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJCbG9ja0Zs
b3c6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkKQogewogICAgIGlmIChtdWx0aUNvbHVtbkZsb3coKSAmJiAoIWlzRmll
bGRzZXQoKSB8fCAhbmV3Q2hpbGQtPmlzTGVnZW5kKCkpKQotICAgICAgICByZXR1cm4gbXVsdGlD
b2x1bW5GbG93KCktPmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIHJl
dHVybiBtdWx0aUNvbHVtbkZsb3coKS0+YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJlZm9y
ZUNoaWxkKTsKICAgICBhdXRvKiBiZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIgPSBiZWZvcmVDaGls
ZDsKICAgICBpZiAoYXV0byogY29udGFpbmluZ0ZyYWdtZW50ZWRGbG93ID0gZW5jbG9zaW5nRnJh
Z21lbnRlZEZsb3coKSkKICAgICAgICAgYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyID0gY29udGFp
bmluZ0ZyYWdtZW50ZWRGbG93LT5yZXNvbHZlTW92ZWRDaGlsZChiZWZvcmVDaGlsZCk7Ci0gICAg
UmVuZGVyQmxvY2s6OmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIp
OworICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVmb3JlQ2hp
bGRPclBsYWNlaG9sZGVyKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnJlbW92ZUNoaWxk
KFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJC
bG9ja0Zsb3c6OnRha2VDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQogewogICAgIGlmICgh
cmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpIHsKICAgICAgICAgUmVuZGVyRnJhZ21lbnRlZEZs
b3cqIGZyYWdtZW50ZWRGbG93ID0gbXVsdGlDb2x1bW5GbG93KCk7CiAgICAgICAgIGlmIChmcmFn
bWVudGVkRmxvdyAmJiBmcmFnbWVudGVkRmxvdyAhPSAmb2xkQ2hpbGQpCiAgICAgICAgICAgICBm
cmFnbWVudGVkRmxvdy0+ZnJhZ21lbnRlZEZsb3dSZWxhdGl2ZVdpbGxCZVJlbW92ZWQob2xkQ2hp
bGQpOwogICAgIH0KLSAgICBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOworICAg
IHJldHVybiBSZW5kZXJCbG9jazo6dGFrZUNoaWxkKG9sZENoaWxkKTsKIH0KIAogdm9pZCBSZW5k
ZXJCbG9ja0Zsb3c6OmNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoYm9vbCYg
cmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcGFnZUxvZ2ljYWxIZWlnaHQsIGJvb2wmIHBh
Z2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQmxvY2tGbG93LmgJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDggKzM4Miw4
IEBAIHB1YmxpYzoKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZEZvckZyYWdt
ZW50YXRpb24oY29uc3QgUmVuZGVyQm94JiBjaGlsZCkgY29uc3Q7CiAgICAgYm9vbCBoYXNOZXh0
UGFnZShMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQsIFBhZ2VCb3VuZGFyeVJ1bGUgPSBFeGNsdWRl
UGFnZUJvdW5kYXJ5KSBjb25zdDsKIAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBu
ZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGls
ZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCA9IDApIG92ZXJyaWRlOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGls
ZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgdXBkYXRlQ29sdW1uUHJvZ3Jl
c3Npb25Gcm9tU3R5bGUoUmVuZGVyU3R5bGUmKTsKICAgICB2b2lkIHVwZGF0ZVN0eWxlc0ZvckNv
bHVtbkNoaWxkcmVuKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkocmV2aXNpb24gMjIyNjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5MzEsMjAgKzQ5MzEsMjEgQEAgUmVuZGVyT2JqZWN0
KiBSZW5kZXJCb3g6OnNwbGl0QW5vbnltb3VzQgogCiAgICAgICAgICAgICAvLyBXZSBoYXZlIHRv
IHNwbGl0IHRoZSBwYXJlbnQgYm94IGludG8gdHdvIGJveGVzIGFuZCBtb3ZlIGNoaWxkcmVuCiAg
ICAgICAgICAgICAvLyBmcm9tIHxiZWZvcmVDaGlsZHwgdG8gZW5kIGludG8gdGhlIG5ldyBwb3N0
IGJveC4KLSAgICAgICAgICAgIGF1dG8qIHBvc3RCb3ggPSBib3hUb1NwbGl0LmNyZWF0ZUFub255
bW91c0JveFdpdGhTYW1lVHlwZUFzKCp0aGlzKS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBwb3N0
Qm94LT5zZXRDaGlsZHJlbklubGluZShib3hUb1NwbGl0LmNoaWxkcmVuSW5saW5lKCkpOworICAg
ICAgICAgICAgYXV0byBuZXdQb3N0Qm94ID0gYm94VG9TcGxpdC5jcmVhdGVBbm9ueW1vdXNCb3hX
aXRoU2FtZVR5cGVBcygqdGhpcyk7CisgICAgICAgICAgICBhdXRvJiBwb3N0Qm94ID0gKm5ld1Bv
c3RCb3g7CisgICAgICAgICAgICBwb3N0Qm94LnNldENoaWxkcmVuSW5saW5lKGJveFRvU3BsaXQu
Y2hpbGRyZW5JbmxpbmUoKSk7CiAgICAgICAgICAgICBSZW5kZXJCb3gqIHBhcmVudEJveCA9IGRv
d25jYXN0PFJlbmRlckJveD4oYm94VG9TcGxpdC5wYXJlbnQoKSk7CiAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIGludmFsaWRhdGUgdGhlIHxwYXJlbnRCb3h8IGJlZm9yZSBpbnNlcnRpbmcgdGhl
IG5ldyBub2RlCiAgICAgICAgICAgICAvLyBzbyB0aGF0IHRoZSB0YWJsZSByZXBhaW50aW5nIGxv
Z2ljIGtub3dzIHRoZSBzdHJ1Y3R1cmUgaXMgZGlydHkuCiAgICAgICAgICAgICAvLyBTZWUgZm9y
IGV4YW1wbGUgUmVuZGVyVGFibGVDZWxsOmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50Lgog
ICAgICAgICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdCgqcGFyZW50Qm94KTsKLSAg
ICAgICAgICAgIHBhcmVudEJveC0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChwb3N0Qm94LCBib3hUb1Nw
bGl0Lm5leHRTaWJsaW5nKCksIE5vdGlmeUNoaWxkcmVuKTsKLSAgICAgICAgICAgIGJveFRvU3Bs
aXQubW92ZUNoaWxkcmVuVG8ocG9zdEJveCwgYmVmb3JlQ2hpbGQsIG51bGxwdHIsIHRydWUpOwor
ICAgICAgICAgICAgcGFyZW50Qm94LT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUobmV3UG9z
dEJveCksIGJveFRvU3BsaXQubmV4dFNpYmxpbmcoKSwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAg
ICAgICAgYm94VG9TcGxpdC5tb3ZlQ2hpbGRyZW5UbygmcG9zdEJveCwgYmVmb3JlQ2hpbGQsIG51
bGxwdHIsIHRydWUpOwogCiAgICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0
KGJveFRvU3BsaXQpOwotICAgICAgICAgICAgbWFya0JveEZvclJlbGF5b3V0QWZ0ZXJTcGxpdCgq
cG9zdEJveCk7CisgICAgICAgICAgICBtYXJrQm94Rm9yUmVsYXlvdXRBZnRlclNwbGl0KHBvc3RC
b3gpOwogCi0gICAgICAgICAgICBiZWZvcmVDaGlsZCA9IHBvc3RCb3g7CisgICAgICAgICAgICBi
ZWZvcmVDaGlsZCA9ICZwb3N0Qm94OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGJlZm9y
ZUNoaWxkID0gJmJveFRvU3BsaXQ7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAkocmV2aXNpb24gMjIyNjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OTIsNyArNTkyLDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbGF5b3V0T3ZlcmZsb3dSZWN0LnkoKSA8IHkoKSB8fCBsYXlvdXRPdmVy
Zmxvd1JlY3QubWF4WSgpID4geSgpICsgbG9naWNhbEhlaWdodCgpOwogICAgIH0KIAotICAgIHZp
cnR1YWwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gY3JlYXRlQW5vbnltb3VzQm94V2l0aFNh
bWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JikgY29uc3QKKyAgICB2aXJ0dWFsIFJlbmRlclB0cjxS
ZW5kZXJCb3g+IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJv
eCYpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI1OTYsMTIgKzI1OTYsMTIgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6bW92ZUNoaWxk
VG8oUgogICAgIGlmIChmdWxsUmVtb3ZlSW5zZXJ0ICYmICh0b0JveE1vZGVsT2JqZWN0LT5pc1Jl
bmRlckJsb2NrKCkgfHwgdG9Cb3hNb2RlbE9iamVjdC0+aXNSZW5kZXJJbmxpbmUoKSkpIHsKICAg
ICAgICAgLy8gVGFrZXMgY2FyZSBvZiBhZGRpbmcgdGhlIG5ldyBjaGlsZCBjb3JyZWN0bHkgaWYg
dG9CbG9jayBhbmQgZnJvbUJsb2NrCiAgICAgICAgIC8vIGhhdmUgZGlmZmVyZW50IGtpbmQgb2Yg
Y2hpbGRyZW4gKGJsb2NrIHZzIGlubGluZSkuCi0gICAgICAgIHJlbW92ZUNoaWxkSW50ZXJuYWwo
KmNoaWxkLCBOb3RpZnlDaGlsZHJlbik7Ci0gICAgICAgIHRvQm94TW9kZWxPYmplY3QtPmFkZENo
aWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSB0YWtl
Q2hpbGRJbnRlcm5hbCgqY2hpbGQsIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAgICAgdG9Cb3hNb2Rl
bE9iamVjdC0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZFRvTW92ZSksIGJlZm9yZUNoaWxkKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBOb3RpZnlDaGlsZHJlblR5cGUgbm90aWZ5VHlwZSA9IGZ1bGxS
ZW1vdmVJbnNlcnQgPyBOb3RpZnlDaGlsZHJlbiA6IERvbnROb3RpZnlDaGlsZHJlbjsKLSAgICAg
ICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbCgqY2hpbGQsIG5vdGlmeVR5cGUpOwotICAgICAgICB0b0Jv
eE1vZGVsT2JqZWN0LT5pbnNlcnRDaGlsZEludGVybmFsKGNoaWxkLCBiZWZvcmVDaGlsZCwgbm90
aWZ5VHlwZSk7CisgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSB0YWtlQ2hpbGRJbnRlcm5hbCgq
Y2hpbGQsIG5vdGlmeVR5cGUpOworICAgICAgICB0b0JveE1vZGVsT2JqZWN0LT5pbnNlcnRDaGls
ZEludGVybmFsKFdURk1vdmUoY2hpbGRUb01vdmUpLCBiZWZvcmVDaGlsZCwgbm90aWZ5VHlwZSk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQnV0dG9u
LmNwcAkocmV2aXNpb24gMjIyNjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJ1dHRvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDMwICs2MywzMSBAQCBib29sIFJlbmRl
ckJ1dHRvbjo6aGFzTGluZUlmRW1wdHkoKSBjb25zCiAgICAgcmV0dXJuIGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KGZvcm1Db250cm9sRWxlbWVudCgpKTsKIH0KIAotdm9pZCBSZW5kZXJCdXR0b246OmFk
ZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQp
Cit2b2lkIFJlbmRlckJ1dHRvbjo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3
Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgaWYgKCFtX2lubmVyKSB7
CiAgICAgICAgIC8vIENyZWF0ZSBhbiBhbm9ueW1vdXMgYmxvY2suCiAgICAgICAgIEFTU0VSVCgh
Zmlyc3RDaGlsZCgpKTsKLSAgICAgICAgbV9pbm5lciA9IGNyZWF0ZUFub255bW91c0Jsb2NrKHN0
eWxlKCkuZGlzcGxheSgpKTsKLSAgICAgICAgdXBkYXRlQW5vbnltb3VzQ2hpbGRTdHlsZSgqbV9p
bm5lciwgbV9pbm5lci0+bXV0YWJsZVN0eWxlKCkpOwotICAgICAgICBSZW5kZXJGbGV4aWJsZUJv
eDo6YWRkQ2hpbGQobV9pbm5lcik7CisgICAgICAgIGF1dG8gbmV3SW5uZXIgPSBjcmVhdGVBbm9u
eW1vdXNCbG9jayhzdHlsZSgpLmRpc3BsYXkoKSk7CisgICAgICAgIHVwZGF0ZUFub255bW91c0No
aWxkU3R5bGUoKm5ld0lubmVyLCBuZXdJbm5lci0+bXV0YWJsZVN0eWxlKCkpOworICAgICAgICBt
X2lubmVyID0gbmV3SW5uZXIuZ2V0KCk7CisgICAgICAgIFJlbmRlckZsZXhpYmxlQm94OjphZGRD
aGlsZChXVEZNb3ZlKG5ld0lubmVyKSk7CiAgICAgfQogICAgIAotICAgIG1faW5uZXItPmFkZENo
aWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgbV9pbm5lci0+YWRkQ2hpbGQoV1RGTW92
ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKIH0KIAotdm9pZCBSZW5kZXJCdXR0b246OnJlbW92
ZUNoaWxkKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBS
ZW5kZXJCdXR0b246OnRha2VDaGlsZChSZW5kZXJPYmplY3QmIG9sZENoaWxkKQogewogICAgIC8v
IG1faW5uZXIgc2hvdWxkIGJlIHRoZSBvbmx5IGNoaWxkLCBidXQgY2hlY2tpbmcgZm9yIGRpcmVj
dCBjaGlsZHJlbiB3aG8KICAgICAvLyBhcmUgbm90IG1faW5uZXIgcHJldmVudHMgc2VjdXJpdHkg
cHJvYmxlbXMgd2hlbiB0aGF0IGFzc3VtcHRpb24gaXMKICAgICAvLyB2aW9sYXRlZC4KICAgICBp
ZiAoJm9sZENoaWxkID09IG1faW5uZXIgfHwgIW1faW5uZXIgfHwgb2xkQ2hpbGQucGFyZW50KCkg
PT0gdGhpcykgewogICAgICAgICBBU1NFUlQoJm9sZENoaWxkID09IG1faW5uZXIgfHwgIW1faW5u
ZXIpOwotICAgICAgICBSZW5kZXJGbGV4aWJsZUJveDo6cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwog
ICAgICAgICBtX2lubmVyID0gbnVsbHB0cjsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9pbm5lci0+
cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOworICAgICAgICByZXR1cm4gUmVuZGVyRmxleGlibGVCb3g6
OnRha2VDaGlsZChvbGRDaGlsZCk7CisgICAgfQorICAgIHJldHVybiBtX2lubmVyLT50YWtlQ2hp
bGQob2xkQ2hpbGQpOwogfQogICAgIAogdm9pZCBSZW5kZXJCdXR0b246OnVwZGF0ZUFub255bW91
c0NoaWxkU3R5bGUoY29uc3QgUmVuZGVyT2JqZWN0JiBjaGlsZCwgUmVuZGVyU3R5bGUmIGNoaWxk
U3R5bGUpIGNvbnN0CkBAIC0xMjgsOCArMTI5LDkgQEAgdm9pZCBSZW5kZXJCdXR0b246OnNldFRl
eHQoY29uc3QgU3RyaW5nJgogICAgICAgICBpZiAobV9idXR0b25UZXh0KQogICAgICAgICAgICAg
bV9idXR0b25UZXh0LT5zZXRUZXh0KHN0ci5pbXBsKCkpOwogICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIG1fYnV0dG9uVGV4dCA9IG5ldyBSZW5kZXJUZXh0RnJhZ21lbnQoZG9jdW1lbnQoKSwg
c3RyKTsKLSAgICAgICAgICAgIGFkZENoaWxkKG1fYnV0dG9uVGV4dCk7CisgICAgICAgICAgICBh
dXRvIG5ld0J1dHRvblRleHQgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KGRv
Y3VtZW50KCksIHN0cik7CisgICAgICAgICAgICBtX2J1dHRvblRleHQgPSBuZXdCdXR0b25UZXh0
LmdldCgpOworICAgICAgICAgICAgYWRkQ2hpbGQoV1RGTW92ZShuZXdCdXR0b25UZXh0KSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QnV0dG9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJ1
dHRvbi5oCShyZXZpc2lvbiAyMjI2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQnV0dG9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAgcHVibGljOgogCiAg
ICAgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQg
YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0ICpiZWZvcmVDaGls
ZCA9IDApIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Jikgb3Zl
cnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGls
ZCwgUmVuZGVyT2JqZWN0ICpiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOworICAgIFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKICAgICB2
b2lkIHJlbW92ZUxlZnRvdmVyQW5vbnltb3VzQmxvY2soUmVuZGVyQmxvY2sqKSBvdmVycmlkZSB7
IH0KICAgICBib29sIGNyZWF0ZXNBbm9ueW1vdXNXcmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAyMjI2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1NSwyMyArNDU1LDI2IEBAIGJv
b2wgUmVuZGVyRWxlbWVudDo6Y2hpbGRSZXF1aXJlc1RhYmxlKGMKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgUmVuZGVyRWxlbWVudDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyRWxlbWVudDo6YWRkQ2hp
bGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpCiB7Ci0gICAgaWYgKGNoaWxkUmVxdWlyZXNUYWJsZSgqbmV3Q2hpbGQpKSB7CisgICAg
YXV0byYgY2hpbGQgPSAqbmV3Q2hpbGQ7CisgICAgaWYgKGNoaWxkUmVxdWlyZXNUYWJsZShjaGls
ZCkpIHsKICAgICAgICAgUmVuZGVyVGFibGUqIHRhYmxlOwogICAgICAgICBSZW5kZXJPYmplY3Qq
IGFmdGVyQ2hpbGQgPSBiZWZvcmVDaGlsZCA/IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmco
KSA6IG1fbGFzdENoaWxkOwogICAgICAgICBpZiAoYWZ0ZXJDaGlsZCAmJiBhZnRlckNoaWxkLT5p
c0Fub255bW91cygpICYmIGlzPFJlbmRlclRhYmxlPigqYWZ0ZXJDaGlsZCkgJiYgIWFmdGVyQ2hp
bGQtPmlzQmVmb3JlQ29udGVudCgpKQogICAgICAgICAgICAgdGFibGUgPSBkb3duY2FzdDxSZW5k
ZXJUYWJsZT4oYWZ0ZXJDaGlsZCk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgdGFibGUg
PSBSZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKCp0aGlzKS5y
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBhZGRDaGlsZCh0YWJsZSwgYmVmb3JlQ2hpbGQpOworICAg
ICAgICAgICAgYXV0byBuZXdUYWJsZSA9ICBSZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3VzV2l0
aFBhcmVudFJlbmRlcmVyKCp0aGlzKTsKKyAgICAgICAgICAgIHRhYmxlID0gbmV3VGFibGUuZ2V0
KCk7CisgICAgICAgICAgICBhZGRDaGlsZChXVEZNb3ZlKG5ld1RhYmxlKSwgYmVmb3JlQ2hpbGQp
OwogICAgICAgICB9Ci0gICAgICAgIHRhYmxlLT5hZGRDaGlsZChuZXdDaGlsZCk7CisKKyAgICAg
ICAgdGFibGUtPmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgaW5zZXJ0Q2hpbGRJbnRlcm5hbChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQsIE5vdGlmeUNoaWxk
cmVuKTsKKyAgICAgICAgaW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKG5ld0NoaWxkKSwgYmVm
b3JlQ2hpbGQsIE5vdGlmeUNoaWxkcmVuKTsKIAotICAgIGlmIChpczxSZW5kZXJUZXh0PigqbmV3
Q2hpbGQpKQotICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PigqbmV3Q2hpbGQpLnN0eWxlRGlk
Q2hhbmdlKFN0eWxlRGlmZmVyZW5jZUVxdWFsLCBudWxscHRyKTsKKyAgICBpZiAoaXM8UmVuZGVy
VGV4dD4oY2hpbGQpKQorICAgICAgICBkb3duY2FzdDxSZW5kZXJUZXh0PihjaGlsZCkuc3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlRXF1YWwsIG51bGxwdHIpOwogCiAgICAgLy8gU1ZHIGNy
ZWF0ZXMgcmVuZGVyZXJzIGZvciA8ZyBkaXNwbGF5PSJub25lIj4sIGFzIFNWRyByZXF1aXJlcyBj
aGlsZHJlbiBvZiBoaWRkZW4KICAgICAvLyA8Zz5zIHRvIGhhdmUgcmVuZGVyZXJzIC0gYXQgbGVh
c3QgdGhhdCdzIGhvdyBvdXIgaW1wbGVtZW50YXRpb24gd29ya3MuIENvbnNpZGVyOgpAQCAtNDgx
LDIyICs0ODQsMzAgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjphZGRDaGlsZChSZW5kZXJPYmplYwog
ICAgIC8vICAga25vdyB0aGF0IGl0J3MgaW5zaWRlIGEgImhpZGRlbiBTVkcgc3VidHJlZSIsIGFu
ZCB0aHVzIHBhaW50cywgZXZlbiBpZiBpdCBzaG91bGRuJ3QuCiAgICAgLy8gVG8gYXZvaWQgdGhl
IHByb2JsZW0gYWxsdG9nZXRoZXIsIGRldGVjdCBlYXJseSBpZiB3ZSdyZSBpbnNpZGUgYSBoaWRk
ZW4gU1ZHIHN1YnRyZWUKICAgICAvLyBhbmQgc3RvcCBjcmVhdGluZyBsYXllcnMgYXQgYWxsIGZv
ciB0aGVzZSBjYXNlcyAtIHRoZXkncmUgbm90IHVzZWQgYW55d2F5cy4KLSAgICBpZiAobmV3Q2hp
bGQtPmhhc0xheWVyKCkgJiYgIWxheWVyQ3JlYXRpb25BbGxvd2VkRm9yU3VidHJlZSgpKQotICAg
ICAgICBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PigqbmV3Q2hpbGQpLmxheWVyKCkt
PnJlbW92ZU9ubHlUaGlzTGF5ZXIoKTsKKyAgICBpZiAoY2hpbGQuaGFzTGF5ZXIoKSAmJiAhbGF5
ZXJDcmVhdGlvbkFsbG93ZWRGb3JTdWJ0cmVlKCkpCisgICAgICAgIGRvd25jYXN0PFJlbmRlckxh
eWVyTW9kZWxPYmplY3Q+KGNoaWxkKS5sYXllcigpLT5yZW1vdmVPbmx5VGhpc0xheWVyKCk7CisK
KyAgICBTVkdSZW5kZXJTdXBwb3J0OjpjaGlsZEFkZGVkKCp0aGlzLCBjaGlsZCk7Cit9CiAKLSAg
ICBTVkdSZW5kZXJTdXBwb3J0OjpjaGlsZEFkZGVkKCp0aGlzLCAqbmV3Q2hpbGQpOworUmVuZGVy
UHRyPFJlbmRlck9iamVjdD4gUmVuZGVyRWxlbWVudDo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYg
b2xkQ2hpbGQpCit7CisgICAgcmV0dXJuIHRha2VDaGlsZEludGVybmFsKG9sZENoaWxkLCBOb3Rp
ZnlDaGlsZHJlbik7CiB9CiAKLXZvaWQgUmVuZGVyRWxlbWVudDo6cmVtb3ZlQ2hpbGQoUmVuZGVy
T2JqZWN0JiBvbGRDaGlsZCkKK3ZvaWQgUmVuZGVyRWxlbWVudDo6cmVtb3ZlQW5kRGVzdHJveUNo
aWxkKFJlbmRlck9iamVjdCYgb2xkQ2hpbGQpCiB7Ci0gICAgcmVtb3ZlQ2hpbGRJbnRlcm5hbChv
bGRDaGlsZCwgTm90aWZ5Q2hpbGRyZW4pOworICAgIGF1dG8gdG9EZXN0cm95ID0gdGFrZUNoaWxk
KG9sZENoaWxkKTsKIH0KIAogdm9pZCBSZW5kZXJFbGVtZW50OjpkZXN0cm95TGVmdG92ZXJDaGls
ZHJlbigpCiB7CiAgICAgd2hpbGUgKG1fZmlyc3RDaGlsZCkgewogICAgICAgICBpZiAobV9maXJz
dENoaWxkLT5zdHlsZSgpLnN0eWxlVHlwZSgpID09IEZJUlNUX0xFVFRFUiAmJiAhbV9maXJzdENo
aWxkLT5pc1RleHQoKSkgewotICAgICAgICAgICAgbV9maXJzdENoaWxkLT5yZW1vdmVGcm9tUGFy
ZW50KCk7IC8vIDpmaXJzdC1sZXR0ZXIgZnJhZ21lbnQgcmVuZGVyZXJzIGFyZSBkZXN0cm95ZWQg
YnkgdGhlaXIgcmVtYWluaW5nIHRleHQgZnJhZ21lbnQuCisgICAgICAgICAgICAvLyBGSVhNRTog
TWVtb3J5IG1hbmFnZW1lbnQuCisgICAgICAgICAgICBhdXRvIGZpcnN0TGV0dGVyID0gdGFrZUNo
aWxkKCptX2ZpcnN0Q2hpbGQpOyAvLyA6Zmlyc3QtbGV0dGVyIGZyYWdtZW50IHJlbmRlcmVycyBh
cmUgZGVzdHJveWVkIGJ5IHRoZWlyIHJlbWFpbmluZyB0ZXh0IGZyYWdtZW50LgorICAgICAgICAg
ICAgYXV0byogbGVha2VkUHRyID0gZmlyc3RMZXR0ZXIubGVha1B0cigpOworICAgICAgICAgICAg
VU5VU0VEX1BBUkFNKGxlYWtlZFB0cik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBEZXN0cm95IGFueSBhbm9ueW1vdXMgY2hpbGRyZW4gcmVtYWluaW5nIGluIHRoZSByZW5kZXIg
dHJlZSwgYXMgd2VsbCBhcyBpbXBsaWNpdCAoc2hhZG93KSBET00gZWxlbWVudHMgbGlrZSB0aG9z
ZSB1c2VkIGluIHRoZSBlbmdpbmUtYmFzZWQgdGV4dCBmaWVsZHMuCiAgICAgICAgICAgICBpZiAo
bV9maXJzdENoaWxkLT5ub2RlKCkpCkBAIC01MDYsMjQgKzUxNywyMSBAQCB2b2lkIFJlbmRlckVs
ZW1lbnQ6OmRlc3Ryb3lMZWZ0b3ZlckNoaWxkCiAgICAgfQogfQogCi12b2lkIFJlbmRlckVsZW1l
bnQ6Omluc2VydENoaWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCwgTm90aWZ5Q2hpbGRyZW5UeXBlIG5vdGlmeUNoaWxkcmVuKQordm9p
ZCBSZW5kZXJFbGVtZW50OjppbnNlcnRDaGlsZEludGVybmFsKFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IG5ld0NoaWxkUHRyLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBOb3RpZnlDaGlsZHJl
blR5cGUgbm90aWZ5Q2hpbGRyZW4pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdF
KCF2aWV3KCkubGF5b3V0U3RhdGUoKSwgIkxheW91dCBtdXN0IG5vdCBtdXRhdGUgcmVuZGVyIHRy
ZWUiKTsKIAogICAgIEFTU0VSVChjYW5IYXZlQ2hpbGRyZW4oKSB8fCBjYW5IYXZlR2VuZXJhdGVk
Q2hpbGRyZW4oKSk7Ci0gICAgQVNTRVJUKCFuZXdDaGlsZC0+cGFyZW50KCkpOwotICAgIEFTU0VS
VCghaXNSZW5kZXJCbG9ja0Zsb3coKSB8fCAoIW5ld0NoaWxkLT5pc1RhYmxlU2VjdGlvbigpICYm
ICFuZXdDaGlsZC0+aXNUYWJsZVJvdygpICYmICFuZXdDaGlsZC0+aXNUYWJsZUNlbGwoKSkpOwor
ICAgIEFTU0VSVCghbmV3Q2hpbGRQdHItPnBhcmVudCgpKTsKKyAgICBBU1NFUlQoIWlzUmVuZGVy
QmxvY2tGbG93KCkgfHwgKCFuZXdDaGlsZFB0ci0+aXNUYWJsZVNlY3Rpb24oKSAmJiAhbmV3Q2hp
bGRQdHItPmlzVGFibGVSb3coKSAmJiAhbmV3Q2hpbGRQdHItPmlzVGFibGVDZWxsKCkpKTsKIAog
ICAgIHdoaWxlIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+cGFyZW50KCkgJiYgYmVmb3Jl
Q2hpbGQtPnBhcmVudCgpICE9IHRoaXMpCiAgICAgICAgIGJlZm9yZUNoaWxkID0gYmVmb3JlQ2hp
bGQtPnBhcmVudCgpOwogCi0gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgaWYg
aXQgZG9lcyBwcmV2ZW50IHJlbmRlciB0cmVlIGNvcnJ1cHRpb24KLSAgICAvLyB3aGVyZSBjaGls
ZC0+cGFyZW50KCkgZW5kcyB1cCBiZWluZyBvd25lciBidXQgY2hpbGQtPm5leHRTaWJsaW5nKCkt
PnBhcmVudCgpCi0gICAgLy8gaXMgbm90IG93bmVyLgotICAgIGlmIChiZWZvcmVDaGlsZCAmJiBi
ZWZvcmVDaGlsZC0+cGFyZW50KCkgIT0gdGhpcykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQoIWJlZm9yZUNoaWxkIHx8
IGJlZm9yZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKTsKKworICAgIC8vIFRha2UgdGhlIG93bmVy
c2hpcC4KKyAgICBhdXRvKiBuZXdDaGlsZCA9IG5ld0NoaWxkUHRyLmxlYWtQdHIoKTsKIAogICAg
IG5ld0NoaWxkLT5zZXRQYXJlbnQodGhpcyk7CiAKQEAgLTU2NSw3ICs1NzMsNyBAQCB2b2lkIFJl
bmRlckVsZW1lbnQ6Omluc2VydENoaWxkSW50ZXJuYWwoCiAgICAgICAgIG5ld0NoaWxkLT5zZXRI
YXNPdXRsaW5lQXV0b0FuY2VzdG9yKCk7CiB9CiAKLXZvaWQgUmVuZGVyRWxlbWVudDo6cmVtb3Zl
Q2hpbGRJbnRlcm5hbChSZW5kZXJPYmplY3QmIG9sZENoaWxkLCBOb3RpZnlDaGlsZHJlblR5cGUg
bm90aWZ5Q2hpbGRyZW4pCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJFbGVtZW50Ojp0
YWtlQ2hpbGRJbnRlcm5hbChSZW5kZXJPYmplY3QmIG9sZENoaWxkLCBOb3RpZnlDaGlsZHJlblR5
cGUgbm90aWZ5Q2hpbGRyZW4pCiB7CiAgICAgUkVMRUFTRV9BU1NFUlRfV0lUSF9NRVNTQUdFKCF2
aWV3KCkubGF5b3V0U3RhdGUoKSwgIkxheW91dCBtdXN0IG5vdCBtdXRhdGUgcmVuZGVyIHRyZWUi
KTsKIApAQCAtNjM4LDYgKzY0Niw4IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6cmVtb3ZlQ2hpbGRJ
bnRlcm5hbCgKICAgICBpZiAoaXM8UmVuZGVyTGlzdE1hcmtlcj4ob2xkQ2hpbGQpKQogICAgICAg
ICBBU1NFUlQobV9yZXBhcmVudGluZ0NoaWxkIHx8ICFkb3duY2FzdDxSZW5kZXJMaXN0TWFya2Vy
PihvbGRDaGlsZCkubGlzdEl0ZW0oKS5pbkxheW91dCgpKTsKICNlbmRpZgorCisgICAgcmV0dXJu
IFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+KCZvbGRDaGlsZCk7CiB9CiAKIFJlbmRlckJsb2NrKiBS
ZW5kZXJFbGVtZW50Ojpjb250YWluaW5nQmxvY2tGb3JGaXhlZFBvc2l0aW9uKCkgY29uc3QKQEAg
LTkzNywxMCArOTQ3LDExIEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6aGFuZGxlRHluYW1pY0Zsb2F0
UG8KICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PigqcGFyZW50KCkp
LmNoaWxkQmVjYW1lTm9uSW5saW5lKCp0aGlzKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAvLyBBbiBhbm9ueW1vdXMgYmxvY2sgbXVzdCBiZSBtYWRlIHRvIHdyYXAgdGhpcyBpbmxpbmUu
Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogYmxvY2sgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4o
KnBhcmVudCgpKS5jcmVhdGVBbm9ueW1vdXNCbG9jaygpOwotICAgICAgICAgICAgcGFyZW50KCkt
Pmluc2VydENoaWxkSW50ZXJuYWwoYmxvY2ssIHRoaXMsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNo
aWxkcmVuKTsKLSAgICAgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZEludGVybmFsKCp0aGlz
LCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7Ci0gICAgICAgICAgICBibG9jay0+aW5z
ZXJ0Q2hpbGRJbnRlcm5hbCh0aGlzLCBudWxscHRyLCBSZW5kZXJFbGVtZW50OjpOb3RpZnlDaGls
ZHJlbik7CisgICAgICAgICAgICBhdXRvIG5ld0Jsb2NrID0gZG93bmNhc3Q8UmVuZGVyQmxvY2s+
KCpwYXJlbnQoKSkuY3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAgICAgICAgICAgIGF1dG8mIGJs
b2NrID0gKm5ld0Jsb2NrOworICAgICAgICAgICAgcGFyZW50KCktPmluc2VydENoaWxkSW50ZXJu
YWwoV1RGTW92ZShuZXdCbG9jayksIHRoaXMsIFJlbmRlckVsZW1lbnQ6Ok5vdGlmeUNoaWxkcmVu
KTsKKyAgICAgICAgICAgIGF1dG8gdGhpc1RvTW92ZSA9IHBhcmVudCgpLT50YWtlQ2hpbGRJbnRl
cm5hbCgqdGhpcywgUmVuZGVyRWxlbWVudDo6Tm90aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAg
YmxvY2suaW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKHRoaXNUb01vdmUpLCBudWxscHRyLCBS
ZW5kZXJFbGVtZW50OjpOb3RpZnlDaGlsZHJlbik7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHJldmlzaW9uIDIyMjY3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDkgKzg1LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzUmVuZGVySW5saW5l
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAg
dmlydHVhbCB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJl
Zm9yZUNoaWxkID0gbnVsbHB0cikgeyByZXR1cm4gYWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNo
aWxkKTsgfQotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4sIFJlbmRlck9i
amVjdCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkQ2hpbGRJ
Z25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IG51bGxwdHIpIHsgYWRkQ2hpbGQoV1RGTW92ZShuZXdD
aGlsZCksIGJlZm9yZUNoaWxkKTsgfQorICAgIHZpcnR1YWwgUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIFdBUk5fVU5VU0VEX1JFVFVSTjsKKyAgICB2b2lk
IHJlbW92ZUFuZERlc3Ryb3lDaGlsZChSZW5kZXJPYmplY3QmKTsKIAogICAgIC8vIFRoZSBmb2xs
b3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gdGhlIHJlbmRlciB0cmVlIGhpZXJhcmNoeSBj
aGFuZ2VzIHRvIG1ha2Ugc3VyZSBsYXllcnMgZ2V0CiAgICAgLy8gcHJvcGVybHkgYWRkZWQgYW5k
IHJlbW92ZWQuIFNpbmNlIGNvbnRhaW5lcnNoaXAgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGFueSBz
dWJjbGFzcywgYW5kIHNpbmNlIGEgaGllcmFyY2h5CkBAIC05OCw4ICs5OSw4IEBAIHB1YmxpYzoK
ICAgICBSZW5kZXJMYXllciogZmluZE5leHRMYXllcihSZW5kZXJMYXllciogcGFyZW50TGF5ZXIs
IFJlbmRlck9iamVjdCogc3RhcnRQb2ludCwgYm9vbCBjaGVja1BhcmVudCA9IHRydWUpOwogCiAg
ICAgZW51bSBOb3RpZnlDaGlsZHJlblR5cGUgeyBOb3RpZnlDaGlsZHJlbiwgRG9udE5vdGlmeUNo
aWxkcmVuIH07Ci0gICAgdm9pZCBpbnNlcnRDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCosIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIE5vdGlmeUNoaWxkcmVuVHlwZSk7Ci0gICAgdm9pZCBy
ZW1vdmVDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCYsIE5vdGlmeUNoaWxkcmVuVHlwZSk7Cisg
ICAgdm9pZCBpbnNlcnRDaGlsZEludGVybmFsKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+LCBSZW5k
ZXJPYmplY3QqIGJlZm9yZUNoaWxkLCBOb3RpZnlDaGlsZHJlblR5cGUpOworICAgIFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZEludGVybmFsKFJlbmRlck9iamVjdCYsIE5vdGlmeUNo
aWxkcmVuVHlwZSkgV0FSTl9VTlVTRURfUkVUVVJOOwogCiAgICAgdmlydHVhbCBSZW5kZXJFbGVt
ZW50KiBob3ZlckFuY2VzdG9yKCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5jcHAJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsNyArNjQsNiBAQCBSZW5kZXJGdWxsU2NyZWVuOjpSZW5kZXJGdWxsU2NyZWVuKERvY3Vt
CiB2b2lkIFJlbmRlckZ1bGxTY3JlZW46OndpbGxCZURlc3Ryb3llZCgpCiB7CiAgICAgaWYgKG1f
cGxhY2Vob2xkZXIpIHsKLSAgICAgICAgcmVtb3ZlRnJvbVBhcmVudCgpOwogICAgICAgICBpZiAo
IW1fcGxhY2Vob2xkZXItPmJlaW5nRGVzdHJveWVkKCkpCiAgICAgICAgICAgICBtX3BsYWNlaG9s
ZGVyLT5kZXN0cm95KCk7CiAgICAgICAgIEFTU0VSVCghbV9wbGFjZWhvbGRlcik7CkBAIC0xMDQs
MzggKzEwMyw1MyBAQCBzdGF0aWMgUmVuZGVyU3R5bGUgY3JlYXRlRnVsbFNjcmVlblN0eWxlCiAg
ICAgcmV0dXJuIGZ1bGxzY3JlZW5TdHlsZTsKIH0KIAotUmVuZGVyRnVsbFNjcmVlbiogUmVuZGVy
RnVsbFNjcmVlbjo6d3JhcFJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqZWN0LCBSZW5kZXJFbGVt
ZW50KiBwYXJlbnQsIERvY3VtZW50JiBkb2N1bWVudCkKK1JlbmRlclB0cjxSZW5kZXJGdWxsU2Ny
ZWVuPiBSZW5kZXJGdWxsU2NyZWVuOjp3cmFwTmV3UmVuZGVyZXIoUmVuZGVyUHRyPFJlbmRlckVs
ZW1lbnQ+IHJlbmRlcmVyLCBSZW5kZXJFbGVtZW50JiBwYXJlbnQsIERvY3VtZW50JiBkb2N1bWVu
dCkKIHsKLSAgICBSZW5kZXJGdWxsU2NyZWVuKiBmdWxsc2NyZWVuUmVuZGVyZXIgPSBuZXcgUmVu
ZGVyRnVsbFNjcmVlbihkb2N1bWVudCwgY3JlYXRlRnVsbFNjcmVlblN0eWxlKCkpOwotICAgIGZ1
bGxzY3JlZW5SZW5kZXJlci0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgaWYgKHBhcmVudCAmJiAh
cGFyZW50LT5pc0NoaWxkQWxsb3dlZCgqZnVsbHNjcmVlblJlbmRlcmVyLCBmdWxsc2NyZWVuUmVu
ZGVyZXItPnN0eWxlKCkpKSB7Ci0gICAgICAgIGZ1bGxzY3JlZW5SZW5kZXJlci0+ZGVzdHJveSgp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKG9iamVjdCkgewotICAgICAgICAv
LyB8b2JqZWN0LT5wYXJlbnQoKXwgY2FuIGJlIG51bGwgaWYgdGhlIG9iamVjdCBpcyBub3QgeWV0
IGF0dGFjaGVkCi0gICAgICAgIC8vIHRvIHxwYXJlbnR8LgotICAgICAgICBpZiAoUmVuZGVyRWxl
bWVudCogcGFyZW50ID0gb2JqZWN0LT5wYXJlbnQoKSkgewotICAgICAgICAgICAgUmVuZGVyQmxv
Y2sqIGNvbnRhaW5pbmdCbG9jayA9IG9iamVjdC0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrKTsKLSAgICAgICAgICAgIC8vIFNpbmNlIHdlIGFy
ZSBtb3ZpbmcgdGhlIHxvYmplY3R8IHRvIGEgbmV3IHBhcmVudCB8ZnVsbHNjcmVlblJlbmRlcmVy
fCwKLSAgICAgICAgICAgIC8vIHRoZSBsaW5lIGJveCB0cmVlIHVuZGVybmVhdGggb3VyIHxjb250
YWluaW5nQmxvY2t8IGlzIG5vdCBsb25nZXIgdmFsaWQuCi0gICAgICAgICAgICBjb250YWluaW5n
QmxvY2stPmRlbGV0ZUxpbmVzKCk7Ci0KLSAgICAgICAgICAgIHBhcmVudC0+YWRkQ2hpbGQoZnVs
bHNjcmVlblJlbmRlcmVyLCBvYmplY3QpOwotICAgICAgICAgICAgb2JqZWN0LT5yZW1vdmVGcm9t
UGFyZW50KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEFsd2F5cyBqdXN0IGRvIGEg
ZnVsbCBsYXlvdXQgdG8gZW5zdXJlIHRoYXQgbGluZSBib3hlcyBnZXQgZGVsZXRlZCBwcm9wZXJs
eS4KLSAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2JqZWN0cyBtb3ZlZCBmcm9tIHxwYXJlbnR8IHRv
IHxmdWxsc2NyZWVuUmVuZGVyZXJ8LCB3ZSB3YW50IHRvCi0gICAgICAgICAgICAvLyBtYWtlIG5l
dyBsaW5lIGJveGVzIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgb2xkIG9uZXMgYXJvdW5kLgotICAg
ICAgICAgICAgcGFyZW50LT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKLSAg
ICAgICAgICAgIGNvbnRhaW5pbmdCbG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVj
YWxjKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZnVsbHNjcmVlblJlbmRlcmVyLT5hZGRDaGlsZChv
YmplY3QpOwotICAgICAgICBmdWxsc2NyZWVuUmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kUHJl
ZldpZHRoc1JlY2FsYygpOwotICAgIH0KLSAgICBkb2N1bWVudC5zZXRGdWxsU2NyZWVuUmVuZGVy
ZXIoZnVsbHNjcmVlblJlbmRlcmVyKTsKLSAgICByZXR1cm4gZnVsbHNjcmVlblJlbmRlcmVyOwor
ICAgIGF1dG8gbmV3RnVsbHNjcmVlblJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyRnVs
bFNjcmVlbj4oZG9jdW1lbnQsIGNyZWF0ZUZ1bGxTY3JlZW5TdHlsZSgpKTsKKyAgICBuZXdGdWxs
c2NyZWVuUmVuZGVyZXItPmluaXRpYWxpemVTdHlsZSgpOworCisgICAgYXV0byYgZnVsbHNjcmVl
blJlbmRlcmVyID0gKm5ld0Z1bGxzY3JlZW5SZW5kZXJlcjsKKyAgICBpZiAoIXBhcmVudC5pc0No
aWxkQWxsb3dlZChmdWxsc2NyZWVuUmVuZGVyZXIsIGZ1bGxzY3JlZW5SZW5kZXJlci5zdHlsZSgp
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBmdWxsc2NyZWVuUmVuZGVyZXIuYWRk
Q2hpbGQoV1RGTW92ZShyZW5kZXJlcikpOworICAgIGZ1bGxzY3JlZW5SZW5kZXJlci5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKworICAgIGRvY3VtZW50LnNldEZ1bGxTY3Jl
ZW5SZW5kZXJlcigmZnVsbHNjcmVlblJlbmRlcmVyKTsKKworICAgIHJldHVybiBuZXdGdWxsc2Ny
ZWVuUmVuZGVyZXI7Cit9CisKK3ZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6d3JhcEV4aXN0aW5nUmVu
ZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIERvY3VtZW50JiBkb2N1bWVudCkKK3sKKyAg
ICBhdXRvIG5ld0Z1bGxzY3JlZW5SZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckZ1bGxT
Y3JlZW4+KGRvY3VtZW50LCBjcmVhdGVGdWxsU2NyZWVuU3R5bGUoKSk7CisgICAgbmV3RnVsbHNj
cmVlblJlbmRlcmVyLT5pbml0aWFsaXplU3R5bGUoKTsKKworICAgIGF1dG8mIGZ1bGxzY3JlZW5S
ZW5kZXJlciA9ICpuZXdGdWxsc2NyZWVuUmVuZGVyZXI7CisgICAgYXV0byYgcGFyZW50ID0gKnJl
bmRlcmVyLnBhcmVudCgpOworICAgIGlmICghcGFyZW50LmlzQ2hpbGRBbGxvd2VkKGZ1bGxzY3Jl
ZW5SZW5kZXJlciwgZnVsbHNjcmVlblJlbmRlcmVyLnN0eWxlKCkpKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmlu
Z0Jsb2NrKCk7CisgICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9jayk7CisgICAgLy8gU2luY2Ugd2Ug
YXJlIG1vdmluZyB0aGUgfG9iamVjdHwgdG8gYSBuZXcgcGFyZW50IHxmdWxsc2NyZWVuUmVuZGVy
ZXJ8LAorICAgIC8vIHRoZSBsaW5lIGJveCB0cmVlIHVuZGVybmVhdGggb3VyIHxjb250YWluaW5n
QmxvY2t8IGlzIG5vdCBsb25nZXIgdmFsaWQuCisgICAgY29udGFpbmluZ0Jsb2NrLT5kZWxldGVM
aW5lcygpOworCisgICAgcGFyZW50LmFkZENoaWxkKFdURk1vdmUobmV3RnVsbHNjcmVlblJlbmRl
cmVyKSwgJnJlbmRlcmVyKTsKKworICAgIGF1dG8gdG9Nb3ZlID0gcGFyZW50LnRha2VDaGlsZChy
ZW5kZXJlcik7CisKKyAgICAvLyBBbHdheXMganVzdCBkbyBhIGZ1bGwgbGF5b3V0IHRvIGVuc3Vy
ZSB0aGF0IGxpbmUgYm94ZXMgZ2V0IGRlbGV0ZWQgcHJvcGVybHkuCisgICAgLy8gQmVjYXVzZSBv
YmplY3RzIG1vdmVkIGZyb20gfHBhcmVudHwgdG8gfGZ1bGxzY3JlZW5SZW5kZXJlcnwsIHdlIHdh
bnQgdG8KKyAgICAvLyBtYWtlIG5ldyBsaW5lIGJveGVzIGluc3RlYWQgb2YgbGVhdmluZyB0aGUg
b2xkIG9uZXMgYXJvdW5kLgorICAgIHBhcmVudC5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNS
ZWNhbGMoKTsKKyAgICBjb250YWluaW5nQmxvY2stPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRo
c1JlY2FsYygpOworCisgICAgZnVsbHNjcmVlblJlbmRlcmVyLmFkZENoaWxkKFdURk1vdmUodG9N
b3ZlKSk7CisgICAgZnVsbHNjcmVlblJlbmRlcmVyLnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRo
c1JlY2FsYygpOworCisgICAgZG9jdW1lbnQuc2V0RnVsbFNjcmVlblJlbmRlcmVyKCZmdWxsc2Ny
ZWVuUmVuZGVyZXIpOwogfQogCiB2b2lkIFJlbmRlckZ1bGxTY3JlZW46OnVud3JhcFJlbmRlcmVy
KGJvb2wmIHJlcXVpcmVzUmVuZGVyVHJlZVJlYnVpbGQpCkBAIC0xNTksOCArMTczLDcgQEAgdm9p
ZCBSZW5kZXJGdWxsU2NyZWVuOjp1bndyYXBSZW5kZXJlcihibwogICAgICAgICAgICAgICAgIGlm
IChhdXRvKiBub25Bbm9ueW1vdXNDaGlsZCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY2hpbGQp
LmZpcnN0Q2hpbGQoKSkKICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBub25Bbm9ueW1vdXND
aGlsZDsKICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQt
PnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGQtPmRlc3Ryb3ko
KTsKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQtPnJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95
KCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KQEAgLTE2OSwxNSArMTgyLDE4IEBAIHZvaWQgUmVuZGVyRnVsbFNjcmVlbjo6
dW53cmFwUmVuZGVyZXIoYm8KICAgICAgICAgICAgIC8vIGx5aW5nIGFyb3VuZCBvbiB0aGUgY2hp
bGQuCiAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyQm94PigqY2hpbGQpKQogICAgICAgICAgICAg
ICAgIGRvd25jYXN0PFJlbmRlckJveD4oKmNoaWxkKS5jbGVhck92ZXJyaWRlU2l6ZSgpOwotICAg
ICAgICAgICAgY2hpbGQtPnJlbW92ZUZyb21QYXJlbnQoKTsKLSAgICAgICAgICAgIHBhcmVudCgp
LT5hZGRDaGlsZChjaGlsZCwgdGhpcyk7CisgICAgICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0g
Y2hpbGQtPnBhcmVudCgpLT50YWtlQ2hpbGQoKmNoaWxkKTsKKyAgICAgICAgICAgIHBhcmVudCgp
LT5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgdGhpcyk7CiAgICAgICAgICAgICBwYXJl
bnQoKS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgaWYgKHBsYWNlaG9sZGVyKCkpCi0gICAgICAgIHBsYWNlaG9sZGVyKCktPnJlbW92
ZUZyb21QYXJlbnQoKTsKLSAgICByZW1vdmVGcm9tUGFyZW50KCk7Ci0gICAgZG9jdW1lbnQoKS5z
ZXRGdWxsU2NyZWVuUmVuZGVyZXIoMCk7CisgICAgICAgIHBsYWNlaG9sZGVyKCktPnJlbW92ZUZy
b21QYXJlbnRBbmREZXN0cm95KCk7CisgICAgQVNTRVJUKCFwbGFjZWhvbGRlcigpKTsKKworICAg
IHJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7CisgICAgCisgICAgQVNTRVJUKCFkb2N1bWVu
dCgpLmZ1bGxTY3JlZW5SZW5kZXJlcigpKTsKIH0KIAogdm9pZCBSZW5kZXJGdWxsU2NyZWVuOjpz
ZXRQbGFjZWhvbGRlcihSZW5kZXJCbG9jayogcGxhY2Vob2xkZXIpCkBAIC0xOTcsMTIgKzIxMywx
NiBAQCB2b2lkIFJlbmRlckZ1bGxTY3JlZW46OmNyZWF0ZVBsYWNlaG9sZGVyCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX3BsYWNlaG9sZGVyID0gbmV3IFJlbmRlckZ1bGxTY3JlZW5Q
bGFjZWhvbGRlcigqdGhpcywgV1RGTW92ZSgqc3R5bGUpKTsKLSAgICBtX3BsYWNlaG9sZGVyLT5p
bml0aWFsaXplU3R5bGUoKTsKLSAgICBpZiAocGFyZW50KCkpIHsKLSAgICAgICAgcGFyZW50KCkt
PmFkZENoaWxkKG1fcGxhY2Vob2xkZXIsIHRoaXMpOwotICAgICAgICBwYXJlbnQoKS0+c2V0TmVl
ZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7Ci0gICAgfQorICAgIGlmICghcGFyZW50KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbmV3UGxhY2Vob2xkZXIgPSBjcmVhdGVSZW5k
ZXJlcjxSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xkZXI+KCp0aGlzLCBXVEZNb3ZlKCpzdHlsZSkp
OworICAgIG5ld1BsYWNlaG9sZGVyLT5pbml0aWFsaXplU3R5bGUoKTsKKworICAgIG1fcGxhY2Vo
b2xkZXIgPSBuZXdQbGFjZWhvbGRlci5nZXQoKTsKKworICAgIHBhcmVudCgpLT5hZGRDaGlsZChX
VEZNb3ZlKG5ld1BsYWNlaG9sZGVyKSwgdGhpcyk7CisgICAgcGFyZW50KCktPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRnVsbFNjcmVlbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmgJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGdWxsU2NyZWVuLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDggQEAgcHVibGljOgogICAgIFJlbmRlckJsb2NrKiBwbGFjZWhvbGRlcigpIHsg
cmV0dXJuIG1fcGxhY2Vob2xkZXI7IH0KICAgICB2b2lkIGNyZWF0ZVBsYWNlaG9sZGVyKHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4sIGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCk7CiAK
LSAgICBzdGF0aWMgUmVuZGVyRnVsbFNjcmVlbiogd3JhcFJlbmRlcmVyKFJlbmRlck9iamVjdCos
IFJlbmRlckVsZW1lbnQqLCBEb2N1bWVudCYpOworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVy
RnVsbFNjcmVlbj4gd3JhcE5ld1JlbmRlcmVyKFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiwgUmVu
ZGVyRWxlbWVudCYgcGFyZW50LCBEb2N1bWVudCYpOworICAgIHN0YXRpYyB2b2lkIHdyYXBFeGlz
dGluZ1JlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBEb2N1bWVudCYpOwogICAgIHZvaWQgdW53cmFw
UmVuZGVyZXIoYm9vbCYgcmVxdWlyZXNSZW5kZXJUcmVlUmVidWlsZCk7CiAKICAgICBJdGVtUG9z
aXRpb24gc2VsZkFsaWdubWVudE5vcm1hbEJlaGF2aW9yKGNvbnN0IFJlbmRlckJveCogPSBudWxs
cHRyKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJdGVtUG9zaXRpb25DZW50ZXI7IH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAJKHJldmlzaW9uIDIyMjY3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsMTMgKzY2LDE0IEBAIFJlbmRlckdyaWQ6On5SZW5kZXJHcmlkKCkKIHsKIH0KIAot
dm9pZCBSZW5kZXJHcmlkOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJHcmlkOjphZGRDaGlsZChSZW5kZXJQdHI8
UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKLSAg
ICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBhdXRv
JiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAgICBSZW5kZXJCbG9jazo6YWRkQ2hpbGQoV1RGTW92ZShu
ZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKIAogICAgIC8vIFBvc2l0aW9uZWQgZ3JpZCBpdGVtcyBk
byBub3QgdGFrZSB1cCBzcGFjZSBvciBvdGhlcndpc2UgcGFydGljaXBhdGUgaW4gdGhlIGxheW91
dCBvZiB0aGUgZ3JpZCwKICAgICAvLyBmb3IgdGhhdCByZWFzb24gd2UgZG9uJ3QgbmVlZCB0byBt
YXJrIHRoZSBncmlkIGFzIGRpcnR5IHdoZW4gdGhleSBhcmUgYWRkZWQuCi0gICAgaWYgKG5ld0No
aWxkLT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkKKyAgICBpZiAoY2hpbGQuaXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZSBncmlkIG5lZWRzIHRv
IGJlIHJlY29tcHV0ZWQgYXMgaXQgbWlnaHQgY29udGFpbiBhdXRvLXBsYWNlZCBpdGVtcyB0aGF0
CkBAIC04MCwxOCArODEsMTkgQEAgdm9pZCBSZW5kZXJHcmlkOjphZGRDaGlsZChSZW5kZXJPYmpl
Y3QqIAogICAgIGRpcnR5R3JpZCgpOwogfQogCi12b2lkIFJlbmRlckdyaWQ6OnJlbW92ZUNoaWxk
KFJlbmRlck9iamVjdCYgY2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5kZXJHcmlk
Ojp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKLSAgICBSZW5kZXJCbG9jazo6cmVt
b3ZlQ2hpbGQoY2hpbGQpOworICAgIGF1dG8gdGFrZW5DaGlsZCA9IFJlbmRlckJsb2NrOjp0YWtl
Q2hpbGQoY2hpbGQpOwogCiAgICAgLy8gUG9zaXRpb25lZCBncmlkIGl0ZW1zIGRvIG5vdCB0YWtl
IHVwIHNwYWNlIG9yIG90aGVyd2lzZSBwYXJ0aWNpcGF0ZSBpbiB0aGUgbGF5b3V0IG9mIHRoZSBn
cmlkLAogICAgIC8vIGZvciB0aGF0IHJlYXNvbiB3ZSBkb24ndCBuZWVkIHRvIG1hcmsgdGhlIGdy
aWQgYXMgZGlydHkgd2hlbiB0aGV5IGFyZSByZW1vdmVkLgogICAgIGlmIChjaGlsZC5pc091dE9m
Rmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdGFrZW5D
aGlsZDsKIAogICAgIC8vIFRoZSBncmlkIG5lZWRzIHRvIGJlIHJlY29tcHV0ZWQgYXMgaXQgbWln
aHQgY29udGFpbiBhdXRvLXBsYWNlZCBpdGVtcyB0aGF0CiAgICAgLy8gd2lsbCBjaGFuZ2UgdGhl
aXIgcG9zaXRpb24uCiAgICAgZGlydHlHcmlkKCk7CisgICAgcmV0dXJuIHRha2VuQ2hpbGQ7CiB9
CiAKIFN0eWxlU2VsZkFsaWdubWVudERhdGEgUmVuZGVyR3JpZDo6c2VsZkFsaWdubWVudEZvckNo
aWxkKEdyaWRBeGlzIGF4aXMsIGNvbnN0IFJlbmRlckJveCYgY2hpbGQsIGNvbnN0IFJlbmRlclN0
eWxlKiBncmlkU3R5bGUpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyR3JpZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJH
cmlkLmgJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJHcmlkLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDggQEAgcHJpdmF0ZToKICAgICBi
b29sIGlzUmVuZGVyR3JpZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2
b2lkIGNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxX
aWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCkgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBmaW5h
bDsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBS
ZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKSBmaW5hbDsKKyAgICBSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiB0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JikgZmluYWw7CiAKICAgICBTdHlsZVNlbGZBbGln
bm1lbnREYXRhIHNlbGZBbGlnbm1lbnRGb3JDaGlsZChHcmlkQXhpcywgY29uc3QgUmVuZGVyQm94
JiwgY29uc3QgUmVuZGVyU3R5bGUqID0gbnVsbHB0cikgY29uc3Q7CiAgICAgYm9vbCBzZWxmQWxp
Z25tZW50Q2hhbmdlZFRvU3RyZXRjaChHcmlkQXhpcywgY29uc3QgUmVuZGVyU3R5bGUmIG9sZFN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUsIGNvbnN0IFJlbmRlckJveCYpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlz
aW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsMTQgKzI3MCwxNiBAQCBMYXlvdXRSZWN0IFJlbmRlcklu
bGluZTo6bG9jYWxDYXJldFJlY3QoCiAgICAgcmV0dXJuIGNhcmV0UmVjdDsKIH0KIAotdm9pZCBS
ZW5kZXJJbmxpbmU6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJl
bmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAg
YXV0byogYmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyID0gYmVmb3JlQ2hpbGQ7CiAgICAgaWYgKGF1
dG8qIGZyYWdtZW50ZWRGbG93ID0gZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSkKICAgICAgICAg
YmVmb3JlQ2hpbGRPclBsYWNlaG9sZGVyID0gZnJhZ21lbnRlZEZsb3ctPnJlc29sdmVNb3ZlZENo
aWxkKGJlZm9yZUNoaWxkKTsKLSAgICBpZiAoY29udGludWF0aW9uKCkpCi0gICAgICAgIHJldHVy
biBhZGRDaGlsZFRvQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZE9yUGxhY2Vob2xk
ZXIpOwotICAgIHJldHVybiBhZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBi
ZWZvcmVDaGlsZE9yUGxhY2Vob2xkZXIpOworICAgIGlmIChjb250aW51YXRpb24oKSkgeworICAg
ICAgICBhZGRDaGlsZFRvQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGls
ZE9yUGxhY2Vob2xkZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkZENoaWxkSWdu
b3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkT3JQbGFjZWhv
bGRlcik7CiB9CiAKIHN0YXRpYyBSZW5kZXJCb3hNb2RlbE9iamVjdCogbmV4dENvbnRpbnVhdGlv
bihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQpAQCAtMzE4LDcgKzMyMCw3IEBAIHN0YXRpYyBib29s
IG5ld0NoaWxkSXNJbmxpbmUoY29uc3QgUmVuZGUKICAgICByZXR1cm4gbmV3Q2hpbGQuaXNJbmxp
bmUoKSB8IChwYXJlbnQuY2hpbGRSZXF1aXJlc1RhYmxlKG5ld0NoaWxkKSAmJiBwYXJlbnQuc3R5
bGUoKS5kaXNwbGF5KCkgPT0gSU5MSU5FKTsKIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6OmFkZENo
aWxkSWdub3JpbmdDb250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZElnbm9yaW5nQ29u
dGludWF0aW9uKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3Qq
IGJlZm9yZUNoaWxkKQogewogICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBhcHBlbmQgdGhpbmdz
IGFmdGVyIDphZnRlci1nZW5lcmF0ZWQgY29udGVudCBpZiB3ZSBoYXZlIGl0LgogICAgIGlmICgh
YmVmb3JlQ2hpbGQgJiYgaXNBZnRlckNvbnRlbnQobGFzdENoaWxkKCkpKQpAQCAtMzM4LDE3ICsz
NDAsMTggQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxkSWdub3JpbmdDb250aQogICAgICAg
ICBpZiAoYXV0byBwb3NpdGlvbmVkQW5jZXN0b3IgPSBpbkZsb3dQb3NpdGlvbmVkSW5saW5lQW5j
ZXN0b3IodGhpcykpCiAgICAgICAgICAgICBuZXdTdHlsZS5zZXRQb3NpdGlvbihwb3NpdGlvbmVk
QW5jZXN0b3ItPnN0eWxlKCkucG9zaXRpb24oKSk7CiAKLSAgICAgICAgUmVuZGVyQmxvY2sqIG5l
d0JveCA9IG5ldyBSZW5kZXJCbG9ja0Zsb3coZG9jdW1lbnQoKSwgV1RGTW92ZShuZXdTdHlsZSkp
OworICAgICAgICBhdXRvIG5ld0JveCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJsb2NrRmxvdz4o
ZG9jdW1lbnQoKSwgV1RGTW92ZShuZXdTdHlsZSkpOwogICAgICAgICBuZXdCb3gtPmluaXRpYWxp
emVTdHlsZSgpOwogICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udGludWF0aW9u
ID0gY29udGludWF0aW9uKCk7Ci0gICAgICAgIHNldENvbnRpbnVhdGlvbihuZXdCb3gpOworICAg
ICAgICBzZXRDb250aW51YXRpb24obmV3Qm94LmdldCgpKTsKIAotICAgICAgICBzcGxpdEZsb3co
YmVmb3JlQ2hpbGQsIG5ld0JveCwgbmV3Q2hpbGQsIG9sZENvbnRpbnVhdGlvbik7CisgICAgICAg
IHNwbGl0RmxvdyhiZWZvcmVDaGlsZCwgV1RGTW92ZShuZXdCb3gpLCBXVEZNb3ZlKG5ld0NoaWxk
KSwgb2xkQ29udGludWF0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKLSAg
ICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisKKyAgICBh
dXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAgICBSZW5kZXJCb3hNb2RlbE9iamVjdDo6YWRkQ2hp
bGQoV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICBjaGlsZC5zZXROZWVkc0xh
eW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAogUmVuZGVyUHRyPFJlbmRlcklubGluZT4g
UmVuZGVySW5saW5lOjpjbG9uZSgpIGNvbnN0CkBAIC00MDcsOCArNDEwLDggQEAgdm9pZCBSZW5k
ZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhSZW5kZXJCbAogICAgICAgICAgICAgLy8gRklYTUU6IFdo
ZW4gdGhlIGFub255bW91cyB3cmFwcGVyIGhhcyBtdWx0aXBsZSBjaGlsZHJlbiwgd2UgZW5kIHVw
IHRyYXZlcnNpbmcgdXAgdG8gdGhlIHRvcG1vc3Qgd3JhcHBlcgogICAgICAgICAgICAgLy8gZXZl
cnkgdGltZSwgd2hpY2ggaXMgYSBiaXQgd2FzdGVmdWwuCiAgICAgICAgIH0KLSAgICAgICAgcmVu
ZGVyZXJUb01vdmUtPnBhcmVudCgpLT5yZW1vdmVDaGlsZEludGVybmFsKCpyZW5kZXJlclRvTW92
ZSwgTm90aWZ5Q2hpbGRyZW4pOwotICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmlu
Z0NvbnRpbnVhdGlvbihyZW5kZXJlclRvTW92ZSk7CisgICAgICAgIGF1dG8gY2hpbGRUb01vdmUg
PSByZW5kZXJlclRvTW92ZS0+cGFyZW50KCktPnRha2VDaGlsZEludGVybmFsKCpyZW5kZXJlclRv
TW92ZSwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25v
cmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSk7CiAgICAgICAgIHJlbmRlcmVy
VG9Nb3ZlLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgcmVu
ZGVyZXJUb01vdmUgPSBuZXh0U2libGluZzsKICAgICB9CkBAIC00MzUsNyArNDM4LDcgQEAgdm9p
ZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhSZW5kZXJCbAogICAgICAgICAgICAgY2xvbmVJ
bmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpjdXJyZW50KS5jbG9uZSgpOwogCiAgICAg
ICAgICAgICAvLyBJbnNlcnQgb3VyIGNoaWxkIGNsb25lIGFzIHRoZSBmaXJzdCBjaGlsZC4KLSAg
ICAgICAgICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKGNsb25l
Q2hpbGQubGVha1B0cigpKTsKKyAgICAgICAgICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9y
aW5nQ29udGludWF0aW9uKFdURk1vdmUoY2xvbmVDaGlsZCkpOwogCiAgICAgICAgICAgICAvLyBI
b29rIHRoZSBjbG9uZSB1cCBhcyBhIGNvbnRpbnVhdGlvbiBvZiB8Y3VycnwuCiAgICAgICAgICAg
ICBSZW5kZXJJbmxpbmUmIGN1cnJlbnRJbmxpbmUgPSBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KCpj
dXJyZW50KTsKQEAgLTQ0Nyw4ICs0NTAsOCBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRJbmxp
bmVzKFJlbmRlckJsCiAgICAgICAgICAgICAvLyAqYWZ0ZXIqIGN1cnJlbnRDaGlsZCBhbmQgYXBw
ZW5kIHRoZW0gYWxsIHRvIHRoZSBjbG9uZS4KICAgICAgICAgICAgIGZvciAoYXV0byogY3VycmVu
dCA9IGN1cnJlbnRDaGlsZC0+bmV4dFNpYmxpbmcoKTsgY3VycmVudDspIHsKICAgICAgICAgICAg
ICAgICBhdXRvKiBuZXh0ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAg
ICBjdXJyZW50SW5saW5lLnJlbW92ZUNoaWxkSW50ZXJuYWwoKmN1cnJlbnQsIE5vdGlmeUNoaWxk
cmVuKTsKLSAgICAgICAgICAgICAgICBjbG9uZUlubGluZS0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRp
bnVhdGlvbihjdXJyZW50KTsKKyAgICAgICAgICAgICAgICBhdXRvIGNoaWxkVG9Nb3ZlID0gY3Vy
cmVudElubGluZS50YWtlQ2hpbGRJbnRlcm5hbCgqY3VycmVudCwgTm90aWZ5Q2hpbGRyZW4pOwor
ICAgICAgICAgICAgICAgIGNsb25lSW5saW5lLT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9u
KFdURk1vdmUoY2hpbGRUb01vdmUpKTsKICAgICAgICAgICAgICAgICBjdXJyZW50LT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAgICAgICBjdXJyZW50ID0g
bmV4dDsKICAgICAgICAgICAgIH0KQEAgLTQ2NSwyNyArNDY4LDI4IEBAIHZvaWQgUmVuZGVySW5s
aW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAgICAgY2xvbmVCbG9ja0NoaWxkLnJlc2V0
RW5jbG9zaW5nRnJhZ21lbnRlZEZsb3dBbmRDaGlsZEluZm9JbmNsdWRpbmdEZXNjZW5kYW50cygp
OwogCiAgICAgLy8gTm93IHdlIGFyZSBhdCB0aGUgYmxvY2sgbGV2ZWwuIFdlIG5lZWQgdG8gcHV0
IHRoZSBjbG9uZSBpbnRvIHRoZSB0b0Jsb2NrLgotICAgIHRvQmxvY2stPmluc2VydENoaWxkSW50
ZXJuYWwoY2xvbmVJbmxpbmUubGVha1B0cigpLCBudWxscHRyLCBOb3RpZnlDaGlsZHJlbik7Cisg
ICAgdG9CbG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNsb25lSW5saW5lKSwgbnVs
bHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwogCiAgICAgLy8gTm93IHRha2UgYWxsIHRoZSBjaGlsZHJl
biBhZnRlciBjdXJyZW50Q2hpbGQgYW5kIHJlbW92ZSB0aGVtIGZyb20gdGhlIGZyb21CbG9jawog
ICAgIC8vIGFuZCBwdXQgdGhlbSBpbiB0aGUgdG9CbG9jay4KICAgICBmb3IgKGF1dG8qIGN1cnJl
bnQgPSBjdXJyZW50Q2hpbGQtPm5leHRTaWJsaW5nKCk7IGN1cnJlbnQ7KSB7CiAgICAgICAgIGF1
dG8qIG5leHQgPSBjdXJyZW50LT5uZXh0U2libGluZygpOwotICAgICAgICBmcm9tQmxvY2stPnJl
bW92ZUNoaWxkSW50ZXJuYWwoKmN1cnJlbnQsIE5vdGlmeUNoaWxkcmVuKTsKLSAgICAgICAgdG9C
bG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChjdXJyZW50LCBudWxscHRyLCBOb3RpZnlDaGlsZHJl
bik7CisgICAgICAgIGF1dG8gY2hpbGRUb01vdmUgPSBmcm9tQmxvY2stPnRha2VDaGlsZEludGVy
bmFsKCpjdXJyZW50LCBOb3RpZnlDaGlsZHJlbik7CisgICAgICAgIHRvQmxvY2stPmluc2VydENo
aWxkSW50ZXJuYWwoV1RGTW92ZShjaGlsZFRvTW92ZSksIG51bGxwdHIsIE5vdGlmeUNoaWxkcmVu
KTsKICAgICAgICAgY3VycmVudCA9IG5leHQ7CiAgICAgfQogfQogCi12b2lkIFJlbmRlcklubGlu
ZTo6c3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdC
bG9ja0JveCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXdD
aGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpCit2b2lkIFJlbmRlcklubGluZTo6
c3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlclB0cjxSZW5kZXJCbG9j
az4gbmV3QmxvY2tCb3gsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJC
b3hNb2RlbE9iamVjdCogb2xkQ29udCkKIHsKKyAgICBhdXRvJiBhZGRlZEJsb2NrQm94ID0gKm5l
d0Jsb2NrQm94OwogICAgIFJlbmRlckJsb2NrKiBwcmUgPSBudWxscHRyOwogICAgIFJlbmRlckJs
b2NrKiBibG9jayA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgIAorCiAgICAgLy8gRGVsZXRlIG91
ciBsaW5lIGJveGVzIGJlZm9yZSB3ZSBkbyB0aGUgaW5saW5lIHNwbGl0IGludG8gY29udGludWF0
aW9ucy4KICAgICBibG9jay0+ZGVsZXRlTGluZXMoKTsKLSAgICAKKworICAgIFJlbmRlclB0cjxS
ZW5kZXJCbG9jaz4gY3JlYXRlZFByZTsKICAgICBib29sIG1hZGVOZXdCZWZvcmVCbG9jayA9IGZh
bHNlOwogICAgIGlmIChibG9jay0+aXNBbm9ueW1vdXNCbG9jaygpICYmICghYmxvY2stPnBhcmVu
dCgpIHx8ICFibG9jay0+cGFyZW50KCktPmNyZWF0ZXNBbm9ueW1vdXNXcmFwcGVyKCkpKSB7CiAg
ICAgICAgIC8vIFdlIGNhbiByZXVzZSB0aGlzIGJsb2NrIGFuZCBtYWtlIGl0IHRoZSBwcmVCbG9j
ayBvZiB0aGUgbmV4dCBjb250aW51YXRpb24uCkBAIC00OTksMTcgKzUwMywxOSBAQCB2b2lkIFJl
bmRlcklubGluZTo6c3BsaXRGbG93KFJlbmRlck9iamVjCiAgICAgICAgIGJsb2NrID0gYmxvY2st
PmNvbnRhaW5pbmdCbG9jaygpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIE5vIGFub255bW91
cyBibG9jayBhdmFpbGFibGUgZm9yIHVzZS4gIE1ha2Ugb25lLgotICAgICAgICBwcmUgPSBibG9j
ay0+Y3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAgICAgICAgY3JlYXRlZFByZSA9IGJsb2NrLT5j
cmVhdGVBbm9ueW1vdXNCbG9jaygpOworICAgICAgICBwcmUgPSBjcmVhdGVkUHJlLmdldCgpOwog
ICAgICAgICBtYWRlTmV3QmVmb3JlQmxvY2sgPSB0cnVlOwogICAgIH0KIAotICAgIGF1dG8mIHBv
c3QgPSBkb3duY2FzdDxSZW5kZXJCbG9jaz4oKnByZS0+Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNh
bWVUeXBlQXMoKmJsb2NrKS5yZWxlYXNlKCkpOworICAgIGF1dG8gY3JlYXRlZFBvc3QgPSBwcmUt
PmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKCpibG9jayk7CisgICAgYXV0byYgcG9z
dCA9IGRvd25jYXN0PFJlbmRlckJsb2NrPigqY3JlYXRlZFBvc3QpOwogCiAgICAgUmVuZGVyT2Jq
ZWN0KiBib3hGaXJzdCA9IG1hZGVOZXdCZWZvcmVCbG9jayA/IGJsb2NrLT5maXJzdENoaWxkKCkg
OiBwcmUtPm5leHRTaWJsaW5nKCk7Ci0gICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykKLSAgICAg
ICAgYmxvY2stPmluc2VydENoaWxkSW50ZXJuYWwocHJlLCBib3hGaXJzdCwgTm90aWZ5Q2hpbGRy
ZW4pOwotICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKG5ld0Jsb2NrQm94LCBib3hGaXJz
dCwgTm90aWZ5Q2hpbGRyZW4pOwotICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKCZwb3N0
LCBib3hGaXJzdCwgTm90aWZ5Q2hpbGRyZW4pOworICAgIGlmIChjcmVhdGVkUHJlKQorICAgICAg
ICBibG9jay0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNyZWF0ZWRQcmUpLCBib3hGaXJz
dCwgTm90aWZ5Q2hpbGRyZW4pOworICAgIGJsb2NrLT5pbnNlcnRDaGlsZEludGVybmFsKFdURk1v
dmUobmV3QmxvY2tCb3gpLCBib3hGaXJzdCwgTm90aWZ5Q2hpbGRyZW4pOworICAgIGJsb2NrLT5p
bnNlcnRDaGlsZEludGVybmFsKFdURk1vdmUoY3JlYXRlZFBvc3QpLCBib3hGaXJzdCwgTm90aWZ5
Q2hpbGRyZW4pOwogICAgIGJsb2NrLT5zZXRDaGlsZHJlbklubGluZShmYWxzZSk7CiAgICAgCiAg
ICAgaWYgKG1hZGVOZXdCZWZvcmVCbG9jaykgewpAQCAtNTE3LDIyICs1MjMsMjIgQEAgdm9pZCBS
ZW5kZXJJbmxpbmU6OnNwbGl0RmxvdyhSZW5kZXJPYmplYwogICAgICAgICB3aGlsZSAobykgewog
ICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBubyA9IG87CiAgICAgICAgICAgICBvID0gbm8tPm5l
eHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICBibG9jay0+cmVtb3ZlQ2hpbGRJbnRlcm5hbCgqbm8s
IE5vdGlmeUNoaWxkcmVuKTsKLSAgICAgICAgICAgIHByZS0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChu
bywgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOworICAgICAgICAgICAgYXV0byBjaGlsZFRvTW92
ZSA9IGJsb2NrLT50YWtlQ2hpbGRJbnRlcm5hbCgqbm8sIE5vdGlmeUNoaWxkcmVuKTsKKyAgICAg
ICAgICAgIHByZS0+aW5zZXJ0Q2hpbGRJbnRlcm5hbChXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSwgbnVs
bHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICAgICAgbm8tPnNldE5lZWRzTGF5b3V0QW5k
UHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc3BsaXRJbmxpbmVz
KHByZSwgJnBvc3QsIG5ld0Jsb2NrQm94LCBiZWZvcmVDaGlsZCwgb2xkQ29udCk7CisgICAgc3Bs
aXRJbmxpbmVzKHByZSwgJnBvc3QsICZhZGRlZEJsb2NrQm94LCBiZWZvcmVDaGlsZCwgb2xkQ29u
dCk7CiAKICAgICAvLyBXZSBhbHJlYWR5IGtub3cgdGhlIG5ld0Jsb2NrQm94IGlzbid0IGdvaW5n
IHRvIGNvbnRhaW4gaW5saW5lIGtpZHMsIHNvIGF2b2lkIHdhc3RpbmcKICAgICAvLyB0aW1lIGlu
IG1ha2VDaGlsZHJlbk5vbklubGluZSBieSBqdXN0IHNldHRpbmcgdGhpcyBleHBsaWNpdGx5IHVw
IGZyb250LgotICAgIG5ld0Jsb2NrQm94LT5zZXRDaGlsZHJlbklubGluZShmYWxzZSk7CisgICAg
YWRkZWRCbG9ja0JveC5zZXRDaGlsZHJlbklubGluZShmYWxzZSk7CiAKICAgICAvLyBXZSBkZWxh
eWVkIGFkZGluZyB0aGUgbmV3Q2hpbGQgdW50aWwgbm93IHNvIHRoYXQgdGhlIHxuZXdCbG9ja0Jv
eHwgd291bGQgYmUgZnVsbHkKICAgICAvLyBjb25uZWN0ZWQsIHRodXMgYWxsb3dpbmcgbmV3Q2hp
bGQgYWNjZXNzIHRvIGEgcmVuZGVyQXJlbmEgc2hvdWxkIGl0IG5lZWQKICAgICAvLyB0byB3cmFw
IGl0c2VsZiBpbiBhZGRpdGlvbmFsIGJveGVzIChlLmcuLCB0YWJsZSBjb25zdHJ1Y3Rpb24pLgot
ICAgIG5ld0Jsb2NrQm94LT5hZGRDaGlsZChuZXdDaGlsZCk7CisgICAgYWRkZWRCbG9ja0JveC5h
ZGRDaGlsZChXVEZNb3ZlKG5ld0NoaWxkKSk7CiAKICAgICAvLyBBbHdheXMganVzdCBkbyBhIGZ1
bGwgbGF5b3V0IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGxpbmUgYm94ZXMgKGVzcGVjaWFsbHkg
d3JhcHBlcnMgZm9yIGltYWdlcykKICAgICAvLyBnZXQgZGVsZXRlZCBwcm9wZXJseS4gIEJlY2F1
c2Ugb2JqZWN0cyBtb3ZlcyBmcm9tIHRoZSBwcmUgYmxvY2sgaW50byB0aGUgcG9zdCBibG9jaywg
d2Ugd2FudCB0bwpAQCAtNTUzLDcgKzU1OSw3IEBAIHN0YXRpYyBib29sIGNhblVzZUFzUGFyZW50
Rm9yQ29udGludWF0aW8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6
OmFkZENoaWxkVG9Db250aW51YXRpb24oUmVuZGVyT2JqZWN0KiBuZXdDaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZFRvQ29udGludWF0
aW9uKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkKQogewogICAgIGF1dG8qIGZsb3cgPSBjb250aW51YXRpb25CZWZvcmUoYmVmb3JlQ2hp
bGQpOwogICAgIC8vIEl0IG1heSBvciBtYXkgbm90IGJlIHRoZSBkaXJlY3QgcGFyZW50IG9mIHRo
ZSBiZWZvcmVDaGlsZC4KQEAgLTU3OCwyMCArNTg0LDIwIEBAIHZvaWQgUmVuZGVySW5saW5lOjph
ZGRDaGlsZFRvQ29udGludWF0aW8KICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAg
ICBpZiAobmV3Q2hpbGQtPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5jZXN0b3ItPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRp
b24obmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5j
ZXN0b3ItPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIGJl
Zm9yZUNoaWxkKTsKIAogICAgIGlmIChmbG93ID09IGJlZm9yZUNoaWxkQW5jZXN0b3IpCi0gICAg
ICAgIHJldHVybiBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBi
ZWZvcmVDaGlsZCk7CisgICAgICAgIHJldHVybiBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGlu
dWF0aW9uKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgLy8gQSBjb250aW51
YXRpb24gYWx3YXlzIGNvbnNpc3RzIG9mIHR3byBwb3RlbnRpYWwgY2FuZGlkYXRlczogYW4gaW5s
aW5lIG9yIGFuIGFub255bW91cwogICAgIC8vIGJsb2NrIGJveCBob2xkaW5nIGJsb2NrIGNoaWxk
cmVuLgogICAgIGJvb2wgY2hpbGRJbmxpbmUgPSBuZXdDaGlsZElzSW5saW5lKCpuZXdDaGlsZCwg
KnRoaXMpOwogICAgIC8vIFRoZSBnb2FsIGhlcmUgaXMgdG8gbWF0Y2ggdXAgaWYgd2UgY2FuLCBz
byB0aGF0IHdlIGNhbiBjb2FsZXNjZSBhbmQgY3JlYXRlIHRoZQogICAgIC8vIG1pbmltYWwgIyBv
ZiBjb250aW51YXRpb25zIG5lZWRlZCBmb3IgdGhlIGlubGluZS4KICAgICBpZiAoY2hpbGRJbmxp
bmUgPT0gYmVmb3JlQ2hpbGRBbmNlc3Rvci0+aXNJbmxpbmUoKSkKLSAgICAgICAgcmV0dXJuIGJl
Zm9yZUNoaWxkQW5jZXN0b3ItPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQs
IGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcmV0dXJuIGJlZm9yZUNoaWxkQW5jZXN0b3ItPmFkZENo
aWxkSWdub3JpbmdDb250aW51YXRpb24oV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsK
ICAgICBpZiAoZmxvdy0+aXNJbmxpbmUoKSA9PSBjaGlsZElubGluZSkKLSAgICAgICAgcmV0dXJu
IGZsb3ctPmFkZENoaWxkSWdub3JpbmdDb250aW51YXRpb24obmV3Q2hpbGQpOyAvLyBKdXN0IHRy
ZWF0IGxpa2UgYW4gYXBwZW5kLgotICAgIHJldHVybiBiZWZvcmVDaGlsZEFuY2VzdG9yLT5hZGRD
aGlsZElnbm9yaW5nQ29udGludWF0aW9uKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAg
IHJldHVybiBmbG93LT5hZGRDaGlsZElnbm9yaW5nQ29udGludWF0aW9uKFdURk1vdmUobmV3Q2hp
bGQpKTsgLy8gSnVzdCB0cmVhdCBsaWtlIGFuIGFwcGVuZC4KKyAgICByZXR1cm4gYmVmb3JlQ2hp
bGRBbmNlc3Rvci0+YWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihXVEZNb3ZlKG5ld0NoaWxk
KSwgYmVmb3JlQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRlcklubGluZTo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKQEAgLTEzNjgsMTIg
KzEzNzQsMTIgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZURyYWdTdGF0ZShib29sIAogdm9p
ZCBSZW5kZXJJbmxpbmU6OmNoaWxkQmVjYW1lTm9uSW5saW5lKFJlbmRlckVsZW1lbnQmIGNoaWxk
KQogewogICAgIC8vIFdlIGhhdmUgdG8gc3BsaXQgdGhlIHBhcmVudCBmbG93LgotICAgIFJlbmRl
ckJsb2NrKiBuZXdCb3ggPSBjb250YWluaW5nQmxvY2soKS0+Y3JlYXRlQW5vbnltb3VzQmxvY2so
KTsKKyAgICBhdXRvIG5ld0JveCA9IGNvbnRhaW5pbmdCbG9jaygpLT5jcmVhdGVBbm9ueW1vdXNC
bG9jaygpOwogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBvbGRDb250aW51YXRpb24gPSBjb250
aW51YXRpb24oKTsKLSAgICBzZXRDb250aW51YXRpb24obmV3Qm94KTsKKyAgICBzZXRDb250aW51
YXRpb24obmV3Qm94LmdldCgpKTsKICAgICBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gY2hp
bGQubmV4dFNpYmxpbmcoKTsKLSAgICByZW1vdmVDaGlsZEludGVybmFsKGNoaWxkLCBOb3RpZnlD
aGlsZHJlbik7Ci0gICAgc3BsaXRGbG93KGJlZm9yZUNoaWxkLCBuZXdCb3gsICZjaGlsZCwgb2xk
Q29udGludWF0aW9uKTsKKyAgICBhdXRvIHJlbW92ZWRDaGlsZCA9IHRha2VDaGlsZEludGVybmFs
KGNoaWxkLCBOb3RpZnlDaGlsZHJlbik7CisgICAgc3BsaXRGbG93KGJlZm9yZUNoaWxkLCBXVEZN
b3ZlKG5ld0JveCksIFdURk1vdmUocmVtb3ZlZENoaWxkKSwgb2xkQ29udGludWF0aW9uKTsKIH0K
IAogdm9pZCBSZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYg
cmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiAyMjI2NzgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAgcHVibGljOgogICAgIFJlbmRlcklubGluZShFbGVtZW50JiwgUmVuZGVyU3R5bGUmJik7CiAg
ICAgUmVuZGVySW5saW5lKERvY3VtZW50JiwgUmVuZGVyU3R5bGUmJik7CiAKLSAgICB2b2lkIGFk
ZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQg
PSAwKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CiAKICAg
ICBMYXlvdXRVbml0IG1hcmdpbkxlZnQoKSBjb25zdCBmaW5hbDsKICAgICBMYXlvdXRVbml0IG1h
cmdpblJpZ2h0KCkgY29uc3QgZmluYWw7CkBAIC0xMjEsMTMgKzEyMSwxMSBAQCBwcml2YXRlOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdlbmVyYXRvckNvbnRleHQ+CiAgICAgdm9pZCBnZW5lcmF0
ZUN1bGxlZExpbmVCb3hSZWN0cyhHZW5lcmF0b3JDb250ZXh0JiB5aWVsZCwgY29uc3QgUmVuZGVy
SW5saW5lKiBjb250YWluZXIpIGNvbnN0OwogCi0gICAgdm9pZCBhZGRDaGlsZFRvQ29udGludWF0
aW9uKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwot
ICAgIHZvaWQgYWRkQ2hpbGRJZ25vcmluZ0NvbnRpbnVhdGlvbihSZW5kZXJPYmplY3QqIG5ld0No
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7CisgICAgdm9p
ZCBhZGRDaGlsZFRvQ29udGludWF0aW9uKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKKyAgICB2b2lkIGFkZENoaWxkSWdub3JpbmdD
b250aW51YXRpb24oUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlQ2hpbGQgPSBudWxscHRyKSBmaW5hbDsKIAotICAgIHZvaWQgc3BsaXRJbmxpbmVz
KFJlbmRlckJsb2NrKiBmcm9tQmxvY2ssIFJlbmRlckJsb2NrKiB0b0Jsb2NrLCBSZW5kZXJCbG9j
ayogbWlkZGxlQmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQpOwotICAgIHZvaWQgc3BsaXRG
bG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlckJsb2NrKiBuZXdCbG9ja0JveCwK
LSAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJCb3hNb2Rl
bE9iamVjdCogb2xkQ29udCk7CisgICAgdm9pZCBzcGxpdElubGluZXMoUmVuZGVyQmxvY2sqIGZy
b21CbG9jaywgUmVuZGVyQmxvY2sqIHRvQmxvY2ssIFJlbmRlckJsb2NrKiBtaWRkbGVCbG9jaywg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgUmVuZGVyQm94TW9kZWxPYmplY3QqIG9sZENvbnQp
OworICAgIHZvaWQgc3BsaXRGbG93KFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQsIFJlbmRlclB0
cjxSZW5kZXJCbG9jaz4gbmV3QmxvY2tCb3gsIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IG5ld0No
aWxkLCBSZW5kZXJCb3hNb2RlbE9iamVjdCogb2xkQ29udCk7CiAKICAgICB2b2lkIGxheW91dCgp
IGZpbmFsIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0gLy8gRG8gbm90aGluZyBmb3IgbGF5b3V0
KCkKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3Bw
CShyZXZpc2lvbiAyMjI2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVu
dUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOSArMTA3LDEwIEBAIHZvaWQgUmVuZGVy
TWVudUxpc3Q6OmNyZWF0ZUlubmVyQmxvY2soKQogCiAgICAgLy8gQ3JlYXRlIGFuIGFub255bW91
cyBibG9jay4KICAgICBBU1NFUlQoIWZpcnN0Q2hpbGQoKSk7Ci0gICAgbV9pbm5lckJsb2NrID0g
Y3JlYXRlQW5vbnltb3VzQmxvY2soKTsKKyAgICBhdXRvIG5ld0lubmVyQmxvY2sgPSBjcmVhdGVB
bm9ueW1vdXNCbG9jaygpOworICAgIG1faW5uZXJCbG9jayA9IG5ld0lubmVyQmxvY2suZ2V0KCk7
CiAgICAgYWRqdXN0SW5uZXJTdHlsZSgpOwotICAgIFJlbmRlckZsZXhpYmxlQm94OjphZGRDaGls
ZChtX2lubmVyQmxvY2spOworICAgIFJlbmRlckZsZXhpYmxlQm94OjphZGRDaGlsZChXVEZNb3Zl
KG5ld0lubmVyQmxvY2spKTsKIH0KIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6YWRqdXN0SW5uZXJT
dHlsZSgpCkBAIC0xNzEsMjMgKzE3MiwyNCBAQCBIVE1MU2VsZWN0RWxlbWVudCYgUmVuZGVyTWVu
dUxpc3Q6OnNlbGVjCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxTZWxlY3RFbGVtZW50Pihub2Rl
Rm9yTm9uQW5vbnltb3VzKCkpOwogfQogCi12b2lkIFJlbmRlck1lbnVMaXN0OjphZGRDaGlsZChS
ZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBS
ZW5kZXJNZW51TGlzdDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgY3JlYXRlSW5uZXJCbG9jaygpOwot
ICAgIG1faW5uZXJCbG9jay0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICBh
dXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAgICBtX2lubmVyQmxvY2stPmFkZENoaWxkKFdURk1v
dmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgQVNTRVJUKG1faW5uZXJCbG9jayA9PSBm
aXJzdENoaWxkKCkpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQo
KS5leGlzdGluZ0FYT2JqZWN0Q2FjaGUoKSkKLSAgICAgICAgY2FjaGUtPmNoaWxkcmVuQ2hhbmdl
ZCh0aGlzLCBuZXdDaGlsZCk7CisgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQodGhpcywg
JmNoaWxkKTsKIH0KIAotdm9pZCBSZW5kZXJNZW51TGlzdDo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2Jq
ZWN0JiBvbGRDaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlck1lbnVMaXN0Ojp0
YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBvbGRDaGlsZCkKIHsKICAgICBpZiAoJm9sZENoaWxkID09
IG1faW5uZXJCbG9jayB8fCAhbV9pbm5lckJsb2NrKSB7Ci0gICAgICAgIFJlbmRlckZsZXhpYmxl
Qm94OjpyZW1vdmVDaGlsZChvbGRDaGlsZCk7CiAgICAgICAgIG1faW5uZXJCbG9jayA9IDA7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIG1faW5uZXJCbG9jay0+cmVtb3ZlQ2hpbGQob2xkQ2hpbGQpOwor
ICAgICAgICByZXR1cm4gUmVuZGVyRmxleGlibGVCb3g6OnRha2VDaGlsZChvbGRDaGlsZCk7Cisg
ICAgfQorICAgIHJldHVybiBtX2lubmVyQmxvY2stPnRha2VDaGlsZChvbGRDaGlsZCk7CiB9CiAK
IHZvaWQgUmVuZGVyTWVudUxpc3Q6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZm
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCkBAIC0yOTQsOSArMjk2LDExIEBAIHZvaWQg
UmVuZGVyTWVudUxpc3Q6OnNldFRleHQoY29uc3QgU3RyaW4KICAgICBpZiAobV9idXR0b25UZXh0
KQogICAgICAgICBtX2J1dHRvblRleHQtPnNldFRleHQodGV4dFRvVXNlLmltcGwoKSwgdHJ1ZSk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIG1fYnV0dG9uVGV4dCA9IG5ldyBSZW5kZXJUZXh0KGRvY3Vt
ZW50KCksIHRleHRUb1VzZSk7Ci0gICAgICAgIGFkZENoaWxkKG1fYnV0dG9uVGV4dCk7CisgICAg
ICAgIGF1dG8gbmV3QnV0dG9uVGV4dCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRleHQ+KGRvY3Vt
ZW50KCksIHRleHRUb1VzZSk7CisgICAgICAgIG1fYnV0dG9uVGV4dCA9IG5ld0J1dHRvblRleHQu
Z2V0KCk7CisgICAgICAgIGFkZENoaWxkKFdURk1vdmUobmV3QnV0dG9uVGV4dCkpOwogICAgIH0K
KwogICAgIGFkanVzdElubmVyU3R5bGUoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw4ICs2
Niw4IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzTWVudUxpc3QoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
bW92ZUNoaWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGQoUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQg
PSAwKSBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiB0YWtlQ2hpbGQoUmVu
ZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CiAgICAgYm9vbCBjcmVhdGVzQW5vbnltb3VzV3JhcHBlcigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgdXBkYXRlRnJvbUVs
ZW1lbnQoKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtbkZsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtbkZsb3cuY3BwCShyZXZpc2lvbiAyMjI2NzgpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg0LDExICsxODQsMTEgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkZsb3c6OmV2YWN1
YXRlQW5kRAogICAgIFNwYW5uZXJNYXA6Oml0ZXJhdG9yIGl0OwogICAgIHdoaWxlICgoaXQgPSBt
X3NwYW5uZXJNYXAuYmVnaW4oKSkgIT0gbV9zcGFubmVyTWFwLmVuZCgpKSB7CiAgICAgICAgIFJl
bmRlckJveCogc3Bhbm5lciA9IGl0LT5rZXk7Ci0gICAgICAgIG11bHRpY29sQ29udGFpbmVyLT5y
ZW1vdmVDaGlsZCgqc3Bhbm5lcik7CisgICAgICAgIGF1dG8gdGFrZW5TcGFubmVyID0gbXVsdGlj
b2xDb250YWluZXItPnRha2VDaGlsZCgqc3Bhbm5lcik7CiAgICAgICAgIEFTU0VSVChpdC0+dmFs
dWUuZ2V0KCkpOwogICAgICAgICBpZiAoUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXIqIHBsYWNlaG9sZGVyID0gaXQtPnZhbHVlLmdldCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJC
bG9ja0Zsb3cmIG9yaWdpbmFsQ29udGFpbmVyID0gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93Pigq
cGxhY2Vob2xkZXItPnBhcmVudCgpKTsKLSAgICAgICAgICAgIG9yaWdpbmFsQ29udGFpbmVyLmFk
ZENoaWxkKHNwYW5uZXIsIHBsYWNlaG9sZGVyKTsKKyAgICAgICAgICAgIG9yaWdpbmFsQ29udGFp
bmVyLmFkZENoaWxkKFdURk1vdmUodGFrZW5TcGFubmVyKSwgcGxhY2Vob2xkZXIpOwogICAgICAg
ICAgICAgcGxhY2Vob2xkZXItPmRlc3Ryb3koKTsKICAgICAgICAgfQogICAgICAgICBtX3NwYW5u
ZXJNYXAucmVtb3ZlKGl0KTsKQEAgLTM0OCwxNCArMzQ4LDE0IEBAIFJlbmRlck9iamVjdCogUmVu
ZGVyTXVsdGlDb2x1bW5GbG93Ojpwcm8KICAgICAgICAgLy8gY29udGVudCBiZWZvcmUgYW5kIGFm
dGVyIHRoZSBzcGFubmVyLCBzbyB0aGF0IGl0IGJlY29tZXMgc2VwYXJhdGUgbGluZSBib3hlcy4g
U2Vjb25kbHksCiAgICAgICAgIC8vIHRoaXMgcGxhY2Vob2xkZXIgc2VydmVzIGFzIGEgYnJlYWsg
cG9pbnQgZm9yIGNvbHVtbiBzZXRzLCBzbyB0aGF0LCB3aGVuIGVuY291bnRlcmVkLCB3ZQogICAg
ICAgICAvLyBlbmQgZmxvd2luZyBvbmUgY29sdW1uIHNldCBhbmQgbW92ZSB0byB0aGUgbmV4dCBv
bmUuCi0gICAgICAgIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKiBwbGFjZWhv
bGRlciA9IFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyOjpjcmVhdGVBbm9ueW1v
dXModGhpcywKLSAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlckJveD4oZGVzY2VuZGFudCksICZj
b250YWluZXItPnN0eWxlKCkpOwotICAgICAgICBjb250YWluZXItPmFkZENoaWxkKHBsYWNlaG9s
ZGVyLCBkZXNjZW5kYW50Lm5leHRTaWJsaW5nKCkpOwotICAgICAgICBjb250YWluZXItPnJlbW92
ZUNoaWxkKGRlc2NlbmRhbnQpOworICAgICAgICBhdXRvIG5ld1BsYWNlaG9sZGVyID0gUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI6OmNyZWF0ZUFub255bW91cyh0aGlzLCBkb3du
Y2FzdDxSZW5kZXJCb3g+KGRlc2NlbmRhbnQpLCAmY29udGFpbmVyLT5zdHlsZSgpKTsKKyAgICAg
ICAgYXV0byYgcGxhY2Vob2xkZXIgPSAqbmV3UGxhY2Vob2xkZXI7CisgICAgICAgIGNvbnRhaW5l
ci0+YWRkQ2hpbGQoV1RGTW92ZShuZXdQbGFjZWhvbGRlciksIGRlc2NlbmRhbnQubmV4dFNpYmxp
bmcoKSk7CisgICAgICAgIGF1dG8gdGFrZW5EZXNjZW5kYW50ID0gY29udGFpbmVyLT50YWtlQ2hp
bGQoZGVzY2VuZGFudCk7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIGEgZ3VhcmQgdG8g
c3RvcCBhbiBhbmNlc3RvciBmbG93IHRocmVhZCBmcm9tIHByb2Nlc3NpbmcgdGhlIHNwYW5uZXIu
CiAgICAgICAgIGdTaGlmdGluZ1NwYW5uZXIgPSB0cnVlOwotICAgICAgICBtdWx0aWNvbENvbnRh
aW5lci0+UmVuZGVyQmxvY2s6OmFkZENoaWxkKCZkZXNjZW5kYW50LCBpbnNlcnRCZWZvcmVNdWx0
aWNvbENoaWxkKTsKKyAgICAgICAgbXVsdGljb2xDb250YWluZXItPlJlbmRlckJsb2NrOjphZGRD
aGlsZChXVEZNb3ZlKHRha2VuRGVzY2VuZGFudCksIGluc2VydEJlZm9yZU11bHRpY29sQ2hpbGQp
OwogICAgICAgICBnU2hpZnRpbmdTcGFubmVyID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICAv
LyBUaGUgc3Bhbm5lciBoYXMgbm93IGJlZW4gbW92ZWQgb3V0IGZyb20gdGhlIGZsb3cgdGhyZWFk
LCBidXQgd2UgZG9uJ3Qgd2FudCB0bwpAQCAtMzYzLDggKzM2Myw4IEBAIFJlbmRlck9iamVjdCog
UmVuZGVyTXVsdGlDb2x1bW5GbG93Ojpwcm8KICAgICAgICAgLy8gY3JlYXRpb24gb2YgY29sdW1u
IHNldHMgb3IgYW55dGhpbmcgbGlrZSB0aGF0LiBDb250aW51ZSBhdCBpdHMgb3JpZ2luYWwgcG9z
aXRpb24gaW4KICAgICAgICAgLy8gdGhlIHRyZWUsIGkuZS4gd2hlcmUgdGhlIHBsYWNlaG9sZGVy
IHdhcyBqdXN0IHB1dC4KICAgICAgICAgaWYgKHN1YnRyZWVSb290ID09ICZkZXNjZW5kYW50KQot
ICAgICAgICAgICAgc3VidHJlZVJvb3QgPSBwbGFjZWhvbGRlcjsKLSAgICAgICAgbmV4dERlc2Nl
bmRhbnQgPSBwbGFjZWhvbGRlcjsKKyAgICAgICAgICAgIHN1YnRyZWVSb290ID0gJnBsYWNlaG9s
ZGVyOworICAgICAgICBuZXh0RGVzY2VuZGFudCA9ICZwbGFjZWhvbGRlcjsKICAgICB9IGVsc2Ug
ewogICAgICAgICAvLyBUaGlzIGlzIHJlZ3VsYXIgbXVsdGljb2wgY29udGVudCwgaS5lLiBub3Qg
cGFydCBvZiBhIHNwYW5uZXIuCiAgICAgICAgIGlmIChpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5u
ZXJQbGFjZWhvbGRlcj4obmV4dFJlbmRlcmVySW5GcmFnbWVudGVkRmxvdykpIHsKQEAgLTM4OSwx
NSArMzg5LDE2IEBAIFJlbmRlck9iamVjdCogUmVuZGVyTXVsdGlDb2x1bW5GbG93Ojpwcm8KICAg
ICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBjb2x1bW4gc2V0IHdoZW4gdGhlcmUncyBubyBzZXQg
YWxyZWFkeSBjcmVhdGVkLiBXZSBhbHNvIGFsd2F5cyBpbnNlcnQKICAgICAvLyBhbm90aGVyIGNv
bHVtbiBzZXQgYWZ0ZXIgYSBzcGFubmVyLiBFdmVuIGlmIGl0IHR1cm5zIG91dCB0aGF0IHRoZXJl
IGFyZSBubyByZW5kZXJlcnMKICAgICAvLyBmb2xsb3dpbmcgdGhlIHNwYW5uZXIsIHRoZXJlIG1h
eSBiZSBib3R0b20gbWFyZ2lucyB0aGVyZSwgd2hpY2ggdGFrZSB1cCBzcGFjZS4KLSAgICBSZW5k
ZXJNdWx0aUNvbHVtblNldCogbmV3U2V0ID0gbmV3IFJlbmRlck11bHRpQ29sdW1uU2V0KCp0aGlz
LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShtdWx0aWNvbENv
bnRhaW5lci0+c3R5bGUoKSwgQkxPQ0spKTsKKyAgICBhdXRvIG5ld1NldCA9IGNyZWF0ZVJlbmRl
cmVyPFJlbmRlck11bHRpQ29sdW1uU2V0PigqdGhpcywgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255
bW91c1N0eWxlV2l0aERpc3BsYXkobXVsdGljb2xDb250YWluZXItPnN0eWxlKCksIEJMT0NLKSk7
CiAgICAgbmV3U2V0LT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICBtdWx0aWNvbENvbnRhaW5lci0+
UmVuZGVyQmxvY2s6OmFkZENoaWxkKG5ld1NldCwgaW5zZXJ0QmVmb3JlTXVsdGljb2xDaGlsZCk7
CisgICAgYXV0byYgc2V0ID0gKm5ld1NldDsKKyAgICBtdWx0aWNvbENvbnRhaW5lci0+UmVuZGVy
QmxvY2s6OmFkZENoaWxkKFdURk1vdmUobmV3U2V0KSwgaW5zZXJ0QmVmb3JlTXVsdGljb2xDaGls
ZCk7CiAgICAgaW52YWxpZGF0ZUZyYWdtZW50cygpOwogCiAgICAgLy8gV2UgY2Fubm90IGhhbmRs
ZSBpbW1lZGlhdGUgY29sdW1uIHNldCBzaWJsaW5ncyBhdCB0aGUgbW9tZW50IChhbmQgdGhlcmUn
cyBubyBuZWVkIGZvcgogICAgIC8vIGl0LCBlaXRoZXIpLiBUaGVyZSBoYXMgdG8gYmUgYXQgbGVh
c3Qgb25lIHNwYW5uZXIgc2VwYXJhdGluZyB0aGVtLgotICAgIEFTU0VSVCghcHJldmlvdXNDb2x1
bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV3U2V0KSB8fCAhcHJldmlvdXNDb2x1bW5TZXRPclNw
YW5uZXJTaWJsaW5nT2YobmV3U2V0KS0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKTsKLSAgICBB
U1NFUlQoIW5leHRDb2x1bW5TZXRPclNwYW5uZXJTaWJsaW5nT2YobmV3U2V0KSB8fCAhbmV4dENv
bHVtblNldE9yU3Bhbm5lclNpYmxpbmdPZihuZXdTZXQpLT5pc1JlbmRlck11bHRpQ29sdW1uU2V0
KCkpOworICAgIEFTU0VSVF9VTlVTRUQoc2V0LCAhcHJldmlvdXNDb2x1bW5TZXRPclNwYW5uZXJT
aWJsaW5nT2YoJnNldCkgfHwgIXByZXZpb3VzQ29sdW1uU2V0T3JTcGFubmVyU2libGluZ09mKCZz
ZXQpLT5pc1JlbmRlck11bHRpQ29sdW1uU2V0KCkpOworICAgIEFTU0VSVCghbmV4dENvbHVtblNl
dE9yU3Bhbm5lclNpYmxpbmdPZigmc2V0KSB8fCAhbmV4dENvbHVtblNldE9yU3Bhbm5lclNpYmxp
bmdPZigmc2V0KS0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKTsKICAgICAKICAgICByZXR1cm4g
bmV4dERlc2NlbmRhbnQ7CiB9CkBAIC00MjgsNyArNDI5LDExIEBAIHZvaWQgUmVuZGVyTXVsdGlD
b2x1bW5GbG93OjpmcmFnbWVudGVkRmwKICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIG51
a2UgdGhlIHBsYWNlaG9sZGVyLCBzaW5jZSB0aGUgYW5jZXN0b3IgYWxyZWFkeSBsb3N0IHRoZSBt
YXBwaW5nIHRvIGl0IHdoZW4KICAgICAgICAgICAgICAgICAvLyB3ZSBzaGlmdGVkIHRoZSBwbGFj
ZWhvbGRlciBkb3duIGludG8gdGhpcyBmbG93IHRocmVhZC4KICAgICAgICAgICAgICAgICBwbGFj
ZWhvbGRlci5mcmFnbWVudGVkRmxvdygpLT5tX3NwYW5uZXJNYXAucmVtb3ZlKHNwYW5uZXIpOwot
ICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyLnBhcmVudCgpLT5yZW1vdmVDaGlsZChwbGFjZWhv
bGRlcik7CisKKyAgICAgICAgICAgICAgICBhdXRvIHRha2VuQ2hpbGQgPSBwbGFjZWhvbGRlci5w
YXJlbnQoKS0+dGFrZUNoaWxkKHBsYWNlaG9sZGVyKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogTWVtb3J5IG1hbmFnZW1lbnQuCisgICAgICAgICAgICAgICAgYXV0byogbGVha2VuUHRyID0g
dGFrZW5DaGlsZC5sZWFrUHRyKCk7CisgICAgICAgICAgICAgICAgVU5VU0VEX1BBUkFNKGxlYWtl
blB0cik7CiAKICAgICAgICAgICAgICAgICBpZiAoc3VidHJlZVJvb3QgPT0gZGVzY2VuZGFudCkK
ICAgICAgICAgICAgICAgICAgICAgc3VidHJlZVJvb3QgPSBzcGFubmVyOwpAQCAtNDUwLDcgKzQ1
NSwxMSBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uRmxvdzo6aGFuZGxlU3Bhbm5lCiB7CiAgICAg
Ly8gVGhlIHBsYWNlaG9sZGVyIG1heSBhbHJlYWR5IGhhdmUgYmVlbiByZW1vdmVkLCBidXQgaWYg
aXQgaGFzbid0LCBkbyBzbyBub3cuCiAgICAgaWYgKFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyKiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lck1hcC5nZXQoJmRvd25jYXN0PFJlbmRl
ckJveD4oc3Bhbm5lcikpLmdldCgpKSB7Ci0gICAgICAgIHBsYWNlaG9sZGVyLT5wYXJlbnQoKS0+
cmVtb3ZlQ2hpbGQoKnBsYWNlaG9sZGVyKTsKKyAgICAgICAgYXV0byB0YWtlbkNoaWxkID0gcGxh
Y2Vob2xkZXItPnBhcmVudCgpLT50YWtlQ2hpbGQoKnBsYWNlaG9sZGVyKTsKKyAgICAgICAgLy8g
RklYTUU6IE1lbW9yeSBtYW5hZ2VtZW50LgorICAgICAgICBhdXRvKiBsZWFrZW5QdHIgPSB0YWtl
bkNoaWxkLmxlYWtQdHIoKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlYWtlblB0cik7CisKICAg
ICAgICAgbV9zcGFubmVyTWFwLnJlbW92ZSgmZG93bmNhc3Q8UmVuZGVyQm94PihzcGFubmVyKSk7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1
bW5TcGFubmVyUGxhY2Vob2xkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAJKHJldmlzaW9u
IDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNw
YW5uZXJQbGFjZWhvbGRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDExICszNCwxMSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9s
ZGVyKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcjo6Y3JlYXRlQW5vbnltb3Vz
KFJlbmRlck11bHRpQ29sdW1uRmxvdyogZnJhZ21lbnRlZEZsb3csIFJlbmRlckJveCYgc3Bhbm5l
ciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorUmVuZGVyUHRyPFJlbmRlck11bHRp
Q29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhv
bGRlcjo6Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvdyogZnJhZ21lbnRlZEZs
b3csIFJlbmRlckJveCYgc3Bhbm5lciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQog
ewogICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVX
aXRoRGlzcGxheSgqcGFyZW50U3R5bGUsIEJMT0NLKTsKICAgICBuZXdTdHlsZS5zZXRDbGVhcihD
Qk9USCk7IC8vIFdlIGRvbid0IHdhbnQgZmxvYXRzIGluIHRoZSByb3cgcHJlY2VkaW5nIHRoZSBz
cGFubmVyIHRvIGNvbnRpbnVlIG9uIHRoZSBvdGhlciBzaWRlLgotICAgIGF1dG8gcGxhY2Vob2xk
ZXIgPSBuZXcgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoZnJhZ21lbnRlZEZs
b3csIHNwYW5uZXIsIFdURk1vdmUobmV3U3R5bGUpKTsKKyAgICBhdXRvIHBsYWNlaG9sZGVyID0g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXI+KGZyYWdt
ZW50ZWRGbG93LCBzcGFubmVyLCBXVEZNb3ZlKG5ld1N0eWxlKSk7CiAgICAgcGxhY2Vob2xkZXIt
PmluaXRpYWxpemVTdHlsZSgpOwogICAgIHJldHVybiBwbGFjZWhvbGRlcjsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtblNwYW5uZXJQbGFjZWhvbGRlci5oCShyZXZpc2lvbiAyMjI2NzgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDE0IEBAIGNsYXNzIFJlbmRlck11bHRpQ29sdW1uRmxv
dzsKIAogY2xhc3MgUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIgZmluYWwgOiBw
dWJsaWMgUmVuZGVyQm94IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVuZGVyTXVsdGlDb2x1bW5T
cGFubmVyUGxhY2Vob2xkZXIqIGNyZWF0ZUFub255bW91cyhSZW5kZXJNdWx0aUNvbHVtbkZsb3cq
LCBSZW5kZXJCb3gmIHNwYW5uZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7Cisg
ICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4g
Y3JlYXRlQW5vbnltb3VzKFJlbmRlck11bHRpQ29sdW1uRmxvdyosIFJlbmRlckJveCYgc3Bhbm5l
ciwgY29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKTsKIAogICAgIFJlbmRlckJveCogc3Bh
bm5lcigpIGNvbnN0IHsgcmV0dXJuIG1fc3Bhbm5lcjsgfQogICAgIFJlbmRlck11bHRpQ29sdW1u
RmxvdyogZnJhZ21lbnRlZEZsb3coKSBjb25zdCB7IHJldHVybiBtX2ZyYWdtZW50ZWRGbG93OyB9
CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MuLi4gQXJncz4gZnJpZW5k
IFJlbmRlclB0cjxUPiBjcmVhdGVSZW5kZXJlcihBcmdzJiYuLi4pOworCiAgICAgUmVuZGVyTXVs
dGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIoUmVuZGVyTXVsdGlDb2x1bW5GbG93KiwgUmVuZGVy
Qm94JiBzcGFubmVyLCBSZW5kZXJTdHlsZSYmKTsKICAgICBib29sIGlzUmVuZGVyTXVsdGlDb2x1
bW5TcGFubmVyUGxhY2Vob2xkZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lv
biAyMjI2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQxLDEwICsyNDEsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNl
dFBhcmVudChSZW5kZXJFbGVtZQogICAgIG1fcGFyZW50ID0gcGFyZW50OwogfQogCi12b2lkIFJl
bmRlck9iamVjdDo6cmVtb3ZlRnJvbVBhcmVudCgpCit2b2lkIFJlbmRlck9iamVjdDo6cmVtb3Zl
RnJvbVBhcmVudEFuZERlc3Ryb3koKQogewotICAgIGlmIChwYXJlbnQoKSkKLSAgICAgICAgcGFy
ZW50KCktPnJlbW92ZUNoaWxkKCp0aGlzKTsKKyAgICBBU1NFUlQobV9wYXJlbnQpOworICAgIG1f
cGFyZW50LT5yZW1vdmVBbmREZXN0cm95Q2hpbGQoKnRoaXMpOwogfQogCiBSZW5kZXJPYmplY3Qq
IFJlbmRlck9iamVjdDo6bmV4dEluUHJlT3JkZXIoKSBjb25zdApAQCAtMTQyOCw3ICsxNDI4LDEy
IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95ZWQoKQogICAgIGlmIChBWE9iamVj
dENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hlKCkpCiAgICAg
ICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQodGhpcy0+cGFyZW50KCkpOwogCi0gICAgcmVtb3Zl
RnJvbVBhcmVudCgpOworICAgIGlmIChtX3BhcmVudCkgeworICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGhhdmUgYWx3YXlzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwYXJlbnQgYmVmb3JlIGJl
aW5nIGRlc3Ryb3llZC4KKyAgICAgICAgYXV0byB0YWtlblRoaXMgPSBtX3BhcmVudC0+dGFrZUNo
aWxkKCp0aGlzKTsKKyAgICAgICAgYXV0byogbGVha2VkUHRyID0gdGFrZW5UaGlzLmxlYWtQdHIo
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlYWtlZFB0cik7CisgICAgfQogCiAgICAgQVNTRVJU
KHJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpIHx8ICFpczxSZW5kZXJFbGVtZW50PigqdGhpcykg
fHwgIXZpZXcoKS5mcmFtZVZpZXcoKS5oYXNTbG93UmVwYWludE9iamVjdChkb3duY2FzdDxSZW5k
ZXJFbGVtZW50PigqdGhpcykpKTsKIApAQCAtMTQ5OCw2ICsxNTAzLDcgQEAgdm9pZCBSZW5kZXJP
YmplY3Q6OmRlc3Ryb3lBbmRDbGVhbnVwQW5vbgogCiB2b2lkIFJlbmRlck9iamVjdDo6ZGVzdHJv
eSgpCiB7CisgICAgQVNTRVJUKCFtX2JpdGZpZWxkcy5iZWluZ0Rlc3Ryb3llZCgpKTsKICAgICBt
X2JpdGZpZWxkcy5zZXRCZWluZ0Rlc3Ryb3llZCh0cnVlKTsKIAogI2lmIFBMQVRGT1JNKElPUykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDIy
MjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUyLDcgKzc1Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGltYWdlQ2hhbmdl
ZChDYWNoZWRJbWFnZSosIGNvbnN0IEludFJlY3QqID0gbnVsbHB0cikgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3Qq
ID0gbnVsbHB0cikgeyB9CiAKLSAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2b2lk
IHJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7CiAKICAgICBDU1NBbmltYXRpb25Db250cm9s
bGVyJiBhbmltYXRpb24oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclF1b3RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyUXVvdGUuY3BwCShyZXZpc2lvbiAyMjI2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUXVvdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNyArMzYxLDcgQEAg
dm9pZCBSZW5kZXJRdW90ZTo6dXBkYXRlVGV4dFJlbmRlcmVyKCkKICAgICAgICAgcmVuZGVyVGV4
dC0+ZGlydHlMaW5lQm94ZXMoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGFk
ZENoaWxkKG5ldyBSZW5kZXJUZXh0RnJhZ21lbnQoZG9jdW1lbnQoKSwgbV90ZXh0KSk7CisgICAg
YWRkQ2hpbGQoY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50Pihkb2N1bWVudCgpLCBt
X3RleHQpKTsKIH0KIAogU3RyaW5nIFJlbmRlclF1b3RlOjpjb21wdXRlVGV4dCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuY3BwCShyZXZpc2lvbiAyMjI2
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDkgKzk2LDkgQEAgc3RhdGljIGlubGluZSBSZW5kZXJCbG9jayogcnVieUFm
dGVyQmxvYwogICAgIHJldHVybiBpc1J1YnlBZnRlckJsb2NrKGNoaWxkKSA/IGRvd25jYXN0PFJl
bmRlckJsb2NrPihjaGlsZCkgOiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVuZGVyQmxvY2sqIGNy
ZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jayhSZW5kZXJPYmplY3QmIHJ1YnkpCitzdGF0aWMg
YXV0byBjcmVhdGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soUmVuZGVyT2JqZWN0JiBydWJ5KQog
ewotICAgIFJlbmRlckJsb2NrKiBuZXdCbG9jayA9IG5ldyBSZW5kZXJCbG9ja0Zsb3cocnVieS5k
b2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShy
dWJ5LnN0eWxlKCksIElOTElORV9CTE9DSykpOworICAgIGF1dG8gbmV3QmxvY2sgPSBjcmVhdGVS
ZW5kZXJlcjxSZW5kZXJCbG9ja0Zsb3c+KHJ1YnkuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNy
ZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkocnVieS5zdHlsZSgpLCBJTkxJTkVfQkxPQ0sp
KTsKICAgICBuZXdCbG9jay0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAgICAgcmV0dXJuIG5ld0Jsb2Nr
OwogfQpAQCAtMTM3LDQzICsxMzcsNDUgQEAgdm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OnN0eWxl
RGlkQ2hhbmdlKAogICAgIHByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJlbihQcm9wYWdh
dGVUb0FsbENoaWxkcmVuKTsKIH0KIAotdm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OmFkZENoaWxk
KFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJl
bmRlclJ1YnlBc0lubGluZTo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgLy8gSW5zZXJ0IDpiZWZvcmUgYW5k
IDphZnRlciBjb250ZW50IGJlZm9yZS9hZnRlciB0aGUgUmVuZGVyUnVieVJ1bihzKQogICAgIGlm
IChjaGlsZC0+aXNCZWZvcmVDb250ZW50KCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc0lubGlu
ZSgpKSB7CiAgICAgICAgICAgICAvLyBBZGQgZ2VuZXJhdGVkIGlubGluZSBjb250ZW50IG5vcm1h
bGx5Ci0gICAgICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKGNoaWxkLCBmaXJzdENoaWxk
KCkpOworICAgICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwg
Zmlyc3RDaGlsZCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdyYXAgbm9u
LWlubGluZSBjb250ZW50IHdpdGggYW4gYW5vbnltb3VzIGlubGluZS1ibG9jay4KICAgICAgICAg
ICAgIFJlbmRlckJsb2NrKiBiZWZvcmVCbG9jayA9IHJ1YnlCZWZvcmVCbG9jayh0aGlzKTsKICAg
ICAgICAgICAgIGlmICghYmVmb3JlQmxvY2spIHsKLSAgICAgICAgICAgICAgICBiZWZvcmVCbG9j
ayA9IGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyk7Ci0gICAgICAgICAgICAg
ICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChiZWZvcmVCbG9jaywgZmlyc3RDaGlsZCgpKTsKKyAg
ICAgICAgICAgICAgICBhdXRvIG5ld0Jsb2NrID0gY3JlYXRlQW5vbnltb3VzUnVieUlubGluZUJs
b2NrKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBiZWZvcmVCbG9jayA9IG5ld0Jsb2NrLmdldCgp
OworICAgICAgICAgICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoV1RGTW92ZShuZXdCbG9j
ayksIGZpcnN0Q2hpbGQoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBiZWZvcmVCbG9j
ay0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAgYmVmb3JlQmxvY2stPmFkZENoaWxkKFdU
Rk1vdmUoY2hpbGQpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlm
IChjaGlsZC0+aXNBZnRlckNvbnRlbnQoKSkgewogICAgICAgICBpZiAoY2hpbGQtPmlzSW5saW5l
KCkpIHsKICAgICAgICAgICAgIC8vIEFkZCBnZW5lcmF0ZWQgaW5saW5lIGNvbnRlbnQgbm9ybWFs
bHkKLSAgICAgICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAg
ICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBXcmFwIG5vbi1pbmxpbmUgY29udGVudCB3aXRoIGFuIGFub255
bW91cyBpbmxpbmUtYmxvY2suCiAgICAgICAgICAgICBSZW5kZXJCbG9jayogYWZ0ZXJCbG9jayA9
IHJ1YnlBZnRlckJsb2NrKHRoaXMpOwogICAgICAgICAgICAgaWYgKCFhZnRlckJsb2NrKSB7Ci0g
ICAgICAgICAgICAgICAgYWZ0ZXJCbG9jayA9IGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9j
aygqdGhpcyk7Ci0gICAgICAgICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChhZnRlckJs
b2NrKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld0Jsb2NrID0gY3JlYXRlQW5vbnltb3VzUnVi
eUlubGluZUJsb2NrKCp0aGlzKTsKKyAgICAgICAgICAgICAgICBhZnRlckJsb2NrID0gbmV3Qmxv
Y2suZ2V0KCk7CisgICAgICAgICAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChXVEZNb3Zl
KG5ld0Jsb2NrKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhZnRlckJsb2NrLT5hZGRD
aGlsZChjaGlsZCk7CisgICAgICAgICAgICBhZnRlckJsb2NrLT5hZGRDaGlsZChXVEZNb3ZlKGNo
aWxkKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIElmIHRo
ZSBjaGlsZCBpcyBhIHJ1YnkgcnVuLCBqdXN0IGFkZCBpdCBub3JtYWxseS4KICAgICBpZiAoY2hp
bGQtPmlzUnVieVJ1bigpKSB7Ci0gICAgICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoY2hpbGQs
IGJlZm9yZUNoaWxkKTsKKyAgICAgICAgUmVuZGVySW5saW5lOjphZGRDaGlsZChXVEZNb3ZlKGNo
aWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xODQsNyAr
MTg2LDcgQEAgdm9pZCBSZW5kZXJSdWJ5QXNJbmxpbmU6OmFkZENoaWxkKFJlbmRlcgogICAgICAg
ICB3aGlsZSAocnVuICYmICFydW4tPmlzUnVieVJ1bigpKQogICAgICAgICAgICAgcnVuID0gcnVu
LT5wYXJlbnQoKTsKICAgICAgICAgaWYgKHJ1bikgewotICAgICAgICAgICAgcnVuLT5hZGRDaGls
ZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgcnVuLT5hZGRDaGlsZChXVEZNb3Zl
KGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBiZWZvcmVDaGlsZCBzaG91bGQgYWx3YXlz
IGhhdmUgYSBydW4gYXMgcGFyZW50IQpAQCAtMTk2LDEzICsxOTgsMTQgQEAgdm9pZCBSZW5kZXJS
dWJ5QXNJbmxpbmU6OmFkZENoaWxkKFJlbmRlcgogICAgIC8vIChUaGUgUmVuZGVyUnVieVJ1biBv
YmplY3Qgd2lsbCBoYW5kbGUgdGhlIGRldGFpbHMpCiAgICAgUmVuZGVyUnVieVJ1biogbGFzdFJ1
biA9IGxhc3RSdWJ5UnVuKHRoaXMpOwogICAgIGlmICghbGFzdFJ1biB8fCBsYXN0UnVuLT5oYXNS
dWJ5VGV4dCgpKSB7Ci0gICAgICAgIGxhc3RSdW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVh
dGVSdWJ5UnVuKHRoaXMpOwotICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKGxhc3RSdW4s
IGJlZm9yZUNoaWxkKTsKKyAgICAgICAgYXV0byBuZXdSdW4gPSBSZW5kZXJSdWJ5UnVuOjpzdGF0
aWNDcmVhdGVSdWJ5UnVuKHRoaXMpOworICAgICAgICBsYXN0UnVuID0gbmV3UnVuLmdldCgpOwor
ICAgICAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKFdURk1vdmUobmV3UnVuKSwgYmVmb3JlQ2hp
bGQpOwogICAgIH0KLSAgICBsYXN0UnVuLT5hZGRDaGlsZChjaGlsZCk7CisgICAgbGFzdFJ1bi0+
YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogfQogCi12b2lkIFJlbmRlclJ1YnlBc0lubGluZTo6
cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IFJlbmRlclJ1YnlBc0lubGluZTo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCiB7CiAg
ICAgLy8gSWYgdGhlIGNoaWxkJ3MgcGFyZW50IGlzICp0aGlzIChtdXN0IGJlIGEgcnVieSBydW4g
b3IgZ2VuZXJhdGVkIGNvbnRlbnQgb3IgYW5vbnltb3VzIGJsb2NrKSwKICAgICAvLyBqdXN0IHVz
ZSB0aGUgbm9ybWFsIHJlbW92ZSBtZXRob2QuCkBAIC0yMTAsMjAgKzIxMywyMCBAQCB2b2lkIFJl
bmRlclJ1YnlBc0lubGluZTo6cmVtb3ZlQ2hpbGQoUmVuCiAjaWZuZGVmIEFTU0VSVF9ESVNBQkxF
RAogICAgICAgICBBU1NFUlQoaXNSdWJ5Q2hpbGRGb3JOb3JtYWxSZW1vdmFsKGNoaWxkKSk7CiAj
ZW5kaWYKLSAgICAgICAgUmVuZGVySW5saW5lOjpyZW1vdmVDaGlsZChjaGlsZCk7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIFJlbmRlcklubGluZTo6dGFrZUNoaWxkKGNoaWxkKTsK
ICAgICB9CiAgICAgLy8gSWYgdGhlIGNoaWxkJ3MgcGFyZW50IGlzIGFuIGFub3ltb3VzIGJsb2Nr
IChtdXN0IGJlIGdlbmVyYXRlZCA6YmVmb3JlLzphZnRlciBjb250ZW50KQogICAgIC8vIGp1c3Qg
dXNlIHRoZSBibG9jaydzIHJlbW92ZSBtZXRob2QuCiAgICAgaWYgKGlzQW5vbnltb3VzUnVieUlu
bGluZUJsb2NrKGNoaWxkLnBhcmVudCgpKSkgewogICAgICAgICBBU1NFUlQoY2hpbGQuaXNCZWZv
cmVDb250ZW50KCkgfHwgY2hpbGQuaXNBZnRlckNvbnRlbnQoKSk7Ci0gICAgICAgIGNoaWxkLnBh
cmVudCgpLT5yZW1vdmVDaGlsZChjaGlsZCk7Ci0gICAgICAgIHJlbW92ZUNoaWxkKCpjaGlsZC5w
YXJlbnQoKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgcGFyZW50ID0gKmNoaWxk
LnBhcmVudCgpOworICAgICAgICBhdXRvIHRha2VuQ2hpbGQgPSBwYXJlbnQudGFrZUNoaWxkKGNo
aWxkKTsKKyAgICAgICAgcGFyZW50LnJlbW92ZUZyb21QYXJlbnRBbmREZXN0cm95KCk7CisgICAg
ICAgIHJldHVybiB0YWtlbkNoaWxkOwogICAgIH0KIAogICAgIC8vIE90aGVyd2lzZSBmaW5kIHRo
ZSBjb250YWluaW5nIHJ1biBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlcmUuCi0gICAgZmluZFJ1YnlS
dW5QYXJlbnQoY2hpbGQpLnJlbW92ZUNoaWxkKGNoaWxkKTsKKyAgICByZXR1cm4gZmluZFJ1YnlS
dW5QYXJlbnQoY2hpbGQpLnRha2VDaGlsZChjaGlsZCk7CiB9CiAKIC8vPT09IHJ1YnkgYXMgYmxv
Y2sgb2JqZWN0ID09PQpAQCAtMjQzLDQzICsyNDYsNDUgQEAgdm9pZCBSZW5kZXJSdWJ5QXNCbG9j
azo6c3R5bGVEaWRDaGFuZ2UoUwogICAgIHByb3BhZ2F0ZVN0eWxlVG9Bbm9ueW1vdXNDaGlsZHJl
bihQcm9wYWdhdGVUb0FsbENoaWxkcmVuKTsKIH0KIAotdm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6
YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkK
K3ZvaWQgUmVuZGVyUnVieUFzQmxvY2s6OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIC8vIEluc2VydCA6YmVm
b3JlIGFuZCA6YWZ0ZXIgY29udGVudCBiZWZvcmUvYWZ0ZXIgdGhlIFJlbmRlclJ1YnlSdW4ocykK
ICAgICBpZiAoY2hpbGQtPmlzQmVmb3JlQ29udGVudCgpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+
aXNJbmxpbmUoKSkgewogICAgICAgICAgICAgLy8gQWRkIGdlbmVyYXRlZCBpbmxpbmUgY29udGVu
dCBub3JtYWxseQotICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChjaGlsZCwg
Zmlyc3RDaGlsZCgpKTsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoV1RG
TW92ZShjaGlsZCksIGZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBXcmFwIG5vbi1pbmxpbmUgY29udGVudCB3aXRoIGFuIGFub255bW91cyBpbmxpbmUtYmxv
Y2suCiAgICAgICAgICAgICBSZW5kZXJCbG9jayogYmVmb3JlQmxvY2sgPSBydWJ5QmVmb3JlQmxv
Y2sodGhpcyk7CiAgICAgICAgICAgICBpZiAoIWJlZm9yZUJsb2NrKSB7Ci0gICAgICAgICAgICAg
ICAgYmVmb3JlQmxvY2sgPSBjcmVhdGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soKnRoaXMpOwot
ICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoYmVmb3JlQmxvY2ssIGZp
cnN0Q2hpbGQoKSk7CisgICAgICAgICAgICAgICAgYXV0byBuZXdCbG9jayA9IGNyZWF0ZUFub255
bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyk7CisgICAgICAgICAgICAgICAgYmVmb3JlQmxvY2sg
PSBuZXdCbG9jay5nZXQoKTsKKyAgICAgICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENo
aWxkKFdURk1vdmUobmV3QmxvY2spLCBmaXJzdENoaWxkKCkpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgYmVmb3JlQmxvY2stPmFkZENoaWxkKGNoaWxkKTsKKyAgICAgICAgICAgIGJlZm9y
ZUJsb2NrLT5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAoY2hpbGQtPmlzQWZ0ZXJDb250ZW50KCkpIHsKICAgICAgICAg
aWYgKGNoaWxkLT5pc0lubGluZSgpKSB7CiAgICAgICAgICAgICAvLyBBZGQgZ2VuZXJhdGVkIGlu
bGluZSBjb250ZW50IG5vcm1hbGx5Ci0gICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENo
aWxkKGNoaWxkKTsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoV1RGTW92
ZShjaGlsZCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV3JhcCBub24taW5s
aW5lIGNvbnRlbnQgd2l0aCBhbiBhbm9ueW1vdXMgaW5saW5lLWJsb2NrLgogICAgICAgICAgICAg
UmVuZGVyQmxvY2sqIGFmdGVyQmxvY2sgPSBydWJ5QWZ0ZXJCbG9jayh0aGlzKTsKICAgICAgICAg
ICAgIGlmICghYWZ0ZXJCbG9jaykgewotICAgICAgICAgICAgICAgIGFmdGVyQmxvY2sgPSBjcmVh
dGVBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2soKnRoaXMpOwotICAgICAgICAgICAgICAgIFJlbmRl
ckJsb2NrRmxvdzo6YWRkQ2hpbGQoYWZ0ZXJCbG9jayk7CisgICAgICAgICAgICAgICAgYXV0byBu
ZXdCbG9jayA9IGNyZWF0ZUFub255bW91c1J1YnlJbmxpbmVCbG9jaygqdGhpcyk7CisgICAgICAg
ICAgICAgICAgYWZ0ZXJCbG9jayA9IG5ld0Jsb2NrLmdldCgpOworICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoV1RGTW92ZShuZXdCbG9jaykpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgYWZ0ZXJCbG9jay0+YWRkQ2hpbGQoY2hpbGQpOworICAgICAgICAgICAg
YWZ0ZXJCbG9jay0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBydWJ5IHJ1biwganVz
dCBhZGQgaXQgbm9ybWFsbHkuCiAgICAgaWYgKGNoaWxkLT5pc1J1YnlSdW4oKSkgewotICAgICAg
ICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAg
IFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjkwLDcgKzI5NSw3IEBAIHZvaWQgUmVuZGVy
UnVieUFzQmxvY2s6OmFkZENoaWxkKFJlbmRlck8KICAgICAgICAgd2hpbGUgKHJ1biAmJiAhcnVu
LT5pc1J1YnlSdW4oKSkKICAgICAgICAgICAgIHJ1biA9IHJ1bi0+cGFyZW50KCk7CiAgICAgICAg
IGlmIChydW4pIHsKLSAgICAgICAgICAgIHJ1bi0+YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxk
KTsKKyAgICAgICAgICAgIHJ1bi0+YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxk
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gYmVmb3JlQ2hpbGQgc2hvdWxkIGFsd2F5cyBoYXZlIGEgcnVuIGFzIHBhcmVu
dCEKQEAgLTMwMiwxMyArMzA3LDE0IEBAIHZvaWQgUmVuZGVyUnVieUFzQmxvY2s6OmFkZENoaWxk
KFJlbmRlck8KICAgICAvLyAoVGhlIFJlbmRlclJ1YnlSdW4gb2JqZWN0IHdpbGwgaGFuZGxlIHRo
ZSBkZXRhaWxzKQogICAgIFJlbmRlclJ1YnlSdW4qIGxhc3RSdW4gPSBsYXN0UnVieVJ1bih0aGlz
KTsKICAgICBpZiAoIWxhc3RSdW4gfHwgbGFzdFJ1bi0+aGFzUnVieVRleHQoKSkgewotICAgICAg
ICBsYXN0UnVuID0gUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVieVJ1bih0aGlzKTsKLSAg
ICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChsYXN0UnVuLCBiZWZvcmVDaGlsZCk7Cisg
ICAgICAgIGF1dG8gbmV3UnVuID0gUmVuZGVyUnVieVJ1bjo6c3RhdGljQ3JlYXRlUnVieVJ1bih0
aGlzKTsKKyAgICAgICAgbGFzdFJ1biA9IG5ld1J1bi5nZXQoKTsKKyAgICAgICAgUmVuZGVyQmxv
Y2tGbG93OjphZGRDaGlsZChXVEZNb3ZlKG5ld1J1biksIGJlZm9yZUNoaWxkKTsKICAgICB9Ci0g
ICAgbGFzdFJ1bi0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGxhc3RSdW4tPmFkZENoaWxkKFdURk1v
dmUoY2hpbGQpKTsKIH0KIAotdm9pZCBSZW5kZXJSdWJ5QXNCbG9jazo6cmVtb3ZlQ2hpbGQoUmVu
ZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclJ1YnlBc0Js
b2NrOjp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAgICAvLyBJZiB0aGUgY2hp
bGQncyBwYXJlbnQgaXMgKnRoaXMgKG11c3QgYmUgYSBydWJ5IHJ1biBvciBnZW5lcmF0ZWQgY29u
dGVudCBvciBhbm9ueW1vdXMgYmxvY2spLAogICAgIC8vIGp1c3QgdXNlIHRoZSBub3JtYWwgcmVt
b3ZlIG1ldGhvZC4KQEAgLTMxNiwyMCArMzIyLDIwIEBAIHZvaWQgUmVuZGVyUnVieUFzQmxvY2s6
OnJlbW92ZUNoaWxkKFJlbmQKICNpZm5kZWYgQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIEFTU0VS
VChpc1J1YnlDaGlsZEZvck5vcm1hbFJlbW92YWwoY2hpbGQpKTsKICNlbmRpZgotICAgICAgICBS
ZW5kZXJCbG9ja0Zsb3c6OnJlbW92ZUNoaWxkKGNoaWxkKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gUmVuZGVyQmxvY2tGbG93Ojp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIH0KICAg
ICAvLyBJZiB0aGUgY2hpbGQncyBwYXJlbnQgaXMgYW4gYW5veW1vdXMgYmxvY2sgKG11c3QgYmUg
Z2VuZXJhdGVkIDpiZWZvcmUvOmFmdGVyIGNvbnRlbnQpCiAgICAgLy8ganVzdCB1c2UgdGhlIGJs
b2NrJ3MgcmVtb3ZlIG1ldGhvZC4KICAgICBpZiAoaXNBbm9ueW1vdXNSdWJ5SW5saW5lQmxvY2so
Y2hpbGQucGFyZW50KCkpKSB7CiAgICAgICAgIEFTU0VSVChjaGlsZC5pc0JlZm9yZUNvbnRlbnQo
KSB8fCBjaGlsZC5pc0FmdGVyQ29udGVudCgpKTsKLSAgICAgICAgY2hpbGQucGFyZW50KCktPnJl
bW92ZUNoaWxkKGNoaWxkKTsKLSAgICAgICAgcmVtb3ZlQ2hpbGQoKmNoaWxkLnBhcmVudCgpKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiBwYXJlbnQgPSAqY2hpbGQucGFyZW50KCk7
CisgICAgICAgIGF1dG8gdGFrZW5DaGlsZCA9IHBhcmVudC50YWtlQ2hpbGQoY2hpbGQpOworICAg
ICAgICBwYXJlbnQucmVtb3ZlRnJvbVBhcmVudEFuZERlc3Ryb3koKTsKKyAgICAgICAgcmV0dXJu
IHRha2VuQ2hpbGQ7CiAgICAgfQogCiAgICAgLy8gT3RoZXJ3aXNlIGZpbmQgdGhlIGNvbnRhaW5p
bmcgcnVuIGFuZCByZW1vdmUgaXQgZnJvbSB0aGVyZS4KLSAgICBmaW5kUnVieVJ1blBhcmVudChj
aGlsZCkucmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIHJldHVybiBmaW5kUnVieVJ1blBhcmVudChj
aGlsZCkudGFrZUNoaWxkKGNoaWxkKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCShyZXZpc2lvbiAyMjI2NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICBSZW5kZXJSdWJ5QXNJbmxpbmUoRWxlbWVudCYs
IFJlbmRlclN0eWxlJiYpOwogICAgIHZpcnR1YWwgflJlbmRlclJ1YnlBc0lubGluZSgpOwogCi0g
ICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZUNoaWxkID0gMCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3Qm
IGNoaWxkKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmpl
Y3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CisgICAg
UmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIG92
ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CkBAIC03NSw4ICs3
NSw4IEBAIHB1YmxpYzoKIAogICAgIEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBk
b3duY2FzdDxFbGVtZW50Pihub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKLSAgICB2b2lkIGFk
ZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAw
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpIG92
ZXJyaWRlOworICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICBSZW5kZXJQdHI8
UmVuZGVyT2JqZWN0PiB0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkgb3ZlcnJpZGU7CiAK
IHByb3RlY3RlZDoKICAgICB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29u
c3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSdWJ5QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAkocmV2aXNpb24gMjIyNjc4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJ1YnlCYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTYsOCArOTYsOSBAQCB2b2lkIFJlbmRlclJ1YnlCYXNlOjptb3ZlSW5saW5lQ2hpbGRyZW4o
CiAgICAgICAgIGlmIChsYXN0Q2hpbGQgJiYgbGFzdENoaWxkLT5pc0Fub255bW91c0Jsb2NrKCkg
JiYgbGFzdENoaWxkLT5jaGlsZHJlbklubGluZSgpKQogICAgICAgICAgICAgdG9CbG9jayA9IGRv
d25jYXN0PFJlbmRlckJsb2NrPihsYXN0Q2hpbGQpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIHRvQmxvY2sgPSB0b0Jhc2UtPmNyZWF0ZUFub255bW91c0Jsb2NrKCk7Ci0gICAgICAgICAg
ICB0b0Jhc2UtPmluc2VydENoaWxkSW50ZXJuYWwodG9CbG9jaywgbnVsbHB0ciwgTm90aWZ5Q2hp
bGRyZW4pOworICAgICAgICAgICAgYXV0byBuZXdUb0Jsb2NrID0gdG9CYXNlLT5jcmVhdGVBbm9u
eW1vdXNCbG9jaygpOworICAgICAgICAgICAgdG9CbG9jayA9IG5ld1RvQmxvY2suZ2V0KCk7Cisg
ICAgICAgICAgICB0b0Jhc2UtPmluc2VydENoaWxkSW50ZXJuYWwoV1RGTW92ZShuZXdUb0Jsb2Nr
KSwgbnVsbHB0ciwgTm90aWZ5Q2hpbGRyZW4pOwogICAgICAgICB9CiAgICAgfQogICAgIC8vIE1v
dmUgb3VyIGlubGluZSBjaGlsZHJlbiBpbnRvIHRoZSB0YXJnZXQgYmxvY2sgd2UgZGV0ZXJtaW5l
ZCBhYm92ZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5j
cHAJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJS
dWJ5UnVuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsOCArOTAsOSBAQCBSZW5kZXJSdWJ5QmFz
ZSogUmVuZGVyUnVieVJ1bjo6cnVieUJhc2VTCiB7CiAgICAgUmVuZGVyUnVieUJhc2UqIGJhc2Ug
PSBydWJ5QmFzZSgpOwogICAgIGlmICghYmFzZSkgewotICAgICAgICBiYXNlID0gY3JlYXRlUnVi
eUJhc2UoKTsKLSAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChiYXNlKTsKKyAgICAg
ICAgYXV0byBuZXdCYXNlID0gY3JlYXRlUnVieUJhc2UoKTsKKyAgICAgICAgYmFzZSA9IG5ld0Jh
c2UuZ2V0KCk7CisgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoV1RGTW92ZShuZXdC
YXNlKSk7CiAgICAgfQogICAgIHJldHVybiBiYXNlOwogfQpAQCAtMTA2LDcgKzEwNyw3IEBAIGJv
b2wgUmVuZGVyUnVieVJ1bjo6aXNDaGlsZEFsbG93ZWQoY29uc3QKICAgICByZXR1cm4gY2hpbGQu
aXNJbmxpbmUoKSB8fCBjaGlsZC5pc1J1YnlUZXh0KCk7CiB9CiAKLXZvaWQgUmVuZGVyUnVieVJ1
bjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGls
ZCkKK3ZvaWQgUmVuZGVyUnVieVJ1bjo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4g
Y2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7CiAgICAgQVNTRVJUKGNoaWxkKTsK
IApAQCAtMTE1LDcgKzExNiw3IEBAIHZvaWQgUmVuZGVyUnVieVJ1bjo6YWRkQ2hpbGQoUmVuZGVy
T2JqZWMKICAgICAgICAgICAgIC8vIFJlbmRlclJ1YnkgaGFzIGFscmVhZHkgYXNjZXJ0YWluZWQg
dGhhdCB3ZSBjYW4gYWRkIHRoZSBjaGlsZCBoZXJlLgogICAgICAgICAgICAgQVNTRVJUKCFoYXNS
dWJ5VGV4dCgpKTsKICAgICAgICAgICAgIC8vIHByZXBlbmQgcnVieSB0ZXh0cyBhcyBmaXJzdCBj
aGlsZAotICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChjaGlsZCwgZmlyc3RD
aGlsZCgpKTsKKyAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQoV1RGTW92ZShj
aGlsZCksIGZpcnN0Q2hpbGQoKSk7CiAgICAgICAgIH0gIGVsc2UgaWYgKGJlZm9yZUNoaWxkLT5p
c1J1YnlUZXh0KCkpIHsKICAgICAgICAgICAgIC8vIE5ldyB0ZXh0IGlzIGluc2VydGVkIGp1c3Qg
YmVmb3JlIGFub3RoZXIuCiAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UgdGhlIG5ldyB0ZXh0
IHRha2VzIHRoZSBwbGFjZSBvZiB0aGUgb2xkIG9uZSwgYW5kCkBAIC0xMjMsMzQgKzEyNCwzNSBA
QCB2b2lkIFJlbmRlclJ1YnlSdW46OmFkZENoaWxkKFJlbmRlck9iamVjCiAgICAgICAgICAgICBB
U1NFUlQoYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOwogICAgICAgICAgICAgUmVuZGVy
RWxlbWVudCogcnVieSA9IHBhcmVudCgpOwogICAgICAgICAgICAgQVNTRVJUKGlzUnVieShydWJ5
KSk7Ci0gICAgICAgICAgICBSZW5kZXJCbG9jayogbmV3UnVuID0gc3RhdGljQ3JlYXRlUnVieVJ1
bihydWJ5KTsKLSAgICAgICAgICAgIHJ1YnktPmFkZENoaWxkKG5ld1J1biwgbmV4dFNpYmxpbmco
KSk7CisgICAgICAgICAgICBhdXRvIG5ld1J1biA9IHN0YXRpY0NyZWF0ZVJ1YnlSdW4ocnVieSk7
CisgICAgICAgICAgICBydWJ5LT5hZGRDaGlsZChXVEZNb3ZlKG5ld1J1biksIG5leHRTaWJsaW5n
KCkpOwogICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgcnVieSB0ZXh0IGFuZCBtb3ZlIHRoZSBv
bGQgb25lIHRvIHRoZSBuZXcgcnVuCiAgICAgICAgICAgICAvLyBOb3RlOiBEb2luZyBpdCBpbiB0
aGlzIG9yZGVyIGFuZCBub3QgdXNpbmcgUmVuZGVyUnVieVJ1bidzIG1ldGhvZHMsCiAgICAgICAg
ICAgICAvLyBpbiBvcmRlciB0byBhdm9pZCBhdXRvbWF0aWMgcmVtb3ZhbCBvZiB0aGUgcnVieSBy
dW4gaW4gY2FzZSB0aGVyZSBpcyBubwogICAgICAgICAgICAgLy8gb3RoZXIgY2hpbGQgYmVzaWRl
cyB0aGUgb2xkIHJ1YnkgdGV4dC4KLSAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hp
bGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAgIFJlbmRlckJsb2NrRmxvdzo6cmVt
b3ZlQ2hpbGQoKmJlZm9yZUNoaWxkKTsKLSAgICAgICAgICAgIG5ld1J1bi0+YWRkQ2hpbGQoYmVm
b3JlQ2hpbGQpOworICAgICAgICAgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChXVEZNb3Zl
KGNoaWxkKSwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgYXV0byB0YWtlbkJlZm9yZUNoaWxk
ID0gUmVuZGVyQmxvY2tGbG93Ojp0YWtlQ2hpbGQoKmJlZm9yZUNoaWxkKTsKKyAgICAgICAgICAg
IG5ld1J1bi0+YWRkQ2hpbGQoV1RGTW92ZSh0YWtlbkJlZm9yZUNoaWxkKSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaGFzUnVieUJhc2UoKSkgewogICAgICAgICAgICAgLy8gSW5zZXJ0aW9uIGJlZm9y
ZSBhIHJ1YnkgYmFzZSBvYmplY3QuCiAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgbmVl
ZCBpbnNlcnQgYSBuZXcgcnVuIGJlZm9yZSB0aGUgY3VycmVudCBvbmUgYW5kIHNwbGl0IHRoZSBi
YXNlLgogICAgICAgICAgICAgUmVuZGVyRWxlbWVudCogcnVieSA9IHBhcmVudCgpOwotICAgICAg
ICAgICAgUmVuZGVyUnVieVJ1biogbmV3UnVuID0gc3RhdGljQ3JlYXRlUnVieVJ1bihydWJ5KTsK
LSAgICAgICAgICAgIHJ1YnktPmFkZENoaWxkKG5ld1J1biwgdGhpcyk7Ci0gICAgICAgICAgICBu
ZXdSdW4tPmFkZENoaWxkKGNoaWxkKTsKLSAgICAgICAgICAgIHJ1YnlCYXNlU2FmZSgpLT5tb3Zl
Q2hpbGRyZW4obmV3UnVuLT5ydWJ5QmFzZVNhZmUoKSwgYmVmb3JlQ2hpbGQpOworICAgICAgICAg
ICAgYXV0byBuZXdSdW4gPSBzdGF0aWNDcmVhdGVSdWJ5UnVuKHJ1YnkpOworICAgICAgICAgICAg
YXV0byYgcnVuID0gKm5ld1J1bjsKKyAgICAgICAgICAgIHJ1YnktPmFkZENoaWxkKFdURk1vdmUo
bmV3UnVuKSwgdGhpcyk7CisgICAgICAgICAgICBydW4uYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkp
OworICAgICAgICAgICAgcnVieUJhc2VTYWZlKCktPm1vdmVDaGlsZHJlbihydW4ucnVieUJhc2VT
YWZlKCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IGNoaWxkIGlzIG5vdCBhIHRleHQgLT4gaW5zZXJ0IGl0IGludG8gdGhlIGJhc2UKICAgICAgICAg
Ly8gKGFwcGVuZCBpdCBpbnN0ZWFkIGlmIGJlZm9yZUNoaWxkIGlzIHRoZSBydWJ5IHRleHQpCiAg
ICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiBiZWZvcmVDaGlsZC0+aXNSdWJ5VGV4dCgpKQogICAg
ICAgICAgICAgYmVmb3JlQ2hpbGQgPSAwOwotICAgICAgICBydWJ5QmFzZVNhZmUoKS0+YWRkQ2hp
bGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAgICAgICAgcnVieUJhc2VTYWZlKCktPmFkZENoaWxk
KFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGlsZCk7CiAgICAgfQogfQogCi12b2lkIFJlbmRlclJ1
YnlSdW46OnJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCitSZW5kZXJQdHI8UmVuZGVy
T2JqZWN0PiBSZW5kZXJSdWJ5UnVuOjp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsK
ICAgICAvLyBJZiB0aGUgY2hpbGQgaXMgYSBydWJ5IHRleHQsIHRoZW4gbWVyZ2UgdGhlIHJ1Ynkg
YmFzZSB3aXRoIHRoZSBiYXNlIG9mCiAgICAgLy8gdGhlIHJpZ2h0IHNpYmxpbmcgcnVuLCBpZiBw
b3NzaWJsZS4KQEAgLTE3MiwzOSArMTc0LDM5IEBAIHZvaWQgUmVuZGVyUnVieVJ1bjo6cmVtb3Zl
Q2hpbGQoUmVuZGVyT2IKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlbmRlckJsb2NrRmxvdzo6
cmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIGF1dG8gdGFrZW5DaGlsZCA9IFJlbmRlckJsb2NrRmxv
dzo6dGFrZUNoaWxkKGNoaWxkKTsKIAogICAgIGlmICghYmVpbmdEZXN0cm95ZWQoKSAmJiAhcmVu
ZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpIHsKICAgICAgICAgLy8gQ2hlY2sgaWYgb3VyIGJhc2Ug
KGlmIGFueSkgaXMgbm93IGVtcHR5LiBJZiBzbywgZGVzdHJveSBpdC4KICAgICAgICAgUmVuZGVy
QmxvY2sqIGJhc2UgPSBydWJ5QmFzZSgpOwogICAgICAgICBpZiAoYmFzZSAmJiAhYmFzZS0+Zmly
c3RDaGlsZCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3c6OnJlbW92ZUNoaWxkKCpi
YXNlKTsKKyAgICAgICAgICAgIGF1dG8gdGFrZW5CYXNlID0gUmVuZGVyQmxvY2tGbG93Ojp0YWtl
Q2hpbGQoKmJhc2UpOwogICAgICAgICAgICAgYmFzZS0+ZGVsZXRlTGluZXMoKTsKLSAgICAgICAg
ICAgIGJhc2UtPmRlc3Ryb3koKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIGFueSBvZiB0
aGUgYWJvdmUgbGVhdmVzIHRoZSBydW4gZW1wdHksIGRlc3Ryb3kgaXQgYXMgd2VsbC4KICAgICAg
ICAgaWYgKCFoYXNSdWJ5VGV4dCgpICYmICFoYXNSdWJ5QmFzZSgpKSB7Ci0gICAgICAgICAgICBw
YXJlbnQoKS0+cmVtb3ZlQ2hpbGQoKnRoaXMpOworICAgICAgICAgICAgYXV0byB0YWtlblRoaXMg
PSBwYXJlbnQoKS0+dGFrZUNoaWxkKCp0aGlzKTsKICAgICAgICAgICAgIGRlbGV0ZUxpbmVzKCk7
Ci0gICAgICAgICAgICBkZXN0cm95KCk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4g
dGFrZW5DaGlsZDsKIH0KIAotUmVuZGVyUnVieUJhc2UqIFJlbmRlclJ1YnlSdW46OmNyZWF0ZVJ1
YnlCYXNlKCkgY29uc3QKK1JlbmRlclB0cjxSZW5kZXJSdWJ5QmFzZT4gUmVuZGVyUnVieVJ1bjo6
Y3JlYXRlUnVieUJhc2UoKSBjb25zdAogewogICAgIGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHls
ZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSgpLCBCTE9DSyk7CiAgICAg
bmV3U3R5bGUuc2V0VGV4dEFsaWduKENFTlRFUik7IC8vIEZJWE1FOiB1c2UgV0VCS0lUX0NFTlRF
Uj8KLSAgICBhdXRvIHJlbmRlcmVyID0gbmV3IFJlbmRlclJ1YnlCYXNlKGRvY3VtZW50KCksIFdU
Rk1vdmUobmV3U3R5bGUpKTsKKyAgICBhdXRvIHJlbmRlcmVyID0gY3JlYXRlUmVuZGVyZXI8UmVu
ZGVyUnVieUJhc2U+KGRvY3VtZW50KCksIFdURk1vdmUobmV3U3R5bGUpKTsKICAgICByZW5kZXJl
ci0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAgICAgcmV0dXJuIHJlbmRlcmVyOwogfQogCi1SZW5kZXJS
dWJ5UnVuKiBSZW5kZXJSdWJ5UnVuOjpzdGF0aWNDcmVhdGVSdWJ5UnVuKGNvbnN0IFJlbmRlck9i
amVjdCogcGFyZW50UnVieSkKK1JlbmRlclB0cjxSZW5kZXJSdWJ5UnVuPiBSZW5kZXJSdWJ5UnVu
OjpzdGF0aWNDcmVhdGVSdWJ5UnVuKGNvbnN0IFJlbmRlck9iamVjdCogcGFyZW50UnVieSkKIHsK
ICAgICBBU1NFUlQoaXNSdWJ5KHBhcmVudFJ1YnkpKTsKLSAgICBhdXRvIHJlbmRlcmVyID0gbmV3
IFJlbmRlclJ1YnlSdW4ocGFyZW50UnVieS0+ZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0
ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkocGFyZW50UnVieS0+c3R5bGUoKSwgSU5MSU5FX0JM
T0NLKSk7CisgICAgYXV0byByZW5kZXJlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclJ1YnlSdW4+
KHBhcmVudFJ1YnktPmRvY3VtZW50KCksIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHls
ZVdpdGhEaXNwbGF5KHBhcmVudFJ1YnktPnN0eWxlKCksIElOTElORV9CTE9DSykpOwogICAgIHJl
bmRlcmVyLT5pbml0aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gcmVuZGVyZXI7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUnVieVJ1bi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgJKHJldmlzaW9uIDIyMjY3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSdWJ5UnVuLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU2LDE0ICs1NiwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBsYXlvdXRCbG9jayhi
b29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUhlaWdodCA9IDApIG92ZXJyaWRl
OwogCiAgICAgYm9vbCBpc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBS
ZW5kZXJTdHlsZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotICAg
IHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRD
aGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCA9IDApIG92ZXJyaWRlOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGls
ZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKIAogICAgIFJlbmRlckJsb2NrKiBmaXJzdExpbmVC
bG9jaygpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBnZXRPdmVyaGFuZyhib29sIGZpcnN0
TGluZSwgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBSZW5kZXJPYmplY3QqIGVuZFJlbmRl
cmVyLCBmbG9hdCYgc3RhcnRPdmVyaGFuZywgZmxvYXQmIGVuZE92ZXJoYW5nKSBjb25zdDsKIAot
ICAgIHN0YXRpYyBSZW5kZXJSdWJ5UnVuKiBzdGF0aWNDcmVhdGVSdWJ5UnVuKGNvbnN0IFJlbmRl
ck9iamVjdCogcGFyZW50UnVieSk7CisgICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJSdWJ5UnVu
PiBzdGF0aWNDcmVhdGVSdWJ5UnVuKGNvbnN0IFJlbmRlck9iamVjdCogcGFyZW50UnVieSk7CiAg
ICAgCiAgICAgdm9pZCB1cGRhdGVQcmlvckNvbnRleHRGcm9tQ2FjaGVkQnJlYWtJdGVyYXRvcihM
YXp5TGluZUJyZWFrSXRlcmF0b3ImKSBjb25zdDsKICAgICB2b2lkIHNldENhY2hlZFByaW9yQ2hh
cmFjdGVycyhVQ2hhciBsYXN0LCBVQ2hhciBzZWNvbmRUb0xhc3QpCkBAIC03NCw3ICs3NCw3IEBA
IHB1YmxpYzoKICAgICBib29sIGNhbkJyZWFrQmVmb3JlKGNvbnN0IExhenlMaW5lQnJlYWtJdGVy
YXRvciYpIGNvbnN0OwogICAgIAogcHJvdGVjdGVkOgotICAgIFJlbmRlclJ1YnlCYXNlKiBjcmVh
dGVSdWJ5QmFzZSgpIGNvbnN0OworICAgIFJlbmRlclB0cjxSZW5kZXJSdWJ5QmFzZT4gY3JlYXRl
UnVieUJhc2UoKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBib29sIGlzUnVieVJ1bigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMjIyNjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCByZXNldFNlY3Rpb25Qb2ludGVySWYKICAgICAgICAgcHRyID0g
MDsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwg
UmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJl
bmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQog
ewogICAgIGJvb2wgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9ICFjaGlsZC0+aXNPdXRPZkZsb3dQ
b3NpdGlvbmVkKCk7CiAKQEAgLTE1MCwxOCArMTUwLDE4IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFk
ZENoaWxkKFJlbmRlck9iamVjdCoKICAgICAgICAgICAgIGNhc2UgVEFCTEVfSEVBREVSX0dST1VQ
OgogICAgICAgICAgICAgICAgIHJlc2V0U2VjdGlvblBvaW50ZXJJZk5vdEJlZm9yZShtX2hlYWQs
IGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgICAgICBpZiAoIW1faGVhZCkgewotICAgICAgICAg
ICAgICAgICAgICBtX2hlYWQgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9oZWFkID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9u
PihjaGlsZC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgcmVzZXRTZWN0aW9uUG9pbnRlcklmTm90QmVmb3JlKG1fZmlyc3RCb2R5LCBiZWZvcmVD
aGlsZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbV9maXJzdEJvZHkpIAotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9maXJzdEJvZHkgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+
KGNoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZmlyc3RCb2R5ID0gZG93bmNhc3Q8
UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZC5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIHdyYXBJbkFub255bW91c1NlY3Rpb24gPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVEFCTEVfRk9PVEVSX0dST1VQOgogICAgICAg
ICAgICAgICAgIHJlc2V0U2VjdGlvblBvaW50ZXJJZk5vdEJlZm9yZShtX2Zvb3QsIGJlZm9yZUNo
aWxkKTsKICAgICAgICAgICAgICAgICBpZiAoIW1fZm9vdCkgewotICAgICAgICAgICAgICAgICAg
ICBtX2Zvb3QgPSBkb3duY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KGNoaWxkKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV9mb290ID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZC5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIHdyYXBJbkFub255bW91c1NlY3Rpb24gPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTY5
LDcgKzE2OSw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCoKICAg
ICAgICAgICAgIGNhc2UgVEFCTEVfUk9XX0dST1VQOgogICAgICAgICAgICAgICAgIHJlc2V0U2Vj
dGlvblBvaW50ZXJJZk5vdEJlZm9yZShtX2ZpcnN0Qm9keSwgYmVmb3JlQ2hpbGQpOwogICAgICAg
ICAgICAgICAgIGlmICghbV9maXJzdEJvZHkpCi0gICAgICAgICAgICAgICAgICAgIG1fZmlyc3RC
b2R5ID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZCk7CisgICAgICAgICAgICAg
ICAgICAgIG1fZmlyc3RCb2R5ID0gZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPihjaGlsZC5n
ZXQoKSk7CiAgICAgICAgICAgICAgICAgd3JhcEluQW5vbnltb3VzU2VjdGlvbiA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTE4NywxOSAr
MTg3LDE5IEBAIHZvaWQgUmVuZGVyVGFibGU6OmFkZENoaWxkKFJlbmRlck9iamVjdCoKICAgICAg
ICAgaWYgKGJlZm9yZUNoaWxkICYmIGJlZm9yZUNoaWxkLT5wYXJlbnQoKSAhPSB0aGlzKQogICAg
ICAgICAgICAgYmVmb3JlQ2hpbGQgPSBzcGxpdEFub255bW91c0JveGVzQXJvdW5kQ2hpbGQoYmVm
b3JlQ2hpbGQpOwogCi0gICAgICAgIFJlbmRlckJveDo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNo
aWxkKTsKKyAgICAgICAgUmVuZGVyQm94OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3Jl
Q2hpbGQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFiZWZvcmVDaGlsZCAm
JiBpczxSZW5kZXJUYWJsZVNlY3Rpb24+KGxhc3RDaGlsZCgpKSAmJiBsYXN0Q2hpbGQoKS0+aXNB
bm9ueW1vdXMoKSAmJiAhbGFzdENoaWxkKCktPmlzQmVmb3JlQ29udGVudCgpKSB7Ci0gICAgICAg
IGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oKmxhc3RDaGlsZCgpKS5hZGRDaGlsZChjaGls
ZCk7CisgICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlU2VjdGlvbj4oKmxhc3RDaGlsZCgpKS5h
ZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZiAoYmVmb3JlQ2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc0Fub255bW91cygpICYmIGJlZm9yZUNo
aWxkLT5wYXJlbnQoKSA9PSB0aGlzKSB7CiAgICAgICAgIFJlbmRlck9iamVjdCogc2VjdGlvbiA9
IGJlZm9yZUNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgaWYgKGlzPFJlbmRlclRh
YmxlU2VjdGlvbj4oc2VjdGlvbikgJiYgc2VjdGlvbi0+aXNBbm9ueW1vdXMoKSkgewotICAgICAg
ICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqc2VjdGlvbikuYWRkQ2hpbGQoY2hp
bGQpOworICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVTZWN0aW9uPigqc2VjdGlvbiku
YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgfQpAQCAtMjExLDE2ICsyMTEsMTcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YWRkQ2hpbGQo
UmVuZGVyT2JqZWN0KgogICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24mIHNlY3Rpb24gPSBkb3du
Y2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24+KCpsYXN0Qm94KTsKICAgICAgICAgaWYgKGJlZm9yZUNo
aWxkID09ICZzZWN0aW9uKQogICAgICAgICAgICAgYmVmb3JlQ2hpbGQgPSBzZWN0aW9uLmZpcnN0
Um93KCk7Ci0gICAgICAgIHNlY3Rpb24uYWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKKyAg
ICAgICAgc2VjdGlvbi5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGJlZm9yZUNoaWxkICYmICFpczxSZW5kZXJU
YWJsZVNlY3Rpb24+KCpiZWZvcmVDaGlsZCkgJiYgYmVmb3JlQ2hpbGQtPnN0eWxlKCkuZGlzcGxh
eSgpICE9IFRBQkxFX0NBUFRJT04gJiYgYmVmb3JlQ2hpbGQtPnN0eWxlKCkuZGlzcGxheSgpICE9
IFRBQkxFX0NPTFVNTl9HUk9VUCkKICAgICAgICAgYmVmb3JlQ2hpbGQgPSBudWxscHRyOwogCi0g
ICAgYXV0byBzZWN0aW9uID0gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVBbm9ueW1vdXNXaXRo
UGFyZW50UmVuZGVyZXIoKnRoaXMpLnJlbGVhc2UoKTsKLSAgICBhZGRDaGlsZChzZWN0aW9uLCBi
ZWZvcmVDaGlsZCk7Ci0gICAgc2VjdGlvbi0+YWRkQ2hpbGQoY2hpbGQpOworICAgIGF1dG8gbmV3
U2VjdGlvbiA9IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJl
bmRlcmVyKCp0aGlzKTsKKyAgICBhdXRvJiBzZWN0aW9uID0gKm5ld1NlY3Rpb247CisgICAgYWRk
Q2hpbGQoV1RGTW92ZShuZXdTZWN0aW9uKSwgYmVmb3JlQ2hpbGQpOworICAgIHNlY3Rpb24uYWRk
Q2hpbGQoV1RGTW92ZShjaGlsZCkpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlOjphZGRDYXB0aW9u
KGNvbnN0IFJlbmRlclRhYmxlQ2FwdGlvbiogY2FwdGlvbikKQEAgLTE1NzcsMTQgKzE1NzgsMTQg
QEAgYm9vbCBSZW5kZXJUYWJsZTo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlPiBSZW5kZXJUYWJsZTo6Y3Jl
YXRlVGFibGVXaXRoU3R5bGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpCitSZW5kZXJQdHI8UmVuZGVyVGFibGU+IFJlbmRlclRhYmxlOjpjcmVhdGVUYWJsZVdp
dGhTdHlsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsK
LSAgICBhdXRvIHRhYmxlID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJUYWJsZT4oZG9jdW1lbnQs
IFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlLCBzdHls
ZS5kaXNwbGF5KCkgPT0gSU5MSU5FID8gSU5MSU5FX1RBQkxFIDogVEFCTEUpKTsKKyAgICBhdXRv
IHRhYmxlID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGFibGU+KGRvY3VtZW50LCBSZW5kZXJTdHls
ZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwgc3R5bGUuZGlzcGxheSgp
ID09IElOTElORSA/IElOTElORV9UQUJMRSA6IFRBQkxFKSk7CiAgICAgdGFibGUtPmluaXRpYWxp
emVTdHlsZSgpOwogICAgIHJldHVybiB0YWJsZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clRhYmxlPiBSZW5kZXJUYWJsZTo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNv
bnN0IFJlbmRlckVsZW1lbnQmIHBhcmVudCkKK1JlbmRlclB0cjxSZW5kZXJUYWJsZT4gUmVuZGVy
VGFibGU6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVt
ZW50JiBwYXJlbnQpCiB7CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlOjpjcmVhdGVUYWJsZVdpdGhT
dHlsZShwYXJlbnQuZG9jdW1lbnQoKSwgcGFyZW50LnN0eWxlKCkpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYs
NyArMTI2LDcgQEAgcHVibGljOgogICAgIExheW91dFVuaXQgY2FsY0JvcmRlckVuZCgpIGNvbnN0
OwogICAgIHZvaWQgcmVjYWxjQm9yZGVyc0luUm93RGlyZWN0aW9uKCk7CiAKLSAgICB2b2lkIGFk
ZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQgPSAw
KSBmaW5hbDsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgZmluYWw7CiAKICAgICBzdHJ1Y3QgQ29s
dW1uU3RydWN0IHsKICAgICAgICAgZXhwbGljaXQgQ29sdW1uU3RydWN0KHVuc2lnbmVkIGluaXRp
YWxTcGFuID0gMSkKQEAgLTI1MCw4ICsyNTAsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZWNh
bGNTZWN0aW9ucygpOwogICAgIH0KIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
VGFibGU+IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJFbGVt
ZW50Jik7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gY3JlYXRlQW5vbnltb3VzQm94
V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgc3RhdGljIFJlbmRlclB0cjxSZW5kZXJUYWJsZT4gY3JlYXRlQW5vbnltb3VzV2l0aFBh
cmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlckVsZW1lbnQmKTsKKyAgICBSZW5kZXJQdHI8UmVuZGVy
Qm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJl
bmRlcmVyKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGNvbnN0IEJvcmRlclZhbHVlJiB0YWJsZVN0
YXJ0Qm9yZGVyQWRqb2luaW5nQ2VsbChjb25zdCBSZW5kZXJUYWJsZUNlbGwmKSBjb25zdDsKICAg
ICBjb25zdCBCb3JkZXJWYWx1ZSYgdGFibGVFbmRCb3JkZXJBZGpvaW5pbmdDZWxsKGNvbnN0IFJl
bmRlclRhYmxlQ2VsbCYpIGNvbnN0OwpAQCAtMjczLDcgKzI3Myw3IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIHNpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkgZmluYWw7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZT4gY3JlYXRlVGFibGVXaXRoU3R5
bGUoRG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIHN0YXRpYyBSZW5kZXJQdHI8
UmVuZGVyVGFibGU+IGNyZWF0ZVRhYmxlV2l0aFN0eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVy
U3R5bGUmKTsKIAogICAgIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiAiUmVuZGVyVGFibGUiOyB9CiAKQEAgLTM4MCw3ICszODAsNyBAQCBpbmxpbmUgUmVu
ZGVyVGFibGVTZWN0aW9uKiBSZW5kZXJUYWJsZTo6CiAKIGlubGluZSBib29sIGlzRGlyZWN0aW9u
U2FtZShjb25zdCBSZW5kZXJCb3gqIHRhYmxlSXRlbSwgY29uc3QgUmVuZGVyQm94KiBvdGhlclRh
YmxlSXRlbSkgeyByZXR1cm4gdGFibGVJdGVtICYmIG90aGVyVGFibGVJdGVtID8gdGFibGVJdGVt
LT5zdHlsZSgpLmRpcmVjdGlvbigpID09IG90aGVyVGFibGVJdGVtLT5zdHlsZSgpLmRpcmVjdGlv
bigpIDogdHJ1ZTsgfQogCi1pbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gUmVuZGVy
VGFibGU6OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYg
cmVuZGVyZXIpIGNvbnN0CitpbmxpbmUgUmVuZGVyUHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGU6
OmNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYgcmVuZGVy
ZXIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlOjpjcmVhdGVUYWJsZVdpdGhTdHls
ZShyZW5kZXJlci5kb2N1bWVudCgpLCByZW5kZXJlci5zdHlsZSgpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAyMjI2
NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM2NSwxNCArMTM2NSwxNCBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6
c2Nyb2xsYmFyc0NoYW5nZWQoCiAgICAgICAgIHNldEludHJpbnNpY1BhZGRpbmdBZnRlcihpbnRy
aW5zaWNQYWRkaW5nQWZ0ZXIoKSAtIHNjcm9sbGJhckhlaWdodCk7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJUYWJsZUNlbGw+IFJlbmRlclRhYmxlQ2VsbDo6Y3JlYXRlVGFibGVDZWxsV2l0
aFN0eWxlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQorUmVu
ZGVyUHRyPFJlbmRlclRhYmxlQ2VsbD4gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVUYWJsZUNlbGxX
aXRoU3R5bGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7
Ci0gICAgYXV0byBjZWxsID0gc3RkOjptYWtlX3VuaXF1ZTxSZW5kZXJUYWJsZUNlbGw+KGRvY3Vt
ZW50LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwg
VEFCTEVfQ0VMTCkpOworICAgIGF1dG8gY2VsbCA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlclRhYmxl
Q2VsbD4oZG9jdW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNw
bGF5KHN0eWxlLCBUQUJMRV9DRUxMKSk7CiAgICAgY2VsbC0+aW5pdGlhbGl6ZVN0eWxlKCk7CiAg
ICAgcmV0dXJuIGNlbGw7CiB9CiAKLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZUNlbGw+IFJl
bmRlclRhYmxlQ2VsbDo6Y3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJl
bmRlclRhYmxlUm93JiBwYXJlbnQpCitSZW5kZXJQdHI8UmVuZGVyVGFibGVDZWxsPiBSZW5kZXJU
YWJsZUNlbGw6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJU
YWJsZVJvdyYgcGFyZW50KQogewogICAgIHJldHVybiBSZW5kZXJUYWJsZUNlbGw6OmNyZWF0ZVRh
YmxlQ2VsbFdpdGhTdHlsZShwYXJlbnQuZG9jdW1lbnQoKSwgcGFyZW50LnN0eWxlKCkpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkocmV2aXNp
b24gMjIyNjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDggQEAgcHVibGljOgogICAgIGJvb2wgY2Vs
bFdpZHRoQ2hhbmdlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFdpZHRoQ2hhbmdlZDsgfQogICAg
IHZvaWQgc2V0Q2VsbFdpZHRoQ2hhbmdlZChib29sIGIgPSB0cnVlKSB7IG1fY2VsbFdpZHRoQ2hh
bmdlZCA9IGI7IH0KIAotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVDZWxs
PiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVSb3cm
KTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRo
U2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGF0aWMg
UmVuZGVyUHRyPFJlbmRlclRhYmxlQ2VsbD4gY3JlYXRlQW5vbnltb3VzV2l0aFBhcmVudFJlbmRl
cmVyKGNvbnN0IFJlbmRlclRhYmxlUm93Jik7CisgICAgUmVuZGVyUHRyPFJlbmRlckJveD4gY3Jl
YXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JikgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdW5pZnkgd2hpY2ggdGFi
bGUgcGFydCdzIHN0eWxlIHdlIHVzZSBmb3IgY29tcHV0aW5nIGRpcmVjdGlvbiBhbmQKICAgICAv
LyB3cml0aW5nIG1vZGUuIFdyaXRpbmcgbW9kZXMgYXJlIG5vdCBhbGxvd2VkIG9uIHJvdyBncm91
cCBhbmQgcm93IGJ1dCBkaXJlY3Rpb24gaXMuCkBAIC0xMzgsNyArMTM4LDcgQEAgcHJvdGVjdGVk
OgogICAgIHZvaWQgY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKSBvdmVycmlkZTsKIAog
cHJpdmF0ZToKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlQ2VsbD4gY3Jl
YXRlVGFibGVDZWxsV2l0aFN0eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAg
ICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclRhYmxlQ2VsbD4gY3JlYXRlVGFibGVDZWxsV2l0aFN0
eWxlKERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKIAogICAgIGNvbnN0IGNoYXIqIHJl
bmRlck5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAoaXNBbm9ueW1vdXMoKSB8fCBpc1Bz
ZXVkb0VsZW1lbnQoKSkgPyAiUmVuZGVyVGFibGVDZWxsIChhbm9ueW1vdXMpIiA6ICJSZW5kZXJU
YWJsZUNlbGwiOyB9CiAKQEAgLTM3NSw3ICszNzUsNyBAQCBpbmxpbmUgdm9pZCBSZW5kZXJUYWJs
ZUNlbGw6OmludmFsaWRhdGVICiAgICAgbV9oYXNFbXB0eUNvbGxhcHNlZEVuZEJvcmRlciA9IGZh
bHNlOwogfQogCi1pbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGVD
ZWxsOjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJl
bmRlcmVyKSBjb25zdAoraW5saW5lIFJlbmRlclB0cjxSZW5kZXJCb3g+IFJlbmRlclRhYmxlQ2Vs
bDo6Y3JlYXRlQW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5k
ZXJlcikgY29uc3QKIHsKICAgICByZXR1cm4gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVUYWJsZUNl
bGxXaXRoU3R5bGUocmVuZGVyZXIuZG9jdW1lbnQoKSwgcmVuZGVyZXIuc3R5bGUoKSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlz
aW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw3ICsxMDYsNyBAQCBjb25zdCBCb3JkZXJWYWx1ZSYg
UmVuZGVyVGFibGVSb3c6OmJvcmRlCiAgICAgcmV0dXJuIHN0eWxlKCkuYm9yZGVyRW5kKCk7CiB9
CiAKLXZvaWQgUmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCit2b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChS
ZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkK
IHsKICAgICBpZiAoIWlzPFJlbmRlclRhYmxlQ2VsbD4oKmNoaWxkKSkgewogICAgICAgICBSZW5k
ZXJPYmplY3QqIGxhc3QgPSBiZWZvcmVDaGlsZDsKQEAgLTExNiwxNCArMTE2LDE0IEBAIHZvaWQg
UmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamUKICAgICAgICAgICAgIFJlbmRlclRh
YmxlQ2VsbCYgY2VsbCA9IGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKmxhc3QpOwogICAgICAg
ICAgICAgaWYgKGJlZm9yZUNoaWxkID09ICZjZWxsKQogICAgICAgICAgICAgICAgIGJlZm9yZUNo
aWxkID0gY2VsbC5maXJzdENoaWxkKCk7Ci0gICAgICAgICAgICBjZWxsLmFkZENoaWxkKGNoaWxk
LCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICBjZWxsLmFkZENoaWxkKFdURk1vdmUoY2hpbGQp
LCBiZWZvcmVDaGlsZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAg
ICBpZiAoYmVmb3JlQ2hpbGQgJiYgIWJlZm9yZUNoaWxkLT5pc0Fub255bW91cygpICYmIGJlZm9y
ZUNoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIGNl
bGwgPSBiZWZvcmVDaGlsZC0+cHJldmlvdXNTaWJsaW5nKCk7CiAgICAgICAgICAgICBpZiAoaXM8
UmVuZGVyVGFibGVDZWxsPihjZWxsKSAmJiBjZWxsLT5pc0Fub255bW91cygpKSB7Ci0gICAgICAg
ICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVDZWxsPigqY2VsbCkuYWRkQ2hpbGQoY2hpbGQp
OworICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlQ2VsbD4oKmNlbGwpLmFkZENo
aWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KQEAgLTEzMiwyMSArMTMyLDIzIEBAIHZvaWQgUmVuZGVyVGFibGVSb3c6
OmFkZENoaWxkKFJlbmRlck9iamUKICAgICAgICAgaWYgKGxhc3QgJiYgbGFzdC0+cGFyZW50KCkg
JiYgbGFzdC0+cGFyZW50KCktPmlzQW5vbnltb3VzKCkgJiYgIWxhc3QtPnBhcmVudCgpLT5pc0Jl
Zm9yZU9yQWZ0ZXJDb250ZW50KCkpIHsKICAgICAgICAgICAgIC8vIElmIGJlZm9yZUNoaWxkIGlz
IGluc2lkZSBhbiBhbm9ueW1vdXMgY2VsbCwgaW5zZXJ0IGludG8gdGhlIGNlbGwuCiAgICAgICAg
ICAgICBpZiAoIWlzPFJlbmRlclRhYmxlQ2VsbD4oKmxhc3QpKSB7Ci0gICAgICAgICAgICAgICAg
bGFzdC0+cGFyZW50KCktPmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAg
ICAgICAgbGFzdC0+cGFyZW50KCktPmFkZENoaWxkKFdURk1vdmUoY2hpbGQpLCBiZWZvcmVDaGls
ZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ly8gSWYgYmVmb3JlQ2hpbGQgaXMgaW5zaWRlIGFuIGFub255bW91cyByb3csIGluc2VydCBpbnRv
IHRoZSByb3cuCiAgICAgICAgICAgICBhdXRvJiBwYXJlbnQgPSAqbGFzdC0+cGFyZW50KCk7CiAg
ICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGFibGVSb3c+KHBhcmVudCkpIHsKLSAgICAgICAgICAg
ICAgICBhdXRvKiBjZWxsID0gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVBbm9ueW1vdXNXaXRoUGFy
ZW50UmVuZGVyZXIoKnRoaXMpLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICBwYXJlbnQuYWRk
Q2hpbGQoY2VsbCwgYmVmb3JlQ2hpbGQpOwotICAgICAgICAgICAgICAgIGNlbGwtPmFkZENoaWxk
KGNoaWxkKTsKKyAgICAgICAgICAgICAgICBhdXRvIG5ld0NlbGwgPSBSZW5kZXJUYWJsZUNlbGw6
OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcyk7CisgICAgICAgICAgICAg
ICAgYXV0byYgY2VsbCA9ICpuZXdDZWxsOworICAgICAgICAgICAgICAgIHBhcmVudC5hZGRDaGls
ZChXVEZNb3ZlKG5ld0NlbGwpLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICAgICAgY2VsbC5h
ZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGF1dG8qIGNlbGwgPSBSZW5kZXJUYWJsZUNlbGw6
OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcykucmVsZWFzZSgpOwotICAg
ICAgICBhZGRDaGlsZChjZWxsLCBiZWZvcmVDaGlsZCk7Ci0gICAgICAgIGNlbGwtPmFkZENoaWxk
KGNoaWxkKTsKKyAgICAgICAgYXV0byBuZXdDZWxsID0gUmVuZGVyVGFibGVDZWxsOjpjcmVhdGVB
bm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoKnRoaXMpOworICAgICAgICBhdXRvJiBjZWxsID0g
Km5ld0NlbGw7CisgICAgICAgIGFkZENoaWxkKFdURk1vdmUobmV3Q2VsbCksIGJlZm9yZUNoaWxk
KTsKKyAgICAgICAgY2VsbC5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9IAogCkBAIC0xNjAsNyArMTYyLDcgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRk
Q2hpbGQoUmVuZGVyT2JqZQogICAgICAgICBzZWN0aW9uLT5hZGRDZWxsKCZjZWxsLCB0aGlzKTsK
IAogICAgIEFTU0VSVCghYmVmb3JlQ2hpbGQgfHwgaXM8UmVuZGVyVGFibGVDZWxsPigqYmVmb3Jl
Q2hpbGQpKTsKLSAgICBSZW5kZXJCb3g6OmFkZENoaWxkKCZjZWxsLCBiZWZvcmVDaGlsZCk7Cisg
ICAgUmVuZGVyQm94OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogCiAg
ICAgaWYgKGJlZm9yZUNoaWxkIHx8IG5leHRSb3coKSkKICAgICAgICAgc2VjdGlvbigpLT5zZXRO
ZWVkc0NlbGxSZWNhbGMoKTsKQEAgLTI3MCwxNCArMjcyLDE0IEBAIHZvaWQgUmVuZGVyVGFibGVS
b3c6OmltYWdlQ2hhbmdlZChXcmFwcGUKICAgICByZXBhaW50KCk7CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJUYWJsZVJvdz4gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZVRhYmxlUm93V2l0aFN0
eWxlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQorUmVuZGVy
UHRyPFJlbmRlclRhYmxlUm93PiBSZW5kZXJUYWJsZVJvdzo6Y3JlYXRlVGFibGVSb3dXaXRoU3R5
bGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAg
YXV0byByb3cgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclRhYmxlUm93Pihkb2N1bWVudCwgUmVu
ZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0aERpc3BsYXkoc3R5bGUsIFRBQkxFX1JP
VykpOworICAgIGF1dG8gcm93ID0gY3JlYXRlUmVuZGVyZXI8UmVuZGVyVGFibGVSb3c+KGRvY3Vt
ZW50LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShzdHlsZSwg
VEFCTEVfUk9XKSk7CiAgICAgcm93LT5pbml0aWFsaXplU3R5bGUoKTsKICAgICByZXR1cm4gcm93
OwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVSb3c+IFJlbmRlclRhYmxlUm93Ojpj
cmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9u
JiBwYXJlbnQpCitSZW5kZXJQdHI8UmVuZGVyVGFibGVSb3c+IFJlbmRlclRhYmxlUm93OjpjcmVh
dGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uJiBw
YXJlbnQpCiB7CiAgICAgcmV0dXJuIFJlbmRlclRhYmxlUm93OjpjcmVhdGVUYWJsZVJvd1dpdGhT
dHlsZShwYXJlbnQuZG9jdW1lbnQoKSwgcGFyZW50LnN0eWxlKCkpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmgJKHJldmlzaW9uIDIyMjY3OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw4ICs0Niw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcGFpbnRPdXRsaW5lRm9yUm93
SWZOZWVkZWQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyVGFibGVSb3c+IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRS
ZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24mKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJC
b3gmKSBjb25zdCBvdmVycmlkZTsKKyAgICBzdGF0aWMgUmVuZGVyUHRyPFJlbmRlclRhYmxlUm93
PiBjcmVhdGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGVTZWN0
aW9uJik7CisgICAgUmVuZGVyUHRyPFJlbmRlckJveD4gY3JlYXRlQW5vbnltb3VzQm94V2l0aFNh
bWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNl
dFJvd0luZGV4KHVuc2lnbmVkKTsKICAgICBib29sIHJvd0luZGV4V2FzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9yb3dJbmRleCAhPSB1bnNldFJvd0luZGV4OyB9CkBAIC01OCwxNCArNTgsMTQgQEAg
cHVibGljOgogICAgIGNvbnN0IEJvcmRlclZhbHVlJiBib3JkZXJBZGpvaW5pbmdTdGFydENlbGwo
Y29uc3QgUmVuZGVyVGFibGVDZWxsJikgY29uc3Q7CiAgICAgY29uc3QgQm9yZGVyVmFsdWUmIGJv
cmRlckFkam9pbmluZ0VuZENlbGwoY29uc3QgUmVuZGVyVGFibGVDZWxsJikgY29uc3Q7CiAKLSAg
ICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQgPSAwKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJP
YmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCkgb3ZlcnJpZGU7CiAK
ICAgICBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3Vs
dCYsIGNvbnN0IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5
b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uKSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgZGVzdHJveUFuZENvbGxhcHNlQW5vbnltb3VzU2libGluZ1Jvd3MoKTsKIAogcHJp
dmF0ZToKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlUm93PiBjcmVhdGVU
YWJsZVJvd1dpdGhTdHlsZShEb2N1bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgc3Rh
dGljIFJlbmRlclB0cjxSZW5kZXJUYWJsZVJvdz4gY3JlYXRlVGFibGVSb3dXaXRoU3R5bGUoRG9j
dW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwogCiAgICAgY29uc3QgY2hhciogcmVuZGVyTmFt
ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIChpc0Fub255bW91cygpIHx8IGlzUHNldWRvRWxl
bWVudCgpKSA/ICJSZW5kZXJUYWJsZVJvdyAoYW5vbnltb3VzKSIgOiAiUmVuZGVyVGFibGVSb3ci
OyB9CiAKQEAgLTE1MCw3ICsxNTAsNyBAQCBpbmxpbmUgUmVuZGVyVGFibGVSb3cqIFJlbmRlclRh
YmxlU2VjdGlvCiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRhYmxlUm93PihSZW5kZXJCb3g6
Omxhc3RDaGlsZCgpKTsKIH0KIAotaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3g+IFJl
bmRlclRhYmxlUm93OjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5k
ZXJCb3gmIHJlbmRlcmVyKSBjb25zdAoraW5saW5lIFJlbmRlclB0cjxSZW5kZXJCb3g+IFJlbmRl
clRhYmxlUm93OjpjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJC
b3gmIHJlbmRlcmVyKSBjb25zdAogewogICAgIHJldHVybiBSZW5kZXJUYWJsZVJvdzo6Y3JlYXRl
VGFibGVSb3dXaXRoU3R5bGUocmVuZGVyZXIuZG9jdW1lbnQoKSwgcmVuZGVyZXIuc3R5bGUoKSk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcAkocmV2aXNpb24gMjIyNjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsNyBAQCB2
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6d2lsbEJlUmVtb3ZlZEZyCiAgICAgc2V0TmVlZHNDZWxs
UmVjYWxjKCk7CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjphZGRDaGlsZChSZW5kZXJP
YmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKQogewogICAgIGlmICghaXM8UmVuZGVyVGFibGVSb3c+KCpjaGls
ZCkpIHsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBsYXN0ID0gYmVmb3JlQ2hpbGQ7CkBAIC0xMjgs
MTQgKzEyOCwxNCBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6YWRkQ2hpbGQoUmVuZGVyCiAg
ICAgICAgICAgICBSZW5kZXJUYWJsZVJvdyYgcm93ID0gZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+
KCpsYXN0KTsKICAgICAgICAgICAgIGlmIChiZWZvcmVDaGlsZCA9PSAmcm93KQogICAgICAgICAg
ICAgICAgIGJlZm9yZUNoaWxkID0gcm93LmZpcnN0Q2VsbCgpOwotICAgICAgICAgICAgcm93LmFk
ZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAgICAgICByb3cuYWRkQ2hpbGQoV1RG
TW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIGlmIChiZWZvcmVDaGlsZCAmJiAhYmVmb3JlQ2hpbGQtPmlzQW5vbnltb3Vz
KCkgJiYgYmVmb3JlQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpIHsKICAgICAgICAgICAgIFJlbmRl
ck9iamVjdCogcm93ID0gYmVmb3JlQ2hpbGQtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICAg
ICAgaWYgKGlzPFJlbmRlclRhYmxlUm93Pihyb3cpICYmIHJvdy0+aXNBbm9ueW1vdXMoKSkgewot
ICAgICAgICAgICAgICAgIGRvd25jYXN0PFJlbmRlclRhYmxlUm93Pigqcm93KS5hZGRDaGlsZChj
aGlsZCk7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCpyb3cpLmFk
ZENoaWxkKFdURk1vdmUoY2hpbGQpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTE0NiwxMyArMTQ2LDE0IEBAIHZvaWQgUmVuZGVyVGFibGVT
ZWN0aW9uOjphZGRDaGlsZChSZW5kZXIKICAgICAgICAgd2hpbGUgKGxhc3RCb3ggJiYgbGFzdEJv
eC0+cGFyZW50KCktPmlzQW5vbnltb3VzKCkgJiYgIWlzPFJlbmRlclRhYmxlUm93PigqbGFzdEJv
eCkpCiAgICAgICAgICAgICBsYXN0Qm94ID0gbGFzdEJveC0+cGFyZW50KCk7CiAgICAgICAgIGlm
IChsYXN0Qm94ICYmIGxhc3RCb3gtPmlzQW5vbnltb3VzKCkgJiYgIWxhc3RCb3gtPmlzQmVmb3Jl
T3JBZnRlckNvbnRlbnQoKSkgewotICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGFibGVSb3c+
KCpsYXN0Qm94KS5hZGRDaGlsZChjaGlsZCwgYmVmb3JlQ2hpbGQpOworICAgICAgICAgICAgZG93
bmNhc3Q8UmVuZGVyVGFibGVSb3c+KCpsYXN0Qm94KS5hZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwg
YmVmb3JlQ2hpbGQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
YXV0byogcm93ID0gUmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5k
ZXJlcigqdGhpcykucmVsZWFzZSgpOwotICAgICAgICBhZGRDaGlsZChyb3csIGJlZm9yZUNoaWxk
KTsKLSAgICAgICAgcm93LT5hZGRDaGlsZChjaGlsZCk7CisgICAgICAgIGF1dG8gbmV3Um93ID0g
UmVuZGVyVGFibGVSb3c6OmNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5kZXJlcigqdGhpcyk7
CisgICAgICAgIGF1dG8mIHJvdyA9ICpuZXdSb3c7CisgICAgICAgIGFkZENoaWxkKFdURk1vdmUo
bmV3Um93KSwgYmVmb3JlQ2hpbGQpOworICAgICAgICByb3cuYWRkQ2hpbGQoV1RGTW92ZShjaGls
ZCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNzYsNyArMTc3LDcgQEAgdm9pZCBS
ZW5kZXJUYWJsZVNlY3Rpb246OmFkZENoaWxkKFJlbmRlcgogICAgICAgICBiZWZvcmVDaGlsZCA9
IHNwbGl0QW5vbnltb3VzQm94ZXNBcm91bmRDaGlsZChiZWZvcmVDaGlsZCk7CiAKICAgICBBU1NF
UlQoIWJlZm9yZUNoaWxkIHx8IGlzPFJlbmRlclRhYmxlUm93PigqYmVmb3JlQ2hpbGQpKTsKLSAg
ICBSZW5kZXJCb3g6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgUmVuZGVyQm94
OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwgYmVmb3JlQ2hpbGQpOwogfQogCiB2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6ZW5zdXJlUm93cyh1bnNpZ25lZCBudW1Sb3dzKQpAQCAtMTU5MCwxNCAr
MTU5MSwxNCBAQCBDb2xsYXBzZWRCb3JkZXJWYWx1ZSBSZW5kZXJUYWJsZVNlY3Rpb246CiAgICAg
cmV0dXJuIGl0LT52YWx1ZTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclRhYmxlU2VjdGlv
bj4gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVUYWJsZVNlY3Rpb25XaXRoU3R5bGUoRG9jdW1l
bnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitSZW5kZXJQdHI8UmVuZGVy
VGFibGVTZWN0aW9uPiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZVRhYmxlU2VjdGlvbldpdGhT
dHlsZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAg
ICBhdXRvIHNlY3Rpb24gPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbmRlclRhYmxlU2VjdGlvbj4oZG9j
dW1lbnQsIFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxl
LCBUQUJMRV9ST1dfR1JPVVApKTsKKyAgICBhdXRvIHNlY3Rpb24gPSBjcmVhdGVSZW5kZXJlcjxS
ZW5kZXJUYWJsZVNlY3Rpb24+KGRvY3VtZW50LCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3Vz
U3R5bGVXaXRoRGlzcGxheShzdHlsZSwgVEFCTEVfUk9XX0dST1VQKSk7CiAgICAgc2VjdGlvbi0+
aW5pdGlhbGl6ZVN0eWxlKCk7CiAgICAgcmV0dXJuIHNlY3Rpb247CiB9CiAKLXN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJUYWJsZVNlY3Rpb24+IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRlQW5vbnlt
b3VzV2l0aFBhcmVudFJlbmRlcmVyKGNvbnN0IFJlbmRlclRhYmxlJiBwYXJlbnQpCitSZW5kZXJQ
dHI8UmVuZGVyVGFibGVTZWN0aW9uPiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZUFub255bW91
c1dpdGhQYXJlbnRSZW5kZXJlcihjb25zdCBSZW5kZXJUYWJsZSYgcGFyZW50KQogewogICAgIHJl
dHVybiBSZW5kZXJUYWJsZVNlY3Rpb246OmNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHlsZShwYXJl
bnQuZG9jdW1lbnQoKSwgcGFyZW50LnN0eWxlKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAkocmV2aXNpb24gMjIyNjc4KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBSZW5kZXJUYWJsZVJvdyogZmlyc3RS
b3coKSBjb25zdDsKICAgICBSZW5kZXJUYWJsZVJvdyogbGFzdFJvdygpIGNvbnN0OwogCi0gICAg
dm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNo
aWxkID0gMCkgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwogCiAg
ICAgc3RkOjpvcHRpb25hbDxpbnQ+IGZpcnN0TGluZUJhc2VsaW5lKCkgY29uc3Qgb3ZlcnJpZGU7
CiAKQEAgLTE0Miw4ICsxNDIsOCBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFdlIG1heSB3YW50
IHRvIGludHJvZHVjZSBhIHN0cnVjdHVyZSBob2xkaW5nIHRoZSBpbi1mbHV4IGxheW91dCBpbmZv
cm1hdGlvbi4KICAgICBMYXlvdXRVbml0IGRpc3RyaWJ1dGVFeHRyYUxvZ2ljYWxIZWlnaHRUb1Jv
d3MoTGF5b3V0VW5pdCBleHRyYUxvZ2ljYWxIZWlnaHQpOwogCi0gICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJUYWJsZVNlY3Rpb24+IGNyZWF0ZUFub255bW91c1dpdGhQYXJlbnRSZW5k
ZXJlcihjb25zdCBSZW5kZXJUYWJsZSYpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCb3g+
IGNyZWF0ZUFub255bW91c0JveFdpdGhTYW1lVHlwZUFzKGNvbnN0IFJlbmRlckJveCYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHN0YXRpYyBSZW5kZXJQdHI8UmVuZGVyVGFibGVTZWN0aW9uPiBjcmVh
dGVBbm9ueW1vdXNXaXRoUGFyZW50UmVuZGVyZXIoY29uc3QgUmVuZGVyVGFibGUmKTsKKyAgICBS
ZW5kZXJQdHI8UmVuZGVyQm94PiBjcmVhdGVBbm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25z
dCBSZW5kZXJCb3gmKSBjb25zdCBvdmVycmlkZTsKICAgICAKICAgICB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jikgb3ZlcnJpZGU7CiAKQEAgLTE1MSw3ICsxNTEsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6Ci0gICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJUYWJsZVNlY3Rpb24+IGNyZWF0ZVRhYmxlU2VjdGlv
bldpdGhTdHlsZShEb2N1bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAgc3RhdGljIFJl
bmRlclB0cjxSZW5kZXJUYWJsZVNlY3Rpb24+IGNyZWF0ZVRhYmxlU2VjdGlvbldpdGhTdHlsZShE
b2N1bWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJik7CiAKICAgICBlbnVtIFNob3VsZEluY2x1ZGVB
bGxJbnRlcnNlY3RpbmdDZWxscyB7CiAgICAgICAgIEluY2x1ZGVBbGxJbnRlcnNlY3RpbmdDZWxs
cywKQEAgLTMzNCw3ICszMzQsNyBAQCBpbmxpbmUgQ2VsbFNwYW4gUmVuZGVyVGFibGVTZWN0aW9u
OjpmdWxsCiAgICAgcmV0dXJuIENlbGxTcGFuKDAsIG1fZ3JpZC5zaXplKCkpOwogfQogCi1pbmxp
bmUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJveD4gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVB
bm9ueW1vdXNCb3hXaXRoU2FtZVR5cGVBcyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcmVyKSBjb25z
dAoraW5saW5lIFJlbmRlclB0cjxSZW5kZXJCb3g+IFJlbmRlclRhYmxlU2VjdGlvbjo6Y3JlYXRl
QW5vbnltb3VzQm94V2l0aFNhbWVUeXBlQXMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJlcikgY29u
c3QKIHsKICAgICByZXR1cm4gUmVuZGVyVGFibGVTZWN0aW9uOjpjcmVhdGVUYWJsZVNlY3Rpb25X
aXRoU3R5bGUocmVuZGVyZXIuZG9jdW1lbnQoKSwgcmVuZGVyZXIuc3R5bGUoKSk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRo
TUxGZW5jZWQuY3BwCShyZXZpc2lvbiAyMjI2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDE1
ICs5MywxNSBAQCBSZW5kZXJQdHI8UmVuZGVyTWF0aE1MRmVuY2VkT3BlcmF0b3I+IFJlCiAKIHZv
aWQgUmVuZGVyTWF0aE1MRmVuY2VkOjptYWtlRmVuY2VzKCkKIHsKLSAgICBSZW5kZXJQdHI8UmVu
ZGVyTWF0aE1MRmVuY2VkT3BlcmF0b3I+IG9wZW5GZW5jZSA9IGNyZWF0ZU1hdGhNTE9wZXJhdG9y
KG1fb3BlbiwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpQcmVmaXgsIE1hdGhNTE9wZXJhdG9y
RGljdGlvbmFyeTo6RmVuY2UpOwotICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQob3BlbkZl
bmNlLmxlYWtQdHIoKSwgZmlyc3RDaGlsZCgpKTsKKyAgICBhdXRvIG9wZW5GZW5jZSA9IGNyZWF0
ZU1hdGhNTE9wZXJhdG9yKG1fb3BlbiwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpQcmVmaXgs
IE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmVuY2UpOworICAgIFJlbmRlck1hdGhNTFJvdzo6
YWRkQ2hpbGQoV1RGTW92ZShvcGVuRmVuY2UpLCBmaXJzdENoaWxkKCkpOwogCi0gICAgUmVuZGVy
UHRyPFJlbmRlck1hdGhNTEZlbmNlZE9wZXJhdG9yPiBjbG9zZUZlbmNlID0gY3JlYXRlTWF0aE1M
T3BlcmF0b3IobV9jbG9zZSwgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpQb3N0Zml4LCBNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OkZlbmNlKTsKKyAgICBhdXRvIGNsb3NlRmVuY2UgPSBjcmVh
dGVNYXRoTUxPcGVyYXRvcihtX2Nsb3NlLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlBvc3Rm
aXgsIE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmVuY2UpOwogICAgIG1fY2xvc2VGZW5jZVJl
bmRlcmVyID0gY2xvc2VGZW5jZS5nZXQoKTsKLSAgICBSZW5kZXJNYXRoTUxSb3c6OmFkZENoaWxk
KGNsb3NlRmVuY2UubGVha1B0cigpKTsKKyAgICBSZW5kZXJNYXRoTUxSb3c6OmFkZENoaWxkKFdU
Rk1vdmUoY2xvc2VGZW5jZSkpOwogfQogCi12b2lkIFJlbmRlck1hdGhNTEZlbmNlZDo6YWRkQ2hp
bGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQg
UmVuZGVyTWF0aE1MRmVuY2VkOjphZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGls
ZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKIHsKICAgICAvLyBtYWtlIHRoZSBmZW5jZXMg
aWYgdGhlIHJlbmRlciBvYmplY3QgaXMgZW1wdHkKICAgICBpZiAoIWZpcnN0Q2hpbGQoKSkKQEAg
LTEzOSwxNCArMTM5LDE0IEBAIHZvaWQgUmVuZGVyTWF0aE1MRmVuY2VkOjphZGRDaGlsZChSZW5k
ZXIKIAogICAgIGlmIChiZWZvcmVDaGlsZCkgewogICAgICAgICAvLyBBZGRpbmcgfHh8IGJlZm9y
ZSBhbiBleGlzdGluZyB8eXwgZS5nLiBpbiBlbGVtZW50ICh5KSAtIGZpcnN0IGluc2VydCBvdXIg
bmV3IGNoaWxkIHx4fCwgdGhlbiBpdHMgc2VwYXJhdG9yLCB0byBnZXQgKHgsIHkpLgotICAgICAg
ICBSZW5kZXJNYXRoTUxSb3c6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgICAg
IFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoV1RGTW92ZShjaGlsZCksIGJlZm9yZUNoaWxkKTsK
ICAgICAgICAgaWYgKHNlcGFyYXRvclJlbmRlcmVyKQotICAgICAgICAgICAgUmVuZGVyTWF0aE1M
Um93OjphZGRDaGlsZChzZXBhcmF0b3JSZW5kZXJlci5sZWFrUHRyKCksIGJlZm9yZUNoaWxkKTsK
KyAgICAgICAgICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoV1RGTW92ZShzZXBhcmF0b3JS
ZW5kZXJlciksIGJlZm9yZUNoaWxkKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBBZGRpbmcg
fHl8IGF0IHRoZSBlbmQgb2YgYW4gZXhpc3RpbmcgZWxlbWVudCBlLmcuICh4KSAtIGluc2VydCB0
aGUgc2VwYXJhdG9yIGZpcnN0IGJlZm9yZSB0aGUgY2xvc2luZyBmZW5jZSwgdGhlbiB8eXwsIHRv
IGdldCAoeCwgeSkuCiAgICAgICAgIGlmIChzZXBhcmF0b3JSZW5kZXJlcikKLSAgICAgICAgICAg
IFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQoc2VwYXJhdG9yUmVuZGVyZXIubGVha1B0cigpLCBt
X2Nsb3NlRmVuY2VSZW5kZXJlcik7Ci0gICAgICAgIFJlbmRlck1hdGhNTFJvdzo6YWRkQ2hpbGQo
Y2hpbGQsIG1fY2xvc2VGZW5jZVJlbmRlcmVyKTsKKyAgICAgICAgICAgIFJlbmRlck1hdGhNTFJv
dzo6YWRkQ2hpbGQoV1RGTW92ZShzZXBhcmF0b3JSZW5kZXJlciksIG1fY2xvc2VGZW5jZVJlbmRl
cmVyKTsKKyAgICAgICAgUmVuZGVyTWF0aE1MUm93OjphZGRDaGlsZChXVEZNb3ZlKGNoaWxkKSwg
bV9jbG9zZUZlbmNlUmVuZGVyZXIpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5oCShyZXZpc2lv
biAyMjI2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhN
TEZlbmNlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgYm9vbCBpc1JlbmRlck1hdGhNTEZlbmNlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KICAgICBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gIlJlbmRlck1hdGhNTEZlbmNlZCI7IH0KLSAgICB2b2lkIGFkZENoaWxkKFJlbmRlck9iamVj
dCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpIGZpbmFsOworICAgIHZvaWQgYWRk
Q2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
Q2hpbGQpIGZpbmFsOwogICAgIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKSBmaW5hbDsKIAogICAg
IFJlbmRlclB0cjxSZW5kZXJNYXRoTUxGZW5jZWRPcGVyYXRvcj4gY3JlYXRlTWF0aE1MT3BlcmF0
b3IoY29uc3QgU3RyaW5nJiBvcGVyYXRvclN0cmluZywgTWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5
OjpGb3JtLCBNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZsYWcpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2
aXNpb24gMjIyNjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxOSArODgsMTkgQEAgdm9pZCBSZW5k
ZXJTVkdDb250YWluZXI6OmxheW91dCgpCiAgICAgY2xlYXJOZWVkc0xheW91dCgpOwogfQogCi12
b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRDaGls
ZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBuZXdDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVD
aGlsZCkKIHsKLSAgICBSZW5kZXJTVkdNb2RlbE9iamVjdDo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9y
ZUNoaWxkKTsKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoKmNo
aWxkKTsKKyAgICBhdXRvJiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAgICBSZW5kZXJTVkdNb2RlbE9i
amVjdDo6YWRkQ2hpbGQoV1RGTW92ZShuZXdDaGlsZCksIGJlZm9yZUNoaWxkKTsKKyAgICBTVkdS
ZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoY2hpbGQpOwogfQogCi12b2lkIFJl
bmRlclNWR0NvbnRhaW5lcjo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRl
clB0cjxSZW5kZXJPYmplY3Q+IFJlbmRlclNWR0NvbnRhaW5lcjo6dGFrZUNoaWxkKFJlbmRlck9i
amVjdCYgY2hpbGQpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92
ZWRGcm9tVHJlZShjaGlsZCk7Ci0gICAgUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnJlbW92ZUNoaWxk
KGNoaWxkKTsKKyAgICByZXR1cm4gUmVuZGVyU1ZHTW9kZWxPYmplY3Q6OnRha2VDaGlsZChjaGls
ZCk7CiB9CiAKLQogYm9vbCBSZW5kZXJTVkdDb250YWluZXI6OnNlbGZXaWxsUGFpbnQoKQogewog
ICAgIGF1dG8qIHJlc291cmNlcyA9IFNWR1Jlc291cmNlc0NhY2hlOjpjYWNoZWRSZXNvdXJjZXNG
b3JSZW5kZXJlcigqdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0NvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDggKzQ3LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBsYXlvdXQoKSBvdmVycmlk
ZTsKIAotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCA9IDApIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQ2hpbGQoUmVuZGVyT2Jq
ZWN0JikgZmluYWw7CisgICAgdm9pZCBhZGRDaGlsZChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIGZpbmFsOworICAgIFJlbmRlclB0
cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5kZXJPYmplY3QmKSBmaW5hbDsKICAgICB2b2lk
IGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50
JiBhZGRpdGlvbmFsT2Zmc2V0LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBwYWludENv
bnRhaW5lciA9IDApIGZpbmFsOwogCiAgICAgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxpbmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW5saW5lLmNwcAkocmV2aXNp
b24gMjIyNjc4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbmxp
bmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMjkgKzEyMCwyOSBAQCB2b2lkIFJlbmRlclNW
R0lubGluZTo6dXBkYXRlRnJvbVN0eWxlKCkKICAgICBzZXRJbmxpbmUodHJ1ZSk7CiB9CiAKLXZv
aWQgUmVuZGVyU1ZHSW5saW5lOjphZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJP
YmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJTVkdJbmxpbmU6OmFkZENoaWxkKFJlbmRl
clB0cjxSZW5kZXJPYmplY3Q+IG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQog
ewotICAgIFJlbmRlcklubGluZTo6YWRkQ2hpbGQoY2hpbGQsIGJlZm9yZUNoaWxkKTsKLSAgICBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRkZWRUb1RyZWUoKmNoaWxkKTsKKyAgICBhdXRv
JiBjaGlsZCA9ICpuZXdDaGlsZDsKKyAgICBSZW5kZXJJbmxpbmU6OmFkZENoaWxkKFdURk1vdmUo
bmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7CisgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdh
c0FkZGVkVG9UcmVlKGNoaWxkKTsKIAogICAgIGlmIChhdXRvKiB0ZXh0QW5jZXN0b3IgPSBSZW5k
ZXJTVkdUZXh0Ojpsb2NhdGVSZW5kZXJTVkdUZXh0QW5jZXN0b3IoKnRoaXMpKQotICAgICAgICB0
ZXh0QW5jZXN0b3ItPnN1YnRyZWVDaGlsZFdhc0FkZGVkKGNoaWxkKTsKKyAgICAgICAgdGV4dEFu
Y2VzdG9yLT5zdWJ0cmVlQ2hpbGRXYXNBZGRlZCgmY2hpbGQpOwogfQogCi12b2lkIFJlbmRlclNW
R0lubGluZTo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKK1JlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IFJlbmRlclNWR0lubGluZTo6dGFrZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQp
CiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRGcm9tVHJlZShj
aGlsZCk7CiAKICAgICBhdXRvKiB0ZXh0QW5jZXN0b3IgPSBSZW5kZXJTVkdUZXh0Ojpsb2NhdGVS
ZW5kZXJTVkdUZXh0QW5jZXN0b3IoKnRoaXMpOwotICAgIGlmICghdGV4dEFuY2VzdG9yKSB7Ci0g
ICAgICAgIFJlbmRlcklubGluZTo6cmVtb3ZlQ2hpbGQoY2hpbGQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghdGV4dEFuY2VzdG9yKQorICAgICAgICByZXR1cm4gUmVuZGVySW5s
aW5lOjp0YWtlQ2hpbGQoY2hpbGQpOwogCiAgICAgVmVjdG9yPFNWR1RleHRMYXlvdXRBdHRyaWJ1
dGVzKiwgMj4gYWZmZWN0ZWRBdHRyaWJ1dGVzOwogICAgIHRleHRBbmNlc3Rvci0+c3VidHJlZUNo
aWxkV2lsbEJlUmVtb3ZlZCgmY2hpbGQsIGFmZmVjdGVkQXR0cmlidXRlcyk7Ci0gICAgUmVuZGVy
SW5saW5lOjpyZW1vdmVDaGlsZChjaGlsZCk7CisgICAgYXV0byB0YWtlbkNoaWxkID0gUmVuZGVy
SW5saW5lOjp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIHRleHRBbmNlc3Rvci0+c3VidHJlZUNoaWxk
V2FzUmVtb3ZlZChhZmZlY3RlZEF0dHJpYnV0ZXMpOworICAgIHJldHVybiB0YWtlbkNoaWxkOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0lubGlu
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW5saW5lLmgJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHSW5saW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDggQEAgcHJp
dmF0ZToKICAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIGZpbmFsOwogICAgIHZvaWQgc3R5bGVE
aWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIGZp
bmFsOwogCi0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVDaGlsZChS
ZW5kZXJPYmplY3QmKSBmaW5hbDsKKyAgICB2b2lkIGFkZENoaWxkKFJlbmRlclB0cjxSZW5kZXJP
YmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgZmluYWw7
CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNoaWxkKFJlbmRlck9iamVjdCYpIGZp
bmFsOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCShyZXZpc2lvbiAyMjI2NzgpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDAsMTYgKzMwMCwxNyBAQCB2b2lkIFJlbmRlclNWR1Jvb3Q6OnN0eWxlRGlk
Q2hhbmdlKFN0eWxlCiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZCgq
dGhpcywgZGlmZiwgc3R5bGUoKSk7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHUm9vdDo6YWRkQ2hpbGQo
UmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVu
ZGVyU1ZHUm9vdDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gbmV3Q2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6OmFkZENoaWxk
KGNoaWxkLCBiZWZvcmVDaGlsZCk7Ci0gICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0Fk
ZGVkVG9UcmVlKCpjaGlsZCk7CisgICAgYXV0byYgY2hpbGQgPSAqbmV3Q2hpbGQ7CisgICAgUmVu
ZGVyUmVwbGFjZWQ6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hpbGQpLCBiZWZvcmVDaGlsZCk7Cisg
ICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsKIH0KIAot
dm9pZCBSZW5kZXJTVkdSb290OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmIGNoaWxkKQorUmVu
ZGVyUHRyPFJlbmRlck9iamVjdD4gUmVuZGVyU1ZHUm9vdDo6dGFrZUNoaWxkKFJlbmRlck9iamVj
dCYgY2hpbGQpCiB7CiAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdpbGxCZVJlbW92ZWRG
cm9tVHJlZShjaGlsZCk7Ci0gICAgUmVuZGVyUmVwbGFjZWQ6OnJlbW92ZUNoaWxkKGNoaWxkKTsK
KyAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OnRha2VDaGlsZChjaGlsZCk7CiB9CiAKIC8vIFJl
bmRlckJveCBtZXRob2RzIHdpbGwgZXhwZWN0IGNvb3JkaW5hdGVzIHcvbyBhbnkgdHJhbnNmb3Jt
cyBpbiBjb29yZGluYXRlcwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSb290LmgJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw4IEBA
IHByaXZhdGU6CiAgICAgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKSBvdmVycmlkZTsKIAog
ICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHls
ZSogb2xkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9IDApIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqZWN0Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhZGRDaGlsZChS
ZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCA9
IDApIG92ZXJyaWRlOworICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IHRha2VDaGlsZChSZW5k
ZXJPYmplY3QmKSBvdmVycmlkZTsKIAogICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbG9jYWxU
b1BhcmVudFRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDIyMjY3OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxNywyMiArNTE3LDI0IEBAIEZsb2F0UmVjdCBSZW5kZXJTVkdUZXh0Ojpy
ZXBhaW50UmVjdEluTG8KICAgICByZXR1cm4gcmVwYWludFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVy
U1ZHVGV4dDo6YWRkQ2hpbGQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZv
cmVDaGlsZCkKK3ZvaWQgUmVuZGVyU1ZHVGV4dDo6YWRkQ2hpbGQoUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gbmV3Q2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpCiB7Ci0gICAgUmVuZGVy
U1ZHQmxvY2s6OmFkZENoaWxkKGNoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgYXV0byYgY2hpbGQg
PSAqbmV3Q2hpbGQ7CisgICAgUmVuZGVyU1ZHQmxvY2s6OmFkZENoaWxkKFdURk1vdmUobmV3Q2hp
bGQpLCBiZWZvcmVDaGlsZCk7CiAKLSAgICBTVkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50V2FzQWRk
ZWRUb1RyZWUoKmNoaWxkKTsKLSAgICBzdWJ0cmVlQ2hpbGRXYXNBZGRlZChjaGlsZCk7CisgICAg
U1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFdhc0FkZGVkVG9UcmVlKGNoaWxkKTsKKyAgICBzdWJ0
cmVlQ2hpbGRXYXNBZGRlZCgmY2hpbGQpOwogfQogCi12b2lkIFJlbmRlclNWR1RleHQ6OnJlbW92
ZUNoaWxkKFJlbmRlck9iamVjdCYgY2hpbGQpCitSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBSZW5k
ZXJTVkdUZXh0Ojp0YWtlQ2hpbGQoUmVuZGVyT2JqZWN0JiBjaGlsZCkKIHsKICAgICBTVkdSZXNv
dXJjZXNDYWNoZTo6Y2xpZW50V2lsbEJlUmVtb3ZlZEZyb21UcmVlKGNoaWxkKTsKIAogICAgIFZl
Y3RvcjxTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyosIDI+IGFmZmVjdGVkQXR0cmlidXRlczsKICAg
ICBzdWJ0cmVlQ2hpbGRXaWxsQmVSZW1vdmVkKCZjaGlsZCwgYWZmZWN0ZWRBdHRyaWJ1dGVzKTsK
LSAgICBSZW5kZXJTVkdCbG9jazo6cmVtb3ZlQ2hpbGQoY2hpbGQpOworICAgIGF1dG8gdGFrZW5D
aGlsZCA9IFJlbmRlclNWR0Jsb2NrOjp0YWtlQ2hpbGQoY2hpbGQpOwogICAgIHN1YnRyZWVDaGls
ZFdhc1JlbW92ZWQoYWZmZWN0ZWRBdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gdGFrZW5DaGlsZDsK
IH0KIAogLy8gRml4IGZvciA8cmRhcjovL3Byb2JsZW0vODA0ODg3NT4uIFdlIHNob3VsZCBub3Qg
cmVuZGVyIDpmaXJzdC1saW5lIENTUyBTdHlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdUZXh0LmgJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw4ICs4Miw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIG1hcExvY2FsVG9Db250YWluZXIoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgVHJhbnNmb3JtU3Rh
dGUmLCBNYXBDb29yZGluYXRlc0ZsYWdzLCBib29sKiB3YXNGaXhlZCkgY29uc3Qgb3ZlcnJpZGU7
CiAgICAgY29uc3QgUmVuZGVyT2JqZWN0KiBwdXNoTWFwcGluZ1RvQ29udGFpbmVyKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIGFuY2VzdG9yVG9TdG9wQXQsIFJlbmRlckdlb21ldHJ5TWFw
JikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRDaGlsZChSZW5kZXJPYmplY3QqIGNoaWxk
LCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZW1vdmVDaGlsZChSZW5kZXJPYmplY3QmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFkZENoaWxk
KFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxk
ID0gbnVsbHB0cikgb3ZlcnJpZGU7CisgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gdGFrZUNo
aWxkKFJlbmRlck9iamVjdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkg
b3ZlcnJpZGU7CiAKICAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGxvY2FsVG9QYXJlbnRUcmFu
c2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2xvY2FsVHJhbnNmb3JtOyB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlUG9zaXRpb24uaAkocmV2aXNpb24gMjIy
Njc4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVBvc2l0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlbmRlckVs
ZW1lbnQmIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9Ci0gICAgdm9pZCBpbnNl
cnQoUmVuZGVyT2JqZWN0Jik7CisgICAgdm9pZCBpbnNlcnQoUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4pOwogICAgIGJvb2wgY2FuSW5zZXJ0KFJlbmRlckVsZW1lbnQmKSBjb25zdDsKICAgICBib29s
IGNhbkluc2VydChSZW5kZXJUZXh0JikgY29uc3Q7CiAKQEAgLTc4LDEwICs3OCwxMCBAQCBpbmxp
bmUgYm9vbCBSZW5kZXJUcmVlUG9zaXRpb246OmNhbkluc2VyCiAgICAgcmV0dXJuIG1fcGFyZW50
LmlzQ2hpbGRBbGxvd2VkKHJlbmRlcmVyLCBtX3BhcmVudC5zdHlsZSgpKTsKIH0KIAotaW5saW5l
IHZvaWQgUmVuZGVyVHJlZVBvc2l0aW9uOjppbnNlcnQoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikK
K2lubGluZSB2b2lkIFJlbmRlclRyZWVQb3NpdGlvbjo6aW5zZXJ0KFJlbmRlclB0cjxSZW5kZXJP
YmplY3Q+IHJlbmRlcmVyKQogewogICAgIEFTU0VSVChtX2hhc1ZhbGlkTmV4dFNpYmxpbmcpOwot
ICAgIG1fcGFyZW50LmFkZENoaWxkKCZyZW5kZXJlciwgbV9uZXh0U2libGluZyk7CisgICAgbV9w
YXJlbnQuYWRkQ2hpbGQoV1RGTW92ZShyZW5kZXJlciksIG1fbmV4dFNpYmxpbmcpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJU
cmVlVXBkYXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVy
VHJlZVVwZGF0ZXIuY3BwCShyZXZpc2lvbiAyMjI2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHls
ZS9SZW5kZXJUcmVlVXBkYXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OSwyNyArMzU5LDI1
IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OmNyZWF0ZVJlbmRlcmVyKEUKICAgICAgICAgcmV0
dXJuOwogCiAgICAgUmVuZGVyVHJlZVBvc2l0aW9uIGluc2VydGlvblBvc2l0aW9uID0gY29tcHV0
ZUluc2VydGlvblBvc2l0aW9uKCk7Ci0gICAgUmVuZGVyRWxlbWVudCogbmV3UmVuZGVyZXIgPSBl
bGVtZW50LmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihXVEZNb3ZlKHN0eWxlKSwgaW5zZXJ0aW9uUG9z
aXRpb24pLmxlYWtQdHIoKTsKKyAgICBhdXRvIG5ld1JlbmRlcmVyID0gZWxlbWVudC5jcmVhdGVF
bGVtZW50UmVuZGVyZXIoV1RGTW92ZShzdHlsZSksIGluc2VydGlvblBvc2l0aW9uKTsKICAgICBp
ZiAoIW5ld1JlbmRlcmVyKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpbnNlcnRpb25Qb3Np
dGlvbi5jYW5JbnNlcnQoKm5ld1JlbmRlcmVyKSkgewotICAgICAgICBuZXdSZW5kZXJlci0+ZGVz
dHJveSgpOworICAgIGlmICghaW5zZXJ0aW9uUG9zaXRpb24uY2FuSW5zZXJ0KCpuZXdSZW5kZXJl
cikpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBlbGVtZW50LnNldFJlbmRlcmVyKG5l
d1JlbmRlcmVyKTsKKyAgICBlbGVtZW50LnNldFJlbmRlcmVyKG5ld1JlbmRlcmVyLmdldCgpKTsK
IAogICAgIG5ld1JlbmRlcmVyLT5pbml0aWFsaXplU3R5bGUoKTsKIAogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKICAgICBpZiAobV9kb2N1bWVudC53ZWJraXRJc0Z1bGxTY3JlZW4oKSAmJiBt
X2RvY3VtZW50LndlYmtpdEN1cnJlbnRGdWxsU2NyZWVuRWxlbWVudCgpID09ICZlbGVtZW50KSB7
Ci0gICAgICAgIG5ld1JlbmRlcmVyID0gUmVuZGVyRnVsbFNjcmVlbjo6d3JhcFJlbmRlcmVyKG5l
d1JlbmRlcmVyLCAmaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1fZG9jdW1lbnQpOworICAg
ICAgICBuZXdSZW5kZXJlciA9IFJlbmRlckZ1bGxTY3JlZW46OndyYXBOZXdSZW5kZXJlcihXVEZN
b3ZlKG5ld1JlbmRlcmVyKSwgaW5zZXJ0aW9uUG9zaXRpb24ucGFyZW50KCksIG1fZG9jdW1lbnQp
OwogICAgICAgICBpZiAoIW5ld1JlbmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZgotICAgIC8vIE5vdGU6IEFkZGluZyBuZXdSZW5kZXJlciBpbnN0ZWFkIG9mIHJlbmRl
cmVyKCkuIHJlbmRlcmVyKCkgbWF5IGJlIGEgY2hpbGQgb2YgbmV3UmVuZGVyZXIuCi0gICAgaW5z
ZXJ0aW9uUG9zaXRpb24uaW5zZXJ0KCpuZXdSZW5kZXJlcik7CisKKyAgICBpbnNlcnRpb25Qb3Np
dGlvbi5pbnNlcnQoV1RGTW92ZShuZXdSZW5kZXJlcikpOwogCiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGUqIGNhY2hlID0gbV9kb2N1bWVudC5heE9iamVjdENhY2hlKCkpCiAgICAgICAgIGNhY2hlLT51
cGRhdGVDYWNoZUFmdGVyTm9kZUlzQXR0YWNoZWQoJmVsZW1lbnQpOwpAQCAtNDQxLDcgKzQzOSw3
IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXgKICAgICAgICAgcmV0
dXJuOwogCiAgICAgdGV4dE5vZGUuc2V0UmVuZGVyZXIobmV3UmVuZGVyZXIuZ2V0KCkpOwotICAg
IHJlbmRlclRyZWVQb3NpdGlvbi5pbnNlcnQoKm5ld1JlbmRlcmVyLmxlYWtQdHIoKSk7CisgICAg
cmVuZGVyVHJlZVBvc2l0aW9uLmluc2VydChXVEZNb3ZlKG5ld1JlbmRlcmVyKSk7CiB9CiAKIHZv
aWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnVwZGF0ZVRleHRSZW5kZXJlcihUZXh0JiB0ZXh0LCBjb25z
dCBTdHlsZTo6VGV4dFVwZGF0ZSogdGV4dFVwZGF0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyRmlyc3RMZXR0ZXIuY3BwCShyZXZpc2lv
biAyMjI2NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckZpcnN0
TGV0dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDExICsxMDgsMTEgQEAgc3RhdGljIHZv
aWQgdXBkYXRlRmlyc3RMZXR0ZXJTdHlsZShSZW5kZQogCiAgICAgaWYgKFN0eWxlOjpkZXRlcm1p
bmVDaGFuZ2UoZmlyc3RMZXR0ZXItPnN0eWxlKCksIHBzZXVkb1N0eWxlKSA9PSBTdHlsZTo6RGV0
YWNoKSB7CiAgICAgICAgIC8vIFRoZSBmaXJzdC1sZXR0ZXIgcmVuZGVyZXIgbmVlZHMgdG8gYmUg
cmVwbGFjZWQuIENyZWF0ZSBhIG5ldyByZW5kZXJlciBvZiB0aGUgcmlnaHQgdHlwZS4KLSAgICAg
ICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIG5ld0ZpcnN0TGV0dGVyOworICAgICAgICBSZW5kZXJQ
dHI8UmVuZGVyQm94TW9kZWxPYmplY3Q+IG5ld0ZpcnN0TGV0dGVyOwogICAgICAgICBpZiAocHNl
dWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVy
ID0gbmV3IFJlbmRlcklubGluZShmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUo
cHNldWRvU3R5bGUpKTsKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyID0gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVySW5saW5lPihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIFdURk1vdmUocHNl
dWRvU3R5bGUpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBu
ZXcgUmVuZGVyQmxvY2tGbG93KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShw
c2V1ZG9TdHlsZSkpOworICAgICAgICAgICAgbmV3Rmlyc3RMZXR0ZXIgPSBjcmVhdGVSZW5kZXJl
cjxSZW5kZXJCbG9ja0Zsb3c+KGZpcnN0TGV0dGVyQmxvY2suZG9jdW1lbnQoKSwgV1RGTW92ZShw
c2V1ZG9TdHlsZSkpOwogICAgICAgICBuZXdGaXJzdExldHRlci0+aW5pdGlhbGl6ZVN0eWxlKCk7
CiAKICAgICAgICAgLy8gTW92ZSB0aGUgZmlyc3QgbGV0dGVyIGludG8gdGhlIG5ldyByZW5kZXJl
ci4KQEAgLTEyMCw4ICsxMjAsOCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVGaXJzdExldHRlclN0eWxl
KFJlbmRlCiAgICAgICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RMZXR0ZXIt
PmZpcnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpjaGlsZCkp
CiAgICAgICAgICAgICAgICAgZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKS5yZW1vdmVBbmRE
ZXN0cm95VGV4dEJveGVzKCk7Ci0gICAgICAgICAgICBmaXJzdExldHRlci0+cmVtb3ZlQ2hpbGQo
KmNoaWxkKTsKLSAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChjaGlsZCwgbnVs
bHB0cik7CisgICAgICAgICAgICBhdXRvIHRvTW92ZSA9IGZpcnN0TGV0dGVyLT50YWtlQ2hpbGQo
KmNoaWxkKTsKKyAgICAgICAgICAgIG5ld0ZpcnN0TGV0dGVyLT5hZGRDaGlsZChXVEZNb3ZlKHRv
TW92ZSkpOwogICAgICAgICB9CiAKICAgICAgICAgUmVuZGVyT2JqZWN0KiBuZXh0U2libGluZyA9
IGZpcnN0TGV0dGVyLT5uZXh0U2libGluZygpOwpAQCAtMTMxLDEyICsxMzEsOCBAQCBzdGF0aWMg
dm9pZCB1cGRhdGVGaXJzdExldHRlclN0eWxlKFJlbmRlCiAgICAgICAgICAgICByZW1haW5pbmdU
ZXh0LT5zZXRGaXJzdExldHRlcigqbmV3Rmlyc3RMZXR0ZXIpOwogICAgICAgICAgICAgbmV3Rmly
c3RMZXR0ZXItPnNldEZpcnN0TGV0dGVyUmVtYWluaW5nVGV4dChyZW1haW5pbmdUZXh0KTsKICAg
ICAgICAgfQotICAgICAgICAvLyBUbyBwcmV2ZW50IHJlbW92YWwgb2Ygc2luZ2xlIGFub255bW91
cyBibG9jayBpbiBSZW5kZXJCbG9jazo6cmVtb3ZlQ2hpbGQgYW5kIGNhdXNpbmcKLSAgICAgICAg
Ly8gfG5leHRTaWJsaW5nfCB0byBnbyBzdGFsZSwgd2UgcmVtb3ZlIHRoZSBvbGQgZmlyc3QgbGV0
dGVyIHVzaW5nIHJlbW92ZUNoaWxkTm9kZSBmaXJzdC4KLSAgICAgICAgZmlyc3RMZXR0ZXJDb250
YWluZXItPnJlbW92ZUNoaWxkSW50ZXJuYWwoKmZpcnN0TGV0dGVyLCBSZW5kZXJFbGVtZW50OjpO
b3RpZnlDaGlsZHJlbik7Ci0gICAgICAgIGZpcnN0TGV0dGVyLT5kZXN0cm95KCk7Ci0gICAgICAg
IGZpcnN0TGV0dGVyID0gbmV3Rmlyc3RMZXR0ZXI7Ci0gICAgICAgIGZpcnN0TGV0dGVyQ29udGFp
bmVyLT5hZGRDaGlsZChmaXJzdExldHRlciwgbmV4dFNpYmxpbmcpOworICAgICAgICBmaXJzdExl
dHRlckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKCpmaXJzdExldHRlcik7CisgICAg
ICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVy
KSwgbmV4dFNpYmxpbmcpOwogICAgIH0gZWxzZQogICAgICAgICBmaXJzdExldHRlci0+c2V0U3R5
bGUoV1RGTW92ZShwc2V1ZG9TdHlsZSkpOwogfQpAQCAtMTQ1LDEzICsxNDEsMTQgQEAgc3RhdGlj
IHZvaWQgY3JlYXRlRmlyc3RMZXR0ZXJSZW5kZXJlcihSZQogewogICAgIFJlbmRlckVsZW1lbnQq
IGZpcnN0TGV0dGVyQ29udGFpbmVyID0gY3VycmVudFRleHRDaGlsZC5wYXJlbnQoKTsKICAgICBh
dXRvIHBzZXVkb1N0eWxlID0gc3R5bGVGb3JGaXJzdExldHRlcihmaXJzdExldHRlckJsb2NrLCAq
Zmlyc3RMZXR0ZXJDb250YWluZXIpOwotICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBmaXJzdExl
dHRlciA9IG51bGxwdHI7CisgICAgUmVuZGVyUHRyPFJlbmRlckJveE1vZGVsT2JqZWN0PiBuZXdG
aXJzdExldHRlcjsKICAgICBpZiAocHNldWRvU3R5bGUuZGlzcGxheSgpID09IElOTElORSkKLSAg
ICAgICAgZmlyc3RMZXR0ZXIgPSBuZXcgUmVuZGVySW5saW5lKGZpcnN0TGV0dGVyQmxvY2suZG9j
dW1lbnQoKSwgV1RGTW92ZShwc2V1ZG9TdHlsZSkpOworICAgICAgICBuZXdGaXJzdExldHRlciA9
IGNyZWF0ZVJlbmRlcmVyPFJlbmRlcklubGluZT4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgp
LCBXVEZNb3ZlKHBzZXVkb1N0eWxlKSk7CiAgICAgZWxzZQotICAgICAgICBmaXJzdExldHRlciA9
IG5ldyBSZW5kZXJCbG9ja0Zsb3coZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3Zl
KHBzZXVkb1N0eWxlKSk7Ci0gICAgZmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOwotICAg
IGZpcnN0TGV0dGVyQ29udGFpbmVyLT5hZGRDaGlsZChmaXJzdExldHRlciwgJmN1cnJlbnRUZXh0
Q2hpbGQpOworICAgICAgICBuZXdGaXJzdExldHRlciA9IGNyZWF0ZVJlbmRlcmVyPFJlbmRlckJs
b2NrRmxvdz4oZmlyc3RMZXR0ZXJCbG9jay5kb2N1bWVudCgpLCBXVEZNb3ZlKHBzZXVkb1N0eWxl
KSk7CisgICAgbmV3Rmlyc3RMZXR0ZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgIGF1dG8mIGZp
cnN0TGV0dGVyID0gKm5ld0ZpcnN0TGV0dGVyOworICAgIGZpcnN0TGV0dGVyQ29udGFpbmVyLT5h
ZGRDaGlsZChXVEZNb3ZlKG5ld0ZpcnN0TGV0dGVyKSwgJmN1cnJlbnRUZXh0Q2hpbGQpOwogCiAg
ICAgLy8gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyBnb2luZyB0byBiZSBlaXRoZXIgYSBnZW5lcmF0
ZWQgY29udGVudCBzdHJpbmcgb3IgYSBET00gbm9kZSdzCiAgICAgLy8gc3RyaW5nLiBXZSB3YW50
IHRoZSBvcmlnaW5hbCBzdHJpbmcgYmVmb3JlIGl0IGdvdCB0cmFuc2Zvcm1lZCBpbiBjYXNlIGZp
cnN0LWxldHRlciBoYXMKQEAgLTE4MywzMCArMTgwLDI5IEBAIHN0YXRpYyB2b2lkIGNyZWF0ZUZp
cnN0TGV0dGVyUmVuZGVyZXIoUmUKIAogICAgICAgICAvLyBDb25zdHJ1Y3QgYSB0ZXh0IGZyYWdt
ZW50IGZvciB0aGUgdGV4dCBhZnRlciB0aGUgZmlyc3QgbGV0dGVyLgogICAgICAgICAvLyBUaGlz
IHRleHQgZnJhZ21lbnQgbWlnaHQgYmUgZW1wdHkuCi0gICAgICAgIFJlbmRlclRleHRGcmFnbWVu
dCogcmVtYWluaW5nVGV4dDsKKyAgICAgICAgUmVuZGVyUHRyPFJlbmRlclRleHRGcmFnbWVudD4g
bmV3UmVtYWluaW5nVGV4dDsKICAgICAgICAgaWYgKGN1cnJlbnRUZXh0Q2hpbGQudGV4dE5vZGUo
KSkKLSAgICAgICAgICAgIHJlbWFpbmluZ1RleHQgPSBuZXcgUmVuZGVyVGV4dEZyYWdtZW50KCpj
dXJyZW50VGV4dENoaWxkLnRleHROb2RlKCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5n
dGgoKSAtIGxlbmd0aCk7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVu
ZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PigqY3VycmVudFRleHRDaGlsZC50ZXh0Tm9kZSgpLCBv
bGRUZXh0LCBsZW5ndGgsIG9sZFRleHQubGVuZ3RoKCkgLSBsZW5ndGgpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICByZW1haW5pbmdUZXh0ID0gbmV3IFJlbmRlclRleHRGcmFnbWVudChmaXJz
dExldHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRleHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgo
KSAtIGxlbmd0aCk7CisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0ID0gY3JlYXRlUmVuZGVy
ZXI8UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3VtZW50KCksIG9sZFRl
eHQsIGxlbmd0aCwgb2xkVGV4dC5sZW5ndGgoKSAtIGxlbmd0aCk7CiAKLSAgICAgICAgaWYgKHJl
bWFpbmluZ1RleHQtPnRleHROb2RlKCkpCi0gICAgICAgICAgICByZW1haW5pbmdUZXh0LT50ZXh0
Tm9kZSgpLT5zZXRSZW5kZXJlcihyZW1haW5pbmdUZXh0KTsKKyAgICAgICAgaWYgKG5ld1JlbWFp
bmluZ1RleHQtPnRleHROb2RlKCkpCisgICAgICAgICAgICBuZXdSZW1haW5pbmdUZXh0LT50ZXh0
Tm9kZSgpLT5zZXRSZW5kZXJlcihuZXdSZW1haW5pbmdUZXh0LmdldCgpKTsKIAotICAgICAgICBm
aXJzdExldHRlckNvbnRhaW5lci0+YWRkQ2hpbGQocmVtYWluaW5nVGV4dCwgJmN1cnJlbnRUZXh0
Q2hpbGQpOwotICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQ2hpbGQoY3VycmVu
dFRleHRDaGlsZCk7Ci0gICAgICAgIHJlbWFpbmluZ1RleHQtPnNldEZpcnN0TGV0dGVyKCpmaXJz
dExldHRlcik7Ci0gICAgICAgIGZpcnN0TGV0dGVyLT5zZXRGaXJzdExldHRlclJlbWFpbmluZ1Rl
eHQocmVtYWluaW5nVGV4dCk7CisgICAgICAgIFJlbmRlclRleHRGcmFnbWVudCYgcmVtYWluaW5n
VGV4dCA9ICpuZXdSZW1haW5pbmdUZXh0OworICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+
YWRkQ2hpbGQoV1RGTW92ZShuZXdSZW1haW5pbmdUZXh0KSwgJmN1cnJlbnRUZXh0Q2hpbGQpOwor
ICAgICAgICBmaXJzdExldHRlckNvbnRhaW5lci0+cmVtb3ZlQW5kRGVzdHJveUNoaWxkKGN1cnJl
bnRUZXh0Q2hpbGQpOworICAgICAgICByZW1haW5pbmdUZXh0LnNldEZpcnN0TGV0dGVyKGZpcnN0
TGV0dGVyKTsKKyAgICAgICAgZmlyc3RMZXR0ZXIuc2V0Rmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0
KCZyZW1haW5pbmdUZXh0KTsKIAogICAgICAgICAvLyBjb25zdHJ1Y3QgdGV4dCBmcmFnbWVudCBm
b3IgdGhlIGZpcnN0IGxldHRlcgotICAgICAgICBSZW5kZXJUZXh0RnJhZ21lbnQqIGxldHRlcjsK
LSAgICAgICAgaWYgKHJlbWFpbmluZ1RleHQtPnRleHROb2RlKCkpCi0gICAgICAgICAgICBsZXR0
ZXIgPSBuZXcgUmVuZGVyVGV4dEZyYWdtZW50KCpyZW1haW5pbmdUZXh0LT50ZXh0Tm9kZSgpLCBv
bGRUZXh0LCAwLCBsZW5ndGgpOworICAgICAgICBSZW5kZXJQdHI8UmVuZGVyVGV4dEZyYWdtZW50
PiBsZXR0ZXI7CisgICAgICAgIGlmIChyZW1haW5pbmdUZXh0LnRleHROb2RlKCkpCisgICAgICAg
ICAgICBsZXR0ZXIgPSBjcmVhdGVSZW5kZXJlcjxSZW5kZXJUZXh0RnJhZ21lbnQ+KCpyZW1haW5p
bmdUZXh0LnRleHROb2RlKCksIG9sZFRleHQsIDAsIGxlbmd0aCk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGxldHRlciA9IG5ldyBSZW5kZXJUZXh0RnJhZ21lbnQoZmlyc3RMZXR0ZXJCbG9j
ay5kb2N1bWVudCgpLCBvbGRUZXh0LCAwLCBsZW5ndGgpOworICAgICAgICAgICAgbGV0dGVyID0g
Y3JlYXRlUmVuZGVyZXI8UmVuZGVyVGV4dEZyYWdtZW50PihmaXJzdExldHRlckJsb2NrLmRvY3Vt
ZW50KCksIG9sZFRleHQsIDAsIGxlbmd0aCk7CiAKLSAgICAgICAgZmlyc3RMZXR0ZXItPmFkZENo
aWxkKGxldHRlcik7Ci0KLSAgICAgICAgY3VycmVudFRleHRDaGlsZC5kZXN0cm95KCk7CisgICAg
ICAgIGZpcnN0TGV0dGVyLmFkZENoaWxkKFdURk1vdmUobGV0dGVyKSk7CiAgICAgfQogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlckdlbmVyYXRlZENvbnRl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1JlbmRlclRyZWVVcGRh
dGVyR2VuZXJhdGVkQ29udGVudC5jcHAJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1JlbmRlclRyZWVVcGRhdGVyR2VuZXJhdGVkQ29udGVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgY3JlYXRlQ29udGVudFJlbmRlcmVy
cyhSZW5kZQogICAgIGZvciAoY29uc3QgQ29udGVudERhdGEqIGNvbnRlbnQgPSBzdHlsZS5jb250
ZW50RGF0YSgpOyBjb250ZW50OyBjb250ZW50ID0gY29udGVudC0+bmV4dCgpKSB7CiAgICAgICAg
IGF1dG8gY2hpbGQgPSBjb250ZW50LT5jcmVhdGVDb250ZW50UmVuZGVyZXIocmVuZGVyZXIuZG9j
dW1lbnQoKSwgc3R5bGUpOwogICAgICAgICBpZiAocmVuZGVyZXIuaXNDaGlsZEFsbG93ZWQoKmNo
aWxkLCBzdHlsZSkpCi0gICAgICAgICAgICByZW5kZXJlci5hZGRDaGlsZChjaGlsZC5sZWFrUHRy
KCkpOworICAgICAgICAgICAgcmVuZGVyZXIuYWRkQ2hpbGQoV1RGTW92ZShjaGlsZCkpOwogICAg
IH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVwZGF0ZXJMaXN0
SXRlbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvUmVuZGVyVHJlZVVw
ZGF0ZXJMaXN0SXRlbS5jcHAJKHJldmlzaW9uIDIyMjY3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
eWxlL1JlbmRlclRyZWVVcGRhdGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCwx
MiArODQsMTQgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6TGlzdEl0ZW06OnVwZGF0ZQogICAg
IH0KIAogICAgIGF1dG8gbmV3U3R5bGUgPSBsaXN0SXRlbVJlbmRlcmVyLmNvbXB1dGVNYXJrZXJT
dHlsZSgpOworICAgIFJlbmRlclB0cjxSZW5kZXJMaXN0TWFya2VyPiBuZXdNYXJrZXJSZW5kZXJl
cjsKICAgICBhdXRvKiBtYXJrZXJSZW5kZXJlciA9IGxpc3RJdGVtUmVuZGVyZXIubWFya2VyUmVu
ZGVyZXIoKTsKICAgICBpZiAobWFya2VyUmVuZGVyZXIpCiAgICAgICAgIG1hcmtlclJlbmRlcmVy
LT5zZXRTdHlsZShXVEZNb3ZlKG5ld1N0eWxlKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIG1hcmtl
clJlbmRlcmVyID0gV2ViQ29yZTo6Y3JlYXRlUmVuZGVyZXI8UmVuZGVyTGlzdE1hcmtlcj4obGlz
dEl0ZW1SZW5kZXJlciwgV1RGTW92ZShuZXdTdHlsZSkpLmxlYWtQdHIoKTsKLSAgICAgICAgbWFy
a2VyUmVuZGVyZXItPmluaXRpYWxpemVTdHlsZSgpOworICAgICAgICBuZXdNYXJrZXJSZW5kZXJl
ciA9IFdlYkNvcmU6OmNyZWF0ZVJlbmRlcmVyPFJlbmRlckxpc3RNYXJrZXI+KGxpc3RJdGVtUmVu
ZGVyZXIsIFdURk1vdmUobmV3U3R5bGUpKTsKKyAgICAgICAgbmV3TWFya2VyUmVuZGVyZXItPmlu
aXRpYWxpemVTdHlsZSgpOworICAgICAgICBtYXJrZXJSZW5kZXJlciA9IG5ld01hcmtlclJlbmRl
cmVyLmdldCgpOwogICAgICAgICBsaXN0SXRlbVJlbmRlcmVyLnNldE1hcmtlclJlbmRlcmVyKG1h
cmtlclJlbmRlcmVyKTsKICAgICB9CiAKQEAgLTEwOSw4ICsxMTEsMTEgQEAgdm9pZCBSZW5kZXJU
cmVlVXBkYXRlcjo6TGlzdEl0ZW06OnVwZGF0ZQogICAgIH0KIAogICAgIGlmIChuZXdQYXJlbnQg
IT0gY3VycmVudFBhcmVudCkgewotICAgICAgICBtYXJrZXJSZW5kZXJlci0+cmVtb3ZlRnJvbVBh
cmVudCgpOwotICAgICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKG1hcmtlclJlbmRlcmVyLCBmaXJz
dE5vbk1hcmtlckNoaWxkKCpuZXdQYXJlbnQpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRQYXJlbnQp
CisgICAgICAgICAgICBuZXdQYXJlbnQtPmFkZENoaWxkKGN1cnJlbnRQYXJlbnQtPnRha2VDaGls
ZCgqbWFya2VyUmVuZGVyZXIpLCBmaXJzdE5vbk1hcmtlckNoaWxkKCpuZXdQYXJlbnQpKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbmV3UGFyZW50LT5hZGRDaGlsZChXVEZNb3ZlKG5ld01h
cmtlclJlbmRlcmVyKSwgZmlyc3ROb25NYXJrZXJDaGlsZCgqbmV3UGFyZW50KSk7CisKICAgICAg
ICAgLy8gSWYgY3VycmVudCBwYXJlbnQgaXMgYW4gYW5vbnltb3VzIGJsb2NrIHRoYXQgaGFzIGxv
c3QgYWxsIGl0cyBjaGlsZHJlbiwgZGVzdHJveSBpdC4KICAgICAgICAgaWYgKGN1cnJlbnRQYXJl
bnQgJiYgY3VycmVudFBhcmVudC0+aXNBbm9ueW1vdXNCbG9jaygpICYmICFjdXJyZW50UGFyZW50
LT5maXJzdENoaWxkKCkgJiYgIWRvd25jYXN0PFJlbmRlckJsb2NrPigqY3VycmVudFBhcmVudCku
Y29udGludWF0aW9uKCkpCiAgICAgICAgICAgICBjdXJyZW50UGFyZW50LT5kZXN0cm95KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11bHRpQ29sdW1uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9SZW5kZXJUcmVlVXBkYXRlck11
bHRpQ29sdW1uLmNwcAkocmV2aXNpb24gMjIyNjc4KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUv
UmVuZGVyVHJlZVVwZGF0ZXJNdWx0aUNvbHVtbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEz
ICs0NiwxNCBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjpNdWx0aUNvbHVtbjo6dXBkCiAKIHZv
aWQgUmVuZGVyVHJlZVVwZGF0ZXI6Ok11bHRpQ29sdW1uOjpjcmVhdGVGcmFnbWVudGVkRmxvdyhS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCiB7Ci0gICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93KiBmcmFn
bWVudGVkRmxvdyA9IG5ldyBSZW5kZXJNdWx0aUNvbHVtbkZsb3coZmxvdy5kb2N1bWVudCgpLCBS
ZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheShmbG93LnN0eWxlKCks
IEJMT0NLKSk7Ci0gICAgZnJhZ21lbnRlZEZsb3ctPmluaXRpYWxpemVTdHlsZSgpOworICAgIGF1
dG8gbmV3RnJhZ21lbnRlZEZsb3cgPSBXZWJDb3JlOjpjcmVhdGVSZW5kZXJlcjxSZW5kZXJNdWx0
aUNvbHVtbkZsb3c+KGZsb3cuZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91
c1N0eWxlV2l0aERpc3BsYXkoZmxvdy5zdHlsZSgpLCBCTE9DSykpOworICAgIG5ld0ZyYWdtZW50
ZWRGbG93LT5pbml0aWFsaXplU3R5bGUoKTsKICAgICBmbG93LnNldENoaWxkcmVuSW5saW5lKGZh
bHNlKTsgLy8gRG8gdGhpcyB0byBhdm9pZCB3cmFwcGluZyBpbmxpbmUgY2hpbGRyZW4gdGhhdCBh
cmUganVzdCBnb2luZyB0byBtb3ZlIGludG8gdGhlIGZsb3cgdGhyZWFkLgogICAgIGZsb3cuZGVs
ZXRlTGluZXMoKTsKLSAgICBmbG93LlJlbmRlckJsb2NrOjphZGRDaGlsZChmcmFnbWVudGVkRmxv
dyk7Ci0gICAgZnJhZ21lbnRlZEZsb3ctPnBvcHVsYXRlKCk7IC8vIENhbGxlZCBhZnRlciB0aGUg
ZmxvdyB0aHJlYWQgaXMgaW5zZXJ0ZWQgc28gdGhhdCB3ZSBhcmUgcmVhY2hhYmxlIGJ5IHRoZSBm
bG93IHRocmVhZC4KLSAgICBmbG93LnNldE11bHRpQ29sdW1uRmxvdyhmcmFnbWVudGVkRmxvdyk7
CisgICAgYXV0byYgZnJhZ21lbnRlZEZsb3cgPSAqbmV3RnJhZ21lbnRlZEZsb3c7CisgICAgZmxv
dy5SZW5kZXJCbG9jazo6YWRkQ2hpbGQoV1RGTW92ZShuZXdGcmFnbWVudGVkRmxvdykpOworICAg
IGZyYWdtZW50ZWRGbG93LnBvcHVsYXRlKCk7IC8vIENhbGxlZCBhZnRlciB0aGUgZmxvdyB0aHJl
YWQgaXMgaW5zZXJ0ZWQgc28gdGhhdCB3ZSBhcmUgcmVhY2hhYmxlIGJ5IHRoZSBmbG93IHRocmVh
ZC4KKyAgICBmbG93LnNldE11bHRpQ29sdW1uRmxvdygmZnJhZ21lbnRlZEZsb3cpOwogfQogCiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>