<?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>171645</bug_id>
          
          <creation_ts>2017-05-03 21:34:32 -0700</creation_ts>
          <short_desc>Drop remaining uses of PassRefPtr from CompositeEditCommand</short_desc>
          <delta_ts>2017-05-05 16:52:22 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1304507</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-03 21:34:32 -0700</bug_when>
    <thetext>Drop remaining uses of PassRefPtr from CompositeEditCommand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304509</commentid>
    <comment_count>1</comment_count>
      <attachid>309013</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-03 21:35:43 -0700</bug_when>
    <thetext>Created attachment 309013
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304514</commentid>
    <comment_count>2</comment_count>
      <attachid>309015</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-03 21:56:59 -0700</bug_when>
    <thetext>Created attachment 309015
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304916</commentid>
    <comment_count>3</comment_count>
      <attachid>309015</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-05-04 17:51:42 -0700</bug_when>
    <thetext>Comment on attachment 309015
Patch

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

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:308
&gt; -void applyCommand(PassRefPtr&lt;CompositeEditCommand&gt; command)
&gt; +void applyCommand(CompositeEditCommand&amp; command)
&gt;  {
&gt; -    command-&gt;apply();
&gt; +    command.apply();
&gt;  }

This gets rid of the protection that references the command for the duration of apply. Is that OK?

If we don’t need protection, then why do we need this function if this is literally its implementation? Seems like we should dump it and change call sites to call apply directly.

&gt; Source/WebCore/editing/CompositeEditCommand.cpp:654
&gt; +    if (RefPtr&lt;Node&gt; highestNodeToRemove = highestNodeToRemoveInPruning(node))
&gt; +        removeNode(*highestNodeToRemove);

Seems strange to get a RefPtr here instead of a raw pointer just to call removeNode. Seems that removeNode itself needs to protect the node, but not the caller.

&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:379
&gt; +void DeleteSelectionCommand::removeNode(Node&amp; node, ShouldAssumeContentIsAlwaysEditable shouldAssumeContentIsAlwaysEditable)

Is this function guaranteed to do the right thing without protecting &quot;node&quot;? I couldn’t tell if so just by reading the code quickly.

&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:654
&gt;      if (!endBlock || !endBlock-&gt;contains(startOfParagraphToMove.deepEquivalent().deprecatedNode()) || !startOfParagraphToMove.deepEquivalent().deprecatedNode()) {
&gt; -        removeNode(enclosingBlock(m_downstreamEnd.deprecatedNode()));
&gt; +        if (endBlock)
&gt; +            removeNode(*endBlock);
&gt;          return;
&gt;      }

Maybe should break this up:

    if (!endBlock)
        return;
    if (!endBlock-&gt;contains[...]) {
        removeNode(*endBlock);
        return;
    }

&gt; Source/WebCore/editing/Editor.cpp:3624
&gt; +            auto replaceCommand = ReplaceRangeWithTextCommand::create(range.get(), acceptedCandidate.replacement);
&gt; +            applyCommand(replaceCommand);

Shorter as a one-liner.

&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:227
&gt; +void ReplacementFragment::removeNodePreservingChildren(Node&amp; node)

I think the node needs to be protected while removing its children.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304947</commentid>
    <comment_count>4</comment_count>
      <attachid>309015</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-04 18:49:46 -0700</bug_when>
    <thetext>Comment on attachment 309015
Patch

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

&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:308
&gt;&gt;  }
&gt; 
&gt; This gets rid of the protection that references the command for the duration of apply. Is that OK?
&gt; 
&gt; If we don’t need protection, then why do we need this function if this is literally its implementation? Seems like we should dump it and change call sites to call apply directly.

command is not used in this function after the call to apply(). Therefore, I do not think ref&apos;ing command for the duration of this function can be useful. I would agree it would make sense to get rid of this function all together.

&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:654
&gt;&gt; +        removeNode(*highestNodeToRemove);
&gt; 
&gt; Seems strange to get a RefPtr here instead of a raw pointer just to call removeNode. Seems that removeNode itself needs to protect the node, but not the caller.

ok

&gt;&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:379
&gt;&gt; +void DeleteSelectionCommand::removeNode(Node&amp; node, ShouldAssumeContentIsAlwaysEditable shouldAssumeContentIsAlwaysEditable)
&gt; 
&gt; Is this function guaranteed to do the right thing without protecting &quot;node&quot;? I couldn’t tell if so just by reading the code quickly.

It is hard to tell, I think I will protect it to maintain previous behavior.

&gt;&gt; Source/WebCore/editing/DeleteSelectionCommand.cpp:654
&gt;&gt;      }
&gt; 
&gt; Maybe should break this up:
&gt; 
&gt;     if (!endBlock)
&gt;         return;
&gt;     if (!endBlock-&gt;contains[...]) {
&gt;         removeNode(*endBlock);
&gt;         return;
&gt;     }

ok

&gt;&gt; Source/WebCore/editing/Editor.cpp:3624
&gt;&gt; +            applyCommand(replaceCommand);
&gt; 
&gt; Shorter as a one-liner.

ok

&gt;&gt; Source/WebCore/editing/ReplaceSelectionCommand.cpp:227
&gt;&gt; +void ReplacementFragment::removeNodePreservingChildren(Node&amp; node)
&gt; 
&gt; I think the node needs to be protected while removing its children.

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1304986</commentid>
    <comment_count>5</comment_count>
      <attachid>309138</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-04 20:50:58 -0700</bug_when>
    <thetext>Created attachment 309138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305003</commentid>
    <comment_count>6</comment_count>
      <attachid>309138</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-04 22:10:00 -0700</bug_when>
    <thetext>Comment on attachment 309138
Patch

Clearing flags on attachment: 309138

Committed r216233: &lt;http://trac.webkit.org/changeset/216233&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305004</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-05-04 22:10:02 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305408</commentid>
    <comment_count>8</comment_count>
      <attachid>309015</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-05-05 16:33:21 -0700</bug_when>
    <thetext>Comment on attachment 309015
Patch

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

&gt;&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:308
&gt;&gt;&gt;  }
&gt;&gt; 
&gt;&gt; This gets rid of the protection that references the command for the duration of apply. Is that OK?
&gt;&gt; 
&gt;&gt; If we don’t need protection, then why do we need this function if this is literally its implementation? Seems like we should dump it and change call sites to call apply directly.
&gt; 
&gt; command is not used in this function after the call to apply(). Therefore, I do not think ref&apos;ing command for the duration of this function can be useful. I would agree it would make sense to get rid of this function all together.

I was worrying about code *inside* apply indirectly causing the command to be deref’d. Maybe that’s not a real issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305425</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-05 16:52:22 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 309015 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=309015&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/editing/CompositeEditCommand.cpp:308
&gt; &gt;&gt;&gt;  }
&gt; &gt;&gt; 
&gt; &gt;&gt; This gets rid of the protection that references the command for the duration of apply. Is that OK?
&gt; &gt;&gt; 
&gt; &gt;&gt; If we don’t need protection, then why do we need this function if this is literally its implementation? Seems like we should dump it and change call sites to call apply directly.
&gt; &gt; 
&gt; &gt; command is not used in this function after the call to apply(). Therefore, I do not think ref&apos;ing command for the duration of this function can be useful. I would agree it would make sense to get rid of this function all together.
&gt; 
&gt; I was worrying about code *inside* apply indirectly causing the command to
&gt; be deref’d. Maybe that’s not a real issue.

Oh, I undestand now. I&apos;ll double check to make sure it is safe.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309013</attachid>
            <date>2017-05-03 21:35:43 -0700</date>
            <delta_ts>2017-05-03 21:56:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171645-20170503213542.patch</filename>
            <type>text/plain</type>
            <size>104558</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjkyZWQyZWU4MTNhMTlh
OWEzNzE1NDYyMmJkMTZjMTk1MGEyY2E4OS4uNWE4MWM3OWRlMTk0MjMzYWFjNjU4NDNiMzgxMjAy
Yjg0YTc1YTkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxNy0wNS0wMyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERyb3AgcmVtYWluaW5nIHVz
ZXMgb2YgUGFzc1JlZlB0ciBmcm9tIENvbXBvc2l0ZUVkaXRDb21tYW5kCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE2NDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEcm9wIHJlbWFpbmluZyB1c2VzIG9m
IFBhc3NSZWZQdHIgZnJvbSBDb21wb3NpdGVFZGl0Q29tbWFuZC4KKworICAgICAgICAqIGVkaXRp
bmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmVu
ZE9mTmV4dFBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAgICAgKiBl
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpjbGVhbnVwVW5zdHlsZWRBcHBsZVN0eWxlU3BhbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0QW5jZXN0b3JzV2l0aFVu
aWNvZGVCaWRpKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVF
bWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJ
ZldpdGhvdXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRBdFN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRBdEVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6am9p
bkNoaWxkVGV4dE5vZGVzKToKKyAgICAgICAgKiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBs
eSk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphcHBseUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRp
dENvbW1hbmQ6Omluc2VydE5vZGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZW5JblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVSZW1haW5pbmdT
aWJsaW5nc1RvTmV3UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21t
YW5kOjpyZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJ1bmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VGV4dE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bWVyZ2VJZGVudGljYWxFbGVtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUZXh0Tm9k
ZUNvbnRhaW5pbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21t
YW5kOjpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUVkaXRDb21tYW5kOjpzZXROb2RlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaENvbnRl
bnRzVG9OZXdCbG9ja0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjpwdXNoQW5jaG9yRWxlbWVudERvd24pOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgICogZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpoYW5kbGVTcGVjaWFsQ2FzZUJSRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VTdHlsaW5nRWxlbWVudHNEaXJlY3RD
aGlsZHJlbk9mRWRpdGFibGVSb290VG9QcmV2ZW50U3R5bGVMb3NzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVByZXZpb3VzbHlT
ZWxlY3RlZEVtcHR5VGFibGVSb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudEJsb2Nrcyk6CisgICAgICAgICogZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUpOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRm9y
bWF0QmxvY2spOgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgp
OgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExp
c3RDb21tYW5kOjpmaXhPcnBoYW5lZExpc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYXBoKToKKyAgICAgICAgKiBl
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
ICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRUZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKToKKyAgICAgICAgKiBlZGl0aW5nL01vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWxDb21tYW5kOjppbnNlcnRTaWJsaW5nTm9kZVJhbmdlQmVmb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6Omluc2VydFNpYmxpbmdOb2Rl
UmFuZ2VBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWxD
b21tYW5kOjphcHBlbmRTaWJsaW5nTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGlu
Zy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6UmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbkNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRp
bmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVw
bGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb0FwcGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb1VuYXBwbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OmdldE5vZGVzSW5D
b21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmg6
CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6Y3JlYXRlKToK
KyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJj
aGFuZ2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZUluc2VydGVkQ29udGVudFJvdW5k
VHJpcHBhYmxlV2l0aEhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVPdXRPZkFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRF
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxl
U3BhbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4
dE5vZGVzQXJvdW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6Omluc2VydEFzTGlzdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UpOgorICAgICAgICAqIGVkaXRp
bmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0Tm9k
ZUF0dHJpYnV0ZUNvbW1hbmQ6OlNldE5vZGVBdHRyaWJ1dGVDb21tYW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZCk6CisgICAg
ICAgICogZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9T
aW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZnlNYXJr
dXBDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZ5TWFya3VwQ29t
bWFuZDo6cHJ1bmVTdWJzZXF1ZW50QW5jZXN0b3JzVG9SZW1vdmUpOgorICAgICAgICAqIGVkaXRp
bmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OlNw
bGl0RWxlbWVudENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRFbGVtZW50Q29tbWFu
ZDo6ZXhlY3V0ZUFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6
OmdldE5vZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9SZWFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNw
bGl0VGV4dE5vZGVDb21tYW5kOjppbnNlcnRUZXh0MUFuZFRyaW1UZXh0Mik6CisgICAgICAgICog
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRU
ZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OlNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHRO
b2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcv
VGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbnNl
cnRpb25CYXNlQ29tbWFuZDo6YXBwbHlUZXh0SW5zZXJ0aW9uQ29tbWFuZCk6CisgICAgICAgICog
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1h
bmQ6Om1ha2VFZGl0YWJsZVJvb3RFbXB0eSk6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpj
b250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisKIDIwMTctMDUtMDMgIEFuZHkgRXN0ZXMgIDxhZXN0
ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0byBmaXggdGhlIG1hY09TIFB1YmxpYyBTREsg
YnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1l
bnRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmNwcAppbmRleCBlNTRkMjkzMmJkYWEzOWMzZDUzZTZmZWVlMzIxN2M3ZmZmOGQzZDVj
Li44OWNkMjk0Zjg3MzA4YjhmYzg0OTg2NWNlMDBjOWFjNDc3MzZlNGRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCkBAIC0y
MTIsNyArMjEyLDggQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUGFy
YWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQoY29uc3QKICAgICAgICAgaWYgKCFzdGFy
dFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSA+IDApIHsKICAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpOwogICAgICAgICAgICAgVGV4dCogc3RhcnRUZXh0ID0gc3RhcnQuY29u
dGFpbmVyVGV4dCgpOwotICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZShzdGFydFRleHQsIHN0YXJ0
T2Zmc2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChzdGFydFRleHQpOworICAgICAgICAgICAgc3Bs
aXRUZXh0Tm9kZSgqc3RhcnRUZXh0LCBzdGFydE9mZnNldCk7CiAgICAgICAgICAgICBzdGFydCA9
IGZpcnN0UG9zaXRpb25Jbk5vZGUoc3RhcnRUZXh0KTsKICAgICAgICAgICAgIGlmIChpc1N0YXJ0
QW5kRW5kT25TYW1lTm9kZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChlbmQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgPj0gc3RhcnRPZmZzZXQpOwpAQCAtMjM5LDcgKzI0MCw3IEBAIHZvaWQg
QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHRO
b2Rlc0lmTmVlZGVkKGNvbnN0CiAgICAgICAgIC8vIElmIGVuZCBpcyBpbiB0aGUgbWlkZGxlIG9m
IGEgdGV4dCBub2RlIGFuZCB0aGUgdGV4dCBub2RlIGlzIGVkaXRhYmxlLCBzcGxpdC4KICAgICAg
ICAgaWYgKGVuZFN0eWxlLT51c2VyTW9kaWZ5KCkgIT0gUkVBRF9PTkxZICYmICFlbmRTdHlsZS0+
Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpICYmIGVu
ZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250YWluZXJOb2RlKCktPm1heENoYXJh
Y3Rlck9mZnNldCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8VGV4dD4gZW5kQ29udGFpbmVyID0g
ZW5kLmNvbnRhaW5lclRleHQoKTsKLSAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoZW5kQ29udGFp
bmVyLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgICAgICAgICAgc3BsaXRUZXh0
Tm9kZSgqZW5kQ29udGFpbmVyLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAg
ICAgICAgaWYgKGlzU3RhcnRBbmRFbmRPblNhbWVOb2RlKQogICAgICAgICAgICAgICAgIHN0YXJ0
ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGVuZENvbnRhaW5lci0+cHJldmlvdXNTaWJs
aW5nKCkpOwogICAgICAgICAgICAgaWYgKGlzRW5kQW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1l
Tm9kZSkgewpAQCAtMjY4LDcgKzI2OSw3IEBAIFZpc2libGVQb3NpdGlvbiBBcHBseUJsb2NrRWxl
bWVudENvbW1hbmQ6OmVuZE9mTmV4dFBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmCiAgICAg
Ly8gXG4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCBub2RlIGltbWVkaWF0ZWx5IGZvbGxv
d2luZyB0aGUgY3VycmVudCBwYXJhZ3JhcGggaXMgdHJpbW1lZCBieSBtb3ZlUGFyYWdyYXBoV2l0
aENsb25lcy4KICAgICAvLyBJZiBlbmRPZk5leHRQYXJhZ3JhcGggd2FzIHBvaW50aW5nIGF0IHRo
aXMgc2FtZSB0ZXh0IG5vZGUsIGVuZE9mTmV4dFBhcmFncmFwaCB3aWxsIGJlIHNoaWZ0ZWQgYnkg
b25lIHBhcmFncmFwaC4KICAgICAvLyBBdm9pZCB0aGlzIGJ5IHNwbGl0dGluZyAiXG4iCi0gICAg
c3BsaXRUZXh0Tm9kZSh0ZXh0LCAxKTsKKyAgICBzcGxpdFRleHROb2RlKCp0ZXh0LCAxKTsKIAog
ICAgIGlmICh0ZXh0ID09IHN0YXJ0LmNvbnRhaW5lck5vZGUoKSAmJiBpczxUZXh0Pih0ZXh0LT5w
cmV2aW91c1NpYmxpbmcoKSkpIHsKICAgICAgICAgQVNTRVJUKHN0YXJ0Lm9mZnNldEluQ29udGFp
bmVyTm9kZSgpIDwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCA1YmViNmFhODBlZWQy
OTQ4NjBiMTZkYzRiMjNjZjk2ODk1YjRhMGYwLi42MDM3NDAyMDQ2YjdkZmNmYWJhN2UzMmZjMDhl
MzdlN2Q4YjQ2MmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcApAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICB9CiAKICAg
ICAvLyBUaGVzZSBzcGFucyB3ZXJlIGFkZGVkIGJ5IHVzLiBJZiBlbXB0eSBhZnRlciBmb250IHNp
emUgY2hhbmdlcywgdGhleSBjYW4gYmUgcmVtb3ZlZC4KLSAgICBWZWN0b3I8UmVmUHRyPEhUTUxF
bGVtZW50Pj4gdW5zdHlsZWRTcGFuczsKKyAgICBWZWN0b3I8UmVmPEhUTUxFbGVtZW50Pj4gdW5z
dHlsZWRTcGFuczsKICAgICAKICAgICBOb2RlKiBsYXN0U3R5bGVkTm9kZSA9IG51bGxwdHI7CiAg
ICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CkBAIC00MTcsMTcgKzQxNywxNyBAQCB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdT
dHlsZSogc3R5bGUpCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRGb250U2l6ZSAhPSBk
ZXNpcmVkRm9udFNpemUpIHsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRTaXplLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KGRlc2lyZWRGb250U2l6ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCksIGZhbHNlKTsKLSAg
ICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudC5nZXQoKSwgc3R5bGVBdHRyLCBpbmxp
bmVTdHlsZS0+YXNUZXh0KCkpOworICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgqZWxlbWVu
dCwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChpbmxpbmVTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2RlQXR0
cmlidXRlKCplbGVtZW50LCBzdHlsZUF0dHIpOwogICAgICAgICAgICAgaWYgKGlzU3BhbldpdGhv
dXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3BhbigqZWxlbWVudCkpCi0gICAgICAgICAgICAg
ICAgdW5zdHlsZWRTcGFucy5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CisgICAgICAgICAgICAg
ICAgdW5zdHlsZWRTcGFucy5hcHBlbmQoZWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIGZvciAoYXV0byYgdW5zdHlsZWRTcGFuIDogdW5zdHlsZWRTcGFu
cykKLSAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih1bnN0eWxlZFNwYW4uZ2V0
KCkpOworICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHVuc3R5bGVkU3Bhbik7
CiB9CiAKIHN0YXRpYyBDb250YWluZXJOb2RlKiBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUoY29u
c3QgTm9kZSogbm9kZSkKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjpjbGVhbnVwVW5zdHlsZWRBcHBsZVN0eWxlU3BhbnMoQ29udGFpbmVyTm9kZSogZHVtbXlTcGFu
QQogICAgIH0KIAogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHRvUmVtb3ZlKQotICAgICAgICBy
ZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOworICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKCplbGVtZW50KTsKIH0KIAogSFRNTEVsZW1lbnQqIEFwcGx5U3R5
bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShOb2RlKiBub2RlLCBib29s
IGJlZm9yZSwgV3JpdGluZ0RpcmVjdGlvbiBhbGxvd2VkRGlyZWN0aW9uKQpAQCAtNTAxLDcgKzUw
MSw3IEBAIEhUTUxFbGVtZW50KiBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRBbmNlc3RvcnNXaXRo
VW5pY29kZUJpZGkoTm9kZSogbm9kZSwgYm9vbCBiCiAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7
CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBwYXJlbnQgPSBkb3duY2FzdDxFbGVtZW50PihjdXJy
ZW50Tm9kZS0+cGFyZW50Tm9kZSgpKTsKICAgICAgICAgaWYgKGJlZm9yZSA/IGN1cnJlbnROb2Rl
LT5wcmV2aW91c1NpYmxpbmcoKSA6IGN1cnJlbnROb2RlLT5uZXh0U2libGluZygpKQotICAgICAg
ICAgICAgc3BsaXRFbGVtZW50KHBhcmVudCwgYmVmb3JlID8gY3VycmVudE5vZGUgOiBjdXJyZW50
Tm9kZS0+bmV4dFNpYmxpbmcoKSk7CisgICAgICAgICAgICBzcGxpdEVsZW1lbnQoKnBhcmVudCwg
YmVmb3JlID8gKmN1cnJlbnROb2RlIDogKmN1cnJlbnROb2RlLT5uZXh0U2libGluZygpKTsKICAg
ICAgICAgaWYgKHBhcmVudCA9PSBoaWdoZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY3VycmVudE5vZGUgPSBwYXJlbnQ7CkBAIC01MzgsOSAr
NTM4LDkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xv
c2luZ0Jsb2NrKE5vZGUqIG5vZGUsIE5vZGUqIHVuc3AKICAgICAgICAgICAgIFJlZlB0cjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBpbmxpbmVTdHlsZSA9IGNvcHlTdHlsZU9yQ3JlYXRlRW1wdHko
ZWxlbWVudC5pbmxpbmVTdHlsZSgpKTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgICAg
ICBpbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwotICAg
ICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgmZWxlbWVudCwgc3R5bGVBdHRyLCBpbmxpbmVTdHls
ZS0+YXNUZXh0KCkpOworICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHls
ZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgICAgICAgICBpZiAoaXNTcGFuV2l0
aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKGVsZW1lbnQpKQotICAgICAgICAgICAg
ICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOworICAgICAgICAgICAg
ICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkBAIC03OTIsNyArNzkyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIE5vZGUmIHMKICAgICAg
ICAgICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBpbmxpbmVTdHlsZSA9IGNvcHlT
dHlsZU9yQ3JlYXRlRW1wdHkoZWxlbWVudC5pbmxpbmVTdHlsZSgpKTsKICAgICAgICAgICAgIGlm
IChNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBvdGhlclN0eWxlID0gc3R5bGUuc3R5bGUoKSkKICAg
ICAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+bWVyZ2VBbmRPdmVycmlkZU9uQ29uZmxpY3QoKm90
aGVyU3R5bGUpOwotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgmZWxlbWVudCwgc3R5bGVB
dHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOworICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0
ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgICAgICAg
ICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTgzOCw3ICs4MzgsNyBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxl
JiBzdHlsZSwgTm9kZSYgcwogCiAgICAgZm9yIChhdXRvJiBydW4gOiBydW5zKSB7CiAgICAgICAg
IGlmIChydW4uZHVtbXlFbGVtZW50KQotICAgICAgICAgICAgcmVtb3ZlTm9kZShydW4uZHVtbXlF
bGVtZW50KTsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoKnJ1bi5kdW1teUVsZW1lbnQpOwogICAg
ICAgICBpZiAocnVuLnN0YXJ0QW5kRW5kQXJlU3RpbGxJbkRvY3VtZW50KCkpCiAgICAgICAgICAg
ICBhcHBseUlubGluZVN0eWxlQ2hhbmdlKHJ1bi5zdGFydC5yZWxlYXNlTm9uTnVsbCgpLCBydW4u
ZW5kLnJlbGVhc2VOb25OdWxsKCksIHJ1bi5jaGFuZ2UsIEFkZFN0eWxlZEVsZW1lbnQpOwogICAg
IH0KQEAgLTkwNCw3ICs5MDQsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxp
bmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSYgc3R5bGUsIEhUTUxFbAogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChleHRyYWN0ZWRTdHlsZSkKICAgICAgICAgICAg
IGV4dHJhY3RlZFN0eWxlLT5tZXJnZUlubGluZVN0eWxlT2ZFbGVtZW50KCZlbGVtZW50LCBFZGl0
aW5nU3R5bGU6Ok92ZXJyaWRlVmFsdWVzKTsKLSAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbigmZWxlbWVudCk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4o
ZWxlbWVudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTI2LDkgKzkyNiw5
IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQo
RWRpdGluZ1N0eWxlJiBzdHlsZSwgSFRNTEVsCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZXBs
YWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoSFRNTEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgaWYgKGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoZWxlbWVu
dCwgU3R5bGVBdHRyaWJ1dGVTaG91bGRCZUVtcHR5KSkKLSAgICAgICAgcmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbigmZWxlbWVudCk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW4oZWxlbWVudCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBuZXdTcGFu
RWxlbWVudCA9IHJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRy
aWJ1dGVzKCZlbGVtZW50KTsKKyAgICAgICAgSFRNTEVsZW1lbnQqIG5ld1NwYW5FbGVtZW50ID0g
cmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoZWxl
bWVudCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3U3BhbkVsZW1lbnQsIG5ld1NwYW5FbGVt
ZW50ICYmIG5ld1NwYW5FbGVtZW50LT5pc0Nvbm5lY3RlZCgpKTsKICAgICB9CiB9CkBAIC05NTcs
NyArOTU3LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW1wbGljaXRseVN0eWxl
ZEVsZW1lbnQoRWRpdGluZ1N0eWxlJiBzdHlsZSwgSFRNTEUKICAgICAgICAgcmVtb3ZlTm9kZUF0
dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGUpOwogCiAgICAgaWYgKGlzRW1wdHlGb250VGFnKCZl
bGVtZW50KSB8fCBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxl
bWVudCkpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOwor
ICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC05NzQsMTAgKzk3NCwxMCBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVDU1NTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVu
dAogICAgIGlmIChuZXdJbmxpbmVTdHlsZS0+aXNFbXB0eSgpKQogICAgICAgICByZW1vdmVOb2Rl
QXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0cik7CiAgICAgZWxzZQotICAgICAgICBzZXROb2Rl
QXR0cmlidXRlKCZlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5hc1RleHQoKSk7
CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBuZXdJbmxpbmVT
dHlsZS0+YXNUZXh0KCkpOwogCiAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0
eWxlZFN0eWxlU3BhbihlbGVtZW50KSkKLSAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbigmZWxlbWVudCk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxl
bWVudCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUmIG5vZGUs
IEVkaXRpbmdTdHlsZSogc3R5CiAgICAgLy8gU2luY2UgYWRkSW5saW5lU3R5bGVJZk5lZWRlZCBj
YW4ndCBhZGQgc3R5bGVzIHRvIGJsb2NrLWZsb3cgcmVuZGVyIG9iamVjdHMsIGFkZCBzdHlsZSBh
dHRyaWJ1dGUgaW5zdGVhZC4KICAgICAvLyBGSVhNRTogYXBwbHlJbmxpbmVTdHlsZVRvUmFuZ2Ug
c2hvdWxkIGJlIHVzZWQgaGVyZSBpbnN0ZWFkLgogICAgIGlmICgobm9kZS5yZW5kZXJlcigpLT5p
c1JlbmRlckJsb2NrRmxvdygpIHx8IG5vZGUuaGFzQ2hpbGROb2RlcygpKSAmJiBpczxIVE1MRWxl
bWVudD4obm9kZSkpIHsKLSAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgmZG93bmNhc3Q8SFRNTEVs
ZW1lbnQ+KG5vZGUpLCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQo
KSk7CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUp
LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTExOTgsNyArMTE5OCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnNwbGl0VGV4dEF0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3Np
dGlvbiYKICAgICAgICAgbmV3RW5kID0gZW5kOwogCiAgICAgUmVmUHRyPFRleHQ+IHRleHQgPSBz
dGFydC5jb250YWluZXJUZXh0KCk7Ci0gICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBzdGFydC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgc3BsaXRUZXh0Tm9kZSgqdGV4dCwgc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgIHVwZGF0ZVN0YXJ0RW5kKGZpcnN0UG9zaXRpb25J
bk5vZGUodGV4dC5nZXQoKSksIG5ld0VuZCk7CiB9CiAKQEAgLTEyMDgsNyArMTIwOCw3IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgUG9zaXRpb24mIGVuCiAKICAgICBib29sIHNob3VsZFVwZGF0ZVN0YXJ0ID0gc3Rh
cnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYg
c3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5jb250YWluZXJOb2RlKCk7CiAgICAgVGV4dCYg
dGV4dCA9IGRvd25jYXN0PFRleHQ+KCplbmQuZGVwcmVjYXRlZE5vZGUoKSk7Ci0gICAgc3BsaXRU
ZXh0Tm9kZSgmdGV4dCwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICBzcGxpdFRl
eHROb2RlKHRleHQsIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAKICAgICBOb2RlKiBw
cmV2Tm9kZSA9IHRleHQucHJldmlvdXNTaWJsaW5nKCk7CiAgICAgaWYgKCFpczxUZXh0PihwcmV2
Tm9kZSkpCkBAIC0xMjI4LDcgKzEyMjgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxp
dFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvcwogICAg
IGVsc2UKICAgICAgICAgbmV3RW5kID0gZW5kOwogCi0gICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5p
bmdFbGVtZW50KHN0YXJ0LmNvbnRhaW5lclRleHQoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkpOworICAgIHNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudCgqc3RhcnQuY29udGFp
bmVyVGV4dCgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgdXBkYXRlU3Rh
cnRFbmQocG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0LmNvbnRhaW5lck5vZGUoKSksIG5ld0VuZCk7
CiB9CiAKQEAgLTEyMzcsNyArMTIzNyw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0
VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0CiAgICAg
QVNTRVJUKGlzPFRleHQ+KGVuZC5jb250YWluZXJOb2RlKCkpKTsKIAogICAgIGJvb2wgc2hvdWxk
VXBkYXRlU3RhcnQgPSBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5vZGUo
KTsKLSAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoZW5kLmNvbnRhaW5lclRleHQo
KSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICBzcGxpdFRleHROb2RlQ29udGFp
bmluZ0VsZW1lbnQoKmVuZC5jb250YWluZXJUZXh0KCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSk7CiAKICAgICBOb2RlKiBwYXJlbnRFbGVtZW50ID0gZW5kLmNvbnRhaW5lck5vZGUoKS0+
cGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50RWxlbWVudCB8fCAhcGFyZW50RWxlbWVudC0+
cHJldmlvdXNTaWJsaW5nKCkpCkBAIC0xMzQzLDcgKzEzNDMsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KE5vZGUmIHN0YXJ0Tm9kZSwgTm9k
ZSYgZW5kTgogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0g
bm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGlzRWRpdGFibGVOb2RlKCpub2RlKSkg
ewotICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlKTsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUo
Km5vZGUpOwogICAgICAgICAgICAgYXBwZW5kTm9kZSgqbm9kZSwgZWxlbWVudC5jb3B5UmVmKCkp
OwogICAgICAgICB9CiAgICAgICAgIGlmIChub2RlID09ICZlbmROb2RlKQpAQCAtMTM4Myw3ICsx
MzgzLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjb25zdCBTdHls
ZUNoYW5nZSYgc3R5bGVDaGFuZ2UsIEhUTUxFbGVtZW4KICAgICAgICAgICAgIGNzc1RleHQuYXBw
ZW5kKCcgJyk7CiAgICAgICAgIGNzc1RleHQuYXBwZW5kKGRlY2wtPmFzVGV4dCgpKTsKICAgICB9
Ci0gICAgc2V0Tm9kZUF0dHJpYnV0ZSgmYmxvY2ssIHN0eWxlQXR0ciwgY3NzVGV4dC50b1N0cmlu
ZygpKTsKKyAgICBzZXROb2RlQXR0cmlidXRlKGJsb2NrLCBzdHlsZUF0dHIsIGNzc1RleHQudG9T
dHJpbmcoKSk7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxlSWZO
ZWVkZWQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgc3RhcnQsIE5vZGUmIGVuZCwgRUFkZFN0
eWxlZEVsZW1lbnQgYWRkU3R5bGVkRWxlbWVudCkKQEAgLTEzOTYsNyArMTM5Niw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxlSWZOZWVkZWQoRWRpdGluZ1N0eWxlKiBz
dHlsZSwgTm9kZSYgc3RhcnQsCiAgICAgU3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2Uoc3R5bGUsIHBv
c2l0aW9uVG9Db21wdXRlSW5saW5lU3R5bGVDaGFuZ2Uoc3RhcnQsIGR1bW15RWxlbWVudCkpOwog
CiAgICAgaWYgKGR1bW15RWxlbWVudCkKLSAgICAgICAgcmVtb3ZlTm9kZShkdW1teUVsZW1lbnQp
OworICAgICAgICByZW1vdmVOb2RlKCpkdW1teUVsZW1lbnQpOwogCiAgICAgYXBwbHlJbmxpbmVT
dHlsZUNoYW5nZShzdGFydCwgZW5kLCBzdHlsZUNoYW5nZSwgYWRkU3R5bGVkRWxlbWVudCk7CiB9
CkBAIC0xNDQyLDExICsxNDQyLDExIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5s
aW5lU3R5bGVDaGFuZ2UoTm9kZSYgcGFzc2VkU3RhcnQsIE5vZGUmIHBhc3NlZEVuCiAgICAgaWYg
KHN0eWxlQ2hhbmdlLmFwcGx5Rm9udENvbG9yKCkgfHwgc3R5bGVDaGFuZ2UuYXBwbHlGb250RmFj
ZSgpIHx8IHN0eWxlQ2hhbmdlLmFwcGx5Rm9udFNpemUoKSkgewogICAgICAgICBpZiAoZm9udENv
bnRhaW5lcikgewogICAgICAgICAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Rm9udENvbG9yKCkp
Ci0gICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShmb250Q29udGFpbmVyLCBjb2xvckF0
dHIsIHN0eWxlQ2hhbmdlLmZvbnRDb2xvcigpKTsKKyAgICAgICAgICAgICAgICBzZXROb2RlQXR0
cmlidXRlKCpmb250Q29udGFpbmVyLCBjb2xvckF0dHIsIHN0eWxlQ2hhbmdlLmZvbnRDb2xvcigp
KTsKICAgICAgICAgICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUZvbnRGYWNlKCkpCi0gICAgICAg
ICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShmb250Q29udGFpbmVyLCBmYWNlQXR0ciwgc3R5bGVD
aGFuZ2UuZm9udEZhY2UoKSk7CisgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgqZm9u
dENvbnRhaW5lciwgZmFjZUF0dHIsIHN0eWxlQ2hhbmdlLmZvbnRGYWNlKCkpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Rm9udFNpemUoKSkKLSAgICAgICAgICAgICAgICBzZXRO
b2RlQXR0cmlidXRlKGZvbnRDb250YWluZXIsIHNpemVBdHRyLCBzdHlsZUNoYW5nZS5mb250U2l6
ZSgpKTsKKyAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKCpmb250Q29udGFpbmVyLCBz
aXplQXR0ciwgc3R5bGVDaGFuZ2UuZm9udFNpemUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBhdXRvIGZvbnRFbGVtZW50ID0gY3JlYXRlRm9udEVsZW1lbnQoZG9jdW1lbnQoKSk7
CiAgICAgICAgICAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlGb250Q29sb3IoKSkKQEAgLTE0NjQs
OSArMTQ2NCw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVDaGFu
Z2UoTm9kZSYgcGFzc2VkU3RhcnQsIE5vZGUmIHBhc3NlZEVuCiAgICAgICAgICAgICBpZiAoYXV0
byBleGlzdGluZ1N0eWxlID0gc3R5bGVDb250YWluZXItPmlubGluZVN0eWxlKCkpIHsKICAgICAg
ICAgICAgICAgICBhdXRvIGlubGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoZXhpc3Rp
bmdTdHlsZSk7CiAgICAgICAgICAgICAgICAgaW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0eWxl
KHN0eWxlVG9NZXJnZSk7Ci0gICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNv
bnRhaW5lciwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkpOworICAg
ICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoKnN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIs
IGlubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIs
IHN0eWxlVG9NZXJnZS0+YXNUZXh0KCkpOworICAgICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1
dGUoKnN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIsIHN0eWxlVG9NZXJnZS0+YXNUZXh0KCkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXV0byBzdHlsZUVsZW1lbnQgPSBjcmVhdGVT
dHlsZVNwYW5FbGVtZW50KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgc3R5bGVFbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBzdHlsZVRvTWVyZ2UtPmFzVGV4dCgpKTsKQEAgLTE1Mjgs
NyArMTUyOCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2RlcyhO
b2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvCiAgICAgICAgICAgICBuZXdFbmQg
PSBQb3NpdGlvbihjaGlsZFRleHQucHRyKCksIGNoaWxkVGV4dC0+bGVuZ3RoKCkgKyBlbmQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICBTdHJpbmcgdGV4dFRvTW92ZSA9IG5leHRU
ZXh0LmRhdGEoKTsKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGNoaWxkVGV4dCwgY2hpbGRU
ZXh0LT5sZW5ndGgoKSwgdGV4dFRvTW92ZSk7Ci0gICAgICAgIHJlbW92ZU5vZGUobmV4dCk7Cisg
ICAgICAgIHJlbW92ZU5vZGUoKm5leHQpOwogICAgICAgICAvLyBkb24ndCBtb3ZlIGNoaWxkIG5v
ZGUgcG9pbnRlci4gaXQgbWF5IHdhbnQgdG8gbWVyZ2Ugd2l0aCBtb3JlIHRleHQgbm9kZXMuCiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90
ZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21t
YW5kLmNwcAppbmRleCA5ODJjYzk5NTJmMDk3ZTQ3N2RkNWI0YTMxOWEyNjhjNTQzYjI3ODFlLi41
ODIxYjA4MmQ5NjhmYmM4NDVhOTUyYTM3YWQ0YmI3Yzg5OTIyZmU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKQEAgLTExMiw3ICsx
MTIsNyBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAg
ICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqc3RhcnROb2RlKTsKICAgICAgICAg
ICAgIEFTU0VSVChzdGFydE5vZGUpOwogICAgICAgICB9IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpID4gMCkKLSAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoJnRleHROb2Rl
LCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgICAgICAgICBzcGxpdFRleHRO
b2RlKHRleHROb2RlLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgfSBlbHNl
IGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDApIHsKICAgICAgICAgTm9kZSog
Y2hpbGRBdE9mZnNldCA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQocG9zLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICBzdGFydE5vZGUgPSBjaGlsZEF0T2Zmc2V0ID8g
Y2hpbGRBdE9mZnNldCA6IE5vZGVUcmF2ZXJzYWw6Om5leHQoKnN0YXJ0Tm9kZSk7CkBAIC0xNDks
MTQgKzE0OSwxNCBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
ICAgICAgICAgd2hpbGUgKGxpc3RDaGlsZE5vZGUgJiYgIWxpc3RDaGlsZE5vZGUtPmhhc1RhZ05h
bWUobGlUYWcpKQogICAgICAgICAgICAgICAgIGxpc3RDaGlsZE5vZGUgPSBsaXN0Q2hpbGROb2Rl
LT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgaWYgKGxpc3RDaGlsZE5vZGUgJiYgaXM8UmVu
ZGVyTGlzdEl0ZW0+KGxpc3RDaGlsZE5vZGUtPnJlbmRlcmVyKCkpKQotICAgICAgICAgICAgICAg
IHNldE5vZGVBdHRyaWJ1dGUoY2xvbmVkQ2hpbGQucHRyKCksIHN0YXJ0QXR0ciwgQXRvbWljU3Ry
aW5nOjpudW1iZXIoZG93bmNhc3Q8UmVuZGVyTGlzdEl0ZW0+KCpsaXN0Q2hpbGROb2RlLT5yZW5k
ZXJlcigpKS52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShjbG9u
ZWRDaGlsZCwgc3RhcnRBdHRyLCBBdG9taWNTdHJpbmc6Om51bWJlcihkb3duY2FzdDxSZW5kZXJM
aXN0SXRlbT4oKmxpc3RDaGlsZE5vZGUtPnJlbmRlcmVyKCkpLnZhbHVlKCkpKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGFwcGVuZE5vZGUoY2xvbmVkQ2hpbGQuY29weVJlZigp
LCBjbG9uZWRBbmNlc3Rvci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgY2xvbmVkQW5jZXN0
b3IgPSBXVEZNb3ZlKGNsb25lZENoaWxkKTsKICAgICB9CiAKLSAgICBtb3ZlUmVtYWluaW5nU2li
bGluZ3NUb05ld1BhcmVudChzdGFydE5vZGUsIDAsIGNsb25lZEFuY2VzdG9yKTsKKyAgICBtb3Zl
UmVtYWluaW5nU2libGluZ3NUb05ld1BhcmVudChzdGFydE5vZGUsIDAsICpjbG9uZWRBbmNlc3Rv
cik7CiAKICAgICBpZiAoIWFuY2VzdG9ycy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gU3BsaXQg
dGhlIHRyZWUgdXAgdGhlIGFuY2VzdG9yIGNoYWluIHVudGlsIHRoZSB0b3BCbG9ja3F1b3RlCkBA
IC0xNjgsMTIgKzE2OCwxMiBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHko
KQogICAgICAgICBmb3IgKGFuY2VzdG9yID0gYW5jZXN0b3JzLmZpcnN0KCksIGNsb25lZFBhcmVu
dCA9IGNsb25lZEFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgICAgICAgYW5jZXN0
b3IgJiYgYW5jZXN0b3IgIT0gdG9wQmxvY2txdW90ZTsKICAgICAgICAgICAgICBhbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCksIGNsb25lZFBhcmVudCA9IGNsb25lZFBhcmVudC0+
cGFyZW50RWxlbWVudCgpKQotICAgICAgICAgICAgbW92ZVJlbWFpbmluZ1NpYmxpbmdzVG9OZXdQ
YXJlbnQoYW5jZXN0b3ItPm5leHRTaWJsaW5nKCksIDAsIGNsb25lZFBhcmVudCk7CisgICAgICAg
ICAgICBtb3ZlUmVtYWluaW5nU2libGluZ3NUb05ld1BhcmVudChhbmNlc3Rvci0+bmV4dFNpYmxp
bmcoKSwgMCwgKmNsb25lZFBhcmVudCk7CiAKICAgICAgICAgLy8gSWYgdGhlIHN0YXJ0Tm9kZSdz
IG9yaWdpbmFsIHBhcmVudCBpcyBub3cgZW1wdHksIHJlbW92ZSBpdAogICAgICAgICBOb2RlKiBv
cmlnaW5hbFBhcmVudCA9IGFuY2VzdG9ycy5maXJzdCgpLmdldCgpOwogICAgICAgICBpZiAoIW9y
aWdpbmFsUGFyZW50LT5oYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgICAgICByZW1vdmVOb2RlKG9y
aWdpbmFsUGFyZW50KTsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoKm9yaWdpbmFsUGFyZW50KTsK
ICAgICB9CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjbG9uZWQgYmxvY2sgcXVvdGUgcmVu
ZGVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAKaW5kZXggOGFhYmIzMmNmNDU5NzU5YmUwYjE0M2M2MDk5NmIyMjE4NTg1YTcxZi4uOTUwMGM2
NTEzZjA5ZTA5NmM3MTY4YmU3NDNkMDczNmE3NjVmOTlhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTMwMiw5ICszMDIsOSBAQCB2
b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OmdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9k
ZSo+JiBub2RlcykKIH0KICNlbmRpZgogCi12b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPENv
bXBvc2l0ZUVkaXRDb21tYW5kPiBjb21tYW5kKQordm9pZCBhcHBseUNvbW1hbmQoQ29tcG9zaXRl
RWRpdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgY29tbWFuZC0+YXBwbHkoKTsKKyAgICBjb21t
YW5kLmFwcGx5KCk7CiB9CiAKIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpDb21wb3NpdGVFZGl0Q29t
bWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTU2
NSw3ICs1NjUsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQoUmVm
PE5vZGU+JiYgaW5zZXJ0Q2hpbGQsIGNvbnN0IFBvc2l0aW9uJgogICAgIH0gZWxzZSBpZiAoY2Fy
ZXRNaW5PZmZzZXQoKnJlZkNoaWxkKSA+PSBvZmZzZXQpCiAgICAgICAgIGluc2VydE5vZGVCZWZv
cmUoV1RGTW92ZShpbnNlcnRDaGlsZCksICpyZWZDaGlsZCk7CiAgICAgZWxzZSBpZiAoaXM8VGV4
dD4oKnJlZkNoaWxkKSAmJiBjYXJldE1heE9mZnNldCgqcmVmQ2hpbGQpID4gb2Zmc2V0KSB7Ci0g
ICAgICAgIHNwbGl0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4ocmVmQ2hpbGQpLCBvZmZzZXQpOwor
ICAgICAgICBzcGxpdFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpyZWZDaGlsZCksIG9mZnNldCk7
CiAKICAgICAgICAgLy8gTXV0YXRpb24gZXZlbnRzIChidWcgMjI2MzQpIGZyb20gdGhlIHRleHQg
bm9kZSBpbnNlcnRpb24gbWF5IGhhdmUgcmVtb3ZlZCB0aGUgcmVmQ2hpbGQKICAgICAgICAgaWYg
KCFyZWZDaGlsZC0+aXNDb25uZWN0ZWQoKSkKQEAgLTU4Myw0NSArNTgzLDQ1IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVuZE5vZGUoUmVmPE5vZGU+JiYgbm9kZSwgUmVmPENvbnRh
aW5lck5vZGU+JiYgcGFyCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZUNoaWxk
cmVuSW5SYW5nZShOb2RlJiBub2RlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKIHsKLSAg
ICBWZWN0b3I8UmVmUHRyPE5vZGU+PiBjaGlsZHJlbjsKKyAgICBWZWN0b3I8UmVmPE5vZGU+PiBj
aGlsZHJlbjsKICAgICBOb2RlKiBjaGlsZCA9IG5vZGUudHJhdmVyc2VUb0NoaWxkQXQoZnJvbSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJvbTsgY2hpbGQgJiYgaSA8IHRvOyBpKyssIGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7
CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqY2hpbGQpOwogCiAgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuKQotICAgICAgICByZW1vdmVOb2RlKFdURk1vdmUoY2hpbGQpKTsKKyAgICAg
ICAgcmVtb3ZlTm9kZShjaGlsZCk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKK3ZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUoTm9kZSYgbm9kZSwgU2hvdWxkQXNzdW1lQ29u
dGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUp
CiB7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5ub25TaGFkb3dCb3VuZGFyeVBhcmVudE5vZGUo
KSkKKyAgICBpZiAoIW5vZGUubm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVOb2RlQ29tbWFuZDo6
Y3JlYXRlKCpub2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgZWRpdGlu
Z0FjdGlvbigpKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVtb3ZlTm9kZUNvbW1h
bmQ6OmNyZWF0ZShub2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgZWRp
dGluZ0FjdGlvbigpKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVD
b250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4oTm9kZSYgbm9kZSwgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxk
QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpCiB7CiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OmNyZWF0ZShub2RlLCBz
aG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgZWRpdGluZ0FjdGlvbigpKSk7CiB9
CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9y
cyhQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1v
dmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoTm9kZSYgbm9kZSkKIHsKLSAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZT4gcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIFJlZlB0cjxDb250YWlu
ZXJOb2RlPiBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKICAgICByZW1vdmVOb2RlKG5vZGUp
OwotICAgIHBydW5lKFdURk1vdmUocGFyZW50KSk7CisgICAgcHJ1bmUocGFyZW50LmdldCgpKTsK
IH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVJlbWFpbmluZ1NpYmxpbmdzVG9O
ZXdQYXJlbnQoTm9kZSogbm9kZSwgTm9kZSogcGFzdExhc3ROb2RlVG9Nb3ZlLCBQYXNzUmVmUHRy
PEVsZW1lbnQ+IHBycE5ld1BhcmVudCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVS
ZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50KE5vZGUqIG5vZGUsIE5vZGUqIHBhc3RMYXN0Tm9k
ZVRvTW92ZSwgRWxlbWVudCYgbmV3UGFyZW50KQogewogICAgIE5vZGVWZWN0b3Igbm9kZXNUb1Jl
bW92ZTsKLSAgICBSZWZQdHI8RWxlbWVudD4gbmV3UGFyZW50ID0gcHJwTmV3UGFyZW50OworICAg
IFJlZjxFbGVtZW50PiBwcm90ZWN0ZWROZXdQYXJlbnQgPSBuZXdQYXJlbnQ7CiAKICAgICBmb3Ig
KDsgbm9kZSAmJiBub2RlICE9IHBhc3RMYXN0Tm9kZVRvTW92ZTsgbm9kZSA9IG5vZGUtPm5leHRT
aWJsaW5nKCkpCiAgICAgICAgIG5vZGVzVG9SZW1vdmUuYXBwZW5kKCpub2RlKTsKIAogICAgIGZv
ciAoYXV0byYgbm9kZVRvUmVtb3ZlIDogbm9kZXNUb1JlbW92ZSkgewotICAgICAgICByZW1vdmVO
b2RlKG5vZGVUb1JlbW92ZS5wdHIoKSk7Ci0gICAgICAgIGFwcGVuZE5vZGUoV1RGTW92ZShub2Rl
VG9SZW1vdmUpLCAqbmV3UGFyZW50KTsKKyAgICAgICAgcmVtb3ZlTm9kZShub2RlVG9SZW1vdmUp
OworICAgICAgICBhcHBlbmROb2RlKFdURk1vdmUobm9kZVRvUmVtb3ZlKSwgbmV3UGFyZW50KTsK
ICAgICB9CiB9CiAKQEAgLTYzMywxMiArNjMzLDEyIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWxQcmVzZXJ2aW5nQ2hpbGRyZW4oUG9zaXRp
CiAgICAgICAgIHBvc2l0aW9uLm1vdmVUb09mZnNldChvZmZzZXQpOyAgICAKIH0KIAotSFRNTEVs
ZW1lbnQqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2Vy
dmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBub2RlKQor
SFRNTEVsZW1lbnQqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlRWxlbWVudFdpdGhTcGFu
UHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhIVE1MRWxlbWVudCYgZWxlbWVudCkKIHsK
ICAgICAvLyBJdCB3b3VsZCBhbHNvIGJlIHBvc3NpYmxlIHRvIGltcGxlbWVudCBhbGwgb2YgUmVw
bGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQKICAgICAvLyBhcyBhIHNlcmllcyBvZiBleGlzdGluZyBz
bWFsbGVyIGVkaXQgY29tbWFuZHMuICBTb21lb25lIHdobyB3YW50ZWQgdG8KICAgICAvLyByZWR1
Y2UgdGhlIG51bWJlciBvZiBlZGl0IGNvbW1hbmRzIGNvdWxkIGRvIHNvIGhlcmUuCi0gICAgYXV0
byBjb21tYW5kID0gUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OmNyZWF0ZShub2RlKTsKKyAg
ICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6Y3JlYXRlKGVsZW1l
bnQpOwogICAgIGF1dG8qIGNvbW1hbmRQdHIgPSBjb21tYW5kLnB0cigpOwogICAgIGFwcGx5Q29t
bWFuZFRvQ29tcG9zaXRlKFdURk1vdmUoY29tbWFuZCkpOwogICAgIC8vIFJldHVybmluZyBhIHJh
dyBwb2ludGVyIGhlcmUgaXMgT0sgYmVjYXVzZSB0aGUgY29tbWFuZCBpcyByZXRhaW5lZCBieQpA
QCAtNjQ4LDE4ICs2NDgsMTggQEAgSFRNTEVsZW1lbnQqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpy
ZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXQKICAgICByZXR1cm4g
Y29tbWFuZFB0ci0+c3BhbkVsZW1lbnQoKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6cHJ1bmUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6cHJ1bmUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoUmVmUHRyPE5vZGU+IGhpZ2hlc3ROb2Rl
VG9SZW1vdmUgPSBoaWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVuaW5nKG5vZGUuZ2V0KCkpKQotICAg
ICAgICByZW1vdmVOb2RlKFdURk1vdmUoaGlnaGVzdE5vZGVUb1JlbW92ZSkpOworICAgIGlmIChS
ZWZQdHI8Tm9kZT4gaGlnaGVzdE5vZGVUb1JlbW92ZSA9IGhpZ2hlc3ROb2RlVG9SZW1vdmVJblBy
dW5pbmcobm9kZSkpCisgICAgICAgIHJlbW92ZU5vZGUoKmhpZ2hlc3ROb2RlVG9SZW1vdmUpOwog
fQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRleHROb2RlKFBhc3NSZWZQdHI8
VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
c3BsaXRUZXh0Tm9kZShUZXh0JiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAgYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShub2RlLCBvZmZz
ZXQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRFbGVtZW50KFBhc3NS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc1JlZlB0cjxOb2RlPiBhdENoaWxkKQordm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIE5vZGUm
IGF0Q2hpbGQpCiB7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU3BsaXRFbGVtZW50Q29t
bWFuZDo6Y3JlYXRlKGVsZW1lbnQsIGF0Q2hpbGQpKTsKIH0KQEAgLTY3MCw3ICs2NzAsNyBAQCB2
b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptZXJnZUlkZW50aWNhbEVsZW1lbnRzKEVsZW1lbnQm
IGZpcnN0LCBFbGVtZW50JiBzZWNvbgogICAgIFJlZjxFbGVtZW50PiBwcm90ZWN0ZWRTZWNvbmQg
PSBzZWNvbmQ7CiAgICAgQVNTRVJUKCFmaXJzdC5pc0Rlc2NlbmRhbnRPZigmc2Vjb25kKSAmJiAm
c2Vjb25kICE9ICZmaXJzdCk7CiAgICAgaWYgKGZpcnN0Lm5leHRTaWJsaW5nKCkgIT0gJnNlY29u
ZCkgewotICAgICAgICByZW1vdmVOb2RlKCZzZWNvbmQpOworICAgICAgICByZW1vdmVOb2RlKHNl
Y29uZCk7CiAgICAgICAgIGluc2VydE5vZGVBZnRlcihzZWNvbmQsIGZpcnN0KTsKICAgICB9CiAg
ICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6
OmNyZWF0ZShmaXJzdCwgc2Vjb25kKSk7CkBAIC02ODEsNyArNjgxLDcgQEAgdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6d3JhcENvbnRlbnRzSW5EdW1teVNwYW4oRWxlbWVudCYgZWxlbWVudCkK
ICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1h
bmQ6OmNyZWF0ZShlbGVtZW50KSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNw
bGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudChQYXNzUmVmUHRyPFRleHQ+IHRleHQsIHVuc2ln
bmVkIG9mZnNldCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudChUZXh0JiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAgYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZDo6
Y3JlYXRlKHRleHQsIG9mZnNldCkpOwogfQpAQCAtODA4LDcgKzgwOCw3IEBAIFBvc2l0aW9uIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikKICAgICBpZiAocG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0g
Y2FyZXRNYXhPZmZzZXQoKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVy
biBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKHRhYlNwYW4pOwogCi0gICAgc3BsaXRUZXh0Tm9k
ZUNvbnRhaW5pbmdFbGVtZW50KCZkb3duY2FzdDxUZXh0PigqcG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpKSwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgIHNwbGl0VGV4dE5v
ZGVDb250YWluaW5nRWxlbWVudChkb3duY2FzdDxUZXh0PigqcG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpKSwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgIHJldHVybiBwb3Np
dGlvbkluUGFyZW50QmVmb3JlTm9kZSh0YWJTcGFuKTsKIH0KIApAQCAtODQyLDEwICs4NDIsMTAg
QEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24gJnNlbGVjdGlvbiwgYm8KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
cmVtb3ZlTm9kZUF0dHJpYnV0ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUpCiB7Ci0gICAgc2V0Tm9kZUF0dHJpYnV0ZSgmZWxlbWVudCwgYXR0cmlidXRl
LCBudWxsQXRvbSk7CisgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGUsIG51
bGxBdG9tKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2V0Tm9kZUF0dHJpYnV0
ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnNldE5vZGVBdHRyaWJ1dGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIGFwcGx5Q29t
bWFuZFRvQ29tcG9zaXRlKFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpjcmVhdGUoZWxlbWVudCwg
YXR0cmlidXRlLCB2YWx1ZSkpOwogfQpAQCAtOTk4LDcgKzk5OCw3IEBAIHZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQmIHRleHROb2RlLCB1bnNp
Z25lZCBzdGFyCiAKICAgICBpZiAoIWJveCkgewogICAgICAgICAvLyB3aG9sZSB0ZXh0IG5vZGUg
aXMgZW1wdHkKLSAgICAgICAgcmVtb3ZlTm9kZSgmdGV4dE5vZGUpOworICAgICAgICByZW1vdmVO
b2RlKHRleHROb2RlKTsKICAgICAgICAgcmV0dXJuOyAgICAKICAgICB9CiAgICAgCkBAIC0xMTM0
LDcgKzExMzQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVQbGFjZWhvbGRl
ckF0KGNvbnN0IFBvc2l0aW9uJiBwKQogICAgIAogICAgIC8vIFdlIGFyZSBjZXJ0YWluIHRoYXQg
dGhlIHBvc2l0aW9uIGlzIGF0IGEgbGluZSBicmVhaywgYnV0IGl0IG1heSBiZSBhIGJyIG9yIGEg
cHJlc2VydmVkIG5ld2xpbmUuCiAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpwLmFuY2hvck5v
ZGUoKSkpIHsKLSAgICAgICAgcmVtb3ZlTm9kZShwLmFuY2hvck5vZGUoKSk7CisgICAgICAgIHJl
bW92ZU5vZGUoKnAuYW5jaG9yTm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
QEAgLTEyMTAsNyArMTIxMCw3IEBAIFJlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
bW92ZVBhcmFncmFwaENvbnRlbnRzVG9OZXdCbG9ja0lmTmVjZXNzYXJ5KGNvCiAgICAgbW92ZVBh
cmFncmFwaHModmlzaWJsZVBhcmFncmFwaFN0YXJ0LCB2aXNpYmxlUGFyYWdyYXBoRW5kLCBWaXNp
YmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShuZXdCbG9jay5wdHIoKSkpKTsKIAogICAg
IGlmIChuZXdCbG9jay0+bGFzdENoaWxkKCkgJiYgbmV3QmxvY2stPmxhc3RDaGlsZCgpLT5oYXNU
YWdOYW1lKGJyVGFnKSAmJiAhZW5kV2FzQnIpCi0gICAgICAgIHJlbW92ZU5vZGUobmV3QmxvY2st
Pmxhc3RDaGlsZCgpKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbmV3QmxvY2stPmxhc3RDaGlsZCgp
KTsKIAogICAgIHJldHVybiBXVEZNb3ZlKG5ld0Jsb2NrKTsKIH0KQEAgLTEyMjMsNyArMTIyMyw3
IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnB1c2hBbmNob3JFbGVtZW50RG93bihFbGVt
ZW50JiBhbmNob3JFbGVtZW50KQogICAgIGFwcGx5U3R5bGVkRWxlbWVudChhbmNob3JFbGVtZW50
KTsKICAgICAvLyBDbG9uZXMgb2YgYW5jaG9yRWxlbWVudCBoYXZlIGJlZW4gcHVzaGVkIGRvd24s
IG5vdyByZW1vdmUgaXQuCiAgICAgaWYgKGFuY2hvckVsZW1lbnQuaXNDb25uZWN0ZWQoKSkKLSAg
ICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigmYW5jaG9yRWxlbWVudCk7CisgICAg
ICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oYW5jaG9yRWxlbWVudCk7CiB9CiAKIC8v
IENsb25lIHRoZSBwYXJhZ3JhcGggYmV0d2VlbiBzdGFydCBhbmQgZW5kIHVuZGVyIGJsb2NrRWxl
bWVudCwKQEAgLTEzMDgsNyArMTMwOCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNs
ZWFudXBBZnRlckRlbGV0aW9uKFZpc2libGVQb3NpdGlvbiBkZXN0aW5hdGlvbikKICAgICAgICAg
QVNTRVJUKG5vZGUpOwogICAgICAgICAvLyBOb3JtYWxseSBkZWxldGlvbiB3aWxsIGxlYXZlIGEg
YnIgYXMgYSBwbGFjZWhvbGRlci4KICAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpub2Rl
KSkKLSAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlKTsKKyAgICAg
ICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycygqbm9kZSk7CiAgICAgICAgIC8vIElm
IHRoZSBzZWxlY3Rpb24gdG8gbW92ZSB3YXMgZW1wdHkgYW5kIGluIGFuIGVtcHR5IGJsb2NrIHRo
YXQgCiAgICAgICAgIC8vIGRvZXNuJ3QgcmVxdWlyZSBhIHBsYWNlaG9sZGVyIHRvIHByb3AgaXRz
ZWxmIG9wZW4gKGxpa2UgYSBib3JkZXJlZAogICAgICAgICAvLyBkaXYgb3IgYW4gbGkpLCByZW1v
dmUgaXQgZHVyaW5nIHRoZSBtb3ZlICh0aGUgbGlzdCByZW1vdmFsIGNvZGUKQEAgLTEzMjAsMTQg
KzEzMjAsMTQgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xlYW51cEFmdGVyRGVsZXRp
b24oVmlzaWJsZVBvc2l0aW9uIGRlc3RpbmF0aW9uKQogICAgICAgICAgICAgICAgIHBydW5lKG5v
ZGUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlKTsKKyAgICAgICAgICAgIHJlbW92ZU5v
ZGVBbmRQcnVuZUFuY2VzdG9ycygqbm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAo
bGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihwb3NpdGlvbikpIHsKICAgICAgICAgICAgIC8vIFRo
ZXJlIGlzIGEgcHJlc2VydmVkICdcbicgYXQgY2FyZXRBZnRlckRlbGV0ZS4KICAgICAgICAgICAg
IC8vIFdlIGNhbiBzYWZlbHkgYXNzdW1lIHRoaXMgaXMgYSB0ZXh0IG5vZGUuCiAgICAgICAgICAg
ICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpub2RlKTsKICAgICAgICAgICAgIGlm
ICh0ZXh0Tm9kZS5sZW5ndGgoKSA9PSAxKQotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQ
cnVuZUFuY2VzdG9ycyhub2RlKTsKKyAgICAgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVB
bmNlc3RvcnModGV4dE5vZGUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGRl
bGV0ZVRleHRGcm9tTm9kZSh0ZXh0Tm9kZSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgMSk7CiAgICAgICAgIH0KQEAgLTE1NTUsOCArMTU1NSw4IEBAIGJvb2wgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCkKICAgICAgICAgICAgICAgICAv
LyBlLmcuIDx1bD48bGk+aGVsbG8gPHVsPjxsaT48YnI+PC9saT48L3VsPiA8L2xpPjwvdWw+IHNo
b3VsZCBiZWNvbWUgPHVsPjxsaT5oZWxsbzwvbGk+IDx1bD48bGk+PGJyPjwvbGk+PC91bD4gPC91
bD4gYWZ0ZXIgdGhpcyBzZWN0aW9uCiAgICAgICAgICAgICAgICAgLy8gSWYgbGlzdE5vZGUgZG9l
cyBOT1QgYXBwZWFyIGF0IHRoZSBlbmQsIHRoZW4gd2Ugc2hvdWxkIGNvbnNpZGVyIGl0IGFzIGEg
cmVndWxhciBwYXJhZ3JhcGguCiAgICAgICAgICAgICAgICAgLy8gZS5nLiA8dWw+PGxpPiA8dWw+
PGxpPjxicj48L2xpPjwvdWw+IGhlbGxvPC9saT48L3VsPiBzaG91bGQgYmVjb21lIDx1bD48bGk+
IDxkaXY+PGJyPjwvZGl2PiBoZWxsbzwvbGk+PC91bD4gYXQgdGhlIGVuZAotICAgICAgICAgICAg
ICAgIHNwbGl0RWxlbWVudChkb3duY2FzdDxIVE1MTElFbGVtZW50PihibG9ja0VuY2xvc2luZ0xp
c3QpLCBsaXN0Tm9kZSk7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbihsaXN0Tm9kZS0+cGFyZW50Tm9kZSgpKTsKKyAgICAgICAgICAgICAgICBzcGxpdEVsZW1l
bnQoZG93bmNhc3Q8SFRNTExJRWxlbWVudD4oKmJsb2NrRW5jbG9zaW5nTGlzdCksICpsaXN0Tm9k
ZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigqbGlzdE5v
ZGUtPnBhcmVudE5vZGUoKSk7CiAgICAgICAgICAgICAgICAgbmV3QmxvY2sgPSBIVE1MTElFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBJ
ZiBsaXN0Tm9kZSBkb2VzIE5PVCBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgb3V0ZXIgbGlzdCBp
dGVtLCB0aGVuIGJlaGF2ZSBhcyBpZiBpbiBhIHJlZ3VsYXIgcGFyYWdyYXBoLgpAQCAtMTU3MSwx
OCArMTU3MSwxOCBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlM
aXN0SXRlbSgpCiAgICAgaWYgKGlzTGlzdEl0ZW0obmV4dExpc3ROb2RlLmdldCgpKSB8fCBpc0xp
c3RIVE1MRWxlbWVudChuZXh0TGlzdE5vZGUuZ2V0KCkpKSB7CiAgICAgICAgIC8vIElmIGVtcHR5
TGlzdEl0ZW0gZm9sbG93cyBhbm90aGVyIGxpc3QgaXRlbSBvciBuZXN0ZWQgbGlzdCwgc3BsaXQg
dGhlIGxpc3Qgbm9kZS4KICAgICAgICAgaWYgKGlzTGlzdEl0ZW0ocHJldmlvdXNMaXN0Tm9kZS5n
ZXQoKSkgfHwgaXNMaXN0SFRNTEVsZW1lbnQocHJldmlvdXNMaXN0Tm9kZS5nZXQoKSkpCi0gICAg
ICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obGlzdE5vZGUpLCBlbXB0eUxp
c3RJdGVtKTsKKyAgICAgICAgICAgIHNwbGl0RWxlbWVudChkb3duY2FzdDxFbGVtZW50PigqbGlz
dE5vZGUpLCAqZW1wdHlMaXN0SXRlbSk7CiAKICAgICAgICAgLy8gSWYgZW1wdHlMaXN0SXRlbSBp
cyBmb2xsb3dlZCBieSBvdGhlciBsaXN0IGl0ZW0gb3IgbmVzdGVkIGxpc3QsIHRoZW4gaW5zZXJ0
IG5ld0Jsb2NrIGJlZm9yZSB0aGUgbGlzdCBub2RlLgogICAgICAgICAvLyBCZWNhdXNlIHdlIGhh
dmUgc3BsaXR0ZWQgdGhlIGVsZW1lbnQsIGVtcHR5TGlzdEl0ZW0gaXMgdGhlIGZpcnN0IGVsZW1l
bnQgaW4gdGhlIGxpc3Qgbm9kZS4KICAgICAgICAgLy8gaS5lLiBpbnNlcnQgbmV3QmxvY2sgYmVm
b3JlIHVsIG9yIG9sIHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgZW1wdHlMaXN0SXRlbQogICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKCpuZXdCbG9jaywgKmxpc3ROb2RlKTsKLSAgICAgICAgcmVtb3Zl
Tm9kZShlbXB0eUxpc3RJdGVtKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqZW1wdHlMaXN0SXRlbSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2hlbiBlbXB0eUxpc3RJdGVtIGRvZXMgbm90IGZv
bGxvdyBhbnkgbGlzdCBpdGVtIG9yIG5lc3RlZCBsaXN0LCBpbnNlcnQgbmV3QmxvY2sgYWZ0ZXIg
dGhlIGVuY2xvc2luZyBsaXN0IG5vZGUuCiAgICAgICAgIC8vIFJlbW92ZSB0aGUgZW5jbG9zaW5n
IG5vZGUgaWYgZW1wdHlMaXN0SXRlbSBpcyB0aGUgb25seSBjaGlsZDsgb3RoZXJ3aXNlIGp1c3Qg
cmVtb3ZlIGVtcHR5TGlzdEl0ZW0uCiAgICAgICAgIGluc2VydE5vZGVBZnRlcigqbmV3QmxvY2ss
ICpsaXN0Tm9kZSk7Ci0gICAgICAgIHJlbW92ZU5vZGUoaXNMaXN0SXRlbShwcmV2aW91c0xpc3RO
b2RlLmdldCgpKSB8fCBpc0xpc3RIVE1MRWxlbWVudChwcmV2aW91c0xpc3ROb2RlLmdldCgpKSA/
IGVtcHR5TGlzdEl0ZW0gOiBsaXN0Tm9kZSk7CisgICAgICAgIHJlbW92ZU5vZGUoaXNMaXN0SXRl
bShwcmV2aW91c0xpc3ROb2RlLmdldCgpKSB8fCBpc0xpc3RIVE1MRWxlbWVudChwcmV2aW91c0xp
c3ROb2RlLmdldCgpKSA/ICplbXB0eUxpc3RJdGVtIDogKmxpc3ROb2RlKTsKICAgICB9CiAKICAg
ICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKCpuZXdCbG9jayk7CkBAIC0xNjM2LDcgKzE2MzYsNyBA
QCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90
ZWRQYXJhZ3JhcGgoKQogICAgIEFTU0VSVChjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNU
YWdOYW1lKGJyVGFnKSB8fCAoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgp
ICYmIGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCkucHJlc2Vy
dmVOZXdsaW5lKCkpKTsKICAgICAKICAgICBpZiAoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+
aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhj
YXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5j
ZXN0b3JzKCpjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBlbHNlIGlmIChpczxUZXh0
PigqY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgQVNTRVJUKGNhcmV0UG9z
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPT0gMCk7CiAgICAgICAgIFRleHQmIHRleHROb2Rl
ID0gZG93bmNhc3Q8VGV4dD4oKmNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCkpOwpAQCAtMTczMSw3
ICsxNzMxLDcgQEAgUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRyZWVU
b05vZGUoTm9kZSogc3RhcnQsIE5vZGUqIGVuZCwgYm9vbAogICAgICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25JblBhcmVudCA9IGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZS0+cGFyZW50Tm9k
ZSgpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uSW5Ob2RlID0gZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAocG9zaXRpb25JblBh
cmVudCAhPSBwb3NpdGlvbkluTm9kZSkKLSAgICAgICAgICAgIHNwbGl0RWxlbWVudChkb3duY2Fz
dDxFbGVtZW50Pihub2RlLT5wYXJlbnROb2RlKCkpLCBub2RlKTsKKyAgICAgICAgICAgIHNwbGl0
RWxlbWVudChkb3duY2FzdDxFbGVtZW50Pigqbm9kZS0+cGFyZW50Tm9kZSgpKSwgKm5vZGUpOwog
ICAgIH0KIAogICAgIHJldHVybiBub2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5oCmluZGV4IGFiZTFjOGI5ZGNlNDQ4Zjg0NWQ3ODE0OGJlZjFiMjA3
ZTI4ZjdlZTYuLmY0ZmY3NzMyNzE3MWIyOTNkMGQ2YjZiM2IxMmVhYWVlNDkwMDNjOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKQEAgLTE2MSwy
MSArMTYxLDIxIEBAIHByb3RlY3RlZDoKICAgICBib29sIHNob3VsZFJlYmFsYW5jZUxlYWRpbmdX
aGl0ZXNwYWNlRm9yKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVtb3ZlTm9kZUF0
dHJpYnV0ZShFbGVtZW50JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKTsKICAgICB2
b2lkIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShOb2RlJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4sIFNob3Vs
ZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlID0gRG9Ob3RBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSk7Ci0gICAgSFRNTEVsZW1lbnQqIHJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVz
ZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+KTsKLSAg
ICB2b2lkIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPiwgU2hv
dWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05vdEFzc3VtZUNvbnRlbnRJc0Fs
d2F5c0VkaXRhYmxlKTsKLSAgICB2b2lkIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhQYXNz
UmVmUHRyPE5vZGU+KTsKLSAgICB2b2lkIG1vdmVSZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50
KE5vZGUqLCBOb2RlKiBwYXN0TGFzdE5vZGVUb01vdmUsIFBhc3NSZWZQdHI8RWxlbWVudD4gcHJw
TmV3UGFyZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTm9kZShOb2RlJiwgU2hvdWxkQXNz
dW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlKTsKKyAgICBIVE1MRWxlbWVudCogcmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZp
bmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoSFRNTEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oTm9kZSYsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlID0gRG9Ob3RBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAgdm9pZCBy
ZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoTm9kZSYpOworICAgIHZvaWQgbW92ZVJlbWFpbmlu
Z1NpYmxpbmdzVG9OZXdQYXJlbnQoTm9kZSosIE5vZGUqIHBhc3RMYXN0Tm9kZVRvTW92ZSwgRWxl
bWVudCYgbmV3UGFyZW50KTsKICAgICB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWxQ
cmVzZXJ2aW5nQ2hpbGRyZW4oUG9zaXRpb24mLCBOb2RlJik7Ci0gICAgdm9pZCBwcnVuZShQYXNz
UmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHBydW5lKE5vZGUqKTsKICAgICB2b2lkIHJlcGxhY2VU
ZXh0SW5Ob2RlKFRleHQmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50VGV4dCk7CiAgICAgUG9zaXRpb24gcmVwbGFjZVNlbGVjdGVkVGV4
dEluTm9kZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vy
dmluZ01hcmtlcnMoVGV4dCYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KTsKICAgICBQb3NpdGlvbiBwb3NpdGlvbk91dHNpZGVU
YWJTcGFuKGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgdm9pZCBzZXROb2RlQXR0cmlidXRlKFBhc3NS
ZWZQdHI8RWxlbWVudD4sIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBzcGxpdEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVt
ZW50PiwgUGFzc1JlZlB0cjxOb2RlPiBhdENoaWxkKTsKLSAgICB2b2lkIHNwbGl0VGV4dE5vZGUo
UGFzc1JlZlB0cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0KTsKLSAgICB2b2lkIHNwbGl0VGV4dE5v
ZGVDb250YWluaW5nRWxlbWVudChQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBvZmZzZXQpOwor
ICAgIHZvaWQgc2V0Tm9kZUF0dHJpYnV0ZShFbGVtZW50JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIHNwbGl0RWxl
bWVudChFbGVtZW50JiwgTm9kZSYgYXRDaGlsZCk7CisgICAgdm9pZCBzcGxpdFRleHROb2RlKFRl
eHQmLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIHZvaWQgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50KFRleHQmLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIHZvaWQgd3JhcENvbnRlbnRzSW5E
dW1teVNwYW4oRWxlbWVudCYpOwogCiAgICAgdm9pZCBkZWxldGVJbnNpZ25pZmljYW50VGV4dChU
ZXh0JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7CkBAIC0yMTUsNyArMjE1LDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4gbV9jb21wb3NpdGlv
bjsKIH07CiAgICAgCi12b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRD
b21tYW5kPik7Cit2b2lkIGFwcGx5Q29tbWFuZChDb21wb3NpdGVFZGl0Q29tbWFuZCYpOwogCiBp
bmxpbmUgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHRvQ29tcG9zaXRlRWRpdENvbW1hbmQoRWRpdENv
bW1hbmQqIGNvbW1hbmQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBjNWNlZTcxNDJhZWM0NDNjYzBiN2ZhYjhkMzQwNjY3
YzQ5NWNmZWRhLi40NjFkNDhlYWUxMDg1OGU3MzZhNzk4MGY1OGIzMzA5OGVhMzhkNGM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
QEAgLTMyMCw3ICszMjAsNyBAQCBib29sIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVNw
ZWNpYWxDYXNlQlJEZWxldGUoKQogICAgIGJvb2wgaXNCUk9uTGluZUJ5SXRzZWxmID0gdXBzdHJl
YW1TdGFydElzQlIgJiYgZG93bnN0cmVhbVN0YXJ0SXNCUiAmJiAoKG5vZGVBZnRlckRvd25zdHJl
YW1TdGFydCA9PSBub2RlQWZ0ZXJVcHN0cmVhbUVuZCkgfHwgKG5vZGVBZnRlclVwc3RyZWFtRW5k
ICYmIG5vZGVBZnRlclVwc3RyZWFtRW5kLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBub2RlQWZ0ZXJV
cHN0cmVhbVN0YXJ0LT5uZXh0U2libGluZygpID09IG5vZGVBZnRlclVwc3RyZWFtRW5kKSk7CiAK
ICAgICBpZiAoaXNCUk9uTGluZUJ5SXRzZWxmKSB7Ci0gICAgICAgIHJlbW92ZU5vZGUobm9kZUFm
dGVyRG93bnN0cmVhbVN0YXJ0KTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZUFmdGVyRG93bnN0
cmVhbVN0YXJ0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zNjgsNyArMzY4
LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlVXBkYXRpbmdTdGF0
ZXMoTm9kZSYgbm9kZSwgU2hvdWxkQXNzdW1lQ28KICAgICB1cGRhdGVQb3NpdGlvbkZvck5vZGVS
ZW1vdmFsKG1fbGVhZGluZ1doaXRlc3BhY2UsIG5vZGUpOwogICAgIHVwZGF0ZVBvc2l0aW9uRm9y
Tm9kZVJlbW92YWwobV90cmFpbGluZ1doaXRlc3BhY2UsIG5vZGUpOwogICAgIAotICAgIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKCZub2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNB
bHdheXNFZGl0YWJsZSk7CisgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUobm9k
ZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogfQogICAgIAogc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFJlbW92ZUNvbnRlbnRPbmx5KGNvbnN0IE5vZGUmIG5vZGUpCkBA
IC0zNzYsMjQgKzM3NiwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkUmVtb3ZlQ29udGVu
dE9ubHkoY29uc3QgTm9kZSYgbm9kZSkKICAgICByZXR1cm4gaXNUYWJsZVN0cnVjdHVyZU5vZGUo
Jm5vZGUpIHx8IG5vZGUuaXNSb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKLXZvaWQgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFNob3Vs
ZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5
c0VkaXRhYmxlKQordm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKE5vZGUm
IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNv
bnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogewotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICBpZiAobV9zdGFydFJvb3QgIT0gbV9lbmRSb290ICYmICEobm9kZS0+
aXNEZXNjZW5kYW50T2YobV9zdGFydFJvb3QuZ2V0KCkpICYmIG5vZGUtPmlzRGVzY2VuZGFudE9m
KG1fZW5kUm9vdC5nZXQoKSkpKSB7CisgICAgaWYgKG1fc3RhcnRSb290ICE9IG1fZW5kUm9vdCAm
JiAhKG5vZGUuaXNEZXNjZW5kYW50T2YobV9zdGFydFJvb3QuZ2V0KCkpICYmIG5vZGUuaXNEZXNj
ZW5kYW50T2YobV9lbmRSb290LmdldCgpKSkpIHsKICAgICAgICAgLy8gSWYgYSBub2RlIGlzIG5v
dCBpbiBib3RoIHRoZSBzdGFydCBhbmQgZW5kIGVkaXRhYmxlIHJvb3RzLCByZW1vdmUgaXQgb25s
eSBpZiBpdHMgaW5zaWRlIGFuIGVkaXRhYmxlIHJlZ2lvbi4KLSAgICAgICAgaWYgKCFub2RlLT5w
YXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkgeworICAgICAgICBpZiAoIW5vZGUucGFy
ZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgICAgIC8vIERvbid0IHJl
bW92ZSBub24tZWRpdGFibGUgYXRvbWljIG5vZGVzLgotICAgICAgICAgICAgaWYgKCFub2RlLT5m
aXJzdENoaWxkKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUuZmlyc3RDaGlsZCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIC8vIFNlYXJjaCB0aGlzIG5vbi1lZGl0YWJs
ZSByZWdpb24gZm9yIGVkaXRhYmxlIHJlZ2lvbnMgdG8gZW1wdHkuCi0gICAgICAgICAgICBSZWZQ
dHI8Tm9kZT4gY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIHdoaWxlIChjaGls
ZCkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICByZW1vdmVOb2RlKGNoaWxkLmdldCgpLCBzaG91
bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAgICAgICAgICAgICAgcmVtb3Zl
Tm9kZSgqY2hpbGQsIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKICAgICAg
ICAgICAgICAgICAvLyBCYWlsIGlmIG5leHRDaGlsZCBpcyBubyBsb25nZXIgbm9kZSdzIGNoaWxk
LgotICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hpbGQgJiYgbmV4dENoaWxkLT5wYXJlbnROb2Rl
KCkgIT0gbm9kZSkKKyAgICAgICAgICAgICAgICBpZiAobmV4dENoaWxkICYmIG5leHRDaGlsZC0+
cGFyZW50Tm9kZSgpICE9ICZub2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7CiAgICAgICAgICAgICB9CkBAIC00MDMsMjIg
KzQwMCwyMiBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUoUGFzc1Jl
ZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250ZQogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGlmIChzaG91bGRSZW1vdmVDb250ZW50T25seSgqbm9kZSkpIHsKKyAgICBpZiAoc2hv
dWxkUmVtb3ZlQ29udGVudE9ubHkobm9kZSkpIHsKICAgICAgICAgLy8gRG8gbm90IHJlbW92ZSBh
biBlbGVtZW50IG9mIHRhYmxlIHN0cnVjdHVyZTsgcmVtb3ZlIGl0cyBjb250ZW50cy4KICAgICAg
ICAgLy8gTGlrZXdpc2UgZm9yIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQuCi0gICAgICAgIGF1
dG8qIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgbm9kZS5nZXQoKSk7CisgICAg
ICAgIGF1dG8qIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCAmbm9kZSk7CiAgICAg
ICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUNvbnRlbnRP
bmx5KCpjaGlsZCkpIHsKLSAgICAgICAgICAgICAgICBjaGlsZCA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoKmNoaWxkLCBub2RlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjaGlsZCA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKmNoaWxkLCAmbm9kZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvKiByZW1vdmUgPSBjaGlsZDsKLSAgICAgICAg
ICAgIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKmNoaWxkLCBu
b2RlLmdldCgpKTsKKyAgICAgICAgICAgIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4oKmNoaWxkLCAmbm9kZSk7CiAgICAgICAgICAgICByZW1vdmVOb2RlVXBkYXRp
bmdTdGF0ZXMoKnJlbW92ZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBBU1NFUlQoaXM8RWxlbWVudD4oKm5vZGUpKTsK
LSAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICAg
ICAgQVNTRVJUKGlzPEVsZW1lbnQ+KG5vZGUpKTsKKyAgICAgICAgYXV0byYgZWxlbWVudCA9IGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRv
IGluc2VydCBhIHBsYWNlaG9sZGVyIGZvciBkZXNjZW5kYW50IHRhYmxlIGNlbGxzLgogICAgICAg
ICBhdXRvKiBkZXNjZW5kYW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCAmZWxl
bWVudCk7CkBAIC00MzAsNyArNDI3LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpy
ZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgU2hvdWxkQXNzdW1lQ29udGUKICAgICAg
ICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlckZvclRhYmxlQ2VsbElmTmVlZGVkKGVsZW1lbnQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcygqbm9k
ZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOworICAgIHJlbW92ZU5vZGVV
cGRhdGluZ1N0YXRlcyhub2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7
CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yVGV4dFJlbW92YWwoTm9kZSogbm9k
ZSwgaW50IG9mZnNldCwgaW50IGNvdW50LCBQb3NpdGlvbiYgcG9zaXRpb24pCkBAIC00NjUsNyAr
NDYyLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHIKICAgICAgICAgICAgIG5leHROb2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwogICAgICAgICAgICAg
UmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBub2RlLT5yb290RWRp
dGFibGVFbGVtZW50KCk7CiAgICAgICAgICAgICBpZiAocm9vdEVkaXRhYmxlRWxlbWVudCkgewot
ICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgcmVtb3Zl
Tm9kZSgqbm9kZSk7CiAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSgqbm9kZSwgKnJvb3RFZGl0
YWJsZUVsZW1lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MjEsNyArNTE4LDcg
QEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKIAog
ICAgICAgICAvLyBUaGUgc2VsZWN0aW9uIHRvIGRlbGV0ZSBpcyBhbGwgaW4gb25lIG5vZGUuCiAg
ICAgICAgIGlmICghc3RhcnROb2RlLT5yZW5kZXJlcigpIHx8ICghc3RhcnRPZmZzZXQgJiYgbV9k
b3duc3RyZWFtRW5kLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkpCi0gICAgICAgICAg
ICByZW1vdmVOb2RlKHN0YXJ0Tm9kZSk7CisgICAgICAgICAgICByZW1vdmVOb2RlKCpzdGFydE5v
ZGUpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBzdGFydE5vZGVXYXNEZXNjZW5k
YW50T2ZFbmROb2RlID0gbV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2Vu
ZGFudE9mKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKQEAgLTU1MiwxMiArNTQ5
LDEyIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgp
CiAgICAgICAgICAgICAgICAgLy8gaWYgd2UganVzdCByZW1vdmVkIGEgbm9kZSBmcm9tIHRoZSBl
bmQgY29udGFpbmVyLCB1cGRhdGUgZW5kIHBvc2l0aW9uIHNvIHRoZQogICAgICAgICAgICAgICAg
IC8vIGNoZWNrIGFib3ZlIHdpbGwgd29yawogICAgICAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9u
Rm9yTm9kZVJlbW92YWwobV9kb3duc3RyZWFtRW5kLCAqbm9kZSk7Ci0gICAgICAgICAgICAgICAg
cmVtb3ZlTm9kZShub2RlLmdldCgpKTsKKyAgICAgICAgICAgICAgICByZW1vdmVOb2RlKCpub2Rl
KTsKICAgICAgICAgICAgICAgICBub2RlID0gbmV4dE5vZGUuZ2V0KCk7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBub2RlLT5sYXN0RGVzY2VuZGFudCgp
OwogICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSA9
PSBuICYmIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0
TWF4T2Zmc2V0KCpuKSkgewotICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUuZ2V0
KCkpOworICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKCpub2RlKTsKICAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKTsKQEAgLTU2Nyw3
ICs1NjQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxl
dGUoKQogICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgIT0gc3Rh
cnROb2RlICYmICFtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50
T2YobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpICYmIG1fZG93bnN0cmVhbUVuZC5h
bmNob3JOb2RlKCktPmlzQ29ubmVjdGVkKCkgJiYgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNaW5PZmZzZXQoKm1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkTm9kZSgpKSkgewogICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5hdExhc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgIWNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKm1fZG93
bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBu
b2RlIGl0c2VsZiBpcyBmdWxseSBzZWxlY3RlZCwgbm90IGp1c3QgaXRzIGNvbnRlbnRzLiAgRGVs
ZXRlIGl0LgotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobV9kb3duc3RyZWFtRW5kLmRlcHJl
Y2F0ZWROb2RlKCkpOworICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoKm1fZG93bnN0cmVhbUVu
ZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzPFRleHQ+KCptX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmlt
bWVkCkBAIC02MjEsNyArNjE4LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJn
ZVBhcmFncmFwaHMoKQogICAgIGlmICghbV9tZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKSB7CiAgICAg
ICAgIGlmIChtX3BydW5lU3RhcnRCbG9ja0lmTmVjZXNzYXJ5KSB7CiAgICAgICAgICAgICAvLyBX
ZSBhcmVuJ3QgZ29pbmcgdG8gbWVyZ2UgaW50byB0aGUgc3RhcnQgYmxvY2ssIHNvIHJlbW92ZSBp
dCBpZiBpdCdzIGVtcHR5LgotICAgICAgICAgICAgcHJ1bmUobV9zdGFydEJsb2NrKTsKKyAgICAg
ICAgICAgIHBydW5lKG1fc3RhcnRCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICAvLyBSZW1vdmlu
ZyB0aGUgc3RhcnQgYmxvY2sgZHVyaW5nIGEgZGVsZXRpb24gaXMgdXN1YWxseSBhbiBpbmRpY2F0
aW9uIHRoYXQgd2UgbmVlZAogICAgICAgICAgICAgLy8gYSBwbGFjZWhvbGRlciwgYnV0IG5vdCBp
biB0aGlzIGNhc2UuCiAgICAgICAgICAgICBtX25lZWRQbGFjZWhvbGRlciA9IGZhbHNlOwpAQCAt
NjUxLDcgKzY0OCw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3Jh
cGhzKCkKICAgICAvLyBtb3ZlLCBzbyBqdXN0IHJlbW92ZSBpdC4KICAgICBFbGVtZW50KiBlbmRC
bG9jayA9IGVuY2xvc2luZ0Jsb2NrKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsK
ICAgICBpZiAoIWVuZEJsb2NrIHx8ICFlbmRCbG9jay0+Y29udGFpbnMoc3RhcnRPZlBhcmFncmFw
aFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpIHx8ICFzdGFydE9mUGFy
YWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSkgewotICAgICAg
ICByZW1vdmVOb2RlKGVuY2xvc2luZ0Jsb2NrKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9k
ZSgpKSk7CisgICAgICAgIGlmIChlbmRCbG9jaykKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoKmVu
ZEJsb2NrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTY3Myw3ICs2NzEsNyBA
QCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygpCiAgICAgLy8g
RklYTUU6IENvbnNpZGVyIFJUTC4KICAgICBpZiAoIW1fc3RhcnRzQXRFbXB0eUxpbmUgJiYgaXNT
dGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24pICYmIHN0YXJ0T2ZQYXJhZ3JhcGhUb01v
dmUuYWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSA+IG1lcmdlRGVzdGluYXRpb24uYWJzb2x1dGVD
YXJldEJvdW5kcygpLngoKSkgewogICAgICAgICBpZiAobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1
aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFn
KSkgewotICAgICAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKG1lcmdlRGVzdGlu
YXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKSk7Cisg
ICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoKm1lcmdlRGVzdGluYXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAg
ICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZh
bGVudCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03MTEsNyArNzA5LDcg
QEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVQcmV2aW91c2x5U2VsZWN0ZWRF
bXB0eVRhYmxlUm93cygpCiAgICAgICAgICAgICBpZiAoaXNUYWJsZVJvd0VtcHR5KHJvdykpCiAg
ICAgICAgICAgICAgICAgLy8gVXNlIGEgcmF3IHJlbW92ZU5vZGUsIGluc3RlYWQgb2YgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZCdzLCBiZWNhdXNlCiAgICAgICAgICAgICAgICAgLy8gdGhhdCB3b24n
dCByZW1vdmUgcm93cywgaXQgb25seSBlbXB0aWVzIHRoZW0gaW4gcHJlcGFyYXRpb24gZm9yIHRo
aXMgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92
ZU5vZGUocm93KTsKKyAgICAgICAgICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3Zl
Tm9kZSgqcm93KTsKICAgICAgICAgICAgIHJvdyA9IHByZXZpb3VzUm93LmdldCgpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNzIyLDcgKzcyMCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6cmVtb3ZlUHJldmlvdXNseVNlbGVjdGVkRW1wdHlUYWJsZVJvd3MoKQogICAgICAgICB3aGls
ZSAocm93ICYmIHJvdyAhPSBtX2VuZFRhYmxlUm93KSB7CiAgICAgICAgICAgICBSZWZQdHI8Tm9k
ZT4gbmV4dFJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmIChpc1RhYmxl
Um93RW1wdHkocm93KSkKLSAgICAgICAgICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZShyb3cpOworICAgICAgICAgICAgICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1v
dmVOb2RlKCpyb3cpOwogICAgICAgICAgICAgcm93ID0gbmV4dFJvdy5nZXQoKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTczNCw3ICs3MzIsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OnJlbW92ZVByZXZpb3VzbHlTZWxlY3RlZEVtcHR5VGFibGVSb3dzKCkKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2UgcHJvYmFibHkgc2hvdWxkbid0IHJlbW92ZSBtX2VuZFRhYmxlUm93IHVu
bGVzcyBpdCdzIGZ1bGx5IHNlbGVjdGVkLCBldmVuIGlmIGl0IGlzIGVtcHR5LgogICAgICAgICAg
ICAgICAgIC8vIFdlJ2xsIG5lZWQgdG8gc3RhcnQgYWRqdXN0aW5nIHRoZSBzZWxlY3Rpb24gZW5k
cG9pbnRzIGR1cmluZyBkZWxldGlvbiB0byBrbm93IHdoZXRoZXIgb3Igbm90IG1fZW5kVGFibGVS
b3cKICAgICAgICAgICAgICAgICAvLyB3YXMgZnVsbHkgc2VsZWN0ZWQgaGVyZS4KLSAgICAgICAg
ICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZShtX2VuZFRhYmxlUm93Lmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZSgq
bV9lbmRUYWJsZVJvdyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC04MTEs
NyArODA5LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRC
bG9ja3MoKQogICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9lbmRpbmdQb3NpdGlvbi5hbmNob3JO
b2RlKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbFByZXNl
cnZpbmdDaGlsZHJlbihtX2VuZGluZ1Bvc2l0aW9uLCAqbm9kZSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuKG5vZGUpOworICAgICAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oKm5vZGUpOwogICAgICAgICAgICAgbm9kZSA9IG1fZW5kaW5nUG9z
aXRpb24uYW5jaG9yTm9kZSgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5oCmluZGV4IDZkOGE3YzIyNjM2YzRmZGExNjM3MjAwNWNmMjlhYTVhODZj
NjU2OGIuLjI5NmFkOWVhMWNkYTc1MDNjYjNiYmU0ZTkyOTExMmVjMzVmY2MyY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCkBAIC02Niw3
ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVs
ZXRlKCk7CiAgICAgdm9pZCBjbGVhclRyYW5zaWVudFN0YXRlKCk7CiAgICAgdm9pZCBtYWtlU3R5
bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9z
cygpOwotICAgIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVD
b250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFi
bGUpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlTm9kZShOb2RlJiwgU2hvdWxkQXNzdW1lQ29u
dGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxl
KSBvdmVycmlkZTsKICAgICB2b2lkIGRlbGV0ZVRleHRGcm9tTm9kZShUZXh0JiwgdW5zaWduZWQs
IHVuc2lnbmVkKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZVJlZHVuZGFudEJsb2NrcygpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYzNkZDQ4YzM5N2Y0ZmNiZTE0ZWY3MDBh
M2JmMTQ4MDBhMjU5ZWVmZC4uMTcxMDQ4NGJjNzIyODdlYTE1Yzk1ZjE2N2Y0ZWVkMGNkNWFhOTli
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQg
Q2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFt
ZSkKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7CiAgICAgYXV0byBjbGVhckNv
bW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5kb2N1bWVudCgp
KSk7CiAgICAgY2xlYXJDb21tYW5kLT5zZXRTdGFydGluZ1NlbGVjdGlvbihvbGRTZWxlY3Rpb24p
OwotICAgIGFwcGx5Q29tbWFuZChXVEZNb3ZlKGNsZWFyQ29tbWFuZCkpOworICAgIGFwcGx5Q29t
bWFuZChjbGVhckNvbW1hbmQpOwogfQogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAt
NTA2LDcgKzUwNiw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50
KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBib29sIHNlbGVjCiAgICAgICAgIG9wdGlvbnMg
fD0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Oklnbm9yZU1haWxCbG9ja3F1b3RlOwogCiAgICAg
YXV0byBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCAmZnJhZ21lbnQsIG9wdGlvbnMsIGVkaXRpbmdBY3Rpb24pOwotICAgIGFwcGx5Q29tbWFuZChj
b21tYW5kLnB0cigpKTsKKyAgICBhcHBseUNvbW1hbmQoY29tbWFuZCk7CiAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKICAgICBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpAQCAtMzYyMCw4ICszNjIwLDggQEAgdm9pZCBFZGl0
b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENh
bmRpZGF0ZSkKIAogICAgIGlmIChhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1
bHQoYWNjZXB0ZWRDYW5kaWRhdGUpKSB7CiAgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KGFj
Y2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpUeXBlZCkpIHsKLSAgICAgICAgICAgIFJlZjxSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1h
bmQ+IHJlcGxhY2VDb21tYW5kID0gUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpjcmVhdGUo
cmFuZ2UuZ2V0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsKLSAgICAgICAgICAg
IGFwcGx5Q29tbWFuZChyZXBsYWNlQ29tbWFuZC5wdHIoKSk7CisgICAgICAgICAgICBhdXRvIHJl
cGxhY2VDb21tYW5kID0gUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpjcmVhdGUocmFuZ2Uu
Z2V0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIGFwcGx5
Q29tbWFuZChyZXBsYWNlQ29tbWFuZCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAg
aW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgbnVsbHB0cik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA3NDI4M2I2ZDI0Njk4NzM3
YjM5ZDZmNDNiOTcyNjZjN2U4MjY2ZTQ1Li43ZjA3MWIyYTk3Zjc0YzM2NWZjNDU4YTY3OTkxNjgz
OGFiMzYzM2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAg
LTQxNSw3ICs0MTUsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRm9ybWF0QmxvY2soRnJhbWUmIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAKICAgICBBU1NFUlQoZnJh
bWUuZG9jdW1lbnQoKSk7CiAgICAgYXV0byBjb21tYW5kID0gRm9ybWF0QmxvY2tDb21tYW5kOjpj
cmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHF1YWxpZmllZFRhZ05hbWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOwotICAgIGFwcGx5Q29tbWFuZChjb21tYW5kLmNvcHlSZWYoKSk7CisgICAgYXBwbHlD
b21tYW5kKGNvbW1hbmQpOwogICAgIHJldHVybiBjb21tYW5kLT5kaWRBcHBseSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCmluZGV4
IDE1NjM3ZjhjZTk2MzFjYTBkYWQ5OTFjYzlkMWFkY2Y5Njc3YTQ4MDcuLjdmOGRhMTc1OTUyZTA5
NjY1NjRhYmU4ODE0YzBkMTlkODIxMDNiZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBJbmRl
bnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncmFwaCgpCiAgICAgICAgIHZpc2libGVFbmRP
ZlBhcmFncmFwaCA9PSBlbmRPZkVuY2xvc2luZ0Jsb2NrKSB7CiAgICAgICAgIC8vIFRoZSBibG9j
a3F1b3RlIGRvZXNuJ3QgY29udGFpbiBhbnl0aGluZyBvdXRzaWRlIHRoZSBwYXJhZ3JhcGgsIHNv
IGl0IGNhbiBiZSB0b3RhbGx5IHJlbW92ZWQuCiAgICAgICAgIE5vZGUqIHNwbGl0UG9pbnQgPSBl
bmNsb3NpbmdOb2RlLT5uZXh0U2libGluZygpOwotICAgICAgICByZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuKGVuY2xvc2luZ05vZGUpOworICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuKCplbmNsb3NpbmdOb2RlKTsKICAgICAgICAgLy8gb3V0ZGVudFJlZ2lvbigpIGFzc3Vt
ZXMgaXQgaXMgb3BlcmF0aW5nIG9uIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgYW4gZW5jbG9zaW5n
IGJsb2NrcXVvdGUsIGJ1dCBpZiB0aGVyZSBhcmUgbXVsdGlwbHkgbmVzdGVkIGJsb2NrcXVvdGVz
IGFuZCB3ZSd2ZQogICAgICAgICAvLyBqdXN0IHJlbW92ZWQgb25lLCB0aGVuIHRoaXMgYXNzdW1w
dGlvbiBpc24ndCB0cnVlLiBCeSBzcGxpdHRpbmcgdGhlIG5leHQgY29udGFpbmluZyBibG9ja3F1
b3RlIGFmdGVyIHRoaXMgbm9kZSwgd2Uga2VlcCB0aGlzIGFzc3VtcHRpb24gdHJ1ZQogICAgICAg
ICBpZiAoc3BsaXRQb2ludCkgewpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgSW5kZW50T3V0ZGVu
dENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgoKQogICAgICAgICAgICAgICAgIGlmIChzcGxpdFBv
aW50UGFyZW50LT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpCiAgICAgICAgICAgICAgICAgICAg
ICYmICFzcGxpdFBvaW50LT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpCiAgICAgICAgICAgICAg
ICAgICAgICYmIHNwbGl0UG9pbnRQYXJlbnQtPnBhcmVudE5vZGUoKS0+aGFzRWRpdGFibGVTdHls
ZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQotICAg
ICAgICAgICAgICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4oc3BsaXRQb2lu
dFBhcmVudCksIHNwbGl0UG9pbnQpOworICAgICAgICAgICAgICAgICAgICBzcGxpdEVsZW1lbnQo
ZG93bmNhc3Q8RWxlbWVudD4oKnNwbGl0UG9pbnRQYXJlbnQpLCAqc3BsaXRQb2ludCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgSW5kZW50T3V0
ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgoKQogICAgIGVsc2UgewogICAgICAgICAvLyBX
ZSBzcGxpdCB0aGUgYmxvY2txdW90ZSBhdCB3aGVyZSB3ZSBzdGFydCBvdXRkZW50aW5nLgogICAg
ICAgICBhdXRvKiBoaWdoZXN0SW5saW5lTm9kZSA9IGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBl
KHZpc2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCksIGlzSW5saW5lLCBDYW5u
b3RDcm9zc0VkaXRpbmdCb3VuZGFyeSwgZW5jbG9zaW5nQmxvY2tGbG93KTsKLSAgICAgICAgc3Bs
aXRFbGVtZW50KGVuY2xvc2luZ05vZGUsIGhpZ2hlc3RJbmxpbmVOb2RlID8gaGlnaGVzdElubGlu
ZU5vZGUgOiB2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCkpOworICAgICAgICBzcGxpdEVsZW1lbnQoKmVuY2xvc2luZ05vZGUsIGhpZ2hlc3RJ
bmxpbmVOb2RlID8gKmhpZ2hlc3RJbmxpbmVOb2RlIDogKnZpc2libGVTdGFydE9mUGFyYWdyYXBo
LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgfQogICAgIGF1dG8gcGxh
Y2Vob2xkZXIgPSBIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgYXV0byog
cGxhY2Vob2xkZXJQdHIgPSBwbGFjZWhvbGRlci5wdHIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCmluZGV4IGU0ODJmZmU3MDRlMmNh
OTljYzllYTE4OTkzYzZkYjY1NmJmMmNiMWEuLjE3NmQ4ZjA4OWFmNTAyNjZkZDg5OGZhOTc3NGY5
NzQxZGIzOTlkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlu
ZUJyZWFrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5l
QnJlYWtDb21tYW5kLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFr
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgfSBlbHNlIGlmIChpczxUZXh0PigqcG9zaXRpb24uZGVw
cmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgLy8gU3BsaXQgYSB0ZXh0IG5vZGUKICAgICAgICAg
VGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KSk7Ci0gICAgICAgIHNwbGl0VGV4dE5vZGUoJnRleHROb2RlLCBwb3NpdGlvbi5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0Tm9kZSwgcG9zaXRp
b24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUo
Km5vZGVUb0luc2VydCwgdGV4dE5vZGUpOwogICAgICAgICBQb3NpdGlvbiBlbmRpbmdQb3NpdGlv
biA9IGZpcnN0UG9zaXRpb25Jbk5vZGUoJnRleHROb2RlKTsKICAgICAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IGU0MGNiMTg3MDVjNDZh
ZmFmYzJjMzA4MjFkMmRlNDQ0OTVkOGRlZTIuLmI2Mjc2NzYyMDkwYmM3OGIxODVhMzk0MmU4YjY1
MzY5NDMzYmJiMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlz
dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwCkBAIC01OCw3ICs1OCw3IEBAIEhUTUxFbGVtZW50KiBJbnNlcnRMaXN0Q29tbWFuZDo6
Zml4T3JwaGFuZWRMaXN0Q2hpbGQoTm9kZSYgbm9kZSkKIHsKICAgICBhdXRvIGxpc3RFbGVtZW50
ID0gSFRNTFVMaXN0RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIGluc2VydE5vZGVC
ZWZvcmUobGlzdEVsZW1lbnQuY29weVJlZigpLCBub2RlKTsKLSAgICByZW1vdmVOb2RlKCZub2Rl
KTsKKyAgICByZW1vdmVOb2RlKG5vZGUpOwogICAgIGFwcGVuZE5vZGUobm9kZSwgbGlzdEVsZW1l
bnQuY29weVJlZigpKTsKICAgICBtX2xpc3RFbGVtZW50ID0gbGlzdEVsZW1lbnQuY29weVJlZigp
OwogICAgIHJldHVybiBsaXN0RWxlbWVudC5wdHIoKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lk
IEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VD
cmVhdGVMaXN0LCBjb25zdCBIVAogICAgICAgICAgICAgLy8gU2VlIHRoZSBidWcgMzM2NjggYW5k
IGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3Rl
ZC1saXN0cy5odG1sLgogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWlnaHQgYmUgYSBidWcg
aW4gbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMgb3IgZGVsZXRlU2VsZWN0aW9uLgogICAgICAgICAg
ICAgaWYgKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5pc0Nvbm5lY3RlZCgpKQotICAgICAgICAgICAg
ICAgIHJlbW92ZU5vZGUobGlzdE5vZGUpOworICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoKmxp
c3ROb2RlKTsKIAogICAgICAgICAgICAgbmV3TGlzdCA9IG1lcmdlV2l0aE5laWdoYm9yaW5nTGlz
dHMobmV3TGlzdCk7CiAKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5k
Ojp1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFN0YXJ0
LAogICAgICAgICAvLyBGSVhNRTogV2UgYXBwZWFyIHRvIHNwbGl0IGF0IG5leHRMaXN0Q2hpbGQg
YXMgb3Bwb3NlZCB0byBsaXN0Q2hpbGROb2RlIHNvIHRoYXQgd2hlbiB3ZSByZW1vdmUKICAgICAg
ICAgLy8gbGlzdENoaWxkTm9kZSBiZWxvdyBpbiBtb3ZlUGFyYWdyYXBocywgcHJldmlvdXNMaXN0
Q2hpbGQgd2lsbCBiZSByZW1vdmVkIGFsb25nIHdpdGggaXQgaWYgaXQgaXMgCiAgICAgICAgIC8v
IHVucmVuZGVyZWQuIEJ1dCB3ZSBvdWdodCB0byByZW1vdmUgbmV4dExpc3RDaGlsZCB0b28sIGlm
IGl0IGlzIHVucmVuZGVyZWQuCi0gICAgICAgIHNwbGl0RWxlbWVudChsaXN0Tm9kZSwgc3BsaXRU
cmVlVG9Ob2RlKG5leHRMaXN0Q2hpbGQsIGxpc3ROb2RlKSk7CisgICAgICAgIHNwbGl0RWxlbWVu
dCgqbGlzdE5vZGUsICpzcGxpdFRyZWVUb05vZGUobmV4dExpc3RDaGlsZCwgbGlzdE5vZGUpKTsK
ICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2RlVG9JbnNlcnQucmVsZWFzZU5vbk51bGwoKSwg
Kmxpc3ROb2RlKTsKICAgICB9IGVsc2UgaWYgKG5leHRMaXN0Q2hpbGQgfHwgbGlzdENoaWxkTm9k
ZS0+cGFyZW50Tm9kZSgpICE9IGxpc3ROb2RlKSB7CiAgICAgICAgIC8vIEp1c3QgYmVjYXVzZSBs
aXN0Q2hpbGROb2RlIGhhcyBubyBwcmV2aW91c0xpc3RDaGlsZCBkb2Vzbid0IG1lYW4gdGhlcmUg
aXNuJ3QgYW55IGNvbnRlbnQKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIEluc2VydExpc3RDb21t
YW5kOjp1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFN0
YXJ0LAogICAgICAgICAvLyBiZXR3ZWVuIGl0IGFuZCBsaXN0Tm9kZS4gU28sIHdlIHNwbGl0IHVw
IHRvIGxpc3ROb2RlIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHBsYWNlaG9sZGVyCiAgICAgICAgIC8v
IHdoZXJlIHdlJ3JlIGFib3V0IHRvIG1vdmUgbGlzdENoaWxkTm9kZSB0by4KICAgICAgICAgaWYg
KGxpc3RDaGlsZE5vZGUtPnBhcmVudE5vZGUoKSAhPSBsaXN0Tm9kZSkKLSAgICAgICAgICAgIHNw
bGl0RWxlbWVudChsaXN0Tm9kZSwgc3BsaXRUcmVlVG9Ob2RlKGxpc3RDaGlsZE5vZGUsIGxpc3RO
b2RlKS5nZXQoKSk7CisgICAgICAgICAgICBzcGxpdEVsZW1lbnQoKmxpc3ROb2RlLCAqc3BsaXRU
cmVlVG9Ob2RlKGxpc3RDaGlsZE5vZGUsIGxpc3ROb2RlKS5nZXQoKSk7CiAgICAgICAgIGluc2Vy
dE5vZGVCZWZvcmUobm9kZVRvSW5zZXJ0LnJlbGVhc2VOb25OdWxsKCksICpsaXN0Tm9kZSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGluc2VydE5vZGVBZnRlcihub2RlVG9JbnNlcnQucmVsZWFzZU5v
bk51bGwoKSwgKmxpc3ROb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCmluZGV4IGU2MzFkNGJlZDRk
ZmE1MWUwYmY2NmZjMzAyYzBlNjFmZGYzMjI4MzAuLjg1ZGUxMmM4N2I4ZjM4MWYxYTlhY2ZkOGJm
NjYwN2JkYmMyYzliNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcApAQCAtMzQyLDExICszNDIsMTEg
QEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICAv
LyBTcGxpdCBhdCBwb3MgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZS4KICAgICBQb3Np
dGlvbiBwb3NpdGlvbkFmdGVyU3BsaXQ7CiAgICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmFuY2hv
clR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIGlzPFRleHQ+
KCppbnNlcnRpb25Qb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKSB7Ci0gICAgICAgIFJlZlB0cjxU
ZXh0PiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KGluc2VydGlvblBvc2l0aW9uLmNvbnRhaW5l
ck5vZGUoKSk7CisgICAgICAgIFJlZjxUZXh0PiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpp
bnNlcnRpb25Qb3NpdGlvbi5jb250YWluZXJOb2RlKCkpOwogICAgICAgICBib29sIGF0RW5kID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpKSA+PSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3Np
dGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCAmJiAhYXRFbmQpIHsKICAgICAgICAg
ICAgIHNwbGl0VGV4dE5vZGUodGV4dE5vZGUsIGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKTsKLSAgICAgICAgICAgIHBvc2l0aW9uQWZ0ZXJTcGxpdCA9IGZpcnN0UG9z
aXRpb25Jbk5vZGUodGV4dE5vZGUuZ2V0KCkpOworICAgICAgICAgICAgcG9zaXRpb25BZnRlclNw
bGl0ID0gZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0Tm9kZS5wdHIoKSk7CiAgICAgICAgICAgICBp
ZiAoIXRleHROb2RlLT5wcmV2aW91c1NpYmxpbmcoKSkKICAgICAgICAgICAgICAgICByZXR1cm47
IC8vIEJhaWwgb3V0IGlmIG11dGF0aW9uIGV2ZW50cyBkZXRhY2hkIHRoZSBzcGxpdCB0ZXh0IG5v
ZGUuCiAgICAgICAgICAgICBpbnNlcnRpb25Qb3NpdGlvbi5tb3ZlVG9Qb3NpdGlvbih0ZXh0Tm9k
ZS0+cHJldmlvdXNTaWJsaW5nKCksIGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpKTsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAg
bW92ZVJlbWFpbmluZ1NpYmxpbmdzVG9OZXdQYXJlbnQobiwgYmxvY2tUb0luc2VydC5nZXQoKSwg
YmxvY2tUb0luc2VydCk7CisgICAgICAgIG1vdmVSZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50
KG4sIGJsb2NrVG9JbnNlcnQuZ2V0KCksICpibG9ja1RvSW5zZXJ0KTsKICAgICB9ICAgICAgICAg
ICAgCiAKICAgICAvLyBIYW5kbGUgd2hpdGVzcGFjZSB0aGF0IG9jY3VycyBhZnRlciB0aGUgc3Bs
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXgg
OGMwOTFlNzQzZTEzNmUyNmU5NWUzODExMTAyMGJhZDE5NThlYTUwYS4uMTc1NWVmMGQ4ZDU1Y2U4
ZWE2YTFhYWE2YzY4YWZjY2IyNGY1OWZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTI2Nyw3ICsyNjcsNyBAQCBQb3NpdGlvbiBJbnNlcnRU
ZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKGNvbnN0IFBvc2l0aW9uJiBwb3MpCiAgICAgICAgICAgICAv
LyBzZWNvbmQgbm9kZSBpbiB0aGUgc3BsaXQsIHNvIHdlIG5lZWQgdG8KICAgICAgICAgICAgIC8v
IGluc2VydCB0aGUgc3BhbiBiZWZvcmUgaXQuCiAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkK
LSAgICAgICAgICAgICAgICBzcGxpdFRleHROb2RlKHRleHROb2RlLnB0cigpLCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUodGV4dE5vZGUsIG9mZnNldCk7CiAgICAgICAg
ICAgICBpbnNlcnROb2RlQmVmb3JlKFdURk1vdmUoc3Bhbk5vZGUpLCB0ZXh0Tm9kZSk7CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5jcHAKaW5kZXggMjM5Mjk0NTViYjEzZGRmMDJjNzQ3ZmY5YmU0ZjQwNDhm
YzFjYzEyMS4uNTEzY2RiMDQzNDZlOGZkMTg5YWI2Mzk1Mjk4MTI3ODJhMzgwNTU5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNw
cApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6
Omluc2VydFNpYmxpbmdOb2RlUmFuZ2VCZWZvcmUoTm9kZSogc3RhcnRObwogICAgIE5vZGUqIG5v
ZGUgPSBzdGFydE5vZGU7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgTm9kZSogbmV4dCA9IG5v
ZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CisgICAgICAgIHJl
bW92ZU5vZGUoKm5vZGUpOwogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKCpub2RlLCAqcmVmTm9k
ZSk7CiAKICAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2
b2lkIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6Omluc2VydFNpYmxpbmdOb2RlUmFu
Z2VBZnRlcihOb2RlKiBzdGFydE5vZAogICAgIE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7CiAgICAg
d2hpbGUgKDEpIHsKICAgICAgICAgTm9kZSogbmV4dCA9IG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0g
ICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CisgICAgICAgIHJlbW92ZU5vZGUoKm5vZGUpOwogICAg
ICAgICBpbnNlcnROb2RlQWZ0ZXIoKm5vZGUsICpyZWZOb2RlKTsKIAogICAgICAgICBpZiAobm9k
ZSA9PSBlbmROb2RlKQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsQ29tbWFuZDo6YXBwZW5kU2libGluZ05vZGVSYW5nZShOb2RlKiBzdGFydE5vZGUsIE5v
CiAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBO
b2RlKiBuZXh0ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgcmVtb3ZlTm9kZShub2Rl
KTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgIGFwcGVuZE5vZGUoKm5vZGUs
ICpuZXdQYXJlbnQpOwogCiAgICAgICAgIGlmIChub2RlID09IGVuZE5vZGUpCkBAIC0yNjcsMTQg
KzI2NywxNCBAQCB2b2lkIERlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgICAgIC8vIGF0IHN0YXJ0IG9mIHN1Ymxpc3QsIG1vdmUgdGhlIGNoaWxkKHJlbikg
dG8gYmVmb3JlIHRoZSBzdWJsaXN0CiAgICAgICAgIGluc2VydFNpYmxpbmdOb2RlUmFuZ2VCZWZv
cmUoc3RhcnRMaXN0Q2hpbGQsIGVuZExpc3RDaGlsZCwgbGlzdE5vZGUpOwogICAgICAgICAvLyBp
ZiB0aGF0IHdhcyB0aGUgd2hvbGUgc3VibGlzdCB3ZSBtb3ZlZCwgcmVtb3ZlIHRoZSBzdWJsaXN0
IG5vZGUKLSAgICAgICAgaWYgKCFuZXh0SXRlbSkKLSAgICAgICAgICAgIHJlbW92ZU5vZGUobGlz
dE5vZGUpOworICAgICAgICBpZiAoIW5leHRJdGVtICYmIGxpc3ROb2RlKQorICAgICAgICAgICAg
cmVtb3ZlTm9kZSgqbGlzdE5vZGUpOwogICAgIH0gZWxzZSBpZiAoIW5leHRJdGVtKSB7CiAgICAg
ICAgIC8vIGF0IGVuZCBvZiBsaXN0LCBtb3ZlIHRoZSBjaGlsZChyZW4pIHRvIGFmdGVyIHRoZSBz
dWJsaXN0CiAgICAgICAgIGluc2VydFNpYmxpbmdOb2RlUmFuZ2VBZnRlcihzdGFydExpc3RDaGls
ZCwgZW5kTGlzdENoaWxkLCBsaXN0Tm9kZSk7ICAgIAogICAgIH0gZWxzZSBpZiAobGlzdE5vZGUp
IHsKICAgICAgICAgLy8gaW4gdGhlIG1pZGRsZSBvZiBsaXN0LCBzcGxpdCB0aGUgbGlzdCBhbmQg
bW92ZSB0aGUgY2hpbGRyZW4gdG8gdGhlIGRpdmlkZQotICAgICAgICBzcGxpdEVsZW1lbnQobGlz
dE5vZGUsIHN0YXJ0TGlzdENoaWxkKTsKKyAgICAgICAgc3BsaXRFbGVtZW50KCpsaXN0Tm9kZSwg
KnN0YXJ0TGlzdENoaWxkKTsKICAgICAgICAgaW5zZXJ0U2libGluZ05vZGVSYW5nZUJlZm9yZShz
dGFydExpc3RDaGlsZCwgZW5kTGlzdENoaWxkLCBsaXN0Tm9kZSk7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVu
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW5Db21tYW5kLmNwcAppbmRleCBiNjE2NDQzOTNiODZhZWVkNzM1NGE4NjBiMjZhYjkw
MWFhNzQ2NGU0Li4zNGI5ZWY3NzczMjFlYjgyNWU5ZTgzZDI1Yjk4OWI1YmNkNDcxZmVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW5Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVz
ZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcApAQCAtMzEsMTIgKzMxLDExIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OlJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgU2hv
dWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3
YXlzRWRpdGFibGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK1JlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW5Db21tYW5kOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChS
ZWY8Tm9kZT4mJiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91
bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQobm9kZS0+ZG9jdW1lbnQoKSwgZWRpdGluZ0Fj
dGlvbikKLSAgICAsIG1fbm9kZShub2RlKQorICAgICwgbV9ub2RlKFdURk1vdmUobm9kZSkpCiAg
ICAgLCBtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKHNob3VsZEFzc3VtZUNv
bnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogewotICAgIEFTU0VSVChtX25vZGUpOwogfQogCiB2b2lk
IFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpkb0FwcGx5KCkKQEAgLTQ4LDgg
KzQ3LDggQEAgdm9pZCBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgYXV0byBjaGlsZCA9IFdURk1vdmUoY2hp
bGRyZW5baV0pOwotICAgICAgICByZW1vdmVOb2RlKGNoaWxkLnB0cigpLCBtX3Nob3VsZEFzc3Vt
ZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKLSAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShXVEZN
b3ZlKGNoaWxkKSwgKm1fbm9kZSwgbV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSk7CisgICAgICAgIHJlbW92ZU5vZGUoY2hpbGQsIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3
YXlzRWRpdGFibGUpOworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKFdURk1vdmUoY2hpbGQpLCBt
X25vZGUsIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIH0KICAg
ICByZW1vdmVOb2RlKG1fbm9kZSwgbV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVz
ZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgKaW5kZXggMDdlYTA4OGJhYzQzYmFkMDhhZGYx
ZWVjMzUwMDhkNDJkODcyYzIyNy4uZGQ4NWNjOWI4MzIyZGM1M2JjYTU5ZTAwYzk5MjJiOTFiMzc1
ZmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaApAQCAtMzEsMTcgKzMxLDE3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1h
bmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRy
PE5vZGU+IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFz
c3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCisg
ICAgc3RhdGljIFJlZjxSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZD4gY3JlYXRl
KFJlZjxOb2RlPiYmIG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNo
b3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZChub2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0
YWJsZSwgZWRpdGluZ0FjdGlvbikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChXVEZNb3ZlKG5vZGUpLCBzaG91bGRBc3N1
bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgZWRpdGluZ0FjdGlvbikpOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChQ
YXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgRWRp
dEFjdGlvbik7CisgICAgZXhwbGljaXQgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1h
bmQoUmVmPE5vZGU+JiYsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBFZGl0
QWN0aW9uKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPE5v
ZGU+IG1fbm9kZTsKKyAgICBSZWY8Tm9kZT4gbV9ub2RlOwogICAgIFNob3VsZEFzc3VtZUNvbnRl
bnRJc0Fsd2F5c0VkaXRhYmxlIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGU7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0
aFNwYW5Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRo
U3BhbkNvbW1hbmQuY3BwCmluZGV4IGIzMjkyY2UxYzhjODQwNTg3ZTM3MjA4MmM5YTI4ZmJhMmM2
YjdiNjYuLjcyMGYyY2RkMjFlYjBmZWNiMzgwMDBlYmQ4MjQ1YmZiM2IxMWY2MjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQu
Y3BwCkBAIC0zNiwxMSArMzYsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZDo6UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQoUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpSZXBs
YWNlTm9kZVdpdGhTcGFuQ29tbWFuZChSZWY8SFRNTEVsZW1lbnQ+JiYgZWxlbWVudCkKICAgICA6
IFNpbXBsZUVkaXRDb21tYW5kKGVsZW1lbnQtPmRvY3VtZW50KCkpCi0gICAgLCBtX2VsZW1lbnRU
b1JlcGxhY2UoZWxlbWVudCkKKyAgICAsIG1fZWxlbWVudFRvUmVwbGFjZShXVEZNb3ZlKGVsZW1l
bnQpKQogewotICAgIEFTU0VSVChtX2VsZW1lbnRUb1JlcGxhY2UpOwogfQogCiBzdGF0aWMgdm9p
ZCBzd2FwSW5Ob2RlUHJlc2VydmluZ0F0dHJpYnV0ZXNBbmRDaGlsZHJlbihIVE1MRWxlbWVudCYg
bmV3Tm9kZSwgSFRNTEVsZW1lbnQmIG5vZGVUb1JlcGxhY2UpCkBAIC02NSwyMCArNjQsMjAgQEAg
dm9pZCBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAoIW1fc3BhbkVsZW1lbnQpCiAgICAgICAgIG1fc3BhbkVsZW1lbnQgPSBIVE1M
U3BhbkVsZW1lbnQ6OmNyZWF0ZShtX2VsZW1lbnRUb1JlcGxhY2UtPmRvY3VtZW50KCkpOwotICAg
IHN3YXBJbk5vZGVQcmVzZXJ2aW5nQXR0cmlidXRlc0FuZENoaWxkcmVuKCptX3NwYW5FbGVtZW50
LCAqbV9lbGVtZW50VG9SZXBsYWNlKTsKKyAgICBzd2FwSW5Ob2RlUHJlc2VydmluZ0F0dHJpYnV0
ZXNBbmRDaGlsZHJlbigqbV9zcGFuRWxlbWVudCwgbV9lbGVtZW50VG9SZXBsYWNlKTsKIH0KIAog
dm9pZCBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKICAgICBpZiAo
IW1fc3BhbkVsZW1lbnQtPmlzQ29ubmVjdGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzd2Fw
SW5Ob2RlUHJlc2VydmluZ0F0dHJpYnV0ZXNBbmRDaGlsZHJlbigqbV9lbGVtZW50VG9SZXBsYWNl
LCAqbV9zcGFuRWxlbWVudCk7CisgICAgc3dhcEluTm9kZVByZXNlcnZpbmdBdHRyaWJ1dGVzQW5k
Q2hpbGRyZW4obV9lbGVtZW50VG9SZXBsYWNlLCAqbV9zcGFuRWxlbWVudCk7CiB9CiAKICNpZm5k
ZWYgTkRFQlVHCiB2b2lkIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpnZXROb2Rlc0luQ29t
bWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMpCiB7Ci0gICAgYWRkTm9kZUFuZERlc2NlbmRhbnRz
KG1fZWxlbWVudFRvUmVwbGFjZS5nZXQoKSwgbm9kZXMpOworICAgIGFkZE5vZGVBbmREZXNjZW5k
YW50cyhtX2VsZW1lbnRUb1JlcGxhY2UucHRyKCksIG5vZGVzKTsKICAgICBhZGROb2RlQW5kRGVz
Y2VuZGFudHMobV9zcGFuRWxlbWVudC5nZXQoKSwgbm9kZXMpOwogfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgKaW5k
ZXggYjU2NGM2NmVjMmFjNGQ0MWIwMWQzNjBmYTc2NmQzODk0OTkwZGIyZS4uZTVkMzBmYzVmMjcx
NjBkZmM3N2ZiOTk1OTRjMGJiZGM2MDY5OTBjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaApAQCAtMzksMTUgKzM5LDE1IEBA
IGNsYXNzIEhUTUxFbGVtZW50OwogLy8gTW9yZSBhY2N1cmF0ZWx5LCB0aGlzIGlzIFJlcGxhY2VF
bGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzQ29tbWFuZAogY2xh
c3MgUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ+IGNy
ZWF0ZShQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQorICAgIHN0YXRpYyBSZWY8UmVw
bGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ+IGNyZWF0ZShSZWY8SFRNTEVsZW1lbnQ+JiYgZWxlbWVu
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlcGxhY2VOb2RlV2l0aFNw
YW5Db21tYW5kKGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVwbGFj
ZU5vZGVXaXRoU3BhbkNvbW1hbmQoV1RGTW92ZShlbGVtZW50KSkpOwogICAgIH0KIAogICAgIEhU
TUxFbGVtZW50KiBzcGFuRWxlbWVudCgpIHsgcmV0dXJuIG1fc3BhbkVsZW1lbnQuZ2V0KCk7IH0K
IAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZChQYXNz
UmVmUHRyPEhUTUxFbGVtZW50Pik7CisgICAgZXhwbGljaXQgUmVwbGFjZU5vZGVXaXRoU3BhbkNv
bW1hbmQoUmVmPEhUTUxFbGVtZW50PiYmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRl
OwogICAgIHZvaWQgZG9VbmFwcGx5KCkgb3ZlcnJpZGU7CkBAIC01Niw3ICs1Niw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYpIG92ZXJyaWRl
OwogI2VuZGlmCiAKLSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fZWxlbWVudFRvUmVwbGFjZTsK
KyAgICBSZWY8SFRNTEVsZW1lbnQ+IG1fZWxlbWVudFRvUmVwbGFjZTsKICAgICBSZWZQdHI8SFRN
TEVsZW1lbnQ+IG1fc3BhbkVsZW1lbnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDQwOTRmNTg5MjVhYmY1MGJh
NDk5ODIwMTNjNmQ3MGUwYjE2OWQ0ZTkuLjE1Y2MwMTU1NDMwZmJjNTI5ZTJjNTJiMTg3MjYwNmJl
MjdiMmU0MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0lu
dGVyY2hhbmdlTmV3bGluZUF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRlcmNoYW5nZU5l
d2xpbmVBdEVuZDsgfQogICAgIAogICAgIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+
KTsKLSAgICB2b2lkIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2Rl
Pik7CisgICAgdm9pZCByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUmKTsKIAogcHJp
dmF0ZToKICAgICBSZWY8SFRNTEVsZW1lbnQ+IGluc2VydEZyYWdtZW50Rm9yVGVzdFJlbmRlcmlu
ZyhOb2RlKiByb290RWRpdGFibGVOb2RlKTsKQEAgLTIyNCwxNiArMjI0LDEzIEBAIE5vZGUgKlJl
cGxhY2VtZW50RnJhZ21lbnQ6Omxhc3RDaGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhZ21l
bnQgPyBtX2ZyYWdtZW50LT5sYXN0Q2hpbGQoKSA6IDA7IAogfQogCi12b2lkIFJlcGxhY2VtZW50
RnJhZ21lbnQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPiBu
b2RlKQordm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB3aGlsZSAoUmVmUHRyPE5vZGU+IG4gPSBub2RlLT5maXJzdENoaWxkKCkpIHsKKyAgICB3aGls
ZSAoUmVmUHRyPE5vZGU+IG4gPSBub2RlLmZpcnN0Q2hpbGQoKSkgewogICAgICAgICByZW1vdmVO
b2RlKG4pOwotICAgICAgICBpbnNlcnROb2RlQmVmb3JlKFdURk1vdmUobiksIG5vZGUuZ2V0KCkp
OworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKFdURk1vdmUobiksICZub2RlKTsKICAgICB9Ci0g
ICAgcmVtb3ZlTm9kZShXVEZNb3ZlKG5vZGUpKTsKKyAgICByZW1vdmVOb2RlKCZub2RlKTsKIH0K
IAogdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4g
bm9kZSkKQEAgLTMzMiw3ICszMjksNyBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92
ZUludGVyY2hhbmdlTm9kZXMoTm9kZSogY29udGFpbmVyKQogICAgICAgICBSZWZQdHI8Tm9kZT4g
bmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpOwogICAgICAgICBpZiAoaXNJbnRlcmNo
YW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihub2RlKSkgewogICAgICAgICAgICAgbmV4dCA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2RlKTsKLSAgICAgICAgICAgIHJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9kZSk7CisgICAgICAgICAgICByZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuKCpub2RlKTsKICAgICAgICAgfQogICAgICAgICBub2RlID0gbmV4dC5n
ZXQoKTsKICAgICB9CkBAIC01MDMsNyArNTAwLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShJbnNlcnQK
IAogICAgICAgICAgICAgICAgIGlmIChuZXdJbmxpbmVTdHlsZS0+Y29uZmxpY3RzV2l0aEltcGxp
Y2l0U3R5bGVPZkVsZW1lbnQoJmh0bWxFbGVtZW50KSkgewogICAgICAgICAgICAgICAgICAgICAv
LyBlLmcuIDxiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+IGlzIGNvbnZlcnRlZCB0byA8
c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPgotICAgICAgICAgICAgICAgICAgICBu
b2RlID0gcmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0
ZXMoJmh0bWxFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHJlcGxhY2VFbGVt
ZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKGh0bWxFbGVtZW50KTsK
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KG5v
ZGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZE5vZGVzLmRpZFJlcGxhY2VO
b2RlKCZodG1sRWxlbWVudCwgbm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChuZXdJbmxpbmVTdHlsZS0+ZXh0cmFjdENvbmZsaWN0aW5nSW1wbGljaXRTdHlsZU9mQXR0cmli
dXRlcygmaHRtbEVsZW1lbnQsIEVkaXRpbmdTdHlsZTo6UHJlc2VydmVXcml0aW5nRGlyZWN0aW9u
LCAwLCBhdHRyaWJ1dGVzLApAQCAtNTI4LDE5ICs1MjUsMTkgQEAgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShJ
bnNlcnQKICAgICAgICAgaWYgKCFpbmxpbmVTdHlsZSB8fCBuZXdJbmxpbmVTdHlsZS0+aXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBpZiAoaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0
cmlidXRlKCplbGVtZW50KSB8fCBpc0VtcHR5Rm9udFRhZyhlbGVtZW50LCBBbGxvd05vbkVtcHR5
U3R5bGVBdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKLSAgICAgICAgICAgICAgICByZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIHJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZSgqZWxl
bWVudCwgc3R5bGVBdHRyKTsKICAgICAgICAgfSBlbHNlIGlmIChuZXdJbmxpbmVTdHlsZS0+c3R5
bGUoKS0+cHJvcGVydHlDb3VudCgpICE9IGlubGluZVN0eWxlLT5wcm9wZXJ0eUNvdW50KCkpCi0g
ICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5l
U3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKKyAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUo
KmVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsK
IAogICAgICAgICAvLyBGSVhNRTogVG9sZXJhdGUgZGlmZmVyZW5jZXMgaW4gaWQsIGNsYXNzLCBh
bmQgc3R5bGUgYXR0cmlidXRlcy4KICAgICAgICAgaWYgKGVsZW1lbnQtPnBhcmVudE5vZGUoKSAm
JiBpc05vblRhYmxlQ2VsbEhUTUxCbG9ja0VsZW1lbnQoZWxlbWVudCkgJiYgYXJlSWRlbnRpY2Fs
RWxlbWVudHMoKmVsZW1lbnQsICplbGVtZW50LT5wYXJlbnROb2RlKCkpCiAgICAgICAgICAgICAm
JiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShlbGVtZW50LT5wYXJlbnROb2Rl
KCkpKSA9PSBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShlbGVtZW50KSkKICAg
ICAgICAgICAgICYmIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk5vZGUoZWxlbWVudC0+
cGFyZW50Tm9kZSgpKSkgPT0gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShlbGVt
ZW50KSkpIHsKICAgICAgICAgICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW4oZWxlbWVudCk7Ci0gICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuKGVsZW1lbnQpOworICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bigqZWxlbWVudCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC01NTIs
NyArNTQ5LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50
U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShJbnNlcnQKICAgICAgICAgaWYgKGlzTGVnYWN5
QXBwbGVTdHlsZVNwYW4oZWxlbWVudCkpIHsKICAgICAgICAgICAgIGlmICghZWxlbWVudC0+Zmly
c3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKLSAgICAgICAgICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oKmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gVGhlcmUgYXJlIG90aGVyIHN0eWxlcyB0aGF0
IHN0eWxlIHJ1bGVzIGNhbiBnaXZlIHRvIHN0eWxlIHNwYW5zLApAQCAtNjUyLDcgKzY0OSw3IEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VJbnNlcnRlZENvbnRlbnRSb3VuZFRy
aXBwYWJsZVdpdGhIVE1MVHJlZUJ1aWxkCiAgICAgICAgICAgICAgICAgaWYgKGhlYWRlckVsZW1l
bnQtPnBhcmVudE5vZGUoKSAmJiBoZWFkZXJFbGVtZW50LT5wYXJlbnROb2RlKCktPmlzQ29udGVu
dFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1vdmVOb2RlT3V0T2ZBbmNl
c3Rvcihub2RlLCBoZWFkZXJFbGVtZW50LCBpbnNlcnRlZE5vZGVzKTsKICAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgSFRNTEVsZW1lbnQqIG5ld1NwYW5FbGVtZW50
ID0gcmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMo
ZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
SFRNTEVsZW1lbnQqIG5ld1NwYW5FbGVtZW50ID0gcmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNl
cnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpub2RlKSk7
CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkTm9kZXMuZGlkUmVwbGFjZU5vZGUobm9kZS5n
ZXQoKSwgbmV3U3BhbkVsZW1lbnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTY2OCwxOSArNjY1LDE5IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1vdmVO
b2RlT3V0T2ZBbmNlc3RvcihQYXNzUmVmUHRyPE5vZGU+IHBycE5vZGUsIFBhCiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uQXRFbmRPZk5vZGUgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2Rl
KG5vZGUuZ2V0KCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBsYXN0UG9zaXRpb25JblBhcmFncmFw
aCA9IGxhc3RQb3NpdGlvbkluTm9kZShhbmNlc3Rvci5nZXQoKSk7CiAgICAgaWYgKHBvc2l0aW9u
QXRFbmRPZk5vZGUgPT0gbGFzdFBvc2l0aW9uSW5QYXJhZ3JhcGgpIHsKLSAgICAgICAgcmVtb3Zl
Tm9kZShub2RlKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgIGlmIChhbmNl
c3Rvci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9kZS5y
ZWxlYXNlTm9uTnVsbCgpLCAqYW5jZXN0b3ItPm5leHRTaWJsaW5nKCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBhcHBlbmROb2RlKG5vZGUucmVsZWFzZU5vbk51bGwoKSwgKmFuY2VzdG9y
LT5wYXJlbnROb2RlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBub2Rl
VG9TcGxpdFRvID0gc3BsaXRUcmVlVG9Ob2RlKG5vZGUuZ2V0KCksIGFuY2VzdG9yLmdldCgpLCB0
cnVlKTsKLSAgICAgICAgcmVtb3ZlTm9kZShub2RlKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbm9k
ZSk7CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9kZS5yZWxlYXNlTm9uTnVsbCgpLCAqbm9k
ZVRvU3BsaXRUbyk7CiAgICAgfQogICAgIGlmICghYW5jZXN0b3ItPmZpcnN0Q2hpbGQoKSkgewog
ICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlKGFuY2VzdG9yLmdldCgpKTsKLSAg
ICAgICAgcmVtb3ZlTm9kZShXVEZNb3ZlKGFuY2VzdG9yKSk7CisgICAgICAgIHJlbW92ZU5vZGUo
KmFuY2VzdG9yKTsKICAgICB9CiB9CiAKQEAgLTY5OCw3ICs2OTUsNyBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRzKEluc2VydGVk
Tm9kZXMmIGlucwogICAgICAgICAmJiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKGxhc3RMZWFmSW5zZXJ0ZWQpLCBzZWxlY3RUYWcpCiAgICAgICAg
ICYmICFlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
bGFzdExlYWZJbnNlcnRlZCksIHNjcmlwdFRhZykpIHsKICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53
aWxsUmVtb3ZlTm9kZShsYXN0TGVhZkluc2VydGVkKTsKLSAgICAgICAgcmVtb3ZlTm9kZShsYXN0
TGVhZkluc2VydGVkKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbGFzdExlYWZJbnNlcnRlZCk7CiAg
ICAgfQogCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBmaXJzdE5vZGVJ
bnNlcnRlZCBpc24ndCBpbnNpZGUgYSBzZWxlY3Qgb3Igc2NyaXB0IGVsZW1lbnQKQEAgLTcwNiw3
ICs3MDMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVk
VGV4dE5vZGVzQXRFbmRzKEluc2VydGVkTm9kZXMmIGlucwogICAgIE5vZGUqIGZpcnN0Tm9kZUlu
c2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOwogICAgIGlmIChpczxU
ZXh0PihmaXJzdE5vZGVJbnNlcnRlZCkgJiYgIWhhc1JlbmRlcmVkVGV4dChkb3duY2FzdDxUZXh0
PigqZmlyc3ROb2RlSW5zZXJ0ZWQpKSkgewogICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1v
dmVOb2RlKGZpcnN0Tm9kZUluc2VydGVkKTsKLSAgICAgICAgcmVtb3ZlTm9kZShmaXJzdE5vZGVJ
bnNlcnRlZCk7CisgICAgICAgIHJlbW92ZU5vZGUoKmZpcnN0Tm9kZUluc2VydGVkKTsKICAgICB9
CiB9CiAKQEAgLTc2OSw3ICs3NjYsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVTdHlsZVNwYW5zQmVm
b3JlSW5zZXJ0aW9uKFJlcGxhY2VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdAogICAgIGlm
IChzdHlsZVRleHQgIT0gZG93bmNhc3Q8RWxlbWVudD4oKndyYXBwaW5nU3R5bGVTcGFuKS5nZXRB
dHRyaWJ1dGUoc3R5bGVBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZnJhZ21l
bnQucmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih3cmFwcGluZ1N0eWxlU3Bhbik7CisgICAg
ZnJhZ21lbnQucmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigqd3JhcHBpbmdTdHlsZVNwYW4p
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04MjAsOSArODE3LDkgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucyhJbnNlcnRlZE5vZGVzJiBpbnNlcnRl
ZE5vZGVzKQogCiAgICAgaWYgKHN0eWxlLT5pc0VtcHR5KCkgfHwgIXdyYXBwaW5nU3R5bGVTcGFu
LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbih3cmFwcGluZ1N0eWxlU3Bhbik7Ci0gICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4od3JhcHBpbmdTdHlsZVNwYW4pOworICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKCp3cmFwcGluZ1N0eWxlU3Bhbik7CiAgICAgfSBlbHNlCi0gICAg
ICAgIHNldE5vZGVBdHRyaWJ1dGUod3JhcHBpbmdTdHlsZVNwYW4sIHN0eWxlQXR0ciwgc3R5bGUt
PnN0eWxlKCktPmFzVGV4dCgpKTsKKyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgqd3JhcHBpbmdT
dHlsZVNwYW4sIHN0eWxlQXR0ciwgc3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKIH0KIAogdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VFbmRJZk5lZWRlZCgpCkBAIC0xMDE4LDcg
KzEwMTUsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgQVNTRVJUKGJyLT5oYXNUYWdOYW1lKGJyVGFnKSk7IAogICAgICAgICAvLyBJbnNlcnQgY29u
dGVudCBiZXR3ZWVuIHRoZSB0d28gYmxvY2txdW90ZXMsIGJ1dCByZW1vdmUgdGhlIGJyIChzaW5j
ZSBpdCB3YXMganVzdCBhIHBsYWNlaG9sZGVyKS4gCiAgICAgICAgIGluc2VydGlvblBvcyA9IHBv
c2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGJyKTsKLSAgICAgICAgcmVtb3ZlTm9kZShicik7Cisg
ICAgICAgIHJlbW92ZU5vZGUoKmJyKTsKICAgICB9CiAgICAgCiAgICAgLy8gSW5zZXJ0aW5nIGNv
bnRlbnQgY291bGQgY2F1c2Ugd2hpdGVzcGFjZSB0byBjb2xsYXBzZSwgZS5nLiBpbnNlcnRpbmcg
PGRpdj5mb288L2Rpdj4gaW50byBoZWxsb14gd29ybGQuCkBAIC0xMDc4LDcgKzEwNzUsNyBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBzaW5jZSBpbnNl
cnRBc0xpc3RJdGVtcyBhbHJlYWR5IGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgogICAgIGlmICghbV9t
YXRjaFN0eWxlICYmICFlbmNsb3NpbmdMaXN0KGluc2VydGlvblBvcy5jb250YWluZXJOb2RlKCkp
KSB7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3MuY29udGFpbmVyTm9kZSgpLT5pc1RleHROb2Rl
KCkgJiYgaW5zZXJ0aW9uUG9zLm9mZnNldEluQ29udGFpbmVyTm9kZSgpICYmICFpbnNlcnRpb25Q
b3MuYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpKSB7Ci0gICAgICAgICAgICBzcGxpdFRl
eHROb2RlKGluc2VydGlvblBvcy5jb250YWluZXJUZXh0KCksIGluc2VydGlvblBvcy5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgICAgICBzcGxpdFRleHROb2RlKCppbnNlcnRpb25Q
b3MuY29udGFpbmVyVGV4dCgpLCBpbnNlcnRpb25Qb3Mub2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
OwogICAgICAgICAgICAgaW5zZXJ0aW9uUG9zID0gZmlyc3RQb3NpdGlvbkluTm9kZShpbnNlcnRp
b25Qb3MuY29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgfQogCkBAIC0xMTYyLDEwICsxMTU5LDEw
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChlbmRC
UiAmJiAocGxhaW5UZXh0RnJhZ21lbnQgfHwgc2hvdWxkUmVtb3ZlRW5kQlIoZW5kQlIuZ2V0KCks
IG9yaWdpbmFsVmlzUG9zQmVmb3JlRW5kQlIpKSkgewogICAgICAgICBSZWZQdHI8Tm9kZT4gcGFy
ZW50ID0gZW5kQlItPnBhcmVudE5vZGUoKTsKICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVt
b3ZlTm9kZShlbmRCUi5nZXQoKSk7Ci0gICAgICAgIHJlbW92ZU5vZGUoZW5kQlIpOworICAgICAg
ICByZW1vdmVOb2RlKCplbmRCUik7CiAgICAgICAgIGlmIChOb2RlKiBub2RlVG9SZW1vdmUgPSBo
aWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVuaW5nKHBhcmVudC5nZXQoKSkpIHsKICAgICAgICAgICAg
IGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGUobm9kZVRvUmVtb3ZlKTsKLSAgICAgICAgICAg
IHJlbW92ZU5vZGUobm9kZVRvUmVtb3ZlKTsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoKm5vZGVU
b1JlbW92ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xNDQzLDcgKzE0NDAsNyBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZVRleHROb2Rlc0Fyb3VuZFBvc2l0aW9u
KFBvc2l0aW9uJiBwb3NpdGlvbiwgUAogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHVwZGF0
ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwocG9zaXRpb25Pbmx5VG9CZVVwZGF0ZWQsIHByZXZpb3Vz
LmdldCgpKTsKIAotICAgICAgICByZW1vdmVOb2RlKHByZXZpb3VzLnB0cigpKTsKKyAgICAgICAg
cmVtb3ZlTm9kZShwcmV2aW91cyk7CiAgICAgfQogICAgIGlmIChpczxUZXh0Pih0ZXh0LT5uZXh0
U2libGluZygpKSkgewogICAgICAgICBSZWY8VGV4dD4gbmV4dChkb3duY2FzdDxUZXh0PigqdGV4
dC0+bmV4dFNpYmxpbmcoKSkpOwpAQCAtMTQ1OCw3ICsxNDU1LDcgQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6bWVyZ2VUZXh0Tm9kZXNBcm91bmRQb3NpdGlvbihQb3NpdGlvbiYgcG9z
aXRpb24sIFAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2Rl
UmVtb3ZhbChwb3NpdGlvbk9ubHlUb0JlVXBkYXRlZCwgbmV4dC5nZXQoKSk7CiAKLSAgICAgICAg
cmVtb3ZlTm9kZShuZXh0LnB0cigpKTsKKyAgICAgICAgcmVtb3ZlTm9kZShuZXh0KTsKICAgICB9
CiB9CiAKQEAgLTE0ODEsNyArMTQ3OCw3IEBAIE5vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjppbnNlcnRBc0xpc3RJdGVtcyhQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBwcnBMaXN0CiAgICAg
aWYgKGlzTWlkZGxlKSB7CiAgICAgICAgIGludCB0ZXh0Tm9kZU9mZnNldCA9IGluc2VydFBvcy5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKICAgICAgICAgaWYgKGlzPFRleHQ+KCppbnNlcnRQb3Mu
ZGVwcmVjYXRlZE5vZGUoKSkgJiYgdGV4dE5vZGVPZmZzZXQgPiAwKQotICAgICAgICAgICAgc3Bs
aXRUZXh0Tm9kZShkb3duY2FzdDxUZXh0PihpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSksIHRl
eHROb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4o
Kmluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpKSwgdGV4dE5vZGVPZmZzZXQpOwogICAgICAgICBz
cGxpdFRyZWVUb05vZGUoaW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCksIGxhc3ROb2RlLCB0cnVl
KTsKICAgICB9CiAKQEAgLTE1NTEsNyArMTU0OCw3IEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFjZShjb25zdCBSZXBsYWNlbWVudEZyYWdtZW50JiBm
CiAKICAgICBpZiAobm9kZUFmdGVySW5zZXJ0aW9uUG9zICYmIG5vZGVBZnRlckluc2VydGlvblBv
cy0+cGFyZW50Tm9kZSgpICYmIG5vZGVBZnRlckluc2VydGlvblBvcy0+aGFzVGFnTmFtZShiclRh
ZykKICAgICAgICAgJiYgc2hvdWxkUmVtb3ZlRW5kQlIobm9kZUFmdGVySW5zZXJ0aW9uUG9zLmdl
dCgpLCBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZUFmdGVySW5zZXJ0aW9uUG9zLmdldCgpKSkpCi0g
ICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlQWZ0ZXJJbnNlcnRpb25Qb3Mu
Z2V0KCkpOworICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoKm5vZGVBZnRlcklu
c2VydGlvblBvcyk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyUmVwbGFj
ZShtX3NlbGVjdFJlcGxhY2VtZW50ID8gc3RhcnQgOiBlbmQsIGVuZCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAKaW5kZXggMTk1
MGYwZjU4ODBlNjBhMjczOGUzNDAwOTA3YjY5ZDZiZDA5ODc4MC4uZjgzOGU1NDZjMTk4MjViYTg0
ZDZmNjE0MDIyNTNmNDMyODQ2NjRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAKQEAgLTMxLDEzICszMSwxMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpTZXROb2RlQXR0cmli
dXRlQ29tbWFuZChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKK1NldE5vZGVBdHRyaWJ1
dGVDb21tYW5kOjpTZXROb2RlQXR0cmlidXRlQ29tbWFuZChSZWY8RWxlbWVudD4mJiBlbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUpCiAgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChlbGVtZW50LT5kb2N1bWVudCgpKQotICAgICwg
bV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX2VsZW1lbnQoV1RGTW92ZShlbGVtZW50KSkKICAg
ICAsIG1fYXR0cmlidXRlKGF0dHJpYnV0ZSkKICAgICAsIG1fdmFsdWUodmFsdWUpCiB7Ci0gICAg
QVNTRVJUKG1fZWxlbWVudCk7CiB9CiAKIHZvaWQgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OmRv
QXBwbHkoKQpAQCAtNTYsNyArNTUsNyBAQCB2b2lkIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpk
b1VuYXBwbHkoKQogI2lmbmRlZiBOREVCVUcKIHZvaWQgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6
OmdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JiBub2RlcykKIHsKLSAgICBhZGROb2Rl
QW5kRGVzY2VuZGFudHMobV9lbGVtZW50LmdldCgpLCBub2Rlcyk7CisgICAgYWRkTm9kZUFuZERl
c2NlbmRhbnRzKG1fZWxlbWVudC5wdHIoKSwgbm9kZXMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaAppbmRleCBmM2Fl
NDA5YmU0NjBhNzhmNGU2MGQ4MGM0N2JmNTNhMTlmNTVjMDk1Li44ODQ0OWRlZTZiNzZhM2M1NmJl
MzM1M2EwYWQ0Y2YyNjZhNjEwZDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
ZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oCkBAIC0zMiwxMyArMzIsMTMgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBTZXROb2RlQXR0cmlidXRlQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVF
ZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXROb2RlQXR0cmlidXRlQ29t
bWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBS
ZWY8U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ+IGNyZWF0ZShSZWY8RWxlbWVudD4mJiBlbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXROb2RlQXR0cmlidXRl
Q29tbWFuZChlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kKFdURk1vdmUoZWxlbWVudCksIGF0dHJp
YnV0ZSwgdmFsdWUpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50PiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
LCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKKyAgICBTZXROb2RlQXR0cmlidXRlQ29tbWFu
ZChSZWY8RWxlbWVudD4mJiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogICAg
IHZvaWQgZG9VbmFwcGx5KCkgb3ZlcnJpZGU7CkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYpIG92ZXJyaWRlOwogI2Vu
ZGlmCiAKLSAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgIFJlZjxFbGVtZW50PiBt
X2VsZW1lbnQ7CiAgICAgUXVhbGlmaWVkTmFtZSBtX2F0dHJpYnV0ZTsKICAgICBBdG9taWNTdHJp
bmcgbV92YWx1ZTsKICAgICBBdG9taWNTdHJpbmcgbV9vbGRWYWx1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAppbmRleCAzM2U4ZDgzOWI3
NTZmNmE3N2ZiN2IwMzM5ZWRmNDkzMmY1MTAyMmFkLi5kNjY3NmUzMGE0NjdmOTNiZTNiYTZhNzA3
YjA5ZjJmYjhkOTFmODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBs
aWZ5TWFya3VwQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlm
eU1hcmt1cENvbW1hbmQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIFNpbXBsaWZ5TWFya3VwQ29tbWFu
ZDo6U2ltcGxpZnlNYXJrdXBDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgTm9kZSogZmlyc3RO
b2RlCiB2b2lkIFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgTm9kZSog
cm9vdE5vZGUgPSBtX2ZpcnN0Tm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIFZlY3RvcjxSZWZQdHI8
Tm9kZT4+IG5vZGVzVG9SZW1vdmU7CisgICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9kZXNUb1JlbW92
ZTsKICAgICAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpk
b0FwcGx5KCkKICAgICAgICAgTm9kZSogdG9wTm9kZVdpdGhTdGFydGluZ1N0eWxlID0gbnVsbHB0
cjsKICAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlICE9IHJvb3ROb2RlKSB7CiAgICAgICAgICAg
ICBpZiAoY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSAhPSByb290Tm9kZSAmJiBpc1JlbW92YWJs
ZUJsb2NrKGN1cnJlbnROb2RlKSkKLSAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmFwcGVu
ZChjdXJyZW50Tm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5hcHBlbmQoKmN1
cnJlbnROb2RlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJy
ZW50Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFjdXJyZW50Tm9kZSkKQEAg
LTg1LDggKzg1LDggQEAgdm9pZCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBwbHkoKQogICAg
ICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgaWYgKHRvcE5vZGVXaXRoU3RhcnRpbmdTdHls
ZSkgewotICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnRpbmdOb2RlOyBub2RlICE9
IHRvcE5vZGVXaXRoU3RhcnRpbmdTdHlsZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKLSAg
ICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIGZv
ciAoTm9kZSogbm9kZSA9IHN0YXJ0aW5nTm9kZTsgbm9kZSAmJiBub2RlICE9IHRvcE5vZGVXaXRo
U3RhcnRpbmdTdHlsZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgICAg
ICBub2Rlc1RvUmVtb3ZlLmFwcGVuZCgqbm9kZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEw
MSwxNyArMTAxLDE3IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICB9CiB9CiAKLWludCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OnBydW5lU3Vic2VxdWVudEFuY2Vz
dG9yc1RvUmVtb3ZlKFZlY3RvcjxSZWZQdHI8Tm9kZT4+JiBub2Rlc1RvUmVtb3ZlLCBzaXplX3Qg
c3RhcnROb2RlSW5kZXgpCitpbnQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpwcnVuZVN1YnNlcXVl
bnRBbmNlc3RvcnNUb1JlbW92ZShWZWN0b3I8UmVmPE5vZGU+PiYgbm9kZXNUb1JlbW92ZSwgc2l6
ZV90IHN0YXJ0Tm9kZUluZGV4KQogewogICAgIHNpemVfdCBwYXN0TGFzdE5vZGVUb1JlbW92ZSA9
IHN0YXJ0Tm9kZUluZGV4ICsgMTsKICAgICBmb3IgKDsgcGFzdExhc3ROb2RlVG9SZW1vdmUgPCBu
b2Rlc1RvUmVtb3ZlLnNpemUoKTsgKytwYXN0TGFzdE5vZGVUb1JlbW92ZSkgewotICAgICAgICBp
ZiAobm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZSAtIDFdLT5wYXJlbnROb2RlKCkg
IT0gbm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZV0pCisgICAgICAgIGlmIChub2Rl
c1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlIC0gMV0tPnBhcmVudE5vZGUoKSAhPSBub2Rl
c1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlXS5wdHIoKSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBpZiAobm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZV0tPmZpcnN0
Q2hpbGQoKSAhPSBub2Rlc1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlXS0+bGFzdENoaWxk
KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBOb2RlKiBoaWdoZXN0QW5jZXN0
b3JUb1JlbW92ZSA9IG5vZGVzVG9SZW1vdmVbcGFzdExhc3ROb2RlVG9SZW1vdmUgLSAxXS5nZXQo
KTsKKyAgICBOb2RlKiBoaWdoZXN0QW5jZXN0b3JUb1JlbW92ZSA9IG5vZGVzVG9SZW1vdmVbcGFz
dExhc3ROb2RlVG9SZW1vdmUgLSAxXS5wdHIoKTsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4g
cGFyZW50ID0gaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUtPnBhcmVudE5vZGUoKTsKICAgICBpZiAo
IXBhcmVudCkgLy8gUGFyZW50IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4KICAgICAgICAgcmV0
dXJuIC0xOwpAQCAtMTIwLDggKzEyMCw4IEBAIGludCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OnBy
dW5lU3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKFZlY3RvcjxSZWZQdHI8Tm9kZT4+CiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgcmVtb3ZlTm9kZShub2Rlc1RvUmVtb3ZlW3N0YXJ0Tm9kZUlu
ZGV4XSwgQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwotICAgIGluc2VydE5vZGVCZWZv
cmUoKm5vZGVzVG9SZW1vdmVbc3RhcnROb2RlSW5kZXhdLCAqaGlnaGVzdEFuY2VzdG9yVG9SZW1v
dmUsIEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKLSAgICByZW1vdmVOb2RlKGhpZ2hl
c3RBbmNlc3RvclRvUmVtb3ZlLCBBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAg
aW5zZXJ0Tm9kZUJlZm9yZShub2Rlc1RvUmVtb3ZlW3N0YXJ0Tm9kZUluZGV4XS5jb3B5UmVmKCks
ICpoaWdoZXN0QW5jZXN0b3JUb1JlbW92ZSwgQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUp
OworICAgIHJlbW92ZU5vZGUoKmhpZ2hlc3RBbmNlc3RvclRvUmVtb3ZlLCBBc3N1bWVDb250ZW50
SXNBbHdheXNFZGl0YWJsZSk7CiAKICAgICByZXR1cm4gcGFzdExhc3ROb2RlVG9SZW1vdmUgLSBz
dGFydE5vZGVJbmRleCAtIDE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlm
eU1hcmt1cENvbW1hbmQuaAppbmRleCAyZDgyNTdhNDU1ZDFkOTY0NTJlMjc4Y2ZhMzcwZGJiZGNm
NmExOGNlLi43YTA4ODJlOGM3ODc1NzA2NjI0MjdkMmEzMjA5YWZlMzI4NjdlOWYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmgKQEAgLTQwLDcg
KzQwLDcgQEAgcHJpdmF0ZToKICAgICBTaW1wbGlmeU1hcmt1cENvbW1hbmQoRG9jdW1lbnQmLCBO
b2RlKiBmaXJzdE5vZGUsIE5vZGUqIG5vZGVBZnRlckxhc3QpOwogCiAgICAgdm9pZCBkb0FwcGx5
KCkgb3ZlcnJpZGU7Ci0gICAgaW50IHBydW5lU3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKFZl
Y3RvcjxSZWZQdHI8Tm9kZT4+JiBub2Rlc1RvUmVtb3ZlLCBzaXplX3Qgc3RhcnROb2RlSW5kZXgp
OworICAgIGludCBwcnVuZVN1YnNlcXVlbnRBbmNlc3RvcnNUb1JlbW92ZShWZWN0b3I8UmVmPE5v
ZGU+PiYgbm9kZXNUb1JlbW92ZSwgc2l6ZV90IHN0YXJ0Tm9kZUluZGV4KTsKIAogICAgIFJlZlB0
cjxOb2RlPiBtX2ZpcnN0Tm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlQWZ0ZXJMYXN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKaW5kZXgg
MmQ0ZTg1NDk4Y2NkNTRhNmY0YmNlNmE4YzE4NDQzNzFjZjg1MDJjNi4uOTAyNTQ4MDYxN2Q2NzI2
ZGMxYTE3OTE0MGNhZTQ0NTFjM2ZiZDZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCkBAIC0zMiwyOSArMzIsMjcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TcGxpdEVsZW1lbnRDb21tYW5kOjpTcGxpdEVsZW1lbnRDb21tYW5kKFBh
c3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc1JlZlB0cjxOb2RlPiBhdENoaWxkKQorU3Bs
aXRFbGVtZW50Q29tbWFuZDo6U3BsaXRFbGVtZW50Q29tbWFuZChSZWY8RWxlbWVudD4mJiBlbGVt
ZW50LCBSZWY8Tm9kZT4mJiBhdENoaWxkKQogICAgIDogU2ltcGxlRWRpdENvbW1hbmQoZWxlbWVu
dC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fZWxlbWVudDIoZWxlbWVudCkKLSAgICAsIG1fYXRDaGls
ZChhdENoaWxkKQorICAgICwgbV9lbGVtZW50MihXVEZNb3ZlKGVsZW1lbnQpKQorICAgICwgbV9h
dENoaWxkKFdURk1vdmUoYXRDaGlsZCkpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudDIpOwotICAg
IEFTU0VSVChtX2F0Q2hpbGQpOwogICAgIEFTU0VSVChtX2F0Q2hpbGQtPnBhcmVudE5vZGUoKSA9
PSBtX2VsZW1lbnQyKTsKIH0KIAogdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpleGVjdXRlQXBw
bHkoKQogewotICAgIGlmIChtX2F0Q2hpbGQtPnBhcmVudE5vZGUoKSAhPSBtX2VsZW1lbnQyKQor
ICAgIGlmIChtX2F0Q2hpbGQtPnBhcmVudE5vZGUoKSAhPSBtX2VsZW1lbnQyLnB0cigpKQogICAg
ICAgICByZXR1cm47CiAgICAgCiAgICAgVmVjdG9yPFJlZjxOb2RlPj4gY2hpbGRyZW47Ci0gICAg
Zm9yIChOb2RlKiBub2RlID0gbV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgpOyBub2RlICE9IG1fYXRD
aGlsZDsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpCisgICAgZm9yIChOb2RlKiBub2RlID0g
bV9lbGVtZW50Mi0+Zmlyc3RDaGlsZCgpOyBub2RlICE9IG1fYXRDaGlsZC5wdHIoKTsgbm9kZSA9
IG5vZGUtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqbm9kZSk7CiAK
ICAgICBhdXRvKiBwYXJlbnQgPSBtX2VsZW1lbnQyLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFw
YXJlbnQgfHwgIXBhcmVudC0+aGFzRWRpdGFibGVTdHlsZSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHBhcmVudC0+aW5zZXJ0QmVmb3JlKCptX2VsZW1lbnQxLCBtX2VsZW1lbnQyLmdldCgp
KS5oYXNFeGNlcHRpb24oKSkKKyAgICBpZiAocGFyZW50LT5pbnNlcnRCZWZvcmUoKm1fZWxlbWVu
dDEsIG1fZWxlbWVudDIucHRyKCkpLmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBEZWxldGUgaWQgYXR0cmlidXRlIGZyb20gdGhlIHNlY29uZCBlbGVtZW50IGJlY2F1
c2UgdGhlIHNhbWUgaWQgY2Fubm90IGJlIHVzZWQgZm9yIG1vcmUgdGhhbiBvbmUgZWxlbWVudApA
QCAtMTA1LDggKzEwMyw4IEBAIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9SZWFwcGx5KCkK
IHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6Z2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2Rl
Kj4mIG5vZGVzKQogewogICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX2VsZW1lbnQxLmdldCgp
LCBub2Rlcyk7Ci0gICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVudDIuZ2V0KCksIG5v
ZGVzKTsKLSAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9hdENoaWxkLmdldCgpLCBub2Rlcyk7
CisgICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVudDIucHRyKCksIG5vZGVzKTsKKyAg
ICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9hdENoaWxkLnB0cigpLCBub2Rlcyk7CiB9CiAjZW5k
aWYKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50
Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmgK
aW5kZXggY2ExZDBiMmJjZTU5ZmNmZTAwZWM2NzQ4MTI0N2NjOTE1ZDMwZTIxOC4uOTgzMTY1MWIw
MDBhYTc1NGRiZmI2MTcwNDc2ZDdjY2M3NDM5MGVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmgKQEAgLTMxLDEzICszMSwxMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFNwbGl0RWxlbWVudENvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRp
dENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3BsaXRFbGVtZW50Q29tbWFuZD4g
Y3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc1JlZlB0cjxOb2RlPiBzcGxp
dFBvaW50Q2hpbGQpCisgICAgc3RhdGljIFJlZjxTcGxpdEVsZW1lbnRDb21tYW5kPiBjcmVhdGUo
UmVmPEVsZW1lbnQ+JiYgZWxlbWVudCwgUmVmPE5vZGU+JiYgc3BsaXRQb2ludENoaWxkKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3BsaXRFbGVtZW50Q29tbWFuZChlbGVt
ZW50LCBzcGxpdFBvaW50Q2hpbGQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3Bs
aXRFbGVtZW50Q29tbWFuZChXVEZNb3ZlKGVsZW1lbnQpLCBXVEZNb3ZlKHNwbGl0UG9pbnRDaGls
ZCkpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU3BsaXRFbGVtZW50Q29tbWFuZChQYXNzUmVm
UHRyPEVsZW1lbnQ+LCBQYXNzUmVmUHRyPE5vZGU+IHNwbGl0UG9pbnRDaGlsZCk7CisgICAgU3Bs
aXRFbGVtZW50Q29tbWFuZChSZWY8RWxlbWVudD4mJiwgUmVmPE5vZGU+JiYgc3BsaXRQb2ludENo
aWxkKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogICAgIHZvaWQgZG9VbmFwcGx5
KCkgb3ZlcnJpZGU7CkBAIC00OSw4ICs0OSw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFJl
ZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQxOwotICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQy
OwotICAgIFJlZlB0cjxOb2RlPiBtX2F0Q2hpbGQ7CisgICAgUmVmPEVsZW1lbnQ+IG1fZWxlbWVu
dDI7CisgICAgUmVmPE5vZGU+IG1fYXRDaGlsZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAK
aW5kZXggYjBhNGIyMWY5NGE5ZWYxZWZiODQ0M2ZjMGNmMDA2MDdkMjZjZTlmMC4uNjA0YjczZTRl
NmUxMGU1NDFlZTBkNWM2ODkyYjcyOTI1MzYxZmY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKQEAgLTMzLDE2ICszMywxNSBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNwbGl0VGV4dE5vZGVDb21tYW5kOjpTcGxpdFRleHROb2Rl
Q29tbWFuZChQYXNzUmVmUHRyPFRleHQ+IHRleHQsIGludCBvZmZzZXQpCitTcGxpdFRleHROb2Rl
Q29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQoUmVmPFRleHQ+JiYgdGV4dCwgaW50IG9mZnNl
dCkKICAgICA6IFNpbXBsZUVkaXRDb21tYW5kKHRleHQtPmRvY3VtZW50KCkpCi0gICAgLCBtX3Rl
eHQyKHRleHQpCisgICAgLCBtX3RleHQyKFdURk1vdmUodGV4dCkpCiAgICAgLCBtX29mZnNldChv
ZmZzZXQpCiB7CiAgICAgLy8gTk9URTogVmFyaW91cyBjYWxsZXJzIHJlbHkgb24gdGhlIGZhY3Qg
dGhhdCB0aGUgb3JpZ2luYWwgbm9kZSBiZWNvbWVzCiAgICAgLy8gdGhlIHNlY29uZCBub2RlIChp
LmUuIHRoZSBuZXcgbm9kZSBpcyBpbnNlcnRlZCBiZWZvcmUgdGhlIGV4aXN0aW5nIG9uZSkuCiAg
ICAgLy8gVGhhdCBpcyBub3QgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5IChpLmUuIGl0IGNvdWxk
IGJlIHJlLWNvZGVkKSwgYnV0CiAgICAgLy8gcmF0aGVyIGlzIGJhc2VkIG9uIGhvdyB0aGlzIGNv
ZGUgaGFwcGVucyB0byB3b3JrLgotICAgIEFTU0VSVChtX3RleHQyKTsKICAgICBBU1NFUlQobV90
ZXh0Mi0+bGVuZ3RoKCkgPiAwKTsKICAgICBBU1NFUlQobV9vZmZzZXQgPiAwKTsKICAgICBBU1NF
UlQobV9vZmZzZXQgPCBtX3RleHQyLT5sZW5ndGgoKSk7CkBAIC02Myw3ICs2Miw3IEBAIHZvaWQg
U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkoKQogCiAgICAgbV90ZXh0MSA9IFRleHQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCBXVEZNb3ZlKHByZWZpeFRleHQpKTsKICAgICBBU1NFUlQobV90ZXh0
MSk7Ci0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0Mi5nZXQoKSwg
MCwgbV9vZmZzZXQsIG1fdGV4dDEuZ2V0KCksIDApOworICAgIGRvY3VtZW50KCkubWFya2Vycygp
LmNvcHlNYXJrZXJzKG1fdGV4dDIucHRyKCksIDAsIG1fb2Zmc2V0LCBtX3RleHQxLmdldCgpLCAw
KTsKIAogICAgIGluc2VydFRleHQxQW5kVHJpbVRleHQyKCk7CiB9CkBAIC03OSwxMyArNzgsMTMg
QEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIAogICAgIG1fdGV4dDIt
Pmluc2VydERhdGEoMCwgcHJlZml4VGV4dCk7CiAKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5j
b3B5TWFya2VycyhtX3RleHQxLmdldCgpLCAwLCBwcmVmaXhUZXh0Lmxlbmd0aCgpLCBtX3RleHQy
LmdldCgpLCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycyhtX3RleHQx
LmdldCgpLCAwLCBwcmVmaXhUZXh0Lmxlbmd0aCgpLCBtX3RleHQyLnB0cigpLCAwKTsKICAgICBt
X3RleHQxLT5yZW1vdmUoKTsKIH0KIAogdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9SZWFw
cGx5KCkKIHsKLSAgICBpZiAoIW1fdGV4dDEgfHwgIW1fdGV4dDIpCisgICAgaWYgKCFtX3RleHQx
KQogICAgICAgICByZXR1cm47CiAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnQgPSBtX3RleHQy
LT5wYXJlbnROb2RlKCk7CkBAIC05Nyw3ICs5Niw3IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1h
bmQ6OmRvUmVhcHBseSgpCiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6Omluc2VydFRleHQx
QW5kVHJpbVRleHQyKCkKIHsKLSAgICBpZiAobV90ZXh0Mi0+cGFyZW50Tm9kZSgpLT5pbnNlcnRC
ZWZvcmUoKm1fdGV4dDEsIG1fdGV4dDIuZ2V0KCkpLmhhc0V4Y2VwdGlvbigpKQorICAgIGlmICht
X3RleHQyLT5wYXJlbnROb2RlKCktPmluc2VydEJlZm9yZSgqbV90ZXh0MSwgbV90ZXh0Mi5wdHIo
KSkuaGFzRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX3RleHQyLT5kZWxldGVE
YXRhKDAsIG1fb2Zmc2V0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0
Tm9kZUNvbW1hbmQuaAppbmRleCA1Njc0NzllMTU2NDBlODhjMmQxYWZhMzEzMTFiMzdhMWViYjAx
YzkyLi5iOTkxOWQ2NzA4NzE5MjIyOWMwNWMzODczZmY5ZjIwMTI5MTI4ZmQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oCkBAIC0zMywxMyArMzMs
MTMgQEAgY2xhc3MgVGV4dDsKIAogY2xhc3MgU3BsaXRUZXh0Tm9kZUNvbW1hbmQgOiBwdWJsaWMg
U2ltcGxlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3BsaXRUZXh0Tm9k
ZUNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIGludCBvZmZzZXQpCisgICAg
c3RhdGljIFJlZjxTcGxpdFRleHROb2RlQ29tbWFuZD4gY3JlYXRlKFJlZjxUZXh0PiYmIG5vZGUs
IGludCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTcGxpdFRl
eHROb2RlQ29tbWFuZChub2RlLCBvZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU3BsaXRUZXh0Tm9kZUNvbW1hbmQoV1RGTW92ZShub2RlKSwgb2Zmc2V0KSk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIFNwbGl0VGV4dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4sIGlu
dCBvZmZzZXQpOworICAgIFNwbGl0VGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmLCBpbnQgb2Zm
c2V0KTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogICAgIHZvaWQgZG9VbmFwcGx5
KCkgb3ZlcnJpZGU7CkBAIC01MSw3ICs1MSw3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIFJl
ZlB0cjxUZXh0PiBtX3RleHQxOwotICAgIFJlZlB0cjxUZXh0PiBtX3RleHQyOworICAgIFJlZjxU
ZXh0PiBtX3RleHQyOwogICAgIHVuc2lnbmVkIG1fb2Zmc2V0OwogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50Q29tbWFuZC5jcHAKaW5kZXggY2U4ODg3NDY5NTExM2ZiZjZkYWQxZTIyYTkyY2JmNDdh
MGE4MWI5Mi4uMDE4MWU0NGM3NzRiZjYxMDJiYWRhMjA4YTk4ZmFhZmNiZWZlMmRiMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1l
bnRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVD
b250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCkBAIC0zMywyMSArMzMsMTkgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kOjpT
cGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4gdGV4
dCwgaW50IG9mZnNldCkKK1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OlNw
bGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQoUmVmPFRleHQ+JiYgdGV4dCwgaW50
IG9mZnNldCkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHRleHQtPmRvY3VtZW50KCkpCi0g
ICAgLCBtX3RleHQodGV4dCkKKyAgICAsIG1fdGV4dChXVEZNb3ZlKHRleHQpKQogICAgICwgbV9v
ZmZzZXQob2Zmc2V0KQogewotICAgIEFTU0VSVChtX3RleHQpOwogICAgIEFTU0VSVChtX3RleHQt
Pmxlbmd0aCgpID4gMCk7CiB9CiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
Q29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgQVNTRVJUKG1fdGV4dCk7CiAgICAgQVNTRVJUKG1f
b2Zmc2V0ID4gMCk7CiAKLSAgICBzcGxpdFRleHROb2RlKG1fdGV4dC5nZXQoKSwgbV9vZmZzZXQp
OworICAgIHNwbGl0VGV4dE5vZGUobV90ZXh0LCBtX29mZnNldCk7CiAKICAgICBFbGVtZW50KiBw
YXJlbnQgPSBtX3RleHQtPnBhcmVudEVsZW1lbnQoKTsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFy
ZW50LT5wYXJlbnRFbGVtZW50KCkgfHwgIXBhcmVudC0+cGFyZW50RWxlbWVudCgpLT5oYXNFZGl0
YWJsZVN0eWxlKCkpCkBAIC02Miw3ICs2MCw3IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbnRhaW5p
bmdFbGVtZW50Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHBhcmVudCA9IGRvd25jYXN0PEVs
ZW1lbnQ+KGZpcnN0Q2hpbGQpOwogICAgIH0KIAotICAgIHNwbGl0RWxlbWVudChwYXJlbnQsIG1f
dGV4dCk7CisgICAgc3BsaXRFbGVtZW50KCpwYXJlbnQsIG1fdGV4dCk7CiB9CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVt
ZW50Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFp
bmluZ0VsZW1lbnRDb21tYW5kLmgKaW5kZXggNWU2OWUxMmYwODI5OWU5YjUxZTllZmRiOTY0N2Q1
ZGUzMDRkMjFkNC4uY2RlZjZlYzMwYjRlOTFkNmMzNTJkYTFhYTVjNGM4Mjk2YjM1ZDY3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0Vs
ZW1lbnRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmgKQEAgLTMxLDE3ICszMSwxNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQg
OiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8
VGV4dD4gbm9kZSwgaW50IG9mZnNldCkKKyAgICBzdGF0aWMgUmVmPFNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQ+IGNyZWF0ZShSZWY8VGV4dD4mJiBub2RlLCBpbnQgb2Zmc2V0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3BsaXRUZXh0Tm9kZUNvbnRh
aW5pbmdFbGVtZW50Q29tbWFuZChub2RlLCBvZmZzZXQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZChXVEZNb3ZlKG5v
ZGUpLCBvZmZzZXQpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU3BsaXRUZXh0Tm9kZUNvbnRh
aW5pbmdFbGVtZW50Q29tbWFuZChQYXNzUmVmUHRyPFRleHQ+LCBpbnQgb2Zmc2V0KTsKKyAgICBT
cGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kKFJlZjxUZXh0PiYmLCBpbnQgb2Zm
c2V0KTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPFRleHQ+
IG1fdGV4dDsKKyAgICBSZWY8VGV4dD4gbV90ZXh0OwogICAgIGludCBtX29mZnNldDsKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5k
LmNwcAppbmRleCBjZjljMjYyNGE5MzFkNjc5MmRhM2M1MDBmZGU2YTNjYTU3YzI4YjY2Li45YzRh
NDRkNzQ1NzRhMTZlMDMzMmIzOWVlMWY5ODkyNTU5OTExYjliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3BwCkBAIC00Nyw3ICs0
Nyw3IEBAIHZvaWQgVGV4dEluc2VydGlvbkJhc2VDb21tYW5kOjphcHBseVRleHRJbnNlcnRpb25D
b21tYW5kKEZyYW1lKiBmcmFtZSwgVGV4dEluc2VyCiAgICAgICAgIGNvbW1hbmQuc2V0U3RhcnRp
bmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKICAgICAgICAgY29tbWFuZC5zZXRF
bmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9uKTsKICAgICB9Ci0gICAgYXBwbHlD
b21tYW5kKCZjb21tYW5kKTsKKyAgICBhcHBseUNvbW1hbmQoY29tbWFuZCk7CiAgICAgaWYgKGNo
YW5nZVNlbGVjdGlvbikgewogICAgICAgICBjb21tYW5kLnNldEVuZGluZ1NlbGVjdGlvbihlbmRp
bmdTZWxlY3Rpb24pOwogICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKGVu
ZGluZ1NlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApp
bmRleCAxZDBhMzJkYjBhN2QzMTExNDUzOTVjNmUxNGQ3MjU0YzM5NjUzM2U0Li5lOTU5M2YzODU0
Y2YwNWM4YTBlY2JlMGQwMTk2YzU5NDZjNTkyNjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VHlwaW5nQ29tbWFuZC5jcHAKQEAgLTYzMiw3ICs2MzIsNyBAQCBib29sIFR5cGluZ0NvbW1hbmQ6
Om1ha2VFZGl0YWJsZVJvb3RFbXB0eSgpCiAgICAgfQogCiAgICAgd2hpbGUgKE5vZGUqIGNoaWxk
ID0gcm9vdC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICByZW1vdmVOb2RlKGNoaWxkKTsKKyAgICAg
ICAgcmVtb3ZlTm9kZSgqY2hpbGQpOwogCiAgICAgYWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVk
KHJvb3QpOwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9z
aXRpb25Jbk5vZGUocm9vdCksIERPV05TVFJFQU0sIGVuZGluZ1NlbGVjdGlvbigpLmlzRGlyZWN0
aW9uYWwoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIu
Y3BwCmluZGV4IGNiMDc4Y2Q5ODNmN2U2OTIwZTNiZTU1MDViZTNjODJmMjQ2ODUzMzAuLjAzMDAy
MTcwOGY5YzQxOWNiYjJhZjZjNWVjMzUwMThiZDZmOWRmN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKQEAgLTM3Myw3ICszNzMsNyBAQCB2b2lk
IENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1l
bnVBY3Rpb24gYWN0aW9uLCBjbwogCiAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgICAg
ICAgICBSZWZQdHI8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ+IGNvbW1hbmQgPSBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpkb2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KCpkb2N1bWVudCwgdGl0bGUsIGVtcHR5U3RyaW5nKCkpLCByZXBsYWNlT3B0aW9ucyk7CisgICAg
ICAgICAgICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpk
b2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpkb2N1bWVudCwgdGl0bGUsIGVtcHR5
U3RyaW5nKCkpLCByZXBsYWNlT3B0aW9ucyk7CiAgICAgICAgICAgICBhcHBseUNvbW1hbmQoY29t
bWFuZCk7CiAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkucmV2ZWFsU2VsZWN0aW9uKFNl
bGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlm
TmVlZGVkKTsKICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309015</attachid>
            <date>2017-05-03 21:56:59 -0700</date>
            <delta_ts>2017-05-04 20:50:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171645-20170503215657.patch</filename>
            <type>text/plain</type>
            <size>104924</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjkyZWQyZWU4MTNhMTlh
OWEzNzE1NDYyMmJkMTZjMTk1MGEyY2E4OS4uNWE4MWM3OWRlMTk0MjMzYWFjNjU4NDNiMzgxMjAy
Yjg0YTc1YTkwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxNy0wNS0wMyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERyb3AgcmVtYWluaW5nIHVz
ZXMgb2YgUGFzc1JlZlB0ciBmcm9tIENvbXBvc2l0ZUVkaXRDb21tYW5kCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE2NDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEcm9wIHJlbWFpbmluZyB1c2VzIG9m
IFBhc3NSZWZQdHIgZnJvbSBDb21wb3NpdGVFZGl0Q29tbWFuZC4KKworICAgICAgICAqIGVkaXRp
bmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmVu
ZE9mTmV4dFBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAgICAgKiBl
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpjbGVhbnVwVW5zdHlsZWRBcHBsZVN0eWxlU3BhbnMpOgor
ICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0QW5jZXN0b3JzV2l0aFVu
aWNvZGVCaWRpKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVF
bWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJ
ZldpdGhvdXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBs
eVN0eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlT
dHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRBdFN0YXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRBdEVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnQpOgorICAgICAgICAo
V2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxp
bmVTdHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6am9p
bkNoaWxkVGV4dE5vZGVzKToKKyAgICAgICAgKiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBs
eSk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjphcHBseUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRp
dENvbW1hbmQ6Omluc2VydE5vZGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0
Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZW5JblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVSZW1haW5pbmdT
aWJsaW5nc1RvTmV3UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21t
YW5kOjpyZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJ1bmUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VGV4dE5vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0RWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bWVyZ2VJZGVudGljYWxFbGVtZW50
cyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUZXh0Tm9k
ZUNvbnRhaW5pbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21t
YW5kOjpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUVkaXRDb21tYW5kOjpzZXROb2RlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaENvbnRl
bnRzVG9OZXdCbG9ja0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjpwdXNoQW5jaG9yRWxlbWVudERvd24pOgorICAgICAgICAoV2ViQ29yZTo6Q29t
cG9zaXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgICogZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpoYW5kbGVTcGVjaWFsQ2FzZUJSRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0
ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VTdHlsaW5nRWxlbWVudHNEaXJlY3RD
aGlsZHJlbk9mRWRpdGFibGVSb290VG9QcmV2ZW50U3R5bGVMb3NzKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVByZXZpb3VzbHlT
ZWxlY3RlZEVtcHR5VGFibGVSb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudEJsb2Nrcyk6CisgICAgICAgICogZWRpdGluZy9EZWxl
dGVTZWxlY3Rpb25Db21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUpOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRm9y
bWF0QmxvY2spOgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgp
OgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBl
ZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExp
c3RDb21tYW5kOjpmaXhPcnBoYW5lZExpc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYXBoKToKKyAgICAgICAgKiBl
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAg
ICogZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNl
cnRUZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKToKKyAgICAgICAgKiBlZGl0aW5nL01vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2RpZnlTZWxlY3Rpb25MaXN0
TGV2ZWxDb21tYW5kOjppbnNlcnRTaWJsaW5nTm9kZVJhbmdlQmVmb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6Omluc2VydFNpYmxpbmdOb2Rl
UmFuZ2VBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWxD
b21tYW5kOjphcHBlbmRTaWJsaW5nTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY3Jl
YXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGlu
Zy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6UmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbkNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRp
bmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVw
bGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb0FwcGx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb1VuYXBwbHkpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OmdldE5vZGVzSW5D
b21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmg6
CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6Y3JlYXRlKToK
KyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJj
aGFuZ2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZUluc2VydGVkQ29udGVudFJvdW5k
VHJpcHBhYmxlV2l0aEhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVPdXRPZkFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRF
bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxl
U3BhbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBw
bHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4
dE5vZGVzQXJvdW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQ6Omluc2VydEFzTGlzdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UpOgorICAgICAgICAqIGVkaXRp
bmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0Tm9k
ZUF0dHJpYnV0ZUNvbW1hbmQ6OlNldE5vZGVBdHRyaWJ1dGVDb21tYW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OlNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZCk6CisgICAg
ICAgICogZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9T
aW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZnlNYXJr
dXBDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZ5TWFya3VwQ29t
bWFuZDo6cHJ1bmVTdWJzZXF1ZW50QW5jZXN0b3JzVG9SZW1vdmUpOgorICAgICAgICAqIGVkaXRp
bmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OlNw
bGl0RWxlbWVudENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRFbGVtZW50Q29tbWFu
ZDo6ZXhlY3V0ZUFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6
OmdldE5vZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgIChXZWJDb3Jl
OjpTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9SZWFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNw
bGl0VGV4dE5vZGVDb21tYW5kOjppbnNlcnRUZXh0MUFuZFRyaW1UZXh0Mik6CisgICAgICAgICog
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRU
ZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OlNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxl
bWVudENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHRO
b2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcv
VGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbnNl
cnRpb25CYXNlQ29tbWFuZDo6YXBwbHlUZXh0SW5zZXJ0aW9uQ29tbWFuZCk6CisgICAgICAgICog
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1h
bmQ6Om1ha2VFZGl0YWJsZVJvb3RFbXB0eSk6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpj
b250ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisKIDIwMTctMDUtMDMgIEFuZHkgRXN0ZXMgIDxhZXN0
ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFRyeSB0byBmaXggdGhlIG1hY09TIFB1YmxpYyBTREsg
YnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1l
bnRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRD
b21tYW5kLmNwcAppbmRleCBlNTRkMjkzMmJkYWEzOWMzZDUzZTZmZWVlMzIxN2M3ZmZmOGQzZDVj
Li44OWNkMjk0Zjg3MzA4YjhmYzg0OTg2NWNlMDBjOWFjNDc3MzZlNGRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxlbWVudENvbW1hbmQuY3BwCkBAIC0y
MTIsNyArMjEyLDggQEAgdm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUGFy
YWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWZOZWVkZWQoY29uc3QKICAgICAgICAgaWYgKCFzdGFy
dFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSA+IDApIHsKICAgICAgICAgICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0Lm9mZnNldElu
Q29udGFpbmVyTm9kZSgpOwogICAgICAgICAgICAgVGV4dCogc3RhcnRUZXh0ID0gc3RhcnQuY29u
dGFpbmVyVGV4dCgpOwotICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZShzdGFydFRleHQsIHN0YXJ0
T2Zmc2V0KTsKKyAgICAgICAgICAgIEFTU0VSVChzdGFydFRleHQpOworICAgICAgICAgICAgc3Bs
aXRUZXh0Tm9kZSgqc3RhcnRUZXh0LCBzdGFydE9mZnNldCk7CiAgICAgICAgICAgICBzdGFydCA9
IGZpcnN0UG9zaXRpb25Jbk5vZGUoc3RhcnRUZXh0KTsKICAgICAgICAgICAgIGlmIChpc1N0YXJ0
QW5kRW5kT25TYW1lTm9kZSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChlbmQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgPj0gc3RhcnRPZmZzZXQpOwpAQCAtMjM5LDcgKzI0MCw3IEBAIHZvaWQg
QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kOjpyYW5nZUZvclBhcmFncmFwaFNwbGl0dGluZ1RleHRO
b2Rlc0lmTmVlZGVkKGNvbnN0CiAgICAgICAgIC8vIElmIGVuZCBpcyBpbiB0aGUgbWlkZGxlIG9m
IGEgdGV4dCBub2RlIGFuZCB0aGUgdGV4dCBub2RlIGlzIGVkaXRhYmxlLCBzcGxpdC4KICAgICAg
ICAgaWYgKGVuZFN0eWxlLT51c2VyTW9kaWZ5KCkgIT0gUkVBRF9PTkxZICYmICFlbmRTdHlsZS0+
Y29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpICYmIGVu
ZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSA8IGVuZC5jb250YWluZXJOb2RlKCktPm1heENoYXJh
Y3Rlck9mZnNldCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8VGV4dD4gZW5kQ29udGFpbmVyID0g
ZW5kLmNvbnRhaW5lclRleHQoKTsKLSAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoZW5kQ29udGFp
bmVyLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgICAgICAgICAgc3BsaXRUZXh0
Tm9kZSgqZW5kQ29udGFpbmVyLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAg
ICAgICAgaWYgKGlzU3RhcnRBbmRFbmRPblNhbWVOb2RlKQogICAgICAgICAgICAgICAgIHN0YXJ0
ID0gZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKGVuZENvbnRhaW5lci0+cHJldmlvdXNTaWJs
aW5nKCkpOwogICAgICAgICAgICAgaWYgKGlzRW5kQW5kRW5kT2ZMYXN0UGFyYWdyYXBoT25TYW1l
Tm9kZSkgewpAQCAtMjY4LDcgKzI2OSw3IEBAIFZpc2libGVQb3NpdGlvbiBBcHBseUJsb2NrRWxl
bWVudENvbW1hbmQ6OmVuZE9mTmV4dFBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmCiAgICAg
Ly8gXG4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgdGV4dCBub2RlIGltbWVkaWF0ZWx5IGZvbGxv
d2luZyB0aGUgY3VycmVudCBwYXJhZ3JhcGggaXMgdHJpbW1lZCBieSBtb3ZlUGFyYWdyYXBoV2l0
aENsb25lcy4KICAgICAvLyBJZiBlbmRPZk5leHRQYXJhZ3JhcGggd2FzIHBvaW50aW5nIGF0IHRo
aXMgc2FtZSB0ZXh0IG5vZGUsIGVuZE9mTmV4dFBhcmFncmFwaCB3aWxsIGJlIHNoaWZ0ZWQgYnkg
b25lIHBhcmFncmFwaC4KICAgICAvLyBBdm9pZCB0aGlzIGJ5IHNwbGl0dGluZyAiXG4iCi0gICAg
c3BsaXRUZXh0Tm9kZSh0ZXh0LCAxKTsKKyAgICBzcGxpdFRleHROb2RlKCp0ZXh0LCAxKTsKIAog
ICAgIGlmICh0ZXh0ID09IHN0YXJ0LmNvbnRhaW5lck5vZGUoKSAmJiBpczxUZXh0Pih0ZXh0LT5w
cmV2aW91c1NpYmxpbmcoKSkpIHsKICAgICAgICAgQVNTRVJUKHN0YXJ0Lm9mZnNldEluQ29udGFp
bmVyTm9kZSgpIDwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCA1YmViNmFhODBlZWQy
OTQ4NjBiMTZkYzRiMjNjZjk2ODk1YjRhMGYwLi42MDM3NDAyMDQ2YjdkZmNmYWJhN2UzMmZjMDhl
MzdlN2Q4YjQ2MmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5
bGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21t
YW5kLmNwcApAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5
UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxlKiBzdHlsZSkKICAgICB9CiAKICAg
ICAvLyBUaGVzZSBzcGFucyB3ZXJlIGFkZGVkIGJ5IHVzLiBJZiBlbXB0eSBhZnRlciBmb250IHNp
emUgY2hhbmdlcywgdGhleSBjYW4gYmUgcmVtb3ZlZC4KLSAgICBWZWN0b3I8UmVmUHRyPEhUTUxF
bGVtZW50Pj4gdW5zdHlsZWRTcGFuczsKKyAgICBWZWN0b3I8UmVmPEhUTUxFbGVtZW50Pj4gdW5z
dHlsZWRTcGFuczsKICAgICAKICAgICBOb2RlKiBsYXN0U3R5bGVkTm9kZSA9IG51bGxwdHI7CiAg
ICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnROb2RlOyBub2RlICE9IGJleW9uZEVuZDsgbm9kZSA9
IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7CkBAIC00MTcsMTcgKzQxNywxNyBAQCB2b2lk
IEFwcGx5U3R5bGVDb21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKEVkaXRpbmdT
dHlsZSogc3R5bGUpCiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRGb250U2l6ZSAhPSBk
ZXNpcmVkRm9udFNpemUpIHsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5zZXRQcm9wZXJ0eShD
U1NQcm9wZXJ0eUZvbnRTaXplLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZVZhbHVl
KGRlc2lyZWRGb250U2l6ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCksIGZhbHNlKTsKLSAg
ICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudC5nZXQoKSwgc3R5bGVBdHRyLCBpbmxp
bmVTdHlsZS0+YXNUZXh0KCkpOworICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgqZWxlbWVu
dCwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChpbmxpbmVTdHlsZS0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZW1vdmVOb2RlQXR0
cmlidXRlKCplbGVtZW50LCBzdHlsZUF0dHIpOwogICAgICAgICAgICAgaWYgKGlzU3BhbldpdGhv
dXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3BhbigqZWxlbWVudCkpCi0gICAgICAgICAgICAg
ICAgdW5zdHlsZWRTcGFucy5hcHBlbmQoV1RGTW92ZShlbGVtZW50KSk7CisgICAgICAgICAgICAg
ICAgdW5zdHlsZWRTcGFucy5hcHBlbmQoZWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgfQogICAgIH0KIAogICAgIGZvciAoYXV0byYgdW5zdHlsZWRTcGFuIDogdW5zdHlsZWRTcGFu
cykKLSAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih1bnN0eWxlZFNwYW4uZ2V0
KCkpOworICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHVuc3R5bGVkU3Bhbik7
CiB9CiAKIHN0YXRpYyBDb250YWluZXJOb2RlKiBkdW1teVNwYW5BbmNlc3RvckZvck5vZGUoY29u
c3QgTm9kZSogbm9kZSkKQEAgLTQ1NSw3ICs0NTUsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5k
OjpjbGVhbnVwVW5zdHlsZWRBcHBsZVN0eWxlU3BhbnMoQ29udGFpbmVyTm9kZSogZHVtbXlTcGFu
QQogICAgIH0KIAogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IHRvUmVtb3ZlKQotICAgICAgICBy
ZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOworICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKCplbGVtZW50KTsKIH0KIAogSFRNTEVsZW1lbnQqIEFwcGx5U3R5
bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9yc1dpdGhVbmljb2RlQmlkaShOb2RlKiBub2RlLCBib29s
IGJlZm9yZSwgV3JpdGluZ0RpcmVjdGlvbiBhbGxvd2VkRGlyZWN0aW9uKQpAQCAtNTAxLDcgKzUw
MSw3IEBAIEhUTUxFbGVtZW50KiBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRBbmNlc3RvcnNXaXRo
VW5pY29kZUJpZGkoTm9kZSogbm9kZSwgYm9vbCBiCiAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7
CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBwYXJlbnQgPSBkb3duY2FzdDxFbGVtZW50PihjdXJy
ZW50Tm9kZS0+cGFyZW50Tm9kZSgpKTsKICAgICAgICAgaWYgKGJlZm9yZSA/IGN1cnJlbnROb2Rl
LT5wcmV2aW91c1NpYmxpbmcoKSA6IGN1cnJlbnROb2RlLT5uZXh0U2libGluZygpKQotICAgICAg
ICAgICAgc3BsaXRFbGVtZW50KHBhcmVudCwgYmVmb3JlID8gY3VycmVudE5vZGUgOiBjdXJyZW50
Tm9kZS0+bmV4dFNpYmxpbmcoKSk7CisgICAgICAgICAgICBzcGxpdEVsZW1lbnQoKnBhcmVudCwg
YmVmb3JlID8gKmN1cnJlbnROb2RlIDogKmN1cnJlbnROb2RlLT5uZXh0U2libGluZygpKTsKICAg
ICAgICAgaWYgKHBhcmVudCA9PSBoaWdoZXN0QW5jZXN0b3JXaXRoVW5pY29kZUJpZGkpCiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY3VycmVudE5vZGUgPSBwYXJlbnQ7CkBAIC01MzgsOSAr
NTM4LDkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xv
c2luZ0Jsb2NrKE5vZGUqIG5vZGUsIE5vZGUqIHVuc3AKICAgICAgICAgICAgIFJlZlB0cjxNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzPiBpbmxpbmVTdHlsZSA9IGNvcHlTdHlsZU9yQ3JlYXRlRW1wdHko
ZWxlbWVudC5pbmxpbmVTdHlsZSgpKTsKICAgICAgICAgICAgIGlubGluZVN0eWxlLT5zZXRQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpLCBDU1NWYWx1ZU5vcm1hbCk7CiAgICAgICAgICAg
ICBpbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlEaXJlY3Rpb24pOwotICAg
ICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgmZWxlbWVudCwgc3R5bGVBdHRyLCBpbmxpbmVTdHls
ZS0+YXNUZXh0KCkpOworICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHls
ZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgICAgICAgICBpZiAoaXNTcGFuV2l0
aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKGVsZW1lbnQpKQotICAgICAgICAgICAg
ICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOworICAgICAgICAgICAg
ICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CiAgICAgICAgIH0KICAg
ICB9CiB9CkBAIC03OTIsNyArNzkyLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJ
bmxpbmVTdHlsZVRvTm9kZVJhbmdlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIE5vZGUmIHMKICAgICAg
ICAgICAgIFJlZlB0cjxNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBpbmxpbmVTdHlsZSA9IGNvcHlT
dHlsZU9yQ3JlYXRlRW1wdHkoZWxlbWVudC5pbmxpbmVTdHlsZSgpKTsKICAgICAgICAgICAgIGlm
IChNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBvdGhlclN0eWxlID0gc3R5bGUuc3R5bGUoKSkKICAg
ICAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+bWVyZ2VBbmRPdmVycmlkZU9uQ29uZmxpY3QoKm90
aGVyU3R5bGUpOwotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgmZWxlbWVudCwgc3R5bGVB
dHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOworICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0
ZShlbGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgICAgICAg
ICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTgzOCw3ICs4MzgsNyBAQCB2b2lkIEFw
cGx5U3R5bGVDb21tYW5kOjphcHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxl
JiBzdHlsZSwgTm9kZSYgcwogCiAgICAgZm9yIChhdXRvJiBydW4gOiBydW5zKSB7CiAgICAgICAg
IGlmIChydW4uZHVtbXlFbGVtZW50KQotICAgICAgICAgICAgcmVtb3ZlTm9kZShydW4uZHVtbXlF
bGVtZW50KTsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoKnJ1bi5kdW1teUVsZW1lbnQpOwogICAg
ICAgICBpZiAocnVuLnN0YXJ0QW5kRW5kQXJlU3RpbGxJbkRvY3VtZW50KCkpCiAgICAgICAgICAg
ICBhcHBseUlubGluZVN0eWxlQ2hhbmdlKHJ1bi5zdGFydC5yZWxlYXNlTm9uTnVsbCgpLCBydW4u
ZW5kLnJlbGVhc2VOb25OdWxsKCksIHJ1bi5jaGFuZ2UsIEFkZFN0eWxlZEVsZW1lbnQpOwogICAg
IH0KQEAgLTkwNCw3ICs5MDQsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbmxp
bmVTdHlsZUZyb21FbGVtZW50KEVkaXRpbmdTdHlsZSYgc3R5bGUsIEhUTUxFbAogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChleHRyYWN0ZWRTdHlsZSkKICAgICAgICAgICAg
IGV4dHJhY3RlZFN0eWxlLT5tZXJnZUlubGluZVN0eWxlT2ZFbGVtZW50KCZlbGVtZW50LCBFZGl0
aW5nU3R5bGU6Ok92ZXJyaWRlVmFsdWVzKTsKLSAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdD
aGlsZHJlbigmZWxlbWVudCk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4o
ZWxlbWVudCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTI2LDkgKzkyNiw5
IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQo
RWRpdGluZ1N0eWxlJiBzdHlsZSwgSFRNTEVsCiB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZXBs
YWNlV2l0aFNwYW5PclJlbW92ZUlmV2l0aG91dEF0dHJpYnV0ZXMoSFRNTEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgaWYgKGhhc05vQXR0cmlidXRlT3JPbmx5U3R5bGVBdHRyaWJ1dGUoZWxlbWVu
dCwgU3R5bGVBdHRyaWJ1dGVTaG91bGRCZUVtcHR5KSkKLSAgICAgICAgcmVtb3ZlTm9kZVByZXNl
cnZpbmdDaGlsZHJlbigmZWxlbWVudCk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hp
bGRyZW4oZWxlbWVudCk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEhUTUxFbGVtZW50KiBuZXdTcGFu
RWxlbWVudCA9IHJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRy
aWJ1dGVzKCZlbGVtZW50KTsKKyAgICAgICAgSFRNTEVsZW1lbnQqIG5ld1NwYW5FbGVtZW50ID0g
cmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoZWxl
bWVudCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV3U3BhbkVsZW1lbnQsIG5ld1NwYW5FbGVt
ZW50ICYmIG5ld1NwYW5FbGVtZW50LT5pc0Nvbm5lY3RlZCgpKTsKICAgICB9CiB9CkBAIC05NTcs
NyArOTU3LDcgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW1wbGljaXRseVN0eWxl
ZEVsZW1lbnQoRWRpdGluZ1N0eWxlJiBzdHlsZSwgSFRNTEUKICAgICAgICAgcmVtb3ZlTm9kZUF0
dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGUpOwogCiAgICAgaWYgKGlzRW1wdHlGb250VGFnKCZl
bGVtZW50KSB8fCBpc1NwYW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxl
bWVudCkpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oJmVsZW1lbnQpOwor
ICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwogCiAgICAgcmV0
dXJuIHRydWU7CiB9CkBAIC05NzQsMTAgKzk3NCwxMCBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5k
OjpyZW1vdmVDU1NTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWxlbWVudCYgZWxlbWVu
dAogICAgIGlmIChuZXdJbmxpbmVTdHlsZS0+aXNFbXB0eSgpKQogICAgICAgICByZW1vdmVOb2Rl
QXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0cik7CiAgICAgZWxzZQotICAgICAgICBzZXROb2Rl
QXR0cmlidXRlKCZlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5hc1RleHQoKSk7
CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyLCBuZXdJbmxpbmVT
dHlsZS0+YXNUZXh0KCkpOwogCiAgICAgaWYgKGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0
eWxlZFN0eWxlU3BhbihlbGVtZW50KSkKLSAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbigmZWxlbWVudCk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxl
bWVudCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwMTgsNyArMTAxOCw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKE5vZGUmIG5vZGUs
IEVkaXRpbmdTdHlsZSogc3R5CiAgICAgLy8gU2luY2UgYWRkSW5saW5lU3R5bGVJZk5lZWRlZCBj
YW4ndCBhZGQgc3R5bGVzIHRvIGJsb2NrLWZsb3cgcmVuZGVyIG9iamVjdHMsIGFkZCBzdHlsZSBh
dHRyaWJ1dGUgaW5zdGVhZC4KICAgICAvLyBGSVhNRTogYXBwbHlJbmxpbmVTdHlsZVRvUmFuZ2Ug
c2hvdWxkIGJlIHVzZWQgaGVyZSBpbnN0ZWFkLgogICAgIGlmICgobm9kZS5yZW5kZXJlcigpLT5p
c1JlbmRlckJsb2NrRmxvdygpIHx8IG5vZGUuaGFzQ2hpbGROb2RlcygpKSAmJiBpczxIVE1MRWxl
bWVudD4obm9kZSkpIHsKLSAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgmZG93bmNhc3Q8SFRNTEVs
ZW1lbnQ+KG5vZGUpLCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQo
KSk7CisgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUp
LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTExOTgsNyArMTE5OCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OnNwbGl0VGV4dEF0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3Np
dGlvbiYKICAgICAgICAgbmV3RW5kID0gZW5kOwogCiAgICAgUmVmUHRyPFRleHQ+IHRleHQgPSBz
dGFydC5jb250YWluZXJUZXh0KCk7Ci0gICAgc3BsaXRUZXh0Tm9kZSh0ZXh0LCBzdGFydC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgc3BsaXRUZXh0Tm9kZSgqdGV4dCwgc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgIHVwZGF0ZVN0YXJ0RW5kKGZpcnN0UG9zaXRpb25J
bk5vZGUodGV4dC5nZXQoKSksIG5ld0VuZCk7CiB9CiAKQEAgLTEyMDgsNyArMTIwOCw3IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFy
dCwgY29uc3QgUG9zaXRpb24mIGVuCiAKICAgICBib29sIHNob3VsZFVwZGF0ZVN0YXJ0ID0gc3Rh
cnQuYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgJiYg
c3RhcnQuY29udGFpbmVyTm9kZSgpID09IGVuZC5jb250YWluZXJOb2RlKCk7CiAgICAgVGV4dCYg
dGV4dCA9IGRvd25jYXN0PFRleHQ+KCplbmQuZGVwcmVjYXRlZE5vZGUoKSk7Ci0gICAgc3BsaXRU
ZXh0Tm9kZSgmdGV4dCwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICBzcGxpdFRl
eHROb2RlKHRleHQsIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAKICAgICBOb2RlKiBw
cmV2Tm9kZSA9IHRleHQucHJldmlvdXNTaWJsaW5nKCk7CiAgICAgaWYgKCFpczxUZXh0PihwcmV2
Tm9kZSkpCkBAIC0xMjI4LDcgKzEyMjgsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxp
dFRleHRFbGVtZW50QXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvcwogICAg
IGVsc2UKICAgICAgICAgbmV3RW5kID0gZW5kOwogCi0gICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5p
bmdFbGVtZW50KHN0YXJ0LmNvbnRhaW5lclRleHQoKSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkpOworICAgIHNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudCgqc3RhcnQuY29udGFp
bmVyVGV4dCgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgdXBkYXRlU3Rh
cnRFbmQocG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0LmNvbnRhaW5lck5vZGUoKSksIG5ld0VuZCk7
CiB9CiAKQEAgLTEyMzcsNyArMTIzNyw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0
VGV4dEVsZW1lbnRBdEVuZChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0CiAgICAg
QVNTRVJUKGlzPFRleHQ+KGVuZC5jb250YWluZXJOb2RlKCkpKTsKIAogICAgIGJvb2wgc2hvdWxk
VXBkYXRlU3RhcnQgPSBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5vZGUo
KTsKLSAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoZW5kLmNvbnRhaW5lclRleHQo
KSwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICBzcGxpdFRleHROb2RlQ29udGFp
bmluZ0VsZW1lbnQoKmVuZC5jb250YWluZXJUZXh0KCksIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5v
ZGUoKSk7CiAKICAgICBOb2RlKiBwYXJlbnRFbGVtZW50ID0gZW5kLmNvbnRhaW5lck5vZGUoKS0+
cGFyZW50Tm9kZSgpOwogICAgIGlmICghcGFyZW50RWxlbWVudCB8fCAhcGFyZW50RWxlbWVudC0+
cHJldmlvdXNTaWJsaW5nKCkpCkBAIC0xMzQzLDcgKzEzNDMsNyBAQCB2b2lkIEFwcGx5U3R5bGVD
b21tYW5kOjpzdXJyb3VuZE5vZGVSYW5nZVdpdGhFbGVtZW50KE5vZGUmIHN0YXJ0Tm9kZSwgTm9k
ZSYgZW5kTgogICAgIHdoaWxlIChub2RlKSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0ID0g
bm9kZS0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgaWYgKGlzRWRpdGFibGVOb2RlKCpub2RlKSkg
ewotICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlKTsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUo
Km5vZGUpOwogICAgICAgICAgICAgYXBwZW5kTm9kZSgqbm9kZSwgZWxlbWVudC5jb3B5UmVmKCkp
OwogICAgICAgICB9CiAgICAgICAgIGlmIChub2RlID09ICZlbmROb2RlKQpAQCAtMTM4Myw3ICsx
MzgzLDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZShjb25zdCBTdHls
ZUNoYW5nZSYgc3R5bGVDaGFuZ2UsIEhUTUxFbGVtZW4KICAgICAgICAgICAgIGNzc1RleHQuYXBw
ZW5kKCcgJyk7CiAgICAgICAgIGNzc1RleHQuYXBwZW5kKGRlY2wtPmFzVGV4dCgpKTsKICAgICB9
Ci0gICAgc2V0Tm9kZUF0dHJpYnV0ZSgmYmxvY2ssIHN0eWxlQXR0ciwgY3NzVGV4dC50b1N0cmlu
ZygpKTsKKyAgICBzZXROb2RlQXR0cmlidXRlKGJsb2NrLCBzdHlsZUF0dHIsIGNzc1RleHQudG9T
dHJpbmcoKSk7CiB9CiAKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxlSWZO
ZWVkZWQoRWRpdGluZ1N0eWxlKiBzdHlsZSwgTm9kZSYgc3RhcnQsIE5vZGUmIGVuZCwgRUFkZFN0
eWxlZEVsZW1lbnQgYWRkU3R5bGVkRWxlbWVudCkKQEAgLTEzOTYsNyArMTM5Niw3IEBAIHZvaWQg
QXBwbHlTdHlsZUNvbW1hbmQ6OmFkZElubGluZVN0eWxlSWZOZWVkZWQoRWRpdGluZ1N0eWxlKiBz
dHlsZSwgTm9kZSYgc3RhcnQsCiAgICAgU3R5bGVDaGFuZ2Ugc3R5bGVDaGFuZ2Uoc3R5bGUsIHBv
c2l0aW9uVG9Db21wdXRlSW5saW5lU3R5bGVDaGFuZ2Uoc3RhcnQsIGR1bW15RWxlbWVudCkpOwog
CiAgICAgaWYgKGR1bW15RWxlbWVudCkKLSAgICAgICAgcmVtb3ZlTm9kZShkdW1teUVsZW1lbnQp
OworICAgICAgICByZW1vdmVOb2RlKCpkdW1teUVsZW1lbnQpOwogCiAgICAgYXBwbHlJbmxpbmVT
dHlsZUNoYW5nZShzdGFydCwgZW5kLCBzdHlsZUNoYW5nZSwgYWRkU3R5bGVkRWxlbWVudCk7CiB9
CkBAIC0xNDQyLDExICsxNDQyLDExIEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5s
aW5lU3R5bGVDaGFuZ2UoTm9kZSYgcGFzc2VkU3RhcnQsIE5vZGUmIHBhc3NlZEVuCiAgICAgaWYg
KHN0eWxlQ2hhbmdlLmFwcGx5Rm9udENvbG9yKCkgfHwgc3R5bGVDaGFuZ2UuYXBwbHlGb250RmFj
ZSgpIHx8IHN0eWxlQ2hhbmdlLmFwcGx5Rm9udFNpemUoKSkgewogICAgICAgICBpZiAoZm9udENv
bnRhaW5lcikgewogICAgICAgICAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Rm9udENvbG9yKCkp
Ci0gICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShmb250Q29udGFpbmVyLCBjb2xvckF0
dHIsIHN0eWxlQ2hhbmdlLmZvbnRDb2xvcigpKTsKKyAgICAgICAgICAgICAgICBzZXROb2RlQXR0
cmlidXRlKCpmb250Q29udGFpbmVyLCBjb2xvckF0dHIsIHN0eWxlQ2hhbmdlLmZvbnRDb2xvcigp
KTsKICAgICAgICAgICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUZvbnRGYWNlKCkpCi0gICAgICAg
ICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShmb250Q29udGFpbmVyLCBmYWNlQXR0ciwgc3R5bGVD
aGFuZ2UuZm9udEZhY2UoKSk7CisgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgqZm9u
dENvbnRhaW5lciwgZmFjZUF0dHIsIHN0eWxlQ2hhbmdlLmZvbnRGYWNlKCkpOwogICAgICAgICAg
ICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Rm9udFNpemUoKSkKLSAgICAgICAgICAgICAgICBzZXRO
b2RlQXR0cmlidXRlKGZvbnRDb250YWluZXIsIHNpemVBdHRyLCBzdHlsZUNoYW5nZS5mb250U2l6
ZSgpKTsKKyAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKCpmb250Q29udGFpbmVyLCBz
aXplQXR0ciwgc3R5bGVDaGFuZ2UuZm9udFNpemUoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBhdXRvIGZvbnRFbGVtZW50ID0gY3JlYXRlRm9udEVsZW1lbnQoZG9jdW1lbnQoKSk7
CiAgICAgICAgICAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlGb250Q29sb3IoKSkKQEAgLTE0NjQs
OSArMTQ2NCw5IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVDaGFu
Z2UoTm9kZSYgcGFzc2VkU3RhcnQsIE5vZGUmIHBhc3NlZEVuCiAgICAgICAgICAgICBpZiAoYXV0
byBleGlzdGluZ1N0eWxlID0gc3R5bGVDb250YWluZXItPmlubGluZVN0eWxlKCkpIHsKICAgICAg
ICAgICAgICAgICBhdXRvIGlubGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoZXhpc3Rp
bmdTdHlsZSk7CiAgICAgICAgICAgICAgICAgaW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0eWxl
KHN0eWxlVG9NZXJnZSk7Ci0gICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShzdHlsZUNv
bnRhaW5lciwgc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+c3R5bGUoKS0+YXNUZXh0KCkpOworICAg
ICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoKnN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIs
IGlubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIs
IHN0eWxlVG9NZXJnZS0+YXNUZXh0KCkpOworICAgICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1
dGUoKnN0eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIsIHN0eWxlVG9NZXJnZS0+YXNUZXh0KCkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXV0byBzdHlsZUVsZW1lbnQgPSBjcmVhdGVT
dHlsZVNwYW5FbGVtZW50KGRvY3VtZW50KCkpOwogICAgICAgICAgICAgc3R5bGVFbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCBzdHlsZVRvTWVyZ2UtPmFzVGV4dCgpKTsKQEAgLTE1Mjgs
NyArMTUyOCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmpvaW5DaGlsZFRleHROb2RlcyhO
b2RlKiBub2RlLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvCiAgICAgICAgICAgICBuZXdFbmQg
PSBQb3NpdGlvbihjaGlsZFRleHQucHRyKCksIGNoaWxkVGV4dC0+bGVuZ3RoKCkgKyBlbmQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgICAgICBTdHJpbmcgdGV4dFRvTW92ZSA9IG5leHRU
ZXh0LmRhdGEoKTsKICAgICAgICAgaW5zZXJ0VGV4dEludG9Ob2RlKGNoaWxkVGV4dCwgY2hpbGRU
ZXh0LT5sZW5ndGgoKSwgdGV4dFRvTW92ZSk7Ci0gICAgICAgIHJlbW92ZU5vZGUobmV4dCk7Cisg
ICAgICAgIHJlbW92ZU5vZGUoKm5leHQpOwogICAgICAgICAvLyBkb24ndCBtb3ZlIGNoaWxkIG5v
ZGUgcG9pbnRlci4gaXQgbWF5IHdhbnQgdG8gbWVyZ2Ugd2l0aCBtb3JlIHRleHQgbm9kZXMuCiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90
ZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21t
YW5kLmNwcAppbmRleCA5ODJjYzk5NTJmMDk3ZTQ3N2RkNWI0YTMxOWEyNjhjNTQzYjI3ODFlLi41
ODIxYjA4MmQ5NjhmYmM4NDVhOTUyYTM3YWQ0YmI3Yzg5OTIyZmU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKQEAgLTExMiw3ICsx
MTIsNyBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAg
ICAgc3RhcnROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqc3RhcnROb2RlKTsKICAgICAgICAg
ICAgIEFTU0VSVChzdGFydE5vZGUpOwogICAgICAgICB9IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpID4gMCkKLSAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoJnRleHROb2Rl
LCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CisgICAgICAgICAgICBzcGxpdFRleHRO
b2RlKHRleHROb2RlLCBwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgfSBlbHNl
IGlmIChwb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSA+IDApIHsKICAgICAgICAgTm9kZSog
Y2hpbGRBdE9mZnNldCA9IHN0YXJ0Tm9kZS0+dHJhdmVyc2VUb0NoaWxkQXQocG9zLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpOwogICAgICAgICBzdGFydE5vZGUgPSBjaGlsZEF0T2Zmc2V0ID8g
Y2hpbGRBdE9mZnNldCA6IE5vZGVUcmF2ZXJzYWw6Om5leHQoKnN0YXJ0Tm9kZSk7CkBAIC0xNDks
MTQgKzE0OSwxNCBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHkoKQogICAg
ICAgICAgICAgd2hpbGUgKGxpc3RDaGlsZE5vZGUgJiYgIWxpc3RDaGlsZE5vZGUtPmhhc1RhZ05h
bWUobGlUYWcpKQogICAgICAgICAgICAgICAgIGxpc3RDaGlsZE5vZGUgPSBsaXN0Q2hpbGROb2Rl
LT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgaWYgKGxpc3RDaGlsZE5vZGUgJiYgaXM8UmVu
ZGVyTGlzdEl0ZW0+KGxpc3RDaGlsZE5vZGUtPnJlbmRlcmVyKCkpKQotICAgICAgICAgICAgICAg
IHNldE5vZGVBdHRyaWJ1dGUoY2xvbmVkQ2hpbGQucHRyKCksIHN0YXJ0QXR0ciwgQXRvbWljU3Ry
aW5nOjpudW1iZXIoZG93bmNhc3Q8UmVuZGVyTGlzdEl0ZW0+KCpsaXN0Q2hpbGROb2RlLT5yZW5k
ZXJlcigpKS52YWx1ZSgpKSk7CisgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShjbG9u
ZWRDaGlsZCwgc3RhcnRBdHRyLCBBdG9taWNTdHJpbmc6Om51bWJlcihkb3duY2FzdDxSZW5kZXJM
aXN0SXRlbT4oKmxpc3RDaGlsZE5vZGUtPnJlbmRlcmVyKCkpLnZhbHVlKCkpKTsKICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgIGFwcGVuZE5vZGUoY2xvbmVkQ2hpbGQuY29weVJlZigp
LCBjbG9uZWRBbmNlc3Rvci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgY2xvbmVkQW5jZXN0
b3IgPSBXVEZNb3ZlKGNsb25lZENoaWxkKTsKICAgICB9CiAKLSAgICBtb3ZlUmVtYWluaW5nU2li
bGluZ3NUb05ld1BhcmVudChzdGFydE5vZGUsIDAsIGNsb25lZEFuY2VzdG9yKTsKKyAgICBtb3Zl
UmVtYWluaW5nU2libGluZ3NUb05ld1BhcmVudChzdGFydE5vZGUsIDAsICpjbG9uZWRBbmNlc3Rv
cik7CiAKICAgICBpZiAoIWFuY2VzdG9ycy5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gU3BsaXQg
dGhlIHRyZWUgdXAgdGhlIGFuY2VzdG9yIGNoYWluIHVudGlsIHRoZSB0b3BCbG9ja3F1b3RlCkBA
IC0xNjgsMTIgKzE2OCwxMiBAQCB2b2lkIEJyZWFrQmxvY2txdW90ZUNvbW1hbmQ6OmRvQXBwbHko
KQogICAgICAgICBmb3IgKGFuY2VzdG9yID0gYW5jZXN0b3JzLmZpcnN0KCksIGNsb25lZFBhcmVu
dCA9IGNsb25lZEFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCk7CiAgICAgICAgICAgICAgYW5jZXN0
b3IgJiYgYW5jZXN0b3IgIT0gdG9wQmxvY2txdW90ZTsKICAgICAgICAgICAgICBhbmNlc3RvciA9
IGFuY2VzdG9yLT5wYXJlbnRFbGVtZW50KCksIGNsb25lZFBhcmVudCA9IGNsb25lZFBhcmVudC0+
cGFyZW50RWxlbWVudCgpKQotICAgICAgICAgICAgbW92ZVJlbWFpbmluZ1NpYmxpbmdzVG9OZXdQ
YXJlbnQoYW5jZXN0b3ItPm5leHRTaWJsaW5nKCksIDAsIGNsb25lZFBhcmVudCk7CisgICAgICAg
ICAgICBtb3ZlUmVtYWluaW5nU2libGluZ3NUb05ld1BhcmVudChhbmNlc3Rvci0+bmV4dFNpYmxp
bmcoKSwgMCwgKmNsb25lZFBhcmVudCk7CiAKICAgICAgICAgLy8gSWYgdGhlIHN0YXJ0Tm9kZSdz
IG9yaWdpbmFsIHBhcmVudCBpcyBub3cgZW1wdHksIHJlbW92ZSBpdAogICAgICAgICBOb2RlKiBv
cmlnaW5hbFBhcmVudCA9IGFuY2VzdG9ycy5maXJzdCgpLmdldCgpOwogICAgICAgICBpZiAoIW9y
aWdpbmFsUGFyZW50LT5oYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgICAgICByZW1vdmVOb2RlKG9y
aWdpbmFsUGFyZW50KTsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoKm9yaWdpbmFsUGFyZW50KTsK
ICAgICB9CiAgICAgCiAgICAgLy8gTWFrZSBzdXJlIHRoZSBjbG9uZWQgYmxvY2sgcXVvdGUgcmVu
ZGVycy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAKaW5kZXggOGFhYmIzMmNmNDU5NzU5YmUwYjE0M2M2MDk5NmIyMjE4NTg1YTcxZi4uOTUwMGM2
NTEzZjA5ZTA5NmM3MTY4YmU3NDNkMDczNmE3NjVmOTlhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTMwMiw5ICszMDIsOSBAQCB2
b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OmdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9k
ZSo+JiBub2RlcykKIH0KICNlbmRpZgogCi12b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPENv
bXBvc2l0ZUVkaXRDb21tYW5kPiBjb21tYW5kKQordm9pZCBhcHBseUNvbW1hbmQoQ29tcG9zaXRl
RWRpdENvbW1hbmQmIGNvbW1hbmQpCiB7Ci0gICAgY29tbWFuZC0+YXBwbHkoKTsKKyAgICBjb21t
YW5kLmFwcGx5KCk7CiB9CiAKIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpDb21wb3NpdGVFZGl0Q29t
bWFuZChEb2N1bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKQEAgLTU2
NSw3ICs1NjUsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjppbnNlcnROb2RlQXQoUmVm
PE5vZGU+JiYgaW5zZXJ0Q2hpbGQsIGNvbnN0IFBvc2l0aW9uJgogICAgIH0gZWxzZSBpZiAoY2Fy
ZXRNaW5PZmZzZXQoKnJlZkNoaWxkKSA+PSBvZmZzZXQpCiAgICAgICAgIGluc2VydE5vZGVCZWZv
cmUoV1RGTW92ZShpbnNlcnRDaGlsZCksICpyZWZDaGlsZCk7CiAgICAgZWxzZSBpZiAoaXM8VGV4
dD4oKnJlZkNoaWxkKSAmJiBjYXJldE1heE9mZnNldCgqcmVmQ2hpbGQpID4gb2Zmc2V0KSB7Ci0g
ICAgICAgIHNwbGl0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4ocmVmQ2hpbGQpLCBvZmZzZXQpOwor
ICAgICAgICBzcGxpdFRleHROb2RlKGRvd25jYXN0PFRleHQ+KCpyZWZDaGlsZCksIG9mZnNldCk7
CiAKICAgICAgICAgLy8gTXV0YXRpb24gZXZlbnRzIChidWcgMjI2MzQpIGZyb20gdGhlIHRleHQg
bm9kZSBpbnNlcnRpb24gbWF5IGhhdmUgcmVtb3ZlZCB0aGUgcmVmQ2hpbGQKICAgICAgICAgaWYg
KCFyZWZDaGlsZC0+aXNDb25uZWN0ZWQoKSkKQEAgLTU4Myw0NSArNTgzLDQ1IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OmFwcGVuZE5vZGUoUmVmPE5vZGU+JiYgbm9kZSwgUmVmPENvbnRh
aW5lck5vZGU+JiYgcGFyCiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZUNoaWxk
cmVuSW5SYW5nZShOb2RlJiBub2RlLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykKIHsKLSAg
ICBWZWN0b3I8UmVmUHRyPE5vZGU+PiBjaGlsZHJlbjsKKyAgICBWZWN0b3I8UmVmPE5vZGU+PiBj
aGlsZHJlbjsKICAgICBOb2RlKiBjaGlsZCA9IG5vZGUudHJhdmVyc2VUb0NoaWxkQXQoZnJvbSk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gZnJvbTsgY2hpbGQgJiYgaSA8IHRvOyBpKyssIGNoaWxk
ID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkcmVuLmFwcGVuZChjaGlsZCk7
CisgICAgICAgIGNoaWxkcmVuLmFwcGVuZCgqY2hpbGQpOwogCiAgICAgZm9yIChhdXRvJiBjaGls
ZCA6IGNoaWxkcmVuKQotICAgICAgICByZW1vdmVOb2RlKFdURk1vdmUoY2hpbGQpKTsKKyAgICAg
ICAgcmVtb3ZlTm9kZShjaGlsZCk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKK3ZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUoTm9kZSYgbm9kZSwgU2hvdWxkQXNzdW1lQ29u
dGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUp
CiB7Ci0gICAgaWYgKCFub2RlIHx8ICFub2RlLT5ub25TaGFkb3dCb3VuZGFyeVBhcmVudE5vZGUo
KSkKKyAgICBpZiAoIW5vZGUubm9uU2hhZG93Qm91bmRhcnlQYXJlbnROb2RlKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVOb2RlQ29tbWFuZDo6
Y3JlYXRlKCpub2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgZWRpdGlu
Z0FjdGlvbigpKSk7CisgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoUmVtb3ZlTm9kZUNvbW1h
bmQ6OmNyZWF0ZShub2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgZWRp
dGluZ0FjdGlvbigpKSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVD
b250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW4oTm9kZSYgbm9kZSwgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxk
QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpCiB7CiAgICAgYXBwbHlDb21tYW5kVG9Db21w
b3NpdGUoUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OmNyZWF0ZShub2RlLCBz
aG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgZWRpdGluZ0FjdGlvbigpKSk7CiB9
CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9y
cyhQYXNzUmVmUHRyPE5vZGU+IG5vZGUpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1v
dmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoTm9kZSYgbm9kZSkKIHsKLSAgICBSZWZQdHI8Q29udGFp
bmVyTm9kZT4gcGFyZW50ID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgIFJlZlB0cjxDb250YWlu
ZXJOb2RlPiBwYXJlbnQgPSBub2RlLnBhcmVudE5vZGUoKTsKICAgICByZW1vdmVOb2RlKG5vZGUp
OwotICAgIHBydW5lKFdURk1vdmUocGFyZW50KSk7CisgICAgcHJ1bmUocGFyZW50LmdldCgpKTsK
IH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVJlbWFpbmluZ1NpYmxpbmdzVG9O
ZXdQYXJlbnQoTm9kZSogbm9kZSwgTm9kZSogcGFzdExhc3ROb2RlVG9Nb3ZlLCBQYXNzUmVmUHRy
PEVsZW1lbnQ+IHBycE5ld1BhcmVudCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVS
ZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50KE5vZGUqIG5vZGUsIE5vZGUqIHBhc3RMYXN0Tm9k
ZVRvTW92ZSwgRWxlbWVudCYgbmV3UGFyZW50KQogewogICAgIE5vZGVWZWN0b3Igbm9kZXNUb1Jl
bW92ZTsKLSAgICBSZWZQdHI8RWxlbWVudD4gbmV3UGFyZW50ID0gcHJwTmV3UGFyZW50OworICAg
IFJlZjxFbGVtZW50PiBwcm90ZWN0ZWROZXdQYXJlbnQgPSBuZXdQYXJlbnQ7CiAKICAgICBmb3Ig
KDsgbm9kZSAmJiBub2RlICE9IHBhc3RMYXN0Tm9kZVRvTW92ZTsgbm9kZSA9IG5vZGUtPm5leHRT
aWJsaW5nKCkpCiAgICAgICAgIG5vZGVzVG9SZW1vdmUuYXBwZW5kKCpub2RlKTsKIAogICAgIGZv
ciAoYXV0byYgbm9kZVRvUmVtb3ZlIDogbm9kZXNUb1JlbW92ZSkgewotICAgICAgICByZW1vdmVO
b2RlKG5vZGVUb1JlbW92ZS5wdHIoKSk7Ci0gICAgICAgIGFwcGVuZE5vZGUoV1RGTW92ZShub2Rl
VG9SZW1vdmUpLCAqbmV3UGFyZW50KTsKKyAgICAgICAgcmVtb3ZlTm9kZShub2RlVG9SZW1vdmUp
OworICAgICAgICBhcHBlbmROb2RlKFdURk1vdmUobm9kZVRvUmVtb3ZlKSwgbmV3UGFyZW50KTsK
ICAgICB9CiB9CiAKQEAgLTYzMywxMiArNjMzLDEyIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWxQcmVzZXJ2aW5nQ2hpbGRyZW4oUG9zaXRp
CiAgICAgICAgIHBvc2l0aW9uLm1vdmVUb09mZnNldChvZmZzZXQpOyAgICAKIH0KIAotSFRNTEVs
ZW1lbnQqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2Vy
dmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBub2RlKQor
SFRNTEVsZW1lbnQqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlRWxlbWVudFdpdGhTcGFu
UHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyhIVE1MRWxlbWVudCYgZWxlbWVudCkKIHsK
ICAgICAvLyBJdCB3b3VsZCBhbHNvIGJlIHBvc3NpYmxlIHRvIGltcGxlbWVudCBhbGwgb2YgUmVw
bGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQKICAgICAvLyBhcyBhIHNlcmllcyBvZiBleGlzdGluZyBz
bWFsbGVyIGVkaXQgY29tbWFuZHMuICBTb21lb25lIHdobyB3YW50ZWQgdG8KICAgICAvLyByZWR1
Y2UgdGhlIG51bWJlciBvZiBlZGl0IGNvbW1hbmRzIGNvdWxkIGRvIHNvIGhlcmUuCi0gICAgYXV0
byBjb21tYW5kID0gUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OmNyZWF0ZShub2RlKTsKKyAg
ICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6Y3JlYXRlKGVsZW1l
bnQpOwogICAgIGF1dG8qIGNvbW1hbmRQdHIgPSBjb21tYW5kLnB0cigpOwogICAgIGFwcGx5Q29t
bWFuZFRvQ29tcG9zaXRlKFdURk1vdmUoY29tbWFuZCkpOwogICAgIC8vIFJldHVybmluZyBhIHJh
dyBwb2ludGVyIGhlcmUgaXMgT0sgYmVjYXVzZSB0aGUgY29tbWFuZCBpcyByZXRhaW5lZCBieQpA
QCAtNjQ4LDE4ICs2NDgsMTggQEAgSFRNTEVsZW1lbnQqIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpy
ZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXQKICAgICByZXR1cm4g
Y29tbWFuZFB0ci0+c3BhbkVsZW1lbnQoKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6cHJ1bmUoUGFzc1JlZlB0cjxOb2RlPiBub2RlKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6cHJ1bmUoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoUmVmUHRyPE5vZGU+IGhpZ2hlc3ROb2Rl
VG9SZW1vdmUgPSBoaWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVuaW5nKG5vZGUuZ2V0KCkpKQotICAg
ICAgICByZW1vdmVOb2RlKFdURk1vdmUoaGlnaGVzdE5vZGVUb1JlbW92ZSkpOworICAgIGlmIChS
ZWZQdHI8Tm9kZT4gaGlnaGVzdE5vZGVUb1JlbW92ZSA9IGhpZ2hlc3ROb2RlVG9SZW1vdmVJblBy
dW5pbmcobm9kZSkpCisgICAgICAgIHJlbW92ZU5vZGUoKmhpZ2hlc3ROb2RlVG9SZW1vdmUpOwog
fQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRleHROb2RlKFBhc3NSZWZQdHI8
VGV4dD4gbm9kZSwgdW5zaWduZWQgb2Zmc2V0KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
c3BsaXRUZXh0Tm9kZShUZXh0JiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAgYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmNyZWF0ZShub2RlLCBvZmZz
ZXQpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRFbGVtZW50KFBhc3NS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc1JlZlB0cjxOb2RlPiBhdENoaWxkKQordm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQsIE5vZGUm
IGF0Q2hpbGQpCiB7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU3BsaXRFbGVtZW50Q29t
bWFuZDo6Y3JlYXRlKGVsZW1lbnQsIGF0Q2hpbGQpKTsKIH0KQEAgLTY3MCw3ICs2NzAsNyBAQCB2
b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptZXJnZUlkZW50aWNhbEVsZW1lbnRzKEVsZW1lbnQm
IGZpcnN0LCBFbGVtZW50JiBzZWNvbgogICAgIFJlZjxFbGVtZW50PiBwcm90ZWN0ZWRTZWNvbmQg
PSBzZWNvbmQ7CiAgICAgQVNTRVJUKCFmaXJzdC5pc0Rlc2NlbmRhbnRPZigmc2Vjb25kKSAmJiAm
c2Vjb25kICE9ICZmaXJzdCk7CiAgICAgaWYgKGZpcnN0Lm5leHRTaWJsaW5nKCkgIT0gJnNlY29u
ZCkgewotICAgICAgICByZW1vdmVOb2RlKCZzZWNvbmQpOworICAgICAgICByZW1vdmVOb2RlKHNl
Y29uZCk7CiAgICAgICAgIGluc2VydE5vZGVBZnRlcihzZWNvbmQsIGZpcnN0KTsKICAgICB9CiAg
ICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoTWVyZ2VJZGVudGljYWxFbGVtZW50c0NvbW1hbmQ6
OmNyZWF0ZShmaXJzdCwgc2Vjb25kKSk7CkBAIC02ODEsNyArNjgxLDcgQEAgdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6d3JhcENvbnRlbnRzSW5EdW1teVNwYW4oRWxlbWVudCYgZWxlbWVudCkK
ICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShXcmFwQ29udGVudHNJbkR1bW15U3BhbkNvbW1h
bmQ6OmNyZWF0ZShlbGVtZW50KSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNw
bGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudChQYXNzUmVmUHRyPFRleHQ+IHRleHQsIHVuc2ln
bmVkIG9mZnNldCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudChUZXh0JiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAgICAgYXBwbHlD
b21tYW5kVG9Db21wb3NpdGUoU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZDo6
Y3JlYXRlKHRleHQsIG9mZnNldCkpOwogfQpAQCAtODA4LDcgKzgwOCw3IEBAIFBvc2l0aW9uIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikKICAgICBpZiAocG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkgPj0g
Y2FyZXRNYXhPZmZzZXQoKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSkpCiAgICAgICAgIHJldHVy
biBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKHRhYlNwYW4pOwogCi0gICAgc3BsaXRUZXh0Tm9k
ZUNvbnRhaW5pbmdFbGVtZW50KCZkb3duY2FzdDxUZXh0PigqcG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpKSwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgIHNwbGl0VGV4dE5v
ZGVDb250YWluaW5nRWxlbWVudChkb3duY2FzdDxUZXh0PigqcG9zaXRpb24uY29udGFpbmVyTm9k
ZSgpKSwgcG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwogICAgIHJldHVybiBwb3Np
dGlvbkluUGFyZW50QmVmb3JlTm9kZSh0YWJTcGFuKTsKIH0KIApAQCAtODQyLDEwICs4NDIsMTAg
QEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6ZGVsZXRlU2VsZWN0aW9uKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24gJnNlbGVjdGlvbiwgYm8KIAogdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
cmVtb3ZlTm9kZUF0dHJpYnV0ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGUpCiB7Ci0gICAgc2V0Tm9kZUF0dHJpYnV0ZSgmZWxlbWVudCwgYXR0cmlidXRl
LCBudWxsQXRvbSk7CisgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGUsIG51
bGxBdG9tKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2V0Tm9kZUF0dHJpYnV0
ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJp
YnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnNldE5vZGVBdHRyaWJ1dGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewogICAgIGFwcGx5Q29t
bWFuZFRvQ29tcG9zaXRlKFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpjcmVhdGUoZWxlbWVudCwg
YXR0cmlidXRlLCB2YWx1ZSkpOwogfQpAQCAtOTk4LDcgKzk5OCw3IEBAIHZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OmRlbGV0ZUluc2lnbmlmaWNhbnRUZXh0KFRleHQmIHRleHROb2RlLCB1bnNp
Z25lZCBzdGFyCiAKICAgICBpZiAoIWJveCkgewogICAgICAgICAvLyB3aG9sZSB0ZXh0IG5vZGUg
aXMgZW1wdHkKLSAgICAgICAgcmVtb3ZlTm9kZSgmdGV4dE5vZGUpOworICAgICAgICByZW1vdmVO
b2RlKHRleHROb2RlKTsKICAgICAgICAgcmV0dXJuOyAgICAKICAgICB9CiAgICAgCkBAIC0xMTM0
LDcgKzExMzQsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVQbGFjZWhvbGRl
ckF0KGNvbnN0IFBvc2l0aW9uJiBwKQogICAgIAogICAgIC8vIFdlIGFyZSBjZXJ0YWluIHRoYXQg
dGhlIHBvc2l0aW9uIGlzIGF0IGEgbGluZSBicmVhaywgYnV0IGl0IG1heSBiZSBhIGJyIG9yIGEg
cHJlc2VydmVkIG5ld2xpbmUuCiAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpwLmFuY2hvck5v
ZGUoKSkpIHsKLSAgICAgICAgcmVtb3ZlTm9kZShwLmFuY2hvck5vZGUoKSk7CisgICAgICAgIHJl
bW92ZU5vZGUoKnAuYW5jaG9yTm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAK
QEAgLTEyMTAsNyArMTIxMCw3IEBAIFJlZlB0cjxOb2RlPiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
bW92ZVBhcmFncmFwaENvbnRlbnRzVG9OZXdCbG9ja0lmTmVjZXNzYXJ5KGNvCiAgICAgbW92ZVBh
cmFncmFwaHModmlzaWJsZVBhcmFncmFwaFN0YXJ0LCB2aXNpYmxlUGFyYWdyYXBoRW5kLCBWaXNp
YmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShuZXdCbG9jay5wdHIoKSkpKTsKIAogICAg
IGlmIChuZXdCbG9jay0+bGFzdENoaWxkKCkgJiYgbmV3QmxvY2stPmxhc3RDaGlsZCgpLT5oYXNU
YWdOYW1lKGJyVGFnKSAmJiAhZW5kV2FzQnIpCi0gICAgICAgIHJlbW92ZU5vZGUobmV3QmxvY2st
Pmxhc3RDaGlsZCgpKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbmV3QmxvY2stPmxhc3RDaGlsZCgp
KTsKIAogICAgIHJldHVybiBXVEZNb3ZlKG5ld0Jsb2NrKTsKIH0KQEAgLTEyMjMsNyArMTIyMyw3
IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnB1c2hBbmNob3JFbGVtZW50RG93bihFbGVt
ZW50JiBhbmNob3JFbGVtZW50KQogICAgIGFwcGx5U3R5bGVkRWxlbWVudChhbmNob3JFbGVtZW50
KTsKICAgICAvLyBDbG9uZXMgb2YgYW5jaG9yRWxlbWVudCBoYXZlIGJlZW4gcHVzaGVkIGRvd24s
IG5vdyByZW1vdmUgaXQuCiAgICAgaWYgKGFuY2hvckVsZW1lbnQuaXNDb25uZWN0ZWQoKSkKLSAg
ICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigmYW5jaG9yRWxlbWVudCk7CisgICAg
ICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oYW5jaG9yRWxlbWVudCk7CiB9CiAKIC8v
IENsb25lIHRoZSBwYXJhZ3JhcGggYmV0d2VlbiBzdGFydCBhbmQgZW5kIHVuZGVyIGJsb2NrRWxl
bWVudCwKQEAgLTEzMDgsNyArMTMwOCw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmNs
ZWFudXBBZnRlckRlbGV0aW9uKFZpc2libGVQb3NpdGlvbiBkZXN0aW5hdGlvbikKICAgICAgICAg
QVNTRVJUKG5vZGUpOwogICAgICAgICAvLyBOb3JtYWxseSBkZWxldGlvbiB3aWxsIGxlYXZlIGEg
YnIgYXMgYSBwbGFjZWhvbGRlci4KICAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+KCpub2Rl
KSkKLSAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlKTsKKyAgICAg
ICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycygqbm9kZSk7CiAgICAgICAgIC8vIElm
IHRoZSBzZWxlY3Rpb24gdG8gbW92ZSB3YXMgZW1wdHkgYW5kIGluIGFuIGVtcHR5IGJsb2NrIHRo
YXQgCiAgICAgICAgIC8vIGRvZXNuJ3QgcmVxdWlyZSBhIHBsYWNlaG9sZGVyIHRvIHByb3AgaXRz
ZWxmIG9wZW4gKGxpa2UgYSBib3JkZXJlZAogICAgICAgICAvLyBkaXYgb3IgYW4gbGkpLCByZW1v
dmUgaXQgZHVyaW5nIHRoZSBtb3ZlICh0aGUgbGlzdCByZW1vdmFsIGNvZGUKQEAgLTEzMjAsMTQg
KzEzMjAsMTQgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6Y2xlYW51cEFmdGVyRGVsZXRp
b24oVmlzaWJsZVBvc2l0aW9uIGRlc3RpbmF0aW9uKQogICAgICAgICAgICAgICAgIHBydW5lKG5v
ZGUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlKTsKKyAgICAgICAgICAgIHJlbW92ZU5v
ZGVBbmRQcnVuZUFuY2VzdG9ycygqbm9kZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAo
bGluZUJyZWFrRXhpc3RzQXRQb3NpdGlvbihwb3NpdGlvbikpIHsKICAgICAgICAgICAgIC8vIFRo
ZXJlIGlzIGEgcHJlc2VydmVkICdcbicgYXQgY2FyZXRBZnRlckRlbGV0ZS4KICAgICAgICAgICAg
IC8vIFdlIGNhbiBzYWZlbHkgYXNzdW1lIHRoaXMgaXMgYSB0ZXh0IG5vZGUuCiAgICAgICAgICAg
ICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpub2RlKTsKICAgICAgICAgICAgIGlm
ICh0ZXh0Tm9kZS5sZW5ndGgoKSA9PSAxKQotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVBbmRQ
cnVuZUFuY2VzdG9ycyhub2RlKTsKKyAgICAgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVB
bmNlc3RvcnModGV4dE5vZGUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGRl
bGV0ZVRleHRGcm9tTm9kZSh0ZXh0Tm9kZSwgcG9zaXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZz
ZXQoKSwgMSk7CiAgICAgICAgIH0KQEAgLTE1NTUsOCArMTU1NSw4IEBAIGJvb2wgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OmJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCkKICAgICAgICAgICAgICAgICAv
LyBlLmcuIDx1bD48bGk+aGVsbG8gPHVsPjxsaT48YnI+PC9saT48L3VsPiA8L2xpPjwvdWw+IHNo
b3VsZCBiZWNvbWUgPHVsPjxsaT5oZWxsbzwvbGk+IDx1bD48bGk+PGJyPjwvbGk+PC91bD4gPC91
bD4gYWZ0ZXIgdGhpcyBzZWN0aW9uCiAgICAgICAgICAgICAgICAgLy8gSWYgbGlzdE5vZGUgZG9l
cyBOT1QgYXBwZWFyIGF0IHRoZSBlbmQsIHRoZW4gd2Ugc2hvdWxkIGNvbnNpZGVyIGl0IGFzIGEg
cmVndWxhciBwYXJhZ3JhcGguCiAgICAgICAgICAgICAgICAgLy8gZS5nLiA8dWw+PGxpPiA8dWw+
PGxpPjxicj48L2xpPjwvdWw+IGhlbGxvPC9saT48L3VsPiBzaG91bGQgYmVjb21lIDx1bD48bGk+
IDxkaXY+PGJyPjwvZGl2PiBoZWxsbzwvbGk+PC91bD4gYXQgdGhlIGVuZAotICAgICAgICAgICAg
ICAgIHNwbGl0RWxlbWVudChkb3duY2FzdDxIVE1MTElFbGVtZW50PihibG9ja0VuY2xvc2luZ0xp
c3QpLCBsaXN0Tm9kZSk7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbihsaXN0Tm9kZS0+cGFyZW50Tm9kZSgpKTsKKyAgICAgICAgICAgICAgICBzcGxpdEVsZW1l
bnQoZG93bmNhc3Q8SFRNTExJRWxlbWVudD4oKmJsb2NrRW5jbG9zaW5nTGlzdCksICpsaXN0Tm9k
ZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigqbGlzdE5v
ZGUtPnBhcmVudE5vZGUoKSk7CiAgICAgICAgICAgICAgICAgbmV3QmxvY2sgPSBIVE1MTElFbGVt
ZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvLyBJ
ZiBsaXN0Tm9kZSBkb2VzIE5PVCBhcHBlYXIgYXQgdGhlIGVuZCBvZiB0aGUgb3V0ZXIgbGlzdCBp
dGVtLCB0aGVuIGJlaGF2ZSBhcyBpZiBpbiBhIHJlZ3VsYXIgcGFyYWdyYXBoLgpAQCAtMTU3MSwx
OCArMTU3MSwxOCBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlM
aXN0SXRlbSgpCiAgICAgaWYgKGlzTGlzdEl0ZW0obmV4dExpc3ROb2RlLmdldCgpKSB8fCBpc0xp
c3RIVE1MRWxlbWVudChuZXh0TGlzdE5vZGUuZ2V0KCkpKSB7CiAgICAgICAgIC8vIElmIGVtcHR5
TGlzdEl0ZW0gZm9sbG93cyBhbm90aGVyIGxpc3QgaXRlbSBvciBuZXN0ZWQgbGlzdCwgc3BsaXQg
dGhlIGxpc3Qgbm9kZS4KICAgICAgICAgaWYgKGlzTGlzdEl0ZW0ocHJldmlvdXNMaXN0Tm9kZS5n
ZXQoKSkgfHwgaXNMaXN0SFRNTEVsZW1lbnQocHJldmlvdXNMaXN0Tm9kZS5nZXQoKSkpCi0gICAg
ICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obGlzdE5vZGUpLCBlbXB0eUxp
c3RJdGVtKTsKKyAgICAgICAgICAgIHNwbGl0RWxlbWVudChkb3duY2FzdDxFbGVtZW50PigqbGlz
dE5vZGUpLCAqZW1wdHlMaXN0SXRlbSk7CiAKICAgICAgICAgLy8gSWYgZW1wdHlMaXN0SXRlbSBp
cyBmb2xsb3dlZCBieSBvdGhlciBsaXN0IGl0ZW0gb3IgbmVzdGVkIGxpc3QsIHRoZW4gaW5zZXJ0
IG5ld0Jsb2NrIGJlZm9yZSB0aGUgbGlzdCBub2RlLgogICAgICAgICAvLyBCZWNhdXNlIHdlIGhh
dmUgc3BsaXR0ZWQgdGhlIGVsZW1lbnQsIGVtcHR5TGlzdEl0ZW0gaXMgdGhlIGZpcnN0IGVsZW1l
bnQgaW4gdGhlIGxpc3Qgbm9kZS4KICAgICAgICAgLy8gaS5lLiBpbnNlcnQgbmV3QmxvY2sgYmVm
b3JlIHVsIG9yIG9sIHdob3NlIGZpcnN0IGVsZW1lbnQgaXMgZW1wdHlMaXN0SXRlbQogICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKCpuZXdCbG9jaywgKmxpc3ROb2RlKTsKLSAgICAgICAgcmVtb3Zl
Tm9kZShlbXB0eUxpc3RJdGVtKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqZW1wdHlMaXN0SXRlbSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2hlbiBlbXB0eUxpc3RJdGVtIGRvZXMgbm90IGZv
bGxvdyBhbnkgbGlzdCBpdGVtIG9yIG5lc3RlZCBsaXN0LCBpbnNlcnQgbmV3QmxvY2sgYWZ0ZXIg
dGhlIGVuY2xvc2luZyBsaXN0IG5vZGUuCiAgICAgICAgIC8vIFJlbW92ZSB0aGUgZW5jbG9zaW5n
IG5vZGUgaWYgZW1wdHlMaXN0SXRlbSBpcyB0aGUgb25seSBjaGlsZDsgb3RoZXJ3aXNlIGp1c3Qg
cmVtb3ZlIGVtcHR5TGlzdEl0ZW0uCiAgICAgICAgIGluc2VydE5vZGVBZnRlcigqbmV3QmxvY2ss
ICpsaXN0Tm9kZSk7Ci0gICAgICAgIHJlbW92ZU5vZGUoaXNMaXN0SXRlbShwcmV2aW91c0xpc3RO
b2RlLmdldCgpKSB8fCBpc0xpc3RIVE1MRWxlbWVudChwcmV2aW91c0xpc3ROb2RlLmdldCgpKSA/
IGVtcHR5TGlzdEl0ZW0gOiBsaXN0Tm9kZSk7CisgICAgICAgIHJlbW92ZU5vZGUoaXNMaXN0SXRl
bShwcmV2aW91c0xpc3ROb2RlLmdldCgpKSB8fCBpc0xpc3RIVE1MRWxlbWVudChwcmV2aW91c0xp
c3ROb2RlLmdldCgpKSA/ICplbXB0eUxpc3RJdGVtIDogKmxpc3ROb2RlKTsKICAgICB9CiAKICAg
ICBhcHBlbmRCbG9ja1BsYWNlaG9sZGVyKCpuZXdCbG9jayk7CkBAIC0xNjM2LDcgKzE2MzYsNyBA
QCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1wdHlNYWlsQmxvY2txdW90
ZWRQYXJhZ3JhcGgoKQogICAgIEFTU0VSVChjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpLT5oYXNU
YWdOYW1lKGJyVGFnKSB8fCAoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+aXNUZXh0Tm9kZSgp
ICYmIGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPnN0eWxlKCkucHJlc2Vy
dmVOZXdsaW5lKCkpKTsKICAgICAKICAgICBpZiAoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+
aGFzVGFnTmFtZShiclRhZykpCi0gICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhj
YXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5j
ZXN0b3JzKCpjYXJldFBvcy5kZXByZWNhdGVkTm9kZSgpKTsKICAgICBlbHNlIGlmIChpczxUZXh0
PigqY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgQVNTRVJUKGNhcmV0UG9z
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPT0gMCk7CiAgICAgICAgIFRleHQmIHRleHROb2Rl
ID0gZG93bmNhc3Q8VGV4dD4oKmNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCkpOwpAQCAtMTczMSw3
ICsxNzMxLDcgQEAgUmVmUHRyPE5vZGU+IENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRyZWVU
b05vZGUoTm9kZSogc3RhcnQsIE5vZGUqIGVuZCwgYm9vbAogICAgICAgICBWaXNpYmxlUG9zaXRp
b24gcG9zaXRpb25JblBhcmVudCA9IGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZS0+cGFyZW50Tm9k
ZSgpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uSW5Ob2RlID0gZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKG5vZGUuZ2V0KCkpOwogICAgICAgICBpZiAocG9zaXRpb25JblBh
cmVudCAhPSBwb3NpdGlvbkluTm9kZSkKLSAgICAgICAgICAgIHNwbGl0RWxlbWVudChkb3duY2Fz
dDxFbGVtZW50Pihub2RlLT5wYXJlbnROb2RlKCkpLCBub2RlKTsKKyAgICAgICAgICAgIHNwbGl0
RWxlbWVudChkb3duY2FzdDxFbGVtZW50Pigqbm9kZS0+cGFyZW50Tm9kZSgpKSwgKm5vZGUpOwog
ICAgIH0KIAogICAgIHJldHVybiBub2RlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21w
b3NpdGVFZGl0Q29tbWFuZC5oCmluZGV4IGFiZTFjOGI5ZGNlNDQ4Zjg0NWQ3ODE0OGJlZjFiMjA3
ZTI4ZjdlZTYuLmY0ZmY3NzMyNzE3MWIyOTNkMGQ2YjZiM2IxMmVhYWVlNDkwMDNjOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKQEAgLTE2MSwy
MSArMTYxLDIxIEBAIHByb3RlY3RlZDoKICAgICBib29sIHNob3VsZFJlYmFsYW5jZUxlYWRpbmdX
aGl0ZXNwYWNlRm9yKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcmVtb3ZlTm9kZUF0
dHJpYnV0ZShFbGVtZW50JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKTsKICAgICB2
b2lkIHJlbW92ZUNoaWxkcmVuSW5SYW5nZShOb2RlJiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pOwotICAgIHZpcnR1YWwgdm9pZCByZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4sIFNob3Vs
ZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlID0gRG9Ob3RBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSk7Ci0gICAgSFRNTEVsZW1lbnQqIHJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVz
ZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+KTsKLSAg
ICB2b2lkIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPiwgU2hv
dWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05vdEFzc3VtZUNvbnRlbnRJc0Fs
d2F5c0VkaXRhYmxlKTsKLSAgICB2b2lkIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhQYXNz
UmVmUHRyPE5vZGU+KTsKLSAgICB2b2lkIG1vdmVSZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50
KE5vZGUqLCBOb2RlKiBwYXN0TGFzdE5vZGVUb01vdmUsIFBhc3NSZWZQdHI8RWxlbWVudD4gcHJw
TmV3UGFyZW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTm9kZShOb2RlJiwgU2hvdWxkQXNz
dW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlKTsKKyAgICBIVE1MRWxlbWVudCogcmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZp
bmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoSFRNTEVsZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oTm9kZSYsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlID0gRG9Ob3RBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAgdm9pZCBy
ZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoTm9kZSYpOworICAgIHZvaWQgbW92ZVJlbWFpbmlu
Z1NpYmxpbmdzVG9OZXdQYXJlbnQoTm9kZSosIE5vZGUqIHBhc3RMYXN0Tm9kZVRvTW92ZSwgRWxl
bWVudCYgbmV3UGFyZW50KTsKICAgICB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWxQ
cmVzZXJ2aW5nQ2hpbGRyZW4oUG9zaXRpb24mLCBOb2RlJik7Ci0gICAgdm9pZCBwcnVuZShQYXNz
UmVmUHRyPE5vZGU+KTsKKyAgICB2b2lkIHBydW5lKE5vZGUqKTsKICAgICB2b2lkIHJlcGxhY2VU
ZXh0SW5Ob2RlKFRleHQmLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBT
dHJpbmcmIHJlcGxhY2VtZW50VGV4dCk7CiAgICAgUG9zaXRpb24gcmVwbGFjZVNlbGVjdGVkVGV4
dEluTm9kZShjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHJlcGxhY2VUZXh0SW5Ob2RlUHJlc2Vy
dmluZ01hcmtlcnMoVGV4dCYsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KTsKICAgICBQb3NpdGlvbiBwb3NpdGlvbk91dHNpZGVU
YWJTcGFuKGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgdm9pZCBzZXROb2RlQXR0cmlidXRlKFBhc3NS
ZWZQdHI8RWxlbWVudD4sIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSk7Ci0gICAgdm9pZCBzcGxpdEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVt
ZW50PiwgUGFzc1JlZlB0cjxOb2RlPiBhdENoaWxkKTsKLSAgICB2b2lkIHNwbGl0VGV4dE5vZGUo
UGFzc1JlZlB0cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0KTsKLSAgICB2b2lkIHNwbGl0VGV4dE5v
ZGVDb250YWluaW5nRWxlbWVudChQYXNzUmVmUHRyPFRleHQ+LCB1bnNpZ25lZCBvZmZzZXQpOwor
ICAgIHZvaWQgc2V0Tm9kZUF0dHJpYnV0ZShFbGVtZW50JiwgY29uc3QgUXVhbGlmaWVkTmFtZSYg
YXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKKyAgICB2b2lkIHNwbGl0RWxl
bWVudChFbGVtZW50JiwgTm9kZSYgYXRDaGlsZCk7CisgICAgdm9pZCBzcGxpdFRleHROb2RlKFRl
eHQmLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIHZvaWQgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50KFRleHQmLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIHZvaWQgd3JhcENvbnRlbnRzSW5E
dW1teVNwYW4oRWxlbWVudCYpOwogCiAgICAgdm9pZCBkZWxldGVJbnNpZ25pZmljYW50VGV4dChU
ZXh0JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7CkBAIC0yMTUsNyArMjE1LDcgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8RWRpdENvbW1hbmRDb21wb3NpdGlvbj4gbV9jb21wb3NpdGlv
bjsKIH07CiAgICAgCi12b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRD
b21tYW5kPik7Cit2b2lkIGFwcGx5Q29tbWFuZChDb21wb3NpdGVFZGl0Q29tbWFuZCYpOwogCiBp
bmxpbmUgQ29tcG9zaXRlRWRpdENvbW1hbmQqIHRvQ29tcG9zaXRlRWRpdENvbW1hbmQoRWRpdENv
bW1hbmQqIGNvbW1hbmQpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBjNWNlZTcxNDJhZWM0NDNjYzBiN2ZhYjhkMzQwNjY3
YzQ5NWNmZWRhLi40NjFkNDhlYWUxMDg1OGU3MzZhNzk4MGY1OGIzMzA5OGVhMzhkNGM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAK
QEAgLTMyMCw3ICszMjAsNyBAQCBib29sIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVNw
ZWNpYWxDYXNlQlJEZWxldGUoKQogICAgIGJvb2wgaXNCUk9uTGluZUJ5SXRzZWxmID0gdXBzdHJl
YW1TdGFydElzQlIgJiYgZG93bnN0cmVhbVN0YXJ0SXNCUiAmJiAoKG5vZGVBZnRlckRvd25zdHJl
YW1TdGFydCA9PSBub2RlQWZ0ZXJVcHN0cmVhbUVuZCkgfHwgKG5vZGVBZnRlclVwc3RyZWFtRW5k
ICYmIG5vZGVBZnRlclVwc3RyZWFtRW5kLT5oYXNUYWdOYW1lKGJyVGFnKSAmJiBub2RlQWZ0ZXJV
cHN0cmVhbVN0YXJ0LT5uZXh0U2libGluZygpID09IG5vZGVBZnRlclVwc3RyZWFtRW5kKSk7CiAK
ICAgICBpZiAoaXNCUk9uTGluZUJ5SXRzZWxmKSB7Ci0gICAgICAgIHJlbW92ZU5vZGUobm9kZUFm
dGVyRG93bnN0cmVhbVN0YXJ0KTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZUFmdGVyRG93bnN0
cmVhbVN0YXJ0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0zNjgsNyArMzY4
LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlVXBkYXRpbmdTdGF0
ZXMoTm9kZSYgbm9kZSwgU2hvdWxkQXNzdW1lQ28KICAgICB1cGRhdGVQb3NpdGlvbkZvck5vZGVS
ZW1vdmFsKG1fbGVhZGluZ1doaXRlc3BhY2UsIG5vZGUpOwogICAgIHVwZGF0ZVBvc2l0aW9uRm9y
Tm9kZVJlbW92YWwobV90cmFpbGluZ1doaXRlc3BhY2UsIG5vZGUpOwogICAgIAotICAgIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKCZub2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNB
bHdheXNFZGl0YWJsZSk7CisgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGUobm9k
ZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogfQogICAgIAogc3RhdGlj
IGlubGluZSBib29sIHNob3VsZFJlbW92ZUNvbnRlbnRPbmx5KGNvbnN0IE5vZGUmIG5vZGUpCkBA
IC0zNzYsMjQgKzM3NiwyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkUmVtb3ZlQ29udGVu
dE9ubHkoY29uc3QgTm9kZSYgbm9kZSkKICAgICByZXR1cm4gaXNUYWJsZVN0cnVjdHVyZU5vZGUo
Jm5vZGUpIHx8IG5vZGUuaXNSb290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKLXZvaWQgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFNob3Vs
ZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5
c0VkaXRhYmxlKQordm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKE5vZGUm
IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNv
bnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogewotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICBpZiAobV9zdGFydFJvb3QgIT0gbV9lbmRSb290ICYmICEobm9kZS0+
aXNEZXNjZW5kYW50T2YobV9zdGFydFJvb3QuZ2V0KCkpICYmIG5vZGUtPmlzRGVzY2VuZGFudE9m
KG1fZW5kUm9vdC5nZXQoKSkpKSB7CisgICAgaWYgKG1fc3RhcnRSb290ICE9IG1fZW5kUm9vdCAm
JiAhKG5vZGUuaXNEZXNjZW5kYW50T2YobV9zdGFydFJvb3QuZ2V0KCkpICYmIG5vZGUuaXNEZXNj
ZW5kYW50T2YobV9lbmRSb290LmdldCgpKSkpIHsKICAgICAgICAgLy8gSWYgYSBub2RlIGlzIG5v
dCBpbiBib3RoIHRoZSBzdGFydCBhbmQgZW5kIGVkaXRhYmxlIHJvb3RzLCByZW1vdmUgaXQgb25s
eSBpZiBpdHMgaW5zaWRlIGFuIGVkaXRhYmxlIHJlZ2lvbi4KLSAgICAgICAgaWYgKCFub2RlLT5w
YXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUoKSkgeworICAgICAgICBpZiAoIW5vZGUucGFy
ZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpIHsKICAgICAgICAgICAgIC8vIERvbid0IHJl
bW92ZSBub24tZWRpdGFibGUgYXRvbWljIG5vZGVzLgotICAgICAgICAgICAgaWYgKCFub2RlLT5m
aXJzdENoaWxkKCkpCisgICAgICAgICAgICBpZiAoIW5vZGUuZmlyc3RDaGlsZCgpKQogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIC8vIFNlYXJjaCB0aGlzIG5vbi1lZGl0YWJs
ZSByZWdpb24gZm9yIGVkaXRhYmxlIHJlZ2lvbnMgdG8gZW1wdHkuCi0gICAgICAgICAgICBSZWZQ
dHI8Tm9kZT4gY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQoKTsKICAgICAgICAgICAgIHdoaWxlIChjaGls
ZCkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICByZW1vdmVOb2RlKGNoaWxkLmdldCgpLCBzaG91
bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAgICAgICAgICAgICAgcmVtb3Zl
Tm9kZSgqY2hpbGQsIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKICAgICAg
ICAgICAgICAgICAvLyBCYWlsIGlmIG5leHRDaGlsZCBpcyBubyBsb25nZXIgbm9kZSdzIGNoaWxk
LgotICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hpbGQgJiYgbmV4dENoaWxkLT5wYXJlbnROb2Rl
KCkgIT0gbm9kZSkKKyAgICAgICAgICAgICAgICBpZiAobmV4dENoaWxkICYmIG5leHRDaGlsZC0+
cGFyZW50Tm9kZSgpICE9ICZub2RlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7CiAgICAgICAgICAgICB9CkBAIC00MDMsMjIg
KzQwMCwyMiBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUoUGFzc1Jl
ZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVDb250ZQogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGlmIChzaG91bGRSZW1vdmVDb250ZW50T25seSgqbm9kZSkpIHsKKyAgICBpZiAoc2hv
dWxkUmVtb3ZlQ29udGVudE9ubHkobm9kZSkpIHsKICAgICAgICAgLy8gRG8gbm90IHJlbW92ZSBh
biBlbGVtZW50IG9mIHRhYmxlIHN0cnVjdHVyZTsgcmVtb3ZlIGl0cyBjb250ZW50cy4KICAgICAg
ICAgLy8gTGlrZXdpc2UgZm9yIHRoZSByb290IGVkaXRhYmxlIGVsZW1lbnQuCi0gICAgICAgIGF1
dG8qIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSwgbm9kZS5nZXQoKSk7CisgICAg
ICAgIGF1dG8qIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dChub2RlLCAmbm9kZSk7CiAgICAg
ICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUNvbnRlbnRP
bmx5KCpjaGlsZCkpIHsKLSAgICAgICAgICAgICAgICBjaGlsZCA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoKmNoaWxkLCBub2RlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBjaGlsZCA9IE5vZGVUcmF2
ZXJzYWw6Om5leHQoKmNoaWxkLCAmbm9kZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvKiByZW1vdmUgPSBjaGlsZDsKLSAgICAgICAg
ICAgIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKmNoaWxkLCBu
b2RlLmdldCgpKTsKKyAgICAgICAgICAgIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBw
aW5nQ2hpbGRyZW4oKmNoaWxkLCAmbm9kZSk7CiAgICAgICAgICAgICByZW1vdmVOb2RlVXBkYXRp
bmdTdGF0ZXMoKnJlbW92ZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBBU1NFUlQoaXM8RWxlbWVudD4oKm5vZGUpKTsK
LSAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICAg
ICAgQVNTRVJUKGlzPEVsZW1lbnQ+KG5vZGUpKTsKKyAgICAgICAgYXV0byYgZWxlbWVudCA9IGRv
d25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAgICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRv
IGluc2VydCBhIHBsYWNlaG9sZGVyIGZvciBkZXNjZW5kYW50IHRhYmxlIGNlbGxzLgogICAgICAg
ICBhdXRvKiBkZXNjZW5kYW50ID0gRWxlbWVudFRyYXZlcnNhbDo6bmV4dChlbGVtZW50LCAmZWxl
bWVudCk7CkBAIC00MzAsNyArNDI3LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpy
ZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgU2hvdWxkQXNzdW1lQ29udGUKICAgICAg
ICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlckZvclRhYmxlQ2VsbElmTmVlZGVkKGVsZW1lbnQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcygqbm9k
ZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOworICAgIHJlbW92ZU5vZGVV
cGRhdGluZ1N0YXRlcyhub2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7
CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZVBvc2l0aW9uRm9yVGV4dFJlbW92YWwoTm9kZSogbm9k
ZSwgaW50IG9mZnNldCwgaW50IGNvdW50LCBQb3NpdGlvbiYgcG9zaXRpb24pCkBAIC00NjUsNyAr
NDYyLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRz
RGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHIKICAgICAgICAgICAgIG5leHROb2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKm5vZGUpOwogICAgICAgICAgICAg
UmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBub2RlLT5yb290RWRp
dGFibGVFbGVtZW50KCk7CiAgICAgICAgICAgICBpZiAocm9vdEVkaXRhYmxlRWxlbWVudCkgewot
ICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CisgICAgICAgICAgICAgICAgcmVtb3Zl
Tm9kZSgqbm9kZSk7CiAgICAgICAgICAgICAgICAgYXBwZW5kTm9kZSgqbm9kZSwgKnJvb3RFZGl0
YWJsZUVsZW1lbnQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MjEsNyArNTE4LDcg
QEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKIAog
ICAgICAgICAvLyBUaGUgc2VsZWN0aW9uIHRvIGRlbGV0ZSBpcyBhbGwgaW4gb25lIG5vZGUuCiAg
ICAgICAgIGlmICghc3RhcnROb2RlLT5yZW5kZXJlcigpIHx8ICghc3RhcnRPZmZzZXQgJiYgbV9k
b3duc3RyZWFtRW5kLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkpCi0gICAgICAgICAg
ICByZW1vdmVOb2RlKHN0YXJ0Tm9kZSk7CisgICAgICAgICAgICByZW1vdmVOb2RlKCpzdGFydE5v
ZGUpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBzdGFydE5vZGVXYXNEZXNjZW5k
YW50T2ZFbmROb2RlID0gbV91cHN0cmVhbVN0YXJ0LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2Vu
ZGFudE9mKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKQEAgLTU1MiwxMiArNTQ5
LDEyIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgp
CiAgICAgICAgICAgICAgICAgLy8gaWYgd2UganVzdCByZW1vdmVkIGEgbm9kZSBmcm9tIHRoZSBl
bmQgY29udGFpbmVyLCB1cGRhdGUgZW5kIHBvc2l0aW9uIHNvIHRoZQogICAgICAgICAgICAgICAg
IC8vIGNoZWNrIGFib3ZlIHdpbGwgd29yawogICAgICAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9u
Rm9yTm9kZVJlbW92YWwobV9kb3duc3RyZWFtRW5kLCAqbm9kZSk7Ci0gICAgICAgICAgICAgICAg
cmVtb3ZlTm9kZShub2RlLmdldCgpKTsKKyAgICAgICAgICAgICAgICByZW1vdmVOb2RlKCpub2Rl
KTsKICAgICAgICAgICAgICAgICBub2RlID0gbmV4dE5vZGUuZ2V0KCk7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGUqIG4gPSBub2RlLT5sYXN0RGVzY2VuZGFudCgp
OwogICAgICAgICAgICAgICAgIGlmIChtX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSA9
PSBuICYmIG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0
TWF4T2Zmc2V0KCpuKSkgewotICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUuZ2V0
KCkpOworICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKCpub2RlKTsKICAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKTsKQEAgLTU2Nyw3
ICs1NjQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxl
dGUoKQogICAgICAgICBpZiAobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkgIT0gc3Rh
cnROb2RlICYmICFtX3Vwc3RyZWFtU3RhcnQuZGVwcmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50
T2YobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpICYmIG1fZG93bnN0cmVhbUVuZC5h
bmNob3JOb2RlKCktPmlzQ29ubmVjdGVkKCkgJiYgbV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNaW5PZmZzZXQoKm1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkTm9kZSgpKSkgewogICAgICAgICAgICAgaWYgKG1fZG93bnN0cmVhbUVuZC5hdExhc3RFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgIWNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKm1fZG93
bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBu
b2RlIGl0c2VsZiBpcyBmdWxseSBzZWxlY3RlZCwgbm90IGp1c3QgaXRzIGNvbnRlbnRzLiAgRGVs
ZXRlIGl0LgotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobV9kb3duc3RyZWFtRW5kLmRlcHJl
Y2F0ZWROb2RlKCkpOworICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoKm1fZG93bnN0cmVhbUVu
ZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzPFRleHQ+KCptX2Rvd25zdHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmlt
bWVkCkBAIC02MjEsNyArNjE4LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJn
ZVBhcmFncmFwaHMoKQogICAgIGlmICghbV9tZXJnZUJsb2Nrc0FmdGVyRGVsZXRlKSB7CiAgICAg
ICAgIGlmIChtX3BydW5lU3RhcnRCbG9ja0lmTmVjZXNzYXJ5KSB7CiAgICAgICAgICAgICAvLyBX
ZSBhcmVuJ3QgZ29pbmcgdG8gbWVyZ2UgaW50byB0aGUgc3RhcnQgYmxvY2ssIHNvIHJlbW92ZSBp
dCBpZiBpdCdzIGVtcHR5LgotICAgICAgICAgICAgcHJ1bmUobV9zdGFydEJsb2NrKTsKKyAgICAg
ICAgICAgIHBydW5lKG1fc3RhcnRCbG9jay5nZXQoKSk7CiAgICAgICAgICAgICAvLyBSZW1vdmlu
ZyB0aGUgc3RhcnQgYmxvY2sgZHVyaW5nIGEgZGVsZXRpb24gaXMgdXN1YWxseSBhbiBpbmRpY2F0
aW9uIHRoYXQgd2UgbmVlZAogICAgICAgICAgICAgLy8gYSBwbGFjZWhvbGRlciwgYnV0IG5vdCBp
biB0aGlzIGNhc2UuCiAgICAgICAgICAgICBtX25lZWRQbGFjZWhvbGRlciA9IGZhbHNlOwpAQCAt
NjUxLDcgKzY0OCw4IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3Jh
cGhzKCkKICAgICAvLyBtb3ZlLCBzbyBqdXN0IHJlbW92ZSBpdC4KICAgICBFbGVtZW50KiBlbmRC
bG9jayA9IGVuY2xvc2luZ0Jsb2NrKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsK
ICAgICBpZiAoIWVuZEJsb2NrIHx8ICFlbmRCbG9jay0+Y29udGFpbnMoc3RhcnRPZlBhcmFncmFw
aFRvTW92ZS5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCkpIHx8ICFzdGFydE9mUGFy
YWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSkgewotICAgICAg
ICByZW1vdmVOb2RlKGVuY2xvc2luZ0Jsb2NrKG1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9k
ZSgpKSk7CisgICAgICAgIGlmIChlbmRCbG9jaykKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoKmVu
ZEJsb2NrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTY3Myw3ICs2NzEsNyBA
QCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygpCiAgICAgLy8g
RklYTUU6IENvbnNpZGVyIFJUTC4KICAgICBpZiAoIW1fc3RhcnRzQXRFbXB0eUxpbmUgJiYgaXNT
dGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24pICYmIHN0YXJ0T2ZQYXJhZ3JhcGhUb01v
dmUuYWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSA+IG1lcmdlRGVzdGluYXRpb24uYWJzb2x1dGVD
YXJldEJvdW5kcygpLngoKSkgewogICAgICAgICBpZiAobWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1
aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdOYW1lKGJyVGFn
KSkgewotICAgICAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKG1lcmdlRGVzdGlu
YXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKSk7Cisg
ICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoKm1lcmdlRGVzdGluYXRpb24u
ZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgICAg
ICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZh
bGVudCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03MTEsNyArNzA5LDcg
QEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVQcmV2aW91c2x5U2VsZWN0ZWRF
bXB0eVRhYmxlUm93cygpCiAgICAgICAgICAgICBpZiAoaXNUYWJsZVJvd0VtcHR5KHJvdykpCiAg
ICAgICAgICAgICAgICAgLy8gVXNlIGEgcmF3IHJlbW92ZU5vZGUsIGluc3RlYWQgb2YgRGVsZXRl
U2VsZWN0aW9uQ29tbWFuZCdzLCBiZWNhdXNlCiAgICAgICAgICAgICAgICAgLy8gdGhhdCB3b24n
dCByZW1vdmUgcm93cywgaXQgb25seSBlbXB0aWVzIHRoZW0gaW4gcHJlcGFyYXRpb24gZm9yIHRo
aXMgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92
ZU5vZGUocm93KTsKKyAgICAgICAgICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3Zl
Tm9kZSgqcm93KTsKICAgICAgICAgICAgIHJvdyA9IHByZXZpb3VzUm93LmdldCgpOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNzIyLDcgKzcyMCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZDo6cmVtb3ZlUHJldmlvdXNseVNlbGVjdGVkRW1wdHlUYWJsZVJvd3MoKQogICAgICAgICB3aGls
ZSAocm93ICYmIHJvdyAhPSBtX2VuZFRhYmxlUm93KSB7CiAgICAgICAgICAgICBSZWZQdHI8Tm9k
ZT4gbmV4dFJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmIChpc1RhYmxl
Um93RW1wdHkocm93KSkKLSAgICAgICAgICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZShyb3cpOworICAgICAgICAgICAgICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1v
dmVOb2RlKCpyb3cpOwogICAgICAgICAgICAgcm93ID0gbmV4dFJvdy5nZXQoKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTczNCw3ICs3MzIsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6
OnJlbW92ZVByZXZpb3VzbHlTZWxlY3RlZEVtcHR5VGFibGVSb3dzKCkKICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogV2UgcHJvYmFibHkgc2hvdWxkbid0IHJlbW92ZSBtX2VuZFRhYmxlUm93IHVu
bGVzcyBpdCdzIGZ1bGx5IHNlbGVjdGVkLCBldmVuIGlmIGl0IGlzIGVtcHR5LgogICAgICAgICAg
ICAgICAgIC8vIFdlJ2xsIG5lZWQgdG8gc3RhcnQgYWRqdXN0aW5nIHRoZSBzZWxlY3Rpb24gZW5k
cG9pbnRzIGR1cmluZyBkZWxldGlvbiB0byBrbm93IHdoZXRoZXIgb3Igbm90IG1fZW5kVGFibGVS
b3cKICAgICAgICAgICAgICAgICAvLyB3YXMgZnVsbHkgc2VsZWN0ZWQgaGVyZS4KLSAgICAgICAg
ICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZShtX2VuZFRhYmxlUm93Lmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZSgq
bV9lbmRUYWJsZVJvdyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC04MTEs
NyArODA5LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVSZWR1bmRhbnRC
bG9ja3MoKQogICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9lbmRpbmdQb3NpdGlvbi5hbmNob3JO
b2RlKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3ZhbFByZXNl
cnZpbmdDaGlsZHJlbihtX2VuZGluZ1Bvc2l0aW9uLCAqbm9kZSk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuKG5vZGUpOworICAgICAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oKm5vZGUpOwogICAgICAgICAgICAgbm9kZSA9IG1fZW5kaW5nUG9z
aXRpb24uYW5jaG9yTm9kZSgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIG5vZGUgPSBu
b2RlLT5wYXJlbnROb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2Vs
ZWN0aW9uQ29tbWFuZC5oCmluZGV4IDZkOGE3YzIyNjM2YzRmZGExNjM3MjAwNWNmMjlhYTVhODZj
NjU2OGIuLjI5NmFkOWVhMWNkYTc1MDNjYjNiYmU0ZTkyOTExMmVjMzVmY2MyY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCkBAIC02Niw3
ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYWxjdWxhdGVUeXBpbmdTdHlsZUFmdGVyRGVs
ZXRlKCk7CiAgICAgdm9pZCBjbGVhclRyYW5zaWVudFN0YXRlKCk7CiAgICAgdm9pZCBtYWtlU3R5
bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVudFN0eWxlTG9z
cygpOwotICAgIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVD
b250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFi
bGUpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlTm9kZShOb2RlJiwgU2hvdWxkQXNzdW1lQ29u
dGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxl
KSBvdmVycmlkZTsKICAgICB2b2lkIGRlbGV0ZVRleHRGcm9tTm9kZShUZXh0JiwgdW5zaWduZWQs
IHVuc2lnbmVkKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZVJlZHVuZGFudEJsb2NrcygpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYzNkZDQ4YzM5N2Y0ZmNiZTE0ZWY3MDBh
M2JmMTQ4MDBhMjU5ZWVmZC4uMTcxMDQ4NGJjNzIyODdlYTE1Yzk1ZjE2N2Y0ZWVkMGNkNWFhOTli
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQg
Q2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoY29uc3QgUmVmUHRyPEZyYW1lPiBmcmFt
ZSkKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7CiAgICAgYXV0byBjbGVhckNv
bW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5kb2N1bWVudCgp
KSk7CiAgICAgY2xlYXJDb21tYW5kLT5zZXRTdGFydGluZ1NlbGVjdGlvbihvbGRTZWxlY3Rpb24p
OwotICAgIGFwcGx5Q29tbWFuZChXVEZNb3ZlKGNsZWFyQ29tbWFuZCkpOworICAgIGFwcGx5Q29t
bWFuZChjbGVhckNvbW1hbmQpOwogfQogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAt
NTA2LDcgKzUwNiw3IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50
KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBib29sIHNlbGVjCiAgICAgICAgIG9wdGlvbnMg
fD0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Oklnbm9yZU1haWxCbG9ja3F1b3RlOwogCiAgICAg
YXV0byBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgp
LCAmZnJhZ21lbnQsIG9wdGlvbnMsIGVkaXRpbmdBY3Rpb24pOwotICAgIGFwcGx5Q29tbWFuZChj
b21tYW5kLnB0cigpKTsKKyAgICBhcHBseUNvbW1hbmQoY29tbWFuZCk7CiAgICAgcmV2ZWFsU2Vs
ZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7CiAKICAgICBzZWxlY3Rpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwpAQCAtMzYyMCw4ICszNjIwLDggQEAgdm9pZCBFZGl0
b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRlKFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENh
bmRpZGF0ZSkKIAogICAgIGlmIChhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1
bHQoYWNjZXB0ZWRDYW5kaWRhdGUpKSB7CiAgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KGFj
Y2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0
aW9uOjpUeXBlZCkpIHsKLSAgICAgICAgICAgIFJlZjxSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1h
bmQ+IHJlcGxhY2VDb21tYW5kID0gUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpjcmVhdGUo
cmFuZ2UuZ2V0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsKLSAgICAgICAgICAg
IGFwcGx5Q29tbWFuZChyZXBsYWNlQ29tbWFuZC5wdHIoKSk7CisgICAgICAgICAgICBhdXRvIHJl
cGxhY2VDb21tYW5kID0gUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpjcmVhdGUocmFuZ2Uu
Z2V0KCksIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIGFwcGx5
Q29tbWFuZChyZXBsYWNlQ29tbWFuZCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAg
aW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgbnVsbHB0cik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAppbmRleCA3NDI4M2I2ZDI0Njk4NzM3
YjM5ZDZmNDNiOTcyNjZjN2U4MjY2ZTQ1Li43ZjA3MWIyYTk3Zjc0YzM2NWZjNDU4YTY3OTkxNjgz
OGFiMzYzM2VlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKQEAg
LTQxNSw3ICs0MTUsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlRm9ybWF0QmxvY2soRnJhbWUmIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0CiAKICAgICBBU1NFUlQoZnJh
bWUuZG9jdW1lbnQoKSk7CiAgICAgYXV0byBjb21tYW5kID0gRm9ybWF0QmxvY2tDb21tYW5kOjpj
cmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHF1YWxpZmllZFRhZ05hbWUucmVsZWFzZVJldHVyblZh
bHVlKCkpOwotICAgIGFwcGx5Q29tbWFuZChjb21tYW5kLmNvcHlSZWYoKSk7CisgICAgYXBwbHlD
b21tYW5kKGNvbW1hbmQpOwogICAgIHJldHVybiBjb21tYW5kLT5kaWRBcHBseSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luZGVudE91dGRlbnRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCmluZGV4
IDE1NjM3ZjhjZTk2MzFjYTBkYWQ5OTFjYzlkMWFkY2Y5Njc3YTQ4MDcuLjdmOGRhMTc1OTUyZTA5
NjY1NjRhYmU4ODE0YzBkMTlkODIxMDNiZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBJbmRl
bnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncmFwaCgpCiAgICAgICAgIHZpc2libGVFbmRP
ZlBhcmFncmFwaCA9PSBlbmRPZkVuY2xvc2luZ0Jsb2NrKSB7CiAgICAgICAgIC8vIFRoZSBibG9j
a3F1b3RlIGRvZXNuJ3QgY29udGFpbiBhbnl0aGluZyBvdXRzaWRlIHRoZSBwYXJhZ3JhcGgsIHNv
IGl0IGNhbiBiZSB0b3RhbGx5IHJlbW92ZWQuCiAgICAgICAgIE5vZGUqIHNwbGl0UG9pbnQgPSBl
bmNsb3NpbmdOb2RlLT5uZXh0U2libGluZygpOwotICAgICAgICByZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuKGVuY2xvc2luZ05vZGUpOworICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuKCplbmNsb3NpbmdOb2RlKTsKICAgICAgICAgLy8gb3V0ZGVudFJlZ2lvbigpIGFzc3Vt
ZXMgaXQgaXMgb3BlcmF0aW5nIG9uIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgYW4gZW5jbG9zaW5n
IGJsb2NrcXVvdGUsIGJ1dCBpZiB0aGVyZSBhcmUgbXVsdGlwbHkgbmVzdGVkIGJsb2NrcXVvdGVz
IGFuZCB3ZSd2ZQogICAgICAgICAvLyBqdXN0IHJlbW92ZWQgb25lLCB0aGVuIHRoaXMgYXNzdW1w
dGlvbiBpc24ndCB0cnVlLiBCeSBzcGxpdHRpbmcgdGhlIG5leHQgY29udGFpbmluZyBibG9ja3F1
b3RlIGFmdGVyIHRoaXMgbm9kZSwgd2Uga2VlcCB0aGlzIGFzc3VtcHRpb24gdHJ1ZQogICAgICAg
ICBpZiAoc3BsaXRQb2ludCkgewpAQCAtMTYwLDcgKzE2MCw3IEBAIHZvaWQgSW5kZW50T3V0ZGVu
dENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgoKQogICAgICAgICAgICAgICAgIGlmIChzcGxpdFBv
aW50UGFyZW50LT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpCiAgICAgICAgICAgICAgICAgICAg
ICYmICFzcGxpdFBvaW50LT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpCiAgICAgICAgICAgICAg
ICAgICAgICYmIHNwbGl0UG9pbnRQYXJlbnQtPnBhcmVudE5vZGUoKS0+aGFzRWRpdGFibGVTdHls
ZSgpKSAvLyBXZSBjYW4ndCBvdXRkZW50IGlmIHRoZXJlIGlzIG5vIHBsYWNlIHRvIGdvIQotICAg
ICAgICAgICAgICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4oc3BsaXRQb2lu
dFBhcmVudCksIHNwbGl0UG9pbnQpOworICAgICAgICAgICAgICAgICAgICBzcGxpdEVsZW1lbnQo
ZG93bmNhc3Q8RWxlbWVudD4oKnNwbGl0UG9pbnRQYXJlbnQpLCAqc3BsaXRQb2ludCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgSW5kZW50T3V0
ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgoKQogICAgIGVsc2UgewogICAgICAgICAvLyBX
ZSBzcGxpdCB0aGUgYmxvY2txdW90ZSBhdCB3aGVyZSB3ZSBzdGFydCBvdXRkZW50aW5nLgogICAg
ICAgICBhdXRvKiBoaWdoZXN0SW5saW5lTm9kZSA9IGhpZ2hlc3RFbmNsb3NpbmdOb2RlT2ZUeXBl
KHZpc2libGVTdGFydE9mUGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCksIGlzSW5saW5lLCBDYW5u
b3RDcm9zc0VkaXRpbmdCb3VuZGFyeSwgZW5jbG9zaW5nQmxvY2tGbG93KTsKLSAgICAgICAgc3Bs
aXRFbGVtZW50KGVuY2xvc2luZ05vZGUsIGhpZ2hlc3RJbmxpbmVOb2RlID8gaGlnaGVzdElubGlu
ZU5vZGUgOiB2aXNpYmxlU3RhcnRPZlBhcmFncmFwaC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCkpOworICAgICAgICBzcGxpdEVsZW1lbnQoKmVuY2xvc2luZ05vZGUsIGhpZ2hlc3RJ
bmxpbmVOb2RlID8gKmhpZ2hlc3RJbmxpbmVOb2RlIDogKnZpc2libGVTdGFydE9mUGFyYWdyYXBo
LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiAgICAgfQogICAgIGF1dG8gcGxh
Y2Vob2xkZXIgPSBIVE1MQlJFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQoKSk7CiAgICAgYXV0byog
cGxhY2Vob2xkZXJQdHIgPSBwbGFjZWhvbGRlci5wdHIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCmluZGV4IGU0ODJmZmU3MDRlMmNh
OTljYzllYTE4OTkzYzZkYjY1NmJmMmNiMWEuLjE3NmQ4ZjA4OWFmNTAyNjZkZDg5OGZhOTc3NGY5
NzQxZGIzOTlkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlu
ZUJyZWFrQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5l
QnJlYWtDb21tYW5kLmNwcApAQCAtMTE1LDcgKzExNSw3IEBAIHZvaWQgSW5zZXJ0TGluZUJyZWFr
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgfSBlbHNlIGlmIChpczxUZXh0PigqcG9zaXRpb24uZGVw
cmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgLy8gU3BsaXQgYSB0ZXh0IG5vZGUKICAgICAgICAg
VGV4dCYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUo
KSk7Ci0gICAgICAgIHNwbGl0VGV4dE5vZGUoJnRleHROb2RlLCBwb3NpdGlvbi5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0Tm9kZSwgcG9zaXRp
b24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUo
Km5vZGVUb0luc2VydCwgdGV4dE5vZGUpOwogICAgICAgICBQb3NpdGlvbiBlbmRpbmdQb3NpdGlv
biA9IGZpcnN0UG9zaXRpb25Jbk5vZGUoJnRleHROb2RlKTsKICAgICAgICAgCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IGU0MGNiMTg3MDVjNDZh
ZmFmYzJjMzA4MjFkMmRlNDQ0OTVkOGRlZTIuLmI2Mjc2NzYyMDkwYmM3OGIxODVhMzk0MmU4YjY1
MzY5NDMzYmJiMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlz
dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1h
bmQuY3BwCkBAIC01OCw3ICs1OCw3IEBAIEhUTUxFbGVtZW50KiBJbnNlcnRMaXN0Q29tbWFuZDo6
Zml4T3JwaGFuZWRMaXN0Q2hpbGQoTm9kZSYgbm9kZSkKIHsKICAgICBhdXRvIGxpc3RFbGVtZW50
ID0gSFRNTFVMaXN0RWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwogICAgIGluc2VydE5vZGVC
ZWZvcmUobGlzdEVsZW1lbnQuY29weVJlZigpLCBub2RlKTsKLSAgICByZW1vdmVOb2RlKCZub2Rl
KTsKKyAgICByZW1vdmVOb2RlKG5vZGUpOwogICAgIGFwcGVuZE5vZGUobm9kZSwgbGlzdEVsZW1l
bnQuY29weVJlZigpKTsKICAgICBtX2xpc3RFbGVtZW50ID0gbGlzdEVsZW1lbnQuY29weVJlZigp
OwogICAgIHJldHVybiBsaXN0RWxlbWVudC5wdHIoKTsKQEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lk
IEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VD
cmVhdGVMaXN0LCBjb25zdCBIVAogICAgICAgICAgICAgLy8gU2VlIHRoZSBidWcgMzM2NjggYW5k
IGVkaXRpbmcvZXhlY0NvbW1hbmQvaW5zZXJ0LWxpc3Qtb3JwaGFuZWQtaXRlbS13aXRoLW5lc3Rl
ZC1saXN0cy5odG1sLgogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWlnaHQgYmUgYSBidWcg
aW4gbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMgb3IgZGVsZXRlU2VsZWN0aW9uLgogICAgICAgICAg
ICAgaWYgKGxpc3ROb2RlICYmIGxpc3ROb2RlLT5pc0Nvbm5lY3RlZCgpKQotICAgICAgICAgICAg
ICAgIHJlbW92ZU5vZGUobGlzdE5vZGUpOworICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoKmxp
c3ROb2RlKTsKIAogICAgICAgICAgICAgbmV3TGlzdCA9IG1lcmdlV2l0aE5laWdoYm9yaW5nTGlz
dHMobmV3TGlzdCk7CiAKQEAgLTMwMCw3ICszMDAsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5k
Ojp1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFN0YXJ0
LAogICAgICAgICAvLyBGSVhNRTogV2UgYXBwZWFyIHRvIHNwbGl0IGF0IG5leHRMaXN0Q2hpbGQg
YXMgb3Bwb3NlZCB0byBsaXN0Q2hpbGROb2RlIHNvIHRoYXQgd2hlbiB3ZSByZW1vdmUKICAgICAg
ICAgLy8gbGlzdENoaWxkTm9kZSBiZWxvdyBpbiBtb3ZlUGFyYWdyYXBocywgcHJldmlvdXNMaXN0
Q2hpbGQgd2lsbCBiZSByZW1vdmVkIGFsb25nIHdpdGggaXQgaWYgaXQgaXMgCiAgICAgICAgIC8v
IHVucmVuZGVyZWQuIEJ1dCB3ZSBvdWdodCB0byByZW1vdmUgbmV4dExpc3RDaGlsZCB0b28sIGlm
IGl0IGlzIHVucmVuZGVyZWQuCi0gICAgICAgIHNwbGl0RWxlbWVudChsaXN0Tm9kZSwgc3BsaXRU
cmVlVG9Ob2RlKG5leHRMaXN0Q2hpbGQsIGxpc3ROb2RlKSk7CisgICAgICAgIHNwbGl0RWxlbWVu
dCgqbGlzdE5vZGUsICpzcGxpdFRyZWVUb05vZGUobmV4dExpc3RDaGlsZCwgbGlzdE5vZGUpKTsK
ICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2RlVG9JbnNlcnQucmVsZWFzZU5vbk51bGwoKSwg
Kmxpc3ROb2RlKTsKICAgICB9IGVsc2UgaWYgKG5leHRMaXN0Q2hpbGQgfHwgbGlzdENoaWxkTm9k
ZS0+cGFyZW50Tm9kZSgpICE9IGxpc3ROb2RlKSB7CiAgICAgICAgIC8vIEp1c3QgYmVjYXVzZSBs
aXN0Q2hpbGROb2RlIGhhcyBubyBwcmV2aW91c0xpc3RDaGlsZCBkb2Vzbid0IG1lYW4gdGhlcmUg
aXNuJ3QgYW55IGNvbnRlbnQKQEAgLTMwOCw3ICszMDgsNyBAQCB2b2lkIEluc2VydExpc3RDb21t
YW5kOjp1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFN0
YXJ0LAogICAgICAgICAvLyBiZXR3ZWVuIGl0IGFuZCBsaXN0Tm9kZS4gU28sIHdlIHNwbGl0IHVw
IHRvIGxpc3ROb2RlIGJlZm9yZSBpbnNlcnRpbmcgdGhlIHBsYWNlaG9sZGVyCiAgICAgICAgIC8v
IHdoZXJlIHdlJ3JlIGFib3V0IHRvIG1vdmUgbGlzdENoaWxkTm9kZSB0by4KICAgICAgICAgaWYg
KGxpc3RDaGlsZE5vZGUtPnBhcmVudE5vZGUoKSAhPSBsaXN0Tm9kZSkKLSAgICAgICAgICAgIHNw
bGl0RWxlbWVudChsaXN0Tm9kZSwgc3BsaXRUcmVlVG9Ob2RlKGxpc3RDaGlsZE5vZGUsIGxpc3RO
b2RlKS5nZXQoKSk7CisgICAgICAgICAgICBzcGxpdEVsZW1lbnQoKmxpc3ROb2RlLCAqc3BsaXRU
cmVlVG9Ob2RlKGxpc3RDaGlsZE5vZGUsIGxpc3ROb2RlKS5nZXQoKSk7CiAgICAgICAgIGluc2Vy
dE5vZGVCZWZvcmUobm9kZVRvSW5zZXJ0LnJlbGVhc2VOb25OdWxsKCksICpsaXN0Tm9kZSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGluc2VydE5vZGVBZnRlcihub2RlVG9JbnNlcnQucmVsZWFzZU5v
bk51bGwoKSwgKmxpc3ROb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCmluZGV4IGU2MzFkNGJlZDRk
ZmE1MWUwYmY2NmZjMzAyYzBlNjFmZGYzMjI4MzAuLjg1ZGUxMmM4N2I4ZjM4MWYxYTlhY2ZkOGJm
NjYwN2JkYmMyYzliNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcApAQCAtMzQyLDExICszNDIsMTEg
QEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpkb0FwcGx5KCkKICAgICAv
LyBTcGxpdCBhdCBwb3MgaWYgaW4gdGhlIG1pZGRsZSBvZiBhIHRleHQgbm9kZS4KICAgICBQb3Np
dGlvbiBwb3NpdGlvbkFmdGVyU3BsaXQ7CiAgICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmFuY2hv
clR5cGUoKSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yICYmIGlzPFRleHQ+
KCppbnNlcnRpb25Qb3NpdGlvbi5jb250YWluZXJOb2RlKCkpKSB7Ci0gICAgICAgIFJlZlB0cjxU
ZXh0PiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KGluc2VydGlvblBvc2l0aW9uLmNvbnRhaW5l
ck5vZGUoKSk7CisgICAgICAgIFJlZjxUZXh0PiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpp
bnNlcnRpb25Qb3NpdGlvbi5jb250YWluZXJOb2RlKCkpOwogICAgICAgICBib29sIGF0RW5kID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpKSA+PSB0ZXh0Tm9kZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3Np
dGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCAmJiAhYXRFbmQpIHsKICAgICAgICAg
ICAgIHNwbGl0VGV4dE5vZGUodGV4dE5vZGUsIGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKTsKLSAgICAgICAgICAgIHBvc2l0aW9uQWZ0ZXJTcGxpdCA9IGZpcnN0UG9z
aXRpb25Jbk5vZGUodGV4dE5vZGUuZ2V0KCkpOworICAgICAgICAgICAgcG9zaXRpb25BZnRlclNw
bGl0ID0gZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0Tm9kZS5wdHIoKSk7CiAgICAgICAgICAgICBp
ZiAoIXRleHROb2RlLT5wcmV2aW91c1NpYmxpbmcoKSkKICAgICAgICAgICAgICAgICByZXR1cm47
IC8vIEJhaWwgb3V0IGlmIG11dGF0aW9uIGV2ZW50cyBkZXRhY2hkIHRoZSBzcGxpdCB0ZXh0IG5v
ZGUuCiAgICAgICAgICAgICBpbnNlcnRpb25Qb3NpdGlvbi5tb3ZlVG9Qb3NpdGlvbih0ZXh0Tm9k
ZS0+cHJldmlvdXNTaWJsaW5nKCksIGluc2VydGlvblBvc2l0aW9uLm9mZnNldEluQ29udGFpbmVy
Tm9kZSgpKTsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAg
bW92ZVJlbWFpbmluZ1NpYmxpbmdzVG9OZXdQYXJlbnQobiwgYmxvY2tUb0luc2VydC5nZXQoKSwg
YmxvY2tUb0luc2VydCk7CisgICAgICAgIG1vdmVSZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50
KG4sIGJsb2NrVG9JbnNlcnQuZ2V0KCksICpibG9ja1RvSW5zZXJ0KTsKICAgICB9ICAgICAgICAg
ICAgCiAKICAgICAvLyBIYW5kbGUgd2hpdGVzcGFjZSB0aGF0IG9jY3VycyBhZnRlciB0aGUgc3Bs
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKaW5kZXgg
OGMwOTFlNzQzZTEzNmUyNmU5NWUzODExMTAyMGJhZDE5NThlYTUwYS4uMTc1NWVmMGQ4ZDU1Y2U4
ZWE2YTFhYWE2YzY4YWZjY2IyNGY1OWZjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9J
bnNlcnRUZXh0Q29tbWFuZC5jcHAKQEAgLTI2Nyw3ICsyNjcsNyBAQCBQb3NpdGlvbiBJbnNlcnRU
ZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKGNvbnN0IFBvc2l0aW9uJiBwb3MpCiAgICAgICAgICAgICAv
LyBzZWNvbmQgbm9kZSBpbiB0aGUgc3BsaXQsIHNvIHdlIG5lZWQgdG8KICAgICAgICAgICAgIC8v
IGluc2VydCB0aGUgc3BhbiBiZWZvcmUgaXQuCiAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkK
LSAgICAgICAgICAgICAgICBzcGxpdFRleHROb2RlKHRleHROb2RlLnB0cigpLCBvZmZzZXQpOwor
ICAgICAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUodGV4dE5vZGUsIG9mZnNldCk7CiAgICAgICAg
ICAgICBpbnNlcnROb2RlQmVmb3JlKFdURk1vdmUoc3Bhbk5vZGUpLCB0ZXh0Tm9kZSk7CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNl
bGVjdGlvbkxpc3RMZXZlbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01vZGlmeVNlbGVj
dGlvbkxpc3RMZXZlbC5jcHAKaW5kZXggMjM5Mjk0NTViYjEzZGRmMDJjNzQ3ZmY5YmU0ZjQwNDhm
YzFjYzEyMS4uNTEzY2RiMDQzNDZlOGZkMTg5YWI2Mzk1Mjk4MTI3ODJhMzgwNTU5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Nb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNw
cApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6
Omluc2VydFNpYmxpbmdOb2RlUmFuZ2VCZWZvcmUoTm9kZSogc3RhcnRObwogICAgIE5vZGUqIG5v
ZGUgPSBzdGFydE5vZGU7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgTm9kZSogbmV4dCA9IG5v
ZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CisgICAgICAgIHJl
bW92ZU5vZGUoKm5vZGUpOwogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKCpub2RlLCAqcmVmTm9k
ZSk7CiAKICAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2
b2lkIE1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6Omluc2VydFNpYmxpbmdOb2RlUmFu
Z2VBZnRlcihOb2RlKiBzdGFydE5vZAogICAgIE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7CiAgICAg
d2hpbGUgKDEpIHsKICAgICAgICAgTm9kZSogbmV4dCA9IG5vZGUtPm5leHRTaWJsaW5nKCk7Ci0g
ICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CisgICAgICAgIHJlbW92ZU5vZGUoKm5vZGUpOwogICAg
ICAgICBpbnNlcnROb2RlQWZ0ZXIoKm5vZGUsICpyZWZOb2RlKTsKIAogICAgICAgICBpZiAobm9k
ZSA9PSBlbmROb2RlKQpAQCAtMTI1LDcgKzEyNSw3IEBAIHZvaWQgTW9kaWZ5U2VsZWN0aW9uTGlz
dExldmVsQ29tbWFuZDo6YXBwZW5kU2libGluZ05vZGVSYW5nZShOb2RlKiBzdGFydE5vZGUsIE5v
CiAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBO
b2RlKiBuZXh0ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgcmVtb3ZlTm9kZShub2Rl
KTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgIGFwcGVuZE5vZGUoKm5vZGUs
ICpuZXdQYXJlbnQpOwogCiAgICAgICAgIGlmIChub2RlID09IGVuZE5vZGUpCkBAIC0yNjcsMTQg
KzI2NywxNCBAQCB2b2lkIERlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgICAgIC8vIGF0IHN0YXJ0IG9mIHN1Ymxpc3QsIG1vdmUgdGhlIGNoaWxkKHJlbikg
dG8gYmVmb3JlIHRoZSBzdWJsaXN0CiAgICAgICAgIGluc2VydFNpYmxpbmdOb2RlUmFuZ2VCZWZv
cmUoc3RhcnRMaXN0Q2hpbGQsIGVuZExpc3RDaGlsZCwgbGlzdE5vZGUpOwogICAgICAgICAvLyBp
ZiB0aGF0IHdhcyB0aGUgd2hvbGUgc3VibGlzdCB3ZSBtb3ZlZCwgcmVtb3ZlIHRoZSBzdWJsaXN0
IG5vZGUKLSAgICAgICAgaWYgKCFuZXh0SXRlbSkKLSAgICAgICAgICAgIHJlbW92ZU5vZGUobGlz
dE5vZGUpOworICAgICAgICBpZiAoIW5leHRJdGVtICYmIGxpc3ROb2RlKQorICAgICAgICAgICAg
cmVtb3ZlTm9kZSgqbGlzdE5vZGUpOwogICAgIH0gZWxzZSBpZiAoIW5leHRJdGVtKSB7CiAgICAg
ICAgIC8vIGF0IGVuZCBvZiBsaXN0LCBtb3ZlIHRoZSBjaGlsZChyZW4pIHRvIGFmdGVyIHRoZSBz
dWJsaXN0CiAgICAgICAgIGluc2VydFNpYmxpbmdOb2RlUmFuZ2VBZnRlcihzdGFydExpc3RDaGls
ZCwgZW5kTGlzdENoaWxkLCBsaXN0Tm9kZSk7ICAgIAogICAgIH0gZWxzZSBpZiAobGlzdE5vZGUp
IHsKICAgICAgICAgLy8gaW4gdGhlIG1pZGRsZSBvZiBsaXN0LCBzcGxpdCB0aGUgbGlzdCBhbmQg
bW92ZSB0aGUgY2hpbGRyZW4gdG8gdGhlIGRpdmlkZQotICAgICAgICBzcGxpdEVsZW1lbnQobGlz
dE5vZGUsIHN0YXJ0TGlzdENoaWxkKTsKKyAgICAgICAgc3BsaXRFbGVtZW50KCpsaXN0Tm9kZSwg
KnN0YXJ0TGlzdENoaWxkKTsKICAgICAgICAgaW5zZXJ0U2libGluZ05vZGVSYW5nZUJlZm9yZShz
dGFydExpc3RDaGlsZCwgZW5kTGlzdENoaWxkLCBsaXN0Tm9kZSk7CiAgICAgfQogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVu
Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW5Db21tYW5kLmNwcAppbmRleCBiNjE2NDQzOTNiODZhZWVkNzM1NGE4NjBiMjZhYjkw
MWFhNzQ2NGU0Li4zNGI5ZWY3NzczMjFlYjgyNWU5ZTgzZDI1Yjk4OWI1YmNkNDcxZmVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW5Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVz
ZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcApAQCAtMzEsMTIgKzMxLDExIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OlJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgU2hv
dWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3
YXlzRWRpdGFibGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKK1JlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW5Db21tYW5kOjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChS
ZWY8Tm9kZT4mJiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91
bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9u
KQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQobm9kZS0+ZG9jdW1lbnQoKSwgZWRpdGluZ0Fj
dGlvbikKLSAgICAsIG1fbm9kZShub2RlKQorICAgICwgbV9ub2RlKFdURk1vdmUobm9kZSkpCiAg
ICAgLCBtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKHNob3VsZEFzc3VtZUNv
bnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQogewotICAgIEFTU0VSVChtX25vZGUpOwogfQogCiB2b2lk
IFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpkb0FwcGx5KCkKQEAgLTQ4LDgg
KzQ3LDggQEAgdm9pZCBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6ZG9BcHBs
eSgpCiAgICAgc2l6ZV90IHNpemUgPSBjaGlsZHJlbi5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgYXV0byBjaGlsZCA9IFdURk1vdmUoY2hp
bGRyZW5baV0pOwotICAgICAgICByZW1vdmVOb2RlKGNoaWxkLnB0cigpLCBtX3Nob3VsZEFzc3Vt
ZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKLSAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShXVEZN
b3ZlKGNoaWxkKSwgKm1fbm9kZSwgbV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSk7CisgICAgICAgIHJlbW92ZU5vZGUoY2hpbGQsIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3
YXlzRWRpdGFibGUpOworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKFdURk1vdmUoY2hpbGQpLCBt
X25vZGUsIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIH0KICAg
ICByZW1vdmVOb2RlKG1fbm9kZSwgbV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVz
ZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmgKaW5kZXggMDdlYTA4OGJhYzQzYmFkMDhhZGYx
ZWVjMzUwMDhkNDJkODcyYzIyNy4uZGQ4NWNjOWI4MzIyZGM1M2JjYTU5ZTAwYzk5MjJiOTFiMzc1
ZmEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaApAQCAtMzEsMTcgKzMxLDE3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1h
bmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8UmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRy
PE5vZGU+IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFz
c3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCisg
ICAgc3RhdGljIFJlZjxSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZD4gY3JlYXRl
KFJlZjxOb2RlPiYmIG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNo
b3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24pCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuQ29tbWFuZChub2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0
YWJsZSwgZWRpdGluZ0FjdGlvbikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChXVEZNb3ZlKG5vZGUpLCBzaG91bGRBc3N1
bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgZWRpdGluZ0FjdGlvbikpOwogICAgIH0KIAogcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChQ
YXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgRWRp
dEFjdGlvbik7CisgICAgZXhwbGljaXQgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1h
bmQoUmVmPE5vZGU+JiYsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBFZGl0
QWN0aW9uKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPE5v
ZGU+IG1fbm9kZTsKKyAgICBSZWY8Tm9kZT4gbV9ub2RlOwogICAgIFNob3VsZEFzc3VtZUNvbnRl
bnRJc0Fsd2F5c0VkaXRhYmxlIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGU7
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0
aFNwYW5Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRo
U3BhbkNvbW1hbmQuY3BwCmluZGV4IGIzMjkyY2UxYzhjODQwNTg3ZTM3MjA4MmM5YTI4ZmJhMmM2
YjdiNjYuLjcyMGYyY2RkMjFlYjBmZWNiMzgwMDBlYmQ4MjQ1YmZiM2IxMWY2MjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQu
Y3BwCkBAIC0zNiwxMSArMzYsMTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZDo6UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQoUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gZWxlbWVudCkKK1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpSZXBs
YWNlTm9kZVdpdGhTcGFuQ29tbWFuZChSZWY8SFRNTEVsZW1lbnQ+JiYgZWxlbWVudCkKICAgICA6
IFNpbXBsZUVkaXRDb21tYW5kKGVsZW1lbnQtPmRvY3VtZW50KCkpCi0gICAgLCBtX2VsZW1lbnRU
b1JlcGxhY2UoZWxlbWVudCkKKyAgICAsIG1fZWxlbWVudFRvUmVwbGFjZShXVEZNb3ZlKGVsZW1l
bnQpKQogewotICAgIEFTU0VSVChtX2VsZW1lbnRUb1JlcGxhY2UpOwogfQogCiBzdGF0aWMgdm9p
ZCBzd2FwSW5Ob2RlUHJlc2VydmluZ0F0dHJpYnV0ZXNBbmRDaGlsZHJlbihIVE1MRWxlbWVudCYg
bmV3Tm9kZSwgSFRNTEVsZW1lbnQmIG5vZGVUb1JlcGxhY2UpCkBAIC02NSwyMCArNjQsMjAgQEAg
dm9pZCBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAoIW1fc3BhbkVsZW1lbnQpCiAgICAgICAgIG1fc3BhbkVsZW1lbnQgPSBIVE1M
U3BhbkVsZW1lbnQ6OmNyZWF0ZShtX2VsZW1lbnRUb1JlcGxhY2UtPmRvY3VtZW50KCkpOwotICAg
IHN3YXBJbk5vZGVQcmVzZXJ2aW5nQXR0cmlidXRlc0FuZENoaWxkcmVuKCptX3NwYW5FbGVtZW50
LCAqbV9lbGVtZW50VG9SZXBsYWNlKTsKKyAgICBzd2FwSW5Ob2RlUHJlc2VydmluZ0F0dHJpYnV0
ZXNBbmRDaGlsZHJlbigqbV9zcGFuRWxlbWVudCwgbV9lbGVtZW50VG9SZXBsYWNlKTsKIH0KIAog
dm9pZCBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKICAgICBpZiAo
IW1fc3BhbkVsZW1lbnQtPmlzQ29ubmVjdGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzd2Fw
SW5Ob2RlUHJlc2VydmluZ0F0dHJpYnV0ZXNBbmRDaGlsZHJlbigqbV9lbGVtZW50VG9SZXBsYWNl
LCAqbV9zcGFuRWxlbWVudCk7CisgICAgc3dhcEluTm9kZVByZXNlcnZpbmdBdHRyaWJ1dGVzQW5k
Q2hpbGRyZW4obV9lbGVtZW50VG9SZXBsYWNlLCAqbV9zcGFuRWxlbWVudCk7CiB9CiAKICNpZm5k
ZWYgTkRFQlVHCiB2b2lkIFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpnZXROb2Rlc0luQ29t
bWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMpCiB7Ci0gICAgYWRkTm9kZUFuZERlc2NlbmRhbnRz
KG1fZWxlbWVudFRvUmVwbGFjZS5nZXQoKSwgbm9kZXMpOworICAgIGFkZE5vZGVBbmREZXNjZW5k
YW50cyhtX2VsZW1lbnRUb1JlcGxhY2UucHRyKCksIG5vZGVzKTsKICAgICBhZGROb2RlQW5kRGVz
Y2VuZGFudHMobV9zcGFuRWxlbWVudC5nZXQoKSwgbm9kZXMpOwogfQogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgKaW5k
ZXggYjU2NGM2NmVjMmFjNGQ0MWIwMWQzNjBmYTc2NmQzODk0OTkwZGIyZS4uZTVkMzBmYzVmMjcx
NjBkZmM3N2ZiOTk1OTRjMGJiZGM2MDY5OTBjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuaApAQCAtMzksMTUgKzM5LDE1IEBA
IGNsYXNzIEhUTUxFbGVtZW50OwogLy8gTW9yZSBhY2N1cmF0ZWx5LCB0aGlzIGlzIFJlcGxhY2VF
bGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzQ29tbWFuZAogY2xh
c3MgUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ+IGNy
ZWF0ZShQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBlbGVtZW50KQorICAgIHN0YXRpYyBSZWY8UmVw
bGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ+IGNyZWF0ZShSZWY8SFRNTEVsZW1lbnQ+JiYgZWxlbWVu
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlcGxhY2VOb2RlV2l0aFNw
YW5Db21tYW5kKGVsZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVwbGFj
ZU5vZGVXaXRoU3BhbkNvbW1hbmQoV1RGTW92ZShlbGVtZW50KSkpOwogICAgIH0KIAogICAgIEhU
TUxFbGVtZW50KiBzcGFuRWxlbWVudCgpIHsgcmV0dXJuIG1fc3BhbkVsZW1lbnQuZ2V0KCk7IH0K
IAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZChQYXNz
UmVmUHRyPEhUTUxFbGVtZW50Pik7CisgICAgZXhwbGljaXQgUmVwbGFjZU5vZGVXaXRoU3BhbkNv
bW1hbmQoUmVmPEhUTUxFbGVtZW50PiYmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRl
OwogICAgIHZvaWQgZG9VbmFwcGx5KCkgb3ZlcnJpZGU7CkBAIC01Niw3ICs1Niw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYpIG92ZXJyaWRl
OwogI2VuZGlmCiAKLSAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fZWxlbWVudFRvUmVwbGFjZTsK
KyAgICBSZWY8SFRNTEVsZW1lbnQ+IG1fZWxlbWVudFRvUmVwbGFjZTsKICAgICBSZWZQdHI8SFRN
TEVsZW1lbnQ+IG1fc3BhbkVsZW1lbnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDQwOTRmNTg5MjVhYmY1MGJh
NDk5ODIwMTNjNmQ3MGUwYjE2OWQ0ZTkuLjE1Y2MwMTU1NDMwZmJjNTI5ZTJjNTJiMTg3MjYwNmJl
MjdiMmU0MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwCkBAIC05MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0lu
dGVyY2hhbmdlTmV3bGluZUF0RW5kKCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRlcmNoYW5nZU5l
d2xpbmVBdEVuZDsgfQogICAgIAogICAgIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+
KTsKLSAgICB2b2lkIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2Rl
Pik7CisgICAgdm9pZCByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUmKTsKIAogcHJp
dmF0ZToKICAgICBSZWY8SFRNTEVsZW1lbnQ+IGluc2VydEZyYWdtZW50Rm9yVGVzdFJlbmRlcmlu
ZyhOb2RlKiByb290RWRpdGFibGVOb2RlKTsKQEAgLTIyNCwxNiArMjI0LDEzIEBAIE5vZGUgKlJl
cGxhY2VtZW50RnJhZ21lbnQ6Omxhc3RDaGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhZ21l
bnQgPyBtX2ZyYWdtZW50LT5sYXN0Q2hpbGQoKSA6IDA7IAogfQogCi12b2lkIFJlcGxhY2VtZW50
RnJhZ21lbnQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPiBu
b2RlKQordm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuKE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICB3aGlsZSAoUmVmUHRyPE5vZGU+IG4gPSBub2RlLT5maXJzdENoaWxkKCkpIHsKKyAgICB3aGls
ZSAoUmVmUHRyPE5vZGU+IG4gPSBub2RlLmZpcnN0Q2hpbGQoKSkgewogICAgICAgICByZW1vdmVO
b2RlKG4pOwotICAgICAgICBpbnNlcnROb2RlQmVmb3JlKFdURk1vdmUobiksIG5vZGUuZ2V0KCkp
OworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKFdURk1vdmUobiksICZub2RlKTsKICAgICB9Ci0g
ICAgcmVtb3ZlTm9kZShXVEZNb3ZlKG5vZGUpKTsKKyAgICByZW1vdmVOb2RlKCZub2RlKTsKIH0K
IAogdm9pZCBSZXBsYWNlbWVudEZyYWdtZW50OjpyZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4g
bm9kZSkKQEAgLTMzMiw3ICszMjksNyBAQCB2b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92
ZUludGVyY2hhbmdlTm9kZXMoTm9kZSogY29udGFpbmVyKQogICAgICAgICBSZWZQdHI8Tm9kZT4g
bmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpOwogICAgICAgICBpZiAoaXNJbnRlcmNo
YW5nZUNvbnZlcnRlZFNwYWNlU3Bhbihub2RlKSkgewogICAgICAgICAgICAgbmV4dCA9IE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKCpub2RlKTsKLSAgICAgICAgICAgIHJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obm9kZSk7CisgICAgICAgICAgICByZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuKCpub2RlKTsKICAgICAgICAgfQogICAgICAgICBub2RlID0gbmV4dC5n
ZXQoKTsKICAgICB9CkBAIC01MDMsNyArNTAwLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShJbnNlcnQK
IAogICAgICAgICAgICAgICAgIGlmIChuZXdJbmxpbmVTdHlsZS0+Y29uZmxpY3RzV2l0aEltcGxp
Y2l0U3R5bGVPZkVsZW1lbnQoJmh0bWxFbGVtZW50KSkgewogICAgICAgICAgICAgICAgICAgICAv
LyBlLmcuIDxiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyI+IGlzIGNvbnZlcnRlZCB0byA8
c3BhbiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPgotICAgICAgICAgICAgICAgICAgICBu
b2RlID0gcmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0
ZXMoJmh0bWxFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHJlcGxhY2VFbGVt
ZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKGh0bWxFbGVtZW50KTsK
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KG5v
ZGUuZ2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZE5vZGVzLmRpZFJlcGxhY2VO
b2RlKCZodG1sRWxlbWVudCwgbm9kZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChuZXdJbmxpbmVTdHlsZS0+ZXh0cmFjdENvbmZsaWN0aW5nSW1wbGljaXRTdHlsZU9mQXR0cmli
dXRlcygmaHRtbEVsZW1lbnQsIEVkaXRpbmdTdHlsZTo6UHJlc2VydmVXcml0aW5nRGlyZWN0aW9u
LCAwLCBhdHRyaWJ1dGVzLApAQCAtNTI4LDE5ICs1MjUsMTkgQEAgdm9pZCBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShJ
bnNlcnQKICAgICAgICAgaWYgKCFpbmxpbmVTdHlsZSB8fCBuZXdJbmxpbmVTdHlsZS0+aXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBpZiAoaXNTdHlsZVNwYW5PclNwYW5XaXRoT25seVN0eWxlQXR0
cmlidXRlKCplbGVtZW50KSB8fCBpc0VtcHR5Rm9udFRhZyhlbGVtZW50LCBBbGxvd05vbkVtcHR5
U3R5bGVBdHRyaWJ1dGUpKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKLSAgICAgICAgICAgICAgICByZW1v
dmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIHJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0ZSgqZWxl
bWVudCwgc3R5bGVBdHRyKTsKICAgICAgICAgfSBlbHNlIGlmIChuZXdJbmxpbmVTdHlsZS0+c3R5
bGUoKS0+cHJvcGVydHlDb3VudCgpICE9IGlubGluZVN0eWxlLT5wcm9wZXJ0eUNvdW50KCkpCi0g
ICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5l
U3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKKyAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUo
KmVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsK
IAogICAgICAgICAvLyBGSVhNRTogVG9sZXJhdGUgZGlmZmVyZW5jZXMgaW4gaWQsIGNsYXNzLCBh
bmQgc3R5bGUgYXR0cmlidXRlcy4KICAgICAgICAgaWYgKGVsZW1lbnQtPnBhcmVudE5vZGUoKSAm
JiBpc05vblRhYmxlQ2VsbEhUTUxCbG9ja0VsZW1lbnQoZWxlbWVudCkgJiYgYXJlSWRlbnRpY2Fs
RWxlbWVudHMoKmVsZW1lbnQsICplbGVtZW50LT5wYXJlbnROb2RlKCkpCiAgICAgICAgICAgICAm
JiBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShlbGVtZW50LT5wYXJlbnROb2Rl
KCkpKSA9PSBWaXNpYmxlUG9zaXRpb24oZmlyc3RQb3NpdGlvbkluTm9kZShlbGVtZW50KSkKICAg
ICAgICAgICAgICYmIFZpc2libGVQb3NpdGlvbihsYXN0UG9zaXRpb25Jbk5vZGUoZWxlbWVudC0+
cGFyZW50Tm9kZSgpKSkgPT0gVmlzaWJsZVBvc2l0aW9uKGxhc3RQb3NpdGlvbkluTm9kZShlbGVt
ZW50KSkpIHsKICAgICAgICAgICAgIGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGVQcmVzZXJ2
aW5nQ2hpbGRyZW4oZWxlbWVudCk7Ci0gICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuKGVsZW1lbnQpOworICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bigqZWxlbWVudCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC01NTIs
NyArNTQ5LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlUmVkdW5kYW50
U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZShJbnNlcnQKICAgICAgICAgaWYgKGlzTGVnYWN5
QXBwbGVTdHlsZVNwYW4oZWxlbWVudCkpIHsKICAgICAgICAgICAgIGlmICghZWxlbWVudC0+Zmly
c3RDaGlsZCgpKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKLSAgICAgICAgICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOworICAgICAgICAgICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oKmVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gVGhlcmUgYXJlIG90aGVyIHN0eWxlcyB0aGF0
IHN0eWxlIHJ1bGVzIGNhbiBnaXZlIHRvIHN0eWxlIHNwYW5zLApAQCAtNjUyLDcgKzY0OSw3IEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VJbnNlcnRlZENvbnRlbnRSb3VuZFRy
aXBwYWJsZVdpdGhIVE1MVHJlZUJ1aWxkCiAgICAgICAgICAgICAgICAgaWYgKGhlYWRlckVsZW1l
bnQtPnBhcmVudE5vZGUoKSAmJiBoZWFkZXJFbGVtZW50LT5wYXJlbnROb2RlKCktPmlzQ29udGVu
dFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgICAgICAgICAgICAgIG1vdmVOb2RlT3V0T2ZBbmNl
c3Rvcihub2RlLCBoZWFkZXJFbGVtZW50LCBpbnNlcnRlZE5vZGVzKTsKICAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgSFRNTEVsZW1lbnQqIG5ld1NwYW5FbGVtZW50
ID0gcmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMo
ZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
SFRNTEVsZW1lbnQqIG5ld1NwYW5FbGVtZW50ID0gcmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNl
cnZpbmdDaGlsZHJlbkFuZEF0dHJpYnV0ZXMoZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KCpub2RlKSk7
CiAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkTm9kZXMuZGlkUmVwbGFjZU5vZGUobm9kZS5n
ZXQoKSwgbmV3U3BhbkVsZW1lbnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTY2OCwxOSArNjY1LDE5IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1vdmVO
b2RlT3V0T2ZBbmNlc3RvcihQYXNzUmVmUHRyPE5vZGU+IHBycE5vZGUsIFBhCiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHBvc2l0aW9uQXRFbmRPZk5vZGUgPSBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2Rl
KG5vZGUuZ2V0KCkpOwogICAgIFZpc2libGVQb3NpdGlvbiBsYXN0UG9zaXRpb25JblBhcmFncmFw
aCA9IGxhc3RQb3NpdGlvbkluTm9kZShhbmNlc3Rvci5nZXQoKSk7CiAgICAgaWYgKHBvc2l0aW9u
QXRFbmRPZk5vZGUgPT0gbGFzdFBvc2l0aW9uSW5QYXJhZ3JhcGgpIHsKLSAgICAgICAgcmVtb3Zl
Tm9kZShub2RlKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgIGlmIChhbmNl
c3Rvci0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9kZS5y
ZWxlYXNlTm9uTnVsbCgpLCAqYW5jZXN0b3ItPm5leHRTaWJsaW5nKCkpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBhcHBlbmROb2RlKG5vZGUucmVsZWFzZU5vbk51bGwoKSwgKmFuY2VzdG9y
LT5wYXJlbnROb2RlKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFJlZlB0cjxOb2RlPiBub2Rl
VG9TcGxpdFRvID0gc3BsaXRUcmVlVG9Ob2RlKG5vZGUuZ2V0KCksIGFuY2VzdG9yLmdldCgpLCB0
cnVlKTsKLSAgICAgICAgcmVtb3ZlTm9kZShub2RlKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbm9k
ZSk7CiAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9kZS5yZWxlYXNlTm9uTnVsbCgpLCAqbm9k
ZVRvU3BsaXRUbyk7CiAgICAgfQogICAgIGlmICghYW5jZXN0b3ItPmZpcnN0Q2hpbGQoKSkgewog
ICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlKGFuY2VzdG9yLmdldCgpKTsKLSAg
ICAgICAgcmVtb3ZlTm9kZShXVEZNb3ZlKGFuY2VzdG9yKSk7CisgICAgICAgIHJlbW92ZU5vZGUo
KmFuY2VzdG9yKTsKICAgICB9CiB9CiAKQEAgLTY5OCw3ICs2OTUsNyBAQCB2b2lkIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRzKEluc2VydGVk
Tm9kZXMmIGlucwogICAgICAgICAmJiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3Np
dGlvbkluT3JCZWZvcmVOb2RlKGxhc3RMZWFmSW5zZXJ0ZWQpLCBzZWxlY3RUYWcpCiAgICAgICAg
ICYmICFlbmNsb3NpbmdFbGVtZW50V2l0aFRhZyhmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
bGFzdExlYWZJbnNlcnRlZCksIHNjcmlwdFRhZykpIHsKICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53
aWxsUmVtb3ZlTm9kZShsYXN0TGVhZkluc2VydGVkKTsKLSAgICAgICAgcmVtb3ZlTm9kZShsYXN0
TGVhZkluc2VydGVkKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbGFzdExlYWZJbnNlcnRlZCk7CiAg
ICAgfQogCiAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBmaXJzdE5vZGVJ
bnNlcnRlZCBpc24ndCBpbnNpZGUgYSBzZWxlY3Qgb3Igc2NyaXB0IGVsZW1lbnQKQEAgLTcwNiw3
ICs3MDMsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVk
VGV4dE5vZGVzQXRFbmRzKEluc2VydGVkTm9kZXMmIGlucwogICAgIE5vZGUqIGZpcnN0Tm9kZUlu
c2VydGVkID0gaW5zZXJ0ZWROb2Rlcy5maXJzdE5vZGVJbnNlcnRlZCgpOwogICAgIGlmIChpczxU
ZXh0PihmaXJzdE5vZGVJbnNlcnRlZCkgJiYgIWhhc1JlbmRlcmVkVGV4dChkb3duY2FzdDxUZXh0
PigqZmlyc3ROb2RlSW5zZXJ0ZWQpKSkgewogICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1v
dmVOb2RlKGZpcnN0Tm9kZUluc2VydGVkKTsKLSAgICAgICAgcmVtb3ZlTm9kZShmaXJzdE5vZGVJ
bnNlcnRlZCk7CisgICAgICAgIHJlbW92ZU5vZGUoKmZpcnN0Tm9kZUluc2VydGVkKTsKICAgICB9
CiB9CiAKQEAgLTc2OSw3ICs3NjYsNyBAQCBzdGF0aWMgYm9vbCBoYW5kbGVTdHlsZVNwYW5zQmVm
b3JlSW5zZXJ0aW9uKFJlcGxhY2VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBjb25zdAogICAgIGlm
IChzdHlsZVRleHQgIT0gZG93bmNhc3Q8RWxlbWVudD4oKndyYXBwaW5nU3R5bGVTcGFuKS5nZXRB
dHRyaWJ1dGUoc3R5bGVBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZnJhZ21l
bnQucmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbih3cmFwcGluZ1N0eWxlU3Bhbik7CisgICAg
ZnJhZ21lbnQucmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigqd3JhcHBpbmdTdHlsZVNwYW4p
OwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC04MjAsOSArODE3LDkgQEAgdm9pZCBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3R5bGVTcGFucyhJbnNlcnRlZE5vZGVzJiBpbnNlcnRl
ZE5vZGVzKQogCiAgICAgaWYgKHN0eWxlLT5pc0VtcHR5KCkgfHwgIXdyYXBwaW5nU3R5bGVTcGFu
LT5maXJzdENoaWxkKCkpIHsKICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZVBy
ZXNlcnZpbmdDaGlsZHJlbih3cmFwcGluZ1N0eWxlU3Bhbik7Ci0gICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4od3JhcHBpbmdTdHlsZVNwYW4pOworICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKCp3cmFwcGluZ1N0eWxlU3Bhbik7CiAgICAgfSBlbHNlCi0gICAg
ICAgIHNldE5vZGVBdHRyaWJ1dGUod3JhcHBpbmdTdHlsZVNwYW4sIHN0eWxlQXR0ciwgc3R5bGUt
PnN0eWxlKCktPmFzVGV4dCgpKTsKKyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgqd3JhcHBpbmdT
dHlsZVNwYW4sIHN0eWxlQXR0ciwgc3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKIH0KIAogdm9p
ZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VFbmRJZk5lZWRlZCgpCkBAIC0xMDE4LDcg
KzEwMTUsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAg
ICAgQVNTRVJUKGJyLT5oYXNUYWdOYW1lKGJyVGFnKSk7IAogICAgICAgICAvLyBJbnNlcnQgY29u
dGVudCBiZXR3ZWVuIHRoZSB0d28gYmxvY2txdW90ZXMsIGJ1dCByZW1vdmUgdGhlIGJyIChzaW5j
ZSBpdCB3YXMganVzdCBhIHBsYWNlaG9sZGVyKS4gCiAgICAgICAgIGluc2VydGlvblBvcyA9IHBv
c2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGJyKTsKLSAgICAgICAgcmVtb3ZlTm9kZShicik7Cisg
ICAgICAgIHJlbW92ZU5vZGUoKmJyKTsKICAgICB9CiAgICAgCiAgICAgLy8gSW5zZXJ0aW5nIGNv
bnRlbnQgY291bGQgY2F1c2Ugd2hpdGVzcGFjZSB0byBjb2xsYXBzZSwgZS5nLiBpbnNlcnRpbmcg
PGRpdj5mb288L2Rpdj4gaW50byBoZWxsb14gd29ybGQuCkBAIC0xMDc4LDcgKzEwNzUsNyBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKICAgICAvLyBzaW5jZSBpbnNl
cnRBc0xpc3RJdGVtcyBhbHJlYWR5IGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgogICAgIGlmICghbV9t
YXRjaFN0eWxlICYmICFlbmNsb3NpbmdMaXN0KGluc2VydGlvblBvcy5jb250YWluZXJOb2RlKCkp
KSB7CiAgICAgICAgIGlmIChpbnNlcnRpb25Qb3MuY29udGFpbmVyTm9kZSgpLT5pc1RleHROb2Rl
KCkgJiYgaW5zZXJ0aW9uUG9zLm9mZnNldEluQ29udGFpbmVyTm9kZSgpICYmICFpbnNlcnRpb25Q
b3MuYXRMYXN0RWRpdGluZ1Bvc2l0aW9uRm9yTm9kZSgpKSB7Ci0gICAgICAgICAgICBzcGxpdFRl
eHROb2RlKGluc2VydGlvblBvcy5jb250YWluZXJUZXh0KCksIGluc2VydGlvblBvcy5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgICAgICBzcGxpdFRleHROb2RlKCppbnNlcnRpb25Q
b3MuY29udGFpbmVyVGV4dCgpLCBpbnNlcnRpb25Qb3Mub2Zmc2V0SW5Db250YWluZXJOb2RlKCkp
OwogICAgICAgICAgICAgaW5zZXJ0aW9uUG9zID0gZmlyc3RQb3NpdGlvbkluTm9kZShpbnNlcnRp
b25Qb3MuY29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgfQogCkBAIC0xMTYyLDEwICsxMTU5LDEw
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIGlmIChlbmRC
UiAmJiAocGxhaW5UZXh0RnJhZ21lbnQgfHwgc2hvdWxkUmVtb3ZlRW5kQlIoZW5kQlIuZ2V0KCks
IG9yaWdpbmFsVmlzUG9zQmVmb3JlRW5kQlIpKSkgewogICAgICAgICBSZWZQdHI8Tm9kZT4gcGFy
ZW50ID0gZW5kQlItPnBhcmVudE5vZGUoKTsKICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVt
b3ZlTm9kZShlbmRCUi5nZXQoKSk7Ci0gICAgICAgIHJlbW92ZU5vZGUoZW5kQlIpOworICAgICAg
ICByZW1vdmVOb2RlKCplbmRCUik7CiAgICAgICAgIGlmIChOb2RlKiBub2RlVG9SZW1vdmUgPSBo
aWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVuaW5nKHBhcmVudC5nZXQoKSkpIHsKICAgICAgICAgICAg
IGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGUobm9kZVRvUmVtb3ZlKTsKLSAgICAgICAgICAg
IHJlbW92ZU5vZGUobm9kZVRvUmVtb3ZlKTsKKyAgICAgICAgICAgIHJlbW92ZU5vZGUoKm5vZGVU
b1JlbW92ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xNDQzLDcgKzE0NDAsNyBAQCB2
b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptZXJnZVRleHROb2Rlc0Fyb3VuZFBvc2l0aW9u
KFBvc2l0aW9uJiBwb3NpdGlvbiwgUAogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHVwZGF0
ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwocG9zaXRpb25Pbmx5VG9CZVVwZGF0ZWQsIHByZXZpb3Vz
LmdldCgpKTsKIAotICAgICAgICByZW1vdmVOb2RlKHByZXZpb3VzLnB0cigpKTsKKyAgICAgICAg
cmVtb3ZlTm9kZShwcmV2aW91cyk7CiAgICAgfQogICAgIGlmIChpczxUZXh0Pih0ZXh0LT5uZXh0
U2libGluZygpKSkgewogICAgICAgICBSZWY8VGV4dD4gbmV4dChkb3duY2FzdDxUZXh0PigqdGV4
dC0+bmV4dFNpYmxpbmcoKSkpOwpAQCAtMTQ1OCw3ICsxNDU1LDcgQEAgdm9pZCBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6bWVyZ2VUZXh0Tm9kZXNBcm91bmRQb3NpdGlvbihQb3NpdGlvbiYgcG9z
aXRpb24sIFAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2Rl
UmVtb3ZhbChwb3NpdGlvbk9ubHlUb0JlVXBkYXRlZCwgbmV4dC5nZXQoKSk7CiAKLSAgICAgICAg
cmVtb3ZlTm9kZShuZXh0LnB0cigpKTsKKyAgICAgICAgcmVtb3ZlTm9kZShuZXh0KTsKICAgICB9
CiB9CiAKQEAgLTE0ODEsNyArMTQ3OCw3IEBAIE5vZGUqIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjppbnNlcnRBc0xpc3RJdGVtcyhQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBwcnBMaXN0CiAgICAg
aWYgKGlzTWlkZGxlKSB7CiAgICAgICAgIGludCB0ZXh0Tm9kZU9mZnNldCA9IGluc2VydFBvcy5v
ZmZzZXRJbkNvbnRhaW5lck5vZGUoKTsKICAgICAgICAgaWYgKGlzPFRleHQ+KCppbnNlcnRQb3Mu
ZGVwcmVjYXRlZE5vZGUoKSkgJiYgdGV4dE5vZGVPZmZzZXQgPiAwKQotICAgICAgICAgICAgc3Bs
aXRUZXh0Tm9kZShkb3duY2FzdDxUZXh0PihpbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSksIHRl
eHROb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4o
Kmluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgpKSwgdGV4dE5vZGVPZmZzZXQpOwogICAgICAgICBz
cGxpdFRyZWVUb05vZGUoaW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCksIGxhc3ROb2RlLCB0cnVl
KTsKICAgICB9CiAKQEAgLTE1NTEsNyArMTU0OCw3IEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFjZShjb25zdCBSZXBsYWNlbWVudEZyYWdtZW50JiBm
CiAKICAgICBpZiAobm9kZUFmdGVySW5zZXJ0aW9uUG9zICYmIG5vZGVBZnRlckluc2VydGlvblBv
cy0+cGFyZW50Tm9kZSgpICYmIG5vZGVBZnRlckluc2VydGlvblBvcy0+aGFzVGFnTmFtZShiclRh
ZykKICAgICAgICAgJiYgc2hvdWxkUmVtb3ZlRW5kQlIobm9kZUFmdGVySW5zZXJ0aW9uUG9zLmdl
dCgpLCBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZUFmdGVySW5zZXJ0aW9uUG9zLmdldCgpKSkpCi0g
ICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycyhub2RlQWZ0ZXJJbnNlcnRpb25Qb3Mu
Z2V0KCkpOworICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoKm5vZGVBZnRlcklu
c2VydGlvblBvcyk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyUmVwbGFj
ZShtX3NlbGVjdFJlcGxhY2VtZW50ID8gc3RhcnQgOiBlbmQsIGVuZCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAKaW5kZXggMTk1
MGYwZjU4ODBlNjBhMjczOGUzNDAwOTA3YjY5ZDZiZDA5ODc4MC4uZjgzOGU1NDZjMTk4MjViYTg0
ZDZmNjE0MDIyNTNmNDMyODQ2NjRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAKQEAgLTMxLDEzICszMSwxMiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLVNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpTZXROb2RlQXR0cmli
dXRlQ29tbWFuZChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKK1NldE5vZGVBdHRyaWJ1
dGVDb21tYW5kOjpTZXROb2RlQXR0cmlidXRlQ29tbWFuZChSZWY8RWxlbWVudD4mJiBlbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUpCiAgICAgOiBTaW1wbGVFZGl0Q29tbWFuZChlbGVtZW50LT5kb2N1bWVudCgpKQotICAgICwg
bV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX2VsZW1lbnQoV1RGTW92ZShlbGVtZW50KSkKICAg
ICAsIG1fYXR0cmlidXRlKGF0dHJpYnV0ZSkKICAgICAsIG1fdmFsdWUodmFsdWUpCiB7Ci0gICAg
QVNTRVJUKG1fZWxlbWVudCk7CiB9CiAKIHZvaWQgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OmRv
QXBwbHkoKQpAQCAtNTYsNyArNTUsNyBAQCB2b2lkIFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpk
b1VuYXBwbHkoKQogI2lmbmRlZiBOREVCVUcKIHZvaWQgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6
OmdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+JiBub2RlcykKIHsKLSAgICBhZGROb2Rl
QW5kRGVzY2VuZGFudHMobV9lbGVtZW50LmdldCgpLCBub2Rlcyk7CisgICAgYWRkTm9kZUFuZERl
c2NlbmRhbnRzKG1fZWxlbWVudC5wdHIoKSwgbm9kZXMpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaAppbmRleCBmM2Fl
NDA5YmU0NjBhNzhmNGU2MGQ4MGM0N2JmNTNhMTlmNTVjMDk1Li44ODQ0OWRlZTZiNzZhM2M1NmJl
MzM1M2EwYWQ0Y2YyNjZhNjEwZDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
ZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oCkBAIC0zMiwxMyArMzIsMTMgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBTZXROb2RlQXR0cmlidXRlQ29tbWFuZCA6IHB1YmxpYyBTaW1wbGVF
ZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTZXROb2RlQXR0cmlidXRlQ29t
bWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0cmlidXRlLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQorICAgIHN0YXRpYyBS
ZWY8U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ+IGNyZWF0ZShSZWY8RWxlbWVudD4mJiBlbGVtZW50
LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXROb2RlQXR0cmlidXRl
Q29tbWFuZChlbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kKFdURk1vdmUoZWxlbWVudCksIGF0dHJp
YnV0ZSwgdmFsdWUpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgU2V0Tm9kZUF0dHJpYnV0ZUNv
bW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50PiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRl
LCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKTsKKyAgICBTZXROb2RlQXR0cmlidXRlQ29tbWFu
ZChSZWY8RWxlbWVudD4mJiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogICAg
IHZvaWQgZG9VbmFwcGx5KCkgb3ZlcnJpZGU7CkBAIC00Nyw3ICs0Nyw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYpIG92ZXJyaWRlOwogI2Vu
ZGlmCiAKLSAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50OworICAgIFJlZjxFbGVtZW50PiBt
X2VsZW1lbnQ7CiAgICAgUXVhbGlmaWVkTmFtZSBtX2F0dHJpYnV0ZTsKICAgICBBdG9taWNTdHJp
bmcgbV92YWx1ZTsKICAgICBBdG9taWNTdHJpbmcgbV9vbGRWYWx1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcAppbmRleCAzM2U4ZDgzOWI3
NTZmNmE3N2ZiN2IwMzM5ZWRmNDkzMmY1MTAyMmFkLi5kNjY3NmUzMGE0NjdmOTNiZTNiYTZhNzA3
YjA5ZjJmYjhkOTFmODA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBs
aWZ5TWFya3VwQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlm
eU1hcmt1cENvbW1hbmQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIFNpbXBsaWZ5TWFya3VwQ29tbWFu
ZDo6U2ltcGxpZnlNYXJrdXBDb21tYW5kKERvY3VtZW50JiBkb2N1bWVudCwgTm9kZSogZmlyc3RO
b2RlCiB2b2lkIFNpbXBsaWZ5TWFya3VwQ29tbWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgTm9kZSog
cm9vdE5vZGUgPSBtX2ZpcnN0Tm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIFZlY3RvcjxSZWZQdHI8
Tm9kZT4+IG5vZGVzVG9SZW1vdmU7CisgICAgVmVjdG9yPFJlZjxOb2RlPj4gbm9kZXNUb1JlbW92
ZTsKICAgICAKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNo
ZWV0cygpOwogCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpk
b0FwcGx5KCkKICAgICAgICAgTm9kZSogdG9wTm9kZVdpdGhTdGFydGluZ1N0eWxlID0gbnVsbHB0
cjsKICAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlICE9IHJvb3ROb2RlKSB7CiAgICAgICAgICAg
ICBpZiAoY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKSAhPSByb290Tm9kZSAmJiBpc1JlbW92YWJs
ZUJsb2NrKGN1cnJlbnROb2RlKSkKLSAgICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmFwcGVu
ZChjdXJyZW50Tm9kZSk7CisgICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5hcHBlbmQoKmN1
cnJlbnROb2RlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjdXJy
ZW50Tm9kZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFjdXJyZW50Tm9kZSkKQEAg
LTg1LDggKzg1LDggQEAgdm9pZCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBwbHkoKQogICAg
ICAgICAgICAgCiAgICAgICAgIH0KICAgICAgICAgaWYgKHRvcE5vZGVXaXRoU3RhcnRpbmdTdHls
ZSkgewotICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnRpbmdOb2RlOyBub2RlICE9
IHRvcE5vZGVXaXRoU3RhcnRpbmdTdHlsZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKLSAg
ICAgICAgICAgICAgICBub2Rlc1RvUmVtb3ZlLmFwcGVuZChub2RlKTsKKyAgICAgICAgICAgIGZv
ciAoTm9kZSogbm9kZSA9IHN0YXJ0aW5nTm9kZTsgbm9kZSAmJiBub2RlICE9IHRvcE5vZGVXaXRo
U3RhcnRpbmdTdHlsZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkKKyAgICAgICAgICAgICAg
ICBub2Rlc1RvUmVtb3ZlLmFwcGVuZCgqbm9kZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEw
MSwxNyArMTAxLDE3IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpkb0FwcGx5KCkKICAg
ICB9CiB9CiAKLWludCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OnBydW5lU3Vic2VxdWVudEFuY2Vz
dG9yc1RvUmVtb3ZlKFZlY3RvcjxSZWZQdHI8Tm9kZT4+JiBub2Rlc1RvUmVtb3ZlLCBzaXplX3Qg
c3RhcnROb2RlSW5kZXgpCitpbnQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpwcnVuZVN1YnNlcXVl
bnRBbmNlc3RvcnNUb1JlbW92ZShWZWN0b3I8UmVmPE5vZGU+PiYgbm9kZXNUb1JlbW92ZSwgc2l6
ZV90IHN0YXJ0Tm9kZUluZGV4KQogewogICAgIHNpemVfdCBwYXN0TGFzdE5vZGVUb1JlbW92ZSA9
IHN0YXJ0Tm9kZUluZGV4ICsgMTsKICAgICBmb3IgKDsgcGFzdExhc3ROb2RlVG9SZW1vdmUgPCBu
b2Rlc1RvUmVtb3ZlLnNpemUoKTsgKytwYXN0TGFzdE5vZGVUb1JlbW92ZSkgewotICAgICAgICBp
ZiAobm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZSAtIDFdLT5wYXJlbnROb2RlKCkg
IT0gbm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZV0pCisgICAgICAgIGlmIChub2Rl
c1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlIC0gMV0tPnBhcmVudE5vZGUoKSAhPSBub2Rl
c1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlXS5wdHIoKSkKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBpZiAobm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZV0tPmZpcnN0
Q2hpbGQoKSAhPSBub2Rlc1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlXS0+bGFzdENoaWxk
KCkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBOb2RlKiBoaWdoZXN0QW5jZXN0
b3JUb1JlbW92ZSA9IG5vZGVzVG9SZW1vdmVbcGFzdExhc3ROb2RlVG9SZW1vdmUgLSAxXS5nZXQo
KTsKKyAgICBOb2RlKiBoaWdoZXN0QW5jZXN0b3JUb1JlbW92ZSA9IG5vZGVzVG9SZW1vdmVbcGFz
dExhc3ROb2RlVG9SZW1vdmUgLSAxXS5wdHIoKTsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4g
cGFyZW50ID0gaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUtPnBhcmVudE5vZGUoKTsKICAgICBpZiAo
IXBhcmVudCkgLy8gUGFyZW50IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4KICAgICAgICAgcmV0
dXJuIC0xOwpAQCAtMTIwLDggKzEyMCw4IEBAIGludCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OnBy
dW5lU3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKFZlY3RvcjxSZWZQdHI8Tm9kZT4+CiAgICAg
ICAgIHJldHVybiAwOwogCiAgICAgcmVtb3ZlTm9kZShub2Rlc1RvUmVtb3ZlW3N0YXJ0Tm9kZUlu
ZGV4XSwgQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwotICAgIGluc2VydE5vZGVCZWZv
cmUoKm5vZGVzVG9SZW1vdmVbc3RhcnROb2RlSW5kZXhdLCAqaGlnaGVzdEFuY2VzdG9yVG9SZW1v
dmUsIEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKLSAgICByZW1vdmVOb2RlKGhpZ2hl
c3RBbmNlc3RvclRvUmVtb3ZlLCBBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAg
aW5zZXJ0Tm9kZUJlZm9yZShub2Rlc1RvUmVtb3ZlW3N0YXJ0Tm9kZUluZGV4XS5jb3B5UmVmKCks
ICpoaWdoZXN0QW5jZXN0b3JUb1JlbW92ZSwgQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUp
OworICAgIHJlbW92ZU5vZGUoKmhpZ2hlc3RBbmNlc3RvclRvUmVtb3ZlLCBBc3N1bWVDb250ZW50
SXNBbHdheXNFZGl0YWJsZSk7CiAKICAgICByZXR1cm4gcGFzdExhc3ROb2RlVG9SZW1vdmUgLSBz
dGFydE5vZGVJbmRleCAtIDE7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlm
eU1hcmt1cENvbW1hbmQuaAppbmRleCAyZDgyNTdhNDU1ZDFkOTY0NTJlMjc4Y2ZhMzcwZGJiZGNm
NmExOGNlLi43YTA4ODJlOGM3ODc1NzA2NjI0MjdkMmEzMjA5YWZlMzI4NjdlOWYzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmgKQEAgLTQwLDcg
KzQwLDcgQEAgcHJpdmF0ZToKICAgICBTaW1wbGlmeU1hcmt1cENvbW1hbmQoRG9jdW1lbnQmLCBO
b2RlKiBmaXJzdE5vZGUsIE5vZGUqIG5vZGVBZnRlckxhc3QpOwogCiAgICAgdm9pZCBkb0FwcGx5
KCkgb3ZlcnJpZGU7Ci0gICAgaW50IHBydW5lU3Vic2VxdWVudEFuY2VzdG9yc1RvUmVtb3ZlKFZl
Y3RvcjxSZWZQdHI8Tm9kZT4+JiBub2Rlc1RvUmVtb3ZlLCBzaXplX3Qgc3RhcnROb2RlSW5kZXgp
OworICAgIGludCBwcnVuZVN1YnNlcXVlbnRBbmNlc3RvcnNUb1JlbW92ZShWZWN0b3I8UmVmPE5v
ZGU+PiYgbm9kZXNUb1JlbW92ZSwgc2l6ZV90IHN0YXJ0Tm9kZUluZGV4KTsKIAogICAgIFJlZlB0
cjxOb2RlPiBtX2ZpcnN0Tm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlQWZ0ZXJMYXN0Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKaW5kZXgg
MmQ0ZTg1NDk4Y2NkNTRhNmY0YmNlNmE4YzE4NDQzNzFjZjg1MDJjNi4uYmEzMmFiNWNlNmI0YmU2
OWU2MzJiMzg5NzYzZjg1ZDc5NTljNWZhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCkBAIC0zMiwyOSArMzIsMjcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1TcGxpdEVsZW1lbnRDb21tYW5kOjpTcGxpdEVsZW1lbnRDb21tYW5kKFBh
c3NSZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgUGFzc1JlZlB0cjxOb2RlPiBhdENoaWxkKQorU3Bs
aXRFbGVtZW50Q29tbWFuZDo6U3BsaXRFbGVtZW50Q29tbWFuZChSZWY8RWxlbWVudD4mJiBlbGVt
ZW50LCBSZWY8Tm9kZT4mJiBhdENoaWxkKQogICAgIDogU2ltcGxlRWRpdENvbW1hbmQoZWxlbWVu
dC0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fZWxlbWVudDIoZWxlbWVudCkKLSAgICAsIG1fYXRDaGls
ZChhdENoaWxkKQorICAgICwgbV9lbGVtZW50MihXVEZNb3ZlKGVsZW1lbnQpKQorICAgICwgbV9h
dENoaWxkKFdURk1vdmUoYXRDaGlsZCkpCiB7Ci0gICAgQVNTRVJUKG1fZWxlbWVudDIpOwotICAg
IEFTU0VSVChtX2F0Q2hpbGQpOwotICAgIEFTU0VSVChtX2F0Q2hpbGQtPnBhcmVudE5vZGUoKSA9
PSBtX2VsZW1lbnQyKTsKKyAgICBBU1NFUlQobV9hdENoaWxkLT5wYXJlbnROb2RlKCkgPT0gbV9l
bGVtZW50Mi5wdHIoKSk7CiB9CiAKIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZXhlY3V0ZUFw
cGx5KCkKIHsKLSAgICBpZiAobV9hdENoaWxkLT5wYXJlbnROb2RlKCkgIT0gbV9lbGVtZW50MikK
KyAgICBpZiAobV9hdENoaWxkLT5wYXJlbnROb2RlKCkgIT0gbV9lbGVtZW50Mi5wdHIoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIAogICAgIFZlY3RvcjxSZWY8Tm9kZT4+IGNoaWxkcmVuOwotICAg
IGZvciAoTm9kZSogbm9kZSA9IG1fZWxlbWVudDItPmZpcnN0Q2hpbGQoKTsgbm9kZSAhPSBtX2F0
Q2hpbGQ7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKQorICAgIGZvciAoTm9kZSogbm9kZSA9
IG1fZWxlbWVudDItPmZpcnN0Q2hpbGQoKTsgbm9kZSAhPSBtX2F0Q2hpbGQucHRyKCk7IG5vZGUg
PSBub2RlLT5uZXh0U2libGluZygpKQogICAgICAgICBjaGlsZHJlbi5hcHBlbmQoKm5vZGUpOwog
CiAgICAgYXV0byogcGFyZW50ID0gbV9lbGVtZW50Mi0+cGFyZW50Tm9kZSgpOwogICAgIGlmICgh
cGFyZW50IHx8ICFwYXJlbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChwYXJlbnQtPmluc2VydEJlZm9yZSgqbV9lbGVtZW50MSwgbV9lbGVtZW50Mi5nZXQo
KSkuaGFzRXhjZXB0aW9uKCkpCisgICAgaWYgKHBhcmVudC0+aW5zZXJ0QmVmb3JlKCptX2VsZW1l
bnQxLCBtX2VsZW1lbnQyLnB0cigpKS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gRGVsZXRlIGlkIGF0dHJpYnV0ZSBmcm9tIHRoZSBzZWNvbmQgZWxlbWVudCBiZWNh
dXNlIHRoZSBzYW1lIGlkIGNhbm5vdCBiZSB1c2VkIGZvciBtb3JlIHRoYW4gb25lIGVsZW1lbnQK
QEAgLTEwNSw4ICsxMDMsOCBAQCB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmRvUmVhcHBseSgp
CiB2b2lkIFNwbGl0RWxlbWVudENvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9k
ZSo+JiBub2RlcykKIHsKICAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9lbGVtZW50MS5nZXQo
KSwgbm9kZXMpOwotICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX2VsZW1lbnQyLmdldCgpLCBu
b2Rlcyk7Ci0gICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fYXRDaGlsZC5nZXQoKSwgbm9kZXMp
OworICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX2VsZW1lbnQyLnB0cigpLCBub2Rlcyk7Cisg
ICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fYXRDaGlsZC5wdHIoKSwgbm9kZXMpOwogfQogI2Vu
ZGlmCiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVu
dENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5o
CmluZGV4IGNhMWQwYjJiY2U1OWZjZmUwMGVjNjc0ODEyNDdjYzkxNWQzMGUyMTguLjk4MzE2NTFi
MDAwYWE3NTRkYmZiNjE3MDQ3NmQ3Y2NjNzQzOTBlZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5oCkBAIC0zMSwxMyArMzEsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBTcGxpdEVsZW1lbnRDb21tYW5kIDogcHVibGljIFNpbXBsZUVk
aXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNwbGl0RWxlbWVudENvbW1hbmQ+
IGNyZWF0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIFBhc3NSZWZQdHI8Tm9kZT4gc3Bs
aXRQb2ludENoaWxkKQorICAgIHN0YXRpYyBSZWY8U3BsaXRFbGVtZW50Q29tbWFuZD4gY3JlYXRl
KFJlZjxFbGVtZW50PiYmIGVsZW1lbnQsIFJlZjxOb2RlPiYmIHNwbGl0UG9pbnRDaGlsZCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNwbGl0RWxlbWVudENvbW1hbmQoZWxl
bWVudCwgc3BsaXRQb2ludENoaWxkKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNw
bGl0RWxlbWVudENvbW1hbmQoV1RGTW92ZShlbGVtZW50KSwgV1RGTW92ZShzcGxpdFBvaW50Q2hp
bGQpKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFNwbGl0RWxlbWVudENvbW1hbmQoUGFzc1Jl
ZlB0cjxFbGVtZW50PiwgUGFzc1JlZlB0cjxOb2RlPiBzcGxpdFBvaW50Q2hpbGQpOworICAgIFNw
bGl0RWxlbWVudENvbW1hbmQoUmVmPEVsZW1lbnQ+JiYsIFJlZjxOb2RlPiYmIHNwbGl0UG9pbnRD
aGlsZCk7CiAKICAgICB2b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKICAgICB2b2lkIGRvVW5hcHBs
eSgpIG92ZXJyaWRlOwpAQCAtNDksOCArNDksOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBS
ZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50MTsKLSAgICBSZWZQdHI8RWxlbWVudD4gbV9lbGVtZW50
MjsKLSAgICBSZWZQdHI8Tm9kZT4gbV9hdENoaWxkOworICAgIFJlZjxFbGVtZW50PiBtX2VsZW1l
bnQyOworICAgIFJlZjxOb2RlPiBtX2F0Q2hpbGQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3Bw
CmluZGV4IGIwYTRiMjFmOTRhOWVmMWVmYjg0NDNmYzBjZjAwNjA3ZDI2Y2U5ZjAuLjlhZDA5MGYw
OGY3NDcwOWNhZDExNzU4YTU3NDY0Yjk4YWUwNGEwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCkBAIC0zMywxNiArMzMsMTUgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1TcGxpdFRleHROb2RlQ29tbWFuZDo6U3BsaXRUZXh0Tm9k
ZUNvbW1hbmQoUGFzc1JlZlB0cjxUZXh0PiB0ZXh0LCBpbnQgb2Zmc2V0KQorU3BsaXRUZXh0Tm9k
ZUNvbW1hbmQ6OlNwbGl0VGV4dE5vZGVDb21tYW5kKFJlZjxUZXh0PiYmIHRleHQsIGludCBvZmZz
ZXQpCiAgICAgOiBTaW1wbGVFZGl0Q29tbWFuZCh0ZXh0LT5kb2N1bWVudCgpKQotICAgICwgbV90
ZXh0Mih0ZXh0KQorICAgICwgbV90ZXh0MihXVEZNb3ZlKHRleHQpKQogICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQogewogICAgIC8vIE5PVEU6IFZhcmlvdXMgY2FsbGVycyByZWx5IG9uIHRoZSBmYWN0
IHRoYXQgdGhlIG9yaWdpbmFsIG5vZGUgYmVjb21lcwogICAgIC8vIHRoZSBzZWNvbmQgbm9kZSAo
aS5lLiB0aGUgbmV3IG5vZGUgaXMgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBleGlzdGluZyBvbmUpLgog
ICAgIC8vIFRoYXQgaXMgbm90IGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeSAoaS5lLiBpdCBjb3Vs
ZCBiZSByZS1jb2RlZCksIGJ1dAogICAgIC8vIHJhdGhlciBpcyBiYXNlZCBvbiBob3cgdGhpcyBj
b2RlIGhhcHBlbnMgdG8gd29yay4KLSAgICBBU1NFUlQobV90ZXh0Mik7CiAgICAgQVNTRVJUKG1f
dGV4dDItPmxlbmd0aCgpID4gMCk7CiAgICAgQVNTRVJUKG1fb2Zmc2V0ID4gMCk7CiAgICAgQVNT
RVJUKG1fb2Zmc2V0IDwgbV90ZXh0Mi0+bGVuZ3RoKCkpOwpAQCAtNjMsNyArNjIsNyBAQCB2b2lk
IFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIAogICAgIG1fdGV4dDEgPSBUZXh0Ojpj
cmVhdGUoZG9jdW1lbnQoKSwgV1RGTW92ZShwcmVmaXhUZXh0KSk7CiAgICAgQVNTRVJUKG1fdGV4
dDEpOwotICAgIGRvY3VtZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKG1fdGV4dDIuZ2V0KCks
IDAsIG1fb2Zmc2V0LCBtX3RleHQxLmdldCgpLCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMo
KS5jb3B5TWFya2VycyhtX3RleHQyLnB0cigpLCAwLCBtX29mZnNldCwgbV90ZXh0MS5nZXQoKSwg
MCk7CiAKICAgICBpbnNlcnRUZXh0MUFuZFRyaW1UZXh0MigpOwogfQpAQCAtNzksMTMgKzc4LDEz
IEBAIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSgpCiAKICAgICBtX3RleHQy
LT5pbnNlcnREYXRhKDAsIHByZWZpeFRleHQpOwogCi0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCku
Y29weU1hcmtlcnMobV90ZXh0MS5nZXQoKSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0
Mi5nZXQoKSwgMCk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0
MS5nZXQoKSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0Mi5wdHIoKSwgMCk7CiAgICAg
bV90ZXh0MS0+cmVtb3ZlKCk7CiB9CiAKIHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvUmVh
cHBseSgpCiB7Ci0gICAgaWYgKCFtX3RleHQxIHx8ICFtX3RleHQyKQorICAgIGlmICghbV90ZXh0
MSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0gbV90ZXh0
Mi0+cGFyZW50Tm9kZSgpOwpAQCAtOTcsNyArOTYsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21t
YW5kOjpkb1JlYXBwbHkoKQogCiB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjppbnNlcnRUZXh0
MUFuZFRyaW1UZXh0MigpCiB7Ci0gICAgaWYgKG1fdGV4dDItPnBhcmVudE5vZGUoKS0+aW5zZXJ0
QmVmb3JlKCptX3RleHQxLCBtX3RleHQyLmdldCgpKS5oYXNFeGNlcHRpb24oKSkKKyAgICBpZiAo
bV90ZXh0Mi0+cGFyZW50Tm9kZSgpLT5pbnNlcnRCZWZvcmUoKm1fdGV4dDEsIG1fdGV4dDIucHRy
KCkpLmhhc0V4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgbV90ZXh0Mi0+ZGVsZXRl
RGF0YSgwLCBtX29mZnNldCk7CiB9CkBAIC0xMDcsNyArMTA2LDcgQEAgdm9pZCBTcGxpdFRleHRO
b2RlQ29tbWFuZDo6aW5zZXJ0VGV4dDFBbmRUcmltVGV4dDIoKQogdm9pZCBTcGxpdFRleHROb2Rl
Q29tbWFuZDo6Z2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4mIG5vZGVzKQogewogICAg
IGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX3RleHQxLmdldCgpLCBub2Rlcyk7Ci0gICAgYWRkTm9k
ZUFuZERlc2NlbmRhbnRzKG1fdGV4dDIuZ2V0KCksIG5vZGVzKTsKKyAgICBhZGROb2RlQW5kRGVz
Y2VuZGFudHMobV90ZXh0Mi5wdHIoKSwgbm9kZXMpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaAppbmRleCA1Njc0NzllMTU2NDBl
ODhjMmQxYWZhMzEzMTFiMzdhMWViYjAxYzkyLi5iOTkxOWQ2NzA4NzE5MjIyOWMwNWMzODczZmY5
ZjIwMTI5MTI4ZmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4
dE5vZGVDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2Rl
Q29tbWFuZC5oCkBAIC0zMywxMyArMzMsMTMgQEAgY2xhc3MgVGV4dDsKIAogY2xhc3MgU3BsaXRU
ZXh0Tm9kZUNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8U3BsaXRUZXh0Tm9kZUNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPFRleHQ+
IG5vZGUsIGludCBvZmZzZXQpCisgICAgc3RhdGljIFJlZjxTcGxpdFRleHROb2RlQ29tbWFuZD4g
Y3JlYXRlKFJlZjxUZXh0PiYmIG5vZGUsIGludCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTcGxpdFRleHROb2RlQ29tbWFuZChub2RlLCBvZmZzZXQpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3BsaXRUZXh0Tm9kZUNvbW1hbmQoV1RGTW92ZShu
b2RlKSwgb2Zmc2V0KSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFNwbGl0VGV4dE5vZGVDb21t
YW5kKFBhc3NSZWZQdHI8VGV4dD4sIGludCBvZmZzZXQpOworICAgIFNwbGl0VGV4dE5vZGVDb21t
YW5kKFJlZjxUZXh0PiYmLCBpbnQgb2Zmc2V0KTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJy
aWRlOwogICAgIHZvaWQgZG9VbmFwcGx5KCkgb3ZlcnJpZGU7CkBAIC01MSw3ICs1MSw3IEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogICAgIFJlZlB0cjxUZXh0PiBtX3RleHQxOwotICAgIFJlZlB0cjxU
ZXh0PiBtX3RleHQyOworICAgIFJlZjxUZXh0PiBtX3RleHQyOwogICAgIHVuc2lnbmVkIG1fb2Zm
c2V0OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHRO
b2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKaW5kZXggY2U4ODg3NDY5
NTExM2ZiZjZkYWQxZTIyYTkyY2JmNDdhMGE4MWI5Mi4uMDE4MWU0NGM3NzRiZjYxMDJiYWRhMjA4
YTk4ZmFhZmNiZWZlMmRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxp
dFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCkBAIC0z
MywyMSArMzMsMTkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TcGxpdFRleHROb2RlQ29u
dGFpbmluZ0VsZW1lbnRDb21tYW5kOjpTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21t
YW5kKFBhc3NSZWZQdHI8VGV4dD4gdGV4dCwgaW50IG9mZnNldCkKK1NwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQ6OlNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQoUmVmPFRleHQ+JiYgdGV4dCwgaW50IG9mZnNldCkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21t
YW5kKHRleHQtPmRvY3VtZW50KCkpCi0gICAgLCBtX3RleHQodGV4dCkKKyAgICAsIG1fdGV4dChX
VEZNb3ZlKHRleHQpKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogewotICAgIEFTU0VSVChtX3Rl
eHQpOwogICAgIEFTU0VSVChtX3RleHQtPmxlbmd0aCgpID4gMCk7CiB9CiAKIHZvaWQgU3BsaXRU
ZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZDo6ZG9BcHBseSgpCiB7Ci0gICAgQVNTRVJU
KG1fdGV4dCk7CiAgICAgQVNTRVJUKG1fb2Zmc2V0ID4gMCk7CiAKLSAgICBzcGxpdFRleHROb2Rl
KG1fdGV4dC5nZXQoKSwgbV9vZmZzZXQpOworICAgIHNwbGl0VGV4dE5vZGUobV90ZXh0LCBtX29m
ZnNldCk7CiAKICAgICBFbGVtZW50KiBwYXJlbnQgPSBtX3RleHQtPnBhcmVudEVsZW1lbnQoKTsK
ICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5wYXJlbnRFbGVtZW50KCkgfHwgIXBhcmVudC0+
cGFyZW50RWxlbWVudCgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpCkBAIC02Miw3ICs2MCw3IEBAIHZv
aWQgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
ICAgIHBhcmVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KGZpcnN0Q2hpbGQpOwogICAgIH0KIAotICAg
IHNwbGl0RWxlbWVudChwYXJlbnQsIG1fdGV4dCk7CisgICAgc3BsaXRFbGVtZW50KCpwYXJlbnQs
IG1fdGV4dCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bs
aXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmgKaW5kZXggNWU2OWUx
MmYwODI5OWU5YjUxZTllZmRiOTY0N2Q1ZGUzMDRkMjFkNC4uY2RlZjZlYzMwYjRlOTFkNmMzNTJk
YTFhYTVjNGM4Mjk2YjM1ZDY3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmgKQEAgLTMx
LDE3ICszMSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNwbGl0VGV4dE5vZGVD
b250YWluaW5nRWxlbWVudENvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewog
cHVibGljOgotICAgIHN0YXRpYyBSZWY8U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29t
bWFuZD4gY3JlYXRlKFBhc3NSZWZQdHI8VGV4dD4gbm9kZSwgaW50IG9mZnNldCkKKyAgICBzdGF0
aWMgUmVmPFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ+IGNyZWF0ZShSZWY8
VGV4dD4mJiBub2RlLCBpbnQgb2Zmc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZChub2RlLCBvZmZzZXQp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdF
bGVtZW50Q29tbWFuZChXVEZNb3ZlKG5vZGUpLCBvZmZzZXQpKTsKICAgICB9CiAKIHByaXZhdGU6
Ci0gICAgU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZChQYXNzUmVmUHRyPFRl
eHQ+LCBpbnQgb2Zmc2V0KTsKKyAgICBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21t
YW5kKFJlZjxUZXh0PiYmLCBpbnQgb2Zmc2V0KTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJy
aWRlOwogCi0gICAgUmVmUHRyPFRleHQ+IG1fdGV4dDsKKyAgICBSZWY8VGV4dD4gbV90ZXh0Owog
ICAgIGludCBtX29mZnNldDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcAppbmRleCBjZjljMjYyNGE5MzFkNjc5MmRhM2M1
MDBmZGU2YTNjYTU3YzI4YjY2Li45YzRhNDRkNzQ1NzRhMTZlMDMzMmIzOWVlMWY5ODkyNTU5OTEx
YjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJbnNlcnRpb25CYXNl
Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SW5zZXJ0aW9uQmFz
ZUNvbW1hbmQuY3BwCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgVGV4dEluc2VydGlvbkJhc2VDb21t
YW5kOjphcHBseVRleHRJbnNlcnRpb25Db21tYW5kKEZyYW1lKiBmcmFtZSwgVGV4dEluc2VyCiAg
ICAgICAgIGNvbW1hbmQuc2V0U3RhcnRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0aW9u
KTsKICAgICAgICAgY29tbWFuZC5zZXRFbmRpbmdTZWxlY3Rpb24oc2VsZWN0aW9uRm9ySW5zZXJ0
aW9uKTsKICAgICB9Ci0gICAgYXBwbHlDb21tYW5kKCZjb21tYW5kKTsKKyAgICBhcHBseUNvbW1h
bmQoY29tbWFuZCk7CiAgICAgaWYgKGNoYW5nZVNlbGVjdGlvbikgewogICAgICAgICBjb21tYW5k
LnNldEVuZGluZ1NlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24pOwogICAgICAgICBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcAppbmRleCAxZDBhMzJkYjBhN2QzMTExNDUzOTVjNmUxNGQ3
MjU0YzM5NjUzM2U0Li5lOTU5M2YzODU0Y2YwNWM4YTBlY2JlMGQwMTk2YzU5NDZjNTkyNjhjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTYzMiw3ICs2MzIs
NyBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJsZVJvb3RFbXB0eSgpCiAgICAgfQog
CiAgICAgd2hpbGUgKE5vZGUqIGNoaWxkID0gcm9vdC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICBy
ZW1vdmVOb2RlKGNoaWxkKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqY2hpbGQpOwogCiAgICAgYWRk
QmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKHJvb3QpOwogICAgIHNldEVuZGluZ1NlbGVjdGlvbihW
aXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUocm9vdCksIERPV05TVFJFQU0sIGVu
ZGluZ1NlbGVjdGlvbigpLmlzRGlyZWN0aW9uYWwoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IGNiMDc4Y2Q5ODNmN2U2OTIwZTNiZTU1
MDViZTNjODJmMjQ2ODUzMzAuLjAzMDAyMTcwOGY5YzQxOWNiYjJhZjZjNWVjMzUwMThiZDZmOWRm
N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAK
QEAgLTM3Myw3ICszNzMsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1l
bnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjbwogCiAgICAgICAgICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIEFT
U0VSVChkb2N1bWVudCk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQ+IGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpkb2N1bWVudCwg
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpkb2N1bWVudCwgdGl0bGUsIGVtcHR5U3RyaW5nKCkp
LCByZXBsYWNlT3B0aW9ucyk7CisgICAgICAgICAgICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpkb2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KCpkb2N1bWVudCwgdGl0bGUsIGVtcHR5U3RyaW5nKCkpLCByZXBsYWNlT3B0aW9ucyk7CiAgICAg
ICAgICAgICBhcHBseUNvbW1hbmQoY29tbWFuZCk7CiAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0
aW9uKCkucmV2ZWFsU2VsZWN0aW9uKFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbCwgU2Nyb2xs
QWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkKTsKICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309138</attachid>
            <date>2017-05-04 20:50:58 -0700</date>
            <delta_ts>2017-05-04 22:10:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171645-20170504205056.patch</filename>
            <type>text/plain</type>
            <size>119110</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE2MjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjYyNjM2YmYzZWRlYjVh
N2NhODQ1ZWQxMTg4NjQ1MDUwNjNlMGEyMy4uMGZkMmZiNzAzMDQzZWNhODFiNDQ0YWE4MWU3OWRk
NjM3ZGM1NzVlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1NCBAQAorMjAxNy0wNS0wMyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIERyb3AgcmVtYWluaW5nIHVz
ZXMgb2YgUGFzc1JlZlB0ciBmcm9tIENvbXBvc2l0ZUVkaXRDb21tYW5kCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzE2NDUKKworICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBEcm9wIHJlbWFpbmluZyB1c2VzIG9mIFBh
c3NSZWZQdHIgZnJvbSBDb21wb3NpdGVFZGl0Q29tbWFuZC4KKworICAgICAgICAqIGVkaXRpbmcv
QXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5Qmxv
Y2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VGb3JQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OmVuZE9m
TmV4dFBhcmFncmFwaFNwbGl0dGluZ1RleHROb2Rlc0lmTmVlZGVkKToKKyAgICAgICAgKiBlZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVD
b21tYW5kOjphcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5U3R5bGVDb21tYW5kOjpjbGVhbnVwVW5zdHlsZWRBcHBsZVN0eWxlU3BhbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0QW5jZXN0b3JzV2l0aFVuaWNv
ZGVCaWRpKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVFbWJl
ZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNv
bW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6cmVwbGFjZVdpdGhTcGFuT3JSZW1vdmVJZldp
dGhvdXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpy
ZW1vdmVJbXBsaWNpdGx5U3R5bGVkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0
eWxlQ29tbWFuZDo6cmVtb3ZlQ1NTU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHls
ZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb1B1c2hEb3duKToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRBdFN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdFRleHRBdEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpB
cHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0RWxlbWVudEF0U3RhcnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OnNwbGl0VGV4dEVsZW1lbnRBdEVuZCk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6c3Vycm91bmROb2RlUmFuZ2VXaXRoRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkQmxvY2tTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZk5l
ZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVT
dHlsZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6am9pbkNo
aWxkVGV4dE5vZGVzKToKKyAgICAgICAgKiBlZGl0aW5nL0JyZWFrQmxvY2txdW90ZUNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSk6
CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjphcHBseUNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENv
bW1hbmQ6Omluc2VydE5vZGVBdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cmVtb3ZlQ2hpbGRyZW5JblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0
ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVSZW1haW5pbmdTaWJs
aW5nc1RvTmV3UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
OjpyZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cHJ1bmUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VGV4dE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0RWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bWVyZ2VJZGVudGljYWxFbGVtZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUZXh0Tm9kZUNv
bnRhaW5pbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5k
Ojpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVk
aXRDb21tYW5kOjpyZW1vdmVOb2RlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBv
c2l0ZUVkaXRDb21tYW5kOjpzZXROb2RlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25pZmljYW50VGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaENvbnRlbnRz
VG9OZXdCbG9ja0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRD
b21tYW5kOjpwdXNoQW5jaG9yRWxlbWVudERvd24pOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9z
aXRlRWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckRlbGV0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdyYXBocyk6CisgICAgICAgICogZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVTcGVjaWFsQ2FzZUJSRGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcyk6CisgICAgICAgIChXZWJD
b3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1ha2VTdHlsaW5nRWxlbWVudHNEaXJlY3RDaGls
ZHJlbk9mRWRpdGFibGVSb290VG9QcmV2ZW50U3R5bGVMb3NzKToKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUpOgorICAgICAgICAo
V2ViQ29yZTo6RGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVByZXZpb3VzbHlTZWxl
Y3RlZEVtcHR5VGFibGVSb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQ6OnJlbW92ZVJlZHVuZGFudEJsb2Nrcyk6CisgICAgICAgICogZWRpdGluZy9EZWxldGVT
ZWxlY3Rpb25Db21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkpOgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUpOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleGVjdXRlRm9ybWF0
QmxvY2spOgorICAgICAgICAqIGVkaXRpbmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5kZW50T3V0ZGVudENvbW1hbmQ6Om91dGRlbnRQYXJhZ3JhcGgpOgor
ICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKiBlZGl0
aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RD
b21tYW5kOjpmaXhPcnBoYW5lZExpc3RDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRM
aXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNlcnRMaXN0Q29tbWFuZDo6dW5saXN0aWZ5UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0
aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICog
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRU
ZXh0Q29tbWFuZDo6aW5zZXJ0VGFiKToKKyAgICAgICAgKiBlZGl0aW5nL01vZGlmeVNlbGVjdGlv
bkxpc3RMZXZlbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2RpZnlTZWxlY3Rpb25MaXN0TGV2
ZWxDb21tYW5kOjppbnNlcnRTaWJsaW5nTm9kZVJhbmdlQmVmb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vZGlmeVNlbGVjdGlvbkxpc3RMZXZlbENvbW1hbmQ6Omluc2VydFNpYmxpbmdOb2RlUmFu
Z2VBZnRlcik6CisgICAgICAgIChXZWJDb3JlOjpNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWxDb21t
YW5kOjphcHBlbmRTaWJsaW5nTm9kZVJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY3JlYXNl
U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9S
ZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6UmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbkNvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbkNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlTm9k
ZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcv
UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFj
ZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb0FwcGx5KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpkb1VuYXBwbHkpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ6OmdldE5vZGVzSW5Db21t
YW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4p
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlSW50ZXJjaGFu
Z2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVt
b3ZlUmVkdW5kYW50U3R5bGVzQW5kS2VlcFN0eWxlU3BhbklubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWFrZUluc2VydGVkQ29udGVudFJvdW5kVHJp
cHBhYmxlV2l0aEhUTUxUcmVlQnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6bW92ZU5vZGVPdXRPZkFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVVbnJlbmRlcmVkVGV4dE5vZGVzQXRFbmRz
KToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNlcnRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3Bh
bnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkp
OgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5v
ZGVzQXJvdW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6Omluc2VydEFzTGlzdEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UpOgorICAgICAgICAqIGVkaXRpbmcv
U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2V0Tm9kZUF0
dHJpYnV0ZUNvbW1hbmQ6OlNldE5vZGVBdHRyaWJ1dGVDb21tYW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlNldE5vZGVBdHRyaWJ1dGVDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZCk6CisgICAgICAg
ICogZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6
U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9TaW1w
bGlmeU1hcmt1cENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZnlNYXJrdXBD
b21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsaWZ5TWFya3VwQ29tbWFu
ZDo6cHJ1bmVTdWJzZXF1ZW50QW5jZXN0b3JzVG9SZW1vdmUpOgorICAgICAgICAqIGVkaXRpbmcv
U2ltcGxpZnlNYXJrdXBDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9TcGxpdEVsZW1lbnRD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OlNwbGl0
RWxlbWVudENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRFbGVtZW50Q29tbWFuZDo6
ZXhlY3V0ZUFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6Omdl
dE5vZGVzSW5Db21tYW5kKToKKyAgICAgICAgKiBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxlbWVudENvbW1hbmQ6OmNyZWF0ZSk6CisgICAg
ICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTcGxpdFRleHROb2RlQ29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQpOgorICAgICAgICAo
V2ViQ29yZTo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvQXBwbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgIChXZWJDb3JlOjpT
cGxpdFRleHROb2RlQ29tbWFuZDo6ZG9SZWFwcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0
VGV4dE5vZGVDb21tYW5kOjppbnNlcnRUZXh0MUFuZFRyaW1UZXh0Mik6CisgICAgICAgICogZWRp
dGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRUZXh0
Tm9kZUNvbW1hbmQ6OmNyZWF0ZSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29u
dGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4dE5v
ZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OlNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVu
dENvbW1hbmQpOgorICAgICAgICAoV2ViQ29yZTo6U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVt
ZW50Q29tbWFuZDo6ZG9BcHBseSk6CisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29u
dGFpbmluZ0VsZW1lbnRDb21tYW5kLmg6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2Rl
Q29udGFpbmluZ0VsZW1lbnRDb21tYW5kOjpjcmVhdGUpOgorICAgICAgICAqIGVkaXRpbmcvVGV4
dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbnNlcnRp
b25CYXNlQ29tbWFuZDo6YXBwbHlUZXh0SW5zZXJ0aW9uQ29tbWFuZCk6CisgICAgICAgICogZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6
Om1ha2VFZGl0YWJsZVJvb3RFbXB0eSk6CisgICAgICAgICogcGFnZS9Db250ZXh0TWVudUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dE1lbnVDb250cm9sbGVyOjpjb250
ZXh0TWVudUl0ZW1TZWxlY3RlZCk6CisKIDIwMTctMDUtMDQgIEplcmVteSBKb25lcyAgPGplcmVt
eWpAYXBwbGUuY29tPgogCiAgICAgICAgIFVJQ29sb3IgK3doaXRlQ29sb3IgYW5kICtjbGVhckNv
bG9yIGFyZSBhbWJpZ3VvdXMgYW5kIG5lZWQgdG8gYmUgY2FzdGVkIHdoZW4gc29mdCBsaW5rZWQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcAppbmRleCBlMmQ3ZmJmNmMyYzg5MmFmMjUwYmQyMWY4ZjYzYzhiYmNmYTFiMWI0Li4w
MzRmM2NmYzBkYTJiYzg1ZDRmMmE5YWZiZjEwMmU4MTRkZGRkMGZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI2
Nyw3ICsyNjcsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QWx0ZXJu
YXRpdmVUZXh0VG9SYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsCiAKICAgICBDb250YWluZXJOb2Rl
JiByb290Tm9kZSA9IHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24uZ2V0KCktPnN0
YXJ0Q29udGFpbmVyKCkudHJlZVNjb3BlKCkucm9vdE5vZGUoKTsKICAgICBpbnQgcGFyYWdyYXBo
U3RhcnRJbmRleCA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgoUmFuZ2U6OmNyZWF0ZShyb290
Tm9kZS5kb2N1bWVudCgpLCAmcm9vdE5vZGUsIDAsICZwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uLT5zdGFydENvbnRhaW5lcigpLCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3Jy
ZWN0aW9uLT5zdGFydE9mZnNldCgpKS5wdHIoKSk7Ci0gICAgYXBwbHlDb21tYW5kKFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgYWx0ZXJuYXRp
dmUpKTsKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VXaXRoQWx0
ZXJuYXRpdmUsIGFsdGVybmF0aXZlKS0+YXBwbHkoKTsKICAgICAvLyBSZWNhbGN1bGF0ZSBwcmFn
cmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bW1hbmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBwYXJhZ3JhcGhS
YW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4gUmFkYXI6IDEwMzA1
MzE1IEJ1Z3ppbGxhOiA4OTUyNgogICAgIHBhcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rp
b24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKCZyb290Tm9kZSwg
cGFyYWdyYXBoU3RhcnRJbmRleCwgY29ycmVjdGlvblN0YXJ0T2Zmc2V0SW5QYXJhZ3JhcGggKyBh
bHRlcm5hdGl2ZS5sZW5ndGgoKSk7CiAgICAgaWYgKCFwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdD
b3JyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2Nr
RWxlbWVudENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseUJsb2NrRWxl
bWVudENvbW1hbmQuY3BwCmluZGV4IGU1NGQyOTMyYmRhYTM5YzNkNTNlNmZlZWUzMjE3YzdmZmY4
ZDNkNWMuLjg5Y2QyOTRmODczMDhiOGZjODQ5ODY1Y2UwMGM5YWM0NzczNmU0ZGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlCbG9ja0VsZW1lbnRDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5QmxvY2tFbGVtZW50Q29tbWFuZC5jcHAK
QEAgLTIxMiw3ICsyMTIsOCBAQCB2b2lkIEFwcGx5QmxvY2tFbGVtZW50Q29tbWFuZDo6cmFuZ2VG
b3JQYXJhZ3JhcGhTcGxpdHRpbmdUZXh0Tm9kZXNJZk5lZWRlZChjb25zdAogICAgICAgICBpZiAo
IXN0YXJ0U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHN0YXJ0Lm9mZnNldEluQ29udGFp
bmVyTm9kZSgpID4gMCkgewogICAgICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQub2Zm
c2V0SW5Db250YWluZXJOb2RlKCk7CiAgICAgICAgICAgICBUZXh0KiBzdGFydFRleHQgPSBzdGFy
dC5jb250YWluZXJUZXh0KCk7Ci0gICAgICAgICAgICBzcGxpdFRleHROb2RlKHN0YXJ0VGV4dCwg
c3RhcnRPZmZzZXQpOworICAgICAgICAgICAgQVNTRVJUKHN0YXJ0VGV4dCk7CisgICAgICAgICAg
ICBzcGxpdFRleHROb2RlKCpzdGFydFRleHQsIHN0YXJ0T2Zmc2V0KTsKICAgICAgICAgICAgIHN0
YXJ0ID0gZmlyc3RQb3NpdGlvbkluTm9kZShzdGFydFRleHQpOwogICAgICAgICAgICAgaWYgKGlz
U3RhcnRBbmRFbmRPblNhbWVOb2RlKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGVuZC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSA+PSBzdGFydE9mZnNldCk7CkBAIC0yMzksNyArMjQwLDcgQEAg
dm9pZCBBcHBseUJsb2NrRWxlbWVudENvbW1hbmQ6OnJhbmdlRm9yUGFyYWdyYXBoU3BsaXR0aW5n
VGV4dE5vZGVzSWZOZWVkZWQoY29uc3QKICAgICAgICAgLy8gSWYgZW5kIGlzIGluIHRoZSBtaWRk
bGUgb2YgYSB0ZXh0IG5vZGUgYW5kIHRoZSB0ZXh0IG5vZGUgaXMgZWRpdGFibGUsIHNwbGl0Lgog
ICAgICAgICBpZiAoZW5kU3R5bGUtPnVzZXJNb2RpZnkoKSAhPSBSRUFEX09OTFkgJiYgIWVuZFN0
eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkg
JiYgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpIDwgZW5kLmNvbnRhaW5lck5vZGUoKS0+bWF4
Q2hhcmFjdGVyT2Zmc2V0KCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxUZXh0PiBlbmRDb250YWlu
ZXIgPSBlbmQuY29udGFpbmVyVGV4dCgpOwotICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZShlbmRD
b250YWluZXIsIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CisgICAgICAgICAgICBzcGxp
dFRleHROb2RlKCplbmRDb250YWluZXIsIGVuZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAg
ICAgICAgICAgICBpZiAoaXNTdGFydEFuZEVuZE9uU2FtZU5vZGUpCiAgICAgICAgICAgICAgICAg
c3RhcnQgPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUoZW5kQ29udGFpbmVyLT5wcmV2aW91
c1NpYmxpbmcoKSk7CiAgICAgICAgICAgICBpZiAoaXNFbmRBbmRFbmRPZkxhc3RQYXJhZ3JhcGhP
blNhbWVOb2RlKSB7CkBAIC0yNjgsNyArMjY5LDcgQEAgVmlzaWJsZVBvc2l0aW9uIEFwcGx5Qmxv
Y2tFbGVtZW50Q29tbWFuZDo6ZW5kT2ZOZXh0UGFyYWdyYXBoU3BsaXR0aW5nVGV4dE5vZGVzSWYK
ICAgICAvLyBcbiBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0ZXh0IG5vZGUgaW1tZWRpYXRlbHkg
Zm9sbG93aW5nIHRoZSBjdXJyZW50IHBhcmFncmFwaCBpcyB0cmltbWVkIGJ5IG1vdmVQYXJhZ3Jh
cGhXaXRoQ2xvbmVzLgogICAgIC8vIElmIGVuZE9mTmV4dFBhcmFncmFwaCB3YXMgcG9pbnRpbmcg
YXQgdGhpcyBzYW1lIHRleHQgbm9kZSwgZW5kT2ZOZXh0UGFyYWdyYXBoIHdpbGwgYmUgc2hpZnRl
ZCBieSBvbmUgcGFyYWdyYXBoLgogICAgIC8vIEF2b2lkIHRoaXMgYnkgc3BsaXR0aW5nICJcbiIK
LSAgICBzcGxpdFRleHROb2RlKHRleHQsIDEpOworICAgIHNwbGl0VGV4dE5vZGUoKnRleHQsIDEp
OwogCiAgICAgaWYgKHRleHQgPT0gc3RhcnQuY29udGFpbmVyTm9kZSgpICYmIGlzPFRleHQ+KHRl
eHQtPnByZXZpb3VzU2libGluZygpKSkgewogICAgICAgICBBU1NFUlQoc3RhcnQub2Zmc2V0SW5D
b250YWluZXJOb2RlKCkgPCBwb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4IDViZWI2YWE4
MGVlZDI5NDg2MGIxNmRjNGIyM2NmOTY4OTViNGEwZjAuLjYwMzc0MDIwNDZiN2RmY2ZhYmE3ZTMy
ZmMwOGUzN2U3ZDhiNDYyZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCkBAIC0zODQsNyArMzg0LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqIHN0eWxlKQogICAgIH0K
IAogICAgIC8vIFRoZXNlIHNwYW5zIHdlcmUgYWRkZWQgYnkgdXMuIElmIGVtcHR5IGFmdGVyIGZv
bnQgc2l6ZSBjaGFuZ2VzLCB0aGV5IGNhbiBiZSByZW1vdmVkLgotICAgIFZlY3RvcjxSZWZQdHI8
SFRNTEVsZW1lbnQ+PiB1bnN0eWxlZFNwYW5zOworICAgIFZlY3RvcjxSZWY8SFRNTEVsZW1lbnQ+
PiB1bnN0eWxlZFNwYW5zOwogICAgIAogICAgIE5vZGUqIGxhc3RTdHlsZWROb2RlID0gbnVsbHB0
cjsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7IG5vZGUgIT0gYmV5b25kRW5kOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKQEAgLTQxNywxNyArNDE3LDE3IEBA
IHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5UmVsYXRpdmVGb250U3R5bGVDaGFuZ2UoRWRp
dGluZ1N0eWxlKiBzdHlsZSkKICAgICAgICAgfQogICAgICAgICBpZiAoY3VycmVudEZvbnRTaXpl
ICE9IGRlc2lyZWRGb250U2l6ZSkgewogICAgICAgICAgICAgaW5saW5lU3R5bGUtPnNldFByb3Bl
cnR5KENTU1Byb3BlcnR5Rm9udFNpemUsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRl
VmFsdWUoZGVzaXJlZEZvbnRTaXplLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKSwgZmFsc2Up
OwotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LmdldCgpLCBzdHlsZUF0dHIs
IGlubGluZVN0eWxlLT5hc1RleHQoKSk7CisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKCpl
bGVtZW50LCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKGlubGluZVN0eWxlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHJlbW92ZU5v
ZGVBdHRyaWJ1dGUoKmVsZW1lbnQsIHN0eWxlQXR0cik7CiAgICAgICAgICAgICBpZiAoaXNTcGFu
V2l0aG91dEF0dHJpYnV0ZXNPclVuc3R5bGVkU3R5bGVTcGFuKCplbGVtZW50KSkKLSAgICAgICAg
ICAgICAgICB1bnN0eWxlZFNwYW5zLmFwcGVuZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICAgICAg
ICAgICAgICB1bnN0eWxlZFNwYW5zLmFwcGVuZChlbGVtZW50LnJlbGVhc2VOb25OdWxsKCkpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiB1bnN0eWxlZFNwYW4gOiB1bnN0eWxl
ZFNwYW5zKQotICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHVuc3R5bGVkU3Bh
bi5nZXQoKSk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4odW5zdHlsZWRT
cGFuKTsKIH0KIAogc3RhdGljIENvbnRhaW5lck5vZGUqIGR1bW15U3BhbkFuY2VzdG9yRm9yTm9k
ZShjb25zdCBOb2RlKiBub2RlKQpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNv
bW1hbmQ6OmNsZWFudXBVbnN0eWxlZEFwcGxlU3R5bGVTcGFucyhDb250YWluZXJOb2RlKiBkdW1t
eVNwYW5BCiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdG9SZW1vdmUpCi0gICAg
ICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CisgICAgICAgIHJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKmVsZW1lbnQpOwogfQogCiBIVE1MRWxlbWVudCogQXBw
bHlTdHlsZUNvbW1hbmQ6OnNwbGl0QW5jZXN0b3JzV2l0aFVuaWNvZGVCaWRpKE5vZGUqIG5vZGUs
IGJvb2wgYmVmb3JlLCBXcml0aW5nRGlyZWN0aW9uIGFsbG93ZWREaXJlY3Rpb24pCkBAIC01MDEs
NyArNTAxLDcgQEAgSFRNTEVsZW1lbnQqIEFwcGx5U3R5bGVDb21tYW5kOjpzcGxpdEFuY2VzdG9y
c1dpdGhVbmljb2RlQmlkaShOb2RlKiBub2RlLCBib29sIGIKICAgICB3aGlsZSAoY3VycmVudE5v
ZGUpIHsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHBhcmVudCA9IGRvd25jYXN0PEVsZW1lbnQ+
KGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkpOwogICAgICAgICBpZiAoYmVmb3JlID8gY3VycmVu
dE5vZGUtPnByZXZpb3VzU2libGluZygpIDogY3VycmVudE5vZGUtPm5leHRTaWJsaW5nKCkpCi0g
ICAgICAgICAgICBzcGxpdEVsZW1lbnQocGFyZW50LCBiZWZvcmUgPyBjdXJyZW50Tm9kZSA6IGN1
cnJlbnROb2RlLT5uZXh0U2libGluZygpKTsKKyAgICAgICAgICAgIHNwbGl0RWxlbWVudCgqcGFy
ZW50LCBiZWZvcmUgPyAqY3VycmVudE5vZGUgOiAqY3VycmVudE5vZGUtPm5leHRTaWJsaW5nKCkp
OwogICAgICAgICBpZiAocGFyZW50ID09IGhpZ2hlc3RBbmNlc3RvcldpdGhVbmljb2RlQmlkaSkK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjdXJyZW50Tm9kZSA9IHBhcmVudDsKQEAgLTUz
OCw5ICs1MzgsOSBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVFbWJlZGRpbmdVcFRv
RW5jbG9zaW5nQmxvY2soTm9kZSogbm9kZSwgTm9kZSogdW5zcAogICAgICAgICAgICAgUmVmUHRy
PE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGlubGluZVN0eWxlID0gY29weVN0eWxlT3JDcmVhdGVF
bXB0eShlbGVtZW50LmlubGluZVN0eWxlKCkpOwogICAgICAgICAgICAgaW5saW5lU3R5bGUtPnNl
dFByb3BlcnR5KENTU1Byb3BlcnR5VW5pY29kZUJpZGksIENTU1ZhbHVlTm9ybWFsKTsKICAgICAg
ICAgICAgIGlubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVjdGlvbik7
Ci0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKCZlbGVtZW50LCBzdHlsZUF0dHIsIGlubGlu
ZVN0eWxlLT5hc1RleHQoKSk7CisgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGVsZW1lbnQs
IHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKICAgICAgICAgICAgIGlmIChpc1Nw
YW5XaXRob3V0QXR0cmlidXRlc09yVW5zdHlsZWRTdHlsZVNwYW4oZWxlbWVudCkpCi0gICAgICAg
ICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigmZWxlbWVudCk7CisgICAgICAg
ICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKICAgICAgICAg
fQogICAgIH0KIH0KQEAgLTc5Miw3ICs3OTIsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjph
cHBseUlubGluZVN0eWxlVG9Ob2RlUmFuZ2UoRWRpdGluZ1N0eWxlJiBzdHlsZSwgTm9kZSYgcwog
ICAgICAgICAgICAgUmVmUHRyPE11dGFibGVTdHlsZVByb3BlcnRpZXM+IGlubGluZVN0eWxlID0g
Y29weVN0eWxlT3JDcmVhdGVFbXB0eShlbGVtZW50LmlubGluZVN0eWxlKCkpOwogICAgICAgICAg
ICAgaWYgKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIG90aGVyU3R5bGUgPSBzdHlsZS5zdHlsZSgp
KQogICAgICAgICAgICAgICAgIGlubGluZVN0eWxlLT5tZXJnZUFuZE92ZXJyaWRlT25Db25mbGlj
dCgqb3RoZXJTdHlsZSk7Ci0gICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKCZlbGVtZW50LCBz
dHlsZUF0dHIsIGlubGluZVN0eWxlLT5hc1RleHQoKSk7CisgICAgICAgICAgICBzZXROb2RlQXR0
cmlidXRlKGVsZW1lbnQsIHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFzVGV4dCgpKTsKICAgICAg
ICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtODM4LDcgKzgzOCw3IEBAIHZv
aWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmFwcGx5SW5saW5lU3R5bGVUb05vZGVSYW5nZShFZGl0aW5n
U3R5bGUmIHN0eWxlLCBOb2RlJiBzCiAKICAgICBmb3IgKGF1dG8mIHJ1biA6IHJ1bnMpIHsKICAg
ICAgICAgaWYgKHJ1bi5kdW1teUVsZW1lbnQpCi0gICAgICAgICAgICByZW1vdmVOb2RlKHJ1bi5k
dW1teUVsZW1lbnQpOworICAgICAgICAgICAgcmVtb3ZlTm9kZSgqcnVuLmR1bW15RWxlbWVudCk7
CiAgICAgICAgIGlmIChydW4uc3RhcnRBbmRFbmRBcmVTdGlsbEluRG9jdW1lbnQoKSkKICAgICAg
ICAgICAgIGFwcGx5SW5saW5lU3R5bGVDaGFuZ2UocnVuLnN0YXJ0LnJlbGVhc2VOb25OdWxsKCks
IHJ1bi5lbmQucmVsZWFzZU5vbk51bGwoKSwgcnVuLmNoYW5nZSwgQWRkU3R5bGVkRWxlbWVudCk7
CiAgICAgfQpAQCAtOTA0LDcgKzkwNCw3IEBAIGJvb2wgQXBwbHlTdHlsZUNvbW1hbmQ6OnJlbW92
ZUlubGluZVN0eWxlRnJvbUVsZW1lbnQoRWRpdGluZ1N0eWxlJiBzdHlsZSwgSFRNTEVsCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgaWYgKGV4dHJhY3RlZFN0eWxlKQogICAgICAg
ICAgICAgZXh0cmFjdGVkU3R5bGUtPm1lcmdlSW5saW5lU3R5bGVPZkVsZW1lbnQoJmVsZW1lbnQs
IEVkaXRpbmdTdHlsZTo6T3ZlcnJpZGVWYWx1ZXMpOwotICAgICAgICByZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuKCZlbGVtZW50KTsKKyAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGls
ZHJlbihlbGVtZW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC05MjYsOSAr
OTI2LDkgQEAgYm9vbCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlSW5saW5lU3R5bGVGcm9tRWxl
bWVudChFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRWwKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OnJlcGxhY2VXaXRoU3Bhbk9yUmVtb3ZlSWZXaXRob3V0QXR0cmlidXRlcyhIVE1MRWxlbWVudCYg
ZWxlbWVudCkKIHsKICAgICBpZiAoaGFzTm9BdHRyaWJ1dGVPck9ubHlTdHlsZUF0dHJpYnV0ZShl
bGVtZW50LCBTdHlsZUF0dHJpYnV0ZVNob3VsZEJlRW1wdHkpKQotICAgICAgICByZW1vdmVOb2Rl
UHJlc2VydmluZ0NoaWxkcmVuKCZlbGVtZW50KTsKKyAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbihlbGVtZW50KTsKICAgICBlbHNlIHsKLSAgICAgICAgSFRNTEVsZW1lbnQqIG5l
d1NwYW5FbGVtZW50ID0gcmVwbGFjZUVsZW1lbnRXaXRoU3BhblByZXNlcnZpbmdDaGlsZHJlbkFu
ZEF0dHJpYnV0ZXMoJmVsZW1lbnQpOworICAgICAgICBIVE1MRWxlbWVudCogbmV3U3BhbkVsZW1l
bnQgPSByZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRl
cyhlbGVtZW50KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChuZXdTcGFuRWxlbWVudCwgbmV3U3Bh
bkVsZW1lbnQgJiYgbmV3U3BhbkVsZW1lbnQtPmlzQ29ubmVjdGVkKCkpOwogICAgIH0KIH0KQEAg
LTk1Nyw3ICs5NTcsNyBAQCBib29sIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1vdmVJbXBsaWNpdGx5
U3R5bGVkRWxlbWVudChFZGl0aW5nU3R5bGUmIHN0eWxlLCBIVE1MRQogICAgICAgICByZW1vdmVO
b2RlQXR0cmlidXRlKGVsZW1lbnQsIGF0dHJpYnV0ZSk7CiAKICAgICBpZiAoaXNFbXB0eUZvbnRU
YWcoJmVsZW1lbnQpIHx8IGlzU3BhbldpdGhvdXRBdHRyaWJ1dGVzT3JVbnN0eWxlZFN0eWxlU3Bh
bihlbGVtZW50KSkKLSAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigmZWxlbWVu
dCk7CisgICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7CiAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTk3NCwxMCArOTc0LDEwIEBAIGJvb2wgQXBwbHlTdHlsZUNv
bW1hbmQ6OnJlbW92ZUNTU1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEhUTUxFbGVtZW50JiBl
bGVtZW50CiAgICAgaWYgKG5ld0lubGluZVN0eWxlLT5pc0VtcHR5KCkpCiAgICAgICAgIHJlbW92
ZU5vZGVBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVBdHRyKTsKICAgICBlbHNlCi0gICAgICAgIHNl
dE5vZGVBdHRyaWJ1dGUoJmVsZW1lbnQsIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPmFzVGV4
dCgpKTsKKyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lu
bGluZVN0eWxlLT5hc1RleHQoKSk7CiAKICAgICBpZiAoaXNTcGFuV2l0aG91dEF0dHJpYnV0ZXNP
clVuc3R5bGVkU3R5bGVTcGFuKGVsZW1lbnQpKQotICAgICAgICByZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuKCZlbGVtZW50KTsKKyAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bihlbGVtZW50KTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTAxOCw3ICsxMDE4LDcgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHlsZVRvUHVzaERvd24oTm9kZSYg
bm9kZSwgRWRpdGluZ1N0eWxlKiBzdHkKICAgICAvLyBTaW5jZSBhZGRJbmxpbmVTdHlsZUlmTmVl
ZGVkIGNhbid0IGFkZCBzdHlsZXMgdG8gYmxvY2stZmxvdyByZW5kZXIgb2JqZWN0cywgYWRkIHN0
eWxlIGF0dHJpYnV0ZSBpbnN0ZWFkLgogICAgIC8vIEZJWE1FOiBhcHBseUlubGluZVN0eWxlVG9S
YW5nZSBzaG91bGQgYmUgdXNlZCBoZXJlIGluc3RlYWQuCiAgICAgaWYgKChub2RlLnJlbmRlcmVy
KCktPmlzUmVuZGVyQmxvY2tGbG93KCkgfHwgbm9kZS5oYXNDaGlsZE5vZGVzKCkpICYmIGlzPEhU
TUxFbGVtZW50Pihub2RlKSkgewotICAgICAgICBzZXROb2RlQXR0cmlidXRlKCZkb3duY2FzdDxI
VE1MRWxlbWVudD4obm9kZSksIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFz
VGV4dCgpKTsKKyAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShkb3duY2FzdDxIVE1MRWxlbWVudD4o
bm9kZSksIHN0eWxlQXR0ciwgbmV3SW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTE5OCw3ICsxMTk4LDcgQEAgdm9pZCBBcHBseVN0
eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFBvc2l0aW9uJgogICAgICAgICBuZXdFbmQgPSBlbmQ7CiAKICAgICBSZWZQdHI8VGV4dD4gdGV4
dCA9IHN0YXJ0LmNvbnRhaW5lclRleHQoKTsKLSAgICBzcGxpdFRleHROb2RlKHRleHQsIHN0YXJ0
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKKyAgICBzcGxpdFRleHROb2RlKCp0ZXh0LCBzdGFy
dC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgdXBkYXRlU3RhcnRFbmQoZmlyc3RQb3Np
dGlvbkluTm9kZSh0ZXh0LmdldCgpKSwgbmV3RW5kKTsKIH0KIApAQCAtMTIwOCw3ICsxMjA4LDcg
QEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6c3BsaXRUZXh0QXRFbmQoY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW4KIAogICAgIGJvb2wgc2hvdWxkVXBkYXRlU3RhcnQg
PSBzdGFydC5hbmNob3JUeXBlKCkgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hv
ciAmJiBzdGFydC5jb250YWluZXJOb2RlKCkgPT0gZW5kLmNvbnRhaW5lck5vZGUoKTsKICAgICBU
ZXh0JiB0ZXh0ID0gZG93bmNhc3Q8VGV4dD4oKmVuZC5kZXByZWNhdGVkTm9kZSgpKTsKLSAgICBz
cGxpdFRleHROb2RlKCZ0ZXh0LCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgIHNw
bGl0VGV4dE5vZGUodGV4dCwgZW5kLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKIAogICAgIE5v
ZGUqIHByZXZOb2RlID0gdGV4dC5wcmV2aW91c1NpYmxpbmcoKTsKICAgICBpZiAoIWlzPFRleHQ+
KHByZXZOb2RlKSkKQEAgLTEyMjgsNyArMTIyOCw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OnNwbGl0VGV4dEVsZW1lbnRBdFN0YXJ0KGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9z
CiAgICAgZWxzZQogICAgICAgICBuZXdFbmQgPSBlbmQ7CiAKLSAgICBzcGxpdFRleHROb2RlQ29u
dGFpbmluZ0VsZW1lbnQoc3RhcnQuY29udGFpbmVyVGV4dCgpLCBzdGFydC5vZmZzZXRJbkNvbnRh
aW5lck5vZGUoKSk7CisgICAgc3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50KCpzdGFydC5j
b250YWluZXJUZXh0KCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKICAgICB1cGRh
dGVTdGFydEVuZChwb3NpdGlvbkJlZm9yZU5vZGUoc3RhcnQuY29udGFpbmVyTm9kZSgpKSwgbmV3
RW5kKTsKIH0KIApAQCAtMTIzNyw3ICsxMjM3LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6
c3BsaXRUZXh0RWxlbWVudEF0RW5kKGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXQK
ICAgICBBU1NFUlQoaXM8VGV4dD4oZW5kLmNvbnRhaW5lck5vZGUoKSkpOwogCiAgICAgYm9vbCBz
aG91bGRVcGRhdGVTdGFydCA9IHN0YXJ0LmNvbnRhaW5lck5vZGUoKSA9PSBlbmQuY29udGFpbmVy
Tm9kZSgpOwotICAgIHNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudChlbmQuY29udGFpbmVy
VGV4dCgpLCBlbmQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgIHNwbGl0VGV4dE5vZGVD
b250YWluaW5nRWxlbWVudCgqZW5kLmNvbnRhaW5lclRleHQoKSwgZW5kLm9mZnNldEluQ29udGFp
bmVyTm9kZSgpKTsKIAogICAgIE5vZGUqIHBhcmVudEVsZW1lbnQgPSBlbmQuY29udGFpbmVyTm9k
ZSgpLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFwYXJlbnRFbGVtZW50IHx8ICFwYXJlbnRFbGVt
ZW50LT5wcmV2aW91c1NpYmxpbmcoKSkKQEAgLTEzNDMsNyArMTM0Myw3IEBAIHZvaWQgQXBwbHlT
dHlsZUNvbW1hbmQ6OnN1cnJvdW5kTm9kZVJhbmdlV2l0aEVsZW1lbnQoTm9kZSYgc3RhcnROb2Rl
LCBOb2RlJiBlbmROCiAgICAgd2hpbGUgKG5vZGUpIHsKICAgICAgICAgUmVmUHRyPE5vZGU+IG5l
eHQgPSBub2RlLT5uZXh0U2libGluZygpOwogICAgICAgICBpZiAoaXNFZGl0YWJsZU5vZGUoKm5v
ZGUpKSB7Ci0gICAgICAgICAgICByZW1vdmVOb2RlKG5vZGUpOworICAgICAgICAgICAgcmVtb3Zl
Tm9kZSgqbm9kZSk7CiAgICAgICAgICAgICBhcHBlbmROb2RlKCpub2RlLCBlbGVtZW50LmNvcHlS
ZWYoKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG5vZGUgPT0gJmVuZE5vZGUpCkBAIC0xMzgz
LDcgKzEzODMsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjphZGRCbG9ja1N0eWxlKGNvbnN0
IFN0eWxlQ2hhbmdlJiBzdHlsZUNoYW5nZSwgSFRNTEVsZW1lbgogICAgICAgICAgICAgY3NzVGV4
dC5hcHBlbmQoJyAnKTsKICAgICAgICAgY3NzVGV4dC5hcHBlbmQoZGVjbC0+YXNUZXh0KCkpOwog
ICAgIH0KLSAgICBzZXROb2RlQXR0cmlidXRlKCZibG9jaywgc3R5bGVBdHRyLCBjc3NUZXh0LnRv
U3RyaW5nKCkpOworICAgIHNldE5vZGVBdHRyaWJ1dGUoYmxvY2ssIHN0eWxlQXR0ciwgY3NzVGV4
dC50b1N0cmluZygpKTsKIH0KIAogdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5
bGVJZk5lZWRlZChFZGl0aW5nU3R5bGUqIHN0eWxlLCBOb2RlJiBzdGFydCwgTm9kZSYgZW5kLCBF
QWRkU3R5bGVkRWxlbWVudCBhZGRTdHlsZWRFbGVtZW50KQpAQCAtMTM5Niw3ICsxMzk2LDcgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YWRkSW5saW5lU3R5bGVJZk5lZWRlZChFZGl0aW5nU3R5
bGUqIHN0eWxlLCBOb2RlJiBzdGFydCwKICAgICBTdHlsZUNoYW5nZSBzdHlsZUNoYW5nZShzdHls
ZSwgcG9zaXRpb25Ub0NvbXB1dGVJbmxpbmVTdHlsZUNoYW5nZShzdGFydCwgZHVtbXlFbGVtZW50
KSk7CiAKICAgICBpZiAoZHVtbXlFbGVtZW50KQotICAgICAgICByZW1vdmVOb2RlKGR1bW15RWxl
bWVudCk7CisgICAgICAgIHJlbW92ZU5vZGUoKmR1bW15RWxlbWVudCk7CiAKICAgICBhcHBseUlu
bGluZVN0eWxlQ2hhbmdlKHN0YXJ0LCBlbmQsIHN0eWxlQ2hhbmdlLCBhZGRTdHlsZWRFbGVtZW50
KTsKIH0KQEAgLTE0NDIsMTEgKzE0NDIsMTEgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBw
bHlJbmxpbmVTdHlsZUNoYW5nZShOb2RlJiBwYXNzZWRTdGFydCwgTm9kZSYgcGFzc2VkRW4KICAg
ICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlGb250Q29sb3IoKSB8fCBzdHlsZUNoYW5nZS5hcHBseUZv
bnRGYWNlKCkgfHwgc3R5bGVDaGFuZ2UuYXBwbHlGb250U2l6ZSgpKSB7CiAgICAgICAgIGlmIChm
b250Q29udGFpbmVyKSB7CiAgICAgICAgICAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlGb250Q29s
b3IoKSkKLSAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGZvbnRDb250YWluZXIsIGNv
bG9yQXR0ciwgc3R5bGVDaGFuZ2UuZm9udENvbG9yKCkpOworICAgICAgICAgICAgICAgIHNldE5v
ZGVBdHRyaWJ1dGUoKmZvbnRDb250YWluZXIsIGNvbG9yQXR0ciwgc3R5bGVDaGFuZ2UuZm9udENv
bG9yKCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlQ2hhbmdlLmFwcGx5Rm9udEZhY2UoKSkKLSAg
ICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKGZvbnRDb250YWluZXIsIGZhY2VBdHRyLCBz
dHlsZUNoYW5nZS5mb250RmFjZSgpKTsKKyAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRl
KCpmb250Q29udGFpbmVyLCBmYWNlQXR0ciwgc3R5bGVDaGFuZ2UuZm9udEZhY2UoKSk7CiAgICAg
ICAgICAgICBpZiAoc3R5bGVDaGFuZ2UuYXBwbHlGb250U2l6ZSgpKQotICAgICAgICAgICAgICAg
IHNldE5vZGVBdHRyaWJ1dGUoZm9udENvbnRhaW5lciwgc2l6ZUF0dHIsIHN0eWxlQ2hhbmdlLmZv
bnRTaXplKCkpOworICAgICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoKmZvbnRDb250YWlu
ZXIsIHNpemVBdHRyLCBzdHlsZUNoYW5nZS5mb250U2l6ZSgpKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGF1dG8gZm9udEVsZW1lbnQgPSBjcmVhdGVGb250RWxlbWVudChkb2N1bWVu
dCgpKTsKICAgICAgICAgICAgIGlmIChzdHlsZUNoYW5nZS5hcHBseUZvbnRDb2xvcigpKQpAQCAt
MTQ2NCw5ICsxNDY0LDkgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6YXBwbHlJbmxpbmVTdHls
ZUNoYW5nZShOb2RlJiBwYXNzZWRTdGFydCwgTm9kZSYgcGFzc2VkRW4KICAgICAgICAgICAgIGlm
IChhdXRvIGV4aXN0aW5nU3R5bGUgPSBzdHlsZUNvbnRhaW5lci0+aW5saW5lU3R5bGUoKSkgewog
ICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lU3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShl
eGlzdGluZ1N0eWxlKTsKICAgICAgICAgICAgICAgICBpbmxpbmVTdHlsZS0+b3ZlcnJpZGVXaXRo
U3R5bGUoc3R5bGVUb01lcmdlKTsKLSAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRlKHN0
eWxlQ29udGFpbmVyLCBzdHlsZUF0dHIsIGlubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7
CisgICAgICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZSgqc3R5bGVDb250YWluZXIsIHN0eWxl
QXR0ciwgaW5saW5lU3R5bGUtPnN0eWxlKCktPmFzVGV4dCgpKTsKICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgIHNldE5vZGVBdHRyaWJ1dGUoc3R5bGVDb250YWluZXIsIHN0eWxl
QXR0ciwgc3R5bGVUb01lcmdlLT5hc1RleHQoKSk7CisgICAgICAgICAgICAgICAgc2V0Tm9kZUF0
dHJpYnV0ZSgqc3R5bGVDb250YWluZXIsIHN0eWxlQXR0ciwgc3R5bGVUb01lcmdlLT5hc1RleHQo
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhdXRvIHN0eWxlRWxlbWVudCA9IGNy
ZWF0ZVN0eWxlU3BhbkVsZW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBzdHlsZUVsZW1l
bnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsIHN0eWxlVG9NZXJnZS0+YXNUZXh0KCkpOwpAQCAt
MTUyOCw3ICsxNTI4LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6am9pbkNoaWxkVGV4dE5v
ZGVzKE5vZGUqIG5vZGUsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY28KICAgICAgICAgICAgIG5l
d0VuZCA9IFBvc2l0aW9uKGNoaWxkVGV4dC5wdHIoKSwgY2hpbGRUZXh0LT5sZW5ndGgoKSArIGVu
ZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgIFN0cmluZyB0ZXh0VG9Nb3ZlID0g
bmV4dFRleHQuZGF0YSgpOwogICAgICAgICBpbnNlcnRUZXh0SW50b05vZGUoY2hpbGRUZXh0LCBj
aGlsZFRleHQtPmxlbmd0aCgpLCB0ZXh0VG9Nb3ZlKTsKLSAgICAgICAgcmVtb3ZlTm9kZShuZXh0
KTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbmV4dCk7CiAgICAgICAgIC8vIGRvbid0IG1vdmUgY2hp
bGQgbm9kZSBwb2ludGVyLiBpdCBtYXkgd2FudCB0byBtZXJnZSB3aXRoIG1vcmUgdGV4dCBub2Rl
cy4KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9j
a3F1b3RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0JyZWFrQmxvY2txdW90
ZUNvbW1hbmQuY3BwCmluZGV4IDk4MmNjOTk1MmYwOTdlNDc3ZGQ1YjRhMzE5YTI2OGM1NDNiMjc4
MWUuLjU4MjFiMDgyZDk2OGZiYzg0NWE5NTJhMzdhZDRiYjdjODk5MjJmZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQnJlYWtCbG9ja3F1b3RlQ29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9CcmVha0Jsb2NrcXVvdGVDb21tYW5kLmNwcApAQCAtMTEy
LDcgKzExMiw3IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAg
ICAgICAgICBzdGFydE5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpzdGFydE5vZGUpOwogICAg
ICAgICAgICAgQVNTRVJUKHN0YXJ0Tm9kZSk7CiAgICAgICAgIH0gZWxzZSBpZiAocG9zLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPiAwKQotICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSgmdGV4
dE5vZGUsIHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKKyAgICAgICAgICAgIHNwbGl0
VGV4dE5vZGUodGV4dE5vZGUsIHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKICAgICB9
IGVsc2UgaWYgKHBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpID4gMCkgewogICAgICAgICBO
b2RlKiBjaGlsZEF0T2Zmc2V0ID0gc3RhcnROb2RlLT50cmF2ZXJzZVRvQ2hpbGRBdChwb3MuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7CiAgICAgICAgIHN0YXJ0Tm9kZSA9IGNoaWxkQXRPZmZz
ZXQgPyBjaGlsZEF0T2Zmc2V0IDogTm9kZVRyYXZlcnNhbDo6bmV4dCgqc3RhcnROb2RlKTsKQEAg
LTE0OSwxNCArMTQ5LDE0IEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9BcHBseSgp
CiAgICAgICAgICAgICB3aGlsZSAobGlzdENoaWxkTm9kZSAmJiAhbGlzdENoaWxkTm9kZS0+aGFz
VGFnTmFtZShsaVRhZykpCiAgICAgICAgICAgICAgICAgbGlzdENoaWxkTm9kZSA9IGxpc3RDaGls
ZE5vZGUtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBpZiAobGlzdENoaWxkTm9kZSAmJiBp
czxSZW5kZXJMaXN0SXRlbT4obGlzdENoaWxkTm9kZS0+cmVuZGVyZXIoKSkpCi0gICAgICAgICAg
ICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShjbG9uZWRDaGlsZC5wdHIoKSwgc3RhcnRBdHRyLCBBdG9t
aWNTdHJpbmc6Om51bWJlcihkb3duY2FzdDxSZW5kZXJMaXN0SXRlbT4oKmxpc3RDaGlsZE5vZGUt
PnJlbmRlcmVyKCkpLnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBzZXROb2RlQXR0cmlidXRl
KGNsb25lZENoaWxkLCBzdGFydEF0dHIsIEF0b21pY1N0cmluZzo6bnVtYmVyKGRvd25jYXN0PFJl
bmRlckxpc3RJdGVtPigqbGlzdENoaWxkTm9kZS0+cmVuZGVyZXIoKSkudmFsdWUoKSkpOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgYXBwZW5kTm9kZShjbG9uZWRDaGlsZC5jb3B5
UmVmKCksIGNsb25lZEFuY2VzdG9yLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICBjbG9uZWRB
bmNlc3RvciA9IFdURk1vdmUoY2xvbmVkQ2hpbGQpOwogICAgIH0KIAotICAgIG1vdmVSZW1haW5p
bmdTaWJsaW5nc1RvTmV3UGFyZW50KHN0YXJ0Tm9kZSwgMCwgY2xvbmVkQW5jZXN0b3IpOworICAg
IG1vdmVSZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50KHN0YXJ0Tm9kZSwgMCwgKmNsb25lZEFu
Y2VzdG9yKTsKIAogICAgIGlmICghYW5jZXN0b3JzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBT
cGxpdCB0aGUgdHJlZSB1cCB0aGUgYW5jZXN0b3IgY2hhaW4gdW50aWwgdGhlIHRvcEJsb2NrcXVv
dGUKQEAgLTE2OCwxMiArMTY4LDEyIEBAIHZvaWQgQnJlYWtCbG9ja3F1b3RlQ29tbWFuZDo6ZG9B
cHBseSgpCiAgICAgICAgIGZvciAoYW5jZXN0b3IgPSBhbmNlc3RvcnMuZmlyc3QoKSwgY2xvbmVk
UGFyZW50ID0gY2xvbmVkQW5jZXN0b3ItPnBhcmVudEVsZW1lbnQoKTsKICAgICAgICAgICAgICBh
bmNlc3RvciAmJiBhbmNlc3RvciAhPSB0b3BCbG9ja3F1b3RlOwogICAgICAgICAgICAgIGFuY2Vz
dG9yID0gYW5jZXN0b3ItPnBhcmVudEVsZW1lbnQoKSwgY2xvbmVkUGFyZW50ID0gY2xvbmVkUGFy
ZW50LT5wYXJlbnRFbGVtZW50KCkpCi0gICAgICAgICAgICBtb3ZlUmVtYWluaW5nU2libGluZ3NU
b05ld1BhcmVudChhbmNlc3Rvci0+bmV4dFNpYmxpbmcoKSwgMCwgY2xvbmVkUGFyZW50KTsKKyAg
ICAgICAgICAgIG1vdmVSZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50KGFuY2VzdG9yLT5uZXh0
U2libGluZygpLCAwLCAqY2xvbmVkUGFyZW50KTsKIAogICAgICAgICAvLyBJZiB0aGUgc3RhcnRO
b2RlJ3Mgb3JpZ2luYWwgcGFyZW50IGlzIG5vdyBlbXB0eSwgcmVtb3ZlIGl0CiAgICAgICAgIE5v
ZGUqIG9yaWdpbmFsUGFyZW50ID0gYW5jZXN0b3JzLmZpcnN0KCkuZ2V0KCk7CiAgICAgICAgIGlm
ICghb3JpZ2luYWxQYXJlbnQtPmhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgICAgIHJlbW92ZU5v
ZGUob3JpZ2luYWxQYXJlbnQpOworICAgICAgICAgICAgcmVtb3ZlTm9kZSgqb3JpZ2luYWxQYXJl
bnQpOwogICAgIH0KICAgICAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGNsb25lZCBibG9jayBxdW90
ZSByZW5kZXJzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAppbmRleCA4YWFiYjMyY2Y0NTk3NTliZTBiMTQzYzYwOTk2YjIyMTg1ODVhNzFmLi43
ODBjYTZmZmQ2ZDBlY2Q0OGY1MzQ5ZDZhYmIzN2Q1ZmZlNmZhMDg2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcApAQCAtMzAyLDExICszMDIs
NiBAQCB2b2lkIEVkaXRDb21tYW5kQ29tcG9zaXRpb246OmdldE5vZGVzSW5Db21tYW5kKEhhc2hT
ZXQ8Tm9kZSo+JiBub2RlcykKIH0KICNlbmRpZgogCi12b2lkIGFwcGx5Q29tbWFuZChQYXNzUmVm
UHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPiBjb21tYW5kKQotewotICAgIGNvbW1hbmQtPmFwcGx5
KCk7Ci19Ci0KIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpDb21wb3NpdGVFZGl0Q29tbWFuZChEb2N1
bWVudCYgZG9jdW1lbnQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKICAgICA6IEVkaXRDb21t
YW5kKGRvY3VtZW50LCBlZGl0aW5nQWN0aW9uKQogewpAQCAtNTY1LDcgKzU2MCw3IEBAIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6Omluc2VydE5vZGVBdChSZWY8Tm9kZT4mJiBpbnNlcnRDaGls
ZCwgY29uc3QgUG9zaXRpb24mCiAgICAgfSBlbHNlIGlmIChjYXJldE1pbk9mZnNldCgqcmVmQ2hp
bGQpID49IG9mZnNldCkKICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShXVEZNb3ZlKGluc2VydENo
aWxkKSwgKnJlZkNoaWxkKTsKICAgICBlbHNlIGlmIChpczxUZXh0PigqcmVmQ2hpbGQpICYmIGNh
cmV0TWF4T2Zmc2V0KCpyZWZDaGlsZCkgPiBvZmZzZXQpIHsKLSAgICAgICAgc3BsaXRUZXh0Tm9k
ZShkb3duY2FzdDxUZXh0PihyZWZDaGlsZCksIG9mZnNldCk7CisgICAgICAgIHNwbGl0VGV4dE5v
ZGUoZG93bmNhc3Q8VGV4dD4oKnJlZkNoaWxkKSwgb2Zmc2V0KTsKIAogICAgICAgICAvLyBNdXRh
dGlvbiBldmVudHMgKGJ1ZyAyMjYzNCkgZnJvbSB0aGUgdGV4dCBub2RlIGluc2VydGlvbiBtYXkg
aGF2ZSByZW1vdmVkIHRoZSByZWZDaGlsZAogICAgICAgICBpZiAoIXJlZkNoaWxkLT5pc0Nvbm5l
Y3RlZCgpKQpAQCAtNTgzLDQ1ICs1NzgsNDUgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
YXBwZW5kTm9kZShSZWY8Tm9kZT4mJiBub2RlLCBSZWY8Q29udGFpbmVyTm9kZT4mJiBwYXIKIAog
dm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlQ2hpbGRyZW5JblJhbmdlKE5vZGUmIG5v
ZGUsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQogewotICAgIFZlY3RvcjxSZWZQdHI8Tm9k
ZT4+IGNoaWxkcmVuOworICAgIFZlY3RvcjxSZWY8Tm9kZT4+IGNoaWxkcmVuOwogICAgIE5vZGUq
IGNoaWxkID0gbm9kZS50cmF2ZXJzZVRvQ2hpbGRBdChmcm9tKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBmcm9tOyBjaGlsZCAmJiBpIDwgdG87IGkrKywgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkKLSAgICAgICAgY2hpbGRyZW4uYXBwZW5kKGNoaWxkKTsKKyAgICAgICAgY2hpbGRyZW4u
YXBwZW5kKCpjaGlsZCk7CiAKICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCi0gICAg
ICAgIHJlbW92ZU5vZGUoV1RGTW92ZShjaGlsZCkpOworICAgICAgICByZW1vdmVOb2RlKGNoaWxk
KTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZShQYXNzUmVmUHRy
PE5vZGU+IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFz
c3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
cmVtb3ZlTm9kZShOb2RlJiBub2RlLCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSkKIHsKLSAgICBpZiAoIW5vZGUg
fHwgIW5vZGUtPm5vblNoYWRvd0JvdW5kYXJ5UGFyZW50Tm9kZSgpKQorICAgIGlmICghbm9kZS5u
b25TaGFkb3dCb3VuZGFyeVBhcmVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGFwcGx5
Q29tbWFuZFRvQ29tcG9zaXRlKFJlbW92ZU5vZGVDb21tYW5kOjpjcmVhdGUoKm5vZGUsIHNob3Vs
ZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBlZGl0aW5nQWN0aW9uKCkpKTsKKyAgICBh
cHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVOb2RlQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIHNo
b3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBlZGl0aW5nQWN0aW9uKCkpKTsKIH0K
IAotdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bihQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRh
YmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKQordm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihOb2RlJiBub2RlLCBTaG91
bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSkKIHsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShSZW1vdmVOb2RlUHJl
c2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6Y3JlYXRlKG5vZGUsIHNob3VsZEFzc3VtZUNvbnRlbnRJ
c0Fsd2F5c0VkaXRhYmxlLCBlZGl0aW5nQWN0aW9uKCkpKTsKIH0KIAotdm9pZCBDb21wb3NpdGVF
ZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKFBhc3NSZWZQdHI8Tm9kZT4g
bm9kZSkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVBbmRQcnVuZUFuY2Vz
dG9ycyhOb2RlJiBub2RlKQogewotICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBu
b2RlLT5wYXJlbnROb2RlKCk7CisgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG5v
ZGUucGFyZW50Tm9kZSgpOwogICAgIHJlbW92ZU5vZGUobm9kZSk7Ci0gICAgcHJ1bmUoV1RGTW92
ZShwYXJlbnQpKTsKKyAgICBwcnVuZShwYXJlbnQuZ2V0KCkpOwogfQogCi12b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjptb3ZlUmVtYWluaW5nU2libGluZ3NUb05ld1BhcmVudChOb2RlKiBub2Rl
LCBOb2RlKiBwYXN0TGFzdE5vZGVUb01vdmUsIFBhc3NSZWZQdHI8RWxlbWVudD4gcHJwTmV3UGFy
ZW50KQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVJlbWFpbmluZ1NpYmxpbmdzVG9O
ZXdQYXJlbnQoTm9kZSogbm9kZSwgTm9kZSogcGFzdExhc3ROb2RlVG9Nb3ZlLCBFbGVtZW50JiBu
ZXdQYXJlbnQpCiB7CiAgICAgTm9kZVZlY3RvciBub2Rlc1RvUmVtb3ZlOwotICAgIFJlZlB0cjxF
bGVtZW50PiBuZXdQYXJlbnQgPSBwcnBOZXdQYXJlbnQ7CisgICAgUmVmPEVsZW1lbnQ+IHByb3Rl
Y3RlZE5ld1BhcmVudCA9IG5ld1BhcmVudDsKIAogICAgIGZvciAoOyBub2RlICYmIG5vZGUgIT0g
cGFzdExhc3ROb2RlVG9Nb3ZlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAg
bm9kZXNUb1JlbW92ZS5hcHBlbmQoKm5vZGUpOwogCiAgICAgZm9yIChhdXRvJiBub2RlVG9SZW1v
dmUgOiBub2Rlc1RvUmVtb3ZlKSB7Ci0gICAgICAgIHJlbW92ZU5vZGUobm9kZVRvUmVtb3ZlLnB0
cigpKTsKLSAgICAgICAgYXBwZW5kTm9kZShXVEZNb3ZlKG5vZGVUb1JlbW92ZSksICpuZXdQYXJl
bnQpOworICAgICAgICByZW1vdmVOb2RlKG5vZGVUb1JlbW92ZSk7CisgICAgICAgIGFwcGVuZE5v
ZGUoV1RGTW92ZShub2RlVG9SZW1vdmUpLCBuZXdQYXJlbnQpOwogICAgIH0KIH0KIApAQCAtNjMz
LDEyICs2MjgsMTIgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6dXBkYXRlUG9zaXRpb25G
b3JOb2RlUmVtb3ZhbFByZXNlcnZpbmdDaGlsZHJlbihQb3NpdGkKICAgICAgICAgcG9zaXRpb24u
bW92ZVRvT2Zmc2V0KG9mZnNldCk7ICAgIAogfQogCi1IVE1MRWxlbWVudCogQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OnJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRy
aWJ1dGVzKFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IG5vZGUpCitIVE1MRWxlbWVudCogQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5B
bmRBdHRyaWJ1dGVzKEhUTUxFbGVtZW50JiBlbGVtZW50KQogewogICAgIC8vIEl0IHdvdWxkIGFs
c28gYmUgcG9zc2libGUgdG8gaW1wbGVtZW50IGFsbCBvZiBSZXBsYWNlTm9kZVdpdGhTcGFuQ29t
bWFuZAogICAgIC8vIGFzIGEgc2VyaWVzIG9mIGV4aXN0aW5nIHNtYWxsZXIgZWRpdCBjb21tYW5k
cy4gIFNvbWVvbmUgd2hvIHdhbnRlZCB0bwogICAgIC8vIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGVk
aXQgY29tbWFuZHMgY291bGQgZG8gc28gaGVyZS4KLSAgICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNl
Tm9kZVdpdGhTcGFuQ29tbWFuZDo6Y3JlYXRlKG5vZGUpOworICAgIGF1dG8gY29tbWFuZCA9IFJl
cGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpjcmVhdGUoZWxlbWVudCk7CiAgICAgYXV0byogY29t
bWFuZFB0ciA9IGNvbW1hbmQucHRyKCk7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoV1RG
TW92ZShjb21tYW5kKSk7CiAgICAgLy8gUmV0dXJuaW5nIGEgcmF3IHBvaW50ZXIgaGVyZSBpcyBP
SyBiZWNhdXNlIHRoZSBjb21tYW5kIGlzIHJldGFpbmVkIGJ5CkBAIC02NDgsMTggKzY0MywxOCBA
QCBIVE1MRWxlbWVudCogQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlcGxhY2VFbGVtZW50V2l0aFNw
YW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdAogICAgIHJldHVybiBjb21tYW5kUHRyLT5zcGFuRWxl
bWVudCgpOwogfQogCi12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcnVuZShQYXNzUmVmUHRy
PE5vZGU+IG5vZGUpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwcnVuZShOb2RlKiBub2Rl
KQogewotICAgIGlmIChSZWZQdHI8Tm9kZT4gaGlnaGVzdE5vZGVUb1JlbW92ZSA9IGhpZ2hlc3RO
b2RlVG9SZW1vdmVJblBydW5pbmcobm9kZS5nZXQoKSkpCi0gICAgICAgIHJlbW92ZU5vZGUoV1RG
TW92ZShoaWdoZXN0Tm9kZVRvUmVtb3ZlKSk7CisgICAgaWYgKGF1dG8qIGhpZ2hlc3ROb2RlVG9S
ZW1vdmUgPSBoaWdoZXN0Tm9kZVRvUmVtb3ZlSW5QcnVuaW5nKG5vZGUpKQorICAgICAgICByZW1v
dmVOb2RlKCpoaWdoZXN0Tm9kZVRvUmVtb3ZlKTsKIH0KIAotdm9pZCBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6c3BsaXRUZXh0Tm9kZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIHVuc2lnbmVkIG9mZnNl
dCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0VGV4dE5vZGUoVGV4dCYgbm9kZSwg
dW5zaWduZWQgb2Zmc2V0KQogewogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNwbGl0VGV4
dE5vZGVDb21tYW5kOjpjcmVhdGUobm9kZSwgb2Zmc2V0KSk7CiB9CiAKLXZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnNwbGl0RWxlbWVudChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIFBh
c3NSZWZQdHI8Tm9kZT4gYXRDaGlsZCkKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNwbGl0
RWxlbWVudChFbGVtZW50JiBlbGVtZW50LCBOb2RlJiBhdENoaWxkKQogewogICAgIGFwcGx5Q29t
bWFuZFRvQ29tcG9zaXRlKFNwbGl0RWxlbWVudENvbW1hbmQ6OmNyZWF0ZShlbGVtZW50LCBhdENo
aWxkKSk7CiB9CkBAIC02NzAsNyArNjY1LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
bWVyZ2VJZGVudGljYWxFbGVtZW50cyhFbGVtZW50JiBmaXJzdCwgRWxlbWVudCYgc2Vjb24KICAg
ICBSZWY8RWxlbWVudD4gcHJvdGVjdGVkU2Vjb25kID0gc2Vjb25kOwogICAgIEFTU0VSVCghZmly
c3QuaXNEZXNjZW5kYW50T2YoJnNlY29uZCkgJiYgJnNlY29uZCAhPSAmZmlyc3QpOwogICAgIGlm
IChmaXJzdC5uZXh0U2libGluZygpICE9ICZzZWNvbmQpIHsKLSAgICAgICAgcmVtb3ZlTm9kZSgm
c2Vjb25kKTsKKyAgICAgICAgcmVtb3ZlTm9kZShzZWNvbmQpOwogICAgICAgICBpbnNlcnROb2Rl
QWZ0ZXIoc2Vjb25kLCBmaXJzdCk7CiAgICAgfQogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRl
KE1lcmdlSWRlbnRpY2FsRWxlbWVudHNDb21tYW5kOjpjcmVhdGUoZmlyc3QsIHNlY29uZCkpOwpA
QCAtNjgxLDcgKzY3Niw3IEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OndyYXBDb250ZW50
c0luRHVtbXlTcGFuKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3Np
dGUoV3JhcENvbnRlbnRzSW5EdW1teVNwYW5Db21tYW5kOjpjcmVhdGUoZWxlbWVudCkpOwogfQog
Ci12b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1l
bnQoUGFzc1JlZlB0cjxUZXh0PiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQpCit2b2lkIENvbXBvc2l0
ZUVkaXRDb21tYW5kOjpzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoVGV4dCYgdGV4dCwg
dW5zaWduZWQgb2Zmc2V0KQogewogICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKFNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OmNyZWF0ZSh0ZXh0LCBvZmZzZXQpKTsKIH0K
QEAgLTgwOCw3ICs4MDMsNyBAQCBQb3NpdGlvbiBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cG9zaXRp
b25PdXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiAgICAgaWYgKHBvc2l0
aW9uLm9mZnNldEluQ29udGFpbmVyTm9kZSgpID49IGNhcmV0TWF4T2Zmc2V0KCpwb3NpdGlvbi5j
b250YWluZXJOb2RlKCkpKQogICAgICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEFmdGVyTm9k
ZSh0YWJTcGFuKTsKIAotICAgIHNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudCgmZG93bmNh
c3Q8VGV4dD4oKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSksIHBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKTsKKyAgICBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoZG93bmNh
c3Q8VGV4dD4oKnBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKSksIHBvc2l0aW9uLm9mZnNldEluQ29u
dGFpbmVyTm9kZSgpKTsKICAgICByZXR1cm4gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUodGFi
U3Bhbik7CiB9CiAKQEAgLTg0MiwxMCArODM3LDEwIEBAIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OmRlbGV0ZVNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uICZzZWxlY3Rpb24sIGJv
CiAKIHZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVBdHRyaWJ1dGUoRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKQogewotICAgIHNldE5v
ZGVBdHRyaWJ1dGUoJmVsZW1lbnQsIGF0dHJpYnV0ZSwgbnVsbEF0b20pOworICAgIHNldE5vZGVB
dHRyaWJ1dGUoZWxlbWVudCwgYXR0cmlidXRlLCBudWxsQXRvbSk7CiB9CiAKLXZvaWQgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OnNldE5vZGVBdHRyaWJ1dGUoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVt
ZW50LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUpCit2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzZXROb2RlQXR0cmlidXRlKEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShTZXROb2RlQXR0
cmlidXRlQ29tbWFuZDo6Y3JlYXRlKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpKTsKIH0KQEAg
LTk5OCw3ICs5OTMsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVJbnNpZ25p
ZmljYW50VGV4dChUZXh0JiB0ZXh0Tm9kZSwgdW5zaWduZWQgc3RhcgogCiAgICAgaWYgKCFib3gp
IHsKICAgICAgICAgLy8gd2hvbGUgdGV4dCBub2RlIGlzIGVtcHR5Ci0gICAgICAgIHJlbW92ZU5v
ZGUoJnRleHROb2RlKTsKKyAgICAgICAgcmVtb3ZlTm9kZSh0ZXh0Tm9kZSk7CiAgICAgICAgIHJl
dHVybjsgICAgCiAgICAgfQogICAgIApAQCAtMTEzNCw3ICsxMTI5LDcgQEAgdm9pZCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6cmVtb3ZlUGxhY2Vob2xkZXJBdChjb25zdCBQb3NpdGlvbiYgcCkKICAg
ICAKICAgICAvLyBXZSBhcmUgY2VydGFpbiB0aGF0IHRoZSBwb3NpdGlvbiBpcyBhdCBhIGxpbmUg
YnJlYWssIGJ1dCBpdCBtYXkgYmUgYSBiciBvciBhIHByZXNlcnZlZCBuZXdsaW5lLgogICAgIGlm
IChpczxIVE1MQlJFbGVtZW50PigqcC5hbmNob3JOb2RlKCkpKSB7Ci0gICAgICAgIHJlbW92ZU5v
ZGUocC5hbmNob3JOb2RlKCkpOworICAgICAgICByZW1vdmVOb2RlKCpwLmFuY2hvck5vZGUoKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkBAIC0xMjEwLDcgKzEyMDUsNyBAQCBSZWZQ
dHI8Tm9kZT4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGhDb250ZW50c1RvTmV3
QmxvY2tJZk5lY2Vzc2FyeShjbwogICAgIG1vdmVQYXJhZ3JhcGhzKHZpc2libGVQYXJhZ3JhcGhT
dGFydCwgdmlzaWJsZVBhcmFncmFwaEVuZCwgVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25J
bk5vZGUobmV3QmxvY2sucHRyKCkpKSk7CiAKICAgICBpZiAobmV3QmxvY2stPmxhc3RDaGlsZCgp
ICYmIG5ld0Jsb2NrLT5sYXN0Q2hpbGQoKS0+aGFzVGFnTmFtZShiclRhZykgJiYgIWVuZFdhc0Jy
KQotICAgICAgICByZW1vdmVOb2RlKG5ld0Jsb2NrLT5sYXN0Q2hpbGQoKSk7CisgICAgICAgIHJl
bW92ZU5vZGUoKm5ld0Jsb2NrLT5sYXN0Q2hpbGQoKSk7CiAKICAgICByZXR1cm4gV1RGTW92ZShu
ZXdCbG9jayk7CiB9CkBAIC0xMjIzLDcgKzEyMTgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpwdXNoQW5jaG9yRWxlbWVudERvd24oRWxlbWVudCYgYW5jaG9yRWxlbWVudCkKICAgICBh
cHBseVN0eWxlZEVsZW1lbnQoYW5jaG9yRWxlbWVudCk7CiAgICAgLy8gQ2xvbmVzIG9mIGFuY2hv
ckVsZW1lbnQgaGF2ZSBiZWVuIHB1c2hlZCBkb3duLCBub3cgcmVtb3ZlIGl0LgogICAgIGlmIChh
bmNob3JFbGVtZW50LmlzQ29ubmVjdGVkKCkpCi0gICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW4oJmFuY2hvckVsZW1lbnQpOworICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0No
aWxkcmVuKGFuY2hvckVsZW1lbnQpOwogfQogCiAvLyBDbG9uZSB0aGUgcGFyYWdyYXBoIGJldHdl
ZW4gc3RhcnQgYW5kIGVuZCB1bmRlciBibG9ja0VsZW1lbnQsCkBAIC0xMzA4LDcgKzEzMDMsNyBA
QCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpjbGVhbnVwQWZ0ZXJEZWxldGlvbihWaXNpYmxl
UG9zaXRpb24gZGVzdGluYXRpb24pCiAgICAgICAgIEFTU0VSVChub2RlKTsKICAgICAgICAgLy8g
Tm9ybWFsbHkgZGVsZXRpb24gd2lsbCBsZWF2ZSBhIGJyIGFzIGEgcGxhY2Vob2xkZXIuCiAgICAg
ICAgIGlmIChpczxIVE1MQlJFbGVtZW50Pigqbm9kZSkpCi0gICAgICAgICAgICByZW1vdmVOb2Rl
QW5kUHJ1bmVBbmNlc3RvcnMobm9kZSk7CisgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVB
bmNlc3RvcnMoKm5vZGUpOwogICAgICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIHRvIG1vdmUgd2Fz
IGVtcHR5IGFuZCBpbiBhbiBlbXB0eSBibG9jayB0aGF0IAogICAgICAgICAvLyBkb2Vzbid0IHJl
cXVpcmUgYSBwbGFjZWhvbGRlciB0byBwcm9wIGl0c2VsZiBvcGVuIChsaWtlIGEgYm9yZGVyZWQK
ICAgICAgICAgLy8gZGl2IG9yIGFuIGxpKSwgcmVtb3ZlIGl0IGR1cmluZyB0aGUgbW92ZSAodGhl
IGxpc3QgcmVtb3ZhbCBjb2RlCkBAIC0xMzIwLDE0ICsxMzE1LDE0IEBAIHZvaWQgQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OmNsZWFudXBBZnRlckRlbGV0aW9uKFZpc2libGVQb3NpdGlvbiBkZXN0aW5h
dGlvbikKICAgICAgICAgICAgICAgICBwcnVuZShub2RlKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3Rv
cnMobm9kZSk7CisgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoKm5vZGUp
OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGxpbmVCcmVha0V4aXN0c0F0UG9zaXRpb24o
cG9zaXRpb24pKSB7CiAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhIHByZXNlcnZlZCAnXG4nIGF0
IGNhcmV0QWZ0ZXJEZWxldGUuCiAgICAgICAgICAgICAvLyBXZSBjYW4gc2FmZWx5IGFzc3VtZSB0
aGlzIGlzIGEgdGV4dCBub2RlLgogICAgICAgICAgICAgVGV4dCYgdGV4dE5vZGUgPSBkb3duY2Fz
dDxUZXh0Pigqbm9kZSk7CiAgICAgICAgICAgICBpZiAodGV4dE5vZGUubGVuZ3RoKCkgPT0gMSkK
LSAgICAgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobm9kZSk7CisgICAg
ICAgICAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKHRleHROb2RlKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBkZWxldGVUZXh0RnJvbU5vZGUodGV4dE5vZGUs
IHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIDEpOwogICAgICAgICB9CkBAIC0x
NTU1LDggKzE1NTAsOCBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9mRW1w
dHlMaXN0SXRlbSgpCiAgICAgICAgICAgICAgICAgLy8gZS5nLiA8dWw+PGxpPmhlbGxvIDx1bD48
bGk+PGJyPjwvbGk+PC91bD4gPC9saT48L3VsPiBzaG91bGQgYmVjb21lIDx1bD48bGk+aGVsbG88
L2xpPiA8dWw+PGxpPjxicj48L2xpPjwvdWw+IDwvdWw+IGFmdGVyIHRoaXMgc2VjdGlvbgogICAg
ICAgICAgICAgICAgIC8vIElmIGxpc3ROb2RlIGRvZXMgTk9UIGFwcGVhciBhdCB0aGUgZW5kLCB0
aGVuIHdlIHNob3VsZCBjb25zaWRlciBpdCBhcyBhIHJlZ3VsYXIgcGFyYWdyYXBoLgogICAgICAg
ICAgICAgICAgIC8vIGUuZy4gPHVsPjxsaT4gPHVsPjxsaT48YnI+PC9saT48L3VsPiBoZWxsbzwv
bGk+PC91bD4gc2hvdWxkIGJlY29tZSA8dWw+PGxpPiA8ZGl2Pjxicj48L2Rpdj4gaGVsbG88L2xp
PjwvdWw+IGF0IHRoZSBlbmQKLSAgICAgICAgICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNhc3Q8
SFRNTExJRWxlbWVudD4oYmxvY2tFbmNsb3NpbmdMaXN0KSwgbGlzdE5vZGUpOwotICAgICAgICAg
ICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4obGlzdE5vZGUtPnBhcmVudE5vZGUo
KSk7CisgICAgICAgICAgICAgICAgc3BsaXRFbGVtZW50KGRvd25jYXN0PEhUTUxMSUVsZW1lbnQ+
KCpibG9ja0VuY2xvc2luZ0xpc3QpLCAqbGlzdE5vZGUpOworICAgICAgICAgICAgICAgIHJlbW92
ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKmxpc3ROb2RlLT5wYXJlbnROb2RlKCkpOwogICAgICAg
ICAgICAgICAgIG5ld0Jsb2NrID0gSFRNTExJRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gSWYgbGlzdE5vZGUgZG9lcyBOT1QgYXBwZWFy
IGF0IHRoZSBlbmQgb2YgdGhlIG91dGVyIGxpc3QgaXRlbSwgdGhlbiBiZWhhdmUgYXMgaWYgaW4g
YSByZWd1bGFyIHBhcmFncmFwaC4KQEAgLTE1NzEsMTggKzE1NjYsMTggQEAgYm9vbCBDb21wb3Np
dGVFZGl0Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0oKQogICAgIGlmIChpc0xpc3RJ
dGVtKG5leHRMaXN0Tm9kZS5nZXQoKSkgfHwgaXNMaXN0SFRNTEVsZW1lbnQobmV4dExpc3ROb2Rl
LmdldCgpKSkgewogICAgICAgICAvLyBJZiBlbXB0eUxpc3RJdGVtIGZvbGxvd3MgYW5vdGhlciBs
aXN0IGl0ZW0gb3IgbmVzdGVkIGxpc3QsIHNwbGl0IHRoZSBsaXN0IG5vZGUuCiAgICAgICAgIGlm
IChpc0xpc3RJdGVtKHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpIHx8IGlzTGlzdEhUTUxFbGVtZW50
KHByZXZpb3VzTGlzdE5vZGUuZ2V0KCkpKQotICAgICAgICAgICAgc3BsaXRFbGVtZW50KGRvd25j
YXN0PEVsZW1lbnQ+KGxpc3ROb2RlKSwgZW1wdHlMaXN0SXRlbSk7CisgICAgICAgICAgICBzcGxp
dEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4oKmxpc3ROb2RlKSwgKmVtcHR5TGlzdEl0ZW0pOwog
CiAgICAgICAgIC8vIElmIGVtcHR5TGlzdEl0ZW0gaXMgZm9sbG93ZWQgYnkgb3RoZXIgbGlzdCBp
dGVtIG9yIG5lc3RlZCBsaXN0LCB0aGVuIGluc2VydCBuZXdCbG9jayBiZWZvcmUgdGhlIGxpc3Qg
bm9kZS4KICAgICAgICAgLy8gQmVjYXVzZSB3ZSBoYXZlIHNwbGl0dGVkIHRoZSBlbGVtZW50LCBl
bXB0eUxpc3RJdGVtIGlzIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBsaXN0IG5vZGUuCiAgICAg
ICAgIC8vIGkuZS4gaW5zZXJ0IG5ld0Jsb2NrIGJlZm9yZSB1bCBvciBvbCB3aG9zZSBmaXJzdCBl
bGVtZW50IGlzIGVtcHR5TGlzdEl0ZW0KICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZSgqbmV3Qmxv
Y2ssICpsaXN0Tm9kZSk7Ci0gICAgICAgIHJlbW92ZU5vZGUoZW1wdHlMaXN0SXRlbSk7CisgICAg
ICAgIHJlbW92ZU5vZGUoKmVtcHR5TGlzdEl0ZW0pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFdoZW4gZW1wdHlMaXN0SXRlbSBkb2VzIG5vdCBmb2xsb3cgYW55IGxpc3QgaXRlbSBvciBuZXN0
ZWQgbGlzdCwgaW5zZXJ0IG5ld0Jsb2NrIGFmdGVyIHRoZSBlbmNsb3NpbmcgbGlzdCBub2RlLgog
ICAgICAgICAvLyBSZW1vdmUgdGhlIGVuY2xvc2luZyBub2RlIGlmIGVtcHR5TGlzdEl0ZW0gaXMg
dGhlIG9ubHkgY2hpbGQ7IG90aGVyd2lzZSBqdXN0IHJlbW92ZSBlbXB0eUxpc3RJdGVtLgogICAg
ICAgICBpbnNlcnROb2RlQWZ0ZXIoKm5ld0Jsb2NrLCAqbGlzdE5vZGUpOwotICAgICAgICByZW1v
dmVOb2RlKGlzTGlzdEl0ZW0ocHJldmlvdXNMaXN0Tm9kZS5nZXQoKSkgfHwgaXNMaXN0SFRNTEVs
ZW1lbnQocHJldmlvdXNMaXN0Tm9kZS5nZXQoKSkgPyBlbXB0eUxpc3RJdGVtIDogbGlzdE5vZGUp
OworICAgICAgICByZW1vdmVOb2RlKGlzTGlzdEl0ZW0ocHJldmlvdXNMaXN0Tm9kZS5nZXQoKSkg
fHwgaXNMaXN0SFRNTEVsZW1lbnQocHJldmlvdXNMaXN0Tm9kZS5nZXQoKSkgPyAqZW1wdHlMaXN0
SXRlbSA6ICpsaXN0Tm9kZSk7CiAgICAgfQogCiAgICAgYXBwZW5kQmxvY2tQbGFjZWhvbGRlcigq
bmV3QmxvY2spOwpAQCAtMTYzNiw3ICsxNjMxLDcgQEAgYm9vbCBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6YnJlYWtPdXRPZkVtcHR5TWFpbEJsb2NrcXVvdGVkUGFyYWdyYXBoKCkKICAgICBBU1NFUlQo
Y2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+aGFzVGFnTmFtZShiclRhZykgfHwgKGNhcmV0UG9z
LmRlcHJlY2F0ZWROb2RlKCktPmlzVGV4dE5vZGUoKSAmJiBjYXJldFBvcy5kZXByZWNhdGVkTm9k
ZSgpLT5yZW5kZXJlcigpLT5zdHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKSk7CiAgICAgCiAgICAg
aWYgKGNhcmV0UG9zLmRlcHJlY2F0ZWROb2RlKCktPmhhc1RhZ05hbWUoYnJUYWcpKQotICAgICAg
ICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoY2FyZXRQb3MuZGVwcmVjYXRlZE5vZGUoKSk7
CisgICAgICAgIHJlbW92ZU5vZGVBbmRQcnVuZUFuY2VzdG9ycygqY2FyZXRQb3MuZGVwcmVjYXRl
ZE5vZGUoKSk7CiAgICAgZWxzZSBpZiAoaXM8VGV4dD4oKmNhcmV0UG9zLmRlcHJlY2F0ZWROb2Rl
KCkpKSB7CiAgICAgICAgIEFTU0VSVChjYXJldFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
ID09IDApOwogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCpjYXJldFBv
cy5kZXByZWNhdGVkTm9kZSgpKTsKQEAgLTE3MzEsNyArMTcyNiw3IEBAIFJlZlB0cjxOb2RlPiBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6c3BsaXRUcmVlVG9Ob2RlKE5vZGUqIHN0YXJ0LCBOb2RlKiBl
bmQsIGJvb2wKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uSW5QYXJlbnQgPSBmaXJz
dFBvc2l0aW9uSW5Ob2RlKG5vZGUtPnBhcmVudE5vZGUoKSk7CiAgICAgICAgIFZpc2libGVQb3Np
dGlvbiBwb3NpdGlvbkluTm9kZSA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlLmdl
dCgpKTsKICAgICAgICAgaWYgKHBvc2l0aW9uSW5QYXJlbnQgIT0gcG9zaXRpb25Jbk5vZGUpCi0g
ICAgICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4obm9kZS0+cGFyZW50Tm9k
ZSgpKSwgbm9kZSk7CisgICAgICAgICAgICBzcGxpdEVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4o
Km5vZGUtPnBhcmVudE5vZGUoKSksICpub2RlKTsKICAgICB9CiAKICAgICByZXR1cm4gbm9kZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuaAppbmRleCBh
YmUxYzhiOWRjZTQ0OGY4NDVkNzgxNDhiZWYxYjIwN2UyOGY3ZWU2Li42ODhhMjNiNjUwNjkwOTE0
MGMxMzdlZDY1ZWI2OTRkMjE2M2U3Yjg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5oCkBAIC0xNjEsMjEgKzE2MSwyMSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgYm9vbCBzaG91bGRSZWJhbGFuY2VMZWFkaW5nV2hpdGVzcGFjZUZvcihjb25zdCBTdHJpbmcm
KSBjb25zdDsKICAgICB2b2lkIHJlbW92ZU5vZGVBdHRyaWJ1dGUoRWxlbWVudCYsIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSk7CiAgICAgdm9pZCByZW1vdmVDaGlsZHJlbkluUmFuZ2Uo
Tm9kZSYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0
YWJsZSA9IERvTm90QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwotICAgIEhUTUxFbGVt
ZW50KiByZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRl
cyhQYXNzUmVmUHRyPEhUTUxFbGVtZW50Pik7Ci0gICAgdm9pZCByZW1vdmVOb2RlUHJlc2Vydmlu
Z0NoaWxkcmVuKFBhc3NSZWZQdHI8Tm9kZT4sIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlID0gRG9Ob3RBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7Ci0gICAgdm9pZCBy
ZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoUGFzc1JlZlB0cjxOb2RlPik7Ci0gICAgdm9pZCBt
b3ZlUmVtYWluaW5nU2libGluZ3NUb05ld1BhcmVudChOb2RlKiwgTm9kZSogcGFzdExhc3ROb2Rl
VG9Nb3ZlLCBQYXNzUmVmUHRyPEVsZW1lbnQ+IHBycE5ld1BhcmVudCk7CisgICAgdmlydHVhbCB2
b2lkIHJlbW92ZU5vZGUoTm9kZSYsIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxl
ID0gRG9Ob3RBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAgSFRNTEVsZW1lbnQq
IHJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKEhU
TUxFbGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUm
LCBTaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNzdW1lQ29udGVu
dElzQWx3YXlzRWRpdGFibGUpOworICAgIHZvaWQgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3Jz
KE5vZGUmKTsKKyAgICB2b2lkIG1vdmVSZW1haW5pbmdTaWJsaW5nc1RvTmV3UGFyZW50KE5vZGUq
LCBOb2RlKiBwYXN0TGFzdE5vZGVUb01vdmUsIEVsZW1lbnQmIG5ld1BhcmVudCk7CiAgICAgdm9p
ZCB1cGRhdGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsUHJlc2VydmluZ0NoaWxkcmVuKFBvc2l0aW9u
JiwgTm9kZSYpOwotICAgIHZvaWQgcHJ1bmUoUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCBw
cnVuZShOb2RlKik7CiAgICAgdm9pZCByZXBsYWNlVGV4dEluTm9kZShUZXh0JiwgdW5zaWduZWQg
b2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFRleHQpOwog
ICAgIFBvc2l0aW9uIHJlcGxhY2VTZWxlY3RlZFRleHRJbk5vZGUoY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCByZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFRleHQmLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGNvdW50LCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VGV4dCk7
CiAgICAgUG9zaXRpb24gcG9zaXRpb25PdXRzaWRlVGFiU3Bhbihjb25zdCBQb3NpdGlvbiYpOwot
ICAgIHZvaWQgc2V0Tm9kZUF0dHJpYnV0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+LCBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpOwotICAgIHZv
aWQgc3BsaXRFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NSZWZQdHI8Tm9kZT4gYXRD
aGlsZCk7Ci0gICAgdm9pZCBzcGxpdFRleHROb2RlKFBhc3NSZWZQdHI8VGV4dD4sIHVuc2lnbmVk
IG9mZnNldCk7Ci0gICAgdm9pZCBzcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnQoUGFzc1Jl
ZlB0cjxUZXh0PiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICB2b2lkIHNldE5vZGVBdHRyaWJ1dGUo
RWxlbWVudCYsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSk7CisgICAgdm9pZCBzcGxpdEVsZW1lbnQoRWxlbWVudCYsIE5vZGUmIGF0Q2hp
bGQpOworICAgIHZvaWQgc3BsaXRUZXh0Tm9kZShUZXh0JiwgdW5zaWduZWQgb2Zmc2V0KTsKKyAg
ICB2b2lkIHNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudChUZXh0JiwgdW5zaWduZWQgb2Zm
c2V0KTsKICAgICB2b2lkIHdyYXBDb250ZW50c0luRHVtbXlTcGFuKEVsZW1lbnQmKTsKIAogICAg
IHZvaWQgZGVsZXRlSW5zaWduaWZpY2FudFRleHQoVGV4dCYsIHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBlbmQpOwpAQCAtMjE0LDggKzIxNCw2IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8RWRp
dENvbW1hbmRDb21wb3NpdGlvbj4gbV9jb21wb3NpdGlvbjsKIH07Ci0gICAgCi12b2lkIGFwcGx5
Q29tbWFuZChQYXNzUmVmUHRyPENvbXBvc2l0ZUVkaXRDb21tYW5kPik7CiAKIGlubGluZSBDb21w
b3NpdGVFZGl0Q29tbWFuZCogdG9Db21wb3NpdGVFZGl0Q29tbWFuZChFZGl0Q29tbWFuZCogY29t
bWFuZCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCmluZGV4IGM1Y2VlNzE0MmFlYzQ0M2NjMGI3ZmFiOGQzNDA2NjdjNDk1Y2ZlZGEu
LmE3MDViZTFiNmYzZmQ0MTE4MTI4OGUxMzhiYzljNWQ3M2EwZTVkYmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMzIwLDcg
KzMyMCw3IEBAIGJvb2wgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6aGFuZGxlU3BlY2lhbENhc2VC
UkRlbGV0ZSgpCiAgICAgYm9vbCBpc0JST25MaW5lQnlJdHNlbGYgPSB1cHN0cmVhbVN0YXJ0SXNC
UiAmJiBkb3duc3RyZWFtU3RhcnRJc0JSICYmICgobm9kZUFmdGVyRG93bnN0cmVhbVN0YXJ0ID09
IG5vZGVBZnRlclVwc3RyZWFtRW5kKSB8fCAobm9kZUFmdGVyVXBzdHJlYW1FbmQgJiYgbm9kZUFm
dGVyVXBzdHJlYW1FbmQtPmhhc1RhZ05hbWUoYnJUYWcpICYmIG5vZGVBZnRlclVwc3RyZWFtU3Rh
cnQtPm5leHRTaWJsaW5nKCkgPT0gbm9kZUFmdGVyVXBzdHJlYW1FbmQpKTsKIAogICAgIGlmIChp
c0JST25MaW5lQnlJdHNlbGYpIHsKLSAgICAgICAgcmVtb3ZlTm9kZShub2RlQWZ0ZXJEb3duc3Ry
ZWFtU3RhcnQpOworICAgICAgICByZW1vdmVOb2RlKCpub2RlQWZ0ZXJEb3duc3RyZWFtU3RhcnQp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTM2OCw3ICszNjgsNyBAQCB2b2lk
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcyhOb2RlJiBu
b2RlLCBTaG91bGRBc3N1bWVDbwogICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwobV9s
ZWFkaW5nV2hpdGVzcGFjZSwgbm9kZSk7CiAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVtb3Zh
bChtX3RyYWlsaW5nV2hpdGVzcGFjZSwgbm9kZSk7CiAgICAgCi0gICAgQ29tcG9zaXRlRWRpdENv
bW1hbmQ6OnJlbW92ZU5vZGUoJm5vZGUsIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRh
YmxlKTsKKyAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZShub2RlLCBzaG91bGRB
c3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CiB9CiAgICAgCiBzdGF0aWMgaW5saW5lIGJv
b2wgc2hvdWxkUmVtb3ZlQ29udGVudE9ubHkoY29uc3QgTm9kZSYgbm9kZSkKQEAgLTM3NiwyNCAr
Mzc2LDIyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRSZW1vdmVDb250ZW50T25seShjb25z
dCBOb2RlJiBub2RlKQogICAgIHJldHVybiBpc1RhYmxlU3RydWN0dXJlTm9kZSgmbm9kZSkgfHwg
bm9kZS5pc1Jvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIAotdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjpyZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgU2hvdWxkQXNzdW1lQ29u
dGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUp
Cit2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZU5vZGUoTm9kZSYgbm9kZSwgU2hv
dWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3
YXlzRWRpdGFibGUpCiB7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgICAg
IAotICAgIGlmIChtX3N0YXJ0Um9vdCAhPSBtX2VuZFJvb3QgJiYgIShub2RlLT5pc0Rlc2NlbmRh
bnRPZihtX3N0YXJ0Um9vdC5nZXQoKSkgJiYgbm9kZS0+aXNEZXNjZW5kYW50T2YobV9lbmRSb290
LmdldCgpKSkpIHsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkTm9kZSA9IG5vZGU7CisgICAgaWYg
KG1fc3RhcnRSb290ICE9IG1fZW5kUm9vdCAmJiAhKG5vZGUuaXNEZXNjZW5kYW50T2YobV9zdGFy
dFJvb3QuZ2V0KCkpICYmIG5vZGUuaXNEZXNjZW5kYW50T2YobV9lbmRSb290LmdldCgpKSkpIHsK
ICAgICAgICAgLy8gSWYgYSBub2RlIGlzIG5vdCBpbiBib3RoIHRoZSBzdGFydCBhbmQgZW5kIGVk
aXRhYmxlIHJvb3RzLCByZW1vdmUgaXQgb25seSBpZiBpdHMgaW5zaWRlIGFuIGVkaXRhYmxlIHJl
Z2lvbi4KLSAgICAgICAgaWYgKCFub2RlLT5wYXJlbnROb2RlKCktPmhhc0VkaXRhYmxlU3R5bGUo
KSkgeworICAgICAgICBpZiAoIW5vZGUucGFyZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkp
IHsKICAgICAgICAgICAgIC8vIERvbid0IHJlbW92ZSBub24tZWRpdGFibGUgYXRvbWljIG5vZGVz
LgotICAgICAgICAgICAgaWYgKCFub2RlLT5maXJzdENoaWxkKCkpCisgICAgICAgICAgICBpZiAo
IW5vZGUuZmlyc3RDaGlsZCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IC8vIFNlYXJjaCB0aGlzIG5vbi1lZGl0YWJsZSByZWdpb24gZm9yIGVkaXRhYmxlIHJlZ2lvbnMg
dG8gZW1wdHkuCi0gICAgICAgICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBub2RlLT5maXJzdENo
aWxkKCk7CisgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQo
KTsKICAgICAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAgICAgICAgIFJlZlB0cjxO
b2RlPiBuZXh0Q2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICBy
ZW1vdmVOb2RlKGNoaWxkLmdldCgpLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJs
ZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZSgqY2hpbGQsIHNob3VsZEFzc3VtZUNvbnRl
bnRJc0Fsd2F5c0VkaXRhYmxlKTsKICAgICAgICAgICAgICAgICAvLyBCYWlsIGlmIG5leHRDaGls
ZCBpcyBubyBsb25nZXIgbm9kZSdzIGNoaWxkLgotICAgICAgICAgICAgICAgIGlmIChuZXh0Q2hp
bGQgJiYgbmV4dENoaWxkLT5wYXJlbnROb2RlKCkgIT0gbm9kZSkKKyAgICAgICAgICAgICAgICBp
ZiAobmV4dENoaWxkICYmIG5leHRDaGlsZC0+cGFyZW50Tm9kZSgpICE9ICZub2RlKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7
CiAgICAgICAgICAgICB9CkBAIC00MDMsMjIgKzQwMSwyMiBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OnJlbW92ZU5vZGUoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBTaG91bGRBc3N1bWVD
b250ZQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChzaG91bGRSZW1vdmVDb250ZW50
T25seSgqbm9kZSkpIHsKKyAgICBpZiAoc2hvdWxkUmVtb3ZlQ29udGVudE9ubHkobm9kZSkpIHsK
ICAgICAgICAgLy8gRG8gbm90IHJlbW92ZSBhbiBlbGVtZW50IG9mIHRhYmxlIHN0cnVjdHVyZTsg
cmVtb3ZlIGl0cyBjb250ZW50cy4KICAgICAgICAgLy8gTGlrZXdpc2UgZm9yIHRoZSByb290IGVk
aXRhYmxlIGVsZW1lbnQuCi0gICAgICAgIGF1dG8qIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4
dCgqbm9kZSwgbm9kZS5nZXQoKSk7CisgICAgICAgIGF1dG8qIGNoaWxkID0gTm9kZVRyYXZlcnNh
bDo6bmV4dChub2RlLCAmbm9kZSk7CiAgICAgICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAg
ICAgaWYgKHNob3VsZFJlbW92ZUNvbnRlbnRPbmx5KCpjaGlsZCkpIHsKLSAgICAgICAgICAgICAg
ICBjaGlsZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKmNoaWxkLCBub2RlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBjaGlsZCA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKmNoaWxkLCAmbm9kZSk7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRv
KiByZW1vdmUgPSBjaGlsZDsKLSAgICAgICAgICAgIGNoaWxkID0gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4oKmNoaWxkLCBub2RlLmdldCgpKTsKKyAgICAgICAgICAgIGNoaWxk
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKmNoaWxkLCAmbm9kZSk7CiAg
ICAgICAgICAgICByZW1vdmVOb2RlVXBkYXRpbmdTdGF0ZXMoKnJlbW92ZSwgc2hvdWxkQXNzdW1l
Q29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBB
U1NFUlQoaXM8RWxlbWVudD4oKm5vZGUpKTsKLSAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25j
YXN0PEVsZW1lbnQ+KCpub2RlKTsKKyAgICAgICAgQVNTRVJUKGlzPEVsZW1lbnQ+KG5vZGUpKTsK
KyAgICAgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogICAgICAg
ICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwogICAg
ICAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGluc2VydCBhIHBsYWNlaG9sZGVyIGZvciBkZXNj
ZW5kYW50IHRhYmxlIGNlbGxzLgogICAgICAgICBhdXRvKiBkZXNjZW5kYW50ID0gRWxlbWVudFRy
YXZlcnNhbDo6bmV4dChlbGVtZW50LCAmZWxlbWVudCk7CkBAIC00MzAsNyArNDI4LDcgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVOb2RlKFBhc3NSZWZQdHI8Tm9kZT4gbm9k
ZSwgU2hvdWxkQXNzdW1lQ29udGUKICAgICAgICAgaW5zZXJ0QmxvY2tQbGFjZWhvbGRlckZvclRh
YmxlQ2VsbElmTmVlZGVkKGVsZW1lbnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHJl
bW92ZU5vZGVVcGRhdGluZ1N0YXRlcygqbm9kZSwgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlz
RWRpdGFibGUpOworICAgIHJlbW92ZU5vZGVVcGRhdGluZ1N0YXRlcyhub2RlLCBzaG91bGRBc3N1
bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZVBvc2l0
aW9uRm9yVGV4dFJlbW92YWwoTm9kZSogbm9kZSwgaW50IG9mZnNldCwgaW50IGNvdW50LCBQb3Np
dGlvbiYgcG9zaXRpb24pCkBAIC00NjUsNyArNDYzLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25D
b21tYW5kOjptYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRv
UHIKICAgICAgICAgICAgIG5leHROb2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hp
bGRyZW4oKm5vZGUpOwogICAgICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHJvb3RFZGl0
YWJsZUVsZW1lbnQgPSBub2RlLT5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgICAgICAgICBp
ZiAocm9vdEVkaXRhYmxlRWxlbWVudCkgewotICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUobm9k
ZSk7CisgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgICAgICAgICAg
YXBwZW5kTm9kZSgqbm9kZSwgKnJvb3RFZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CkBAIC01MjEsNyArNTE5LDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5k
OjpoYW5kbGVHZW5lcmFsRGVsZXRlKCkKIAogICAgICAgICAvLyBUaGUgc2VsZWN0aW9uIHRvIGRl
bGV0ZSBpcyBhbGwgaW4gb25lIG5vZGUuCiAgICAgICAgIGlmICghc3RhcnROb2RlLT5yZW5kZXJl
cigpIHx8ICghc3RhcnRPZmZzZXQgJiYgbV9kb3duc3RyZWFtRW5kLmF0TGFzdEVkaXRpbmdQb3Np
dGlvbkZvck5vZGUoKSkpCi0gICAgICAgICAgICByZW1vdmVOb2RlKHN0YXJ0Tm9kZSk7CisgICAg
ICAgICAgICByZW1vdmVOb2RlKCpzdGFydE5vZGUpOwogICAgIH0KICAgICBlbHNlIHsKICAgICAg
ICAgYm9vbCBzdGFydE5vZGVXYXNEZXNjZW5kYW50T2ZFbmROb2RlID0gbV91cHN0cmVhbVN0YXJ0
LmRlcHJlY2F0ZWROb2RlKCktPmlzRGVzY2VuZGFudE9mKG1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkTm9kZSgpKTsKQEAgLTU1MiwxMiArNTUwLDEyIEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29t
bWFuZDo6aGFuZGxlR2VuZXJhbERlbGV0ZSgpCiAgICAgICAgICAgICAgICAgLy8gaWYgd2UganVz
dCByZW1vdmVkIGEgbm9kZSBmcm9tIHRoZSBlbmQgY29udGFpbmVyLCB1cGRhdGUgZW5kIHBvc2l0
aW9uIHNvIHRoZQogICAgICAgICAgICAgICAgIC8vIGNoZWNrIGFib3ZlIHdpbGwgd29yawogICAg
ICAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwobV9kb3duc3RyZWFtRW5k
LCAqbm9kZSk7Ci0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShub2RlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICByZW1vdmVOb2RlKCpub2RlKTsKICAgICAgICAgICAgICAgICBub2RlID0gbmV4
dE5vZGUuZ2V0KCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIE5vZGUq
IG4gPSBub2RlLT5sYXN0RGVzY2VuZGFudCgpOwogICAgICAgICAgICAgICAgIGlmIChtX2Rvd25z
dHJlYW1FbmQuZGVwcmVjYXRlZE5vZGUoKSA9PSBuICYmIG1fZG93bnN0cmVhbUVuZC5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpID49IGNhcmV0TWF4T2Zmc2V0KCpuKSkgewotICAgICAgICAgICAg
ICAgICAgICByZW1vdmVOb2RlKG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgICAgICAgICByZW1v
dmVOb2RlKCpub2RlKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG51bGxwdHI7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KCpub2RlKTsKQEAgLTU2Nyw3ICs1NjUsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OmhhbmRsZUdlbmVyYWxEZWxldGUoKQogICAgICAgICBpZiAobV9kb3duc3RyZWFt
RW5kLmRlcHJlY2F0ZWROb2RlKCkgIT0gc3RhcnROb2RlICYmICFtX3Vwc3RyZWFtU3RhcnQuZGVw
cmVjYXRlZE5vZGUoKS0+aXNEZXNjZW5kYW50T2YobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRO
b2RlKCkpICYmIG1fZG93bnN0cmVhbUVuZC5hbmNob3JOb2RlKCktPmlzQ29ubmVjdGVkKCkgJiYg
bV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkgPj0gY2FyZXRNaW5PZmZz
ZXQoKm1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAgICAgaWYg
KG1fZG93bnN0cmVhbUVuZC5hdExhc3RFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKCkgJiYgIWNhbkhh
dmVDaGlsZHJlbkZvckVkaXRpbmcoKm1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKSkg
ewogICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlIGl0c2VsZiBpcyBmdWxseSBzZWxlY3RlZCwg
bm90IGp1c3QgaXRzIGNvbnRlbnRzLiAgRGVsZXRlIGl0LgotICAgICAgICAgICAgICAgIHJlbW92
ZU5vZGUobV9kb3duc3RyZWFtRW5kLmRlcHJlY2F0ZWROb2RlKCkpOworICAgICAgICAgICAgICAg
IHJlbW92ZU5vZGUoKm1fZG93bnN0cmVhbUVuZC5kZXByZWNhdGVkTm9kZSgpKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzPFRleHQ+KCptX2Rvd25zdHJlYW1F
bmQuZGVwcmVjYXRlZE5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSB0ZXh0
IG5vZGUgdGhhdCBuZWVkcyB0byBiZSB0cmltbWVkCkBAIC02MjEsNyArNjE5LDcgQEAgdm9pZCBE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncmFwaHMoKQogICAgIGlmICghbV9tZXJn
ZUJsb2Nrc0FmdGVyRGVsZXRlKSB7CiAgICAgICAgIGlmIChtX3BydW5lU3RhcnRCbG9ja0lmTmVj
ZXNzYXJ5KSB7CiAgICAgICAgICAgICAvLyBXZSBhcmVuJ3QgZ29pbmcgdG8gbWVyZ2UgaW50byB0
aGUgc3RhcnQgYmxvY2ssIHNvIHJlbW92ZSBpdCBpZiBpdCdzIGVtcHR5LgotICAgICAgICAgICAg
cHJ1bmUobV9zdGFydEJsb2NrKTsKKyAgICAgICAgICAgIHBydW5lKG1fc3RhcnRCbG9jay5nZXQo
KSk7CiAgICAgICAgICAgICAvLyBSZW1vdmluZyB0aGUgc3RhcnQgYmxvY2sgZHVyaW5nIGEgZGVs
ZXRpb24gaXMgdXN1YWxseSBhbiBpbmRpY2F0aW9uIHRoYXQgd2UgbmVlZAogICAgICAgICAgICAg
Ly8gYSBwbGFjZWhvbGRlciwgYnV0IG5vdCBpbiB0aGlzIGNhc2UuCiAgICAgICAgICAgICBtX25l
ZWRQbGFjZWhvbGRlciA9IGZhbHNlOwpAQCAtNjUwLDggKzY0OCwxMSBAQCB2b2lkIERlbGV0ZVNl
bGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygpCiAgICAgLy8gbV9kb3duc3RyZWFtRW5k
J3MgYmxvY2sgaGFzIGJlZW4gZW1wdGllZCBvdXQgYnkgZGVsZXRpb24uICBUaGVyZSBpcyBubyBj
b250ZW50IGluc2lkZSBvZiBpdCB0bwogICAgIC8vIG1vdmUsIHNvIGp1c3QgcmVtb3ZlIGl0Lgog
ICAgIEVsZW1lbnQqIGVuZEJsb2NrID0gZW5jbG9zaW5nQmxvY2sobV9kb3duc3RyZWFtRW5kLmRl
cHJlY2F0ZWROb2RlKCkpOwotICAgIGlmICghZW5kQmxvY2sgfHwgIWVuZEJsb2NrLT5jb250YWlu
cyhzdGFydE9mUGFyYWdyYXBoVG9Nb3ZlLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUo
KSkgfHwgIXN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVk
Tm9kZSgpKSB7Ci0gICAgICAgIHJlbW92ZU5vZGUoZW5jbG9zaW5nQmxvY2sobV9kb3duc3RyZWFt
RW5kLmRlcHJlY2F0ZWROb2RlKCkpKTsKKyAgICBpZiAoIWVuZEJsb2NrKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIWVuZEJsb2NrLT5jb250YWlucyhzdGFydE9mUGFyYWdyYXBoVG9Nb3Zl
LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSkgfHwgIXN0YXJ0T2ZQYXJhZ3JhcGhU
b01vdmUuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpKSB7CisgICAgICAgIHJlbW92
ZU5vZGUoKmVuZEJsb2NrKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKQEAgLTY3Myw3
ICs2NzQsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygp
CiAgICAgLy8gRklYTUU6IENvbnNpZGVyIFJUTC4KICAgICBpZiAoIW1fc3RhcnRzQXRFbXB0eUxp
bmUgJiYgaXNTdGFydE9mUGFyYWdyYXBoKG1lcmdlRGVzdGluYXRpb24pICYmIHN0YXJ0T2ZQYXJh
Z3JhcGhUb01vdmUuYWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSA+IG1lcmdlRGVzdGluYXRpb24u
YWJzb2x1dGVDYXJldEJvdW5kcygpLngoKSkgewogICAgICAgICBpZiAobWVyZ2VEZXN0aW5hdGlv
bi5kZWVwRXF1aXZhbGVudCgpLmRvd25zdHJlYW0oKS5kZXByZWNhdGVkTm9kZSgpLT5oYXNUYWdO
YW1lKGJyVGFnKSkgewotICAgICAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0b3JzKG1l
cmdlRGVzdGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5v
ZGUoKSk7CisgICAgICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMoKm1lcmdlRGVz
dGluYXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kb3duc3RyZWFtKCkuZGVwcmVjYXRlZE5vZGUoKSk7
CiAgICAgICAgICAgICBtX2VuZGluZ1Bvc2l0aW9uID0gc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5k
ZWVwRXF1aXZhbGVudCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC03MTEs
NyArNzEyLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVQcmV2aW91c2x5
U2VsZWN0ZWRFbXB0eVRhYmxlUm93cygpCiAgICAgICAgICAgICBpZiAoaXNUYWJsZVJvd0VtcHR5
KHJvdykpCiAgICAgICAgICAgICAgICAgLy8gVXNlIGEgcmF3IHJlbW92ZU5vZGUsIGluc3RlYWQg
b2YgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZCdzLCBiZWNhdXNlCiAgICAgICAgICAgICAgICAgLy8g
dGhhdCB3b24ndCByZW1vdmUgcm93cywgaXQgb25seSBlbXB0aWVzIHRoZW0gaW4gcHJlcGFyYXRp
b24gZm9yIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1h
bmQ6OnJlbW92ZU5vZGUocm93KTsKKyAgICAgICAgICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFu
ZDo6cmVtb3ZlTm9kZSgqcm93KTsKICAgICAgICAgICAgIHJvdyA9IHByZXZpb3VzUm93LmdldCgp
OwogICAgICAgICB9CiAgICAgfQpAQCAtNzIyLDcgKzcyMyw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6cmVtb3ZlUHJldmlvdXNseVNlbGVjdGVkRW1wdHlUYWJsZVJvd3MoKQogICAg
ICAgICB3aGlsZSAocm93ICYmIHJvdyAhPSBtX2VuZFRhYmxlUm93KSB7CiAgICAgICAgICAgICBS
ZWZQdHI8Tm9kZT4gbmV4dFJvdyA9IHJvdy0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlm
IChpc1RhYmxlUm93RW1wdHkocm93KSkKLSAgICAgICAgICAgICAgICBDb21wb3NpdGVFZGl0Q29t
bWFuZDo6cmVtb3ZlTm9kZShyb3cpOworICAgICAgICAgICAgICAgIENvbXBvc2l0ZUVkaXRDb21t
YW5kOjpyZW1vdmVOb2RlKCpyb3cpOwogICAgICAgICAgICAgcm93ID0gbmV4dFJvdy5nZXQoKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTczNCw3ICs3MzUsNyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlv
bkNvbW1hbmQ6OnJlbW92ZVByZXZpb3VzbHlTZWxlY3RlZEVtcHR5VGFibGVSb3dzKCkKICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogV2UgcHJvYmFibHkgc2hvdWxkbid0IHJlbW92ZSBtX2VuZFRh
YmxlUm93IHVubGVzcyBpdCdzIGZ1bGx5IHNlbGVjdGVkLCBldmVuIGlmIGl0IGlzIGVtcHR5Lgog
ICAgICAgICAgICAgICAgIC8vIFdlJ2xsIG5lZWQgdG8gc3RhcnQgYWRqdXN0aW5nIHRoZSBzZWxl
Y3Rpb24gZW5kcG9pbnRzIGR1cmluZyBkZWxldGlvbiB0byBrbm93IHdoZXRoZXIgb3Igbm90IG1f
ZW5kVGFibGVSb3cKICAgICAgICAgICAgICAgICAvLyB3YXMgZnVsbHkgc2VsZWN0ZWQgaGVyZS4K
LSAgICAgICAgICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVtb3ZlTm9kZShtX2VuZFRh
YmxlUm93LmdldCgpKTsKKyAgICAgICAgICAgICAgICBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZSgqbV9lbmRUYWJsZVJvdyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CkBAIC04MTEsNyArODEyLDcgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpyZW1vdmVS
ZWR1bmRhbnRCbG9ja3MoKQogICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9lbmRpbmdQb3NpdGlv
bi5hbmNob3JOb2RlKCkpCiAgICAgICAgICAgICAgICAgdXBkYXRlUG9zaXRpb25Gb3JOb2RlUmVt
b3ZhbFByZXNlcnZpbmdDaGlsZHJlbihtX2VuZGluZ1Bvc2l0aW9uLCAqbm9kZSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZW1vdmVOb2RlUHJlc2Vy
dmluZ0NoaWxkcmVuKG5vZGUpOworICAgICAgICAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnJl
bW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKm5vZGUpOwogICAgICAgICAgICAgbm9kZSA9IG1f
ZW5kaW5nUG9zaXRpb24uYW5jaG9yTm9kZSgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5oCmluZGV4IDZkOGE3YzIyNjM2YzRmZGExNjM3MjAwNWNm
MjlhYTVhODZjNjU2OGIuLjI5NmFkOWVhMWNkYTc1MDNjYjNiYmU0ZTkyOTExMmVjMzVmY2MyY2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5o
CkBAIC02Niw3ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjYWxjdWxhdGVUeXBpbmdTdHls
ZUFmdGVyRGVsZXRlKCk7CiAgICAgdm9pZCBjbGVhclRyYW5zaWVudFN0YXRlKCk7CiAgICAgdm9p
ZCBtYWtlU3R5bGluZ0VsZW1lbnRzRGlyZWN0Q2hpbGRyZW5PZkVkaXRhYmxlUm9vdFRvUHJldmVu
dFN0eWxlTG9zcygpOwotICAgIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+LCBTaG91
bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSA9IERvTm90QXNzdW1lQ29udGVudElzQWx3
YXlzRWRpdGFibGUpIG92ZXJyaWRlOworICAgIHZvaWQgcmVtb3ZlTm9kZShOb2RlJiwgU2hvdWxk
QXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUgPSBEb05vdEFzc3VtZUNvbnRlbnRJc0Fsd2F5
c0VkaXRhYmxlKSBvdmVycmlkZTsKICAgICB2b2lkIGRlbGV0ZVRleHRGcm9tTm9kZShUZXh0Jiwg
dW5zaWduZWQsIHVuc2lnbmVkKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZVJlZHVuZGFudEJs
b2NrcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggYzNkZDQ4YzM5N2Y0ZmNi
ZTE0ZWY3MDBhM2JmMTQ4MDBhMjU5ZWVmZC4uZTM0YjQxMTBkN2U0Y2EzMTgzYjEyZjFjNzA1M2Nl
MzVlYTFmODNkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTc2LDcgKzE3Niw3
IEBAIHZvaWQgQ2xlYXJUZXh0Q29tbWFuZDo6Q3JlYXRlQW5kQXBwbHkoY29uc3QgUmVmUHRyPEZy
YW1lPiBmcmFtZSkKICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0QWxsKCk7CiAgICAgYXV0
byBjbGVhckNvbW1hbmQgPSBhZG9wdFJlZigqbmV3IENsZWFyVGV4dENvbW1hbmQoKmZyYW1lLT5k
b2N1bWVudCgpKSk7CiAgICAgY2xlYXJDb21tYW5kLT5zZXRTdGFydGluZ1NlbGVjdGlvbihvbGRT
ZWxlY3Rpb24pOwotICAgIGFwcGx5Q29tbWFuZChXVEZNb3ZlKGNsZWFyQ29tbWFuZCkpOworICAg
IGNsZWFyQ29tbWFuZC0+YXBwbHkoKTsKIH0KIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
QEAgLTQxNCw3ICs0MTQsNyBAQCB2b2lkIEVkaXRvcjo6ZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0
RGVsZXRlKGJvb2wgc21hcnREZWxldGUsIEVkaXRBY3Rpb24gZWRpdGluZwogICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhcHBseUNv
bW1hbmQoRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIHNtYXJ0RGVs
ZXRlLCB0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIGVkaXRpbmdBY3Rpb24pKTsKKyAgICBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc21hcnREZWxldGUsIHRydWUs
IGZhbHNlLCBmYWxzZSwgdHJ1ZSwgZWRpdGluZ0FjdGlvbiktPmFwcGx5KCk7CiB9CiAKIHZvaWQg
RWRpdG9yOjpjbGVhclRleHQoKQpAQCAtNTA2LDcgKzUwNiw3IEBAIHZvaWQgRWRpdG9yOjpyZXBs
YWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQmIGZyYWdtZW50LCBib29s
IHNlbGVjCiAgICAgICAgIG9wdGlvbnMgfD0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Oklnbm9y
ZU1haWxCbG9ja3F1b3RlOwogCiAgICAgYXV0byBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCAmZnJhZ21lbnQsIG9wdGlvbnMsIGVkaXRpbmdBY3Rp
b24pOwotICAgIGFwcGx5Q29tbWFuZChjb21tYW5kLnB0cigpKTsKKyAgICBjb21tYW5kLT5hcHBs
eSgpOwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCiAgICAg
c2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKQEAgLTcyOSw3ICs3
MjksNyBAQCB2b2lkIEVkaXRvcjo6ZGVjcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWwoKQogCiB2b2lk
IEVkaXRvcjo6cmVtb3ZlRm9ybWF0dGluZ0FuZFN0eWxlKCkKIHsKLSAgICBhcHBseUNvbW1hbmQo
UmVtb3ZlRm9ybWF0Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCkpKTsKKyAgICBSZW1vdmVGb3Jt
YXRDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSktPmFwcGx5KCk7CiB9CiAKIHZvaWQgRWRpdG9y
OjpjbGVhckxhc3RFZGl0Q29tbWFuZCgpIApAQCAtODA4LDcgKzgwOCw3IEBAIHZvaWQgRWRpdG9y
OjphcHBseVN0eWxlKFJlZlB0cjxFZGl0aW5nU3R5bGU+JiYgc3R5bGUsIEVkaXRBY3Rpb24gZWRp
dGluZ0FjdGlvbikKICAgICAgICAgY29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKCpzdHlsZSwgZWRp
dGluZ0FjdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6
UmFuZ2VTZWxlY3Rpb246Ci0gICAgICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6
Y3JlYXRlKGRvY3VtZW50KCksIHN0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKSk7CisgICAgICAg
IEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3R5bGUuZ2V0KCksIGVkaXRp
bmdBY3Rpb24pLT5hcHBseSgpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAg
ICBicmVhazsKQEAgLTgzOSw3ICs4MzksNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhT
dHlsZShTdHlsZVByb3BlcnRpZXMqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3RpbwogICAg
IGlmIChlbGVtZW50ICYmICFkaXNwYXRjaEJlZm9yZUlucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0
VHlwZU5hbWUsIGlucHV0RXZlbnREYXRhKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwbHlD
b21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgRWRpdGluZ1N0eWxl
OjpjcmVhdGUoc3R5bGUpLnB0cigpLCBlZGl0aW5nQWN0aW9uLCBBcHBseVN0eWxlQ29tbWFuZDo6
Rm9yY2VCbG9ja1Byb3BlcnRpZXMpKTsKKyAgICBBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRv
Y3VtZW50KCksIEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHN0eWxlKS5wdHIoKSwgZWRpdGluZ0FjdGlv
biwgQXBwbHlTdHlsZUNvbW1hbmQ6OkZvcmNlQmxvY2tQcm9wZXJ0aWVzKS0+YXBwbHkoKTsKICAg
ICBjbGllbnQoKS0+ZGlkQXBwbHlTdHlsZSgpOwogICAgIGlmIChlbGVtZW50KQogICAgICAgICBk
aXNwYXRjaElucHV0RXZlbnQoKmVsZW1lbnQsIGlucHV0VHlwZU5hbWUsIGlucHV0RXZlbnREYXRh
KTsKQEAgLTkwMSwxMiArOTAxLDEyIEBAIFN0cmluZyBFZGl0b3I6OnNlbGVjdGlvblN0YXJ0Q1NT
UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCiAKIHZvaWQgRWRpdG9yOjpp
bmRlbnQoKQogewotICAgIGFwcGx5Q29tbWFuZChJbmRlbnRPdXRkZW50Q29tbWFuZDo6Y3JlYXRl
KGRvY3VtZW50KCksIEluZGVudE91dGRlbnRDb21tYW5kOjpJbmRlbnQpKTsKKyAgICBJbmRlbnRP
dXRkZW50Q29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIEluZGVudE91dGRlbnRDb21tYW5kOjpJ
bmRlbnQpLT5hcHBseSgpOwogfQogCiB2b2lkIEVkaXRvcjo6b3V0ZGVudCgpCiB7Ci0gICAgYXBw
bHlDb21tYW5kKEluZGVudE91dGRlbnRDb21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgSW5kZW50
T3V0ZGVudENvbW1hbmQ6Ok91dGRlbnQpKTsKKyAgICBJbmRlbnRPdXRkZW50Q29tbWFuZDo6Y3Jl
YXRlKGRvY3VtZW50KCksIEluZGVudE91dGRlbnRDb21tYW5kOjpPdXRkZW50KS0+YXBwbHkoKTsK
IH0KIAogc3RhdGljIHZvaWQgbm90aWZ5VGV4dEZyb21Db250cm9scyhFbGVtZW50KiBzdGFydFJv
b3QsIEVsZW1lbnQqIGVuZFJvb3QpCkBAIC0xMzMxLDcgKzEzMzEsNyBAQCB2b2lkIEVkaXRvcjo6
c2ltcGxpZnlNYXJrdXAoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBlbmROb2RlKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBhcHBseUNvbW1hbmQoU2ltcGxpZnlNYXJrdXBD
b21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnROb2RlLCBlbmROb2RlID8gTm9kZVRyYXZl
cnNhbDo6bmV4dCgqZW5kTm9kZSkgOiBudWxscHRyKSk7CisgICAgU2ltcGxpZnlNYXJrdXBDb21t
YW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnROb2RlLCBlbmROb2RlID8gTm9kZVRyYXZlcnNh
bDo6bmV4dCgqZW5kTm9kZSkgOiBudWxscHRyKS0+YXBwbHkoKTsKIH0KIAogdm9pZCBFZGl0b3I6
OmNvcHlVUkwoY29uc3QgVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC0yNDQ2LDcg
KzI0NDYsNyBAQCBzdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYQogICAgIHNpemVfdCBwYXJhZ3JhcGhM
ZW5ndGg7CiAgICAgVGV4dEl0ZXJhdG9yOjpnZXRMb2NhdGlvbkFuZExlbmd0aEZyb21SYW5nZSgm
c2NvcGUsICZwYXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2UoKSwgcGFyYWdyYXBoTG9jYXRpb24sIHBh
cmFncmFwaExlbmd0aCk7CiAKLSAgICBhcHBseUNvbW1hbmQoU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCkpOworICAgIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQpLT5h
cHBseSgpOwogCiAgICAgLy8gVGV4dENoZWNraW5nUGFyYWdyYXBoIG1heSBiZSBvcnBoYW5lZCBh
ZnRlciBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG11dGF0ZWQgRE9NLgogICAgIC8vIFNlZSA8
cmRhcjovLzEwMzA1MzE1PiwgaHR0cDovL3dlYmtpdC5vcmcvYi84OTUyNi4KQEAgLTI1NzUsNyAr
MjU3NSw3IEBAIHZvaWQgRWRpdG9yOjptYXJrQW5kUmVwbGFjZUZvcihQYXNzUmVmUHRyPFNwZWxs
Q2hlY2tSZXF1ZXN0PiByZXF1ZXN0LCBjb25zdCBWZWN0CiAgICAgICAgICAgICAgICAgc2VsZWN0
aW9uQ2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVy
Q2hhbmdlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgaWYgKGNhbkVkaXRSaWNobHkoKSkKLSAg
ICAgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKENyZWF0ZUxpbmtDb21tYW5kOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgcmVwbGFjZW1lbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgQ3JlYXRlTGlu
a0NvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCByZXBsYWNlbWVudCktPmFwcGx5KCk7CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGNhbkVkaXQoKSAmJiBzaG91bGRJbnNlcnRUZXh0KHJlcGxhY2Vt
ZW50LCByYW5nZVRvUmVwbGFjZS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpIHsK
ICAgICAgICAgICAgICAgICBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tp
bmdQYXJhZ3JhcGgocGFyYWdyYXBoLCByYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQsIHJlc3Vs
dExvY2F0aW9uLCByZXN1bHRMZW5ndGgpOwogCkBAIC0zMDM4LDcgKzMwMzgsNyBAQCB2b2lkIEVk
aXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKEVkaXRpbmdTdHlsZSYgc3R5bGUsIEVkaXRB
Y3Rpb24gZWRpdGluZ0FjdAogICAgIC8vIEhhbmRsZSBibG9jayBzdHlsZXMsIHN1YnN0cmFjdGlu
ZyB0aGVzZSBmcm9tIHRoZSB0eXBpbmcgc3R5bGUuCiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4g
YmxvY2tTdHlsZSA9IHR5cGluZ1N0eWxlLT5leHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVz
KCk7CiAgICAgaWYgKCFibG9ja1N0eWxlLT5pc0VtcHR5KCkpCi0gICAgICAgIGFwcGx5Q29tbWFu
ZChBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGJsb2NrU3R5bGUuZ2V0KCks
IGVkaXRpbmdBY3Rpb24pKTsKKyAgICAgICAgQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1
bWVudCgpLCBibG9ja1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKS0+YXBwbHkoKTsKIAogICAg
IC8vIFNldCB0aGUgcmVtYWluaW5nIHN0eWxlIGFzIHRoZSB0eXBpbmcgc3R5bGUuCiAgICAgbV9m
cmFtZS5zZWxlY3Rpb24oKS5zZXRUeXBpbmdTdHlsZShXVEZNb3ZlKHR5cGluZ1N0eWxlKSk7CkBA
IC0zNjE5LDEwICszNjE5LDggQEAgdm9pZCBFZGl0b3I6OmhhbmRsZUFjY2VwdGVkQ2FuZGlkYXRl
KFRleHRDaGVja2luZ1Jlc3VsdCBhY2NlcHRlZENhbmRpZGF0ZSkKICAgICBtX2lzSGFuZGxpbmdB
Y2NlcHRlZENhbmRpZGF0ZSA9IHRydWU7CiAKICAgICBpZiAoYXV0byByYW5nZSA9IHJhbmdlRm9y
VGV4dENoZWNraW5nUmVzdWx0KGFjY2VwdGVkQ2FuZGlkYXRlKSkgewotICAgICAgICBpZiAoc2hv
dWxkSW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgcmFuZ2UuZ2V0KCks
IEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKSB7Ci0gICAgICAgICAgICBSZWY8UmVwbGFjZVJh
bmdlV2l0aFRleHRDb21tYW5kPiByZXBsYWNlQ29tbWFuZCA9IFJlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZDo6Y3JlYXRlKHJhbmdlLmdldCgpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVu
dCk7Ci0gICAgICAgICAgICBhcHBseUNvbW1hbmQocmVwbGFjZUNvbW1hbmQucHRyKCkpOwotICAg
ICAgICB9CisgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRlLnJl
cGxhY2VtZW50LCByYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBlZCkpCisgICAg
ICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmNyZWF0ZShyYW5nZS5nZXQoKSwg
YWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQpLT5hcHBseSgpOwogICAgIH0gZWxzZQogICAg
ICAgICBpbnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCBudWxscHRyKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKaW5kZXggNzQyODNiNmQy
NDY5ODczN2IzOWQ2ZjQzYjk3MjY2YzdlODI2NmU0NS4uN2IyZGM2ZWUyN2IyMjI5MDcwYzE5MjNi
Y2JjMGZiMzBmZGQyOTQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3JDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwCkBAIC0xNTgsNyArMTU4LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUFwcGx5UGFyYWdyYXBo
U3R5bGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JDb21tYW5kU291cmNlIHNvdXJjZSwKIHN0YXRpYyBi
b29sIGV4ZWN1dGVJbnNlcnRGcmFnbWVudChGcmFtZSYgZnJhbWUsIFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQpCiB7CiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwot
ICAgIGFwcGx5Q29tbWFuZChSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpmcmFtZS5k
b2N1bWVudCgpLCBmcmFnbWVudCwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0
aW5nLCBFZGl0QWN0aW9uSW5zZXJ0KSk7CisgICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNy
ZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZnJhZ21lbnQsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpQcmV2ZW50TmVzdGluZywgRWRpdEFjdGlvbkluc2VydCktPmFwcGx5KCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTI1MSw3ICsyNTEsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlQ3JlYXRl
TGluayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgUwog
ICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NF
UlQoZnJhbWUuZG9jdW1lbnQoKSk7Ci0gICAgYXBwbHlDb21tYW5kKENyZWF0ZUxpbmtDb21tYW5k
OjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHZhbHVlKSk7CisgICAgQ3JlYXRlTGlua0NvbW1h
bmQ6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgdmFsdWUpLT5hcHBseSgpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC00MTUsNyArNDE1LDcgQEAgc3RhdGljIGJvb2wgZXhlY3V0ZUZvcm1h
dEJsb2NrKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdAog
CiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwogICAgIGF1dG8gY29tbWFuZCA9IEZvcm1h
dEJsb2NrQ29tbWFuZDo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBxdWFsaWZpZWRUYWdOYW1l
LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKLSAgICBhcHBseUNvbW1hbmQoY29tbWFuZC5jb3B5UmVm
KCkpOworICAgIGNvbW1hbmQtPmFwcGx5KCk7CiAgICAgcmV0dXJuIGNvbW1hbmQtPmRpZEFwcGx5
KCk7CiB9CiAKQEAgLTQ0Niw3ICs0NDYsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlSWdub3JlU3Bl
bGxpbmcoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbgogc3Rh
dGljIGJvb2wgZXhlY3V0ZUluZGVudChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFu
ZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBBU1NFUlQoZnJhbWUuZG9jdW1lbnQoKSk7
Ci0gICAgYXBwbHlDb21tYW5kKEluZGVudE91dGRlbnRDb21tYW5kOjpjcmVhdGUoKmZyYW1lLmRv
Y3VtZW50KCksIEluZGVudE91dGRlbnRDb21tYW5kOjpJbmRlbnQpKTsKKyAgICBJbmRlbnRPdXRk
ZW50Q29tbWFuZDo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBJbmRlbnRPdXRkZW50Q29tbWFu
ZDo6SW5kZW50KS0+YXBwbHkoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTA4LDcgKzUw
OCw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnROZXdsaW5lSW5RdW90ZWRDb250ZW50KEZy
YW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tCiBzdGF0aWMgYm9vbCBleGVjdXRlSW5zZXJ0
T3JkZXJlZExpc3QoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNv
bnN0IFN0cmluZyYpCiB7CiAgICAgQVNTRVJUKGZyYW1lLmRvY3VtZW50KCkpOwotICAgIGFwcGx5
Q29tbWFuZChJbnNlcnRMaXN0Q29tbWFuZDo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBJbnNl
cnRMaXN0Q29tbWFuZDo6T3JkZXJlZExpc3QpKTsKKyAgICBJbnNlcnRMaXN0Q29tbWFuZDo6Y3Jl
YXRlKCpmcmFtZS5kb2N1bWVudCgpLCBJbnNlcnRMaXN0Q29tbWFuZDo6T3JkZXJlZExpc3QpLT5h
cHBseSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01MzIsNyArNTMyLDcgQEAgc3RhdGlj
IGJvb2wgZXhlY3V0ZUluc2VydFRleHQoRnJhbWUmIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1h
bmRTb3VyY2UsIGNvbnN0IFMKIHN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRVbm9yZGVyZWRMaXN0
KEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5kU291cmNlLCBjb25zdCBTdHJpbmcm
KQogewogICAgIEFTU0VSVChmcmFtZS5kb2N1bWVudCgpKTsKLSAgICBhcHBseUNvbW1hbmQoSW5z
ZXJ0TGlzdENvbW1hbmQ6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgSW5zZXJ0TGlzdENvbW1h
bmQ6OlVub3JkZXJlZExpc3QpKTsKKyAgICBJbnNlcnRMaXN0Q29tbWFuZDo6Y3JlYXRlKCpmcmFt
ZS5kb2N1bWVudCgpLCBJbnNlcnRMaXN0Q29tbWFuZDo6VW5vcmRlcmVkTGlzdCktPmFwcGx5KCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTg2OSw3ICs4NjksNyBAQCBzdGF0aWMgYm9vbCBl
eGVjdXRlTW92ZVRvUmlnaHRFbmRPZkxpbmVBbmRNb2RpZnlTZWxlY3Rpb24oRnJhbWUmIGZyYW1l
LCBFdmVudCosCiBzdGF0aWMgYm9vbCBleGVjdXRlT3V0ZGVudChGcmFtZSYgZnJhbWUsIEV2ZW50
KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBBU1NFUlQoZnJh
bWUuZG9jdW1lbnQoKSk7Ci0gICAgYXBwbHlDb21tYW5kKEluZGVudE91dGRlbnRDb21tYW5kOjpj
cmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIEluZGVudE91dGRlbnRDb21tYW5kOjpPdXRkZW50KSk7
CisgICAgSW5kZW50T3V0ZGVudENvbW1hbmQ6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgSW5k
ZW50T3V0ZGVudENvbW1hbmQ6Ok91dGRlbnQpLT5hcHBseSgpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0xMTEwLDcgKzExMTAsNyBAQCBzdGF0aWMgYm9vbCBleGVjdXRlVW5kbyhGcmFtZSYg
ZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3RyaW5nJgogc3RhdGlj
IGJvb2wgZXhlY3V0ZVVubGluayhGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSwgY29uc3QgU3RyaW5nJikKIHsKICAgICBBU1NFUlQoZnJhbWUuZG9jdW1lbnQoKSk7Ci0g
ICAgYXBwbHlDb21tYW5kKFVubGlua0NvbW1hbmQ6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSkp
OworICAgIFVubGlua0NvbW1hbmQ6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSktPmFwcGx5KCk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRl
bnRPdXRkZW50Q29tbWFuZC5jcHAKaW5kZXggMTU2MzdmOGNlOTYzMWNhMGRhZDk5MWNjOWQxYWRj
Zjk2NzdhNDgwNy4uN2Y4ZGExNzU5NTJlMDk2NjU2NGFiZTg4MTRjMGQxOWQ4MjEwM2JmNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbmRlbnRPdXRkZW50Q29tbWFuZC5jcHAKQEAg
LTE1Miw3ICsxNTIsNyBAQCB2b2lkIEluZGVudE91dGRlbnRDb21tYW5kOjpvdXRkZW50UGFyYWdy
YXBoKCkKICAgICAgICAgdmlzaWJsZUVuZE9mUGFyYWdyYXBoID09IGVuZE9mRW5jbG9zaW5nQmxv
Y2spIHsKICAgICAgICAgLy8gVGhlIGJsb2NrcXVvdGUgZG9lc24ndCBjb250YWluIGFueXRoaW5n
IG91dHNpZGUgdGhlIHBhcmFncmFwaCwgc28gaXQgY2FuIGJlIHRvdGFsbHkgcmVtb3ZlZC4KICAg
ICAgICAgTm9kZSogc3BsaXRQb2ludCA9IGVuY2xvc2luZ05vZGUtPm5leHRTaWJsaW5nKCk7Ci0g
ICAgICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZW5jbG9zaW5nTm9kZSk7CisgICAg
ICAgIHJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKmVuY2xvc2luZ05vZGUpOwogICAgICAg
ICAvLyBvdXRkZW50UmVnaW9uKCkgYXNzdW1lcyBpdCBpcyBvcGVyYXRpbmcgb24gdGhlIGZpcnN0
IHBhcmFncmFwaCBvZiBhbiBlbmNsb3NpbmcgYmxvY2txdW90ZSwgYnV0IGlmIHRoZXJlIGFyZSBt
dWx0aXBseSBuZXN0ZWQgYmxvY2txdW90ZXMgYW5kIHdlJ3ZlCiAgICAgICAgIC8vIGp1c3QgcmVt
b3ZlZCBvbmUsIHRoZW4gdGhpcyBhc3N1bXB0aW9uIGlzbid0IHRydWUuIEJ5IHNwbGl0dGluZyB0
aGUgbmV4dCBjb250YWluaW5nIGJsb2NrcXVvdGUgYWZ0ZXIgdGhpcyBub2RlLCB3ZSBrZWVwIHRo
aXMgYXNzdW1wdGlvbiB0cnVlCiAgICAgICAgIGlmIChzcGxpdFBvaW50KSB7CkBAIC0xNjAsNyAr
MTYwLDcgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncmFwaCgpCiAg
ICAgICAgICAgICAgICAgaWYgKHNwbGl0UG9pbnRQYXJlbnQtPmhhc1RhZ05hbWUoYmxvY2txdW90
ZVRhZykKICAgICAgICAgICAgICAgICAgICAgJiYgIXNwbGl0UG9pbnQtPmhhc1RhZ05hbWUoYmxv
Y2txdW90ZVRhZykKICAgICAgICAgICAgICAgICAgICAgJiYgc3BsaXRQb2ludFBhcmVudC0+cGFy
ZW50Tm9kZSgpLT5oYXNFZGl0YWJsZVN0eWxlKCkpIC8vIFdlIGNhbid0IG91dGRlbnQgaWYgdGhl
cmUgaXMgbm8gcGxhY2UgdG8gZ28hCi0gICAgICAgICAgICAgICAgICAgIHNwbGl0RWxlbWVudChk
b3duY2FzdDxFbGVtZW50PihzcGxpdFBvaW50UGFyZW50KSwgc3BsaXRQb2ludCk7CisgICAgICAg
ICAgICAgICAgICAgIHNwbGl0RWxlbWVudChkb3duY2FzdDxFbGVtZW50Pigqc3BsaXRQb2ludFBh
cmVudCksICpzcGxpdFBvaW50KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xODMs
NyArMTgzLDcgQEAgdm9pZCBJbmRlbnRPdXRkZW50Q29tbWFuZDo6b3V0ZGVudFBhcmFncmFwaCgp
CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFdlIHNwbGl0IHRoZSBibG9ja3F1b3RlIGF0IHdoZXJl
IHdlIHN0YXJ0IG91dGRlbnRpbmcuCiAgICAgICAgIGF1dG8qIGhpZ2hlc3RJbmxpbmVOb2RlID0g
aGlnaGVzdEVuY2xvc2luZ05vZGVPZlR5cGUodmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVx
dWl2YWxlbnQoKSwgaXNJbmxpbmUsIENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5LCBlbmNsb3Np
bmdCbG9ja0Zsb3cpOwotICAgICAgICBzcGxpdEVsZW1lbnQoZW5jbG9zaW5nTm9kZSwgaGlnaGVz
dElubGluZU5vZGUgPyBoaWdoZXN0SW5saW5lTm9kZSA6IHZpc2libGVTdGFydE9mUGFyYWdyYXBo
LmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKSk7CisgICAgICAgIHNwbGl0RWxlbWVu
dCgqZW5jbG9zaW5nTm9kZSwgaGlnaGVzdElubGluZU5vZGUgPyAqaGlnaGVzdElubGluZU5vZGUg
OiAqdmlzaWJsZVN0YXJ0T2ZQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICB9CiAgICAgYXV0byBwbGFjZWhvbGRlciA9IEhUTUxCUkVsZW1lbnQ6OmNyZWF0
ZShkb2N1bWVudCgpKTsKICAgICBhdXRvKiBwbGFjZWhvbGRlclB0ciA9IHBsYWNlaG9sZGVyLnB0
cigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFu
ZC5jcHAKaW5kZXggZTQ4MmZmZTcwNGUyY2E5OWNjOWVhMTg5OTNjNmRiNjU2YmYyY2IxYS4uMTc2
ZDhmMDg5YWY1MDI2NmRkODk4ZmE5Nzc0Zjk3NDFkYjM5OWRmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCkBAIC0xMTUsNyArMTE1
LDcgQEAgdm9pZCBJbnNlcnRMaW5lQnJlYWtDb21tYW5kOjpkb0FwcGx5KCkKICAgICB9IGVsc2Ug
aWYgKGlzPFRleHQ+KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkgewogICAgICAgICAvLyBT
cGxpdCBhIHRleHQgbm9kZQogICAgICAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+
KCpwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKTsKLSAgICAgICAgc3BsaXRUZXh0Tm9kZSgmdGV4
dE5vZGUsIHBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOworICAgICAgICBzcGxp
dFRleHROb2RlKHRleHROb2RlLCBwb3NpdGlvbi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsK
ICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZSgqbm9kZVRvSW5zZXJ0LCB0ZXh0Tm9kZSk7CiAgICAg
ICAgIFBvc2l0aW9uIGVuZGluZ1Bvc2l0aW9uID0gZmlyc3RQb3NpdGlvbkluTm9kZSgmdGV4dE5v
ZGUpOwogICAgICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFu
ZC5jcHAKaW5kZXggZTQwY2IxODcwNWM0NmFmYWZjMmMzMDgyMWQyZGU0NDQ5NWQ4ZGVlMi4uYjYy
NzY3NjIwOTBiYzc4YjE4NWEzOTQyZThiNjUzNjk0MzNiYmIzNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgSFRNTEVs
ZW1lbnQqIEluc2VydExpc3RDb21tYW5kOjpmaXhPcnBoYW5lZExpc3RDaGlsZChOb2RlJiBub2Rl
KQogewogICAgIGF1dG8gbGlzdEVsZW1lbnQgPSBIVE1MVUxpc3RFbGVtZW50OjpjcmVhdGUoZG9j
dW1lbnQoKSk7CiAgICAgaW5zZXJ0Tm9kZUJlZm9yZShsaXN0RWxlbWVudC5jb3B5UmVmKCksIG5v
ZGUpOwotICAgIHJlbW92ZU5vZGUoJm5vZGUpOworICAgIHJlbW92ZU5vZGUobm9kZSk7CiAgICAg
YXBwZW5kTm9kZShub2RlLCBsaXN0RWxlbWVudC5jb3B5UmVmKCkpOwogICAgIG1fbGlzdEVsZW1l
bnQgPSBsaXN0RWxlbWVudC5jb3B5UmVmKCk7CiAgICAgcmV0dXJuIGxpc3RFbGVtZW50LnB0cigp
OwpAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JT
aW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUCiAgICAgICAgICAg
ICAvLyBTZWUgdGhlIGJ1ZyAzMzY2OCBhbmQgZWRpdGluZy9leGVjQ29tbWFuZC9pbnNlcnQtbGlz
dC1vcnBoYW5lZC1pdGVtLXdpdGgtbmVzdGVkLWxpc3RzLmh0bWwuCiAgICAgICAgICAgICAvLyBG
SVhNRTogVGhpcyBtaWdodCBiZSBhIGJ1ZyBpbiBtb3ZlUGFyYWdyYXBoV2l0aENsb25lcyBvciBk
ZWxldGVTZWxlY3Rpb24uCiAgICAgICAgICAgICBpZiAobGlzdE5vZGUgJiYgbGlzdE5vZGUtPmlz
Q29ubmVjdGVkKCkpCi0gICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShsaXN0Tm9kZSk7CisgICAg
ICAgICAgICAgICAgcmVtb3ZlTm9kZSgqbGlzdE5vZGUpOwogCiAgICAgICAgICAgICBuZXdMaXN0
ID0gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhuZXdMaXN0KTsKIApAQCAtMzAwLDcgKzMwMCw3
IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNp
YmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsCiAgICAgICAgIC8vIEZJWE1FOiBXZSBhcHBlYXIg
dG8gc3BsaXQgYXQgbmV4dExpc3RDaGlsZCBhcyBvcHBvc2VkIHRvIGxpc3RDaGlsZE5vZGUgc28g
dGhhdCB3aGVuIHdlIHJlbW92ZQogICAgICAgICAvLyBsaXN0Q2hpbGROb2RlIGJlbG93IGluIG1v
dmVQYXJhZ3JhcGhzLCBwcmV2aW91c0xpc3RDaGlsZCB3aWxsIGJlIHJlbW92ZWQgYWxvbmcgd2l0
aCBpdCBpZiBpdCBpcyAKICAgICAgICAgLy8gdW5yZW5kZXJlZC4gQnV0IHdlIG91Z2h0IHRvIHJl
bW92ZSBuZXh0TGlzdENoaWxkIHRvbywgaWYgaXQgaXMgdW5yZW5kZXJlZC4KLSAgICAgICAgc3Bs
aXRFbGVtZW50KGxpc3ROb2RlLCBzcGxpdFRyZWVUb05vZGUobmV4dExpc3RDaGlsZCwgbGlzdE5v
ZGUpKTsKKyAgICAgICAgc3BsaXRFbGVtZW50KCpsaXN0Tm9kZSwgKnNwbGl0VHJlZVRvTm9kZShu
ZXh0TGlzdENoaWxkLCBsaXN0Tm9kZSkpOwogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGVU
b0luc2VydC5yZWxlYXNlTm9uTnVsbCgpLCAqbGlzdE5vZGUpOwogICAgIH0gZWxzZSBpZiAobmV4
dExpc3RDaGlsZCB8fCBsaXN0Q2hpbGROb2RlLT5wYXJlbnROb2RlKCkgIT0gbGlzdE5vZGUpIHsK
ICAgICAgICAgLy8gSnVzdCBiZWNhdXNlIGxpc3RDaGlsZE5vZGUgaGFzIG5vIHByZXZpb3VzTGlz
dENoaWxkIGRvZXNuJ3QgbWVhbiB0aGVyZSBpc24ndCBhbnkgY29udGVudApAQCAtMzA4LDcgKzMw
OCw3IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OnVubGlzdGlmeVBhcmFncmFwaChjb25zdCBW
aXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsCiAgICAgICAgIC8vIGJldHdlZW4gaXQgYW5k
IGxpc3ROb2RlLiBTbywgd2Ugc3BsaXQgdXAgdG8gbGlzdE5vZGUgYmVmb3JlIGluc2VydGluZyB0
aGUgcGxhY2Vob2xkZXIKICAgICAgICAgLy8gd2hlcmUgd2UncmUgYWJvdXQgdG8gbW92ZSBsaXN0
Q2hpbGROb2RlIHRvLgogICAgICAgICBpZiAobGlzdENoaWxkTm9kZS0+cGFyZW50Tm9kZSgpICE9
IGxpc3ROb2RlKQotICAgICAgICAgICAgc3BsaXRFbGVtZW50KGxpc3ROb2RlLCBzcGxpdFRyZWVU
b05vZGUobGlzdENoaWxkTm9kZSwgbGlzdE5vZGUpLmdldCgpKTsKKyAgICAgICAgICAgIHNwbGl0
RWxlbWVudCgqbGlzdE5vZGUsICpzcGxpdFRyZWVUb05vZGUobGlzdENoaWxkTm9kZSwgbGlzdE5v
ZGUpLmdldCgpKTsKICAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2RlVG9JbnNlcnQucmVsZWFz
ZU5vbk51bGwoKSwgKmxpc3ROb2RlKTsKICAgICB9IGVsc2UKICAgICAgICAgaW5zZXJ0Tm9kZUFm
dGVyKG5vZGVUb0luc2VydC5yZWxlYXNlTm9uTnVsbCgpLCAqbGlzdE5vZGUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZC5jcHAKaW5kZXggZTYzMWQ0YmVkNGRmYTUxZTBiZjY2ZmMzMDJjMGU2MWZkZjMyMjgzMC4u
ODVkZTEyYzg3YjhmMzgxZjFhOWFjZmQ4YmY2NjA3YmRiYzJjOWI1YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1h
bmQuY3BwCkBAIC0zNDIsMTEgKzM0MiwxMSBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQ6OmRvQXBwbHkoKQogICAgIC8vIFNwbGl0IGF0IHBvcyBpZiBpbiB0aGUgbWlkZGxl
IG9mIGEgdGV4dCBub2RlLgogICAgIFBvc2l0aW9uIHBvc2l0aW9uQWZ0ZXJTcGxpdDsKICAgICBp
ZiAoaW5zZXJ0aW9uUG9zaXRpb24uYW5jaG9yVHlwZSgpID09IFBvc2l0aW9uOjpQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3IgJiYgaXM8VGV4dD4oKmluc2VydGlvblBvc2l0aW9uLmNvbnRhaW5lck5v
ZGUoKSkpIHsKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4o
aW5zZXJ0aW9uUG9zaXRpb24uY29udGFpbmVyTm9kZSgpKTsKKyAgICAgICAgUmVmPFRleHQ+IHRl
eHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmluc2VydGlvblBvc2l0aW9uLmNvbnRhaW5lck5vZGUo
KSk7CiAgICAgICAgIGJvb2wgYXRFbmQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaW5zZXJ0aW9u
UG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpID49IHRleHROb2RlLT5sZW5ndGgoKTsK
ICAgICAgICAgaWYgKGluc2VydGlvblBvc2l0aW9uLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkg
PiAwICYmICFhdEVuZCkgewogICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0ZXh0Tm9kZSwgaW5z
ZXJ0aW9uUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotICAgICAgICAgICAgcG9z
aXRpb25BZnRlclNwbGl0ID0gZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0Tm9kZS5nZXQoKSk7Cisg
ICAgICAgICAgICBwb3NpdGlvbkFmdGVyU3BsaXQgPSBmaXJzdFBvc2l0aW9uSW5Ob2RlKHRleHRO
b2RlLnB0cigpKTsKICAgICAgICAgICAgIGlmICghdGV4dE5vZGUtPnByZXZpb3VzU2libGluZygp
KQogICAgICAgICAgICAgICAgIHJldHVybjsgLy8gQmFpbCBvdXQgaWYgbXV0YXRpb24gZXZlbnRz
IGRldGFjaGQgdGhlIHNwbGl0IHRleHQgbm9kZS4KICAgICAgICAgICAgIGluc2VydGlvblBvc2l0
aW9uLm1vdmVUb1Bvc2l0aW9uKHRleHROb2RlLT5wcmV2aW91c1NpYmxpbmcoKSwgaW5zZXJ0aW9u
UG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwpAQCAtMzkxLDcgKzM5MSw3IEBAIHZv
aWQgSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAotICAgICAgICBtb3ZlUmVtYWluaW5nU2libGluZ3NUb05ld1BhcmVu
dChuLCBibG9ja1RvSW5zZXJ0LmdldCgpLCBibG9ja1RvSW5zZXJ0KTsKKyAgICAgICAgbW92ZVJl
bWFpbmluZ1NpYmxpbmdzVG9OZXdQYXJlbnQobiwgYmxvY2tUb0luc2VydC5nZXQoKSwgKmJsb2Nr
VG9JbnNlcnQpOwogICAgIH0gICAgICAgICAgICAKIAogICAgIC8vIEhhbmRsZSB3aGl0ZXNwYWNl
IHRoYXQgb2NjdXJzIGFmdGVyIHRoZSBzcGxpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0lu
c2VydFRleHRDb21tYW5kLmNwcAppbmRleCA4YzA5MWU3NDNlMTM2ZTI2ZTk1ZTM4MTExMDIwYmFk
MTk1OGVhNTBhLi4xNzU1ZWYwZDhkNTVjZThlYTZhMWFhYTZjNjhhZmNjYjI0ZjU5ZmMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcApAQCAtMjY3LDcg
KzI2Nyw3IEBAIFBvc2l0aW9uIEluc2VydFRleHRDb21tYW5kOjppbnNlcnRUYWIoY29uc3QgUG9z
aXRpb24mIHBvcykKICAgICAgICAgICAgIC8vIHNlY29uZCBub2RlIGluIHRoZSBzcGxpdCwgc28g
d2UgbmVlZCB0bwogICAgICAgICAgICAgLy8gaW5zZXJ0IHRoZSBzcGFuIGJlZm9yZSBpdC4KICAg
ICAgICAgICAgIGlmIChvZmZzZXQgPiAwKQotICAgICAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUo
dGV4dE5vZGUucHRyKCksIG9mZnNldCk7CisgICAgICAgICAgICAgICAgc3BsaXRUZXh0Tm9kZSh0
ZXh0Tm9kZSwgb2Zmc2V0KTsKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoV1RGTW92ZShz
cGFuTm9kZSksIHRleHROb2RlKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsLmNwcAppbmRleCAyMzkyOTQ1
NWJiMTNkZGYwMmM3NDdmZjliZTRmNDA0OGZjMWNjMTIxLi45ZTVkMDE1NGYyZGMzNzBiYThkYjli
NmFiOTlmYmQ5NGI4OTI3ODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01v
ZGlmeVNlbGVjdGlvbkxpc3RMZXZlbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
b2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWwuY3BwCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgTW9kaWZ5
U2VsZWN0aW9uTGlzdExldmVsQ29tbWFuZDo6aW5zZXJ0U2libGluZ05vZGVSYW5nZUJlZm9yZShO
b2RlKiBzdGFydE5vCiAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAoMSkg
ewogICAgICAgICBOb2RlKiBuZXh0ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgcmVt
b3ZlTm9kZShub2RlKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgIGluc2Vy
dE5vZGVCZWZvcmUoKm5vZGUsICpyZWZOb2RlKTsKIAogICAgICAgICBpZiAobm9kZSA9PSBlbmRO
b2RlKQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZvaWQgTW9kaWZ5U2VsZWN0aW9uTGlzdExldmVsQ29t
bWFuZDo6aW5zZXJ0U2libGluZ05vZGVSYW5nZUFmdGVyKE5vZGUqIHN0YXJ0Tm9kCiAgICAgTm9k
ZSogbm9kZSA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBOb2RlKiBuZXh0
ID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgcmVtb3ZlTm9kZShub2RlKTsKKyAgICAg
ICAgcmVtb3ZlTm9kZSgqbm9kZSk7CiAgICAgICAgIGluc2VydE5vZGVBZnRlcigqbm9kZSwgKnJl
Zk5vZGUpOwogCiAgICAgICAgIGlmIChub2RlID09IGVuZE5vZGUpCkBAIC0xMjUsNyArMTI1LDcg
QEAgdm9pZCBNb2RpZnlTZWxlY3Rpb25MaXN0TGV2ZWxDb21tYW5kOjphcHBlbmRTaWJsaW5nTm9k
ZVJhbmdlKE5vZGUqIHN0YXJ0Tm9kZSwgTm8KICAgICBOb2RlKiBub2RlID0gc3RhcnROb2RlOwog
ICAgIHdoaWxlICgxKSB7CiAgICAgICAgIE5vZGUqIG5leHQgPSBub2RlLT5uZXh0U2libGluZygp
OwotICAgICAgICByZW1vdmVOb2RlKG5vZGUpOworICAgICAgICByZW1vdmVOb2RlKCpub2RlKTsK
ICAgICAgICAgYXBwZW5kTm9kZSgqbm9kZSwgKm5ld1BhcmVudCk7CiAKICAgICAgICAgaWYgKG5v
ZGUgPT0gZW5kTm9kZSkKQEAgLTI2NywxNCArMjY3LDE0IEBAIHZvaWQgRGVjcmVhc2VTZWxlY3Rp
b25MaXN0TGV2ZWxDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgLy8gYXQgc3RhcnQgb2Ygc3Vi
bGlzdCwgbW92ZSB0aGUgY2hpbGQocmVuKSB0byBiZWZvcmUgdGhlIHN1Ymxpc3QKICAgICAgICAg
aW5zZXJ0U2libGluZ05vZGVSYW5nZUJlZm9yZShzdGFydExpc3RDaGlsZCwgZW5kTGlzdENoaWxk
LCBsaXN0Tm9kZSk7CiAgICAgICAgIC8vIGlmIHRoYXQgd2FzIHRoZSB3aG9sZSBzdWJsaXN0IHdl
IG1vdmVkLCByZW1vdmUgdGhlIHN1Ymxpc3Qgbm9kZQotICAgICAgICBpZiAoIW5leHRJdGVtKQot
ICAgICAgICAgICAgcmVtb3ZlTm9kZShsaXN0Tm9kZSk7CisgICAgICAgIGlmICghbmV4dEl0ZW0g
JiYgbGlzdE5vZGUpCisgICAgICAgICAgICByZW1vdmVOb2RlKCpsaXN0Tm9kZSk7CiAgICAgfSBl
bHNlIGlmICghbmV4dEl0ZW0pIHsKICAgICAgICAgLy8gYXQgZW5kIG9mIGxpc3QsIG1vdmUgdGhl
IGNoaWxkKHJlbikgdG8gYWZ0ZXIgdGhlIHN1Ymxpc3QKICAgICAgICAgaW5zZXJ0U2libGluZ05v
ZGVSYW5nZUFmdGVyKHN0YXJ0TGlzdENoaWxkLCBlbmRMaXN0Q2hpbGQsIGxpc3ROb2RlKTsgICAg
CiAgICAgfSBlbHNlIGlmIChsaXN0Tm9kZSkgewogICAgICAgICAvLyBpbiB0aGUgbWlkZGxlIG9m
IGxpc3QsIHNwbGl0IHRoZSBsaXN0IGFuZCBtb3ZlIHRoZSBjaGlsZHJlbiB0byB0aGUgZGl2aWRl
Ci0gICAgICAgIHNwbGl0RWxlbWVudChsaXN0Tm9kZSwgc3RhcnRMaXN0Q2hpbGQpOworICAgICAg
ICBzcGxpdEVsZW1lbnQoKmxpc3ROb2RlLCAqc3RhcnRMaXN0Q2hpbGQpOwogICAgICAgICBpbnNl
cnRTaWJsaW5nTm9kZVJhbmdlQmVmb3JlKHN0YXJ0TGlzdENoaWxkLCBlbmRMaXN0Q2hpbGQsIGxp
c3ROb2RlKTsKICAgICB9CiB9CkBAIC0yOTAsNyArMjkwLDcgQEAgdm9pZCBEZWNyZWFzZVNlbGVj
dGlvbkxpc3RMZXZlbENvbW1hbmQ6OmRlY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsKERvY3VtZW50
KiBkb2MKIHsKICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAgIEFTU0VSVChkb2N1bWVudC0+ZnJh
bWUoKSk7Ci0gICAgYXBwbHlDb21tYW5kKGNyZWF0ZSgqZG9jdW1lbnQpKTsKKyAgICBjcmVhdGUo
KmRvY3VtZW50KS0+YXBwbHkoKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcApp
bmRleCBiNjE2NDQzOTNiODZhZWVkNzM1NGE4NjBiMjZhYjkwMWFhNzQ2NGU0Li4zNGI5ZWY3Nzcz
MjFlYjgyNWU5ZTgzZDI1Yjk4OWI1YmNkNDcxZmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
LmNwcApAQCAtMzEsMTIgKzMxLDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQ6OlJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRy
ZW5Db21tYW5kKFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgU2hvdWxkQXNzdW1lQ29udGVudElzQWx3
YXlzRWRpdGFibGUgc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUsIEVkaXRBY3Rp
b24gZWRpdGluZ0FjdGlvbikKK1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5kOjpS
ZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChSZWY8Tm9kZT4mJiBub2RlLCBTaG91
bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdh
eXNFZGl0YWJsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQogICAgIDogQ29tcG9zaXRlRWRp
dENvbW1hbmQobm9kZS0+ZG9jdW1lbnQoKSwgZWRpdGluZ0FjdGlvbikKLSAgICAsIG1fbm9kZShu
b2RlKQorICAgICwgbV9ub2RlKFdURk1vdmUobm9kZSkpCiAgICAgLCBtX3Nob3VsZEFzc3VtZUNv
bnRlbnRJc0Fsd2F5c0VkaXRhYmxlKHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxl
KQogewotICAgIEFTU0VSVChtX25vZGUpOwogfQogCiB2b2lkIFJlbW92ZU5vZGVQcmVzZXJ2aW5n
Q2hpbGRyZW5Db21tYW5kOjpkb0FwcGx5KCkKQEAgLTQ4LDggKzQ3LDggQEAgdm9pZCBSZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgc2l6ZV90IHNpemUg
PSBjaGlsZHJlbi5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kp
IHsKICAgICAgICAgYXV0byBjaGlsZCA9IFdURk1vdmUoY2hpbGRyZW5baV0pOwotICAgICAgICBy
ZW1vdmVOb2RlKGNoaWxkLnB0cigpLCBtX3Nob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRh
YmxlKTsKLSAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShXVEZNb3ZlKGNoaWxkKSwgKm1fbm9kZSwg
bV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CisgICAgICAgIHJlbW92ZU5v
ZGUoY2hpbGQsIG1fc2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOworICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKFdURk1vdmUoY2hpbGQpLCBtX25vZGUsIG1fc2hvdWxkQXNzdW1l
Q29udGVudElzQWx3YXlzRWRpdGFibGUpOwogICAgIH0KICAgICByZW1vdmVOb2RlKG1fbm9kZSwg
bV9zaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5Db21tYW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW5D
b21tYW5kLmgKaW5kZXggMDdlYTA4OGJhYzQzYmFkMDhhZGYxZWVjMzUwMDhkNDJkODcyYzIyNy4u
ZGQ4NWNjOWI4MzIyZGM1M2JjYTU5ZTAwYzk5MjJiOTFiMzc1ZmEzNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJl
bkNvbW1hbmQuaApAQCAtMzEsMTcgKzMxLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRl
RWRpdENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3ZlTm9kZVByZXNlcnZp
bmdDaGlsZHJlbkNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFNob3VsZEFz
c3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0Vk
aXRhYmxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCisgICAgc3RhdGljIFJlZjxSZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZD4gY3JlYXRlKFJlZjxOb2RlPiYmIG5vZGUsIFNo
b3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIHNob3VsZEFzc3VtZUNvbnRlbnRJc0Fs
d2F5c0VkaXRhYmxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChu
b2RlLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgZWRpdGluZ0FjdGlvbikp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxk
cmVuQ29tbWFuZChXVEZNb3ZlKG5vZGUpLCBzaG91bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0
YWJsZSwgZWRpdGluZ0FjdGlvbikpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBS
ZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuQ29tbWFuZChQYXNzUmVmUHRyPE5vZGU+LCBTaG91
bGRBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSwgRWRpdEFjdGlvbik7CisgICAgZXhwbGlj
aXQgUmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbkNvbW1hbmQoUmVmPE5vZGU+JiYsIFNob3Vs
ZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlLCBFZGl0QWN0aW9uKTsKIAogICAgIHZvaWQg
ZG9BcHBseSgpIG92ZXJyaWRlOwogCi0gICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWY8
Tm9kZT4gbV9ub2RlOwogICAgIFNob3VsZEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlIG1f
c2hvdWxkQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGU7CiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCmluZGV4
IGIzMjkyY2UxYzhjODQwNTg3ZTM3MjA4MmM5YTI4ZmJhMmM2YjdiNjYuLjcyMGYyY2RkMjFlYjBm
ZWNiMzgwMDBlYmQ4MjQ1YmZiM2IxMWY2MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCkBAIC0zNiwxMSArMzYsMTAg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZDo6
UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQoUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVu
dCkKK1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kOjpSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFu
ZChSZWY8SFRNTEVsZW1lbnQ+JiYgZWxlbWVudCkKICAgICA6IFNpbXBsZUVkaXRDb21tYW5kKGVs
ZW1lbnQtPmRvY3VtZW50KCkpCi0gICAgLCBtX2VsZW1lbnRUb1JlcGxhY2UoZWxlbWVudCkKKyAg
ICAsIG1fZWxlbWVudFRvUmVwbGFjZShXVEZNb3ZlKGVsZW1lbnQpKQogewotICAgIEFTU0VSVCht
X2VsZW1lbnRUb1JlcGxhY2UpOwogfQogCiBzdGF0aWMgdm9pZCBzd2FwSW5Ob2RlUHJlc2Vydmlu
Z0F0dHJpYnV0ZXNBbmRDaGlsZHJlbihIVE1MRWxlbWVudCYgbmV3Tm9kZSwgSFRNTEVsZW1lbnQm
IG5vZGVUb1JlcGxhY2UpCkBAIC02NSwyMCArNjQsMjAgQEAgdm9pZCBSZXBsYWNlTm9kZVdpdGhT
cGFuQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIW1fc3BhbkVs
ZW1lbnQpCiAgICAgICAgIG1fc3BhbkVsZW1lbnQgPSBIVE1MU3BhbkVsZW1lbnQ6OmNyZWF0ZSht
X2VsZW1lbnRUb1JlcGxhY2UtPmRvY3VtZW50KCkpOwotICAgIHN3YXBJbk5vZGVQcmVzZXJ2aW5n
QXR0cmlidXRlc0FuZENoaWxkcmVuKCptX3NwYW5FbGVtZW50LCAqbV9lbGVtZW50VG9SZXBsYWNl
KTsKKyAgICBzd2FwSW5Ob2RlUHJlc2VydmluZ0F0dHJpYnV0ZXNBbmRDaGlsZHJlbigqbV9zcGFu
RWxlbWVudCwgbV9lbGVtZW50VG9SZXBsYWNlKTsKIH0KIAogdm9pZCBSZXBsYWNlTm9kZVdpdGhT
cGFuQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIHsKICAgICBpZiAoIW1fc3BhbkVsZW1lbnQtPmlzQ29u
bmVjdGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzd2FwSW5Ob2RlUHJlc2VydmluZ0F0dHJp
YnV0ZXNBbmRDaGlsZHJlbigqbV9lbGVtZW50VG9SZXBsYWNlLCAqbV9zcGFuRWxlbWVudCk7Cisg
ICAgc3dhcEluTm9kZVByZXNlcnZpbmdBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4obV9lbGVtZW50VG9S
ZXBsYWNlLCAqbV9zcGFuRWxlbWVudCk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCiB2b2lkIFJlcGxh
Y2VOb2RlV2l0aFNwYW5Db21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYg
bm9kZXMpCiB7Ci0gICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVudFRvUmVwbGFjZS5n
ZXQoKSwgbm9kZXMpOworICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX2VsZW1lbnRUb1JlcGxh
Y2UucHRyKCksIG5vZGVzKTsKICAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9zcGFuRWxlbWVu
dC5nZXQoKSwgbm9kZXMpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmgKaW5kZXggYjU2NGM2NmVjMmFjNGQ0MWIw
MWQzNjBmYTc2NmQzODk0OTkwZGIyZS4uZTVkMzBmYzVmMjcxNjBkZmM3N2ZiOTk1OTRjMGJiZGM2
MDY5OTBjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlTm9kZVdp
dGhTcGFuQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZU5vZGVX
aXRoU3BhbkNvbW1hbmQuaApAQCAtMzksMTUgKzM5LDE1IEBAIGNsYXNzIEhUTUxFbGVtZW50Owog
Ly8gTW9yZSBhY2N1cmF0ZWx5LCB0aGlzIGlzIFJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2
aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzQ29tbWFuZAogY2xhc3MgUmVwbGFjZU5vZGVXaXRoU3Bh
bkNvbW1hbmQgOiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRp
YyBSZWY8UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiBlbGVtZW50KQorICAgIHN0YXRpYyBSZWY8UmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1h
bmQ+IGNyZWF0ZShSZWY8SFRNTEVsZW1lbnQ+JiYgZWxlbWVudCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kKGVsZW1lbnQpKTsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQo
V1RGTW92ZShlbGVtZW50KSkpOwogICAgIH0KIAogICAgIEhUTUxFbGVtZW50KiBzcGFuRWxlbWVu
dCgpIHsgcmV0dXJuIG1fc3BhbkVsZW1lbnQuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBleHBs
aWNpdCBSZXBsYWNlTm9kZVdpdGhTcGFuQ29tbWFuZChQYXNzUmVmUHRyPEhUTUxFbGVtZW50Pik7
CisgICAgZXhwbGljaXQgUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQoUmVmPEhUTUxFbGVtZW50
PiYmKTsKIAogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogICAgIHZvaWQgZG9VbmFwcGx5
KCkgb3ZlcnJpZGU7CkBAIC01Niw3ICs1Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXROb2Rl
c0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSAgICBSZWZQ
dHI8SFRNTEVsZW1lbnQ+IG1fZWxlbWVudFRvUmVwbGFjZTsKKyAgICBSZWY8SFRNTEVsZW1lbnQ+
IG1fZWxlbWVudFRvUmVwbGFjZTsKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG1fc3BhbkVsZW1l
bnQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlv
bkNvbW1hbmQuY3BwCmluZGV4IDQwOTRmNTg5MjVhYmY1MGJhNDk5ODIwMTNjNmQ3MGUwYjE2OWQ0
ZTkuLmU1MGM0ZWJmZTlkZGY2MjFmMjVlOWZlMDNmNGIyMzU4OWE1YzZmNTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCkBAIC05
MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0ludGVyY2hhbmdlTmV3bGluZUF0RW5k
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRlcmNoYW5nZU5ld2xpbmVBdEVuZDsgfQogICAgIAog
ICAgIHZvaWQgcmVtb3ZlTm9kZShQYXNzUmVmUHRyPE5vZGU+KTsKLSAgICB2b2lkIHJlbW92ZU5v
ZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPik7CisgICAgdm9pZCByZW1vdmVO
b2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUmKTsKIAogcHJpdmF0ZToKICAgICBSZWY8SFRNTEVs
ZW1lbnQ+IGluc2VydEZyYWdtZW50Rm9yVGVzdFJlbmRlcmluZyhOb2RlKiByb290RWRpdGFibGVO
b2RlKTsKQEAgLTIyNCwxNiArMjI0LDE0IEBAIE5vZGUgKlJlcGxhY2VtZW50RnJhZ21lbnQ6Omxh
c3RDaGlsZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhZ21lbnQgPyBtX2ZyYWdtZW50LT5sYXN0
Q2hpbGQoKSA6IDA7IAogfQogCi12b2lkIFJlcGxhY2VtZW50RnJhZ21lbnQ6OnJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oUGFzc1JlZlB0cjxOb2RlPiBub2RlKQordm9pZCBSZXBsYWNlbWVu
dEZyYWdtZW50OjpyZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKE5vZGUmIG5vZGUpCiB7Ci0g
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAoUmVmUHRyPE5vZGU+
IG4gPSBub2RlLT5maXJzdENoaWxkKCkpIHsKKyAgICBSZWY8Tm9kZT4gcHJvdGVjdGVkTm9kZSA9
IG5vZGU7CisgICAgd2hpbGUgKFJlZlB0cjxOb2RlPiBuID0gbm9kZS5maXJzdENoaWxkKCkpIHsK
ICAgICAgICAgcmVtb3ZlTm9kZShuKTsKLSAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShXVEZNb3Zl
KG4pLCBub2RlLmdldCgpKTsKKyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShXVEZNb3ZlKG4pLCAm
bm9kZSk7CiAgICAgfQotICAgIHJlbW92ZU5vZGUoV1RGTW92ZShub2RlKSk7CisgICAgcmVtb3Zl
Tm9kZSgmbm9kZSk7CiB9CiAKIHZvaWQgUmVwbGFjZW1lbnRGcmFnbWVudDo6cmVtb3ZlTm9kZShQ
YXNzUmVmUHRyPE5vZGU+IG5vZGUpCkBAIC0zMzIsNyArMzMwLDcgQEAgdm9pZCBSZXBsYWNlbWVu
dEZyYWdtZW50OjpyZW1vdmVJbnRlcmNoYW5nZU5vZGVzKE5vZGUqIGNvbnRhaW5lcikKICAgICAg
ICAgUmVmUHRyPE5vZGU+IG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKTsKICAgICAg
ICAgaWYgKGlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVNwYW4obm9kZSkpIHsKICAgICAgICAg
ICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqbm9kZSk7Ci0g
ICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKG5vZGUpOworICAgICAgICAg
ICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigqbm9kZSk7CiAgICAgICAgIH0KICAgICAg
ICAgbm9kZSA9IG5leHQuZ2V0KCk7CiAgICAgfQpAQCAtNTAzLDcgKzUwMSw3IEBAIHZvaWQgUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNw
YW5JbmxpbmUoSW5zZXJ0CiAKICAgICAgICAgICAgICAgICBpZiAobmV3SW5saW5lU3R5bGUtPmNv
bmZsaWN0c1dpdGhJbXBsaWNpdFN0eWxlT2ZFbGVtZW50KCZodG1sRWxlbWVudCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gZS5nLiA8YiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsiPiBp
cyBjb252ZXJ0ZWQgdG8gPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij4KLSAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IHJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hp
bGRyZW5BbmRBdHRyaWJ1dGVzKCZodG1sRWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgIG5v
ZGUgPSByZXBsYWNlRWxlbWVudFdpdGhTcGFuUHJlc2VydmluZ0NoaWxkcmVuQW5kQXR0cmlidXRl
cyhodG1sRWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBkb3duY2FzdDxT
dHlsZWRFbGVtZW50Pihub2RlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0ZWRO
b2Rlcy5kaWRSZXBsYWNlTm9kZSgmaHRtbEVsZW1lbnQsIG5vZGUuZ2V0KCkpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAobmV3SW5saW5lU3R5bGUtPmV4dHJhY3RDb25mbGljdGluZ0ltcGxp
Y2l0U3R5bGVPZkF0dHJpYnV0ZXMoJmh0bWxFbGVtZW50LCBFZGl0aW5nU3R5bGU6OlByZXNlcnZl
V3JpdGluZ0RpcmVjdGlvbiwgMCwgYXR0cmlidXRlcywKQEAgLTUyOCwxOSArNTI2LDE5IEBAIHZv
aWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBT
dHlsZVNwYW5JbmxpbmUoSW5zZXJ0CiAgICAgICAgIGlmICghaW5saW5lU3R5bGUgfHwgbmV3SW5s
aW5lU3R5bGUtPmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKGlzU3R5bGVTcGFuT3JTcGFu
V2l0aE9ubHlTdHlsZUF0dHJpYnV0ZSgqZWxlbWVudCkgfHwgaXNFbXB0eUZvbnRUYWcoZWxlbWVu
dCwgQWxsb3dOb25FbXB0eVN0eWxlQXR0cmlidXRlKSkgewogICAgICAgICAgICAgICAgIGluc2Vy
dGVkTm9kZXMud2lsbFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7Ci0gICAg
ICAgICAgICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKKyAgICAg
ICAgICAgICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKCplbGVtZW50KTsKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlbW92ZU5v
ZGVBdHRyaWJ1dGUoKmVsZW1lbnQsIHN0eWxlQXR0cik7CiAgICAgICAgIH0gZWxzZSBpZiAobmV3
SW5saW5lU3R5bGUtPnN0eWxlKCktPnByb3BlcnR5Q291bnQoKSAhPSBpbmxpbmVTdHlsZS0+cHJv
cGVydHlDb3VudCgpKQotICAgICAgICAgICAgc2V0Tm9kZUF0dHJpYnV0ZShlbGVtZW50LCBzdHls
ZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CisgICAgICAgICAgICBz
ZXROb2RlQXR0cmlidXRlKCplbGVtZW50LCBzdHlsZUF0dHIsIG5ld0lubGluZVN0eWxlLT5zdHls
ZSgpLT5hc1RleHQoKSk7CiAKICAgICAgICAgLy8gRklYTUU6IFRvbGVyYXRlIGRpZmZlcmVuY2Vz
IGluIGlkLCBjbGFzcywgYW5kIHN0eWxlIGF0dHJpYnV0ZXMuCiAgICAgICAgIGlmIChlbGVtZW50
LT5wYXJlbnROb2RlKCkgJiYgaXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KGVsZW1lbnQp
ICYmIGFyZUlkZW50aWNhbEVsZW1lbnRzKCplbGVtZW50LCAqZWxlbWVudC0+cGFyZW50Tm9kZSgp
KQogICAgICAgICAgICAgJiYgVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUoZWxl
bWVudC0+cGFyZW50Tm9kZSgpKSkgPT0gVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5v
ZGUoZWxlbWVudCkpCiAgICAgICAgICAgICAmJiBWaXNpYmxlUG9zaXRpb24obGFzdFBvc2l0aW9u
SW5Ob2RlKGVsZW1lbnQtPnBhcmVudE5vZGUoKSkpID09IFZpc2libGVQb3NpdGlvbihsYXN0UG9z
aXRpb25Jbk5vZGUoZWxlbWVudCkpKSB7CiAgICAgICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxS
ZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKGVsZW1lbnQpOwotICAgICAgICAgICAgcmVtb3Zl
Tm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKKyAgICAgICAgICAgIHJlbW92ZU5vZGVQ
cmVzZXJ2aW5nQ2hpbGRyZW4oKmVsZW1lbnQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIH0KIApAQCAtNTUyLDcgKzU1MCw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OnJlbW92ZVJlZHVuZGFudFN0eWxlc0FuZEtlZXBTdHlsZVNwYW5JbmxpbmUoSW5zZXJ0CiAgICAg
ICAgIGlmIChpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKGVsZW1lbnQpKSB7CiAgICAgICAgICAgICBp
ZiAoIWVsZW1lbnQtPmZpcnN0Q2hpbGQoKSkgewogICAgICAgICAgICAgICAgIGluc2VydGVkTm9k
ZXMud2lsbFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oZWxlbWVudCk7Ci0gICAgICAgICAg
ICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbihlbGVtZW50KTsKKyAgICAgICAgICAg
ICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKCplbGVtZW50KTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBv
dGhlciBzdHlsZXMgdGhhdCBzdHlsZSBydWxlcyBjYW4gZ2l2ZSB0byBzdHlsZSBzcGFucywKQEAg
LTY1Miw3ICs2NTAsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjptYWtlSW5zZXJ0
ZWRDb250ZW50Um91bmRUcmlwcGFibGVXaXRoSFRNTFRyZWVCdWlsZAogICAgICAgICAgICAgICAg
IGlmIChoZWFkZXJFbGVtZW50LT5wYXJlbnROb2RlKCkgJiYgaGVhZGVyRWxlbWVudC0+cGFyZW50
Tm9kZSgpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKQogICAgICAgICAgICAgICAgICAgICBt
b3ZlTm9kZU91dE9mQW5jZXN0b3Iobm9kZSwgaGVhZGVyRWxlbWVudCwgaW5zZXJ0ZWROb2Rlcyk7
CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50
KiBuZXdTcGFuRWxlbWVudCA9IHJlcGxhY2VFbGVtZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRy
ZW5BbmRBdHRyaWJ1dGVzKGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlLmdldCgpKSk7CisgICAg
ICAgICAgICAgICAgICAgIEhUTUxFbGVtZW50KiBuZXdTcGFuRWxlbWVudCA9IHJlcGxhY2VFbGVt
ZW50V2l0aFNwYW5QcmVzZXJ2aW5nQ2hpbGRyZW5BbmRBdHRyaWJ1dGVzKGRvd25jYXN0PEhUTUxF
bGVtZW50Pigqbm9kZSkpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRlZE5vZGVzLmRpZFJl
cGxhY2VOb2RlKG5vZGUuZ2V0KCksIG5ld1NwYW5FbGVtZW50KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkBAIC02NjgsMTkgKzY2NiwxOSBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kOjptb3ZlTm9kZU91dE9mQW5jZXN0b3IoUGFzc1JlZlB0cjxOb2RlPiBwcnBOb2Rl
LCBQYQogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkF0RW5kT2ZOb2RlID0gbGFzdFBvc2l0
aW9uSW5PckFmdGVyTm9kZShub2RlLmdldCgpKTsKICAgICBWaXNpYmxlUG9zaXRpb24gbGFzdFBv
c2l0aW9uSW5QYXJhZ3JhcGggPSBsYXN0UG9zaXRpb25Jbk5vZGUoYW5jZXN0b3IuZ2V0KCkpOwog
ICAgIGlmIChwb3NpdGlvbkF0RW5kT2ZOb2RlID09IGxhc3RQb3NpdGlvbkluUGFyYWdyYXBoKSB7
Ci0gICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CisgICAgICAgIHJlbW92ZU5vZGUoKm5vZGUpOwog
ICAgICAgICBpZiAoYW5jZXN0b3ItPm5leHRTaWJsaW5nKCkpCiAgICAgICAgICAgICBpbnNlcnRO
b2RlQmVmb3JlKG5vZGUucmVsZWFzZU5vbk51bGwoKSwgKmFuY2VzdG9yLT5uZXh0U2libGluZygp
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXBwZW5kTm9kZShub2RlLnJlbGVhc2VOb25O
dWxsKCksICphbmNlc3Rvci0+cGFyZW50Tm9kZSgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBS
ZWZQdHI8Tm9kZT4gbm9kZVRvU3BsaXRUbyA9IHNwbGl0VHJlZVRvTm9kZShub2RlLmdldCgpLCBh
bmNlc3Rvci5nZXQoKSwgdHJ1ZSk7Ci0gICAgICAgIHJlbW92ZU5vZGUobm9kZSk7CisgICAgICAg
IHJlbW92ZU5vZGUoKm5vZGUpOwogICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGUucmVsZWFz
ZU5vbk51bGwoKSwgKm5vZGVUb1NwbGl0VG8pOwogICAgIH0KICAgICBpZiAoIWFuY2VzdG9yLT5m
aXJzdENoaWxkKCkpIHsKICAgICAgICAgaW5zZXJ0ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShhbmNl
c3Rvci5nZXQoKSk7Ci0gICAgICAgIHJlbW92ZU5vZGUoV1RGTW92ZShhbmNlc3RvcikpOworICAg
ICAgICByZW1vdmVOb2RlKCphbmNlc3Rvcik7CiAgICAgfQogfQogCkBAIC02OTgsNyArNjk2LDcg
QEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6cmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rl
c0F0RW5kcyhJbnNlcnRlZE5vZGVzJiBpbnMKICAgICAgICAgJiYgIWVuY2xvc2luZ0VsZW1lbnRX
aXRoVGFnKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShsYXN0TGVhZkluc2VydGVkKSwgc2Vs
ZWN0VGFnKQogICAgICAgICAmJiAhZW5jbG9zaW5nRWxlbWVudFdpdGhUYWcoZmlyc3RQb3NpdGlv
bkluT3JCZWZvcmVOb2RlKGxhc3RMZWFmSW5zZXJ0ZWQpLCBzY3JpcHRUYWcpKSB7CiAgICAgICAg
IGluc2VydGVkTm9kZXMud2lsbFJlbW92ZU5vZGUobGFzdExlYWZJbnNlcnRlZCk7Ci0gICAgICAg
IHJlbW92ZU5vZGUobGFzdExlYWZJbnNlcnRlZCk7CisgICAgICAgIHJlbW92ZU5vZGUoKmxhc3RM
ZWFmSW5zZXJ0ZWQpOwogICAgIH0KIAogICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFrZSBzdXJl
IHRoYXQgZmlyc3ROb2RlSW5zZXJ0ZWQgaXNuJ3QgaW5zaWRlIGEgc2VsZWN0IG9yIHNjcmlwdCBl
bGVtZW50CkBAIC03MDYsNyArNzA0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
cmVtb3ZlVW5yZW5kZXJlZFRleHROb2Rlc0F0RW5kcyhJbnNlcnRlZE5vZGVzJiBpbnMKICAgICBO
b2RlKiBmaXJzdE5vZGVJbnNlcnRlZCA9IGluc2VydGVkTm9kZXMuZmlyc3ROb2RlSW5zZXJ0ZWQo
KTsKICAgICBpZiAoaXM8VGV4dD4oZmlyc3ROb2RlSW5zZXJ0ZWQpICYmICFoYXNSZW5kZXJlZFRl
eHQoZG93bmNhc3Q8VGV4dD4oKmZpcnN0Tm9kZUluc2VydGVkKSkpIHsKICAgICAgICAgaW5zZXJ0
ZWROb2Rlcy53aWxsUmVtb3ZlTm9kZShmaXJzdE5vZGVJbnNlcnRlZCk7Ci0gICAgICAgIHJlbW92
ZU5vZGUoZmlyc3ROb2RlSW5zZXJ0ZWQpOworICAgICAgICByZW1vdmVOb2RlKCpmaXJzdE5vZGVJ
bnNlcnRlZCk7CiAgICAgfQogfQogCkBAIC03NjksNyArNzY3LDcgQEAgc3RhdGljIGJvb2wgaGFu
ZGxlU3R5bGVTcGFuc0JlZm9yZUluc2VydGlvbihSZXBsYWNlbWVudEZyYWdtZW50JiBmcmFnbWVu
dCwgY29uc3QKICAgICBpZiAoc3R5bGVUZXh0ICE9IGRvd25jYXN0PEVsZW1lbnQ+KCp3cmFwcGlu
Z1N0eWxlU3BhbikuZ2V0QXR0cmlidXRlKHN0eWxlQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIGZyYWdtZW50LnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4od3JhcHBpbmdT
dHlsZVNwYW4pOworICAgIGZyYWdtZW50LnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKndy
YXBwaW5nU3R5bGVTcGFuKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtODIwLDkgKzgxOCw5
IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmhhbmRsZVN0eWxlU3BhbnMoSW5zZXJ0
ZWROb2RlcyYgaW5zZXJ0ZWROb2RlcykKIAogICAgIGlmIChzdHlsZS0+aXNFbXB0eSgpIHx8ICF3
cmFwcGluZ1N0eWxlU3Bhbi0+Zmlyc3RDaGlsZCgpKSB7CiAgICAgICAgIGluc2VydGVkTm9kZXMu
d2lsbFJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4od3JhcHBpbmdTdHlsZVNwYW4pOwotICAg
ICAgICByZW1vdmVOb2RlUHJlc2VydmluZ0NoaWxkcmVuKHdyYXBwaW5nU3R5bGVTcGFuKTsKKyAg
ICAgICAgcmVtb3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigqd3JhcHBpbmdTdHlsZVNwYW4pOwog
ICAgIH0gZWxzZQotICAgICAgICBzZXROb2RlQXR0cmlidXRlKHdyYXBwaW5nU3R5bGVTcGFuLCBz
dHlsZUF0dHIsIHN0eWxlLT5zdHlsZSgpLT5hc1RleHQoKSk7CisgICAgICAgIHNldE5vZGVBdHRy
aWJ1dGUoKndyYXBwaW5nU3R5bGVTcGFuLCBzdHlsZUF0dHIsIHN0eWxlLT5zdHlsZSgpLT5hc1Rl
eHQoKSk7CiB9CiAKIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlRW5kSWZOZWVk
ZWQoKQpAQCAtMTAxOCw3ICsxMDE2LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgIEFTU0VSVChici0+aGFzVGFnTmFtZShiclRhZykpOyAKICAgICAg
ICAgLy8gSW5zZXJ0IGNvbnRlbnQgYmV0d2VlbiB0aGUgdHdvIGJsb2NrcXVvdGVzLCBidXQgcmVt
b3ZlIHRoZSBiciAoc2luY2UgaXQgd2FzIGp1c3QgYSBwbGFjZWhvbGRlcikuIAogICAgICAgICBp
bnNlcnRpb25Qb3MgPSBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShicik7Ci0gICAgICAgIHJl
bW92ZU5vZGUoYnIpOworICAgICAgICByZW1vdmVOb2RlKCpicik7CiAgICAgfQogICAgIAogICAg
IC8vIEluc2VydGluZyBjb250ZW50IGNvdWxkIGNhdXNlIHdoaXRlc3BhY2UgdG8gY29sbGFwc2Us
IGUuZy4gaW5zZXJ0aW5nIDxkaXY+Zm9vPC9kaXY+IGludG8gaGVsbG9eIHdvcmxkLgpAQCAtMTA3
OCw3ICsxMDc2LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAg
ICAgLy8gc2luY2UgaW5zZXJ0QXNMaXN0SXRlbXMgYWxyZWFkeSBkb2VzIHRoZSByaWdodCB0aGlu
Zy4KICAgICBpZiAoIW1fbWF0Y2hTdHlsZSAmJiAhZW5jbG9zaW5nTGlzdChpbnNlcnRpb25Qb3Mu
Y29udGFpbmVyTm9kZSgpKSkgewogICAgICAgICBpZiAoaW5zZXJ0aW9uUG9zLmNvbnRhaW5lck5v
ZGUoKS0+aXNUZXh0Tm9kZSgpICYmIGluc2VydGlvblBvcy5vZmZzZXRJbkNvbnRhaW5lck5vZGUo
KSAmJiAhaW5zZXJ0aW9uUG9zLmF0TGFzdEVkaXRpbmdQb3NpdGlvbkZvck5vZGUoKSkgewotICAg
ICAgICAgICAgc3BsaXRUZXh0Tm9kZShpbnNlcnRpb25Qb3MuY29udGFpbmVyVGV4dCgpLCBpbnNl
cnRpb25Qb3Mub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOworICAgICAgICAgICAgc3BsaXRUZXh0
Tm9kZSgqaW5zZXJ0aW9uUG9zLmNvbnRhaW5lclRleHQoKSwgaW5zZXJ0aW9uUG9zLm9mZnNldElu
Q29udGFpbmVyTm9kZSgpKTsKICAgICAgICAgICAgIGluc2VydGlvblBvcyA9IGZpcnN0UG9zaXRp
b25Jbk5vZGUoaW5zZXJ0aW9uUG9zLmNvbnRhaW5lck5vZGUoKSk7CiAgICAgICAgIH0KIApAQCAt
MTE2MiwxMCArMTE2MCwxMCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5
KCkKICAgICBpZiAoZW5kQlIgJiYgKHBsYWluVGV4dEZyYWdtZW50IHx8IHNob3VsZFJlbW92ZUVu
ZEJSKGVuZEJSLmdldCgpLCBvcmlnaW5hbFZpc1Bvc0JlZm9yZUVuZEJSKSkpIHsKICAgICAgICAg
UmVmUHRyPE5vZGU+IHBhcmVudCA9IGVuZEJSLT5wYXJlbnROb2RlKCk7CiAgICAgICAgIGluc2Vy
dGVkTm9kZXMud2lsbFJlbW92ZU5vZGUoZW5kQlIuZ2V0KCkpOwotICAgICAgICByZW1vdmVOb2Rl
KGVuZEJSKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqZW5kQlIpOwogICAgICAgICBpZiAoTm9kZSog
bm9kZVRvUmVtb3ZlID0gaGlnaGVzdE5vZGVUb1JlbW92ZUluUHJ1bmluZyhwYXJlbnQuZ2V0KCkp
KSB7CiAgICAgICAgICAgICBpbnNlcnRlZE5vZGVzLndpbGxSZW1vdmVOb2RlKG5vZGVUb1JlbW92
ZSk7Ci0gICAgICAgICAgICByZW1vdmVOb2RlKG5vZGVUb1JlbW92ZSk7CisgICAgICAgICAgICBy
ZW1vdmVOb2RlKCpub2RlVG9SZW1vdmUpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtMTQ0
Myw3ICsxNDQxLDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6bWVyZ2VUZXh0Tm9k
ZXNBcm91bmRQb3NpdGlvbihQb3NpdGlvbiYgcG9zaXRpb24sIFAKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICB1cGRhdGVQb3NpdGlvbkZvck5vZGVSZW1vdmFsKHBvc2l0aW9uT25seVRvQmVV
cGRhdGVkLCBwcmV2aW91cy5nZXQoKSk7CiAKLSAgICAgICAgcmVtb3ZlTm9kZShwcmV2aW91cy5w
dHIoKSk7CisgICAgICAgIHJlbW92ZU5vZGUocHJldmlvdXMpOwogICAgIH0KICAgICBpZiAoaXM8
VGV4dD4odGV4dC0+bmV4dFNpYmxpbmcoKSkpIHsKICAgICAgICAgUmVmPFRleHQ+IG5leHQoZG93
bmNhc3Q8VGV4dD4oKnRleHQtPm5leHRTaWJsaW5nKCkpKTsKQEAgLTE0NTgsNyArMTQ1Niw3IEBA
IHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlVGV4dE5vZGVzQXJvdW5kUG9zaXRp
b24oUG9zaXRpb24mIHBvc2l0aW9uLCBQCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHVwZGF0
ZVBvc2l0aW9uRm9yTm9kZVJlbW92YWwocG9zaXRpb25Pbmx5VG9CZVVwZGF0ZWQsIG5leHQuZ2V0
KCkpOwogCi0gICAgICAgIHJlbW92ZU5vZGUobmV4dC5wdHIoKSk7CisgICAgICAgIHJlbW92ZU5v
ZGUobmV4dCk7CiAgICAgfQogfQogCkBAIC0xNDgxLDcgKzE0NzksNyBAQCBOb2RlKiBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6aW5zZXJ0QXNMaXN0SXRlbXMoUGFzc1JlZlB0cjxIVE1MRWxlbWVu
dD4gcHJwTGlzdAogICAgIGlmIChpc01pZGRsZSkgewogICAgICAgICBpbnQgdGV4dE5vZGVPZmZz
ZXQgPSBpbnNlcnRQb3Mub2Zmc2V0SW5Db250YWluZXJOb2RlKCk7CiAgICAgICAgIGlmIChpczxU
ZXh0PigqaW5zZXJ0UG9zLmRlcHJlY2F0ZWROb2RlKCkpICYmIHRleHROb2RlT2Zmc2V0ID4gMCkK
LSAgICAgICAgICAgIHNwbGl0VGV4dE5vZGUoZG93bmNhc3Q8VGV4dD4oaW5zZXJ0UG9zLmRlcHJl
Y2F0ZWROb2RlKCkpLCB0ZXh0Tm9kZU9mZnNldCk7CisgICAgICAgICAgICBzcGxpdFRleHROb2Rl
KGRvd25jYXN0PFRleHQ+KCppbnNlcnRQb3MuZGVwcmVjYXRlZE5vZGUoKSksIHRleHROb2RlT2Zm
c2V0KTsKICAgICAgICAgc3BsaXRUcmVlVG9Ob2RlKGluc2VydFBvcy5kZXByZWNhdGVkTm9kZSgp
LCBsYXN0Tm9kZSwgdHJ1ZSk7CiAgICAgfQogCkBAIC0xNTUxLDcgKzE1NDksNyBAQCBib29sIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UoY29uc3QgUmVwbGFj
ZW1lbnRGcmFnbWVudCYgZgogCiAgICAgaWYgKG5vZGVBZnRlckluc2VydGlvblBvcyAmJiBub2Rl
QWZ0ZXJJbnNlcnRpb25Qb3MtPnBhcmVudE5vZGUoKSAmJiBub2RlQWZ0ZXJJbnNlcnRpb25Qb3Mt
Pmhhc1RhZ05hbWUoYnJUYWcpCiAgICAgICAgICYmIHNob3VsZFJlbW92ZUVuZEJSKG5vZGVBZnRl
ckluc2VydGlvblBvcy5nZXQoKSwgcG9zaXRpb25CZWZvcmVOb2RlKG5vZGVBZnRlckluc2VydGlv
blBvcy5nZXQoKSkpKQotICAgICAgICByZW1vdmVOb2RlQW5kUHJ1bmVBbmNlc3RvcnMobm9kZUFm
dGVySW5zZXJ0aW9uUG9zLmdldCgpKTsKKyAgICAgICAgcmVtb3ZlTm9kZUFuZFBydW5lQW5jZXN0
b3JzKCpub2RlQWZ0ZXJJbnNlcnRpb25Qb3MpOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxl
Y3Rpb25BZnRlclJlcGxhY2UobV9zZWxlY3RSZXBsYWNlbWVudCA/IHN0YXJ0IDogZW5kLCBlbmQp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1h
bmQuY3BwCmluZGV4IDE5NTBmMGY1ODgwZTYwYTI3MzhlMzQwMDkwN2I2OWQ2YmQwOTg3ODAuLmY4
MzhlNTQ2YzE5ODI1YmE4NGQ2ZjYxNDAyMjUzZjQzMjg0NjY0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwCkBAIC0zMSwxMyAr
MzEsMTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TZXROb2RlQXR0cmlidXRlQ29tbWFu
ZDo6U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUsIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUp
CitTZXROb2RlQXR0cmlidXRlQ29tbWFuZDo6U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQoUmVmPEVs
ZW1lbnQ+JiYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKQogICAgIDogU2ltcGxlRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9j
dW1lbnQoKSkKLSAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9lbGVtZW50KFdURk1v
dmUoZWxlbWVudCkpCiAgICAgLCBtX2F0dHJpYnV0ZShhdHRyaWJ1dGUpCiAgICAgLCBtX3ZhbHVl
KHZhbHVlKQogewotICAgIEFTU0VSVChtX2VsZW1lbnQpOwogfQogCiB2b2lkIFNldE5vZGVBdHRy
aWJ1dGVDb21tYW5kOjpkb0FwcGx5KCkKQEAgLTU2LDcgKzU1LDcgQEAgdm9pZCBTZXROb2RlQXR0
cmlidXRlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKICNpZm5kZWYgTkRFQlVHCiB2b2lkIFNldE5vZGVB
dHRyaWJ1dGVDb21tYW5kOjpnZXROb2Rlc0luQ29tbWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMp
CiB7Ci0gICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fZWxlbWVudC5nZXQoKSwgbm9kZXMpOwor
ICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX2VsZW1lbnQucHRyKCksIG5vZGVzKTsKIH0KICNl
bmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldE5vZGVBdHRyaWJ1
dGVDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21t
YW5kLmgKaW5kZXggZjNhZTQwOWJlNDYwYTc4ZjRlNjBkODBjNDdiZjUzYTE5ZjU1YzA5NS4uODg0
NDlkZWU2Yjc2YTNjNTZiZTMzNTNhMGFkNGNmMjY2YTYxMGQxNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaApAQCAtMzIsMTMgKzMyLDEz
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQg
OiBwdWJsaWMgU2ltcGxlRWRpdENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U2V0
Tm9kZUF0dHJpYnV0ZUNvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSkKKyAgICBzdGF0aWMgUmVmPFNldE5vZGVBdHRyaWJ1dGVDb21tYW5kPiBjcmVhdGUoUmVmPEVs
ZW1lbnQ+JiYgZWxlbWVudCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkpOworICAg
ICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTZXROb2RlQXR0cmlidXRlQ29tbWFuZChXVEZNb3Zl
KGVsZW1lbnQpLCBhdHRyaWJ1dGUsIHZhbHVlKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFNl
dE5vZGVBdHRyaWJ1dGVDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4sIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGF0dHJpYnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CisgICAgU2V0Tm9k
ZUF0dHJpYnV0ZUNvbW1hbmQoUmVmPEVsZW1lbnQ+JiYsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSk7CiAKICAgICB2b2lkIGRvQXBwbHko
KSBvdmVycmlkZTsKICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlOwpAQCAtNDcsNyArNDcs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2V0Tm9kZXNJbkNvbW1hbmQoSGFzaFNldDxOb2RlKj4m
KSBvdmVycmlkZTsKICNlbmRpZgogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKKyAg
ICBSZWY8RWxlbWVudD4gbV9lbGVtZW50OwogICAgIFF1YWxpZmllZE5hbWUgbV9hdHRyaWJ1dGU7
CiAgICAgQXRvbWljU3RyaW5nIG1fdmFsdWU7CiAgICAgQXRvbWljU3RyaW5nIG1fb2xkVmFsdWU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29tbWFuZC5jcHAK
aW5kZXggMzNlOGQ4MzliNzU2ZjZhNzdmYjdiMDMzOWVkZjQ5MzJmNTEwMjJhZC4uZDY2NzZlMzBh
NDY3ZjkzYmUzYmE2YTcwN2IwOWYyZmI4ZDkxZjgwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmNwcApAQCAtNDQsNyArNDQsNyBAQCBTaW1w
bGlmeU1hcmt1cENvbW1hbmQ6OlNpbXBsaWZ5TWFya3VwQ29tbWFuZChEb2N1bWVudCYgZG9jdW1l
bnQsIE5vZGUqIGZpcnN0Tm9kZQogdm9pZCBTaW1wbGlmeU1hcmt1cENvbW1hbmQ6OmRvQXBwbHko
KQogewogICAgIE5vZGUqIHJvb3ROb2RlID0gbV9maXJzdE5vZGUtPnBhcmVudE5vZGUoKTsKLSAg
ICBWZWN0b3I8UmVmUHRyPE5vZGU+PiBub2Rlc1RvUmVtb3ZlOworICAgIFZlY3RvcjxSZWY8Tm9k
ZT4+IG5vZGVzVG9SZW1vdmU7CiAgICAgCiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIFNpbXBsaWZ5
TWFya3VwQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIE5vZGUqIHRvcE5vZGVXaXRoU3RhcnRp
bmdTdHlsZSA9IG51bGxwdHI7CiAgICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSAhPSByb290Tm9k
ZSkgewogICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5wYXJlbnROb2RlKCkgIT0gcm9vdE5v
ZGUgJiYgaXNSZW1vdmFibGVCbG9jayhjdXJyZW50Tm9kZSkpCi0gICAgICAgICAgICAgICAgbm9k
ZXNUb1JlbW92ZS5hcHBlbmQoY3VycmVudE5vZGUpOworICAgICAgICAgICAgICAgIG5vZGVzVG9S
ZW1vdmUuYXBwZW5kKCpjdXJyZW50Tm9kZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGN1
cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBhcmVudE5vZGUoKTsKICAgICAgICAgICAgIGlmICgh
Y3VycmVudE5vZGUpCkBAIC04NSw4ICs4NSw4IEBAIHZvaWQgU2ltcGxpZnlNYXJrdXBDb21tYW5k
Ojpkb0FwcGx5KCkKICAgICAgICAgICAgIAogICAgICAgICB9CiAgICAgICAgIGlmICh0b3BOb2Rl
V2l0aFN0YXJ0aW5nU3R5bGUpIHsKLSAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA9IHN0YXJ0
aW5nTm9kZTsgbm9kZSAhPSB0b3BOb2RlV2l0aFN0YXJ0aW5nU3R5bGU7IG5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCkpCi0gICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5hcHBlbmQobm9kZSk7
CisgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydGluZ05vZGU7IG5vZGUgJiYgbm9k
ZSAhPSB0b3BOb2RlV2l0aFN0YXJ0aW5nU3R5bGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkp
CisgICAgICAgICAgICAgICAgbm9kZXNUb1JlbW92ZS5hcHBlbmQoKm5vZGUpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC0xMDEsMTcgKzEwMSwxNyBAQCB2b2lkIFNpbXBsaWZ5TWFya3VwQ29tbWFu
ZDo6ZG9BcHBseSgpCiAgICAgfQogfQogCi1pbnQgU2ltcGxpZnlNYXJrdXBDb21tYW5kOjpwcnVu
ZVN1YnNlcXVlbnRBbmNlc3RvcnNUb1JlbW92ZShWZWN0b3I8UmVmUHRyPE5vZGU+PiYgbm9kZXNU
b1JlbW92ZSwgc2l6ZV90IHN0YXJ0Tm9kZUluZGV4KQoraW50IFNpbXBsaWZ5TWFya3VwQ29tbWFu
ZDo6cHJ1bmVTdWJzZXF1ZW50QW5jZXN0b3JzVG9SZW1vdmUoVmVjdG9yPFJlZjxOb2RlPj4mIG5v
ZGVzVG9SZW1vdmUsIHNpemVfdCBzdGFydE5vZGVJbmRleCkKIHsKICAgICBzaXplX3QgcGFzdExh
c3ROb2RlVG9SZW1vdmUgPSBzdGFydE5vZGVJbmRleCArIDE7CiAgICAgZm9yICg7IHBhc3RMYXN0
Tm9kZVRvUmVtb3ZlIDwgbm9kZXNUb1JlbW92ZS5zaXplKCk7ICsrcGFzdExhc3ROb2RlVG9SZW1v
dmUpIHsKLSAgICAgICAgaWYgKG5vZGVzVG9SZW1vdmVbcGFzdExhc3ROb2RlVG9SZW1vdmUgLSAx
XS0+cGFyZW50Tm9kZSgpICE9IG5vZGVzVG9SZW1vdmVbcGFzdExhc3ROb2RlVG9SZW1vdmVdKQor
ICAgICAgICBpZiAobm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZSAtIDFdLT5wYXJl
bnROb2RlKCkgIT0gbm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1JlbW92ZV0ucHRyKCkpCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKG5vZGVzVG9SZW1vdmVbcGFzdExhc3ROb2Rl
VG9SZW1vdmVdLT5maXJzdENoaWxkKCkgIT0gbm9kZXNUb1JlbW92ZVtwYXN0TGFzdE5vZGVUb1Jl
bW92ZV0tPmxhc3RDaGlsZCgpKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgTm9k
ZSogaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUgPSBub2Rlc1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRv
UmVtb3ZlIC0gMV0uZ2V0KCk7CisgICAgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUgPSBu
b2Rlc1RvUmVtb3ZlW3Bhc3RMYXN0Tm9kZVRvUmVtb3ZlIC0gMV0ucHRyKCk7CiAgICAgUmVmUHRy
PENvbnRhaW5lck5vZGU+IHBhcmVudCA9IGhpZ2hlc3RBbmNlc3RvclRvUmVtb3ZlLT5wYXJlbnRO
b2RlKCk7CiAgICAgaWYgKCFwYXJlbnQpIC8vIFBhcmVudCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92
ZWQuCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyMCw4ICsxMjAsOCBAQCBpbnQgU2ltcGxpZnlN
YXJrdXBDb21tYW5kOjpwcnVuZVN1YnNlcXVlbnRBbmNlc3RvcnNUb1JlbW92ZShWZWN0b3I8UmVm
UHRyPE5vZGU+PgogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJlbW92ZU5vZGUobm9kZXNUb1Jl
bW92ZVtzdGFydE5vZGVJbmRleF0sIEFzc3VtZUNvbnRlbnRJc0Fsd2F5c0VkaXRhYmxlKTsKLSAg
ICBpbnNlcnROb2RlQmVmb3JlKCpub2Rlc1RvUmVtb3ZlW3N0YXJ0Tm9kZUluZGV4XSwgKmhpZ2hl
c3RBbmNlc3RvclRvUmVtb3ZlLCBBc3N1bWVDb250ZW50SXNBbHdheXNFZGl0YWJsZSk7Ci0gICAg
cmVtb3ZlTm9kZShoaWdoZXN0QW5jZXN0b3JUb1JlbW92ZSwgQXNzdW1lQ29udGVudElzQWx3YXlz
RWRpdGFibGUpOworICAgIGluc2VydE5vZGVCZWZvcmUobm9kZXNUb1JlbW92ZVtzdGFydE5vZGVJ
bmRleF0uY29weVJlZigpLCAqaGlnaGVzdEFuY2VzdG9yVG9SZW1vdmUsIEFzc3VtZUNvbnRlbnRJ
c0Fsd2F5c0VkaXRhYmxlKTsKKyAgICByZW1vdmVOb2RlKCpoaWdoZXN0QW5jZXN0b3JUb1JlbW92
ZSwgQXNzdW1lQ29udGVudElzQWx3YXlzRWRpdGFibGUpOwogCiAgICAgcmV0dXJuIHBhc3RMYXN0
Tm9kZVRvUmVtb3ZlIC0gc3RhcnROb2RlSW5kZXggLSAxOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1cENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2ltcGxpZnlNYXJrdXBDb21tYW5kLmgKaW5kZXggMmQ4MjU3YTQ1NWQxZDk2NDUy
ZTI3OGNmYTM3MGRiYmRjZjZhMThjZS4uN2EwODgyZThjNzg3NTcwNjYyNDI3ZDJhMzIwOWFmZTMy
ODY3ZTlmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TaW1wbGlmeU1hcmt1
cENvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NpbXBsaWZ5TWFya3VwQ29t
bWFuZC5oCkBAIC00MCw3ICs0MCw3IEBAIHByaXZhdGU6CiAgICAgU2ltcGxpZnlNYXJrdXBDb21t
YW5kKERvY3VtZW50JiwgTm9kZSogZmlyc3ROb2RlLCBOb2RlKiBub2RlQWZ0ZXJMYXN0KTsKIAog
ICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwotICAgIGludCBwcnVuZVN1YnNlcXVlbnRBbmNl
c3RvcnNUb1JlbW92ZShWZWN0b3I8UmVmUHRyPE5vZGU+PiYgbm9kZXNUb1JlbW92ZSwgc2l6ZV90
IHN0YXJ0Tm9kZUluZGV4KTsKKyAgICBpbnQgcHJ1bmVTdWJzZXF1ZW50QW5jZXN0b3JzVG9SZW1v
dmUoVmVjdG9yPFJlZjxOb2RlPj4mIG5vZGVzVG9SZW1vdmUsIHNpemVfdCBzdGFydE5vZGVJbmRl
eCk7CiAKICAgICBSZWZQdHI8Tm9kZT4gbV9maXJzdE5vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1f
bm9kZUFmdGVyTGFzdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRF
bGVtZW50Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENv
bW1hbmQuY3BwCmluZGV4IDJkNGU4NTQ5OGNjZDU0YTZmNGJjZTZhOGMxODQ0MzcxY2Y4NTAyYzYu
LmJhMzJhYjVjZTZiNGJlNjllNjMyYjM4OTc2M2Y4NWQ3OTU5YzVmYWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcApAQCAtMzIsMjkgKzMyLDI3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3BsaXRFbGVtZW50Q29tbWFuZDo6U3BsaXRF
bGVtZW50Q29tbWFuZChQYXNzUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQsIFBhc3NSZWZQdHI8Tm9k
ZT4gYXRDaGlsZCkKK1NwbGl0RWxlbWVudENvbW1hbmQ6OlNwbGl0RWxlbWVudENvbW1hbmQoUmVm
PEVsZW1lbnQ+JiYgZWxlbWVudCwgUmVmPE5vZGU+JiYgYXRDaGlsZCkKICAgICA6IFNpbXBsZUVk
aXRDb21tYW5kKGVsZW1lbnQtPmRvY3VtZW50KCkpCi0gICAgLCBtX2VsZW1lbnQyKGVsZW1lbnQp
Ci0gICAgLCBtX2F0Q2hpbGQoYXRDaGlsZCkKKyAgICAsIG1fZWxlbWVudDIoV1RGTW92ZShlbGVt
ZW50KSkKKyAgICAsIG1fYXRDaGlsZChXVEZNb3ZlKGF0Q2hpbGQpKQogewotICAgIEFTU0VSVCht
X2VsZW1lbnQyKTsKLSAgICBBU1NFUlQobV9hdENoaWxkKTsKLSAgICBBU1NFUlQobV9hdENoaWxk
LT5wYXJlbnROb2RlKCkgPT0gbV9lbGVtZW50Mik7CisgICAgQVNTRVJUKG1fYXRDaGlsZC0+cGFy
ZW50Tm9kZSgpID09IG1fZWxlbWVudDIucHRyKCkpOwogfQogCiB2b2lkIFNwbGl0RWxlbWVudENv
bW1hbmQ6OmV4ZWN1dGVBcHBseSgpCiB7Ci0gICAgaWYgKG1fYXRDaGlsZC0+cGFyZW50Tm9kZSgp
ICE9IG1fZWxlbWVudDIpCisgICAgaWYgKG1fYXRDaGlsZC0+cGFyZW50Tm9kZSgpICE9IG1fZWxl
bWVudDIucHRyKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBWZWN0b3I8UmVmPE5vZGU+
PiBjaGlsZHJlbjsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX2VsZW1lbnQyLT5maXJzdENoaWxk
KCk7IG5vZGUgIT0gbV9hdENoaWxkOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkKKyAgICBm
b3IgKE5vZGUqIG5vZGUgPSBtX2VsZW1lbnQyLT5maXJzdENoaWxkKCk7IG5vZGUgIT0gbV9hdENo
aWxkLnB0cigpOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgY2hpbGRyZW4u
YXBwZW5kKCpub2RlKTsKIAogICAgIGF1dG8qIHBhcmVudCA9IG1fZWxlbWVudDItPnBhcmVudE5v
ZGUoKTsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBpZiAocGFyZW50LT5pbnNlcnRCZWZvcmUoKm1fZWxlbWVudDEs
IG1fZWxlbWVudDIuZ2V0KCkpLmhhc0V4Y2VwdGlvbigpKQorICAgIGlmIChwYXJlbnQtPmluc2Vy
dEJlZm9yZSgqbV9lbGVtZW50MSwgbV9lbGVtZW50Mi5wdHIoKSkuaGFzRXhjZXB0aW9uKCkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIERlbGV0ZSBpZCBhdHRyaWJ1dGUgZnJvbSB0aGUgc2Vj
b25kIGVsZW1lbnQgYmVjYXVzZSB0aGUgc2FtZSBpZCBjYW5ub3QgYmUgdXNlZCBmb3IgbW9yZSB0
aGFuIG9uZSBlbGVtZW50CkBAIC0xMDUsOCArMTAzLDggQEAgdm9pZCBTcGxpdEVsZW1lbnRDb21t
YW5kOjpkb1JlYXBwbHkoKQogdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpnZXROb2Rlc0luQ29t
bWFuZChIYXNoU2V0PE5vZGUqPiYgbm9kZXMpCiB7CiAgICAgYWRkTm9kZUFuZERlc2NlbmRhbnRz
KG1fZWxlbWVudDEuZ2V0KCksIG5vZGVzKTsKLSAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9l
bGVtZW50Mi5nZXQoKSwgbm9kZXMpOwotICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX2F0Q2hp
bGQuZ2V0KCksIG5vZGVzKTsKKyAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV9lbGVtZW50Mi5w
dHIoKSwgbm9kZXMpOworICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX2F0Q2hpbGQucHRyKCks
IG5vZGVzKTsKIH0KICNlbmRpZgogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0
RWxlbWVudENvbW1hbmQuaAppbmRleCBjYTFkMGIyYmNlNTlmY2ZlMDBlYzY3NDgxMjQ3Y2M5MTVk
MzBlMjE4Li45ODMxNjUxYjAwMGFhNzU0ZGJmYjYxNzA0NzZkN2NjYzc0MzkwZWYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuaApAQCAtMzEsMTMgKzMx
LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU3BsaXRFbGVtZW50Q29tbWFuZCA6
IHB1YmxpYyBTaW1wbGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTcGxp
dEVsZW1lbnRDb21tYW5kPiBjcmVhdGUoUGFzc1JlZlB0cjxFbGVtZW50PiBlbGVtZW50LCBQYXNz
UmVmUHRyPE5vZGU+IHNwbGl0UG9pbnRDaGlsZCkKKyAgICBzdGF0aWMgUmVmPFNwbGl0RWxlbWVu
dENvbW1hbmQ+IGNyZWF0ZShSZWY8RWxlbWVudD4mJiBlbGVtZW50LCBSZWY8Tm9kZT4mJiBzcGxp
dFBvaW50Q2hpbGQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTcGxpdEVs
ZW1lbnRDb21tYW5kKGVsZW1lbnQsIHNwbGl0UG9pbnRDaGlsZCkpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBTcGxpdEVsZW1lbnRDb21tYW5kKFdURk1vdmUoZWxlbWVudCksIFdURk1v
dmUoc3BsaXRQb2ludENoaWxkKSkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBTcGxpdEVsZW1l
bnRDb21tYW5kKFBhc3NSZWZQdHI8RWxlbWVudD4sIFBhc3NSZWZQdHI8Tm9kZT4gc3BsaXRQb2lu
dENoaWxkKTsKKyAgICBTcGxpdEVsZW1lbnRDb21tYW5kKFJlZjxFbGVtZW50PiYmLCBSZWY8Tm9k
ZT4mJiBzcGxpdFBvaW50Q2hpbGQpOwogCiAgICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkb1VuYXBwbHkoKSBvdmVycmlkZTsKQEAgLTQ5LDggKzQ5LDggQEAgcHJpdmF0ZToK
ICNlbmRpZgogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDE7Ci0gICAgUmVmUHRyPEVs
ZW1lbnQ+IG1fZWxlbWVudDI7Ci0gICAgUmVmUHRyPE5vZGU+IG1fYXRDaGlsZDsKKyAgICBSZWY8
RWxlbWVudD4gbV9lbGVtZW50MjsKKyAgICBSZWY8Tm9kZT4gbV9hdENoaWxkOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGxpdFRleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4
dE5vZGVDb21tYW5kLmNwcAppbmRleCBiMGE0YjIxZjk0YTllZjFlZmI4NDQzZmMwY2YwMDYwN2Qy
NmNlOWYwLi45YWQwOTBmMDhmNzQ3MDljYWQxMTc1OGE1NzQ2NGI5OGFlMDRhMGE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcApAQCAtMzMs
MTYgKzMzLDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3BsaXRUZXh0Tm9kZUNvbW1h
bmQ6OlNwbGl0VGV4dE5vZGVDb21tYW5kKFBhc3NSZWZQdHI8VGV4dD4gdGV4dCwgaW50IG9mZnNl
dCkKK1NwbGl0VGV4dE5vZGVDb21tYW5kOjpTcGxpdFRleHROb2RlQ29tbWFuZChSZWY8VGV4dD4m
JiB0ZXh0LCBpbnQgb2Zmc2V0KQogICAgIDogU2ltcGxlRWRpdENvbW1hbmQodGV4dC0+ZG9jdW1l
bnQoKSkKLSAgICAsIG1fdGV4dDIodGV4dCkKKyAgICAsIG1fdGV4dDIoV1RGTW92ZSh0ZXh0KSkK
ICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKIHsKICAgICAvLyBOT1RFOiBWYXJpb3VzIGNhbGxlcnMg
cmVseSBvbiB0aGUgZmFjdCB0aGF0IHRoZSBvcmlnaW5hbCBub2RlIGJlY29tZXMKICAgICAvLyB0
aGUgc2Vjb25kIG5vZGUgKGkuZS4gdGhlIG5ldyBub2RlIGlzIGluc2VydGVkIGJlZm9yZSB0aGUg
ZXhpc3Rpbmcgb25lKS4KICAgICAvLyBUaGF0IGlzIG5vdCBhIGZ1bmRhbWVudGFsIGRlcGVuZGVu
Y3kgKGkuZS4gaXQgY291bGQgYmUgcmUtY29kZWQpLCBidXQKICAgICAvLyByYXRoZXIgaXMgYmFz
ZWQgb24gaG93IHRoaXMgY29kZSBoYXBwZW5zIHRvIHdvcmsuCi0gICAgQVNTRVJUKG1fdGV4dDIp
OwogICAgIEFTU0VSVChtX3RleHQyLT5sZW5ndGgoKSA+IDApOwogICAgIEFTU0VSVChtX29mZnNl
dCA+IDApOwogICAgIEFTU0VSVChtX29mZnNldCA8IG1fdGV4dDItPmxlbmd0aCgpKTsKQEAgLTYz
LDcgKzYyLDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICBt
X3RleHQxID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIFdURk1vdmUocHJlZml4VGV4dCkpOwog
ICAgIEFTU0VSVChtX3RleHQxKTsKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2Vy
cyhtX3RleHQyLmdldCgpLCAwLCBtX29mZnNldCwgbV90ZXh0MS5nZXQoKSwgMCk7CisgICAgZG9j
dW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0Mi5wdHIoKSwgMCwgbV9vZmZzZXQs
IG1fdGV4dDEuZ2V0KCksIDApOwogCiAgICAgaW5zZXJ0VGV4dDFBbmRUcmltVGV4dDIoKTsKIH0K
QEAgLTc5LDEzICs3OCwxMyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHko
KQogCiAgICAgbV90ZXh0Mi0+aW5zZXJ0RGF0YSgwLCBwcmVmaXhUZXh0KTsKIAotICAgIGRvY3Vt
ZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKG1fdGV4dDEuZ2V0KCksIDAsIHByZWZpeFRleHQu
bGVuZ3RoKCksIG1fdGV4dDIuZ2V0KCksIDApOworICAgIGRvY3VtZW50KCkubWFya2VycygpLmNv
cHlNYXJrZXJzKG1fdGV4dDEuZ2V0KCksIDAsIHByZWZpeFRleHQubGVuZ3RoKCksIG1fdGV4dDIu
cHRyKCksIDApOwogICAgIG1fdGV4dDEtPnJlbW92ZSgpOwogfQogCiB2b2lkIFNwbGl0VGV4dE5v
ZGVDb21tYW5kOjpkb1JlYXBwbHkoKQogewotICAgIGlmICghbV90ZXh0MSB8fCAhbV90ZXh0MikK
KyAgICBpZiAoIW1fdGV4dDEpCiAgICAgICAgIHJldHVybjsKIAogICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudCA9IG1fdGV4dDItPnBhcmVudE5vZGUoKTsKQEAgLTk3LDcgKzk2LDcgQEAgdm9pZCBT
cGxpdFRleHROb2RlQ29tbWFuZDo6ZG9SZWFwcGx5KCkKIAogdm9pZCBTcGxpdFRleHROb2RlQ29t
bWFuZDo6aW5zZXJ0VGV4dDFBbmRUcmltVGV4dDIoKQogewotICAgIGlmIChtX3RleHQyLT5wYXJl
bnROb2RlKCktPmluc2VydEJlZm9yZSgqbV90ZXh0MSwgbV90ZXh0Mi5nZXQoKSkuaGFzRXhjZXB0
aW9uKCkpCisgICAgaWYgKG1fdGV4dDItPnBhcmVudE5vZGUoKS0+aW5zZXJ0QmVmb3JlKCptX3Rl
eHQxLCBtX3RleHQyLnB0cigpKS5oYXNFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAg
IG1fdGV4dDItPmRlbGV0ZURhdGEoMCwgbV9vZmZzZXQpOwogfQpAQCAtMTA3LDcgKzEwNiw3IEBA
IHZvaWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6Omluc2VydFRleHQxQW5kVHJpbVRleHQyKCkKIHZv
aWQgU3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmdldE5vZGVzSW5Db21tYW5kKEhhc2hTZXQ8Tm9kZSo+
JiBub2RlcykKIHsKICAgICBhZGROb2RlQW5kRGVzY2VuZGFudHMobV90ZXh0MS5nZXQoKSwgbm9k
ZXMpOwotICAgIGFkZE5vZGVBbmREZXNjZW5kYW50cyhtX3RleHQyLmdldCgpLCBub2Rlcyk7Cisg
ICAgYWRkTm9kZUFuZERlc2NlbmRhbnRzKG1fdGV4dDIucHRyKCksIG5vZGVzKTsKIH0KIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21t
YW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmgKaW5k
ZXggNTY3NDc5ZTE1NjQwZTg4YzJkMWFmYTMxMzExYjM3YTFlYmIwMWM5Mi4uYjk5MTlkNjcwODcx
OTIyMjljMDVjMzg3M2ZmOWYyMDEyOTEyOGZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaApAQCAtMzMsMTMgKzMzLDEzIEBAIGNsYXNzIFRleHQ7
CiAKIGNsYXNzIFNwbGl0VGV4dE5vZGVDb21tYW5kIDogcHVibGljIFNpbXBsZUVkaXRDb21tYW5k
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNwbGl0VGV4dE5vZGVDb21tYW5kPiBjcmVhdGUo
UGFzc1JlZlB0cjxUZXh0PiBub2RlLCBpbnQgb2Zmc2V0KQorICAgIHN0YXRpYyBSZWY8U3BsaXRU
ZXh0Tm9kZUNvbW1hbmQ+IGNyZWF0ZShSZWY8VGV4dD4mJiBub2RlLCBpbnQgb2Zmc2V0KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3BsaXRUZXh0Tm9kZUNvbW1hbmQobm9k
ZSwgb2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNwbGl0VGV4dE5vZGVD
b21tYW5kKFdURk1vdmUobm9kZSksIG9mZnNldCkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBT
cGxpdFRleHROb2RlQ29tbWFuZChQYXNzUmVmUHRyPFRleHQ+LCBpbnQgb2Zmc2V0KTsKKyAgICBT
cGxpdFRleHROb2RlQ29tbWFuZChSZWY8VGV4dD4mJiwgaW50IG9mZnNldCk7CiAKICAgICB2b2lk
IGRvQXBwbHkoKSBvdmVycmlkZTsKICAgICB2b2lkIGRvVW5hcHBseSgpIG92ZXJyaWRlOwpAQCAt
NTEsNyArNTEsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBSZWZQdHI8VGV4dD4gbV90ZXh0
MTsKLSAgICBSZWZQdHI8VGV4dD4gbV90ZXh0MjsKKyAgICBSZWY8VGV4dD4gbV90ZXh0MjsKICAg
ICB1bnNpZ25lZCBtX29mZnNldDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuY3Bw
CmluZGV4IGNlODg4NzQ2OTUxMTNmYmY2ZGFkMWUyMmE5MmNiZjQ3YTBhODFiOTIuLjAxODFlNDRj
Nzc0YmY2MTAyYmFkYTIwOGE5OGZhYWZjYmVmZTJkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRD
b21tYW5kLmNwcApAQCAtMzMsMjEgKzMzLDE5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
U3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZDo6U3BsaXRUZXh0Tm9kZUNvbnRh
aW5pbmdFbGVtZW50Q29tbWFuZChQYXNzUmVmUHRyPFRleHQ+IHRleHQsIGludCBvZmZzZXQpCitT
cGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kOjpTcGxpdFRleHROb2RlQ29udGFp
bmluZ0VsZW1lbnRDb21tYW5kKFJlZjxUZXh0PiYmIHRleHQsIGludCBvZmZzZXQpCiAgICAgOiBD
b21wb3NpdGVFZGl0Q29tbWFuZCh0ZXh0LT5kb2N1bWVudCgpKQotICAgICwgbV90ZXh0KHRleHQp
CisgICAgLCBtX3RleHQoV1RGTW92ZSh0ZXh0KSkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKIHsK
LSAgICBBU1NFUlQobV90ZXh0KTsKICAgICBBU1NFUlQobV90ZXh0LT5sZW5ndGgoKSA+IDApOwog
fQogCiB2b2lkIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6OmRvQXBwbHko
KQogewotICAgIEFTU0VSVChtX3RleHQpOwogICAgIEFTU0VSVChtX29mZnNldCA+IDApOwogCi0g
ICAgc3BsaXRUZXh0Tm9kZShtX3RleHQuZ2V0KCksIG1fb2Zmc2V0KTsKKyAgICBzcGxpdFRleHRO
b2RlKG1fdGV4dCwgbV9vZmZzZXQpOwogCiAgICAgRWxlbWVudCogcGFyZW50ID0gbV90ZXh0LT5w
YXJlbnRFbGVtZW50KCk7CiAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+cGFyZW50RWxlbWVu
dCgpIHx8ICFwYXJlbnQtPnBhcmVudEVsZW1lbnQoKS0+aGFzRWRpdGFibGVTdHlsZSgpKQpAQCAt
NjIsNyArNjAsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQ6
OmRvQXBwbHkoKQogICAgICAgICBwYXJlbnQgPSBkb3duY2FzdDxFbGVtZW50PihmaXJzdENoaWxk
KTsKICAgICB9CiAKLSAgICBzcGxpdEVsZW1lbnQocGFyZW50LCBtX3RleHQpOworICAgIHNwbGl0
RWxlbWVudCgqcGFyZW50LCBtX3RleHQpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFu
ZC5oCmluZGV4IDVlNjllMTJmMDgyOTllOWI1MWU5ZWZkYjk2NDdkNWRlMzA0ZDIxZDQuLmNkZWY2
ZWMzMGI0ZTkxZDZjMzUyZGExYWE1YzRjODI5NmIzNWQ2NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
Q29tbWFuZC5oCkBAIC0zMSwxNyArMzEsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kIDogcHVibGljIENvbXBvc2l0
ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFNwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQ+IGNyZWF0ZShQYXNzUmVmUHRyPFRleHQ+IG5vZGUsIGludCBv
ZmZzZXQpCisgICAgc3RhdGljIFJlZjxTcGxpdFRleHROb2RlQ29udGFpbmluZ0VsZW1lbnRDb21t
YW5kPiBjcmVhdGUoUmVmPFRleHQ+JiYgbm9kZSwgaW50IG9mZnNldCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQobm9kZSwgb2Zmc2V0KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNwbGl0VGV4
dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1hbmQoV1RGTW92ZShub2RlKSwgb2Zmc2V0KSk7CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIFNwbGl0VGV4dE5vZGVDb250YWluaW5nRWxlbWVudENvbW1h
bmQoUGFzc1JlZlB0cjxUZXh0PiwgaW50IG9mZnNldCk7CisgICAgU3BsaXRUZXh0Tm9kZUNvbnRh
aW5pbmdFbGVtZW50Q29tbWFuZChSZWY8VGV4dD4mJiwgaW50IG9mZnNldCk7CiAKICAgICB2b2lk
IGRvQXBwbHkoKSBvdmVycmlkZTsKIAotICAgIFJlZlB0cjxUZXh0PiBtX3RleHQ7CisgICAgUmVm
PFRleHQ+IG1fdGV4dDsKICAgICBpbnQgbV9vZmZzZXQ7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRJbnNlcnRpb25CYXNlQ29tbWFuZC5jcHAKaW5kZXggY2Y5YzI2
MjRhOTMxZDY3OTJkYTNjNTAwZmRlNmEzY2E1N2MyOGI2Ni4uMTljNmUzYjI2YTMyYTM0YTQwZWQ1
MTI0MTQzNDllMTEzNTk5Y2JhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SW5zZXJ0aW9uQmFzZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEluc2VydGlvbkJhc2VDb21tYW5kLmNwcApAQCAtNDcsNyArNDcsNyBAQCB2b2lkIFRleHRJ
bnNlcnRpb25CYXNlQ29tbWFuZDo6YXBwbHlUZXh0SW5zZXJ0aW9uQ29tbWFuZChGcmFtZSogZnJh
bWUsIFRleHRJbnNlcgogICAgICAgICBjb21tYW5kLnNldFN0YXJ0aW5nU2VsZWN0aW9uKHNlbGVj
dGlvbkZvckluc2VydGlvbik7CiAgICAgICAgIGNvbW1hbmQuc2V0RW5kaW5nU2VsZWN0aW9uKHNl
bGVjdGlvbkZvckluc2VydGlvbik7CiAgICAgfQotICAgIGFwcGx5Q29tbWFuZCgmY29tbWFuZCk7
CisgICAgY29tbWFuZC5hcHBseSgpOwogICAgIGlmIChjaGFuZ2VTZWxlY3Rpb24pIHsKICAgICAg
ICAgY29tbWFuZC5zZXRFbmRpbmdTZWxlY3Rpb24oZW5kaW5nU2VsZWN0aW9uKTsKICAgICAgICAg
ZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihlbmRpbmdTZWxlY3Rpb24pOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXggMWQwYTMyZGIwYTdkMzExMTQ1
Mzk1YzZlMTRkNzI1NGMzOTY1MzNlNC4uN2MwMTRlNWFmNjRmYzhiNjBlNDRmOWRkNzIwNzUxNDJh
ZGVmYzU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC0y
NzksNyArMjc5LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRMaW5lQnJlYWsoRG9jdW1l
bnQmIGRvY3VtZW50LCBPcHRpb25zIG9wdGlvbnMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhcHBseUNvbW1hbmQoVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRM
aW5lQnJlYWssIGVtcHR5U3RyaW5nKCksIG9wdGlvbnMpKTsKKyAgICBUeXBpbmdDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQsIEluc2VydExpbmVCcmVhaywgZW1wdHlTdHJpbmcoKSwgb3B0aW9ucykt
PmFwcGx5KCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJh
dG9ySW5RdW90ZWRDb250ZW50KERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTI5MSw3ICsyOTEsNyBA
QCB2b2lkIFR5cGluZ0NvbW1hbmQ6Omluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29u
dGVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
cHBseUNvbW1hbmQoVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRQYXJhZ3Jh
cGhTZXBhcmF0b3JJblF1b3RlZENvbnRlbnQpKTsKKyAgICBUeXBpbmdDb21tYW5kOjpjcmVhdGUo
ZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckluUXVvdGVkQ29udGVudCktPmFwcGx5
KCk7CiB9CiAKIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERv
Y3VtZW50JiBkb2N1bWVudCwgT3B0aW9ucyBvcHRpb25zKQpAQCAtMzA0LDcgKzMwNCw3IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yKERvY3VtZW50JiBkb2N1
bWVudCwgT3B0aW9ucyBvcHRpb25zCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhcHBs
eUNvbW1hbmQoVHlwaW5nQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50LCBJbnNlcnRQYXJhZ3JhcGhT
ZXBhcmF0b3IsIGVtcHR5U3RyaW5nKCksIG9wdGlvbnMpKTsKKyAgICBUeXBpbmdDb21tYW5kOjpj
cmVhdGUoZG9jdW1lbnQsIEluc2VydFBhcmFncmFwaFNlcGFyYXRvciwgZW1wdHlTdHJpbmcoKSwg
b3B0aW9ucyktPmFwcGx5KCk7CiB9CiAKIFJlZlB0cjxUeXBpbmdDb21tYW5kPiBUeXBpbmdDb21t
YW5kOjpsYXN0VHlwaW5nQ29tbWFuZElmU3RpbGxPcGVuRm9yVHlwaW5nKEZyYW1lJiBmcmFtZSkK
QEAgLTYzMiw3ICs2MzIsNyBAQCBib29sIFR5cGluZ0NvbW1hbmQ6Om1ha2VFZGl0YWJsZVJvb3RF
bXB0eSgpCiAgICAgfQogCiAgICAgd2hpbGUgKE5vZGUqIGNoaWxkID0gcm9vdC0+Zmlyc3RDaGls
ZCgpKQotICAgICAgICByZW1vdmVOb2RlKGNoaWxkKTsKKyAgICAgICAgcmVtb3ZlTm9kZSgqY2hp
bGQpOwogCiAgICAgYWRkQmxvY2tQbGFjZWhvbGRlcklmTmVlZGVkKHJvb3QpOwogICAgIHNldEVu
ZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUocm9vdCks
IERPV05TVFJFQU0sIGVuZGluZ1NlbGVjdGlvbigpLmlzRGlyZWN0aW9uYWwoKSkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IDJjNWQ2MjI5ODllZTc4YzA3MTgw
YWNkNTg4MmYwNjhjYTEzNWI1ZWQuLjkwM2E3Mjg3ZjdlNzA3ODQ0MTM0NmY4NDJjNzcyNWY1MDg1
ODAwOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTQxNCw3
ICs0MTQsNyBAQCB2b2lkIEVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyhWZWN0b3I8VmVj
dG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgUgogICAgIGlmIChkaWN0YXRpb25QaHJh
c2VzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXBwbHlDb21tYW5kKERpY3Rh
dGlvbkNvbW1hbmRJT1M6OmNyZWF0ZShkb2N1bWVudCgpLCBXVEZNb3ZlKGRpY3RhdGlvblBocmFz
ZXMpLCBXVEZNb3ZlKG1ldGFkYXRhKSkpOworICAgIERpY3RhdGlvbkNvbW1hbmRJT1M6OmNyZWF0
ZShkb2N1bWVudCgpLCBXVEZNb3ZlKGRpY3RhdGlvblBocmFzZXMpLCBXVEZNb3ZlKG1ldGFkYXRh
KSktPmFwcGx5KCk7CiB9CiAKIHZvaWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGls
ZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkaWN0YXRpb25QaHJhc2Vz
LCBSZXRhaW5QdHI8aWQ+IG1ldGFkYXRhLCBFbGVtZW50JiBlbGVtZW50KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmluZGV4IGNiMDc4Y2Q5ODNmN2U2
OTIwZTNiZTU1MDViZTNjODJmMjQ2ODUzMzAuLjY4YjEyZWJmNDdkYmM0MWZmMDliMzRmNmNmNzgw
MDZiYWE5NjU2NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJv
bGxlci5jcHAKQEAgLTM3Myw4ICszNzMsOCBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6
Y29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1lbnVBY3Rpb24gYWN0aW9uLCBjbwogCiAg
ICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKICAgICAg
ICAgICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQ+IGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpk
b2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpkb2N1bWVudCwgdGl0bGUsIGVtcHR5
U3RyaW5nKCkpLCByZXBsYWNlT3B0aW9ucyk7Ci0gICAgICAgICAgICBhcHBseUNvbW1hbmQoY29t
bWFuZCk7CisgICAgICAgICAgICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZDo6Y3JlYXRlKCpkb2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpkb2N1bWVudCwg
dGl0bGUsIGVtcHR5U3RyaW5nKCkpLCByZXBsYWNlT3B0aW9ucyk7CisgICAgICAgICAgICBjb21t
YW5kLT5hcHBseSgpOwogICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVj
dGlvbihTZWxlY3Rpb25SZXZlYWxNb2RlOjpSZXZlYWwsIFNjcm9sbEFsaWdubWVudDo6YWxpZ25U
b0VkZ2VJZk5lZWRlZCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDVkYzliZDQxZThmODM1YTdjNGEwN2VhYjc2NmUw
MzFkOGM2NjM0ZWMuLmRjYTVkNzY4MzA2ZDhhNzg4YWEzOTQyYzg3OGNlYThiYzVjMmNmN2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC01ODEsNyArNTgxLDcgQEAg
Ym9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJh
Z0RhdGEpCiAgICAgICAgICAgICAvLyBidXQgb25seSB0byBzbWFydCBpbnNlcnQgaWYgdGhlIHNl
bGVjdGlvbiBncmFudWxhcml0eSBpcyB3b3JkIGdyYW51bGFyaXR5LgogICAgICAgICAgICAgYm9v
bCBzbWFydERlbGV0ZSA9IGlubmVyRnJhbWUtPmVkaXRvcigpLnNtYXJ0SW5zZXJ0RGVsZXRlRW5h
YmxlZCgpOwogICAgICAgICAgICAgYm9vbCBzbWFydEluc2VydCA9IHNtYXJ0RGVsZXRlICYmIGlu
bmVyRnJhbWUtPnNlbGVjdGlvbigpLmdyYW51bGFyaXR5KCkgPT0gV29yZEdyYW51bGFyaXR5ICYm
IGRyYWdEYXRhLmNhblNtYXJ0UmVwbGFjZSgpOwotICAgICAgICAgICAgYXBwbHlDb21tYW5kKE1v
dmVTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoZnJhZ21lbnQsIGRyYWdDYXJldC5iYXNlKCksIHNt
YXJ0SW5zZXJ0LCBzbWFydERlbGV0ZSkpOworICAgICAgICAgICAgTW92ZVNlbGVjdGlvbkNvbW1h
bmQ6OmNyZWF0ZShmcmFnbWVudCwgZHJhZ0NhcmV0LmJhc2UoKSwgc21hcnRJbnNlcnQsIHNtYXJ0
RGVsZXRlKS0+YXBwbHkoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChzZXRT
ZWxlY3Rpb25Ub0RyYWdDYXJldChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHJhbmdlLCBw
b2ludCkpIHsKICAgICAgICAgICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFu
ZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNl
bWVudCB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZzsKQEAgLTU4OSw3
ICs1ODksNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERy
YWdEYXRhJiBkcmFnRGF0YSkKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlOwogICAgICAgICAgICAgICAgIGlmIChjaG9z
ZVBsYWluVGV4dCkKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6TWF0Y2hTdHlsZTsKLSAgICAgICAgICAgICAgICBhcHBseUNvbW1hbmQoUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqbV9kb2N1bWVudFVuZGVyTW91c2UsIFdURk1v
dmUoZnJhZ21lbnQpLCBvcHRpb25zLCBFZGl0QWN0aW9uSW5zZXJ0RnJvbURyb3ApKTsKKyAgICAg
ICAgICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5k
ZXJNb3VzZSwgV1RGTW92ZShmcmFnbWVudCksIG9wdGlvbnMsIEVkaXRBY3Rpb25JbnNlcnRGcm9t
RHJvcCktPmFwcGx5KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpA
QCAtNjAwLDcgKzYwMCw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWco
Y29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogCiAgICAgICAgIG1fY2xpZW50LndpbGxQZXJmb3Jt
RHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbkVkaXQsIGRyYWdEYXRh
KTsKICAgICAgICAgaWYgKHNldFNlbGVjdGlvblRvRHJhZ0NhcmV0KGlubmVyRnJhbWUuZ2V0KCks
IGRyYWdDYXJldCwgcmFuZ2UsIHBvaW50KSkKLSAgICAgICAgICAgIGFwcGx5Q29tbWFuZChSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCptX2RvY3VtZW50VW5kZXJNb3VzZSwgY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dCgqcmFuZ2UsIHRleHQpLCAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OlNlbGVjdFJlcGxhY2VtZW50IHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Ok1hdGNoU3R5bGUg
fCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcsIEVkaXRBY3Rpb25JbnNl
cnRGcm9tRHJvcCkpOworICAgICAgICAgICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZSgqbV9kb2N1bWVudFVuZGVyTW91c2UsIGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0
ZXh0KSwgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTZWxlY3RSZXBsYWNlbWVudCB8IFJlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlIHwgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OlByZXZlbnROZXN0aW5nLCBFZGl0QWN0aW9uSW5zZXJ0RnJvbURyb3ApLT5hcHBseSgpOwogICAg
IH0KIAogICAgIGlmIChyb290RWRpdGFibGVFbGVtZW50KSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>