<?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>155358</bug_id>
          
          <creation_ts>2016-03-11 05:26:59 -0800</creation_ts>
          <short_desc>Introduce CallWith=Document in binding generator</short_desc>
          <delta_ts>2016-03-14 02:44:32 -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 JavaScript</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="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1173703</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-03-11 05:26:59 -0800</bug_when>
    <thetext>Some DOM function calls are called with a ScriptExecutionContext&amp; which is later downcasted to a Document&amp;.
It would be an improvement to have the DOM APIs take a Document&amp; directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173704</commentid>
    <comment_count>1</comment_count>
      <attachid>273722</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-03-11 05:39:15 -0800</bug_when>
    <thetext>Created attachment 273722
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173705</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-11 05:40:06 -0800</bug_when>
    <thetext>Attachment 273722 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:11:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1173833</commentid>
    <comment_count>3</comment_count>
      <attachid>273722</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-11 12:58:28 -0800</bug_when>
    <thetext>Comment on attachment 273722
Patch

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

Good changes. Can land as is, but many small problems with code clarity that we could fix either before or after doing this.

&gt; Source/WebCore/page/DOMWindow.h:163
&gt; +        void focus(bool allowFocus = false);

I think it would be better to have focus that takes a boolean be a private function, and then have the public focus not take an argument. Should also consider reversing the sense of the boolean, because false does not mean “do not allow focus”. Instead the boolean argument could be “check if focus is allowed”? We need to think about a clear way to express what the boolean means.

&gt; Source/WebCore/page/DOMWindow.h:164
&gt; +        void focus(Document&amp;);

It’s really unclear that this version of focus implements a *less* restrictive rule for when focus is allowed than the one without the document. I think we might want to do something to increase the clarity here, maybe giving the functions different names.

&gt; Source/WebCore/page/DOMWindow.h:167
&gt; +        void close(Document&amp;);

It’s really unclear that this version of close implements a *more* restrictive rule for when close is allowed than the one without the document. Note that this is the opposite situation from focus()! It seems like someone could really easily call the wrong one. We should think about how to name these differently to make the difference clear. Could be as simple as naming the one with the Document&amp; closeFromBindings or closeWithRestrictions or some better name.

&gt; Source/WebCore/page/History.cpp:122
&gt;      ASSERT(isMainThread());

Why assert this after checking m_frame? I suggest moving it to the top.

&gt; Source/WebCore/page/History.h:52
&gt; -    void go(int distance);
&gt; +    void go(int);

I think it’s unclear what the int means without the argument name. Maybe we could come up with a better name than “distance”, but no name at all is unclear.

&gt; Source/WebCore/page/History.h:54
&gt; +    void back(Document&amp;);

Same kind of problem with back, forward, and go as above with focus() and close(). There are versions with and without Document&amp; and it’s unclear how they relate to each other.

&gt; Source/WebCore/page/History.h:56
&gt; +    void go(Document&amp;, int);

I think it’s unclear what the int means without the argument name. Maybe we could come up with a better name than “distance”, but no name at all is unclear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174336</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-03-14 00:28:02 -0700</bug_when>
    <thetext>Thanks for the review.
I agree with your comments and will tackle this as a follow-up bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174338</commentid>
    <comment_count>5</comment_count>
      <attachid>273722</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 00:30:25 -0700</bug_when>
    <thetext>Comment on attachment 273722
Patch

Rejecting attachment 273722 from commit-queue.

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

Last 500 characters of output:
est/TestObj.idl
patching file Source/WebCore/page/DOMWindow.cpp
patching file Source/WebCore/page/DOMWindow.h
patching file Source/WebCore/page/DOMWindow.idl
patching file Source/WebCore/page/History.cpp
patching file Source/WebCore/page/History.h
patching file Source/WebCore/page/History.idl
patching file Source/WebCore/testing/Internals.cpp

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

Full output: http://webkit-queues.webkit.org/results/975702</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174340</commentid>
    <comment_count>6</comment_count>
      <attachid>273934</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-03-14 00:33:16 -0700</bug_when>
    <thetext>Created attachment 273934
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174360</commentid>
    <comment_count>7</comment_count>
      <attachid>273934</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-14 02:09:54 -0700</bug_when>
    <thetext>Comment on attachment 273934
Patch for landing

Rejecting attachment 273934 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 273934, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 500 characters of output:
/git.webkit.org/WebKit
   0340364..4f112c0  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 198096 = 034036433660ab15cea2cde650a8315187235392
r198098 = 4f112c0fc72ddc95416b9ad67fcc4f9b5deaeb4a
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: http://webkit-queues.webkit.org/results/976170</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1174367</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-03-14 02:44:32 -0700</bug_when>
    <thetext>Committed r198102: &lt;http://trac.webkit.org/changeset/198102&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273722</attachid>
            <date>2016-03-11 05:39:15 -0800</date>
            <delta_ts>2016-03-14 00:33:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155358-20160311143901.patch</filename>
            <type>text/plain</type>
            <size>41585</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MDA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTkyNjQxNzMzYWMwOWYy
ZmQ0MTA4NTAyYTZkNzcxYzVhNzhmMGQ3ZC4uY2RmOTkzNWVhZDRhOGZhMjBhZTQ5MjQ3NDZiZGY0
NjNmNzhjMDU2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYzIEBACiAyMDE2LTAzLTExICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKKyAgICAgICAgSW50cm9k
dWNlIENhbGxXaXRoPURvY3VtZW50IGluIGJpbmRpbmcgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUzNTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRl
c3RzIGFuZCBiaW5kaW5nIHRlc3QuCisKKyAgICAgICAgKiBNb2R1bGVzL25vdGlmaWNhdGlvbnMv
Tm90aWZpY2F0aW9uLmNwcDoKKwkJKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbjo6cGVybWlzc2lvbik6
IFRha2luZyBhIERvY3VtZW50JiBpbnN0ZWFkIG9mIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLgor
ICAgICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uOjpyZXF1ZXN0UGVybWlzc2lvbik6IERpdHRv
LgorICAgICAgICAqIE1vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaDoKKyAgICAg
ICAgKiBNb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmlkbDogVXNpbmcgQ2FsbFdp
dGg9RG9jdW1lbnQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG06IEFkZGluZyBzdXBwb3J0IGZvciBDYWxsV2l0aD1Eb2N1bWVudCBhbmQgY2hhbmdlZCBuYW1l
IGZyb20gc2NyaXB0Q29udGV4dCB0byBjb250ZXh0LgorICAgICAgICAoR2VuZXJhdGVDYWxsV2l0
aCk6CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgICog
YmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dDogQWRkaW5nIHN1cHBvcnQgZm9yIENh
bGxXaXRoPURvY3VtZW50LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0
L1dlYktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRo
X2RvY3VtZW50X2FyZ3VtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZh
Y2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QyKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMik6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OmpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1
dGVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
dHRyaWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
QXR0cmlidXRlUmFpc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rp
b25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVXaXRoU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aERvY3VtZW50QXJndW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9PYmpDL0RPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2Jq
Qy9ET01UZXN0T2JqLm1tOgorICAgICAgICAoLVtET01UZXN0T2JqIHdpdGhEb2N1bWVudEFyZ3Vt
ZW50XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOiBBZGRp
bmcgYmluZGluZyB0ZXN0LgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkRPTVdpbmRvdzo6Zm9jdXMpOiBUYWtpbmcgYSBEb2N1bWVudCYgaW5zdGVhZCBv
ZiBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ji4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6
Y2xvc2UpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5oOgorICAgICAgICAqIHBh
Z2UvRE9NV2luZG93LmlkbDoKKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SGlzdG9yeTo6YmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eTo6Zm9yd2FyZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeTo6Z28pOiBEaXR0
by4KKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuaDoKKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuaWRs
OgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvclN0dWJGcm9udGVuZDo6Y2xvc2VXaW5kb3cpOiBDYWxsaW5nIERPTVdpbmRvdzo6Y2xv
c2UoKSBkaXJlY3RseS4KKworMjAxNi0wMy0xMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJs
ZXRAY3JmLmNhbm9uLmZyPgorCiAgICAgICAgIFtGZXRjaCBBUEldIFVzZSBEZWZlcnJlZFdyYXBw
ZXIgZGlyZWN0bHkgaW4gRmV0Y2hCb2R5IHByb21pc2UgaGFuZGxpbmcKICAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTI5MQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwCmluZGV4
IDY1NzhkYTQ0OTAxMTI3YTU0M2U2MWU2N2FkMTI0ZmY0MTdmODQ1NDQuLmMyOWFlMWY0Y2U0YTYy
MDc2YmFmOTQ5NTRkZTYwMmNiYjgwYzkxZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uY3BwCkBAIC0yMjEsMTAgKzIyMSw5
IEBAIHZvaWQgTm90aWZpY2F0aW9uOjp0YXNrVGltZXJGaXJlZCgpCiAKIAogI2lmIEVOQUJMRShO
T1RJRklDQVRJT05TKQotY29uc3QgU3RyaW5nIE5vdGlmaWNhdGlvbjo6cGVybWlzc2lvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQorY29uc3QgU3RyaW5nIE5vdGlmaWNhdGlvbjo6
cGVybWlzc2lvbihEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGRvd25jYXN0PERv
Y3VtZW50Pihjb250ZXh0KS5wYWdlKCkpOwotICAgIHJldHVybiBwZXJtaXNzaW9uU3RyaW5nKE5v
dGlmaWNhdGlvbkNvbnRyb2xsZXI6OmZyb20oZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLnBh
Z2UoKSktPmNsaWVudCgpLT5jaGVja1Blcm1pc3Npb24oJmNvbnRleHQpKTsKKyAgICByZXR1cm4g
cGVybWlzc2lvblN0cmluZyhOb3RpZmljYXRpb25Db250cm9sbGVyOjpmcm9tKGRvY3VtZW50LnBh
Z2UoKSktPmNsaWVudCgpLT5jaGVja1Blcm1pc3Npb24oJmRvY3VtZW50KSk7CiB9CiAKIGNvbnN0
IFN0cmluZyBOb3RpZmljYXRpb246OnBlcm1pc3Npb25TdHJpbmcoTm90aWZpY2F0aW9uQ2xpZW50
OjpQZXJtaXNzaW9uIHBlcm1pc3Npb24pCkBAIC0yNDIsMTAgKzI0MSw5IEBAIGNvbnN0IFN0cmlu
ZyBOb3RpZmljYXRpb246OnBlcm1pc3Npb25TdHJpbmcoTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJt
aXNzaW9uIHBlcm1pCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi12b2lkIE5vdGlmaWNhdGlv
bjo6cmVxdWVzdFBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgUGFz
c1JlZlB0cjxOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2s+IGNhbGxiYWNrKQordm9pZCBO
b3RpZmljYXRpb246OnJlcXVlc3RQZXJtaXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCwgUGFzc1Jl
ZlB0cjxOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2s+IGNhbGxiYWNrKQogewotICAgIEFT
U0VSVChkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCkucGFnZSgpKTsKLSAgICBOb3RpZmljYXRp
b25Db250cm9sbGVyOjpmcm9tKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0KS5wYWdlKCkpLT5j
bGllbnQoKS0+cmVxdWVzdFBlcm1pc3Npb24oJmNvbnRleHQsIGNhbGxiYWNrKTsKKyAgICBOb3Rp
ZmljYXRpb25Db250cm9sbGVyOjpmcm9tKGRvY3VtZW50LnBhZ2UoKSktPmNsaWVudCgpLT5yZXF1
ZXN0UGVybWlzc2lvbigmZG9jdW1lbnQsIGNhbGxiYWNrKTsKIH0KICNlbmRpZgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmgKaW5k
ZXggMDFmMjcwNTQ2OTJhZTk1ZDk4NjE5NWNiMGVjMmMyMDNhZWIzODc0NS4uMjRlMGM1Y2EyNjg2
ODQxOGQwNDM5MDUxMDM4YWY3Mzc4ZWU5NGU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaApAQCAtNTIsMTEgKzUyLDExIEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERpY3Rpb25hcnk7CitjbGFzcyBEb2N1bWVu
dDsKIGNsYXNzIE5vdGlmaWNhdGlvbkNlbnRlcjsKIGNsYXNzIE5vdGlmaWNhdGlvblBlcm1pc3Np
b25DYWxsYmFjazsKIGNsYXNzIFJlc291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNl
OwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFRocmVhZGFibGVMb2FkZXI7
CiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBAIC0xMjIsOSArMTIyLDkgQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmluYWxpemUoKTsKIAogI2lmIEVOQUJMRShOT1RJ
RklDQVRJT05TKQotICAgIHN0YXRpYyBjb25zdCBTdHJpbmcgcGVybWlzc2lvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0Jik7CisgICAgc3RhdGljIGNvbnN0IFN0cmluZyBwZXJtaXNzaW9uKERvY3Vt
ZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGNvbnN0IFN0cmluZyBwZXJtaXNzaW9u
U3RyaW5nKE5vdGlmaWNhdGlvbkNsaWVudDo6UGVybWlzc2lvbik7Ci0gICAgc3RhdGljIHZvaWQg
cmVxdWVzdFBlcm1pc3Npb24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIFBhc3NSZWZQdHI8Tm90
aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrPiA9IG51bGxwdHIpOworICAgIHN0YXRpYyB2b2lk
IHJlcXVlc3RQZXJtaXNzaW9uKERvY3VtZW50JiwgUGFzc1JlZlB0cjxOb3RpZmljYXRpb25QZXJt
aXNzaW9uQ2FsbGJhY2s+ID0gbnVsbHB0cik7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaWRs
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5pZGwK
aW5kZXggYTA2Mjc4NWVjN2Q4MjdiNzNmMzE2YzNlMDkxODEyNjIzNjYxOTVmMi4uOTg0NTRhMzNl
MDU0NTA0ZTI2ZmI5NGQ2ZTliYzNhN2IzMWU4ZTQxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5pZGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlvbi5pZGwKQEAgLTQxLDggKzQx
LDggQEAKICAgICBbQ29uZGl0aW9uYWw9TEVHQUNZX05PVElGSUNBVElPTlNdIHZvaWQgY2FuY2Vs
KCk7CiAgICAgW0NvbmRpdGlvbmFsPU5PVElGSUNBVElPTlNdIHZvaWQgY2xvc2UoKTsKIAotICAg
IFtDb25kaXRpb25hbD1OT1RJRklDQVRJT05TLCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0XSBzdGF0aWMgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwZXJtaXNzaW9uOwotICAg
IFtDb25kaXRpb25hbD1OT1RJRklDQVRJT05TLCBDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0XSBzdGF0aWMgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihvcHRpb25hbCBOb3RpZmljYXRpb25Q
ZXJtaXNzaW9uQ2FsbGJhY2sgY2FsbGJhY2spOworICAgIFtDb25kaXRpb25hbD1OT1RJRklDQVRJ
T05TLCBDYWxsV2l0aD1Eb2N1bWVudF0gc3RhdGljIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgcGVybWlzc2lvbjsKKyAgICBbQ29uZGl0aW9uYWw9Tk9USUZJQ0FUSU9OUywgQ2FsbFdpdGg9
RG9jdW1lbnRdIHN0YXRpYyB2b2lkIHJlcXVlc3RQZXJtaXNzaW9uKG9wdGlvbmFsIE5vdGlmaWNh
dGlvblBlcm1pc3Npb25DYWxsYmFjayBjYWxsYmFjayk7CiAKICAgICBhdHRyaWJ1dGUgRXZlbnRI
YW5kbGVyIG9uY2xpY2s7CiAgICAgYXR0cmlidXRlIEV2ZW50SGFuZGxlciBvbmNsb3NlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMu
cG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpp
bmRleCBhMDA4MDM3NTUyN2NkNDhiMGQ5Mjg2YjdhNmYwODIzZmRiNGY2NWYzLi4wYjlmZmU2ODdi
MDBjYWJlYzRhZDQ0ZmJkYjA0MDYyMDlmM2NhZjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQpAQCAtMzI4MywxMCArMzI4Mywx
OSBAQCBzdWIgR2VuZXJhdGVDYWxsV2l0aAogICAgIG15IEBjYWxsV2l0aEFyZ3M7CiAgICAgcHVz
aChAY2FsbFdpdGhBcmdzLCAiKnN0YXRlIikgaWYgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0
cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0U3RhdGUiKTsKICAgICBpZiAoJGNvZGVH
ZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29udGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCIpKSB7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRv
KiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTtcbiIpOwotICAgICAg
ICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFzY3JpcHRDb250ZXh0KVxuIik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYg
KCFjb250ZXh0KVxuIik7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0
dXJuIiAuICgkcmV0dXJuVmFsdWUgPyAiICIgLiAkcmV0dXJuVmFsdWUgOiAiIikgLiAiO1xuIik7
Ci0gICAgICAgIHB1c2goQGNhbGxXaXRoQXJncywgIipzY3JpcHRDb250ZXh0Iik7CisgICAgICAg
IHB1c2goQGNhbGxXaXRoQXJncywgIipjb250ZXh0Iik7CisgICAgfQorICAgIGlmICgkY29kZUdl
bmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJEb2N1bWVudCIp
KSB7CisgICAgICAgICRpbXBsSW5jbHVkZXN7IkRvY3VtZW50LmgifSA9IDE7CisgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFjb250
ZXh0KVxuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICAgICAgcmV0dXJuIiAu
ICgkcmV0dXJuVmFsdWUgPyAiICIgLiAkcmV0dXJuVmFsdWUgOiAiIikgLiAiO1xuIik7CisgICAg
ICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgp
KTtcbiIpOworICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKmNvbnRleHQpO1xuIik7CisgICAgICAgIHB1c2goQGNhbGxX
aXRoQXJncywgImRvY3VtZW50Iik7CiAgICAgfQogICAgIGlmICgkZnVuY3Rpb24gYW5kICRjb2Rl
R2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRhaW5zKCRjYWxsV2l0aCwgIlNjcmlwdEFy
Z3VtZW50cyIpKSB7CiAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBSZWZQdHI8SW5z
cGVjdG9yOjpTY3JpcHRBcmd1bWVudHM+IHNjcmlwdEFyZ3VtZW50cyhJbnNwZWN0b3I6OmNyZWF0
ZVNjcmlwdEFyZ3VtZW50cyhzdGF0ZSwgIiAuIEB7JGZ1bmN0aW9uLT5wYXJhbWV0ZXJzfSAuICIp
KTtcbiIpOwpAQCAtNDkxMyw2ICs0OTIyLDcgQEAgRU5ECiAgICAgICAgICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBjYXN0
ZWRUaGlzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7XG4iKTsKICAgICAgICAgICAgICAgICBw
dXNoKEAkb3V0cHV0QXJyYXksICIgICAgaWYgKCFjb250ZXh0KVxuIik7CiAgICAgICAgICAgICAg
ICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4gdGhyb3dDb25zdHJ1Y3RvckRv
Y3VtZW50VW5hdmFpbGFibGVFcnJvcigqc3RhdGUsIFwiJHtpbnRlcmZhY2VOYW1lfVwiKTtcbiIp
OworICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBBU1NFUlQoY29udGV4
dC0+aXNEb2N1bWVudCgpKTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJh
eSwgIiAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7XG4i
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgkZ2VuZXJhdGluZ05hbWVkQ29uc3Ry
dWN0b3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURM
QXR0cmlidXRlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJp
YnV0ZXMudHh0CmluZGV4IGI5MjJiZDdjOTczNTQzM2EwZWU2ZjVlN2ViZTYzZDhlMjViY2FmNjAu
LjgxNmI4ZDFmMTZmNTE1YmQ2YzZhMWIzNDVhY2NmNmE4YmJjNDEzNmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dApAQCAtMjQsNyAr
MjQsNyBAQCBDUFBQdXJlSW50ZXJmYWNlCiBDYWNoZWRBdHRyaWJ1dGUKIENhbGxiYWNrTmVlZHNP
cGVyYXRvckVxdWFsCiBDYWxsYmFjaz1GdW5jdGlvbk9ubHkKLUNhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHR8U2NyaXB0U3RhdGV8U2NyaXB0QXJndW1lbnRzfENhbGxTdGFja3xBY3RpdmVX
aW5kb3d8Rmlyc3RXaW5kb3cKK0NhbGxXaXRoPURvY3VtZW50fFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHR8U2NyaXB0U3RhdGV8U2NyaXB0QXJndW1lbnRzfENhbGxTdGFja3xBY3RpdmVXaW5kb3d8Rmly
c3RXaW5kb3cKIENoZWNrU2VjdXJpdHkKIENoZWNrU2VjdXJpdHlGb3JOb2RlCiBDbGFtcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2Vi
S2l0RE9NVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
R09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAppbmRleCAyZTEzNTA5MmZmZWVhMTI4YTgyYmIz
MDI5NmI1YzFhNDYwMmIyZDc1Li5mYTdmNTkxNjc5YTY0NDA3ODA4YmNlMWEyYTQ5Zjk5MzEwMTcw
NTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09i
amVjdC9XZWJLaXRET01UZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcApAQCAtMTQ2NSw2ICsxNDY1
LDE0IEBAIFdlYktpdERPTVRlc3RPYmoqIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9zY3JpcHRf
ZXhlY3V0aW9uX2NvbnRleHRfYW5kX3NjcmlwdF9zCiAgICAgcmV0dXJuIFdlYktpdDo6a2l0KGdv
YmplY3RSZXN1bHQuZ2V0KCkpOwogfQogCit2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9k
b2N1bWVudF9hcmd1bWVudChXZWJLaXRET01UZXN0T2JqKiBzZWxmKQoreworICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9ET01fSVNfVEVTVF9PQkooc2VsZikpOworICAgIFdlYkNvcmU6OlRlc3RPYmoqIGl0ZW0gPSBX
ZWJLaXQ6OmNvcmUoc2VsZik7CisgICAgaXRlbS0+d2l0aERvY3VtZW50QXJndW1lbnQoKTsKK30K
Kwogdm9pZCB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93aXRoX29wdGlvbmFsX2FyZyhXZWJL
aXRET01UZXN0T2JqKiBzZWxmLCBnbG9uZyBvcHQpCiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0RE9NVGVzdE9iai5oCmluZGV4IDk2
NGExNjVhOWU1MjFlODJmNTUxZTdlYzgxYzgwNmQwYzIwMDU1ZmMuLjA1NWM1YjZmYjUxMDgyZWFk
ZTI4ZTE1Mzk4NTcxMjJmYzg0OTU3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmgK
QEAgLTQzNyw2ICs0MzcsMTUgQEAgV0VCS0lUX0FQSSBXZWJLaXRET01UZXN0T2JqKgogd2Via2l0
X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3N0
YXRlX3dpdGhfc3BhY2VzKFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOwogCiAvKioKKyAqIHdlYmtp
dF9kb21fdGVzdF9vYmpfd2l0aF9kb2N1bWVudF9hcmd1bWVudDoKKyAqIEBzZWxmOiBBICNXZWJL
aXRET01UZXN0T2JqCisgKgorICogU3RhYmlsaXR5OiBVbnN0YWJsZQorKiovCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF9kb21fdGVzdF9vYmpfd2l0aF9kb2N1bWVudF9hcmd1bWVudChXZWJLaXRE
T01UZXN0T2JqKiBzZWxmKTsKKworLyoqCiAgKiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX21ldGhvZF93
aXRoX29wdGlvbmFsX2FyZzoKICAqIEBzZWxmOiBBICNXZWJLaXRET01UZXN0T2JqCiAgKiBAb3B0
OiBBICNnbG9uZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAppbmRleCAyMWFlM2M2YzMyNTE2MTU1N2M1
NTA3ZTcxNWFlZDkwM2Y0MGY4MGEyLi5lM2YxYThhMzhmY2MzZjM1ZjU5ODY4Mzg1YWQyYjUxMWQ4
OWIzMDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
SlMvSlNUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcApAQCAtNzg4LDggKzc4OCw4IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25J
bXBsZW1lbnRzTWV0aG9kMihFCiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50
KCkgPCAyKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUt
PmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBp
ZiAoIXNjcmlwdENvbnRleHQpCisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIFN0cmluZyBzdHJBcmcgPSBzdGF0ZS0+YXJndW1lbnQo
MCkudG9TdHJpbmcoc3RhdGUpLT52YWx1ZShzdGF0ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRl
LT5oYWRFeGNlcHRpb24oKSkpCkBAIC03OTcsNyArNzk3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRo
b2QyKEUKICAgICBUZXN0T2JqKiBvYmpBcmcgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZChzdGF0ZS0+
YXJndW1lbnQoMSkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFs
dWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6
Z2V0UHRyKGltcGwuaW1wbGVtZW50c01ldGhvZDIoKnNjcmlwdENvbnRleHQsIHN0ckFyZywgb2Jq
QXJnLCBlYykpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLmltcGxlbWVudHNNZXRob2QyKCpjb250
ZXh0LCBzdHJBcmcsIG9iakFyZywgZWMpKSk7CiAKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUs
IGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CkBAIC04NTQsOCArODU0
LDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJbnRlcmZhY2VQcm90b3R5
cGVGdW5jdGlvblN1cHBsZW1lbnRhbE1ldGhvZDIKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwotICAgIGlmICghc2NyaXB0Q29udGV4dCkKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgU3RyaW5nIHN0ckFyZyA9IHN0YXRl
LT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRlKTsKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKQEAgLTg2Myw3ICs4NjMsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3Vw
cGxlbWVudGFsTWV0aG9kMgogICAgIFRlc3RPYmoqIG9iakFyZyA9IEpTVGVzdE9iajo6dG9XcmFw
cGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmpl
Y3QoKSwgV1RGOjpnZXRQdHIoV2ViQ29yZTo6VGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFs
TWV0aG9kMihpbXBsLCAqc2NyaXB0Q29udGV4dCwgc3RyQXJnLCBvYmpBcmcsIGVjKSkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURjo6Z2V0UHRyKFdlYkNvcmU6OlRlc3RTdXBwbGVtZW50YWw6OnN1cHBsZW1lbnRhbE1ldGhv
ZDIoaW1wbCwgKmNvbnRleHQsIHN0ckFyZywgb2JqQXJnLCBlYykpKTsKIAogICAgIHNldERPTUV4
Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dE9iai5jcHAKaW5kZXggZTIwNWM1MjA2NzQ2MDJjYmUxMGI1ZWNmODhlZjA3ODIzOGNjNDY1MC4u
NzNjYzkzYzcxODg2NDRiZGI4NDliYWZjNjI0M2YxZGE3YjY0M2I5YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAKQEAg
LTEyOSw2ICsxMjksNyBAQCBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQwogSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbihKU0M6OkV4ZWNTdGF0ZSop
OwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1
bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMo
SlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soSlND
OjpFeGVjU3RhdGUqKTsKK0pTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RP
YmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50KEpTQzo6RXhlY1N0YXRlKik7
CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdp
dGhPcHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZShKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcoSlNDOjpFeGVjU3RhdGUqKTsKQEAgLTY2
MSw2ICs2NjIsNyBAQCBzdGF0aWMgY29uc3QgSGFzaFRhYmxlVmFsdWUgSlNUZXN0T2JqUHJvdG90
eXBlVGFibGVWYWx1ZXNbXSA9CiAgICAgeyAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZU9iakV4Y2VwdGlvbiIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChp
bnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVu
Y3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9u
KSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzIiwgSlNDOjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsg
KGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVG
dW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2Vz
KSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgIndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxs
U3RhY2siLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nh
c3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEFy
Z3VtZW50c0FuZENhbGxTdGFjayksIChpbnRwdHJfdCkgKDApIH0gfSwKKyAgICB7ICJ3aXRoRG9j
dW1lbnRBcmd1bWVudCIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7IChpbnRwdHJfdClz
dGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRo
RG9jdW1lbnRBcmd1bWVudCksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJtZXRob2RXaXRo
T3B0aW9uYWxBcmciLCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3Rh
dGljX2Nhc3Q8TmF0aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE9wdGlvbmFsQXJnKSwgKGludHB0cl90KSAoMCkgfSB9LAogICAgIHsgIm1ldGhvZFdpdGhP
cHRpb25hbEFyZ0FuZERlZmF1bHRWYWx1ZSIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWUpLCAoaW50cHRyX3Qp
ICgwKSB9IH0sCiAgICAgeyAibWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmci
LCBKU0M6OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0
aXZlRnVuY3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE5vbk9wdGlv
bmFsQXJnQW5kT3B0aW9uYWxBcmcpLCAoaW50cHRyX3QpICgxKSB9IH0sCkBAIC0xNDc0LDExICsx
NDc2LDExIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QXR0cmlidXRlKEV4ZWNTdGF0ZSogc3RhdGUsIEVuCiAgICAgaWYgKFVOTElLRUxZKCFjYXN0
ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAi
VGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSIpOwogICAgIH0K
LSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAg
ICBpZiAoIXNjcmlwdENvbnRleHQpCisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9i
YWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZSgqc2NyaXB0Q29udGV4dCkpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3Jp
cHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCpjb250ZXh0KSkpOwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIApAQCAtMTUxMCwxMSArMTUxMiwxMSBAQCBFbmNvZGVk
SlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNl
cyhFeGVjU3RhdGUqIHN0YQogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0
YXRlLCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNl
cyIpOwogICAgIH0KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvKiBzY3JpcHRD
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIXNjcmlwdENvbnRl
eHQpCisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRl
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
aWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygqc2Ny
aXB0Q29udGV4dCwgZWMpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0
ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygqY29udGV4dCwgZWMpKSk7CiAgICAgc2V0RE9NRXhj
ZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwog
fQpAQCAtMTUyOSwxMSArMTUzMSwxMSBAQCBFbmNvZGVkSlNWYWx1ZSBqc1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKEV4ZWNTdAogICAgIGlm
IChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlw
ZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0g
anNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSkt
PnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIXNjcmlwdENvbnRleHQpCisgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250
ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQg
PSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1w
bC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0
ZSwgKnNjcmlwdENvbnRleHQpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQpKSk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC0xNTQ4LDExICsx
NTUwLDExIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoCiAgICAgICAgIHJldHVybiB0aHJvd0dl
dHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMiKTsKICAgICB9CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2Jh
bE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCk7Ci0gICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAgIGF1dG8qIGNvbnRleHQgPSBq
c0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvJiBpbXBsID0gY2Fz
dGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2Fz
dGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygqc3RhdGUsICpzY3JpcHRD
b250ZXh0LCBlYykpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoKnN0YXRlLCAqY29udGV4dCwgZWMp
KSk7CiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogfQpAQCAtMTU2NywxMSArMTU2OSwxMSBAQCBFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNw
YWNlc0F0dHJpYgogICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpIHsKICAgICAgICAgcmV0
dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUiKTsKICAgICB9
Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0g
ICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xv
YmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoKnN0YXRlLCAqc2NyaXB0Q29udGV4dCkp
KTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9i
amVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2Ny
aXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQpKSk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC0yNjk0LDEwICsyNjk2LDEwIEBA
IHZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoRXhl
Y1N0YXRlKiBzdGF0ZSwgRW5jb2RlZEpTCiAgICAgVGVzdE9iaiogbmF0aXZlVmFsdWUgPSBKU1Rl
c3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIXNjcmlwdENvbnRleHQpCisgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0
KQogICAgICAgICByZXR1cm47Ci0gICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEF0dHJpYnV0ZSgqc2NyaXB0Q29udGV4dCwgbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0V2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNvbnRleHQsIG5hdGl2ZVZhbHVlKTsK
IH0KIAogCkBAIC0yNzMxLDEwICsyNzMzLDEwIEBAIHZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jCiAg
ICAgVGVzdE9iaiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAg
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsK
LSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3Rh
dGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAg
ICBpZiAoIXNjcmlwdENvbnRleHQpCisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgaW1w
bC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygqc2NyaXB0Q29u
dGV4dCwgbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBdHRyaWJ1dGVSYWlzZXMoKmNvbnRleHQsIG5hdGl2ZVZhbHVlKTsKIH0KIAogCkBAIC0yNzUx
LDEwICsyNzUzLDEwIEBAIHZvaWQgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0CiAgICAgVGVzdE9iaiogbmF0
aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvKiBzY3Jp
cHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIXNjcmlwdENv
bnRleHQpCisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0
YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Cisg
ICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm47Ci0gICAgaW1wbC5zZXRXaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKCpzdGF0ZSwgKnNjcmlwdENv
bnRleHQsIG5hdGl2ZVZhbHVlKTsKKyAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4dCwgbmF0aXZlVmFsdWUp
OwogfQogCiAKQEAgLTI3NzEsMTAgKzI3NzMsMTAgQEAgdm9pZCBzZXRKU1Rlc3RPYmpXaXRoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlUmFpc2VzKEV4ZWNTdGEK
ICAgICBUZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsK
ICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihz
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwot
ICAgIGlmICghc2NyaXB0Q29udGV4dCkKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKLSAgICBp
bXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMoKnN0YXRlLCAqc2NyaXB0Q29udGV4dCwgbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0
V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNlcygq
c3RhdGUsICpjb250ZXh0LCBuYXRpdmVWYWx1ZSk7CiB9CiAKIApAQCAtMjc5MSwxMCArMjc5Mywx
MCBAQCB2b2lkIHNldEpTVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEV4ZQogICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0g
SlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFk
RXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9
IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkp
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAg
IGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29u
dGV4dCkKICAgICAgICAgcmV0dXJuOwotICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoKnN0YXRlLCAqc2NyaXB0Q29u
dGV4dCwgbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4dCwgbmF0
aXZlVmFsdWUpOwogfQogCiAKQEAgLTM3MDEsMTAgKzM3MDMsMTAgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRp
b25Db250ZXgKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0
T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0Iik7CiAgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIXNjcmlwdENvbnRleHQpCisgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIGlt
cGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKnNjcmlwdENvbnRleHQpOworICAgIGltcGwu
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKmNvbnRleHQpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKQEAgLTM3MTYsMTAgKzM3MTgsMTAgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXgKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigq
c3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGUiKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9i
ajo6aW5mbygpKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlm
ICghc2NyaXB0Q29udGV4dCkKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFs
T2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFu
ZFNjcmlwdFN0YXRlKCpzdGF0ZSwgKnNjcmlwdENvbnRleHQpOworICAgIGltcGwud2l0aFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZSgqc3RhdGUsICpjb250ZXh0KTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0zNzMyLDEwICsz
NzM0LDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4CiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6OmluZm8oKSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBh
dXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxl
eGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAo
IXNjcmlwdENvbnRleHQpCisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9i
amVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVk
VGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRBbmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbigqc3RhdGUsICpzY3JpcHRDb250ZXh0
LCBlYykpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKnN0YXRlLCAqY29udGV4dCwgZWMpKSk7CiAKICAg
ICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhh
ZEV4Y2VwdGlvbigpKSkKQEAgLTM3NTEsMTAgKzM3NTMsMTAgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXgKICAgICAgICAgcmV0dXJuIHRocm93VGhpc1R5cGVFcnJvcigqc3RhdGUsICJUZXN0T2Jq
IiwgIndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzIik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
KiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIXNj
cmlwdENvbnRleHQpCisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhp
cy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMoKnN0YXRlLCAqc2NyaXB0Q29udGV4dCkpKTsK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVj
dCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0
U3RhdGVXaXRoU3BhY2VzKCpzdGF0ZSwgKmNvbnRleHQpKSk7CiAgICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpAQCAtMzc3
Myw2ICszNzc1LDIzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsCiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50KEV4ZWNT
dGF0ZSogc3RhdGUpCit7CisgICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVl
KCk7CisgICAgYXV0byBjYXN0ZWRUaGlzID0ganNEeW5hbWljQ2FzdDxKU1Rlc3RPYmoqPih0aGlz
VmFsdWUpOworICAgIGlmIChVTkxJS0VMWSghY2FzdGVkVGhpcykpCisgICAgICAgIHJldHVybiB0
aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRoRG9jdW1lbnRBcmd1bWVu
dCIpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2Jq
OjppbmZvKCkpOworICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7CisgICAg
YXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250
ZXh0KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAg
IEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIGF1dG8mIGRvY3VtZW50ID0gZG93
bmNhc3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTsKKyAgICBpbXBsLndpdGhEb2N1bWVudEFyZ3VtZW50
KGRvY3VtZW50KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwor
fQorCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnKEV4ZWNTdGF0ZSogc3RhdGUpCiB7CiAgICAgSlNWYWx1
ZSB0aGlzVmFsdWUgPSBzdGF0ZS0+dGhpc1ZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKaW5kZXggNjQ2MGM0
NjIzMjg3ZGI5YjJjZWM5Y2I4Y2RiYmIxNDNkYWRlNmY4ZC4uYmNhZDBjMTFmZTRkODI4OWYxZmVh
OThmZTQwZWMzOGM5MDQ3YmM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaApAQCAtMTY4LDYgKzE2OCw3IEBAIFdF
QkNPUkVfRVhQT1JUIEBpbnRlcmZhY2UgRE9NVGVzdE9iaiA6IERPTU9iamVjdAogLSAoRE9NVGVz
dE9iaiAqKXdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRp
b247CiAtIChET01UZXN0T2JqICopd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRT
dGF0ZVdpdGhTcGFjZXM7CiAtICh2b2lkKXdpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2s7
CistICh2b2lkKXdpdGhEb2N1bWVudEFyZ3VtZW50OwogLSAodm9pZCltZXRob2RXaXRoT3B0aW9u
YWxBcmc6KGludClvcHQ7CiAtICh2b2lkKW1ldGhvZFdpdGhPcHRpb25hbEFyZ0FuZERlZmF1bHRW
YWx1ZTooaW50KW9wdDsKIC0gKHZvaWQpbWV0aG9kV2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9u
YWxBcmc6KGludClub25PcHQgb3B0OihpbnQpb3B0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbSBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KaW5kZXggODE5NmJk
YjFjZTg0MTA4ZjE5OWU3MzVlYjM5MjgzOWUyM2U5ZjJkOS4uMmZiYzI5NmY1MjE4MmY1YzgxZmEz
OTYwMDUyYzJmZGUwMTM3ZTg2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCkBAIC0xMTcyLDYgKzExNzIsMTIg
QEAKICAgICBJTVBMLT53aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKCk7CiB9CiAKKy0g
KHZvaWQpd2l0aERvY3VtZW50QXJndW1lbnQKK3sKKyAgICBXZWJDb3JlOjpKU01haW5UaHJlYWRO
dWxsU3RhdGUgc3RhdGU7CisgICAgSU1QTC0+d2l0aERvY3VtZW50QXJndW1lbnQoKTsKK30KKwog
LSAodm9pZCltZXRob2RXaXRoT3B0aW9uYWxBcmc6KGludClvcHQKIHsKICAgICBXZWJDb3JlOjpK
U01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwKaW5kZXggYTYxMjYxZDVjOTkwM2E3MjlmNjg4YzY2
YTg5OTI2YmU4YjZiNzJiMy4uOTc4ZDVmYmU0NDFhMWE4MjRhZjY2MzE5YWY0OTM4Mzg0MDYyMTIz
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RP
YmouaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2Jq
LmlkbApAQCAtMTU5LDYgKzE1OSw3IEBAIGVudW0gX29wdGlvbmFsIHsgIiIsICJPcHRpb25hbFZh
bHVlMSIsICJPcHRpb25hbFZhbHVlMiIsICJPcHRpb25hbFZhbHVlMyIgfTsKICAgICBbQ2FsbFdp
dGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCZTY3JpcHRTdGF0ZSwgUmFpc2VzRXhjZXB0aW9uXSBU
ZXN0T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRp
b24oKTsKICAgICBbQ2FsbFdpdGg9ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0ICAmICBTY3JpcHRT
dGF0ZSAgXSBUZXN0T2JqIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzKCk7CiAgICAgW0NhbGxXaXRoPVNjcmlwdEFyZ3VtZW50cyZDYWxsU3RhY2tdIHZv
aWQgd2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjaygpOworICAgIFtDYWxsV2l0aD1Eb2N1
bWVudF0gdm9pZCB3aXRoRG9jdW1lbnRBcmd1bWVudCgpOwogCiAgICAgW0NhbGxXaXRoPVNjcmlw
dFN0YXRlXSBhdHRyaWJ1dGUgbG9uZyB3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGU7CiAgICAgW0Nh
bGxXaXRoPVNjcmlwdFN0YXRlLCBTZXR0ZXJDYWxsV2l0aD1BY3RpdmVXaW5kb3cmRmlyc3RXaW5k
b3ddIGF0dHJpYnV0ZSBsb25nIHdpdGhDYWxsV2l0aEFuZFNldHRlckNhbGxXaXRoQXR0cmlidXRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IGYzNzMzYTE3NjEzNmVhMjc2NGJhYzg2
ODJhOWViMDgwMWYzZjdlYzAuLjFjNjliMTVkYTJlNjAwZDIyMjMyMzVkMWY2NjlmNjAxNDcxYmZm
MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTk2Miw3ICs5NjIsMTIgQEAgRWxl
bWVudCogRE9NV2luZG93OjpmcmFtZUVsZW1lbnQoKSBjb25zdAogICAgIHJldHVybiBtX2ZyYW1l
LT5vd25lckVsZW1lbnQoKTsKIH0KIAotdm9pZCBET01XaW5kb3c6OmZvY3VzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCit2b2lkIERPTVdpbmRvdzo6Zm9jdXMoRG9jdW1lbnQmIGRv
Y3VtZW50KQoreworICAgIGZvY3VzKG9wZW5lcigpICYmIG9wZW5lcigpICE9IHRoaXMgJiYgZG9j
dW1lbnQuZG9tV2luZG93KCkgPT0gb3BlbmVyKCkpOworfQorCit2b2lkIERPTVdpbmRvdzo6Zm9j
dXMoYm9vbCBhbGxvd0ZvY3VzKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAgICAgcmV0dXJu
OwpAQCAtOTcxLDEzICs5NzYsNyBAQCB2b2lkIERPTVdpbmRvdzo6Zm9jdXMoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGJvb2wgYWxsb3dGb2N1cyA9IFdpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRvcjo6d2luZG93
Rm9jdXNBbGxvd2VkKCkgfHwgIW1fZnJhbWUtPnNldHRpbmdzKCkud2luZG93Rm9jdXNSZXN0cmlj
dGVkKCk7Ci0gICAgaWYgKGNvbnRleHQpIHsKLSAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKLSAgICAgICAgRG9jdW1lbnQmIGFjdGl2ZURvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+
KCpjb250ZXh0KTsKLSAgICAgICAgaWYgKG9wZW5lcigpICYmIG9wZW5lcigpICE9IHRoaXMgJiYg
YWN0aXZlRG9jdW1lbnQuZG9tV2luZG93KCkgPT0gb3BlbmVyKCkpCi0gICAgICAgICAgICBhbGxv
d0ZvY3VzID0gdHJ1ZTsKLSAgICB9CisgICAgYWxsb3dGb2N1cyA9IGFsbG93Rm9jdXMgfHwgV2lu
ZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yOjp3aW5kb3dGb2N1c0FsbG93ZWQoKSB8fCAhbV9mcmFt
ZS0+c2V0dGluZ3MoKS53aW5kb3dGb2N1c1Jlc3RyaWN0ZWQoKTsKIAogICAgIC8vIElmIHdlJ3Jl
IGEgdG9wIGxldmVsIHdpbmRvdywgYnJpbmcgdGhlIHdpbmRvdyB0byB0aGUgZnJvbnQuCiAgICAg
aWYgKG1fZnJhbWUtPmlzTWFpbkZyYW1lKCkgJiYgYWxsb3dGb2N1cykKQEAgLTEwMTIsNyArMTAx
MSwxNCBAQCB2b2lkIERPTVdpbmRvdzo6Ymx1cigpCiAgICAgcGFnZS0+Y2hyb21lKCkudW5mb2N1
cygpOwogfQogCi12b2lkIERPTVdpbmRvdzo6Y2xvc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKK3ZvaWQgRE9NV2luZG93OjpjbG9zZShEb2N1bWVudCYgZG9jdW1lbnQpCit7Cisg
ICAgaWYgKCFkb2N1bWVudC5jYW5OYXZpZ2F0ZShtX2ZyYW1lKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNsb3NlKCk7Cit9CisKK3ZvaWQgRE9NV2luZG93OjpjbG9zZSgpCiB7CiAgICAgaWYgKCFt
X2ZyYW1lKQogICAgICAgICByZXR1cm47CkBAIC0xMDI0LDEyICsxMDMwLDYgQEAgdm9pZCBET01X
aW5kb3c6OmNsb3NlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgaWYgKCFt
X2ZyYW1lLT5pc01haW5GcmFtZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoY29udGV4
dCkgewotICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgICAgICBpZiAoIWRvd25j
YXN0PERvY3VtZW50PigqY29udGV4dCkuY2FuTmF2aWdhdGUobV9mcmFtZSkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgYm9vbCBhbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyA9
IG1fZnJhbWUtPnNldHRpbmdzKCkuYWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MoKTsKIAogICAg
IGlmICghKHBhZ2UtPm9wZW5lZEJ5RE9NKCkgfHwgcGFnZS0+YmFja0ZvcndhcmQoKS5jb3VudCgp
IDw9IDEgfHwgYWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5k
b3cuaAppbmRleCBiMzRmMzU5YjYxYWM2ZmMzZTg2N2FmNmU2ZTg2NDdkN2MyNTIwMmNmLi5mMzc0
NjYyOGVhMzkxNzEwMDdlMDhkNTU0YzA0ZjNmNWFiY2YzOTg1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2lu
ZG93LmgKQEAgLTE2MCwxMSArMTYwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBFbGVtZW50KiBmcmFtZUVsZW1lbnQoKSBjb25zdDsKIAotICAgICAgICB2b2lkIGZvY3VzKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqID0gbnVsbHB0cik7Ci0gICAgICAgIHZvaWQgZm9jdXMoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeyBmb2N1cygmY29udGV4dCk7IH0KKyAgICAg
ICAgdm9pZCBmb2N1cyhib29sIGFsbG93Rm9jdXMgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgZm9j
dXMoRG9jdW1lbnQmKTsKICAgICAgICAgdm9pZCBibHVyKCk7Ci0gICAgICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xvc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogPSBudWxscHRyKTsKLSAgICAg
ICAgdm9pZCBjbG9zZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7IGNsb3NlKCZj
b250ZXh0KTsgfQorICAgICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlKCk7CisgICAgICAg
IHZvaWQgY2xvc2UoRG9jdW1lbnQmKTsKICAgICAgICAgdm9pZCBwcmludCgpOwogICAgICAgICB2
b2lkIHN0b3AoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cu
aWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCmluZGV4IDg0ODYwZmQ4ZWE5
MDczZDU5YzI4Y2ZhZDM0ZDE4YzA1M2MwMjI3NzIuLmNlYTY1OTc0YzdkNDEwYzE1NWZmMWRlNDJk
YzM4Y2E1MzIyZjUxM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwKQEAgLTU3LDkgKzU3
LDkgQEAKIAogICAgIFtDaGVja1NlY3VyaXR5Rm9yTm9kZV0gcmVhZG9ubHkgYXR0cmlidXRlIEVs
ZW1lbnQgZnJhbWVFbGVtZW50OwogCi0gICAgW0RvTm90Q2hlY2tTZWN1cml0eSwgQ2FsbFdpdGg9
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRm9yd2FyZERlY2xhcmVJbkhlYWRlcl0gdm9pZCBmb2N1
cygpOworICAgIFtEb05vdENoZWNrU2VjdXJpdHksIENhbGxXaXRoPURvY3VtZW50LCBGb3J3YXJk
RGVjbGFyZUluSGVhZGVyXSB2b2lkIGZvY3VzKCk7CiAgICAgW0RvTm90Q2hlY2tTZWN1cml0eSwg
Rm9yd2FyZERlY2xhcmVJbkhlYWRlcl0gdm9pZCBibHVyKCk7Ci0gICAgW0RvTm90Q2hlY2tTZWN1
cml0eSwgQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRm9yd2FyZERlY2xhcmVJbkhl
YWRlcl0gdm9pZCBjbG9zZSgpOworICAgIFtEb05vdENoZWNrU2VjdXJpdHksIENhbGxXaXRoPURv
Y3VtZW50LCBGb3J3YXJkRGVjbGFyZUluSGVhZGVyXSB2b2lkIGNsb3NlKCk7CiAKICAgICB2b2lk
IHByaW50KCk7CiAgICAgdm9pZCBzdG9wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0hpc3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmNwcAppbmRleCBi
OTU3MWMxZDQwYjMwYzI4YmY1NzhiMDBkMTljYTc1NDgyZTI0NjA4Li44NzRhZGNiMWMzOTVmNzM5
MDZlOTE5YjU3NGE3Y2U3NzRjNzliODVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0hpc3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAKQEAgLTkx
LDkgKzkxLDkgQEAgdm9pZCBIaXN0b3J5OjpiYWNrKCkKICAgICBnbygtMSk7CiB9CiAKLXZvaWQg
SGlzdG9yeTo6YmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQordm9pZCBIaXN0
b3J5OjpiYWNrKERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBnbyhjb250ZXh0LCAtMSk7Cisg
ICAgZ28oZG9jdW1lbnQsIC0xKTsKIH0KIAogdm9pZCBIaXN0b3J5Ojpmb3J3YXJkKCkKQEAgLTEw
MSw5ICsxMDEsOSBAQCB2b2lkIEhpc3Rvcnk6OmZvcndhcmQoKQogICAgIGdvKDEpOwogfQogCi12
b2lkIEhpc3Rvcnk6OmZvcndhcmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3Zv
aWQgSGlzdG9yeTo6Zm9yd2FyZChEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgZ28oY29udGV4
dCwgMSk7CisgICAgZ28oZG9jdW1lbnQsIDEpOwogfQogCiB2b2lkIEhpc3Rvcnk6OmdvKGludCBk
aXN0YW5jZSkKQEAgLTExNCwxNyArMTE0LDE0IEBAIHZvaWQgSGlzdG9yeTo6Z28oaW50IGRpc3Rh
bmNlKQogICAgIG1fZnJhbWUtPm5hdmlnYXRpb25TY2hlZHVsZXIoKS5zY2hlZHVsZUhpc3RvcnlO
YXZpZ2F0aW9uKGRpc3RhbmNlKTsKIH0KIAotdm9pZCBIaXN0b3J5OjpnbyhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBpbnQgZGlzdGFuY2UpCit2b2lkIEhpc3Rvcnk6OmdvKERvY3Vt
ZW50JiBkb2N1bWVudCwgaW50IGRpc3RhbmNlKQogewogICAgIGlmICghbV9mcmFtZSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBEb2N1bWVudCog
YWN0aXZlRG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oY29udGV4dCk7Ci0gICAgaWYgKCFh
Y3RpdmVEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFhY3RpdmVEb2N1bWVu
dC0+Y2FuTmF2aWdhdGUobV9mcmFtZSkpCisgICAgaWYgKCFkb2N1bWVudC5jYW5OYXZpZ2F0ZSht
X2ZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9mcmFtZS0+bmF2aWdhdGlvblNjaGVk
dWxlcigpLnNjaGVkdWxlSGlzdG9yeU5hdmlnYXRpb24oZGlzdGFuY2UpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rv
cnkuaAppbmRleCA1YWU1MGJlNjNhMjlhMzg2Mjk5MzVjYTZhZTU1ODUyYjNmOGJkNTQ4Li43MTM0
MzJkYmE1MjY0YmY0MWM0OTNjMmMzNWM2ZDVhNDFhY2IwNjZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0hpc3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3Rvcnku
aApAQCAtMzYsOCArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERvY3Vt
ZW50OwogY2xhc3MgRnJhbWU7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0Owogc3RydWN0
IEV4Y2VwdGlvbkNvZGVXaXRoTWVzc2FnZTsKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAK
QEAgLTQ5LDE1ICs0OSwxMSBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IHN0YXRlKCk7CiAgICAgdm9pZCBiYWNrKCk7CiAgICAgdm9pZCBmb3J3YXJkKCk7
Ci0gICAgdm9pZCBnbyhpbnQgZGlzdGFuY2UpOworICAgIHZvaWQgZ28oaW50KTsKIAotICAgIHZv
aWQgYmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7IGJhY2soJmNvbnRleHQp
OyB9Ci0gICAgdm9pZCBmb3J3YXJkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsg
Zm9yd2FyZCgmY29udGV4dCk7IH0KLSAgICB2b2lkIGdvKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQm
IGNvbnRleHQsIGludCBkaXN0YW5jZSkgeyBnbygmY29udGV4dCwgZGlzdGFuY2UpOyB9Ci0KLSAg
ICB2b2lkIGJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgIHZvaWQgZm9yd2FyZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Kik7Ci0gICAgdm9pZCBnbyhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgaW50IGRpc3RhbmNlKTsKKyAgICB2b2lkIGJhY2soRG9jdW1lbnQmKTsKKyAgICB2b2lk
IGZvcndhcmQoRG9jdW1lbnQmKTsKKyAgICB2b2lkIGdvKERvY3VtZW50JiwgaW50KTsKIAogICAg
IGJvb2wgc3RhdGVDaGFuZ2VkKCkgY29uc3Q7CiAgICAgYm9vbCBpc1NhbWVBc0N1cnJlbnRTdGF0
ZShTZXJpYWxpemVkU2NyaXB0VmFsdWUqKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvSGlzdG9yeS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuaWRsCmlu
ZGV4IDBiN2IyZWViNjJmODRjMzdmOGU0MDM3MjMxZmNlMzBkMzM1NTFhZGYuLmY3NzU4MjI2MjU3
YWFkM2FiZDZiNzdlNDQ2NzY1ZDNlOGVlN2M1YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvSGlzdG9yeS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbApA
QCAtMjksOSArMjksOSBAQAogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxl
bmd0aDsKICAgICBbQ2FjaGVkQXR0cmlidXRlLCBDdXN0b21dIHJlYWRvbmx5IGF0dHJpYnV0ZSBT
ZXJpYWxpemVkU2NyaXB0VmFsdWUgc3RhdGU7CiAKLSAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgRm9yd2FyZERlY2xhcmVJbkhlYWRlcl0gdm9pZCBiYWNrKCk7Ci0gICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEZvcndhcmREZWNsYXJlSW5IZWFkZXJdIHZv
aWQgZm9yd2FyZCgpOwotICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBGb3J3
YXJkRGVjbGFyZUluSGVhZGVyXSB2b2lkIGdvKFtEZWZhdWx0PVVuZGVmaW5lZF0gb3B0aW9uYWwg
bG9uZyBkaXN0YW5jZSk7CisgICAgW0NhbGxXaXRoPURvY3VtZW50LCBGb3J3YXJkRGVjbGFyZUlu
SGVhZGVyXSB2b2lkIGJhY2soKTsKKyAgICBbQ2FsbFdpdGg9RG9jdW1lbnQsIEZvcndhcmREZWNs
YXJlSW5IZWFkZXJdIHZvaWQgZm9yd2FyZCgpOworICAgIFtDYWxsV2l0aD1Eb2N1bWVudCwgRm9y
d2FyZERlY2xhcmVJbkhlYWRlcl0gdm9pZCBnbyhbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFs
IGxvbmcgZGlzdGFuY2UpOwogCiAgICAgW0N1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHB1
c2hTdGF0ZShhbnkgZGF0YSwgRE9NU3RyaW5nIHRpdGxlLCBvcHRpb25hbCBET01TdHJpbmcgdXJs
KTsKICAgICBbQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgcmVwbGFjZVN0YXRlKGFueSBk
YXRhLCBET01TdHJpbmcgdGl0bGUsIG9wdGlvbmFsIERPTVN0cmluZyB1cmwpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDdlYTE1MjRjZTgwYWQ5OTdlMzk4YzkyMTAzODky
NjVhZThjODFkMGEuLjE5ZmQ4ZDBjMTBiOTQyNDdiNTZmMmIwMTBhYjI0MmMzNjIxNzY4NmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lk
IEluc3BlY3RvclN0dWJGcm9udGVuZDo6Y2xvc2VXaW5kb3coKQogICAgIG1fZnJvbnRlbmRDb250
cm9sbGVyLnNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KG51bGxwdHIpOwogICAgIGluc3BlY3Rl
ZFBhZ2UoKS0+aW5zcGVjdG9yQ29udHJvbGxlcigpLmRpc2Nvbm5lY3RGcm9udGVuZCh0aGlzKTsK
IAotICAgIG1fZnJvbnRlbmRXaW5kb3ctPmNsb3NlKG1fZnJvbnRlbmRXaW5kb3ctPnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgbV9mcm9udGVuZFdpbmRvdy0+Y2xvc2UoKTsKICAgICBt
X2Zyb250ZW5kV2luZG93ID0gbnVsbHB0cjsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273934</attachid>
            <date>2016-03-14 00:33:16 -0700</date>
            <delta_ts>2016-03-14 02:09:54 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-155358-20160314083303.patch</filename>
            <type>text/plain</type>
            <size>41637</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4MDk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWI0NTBhYWM3MDk4ZDg3
YzZkOTExN2EyYzc1NzUwNDA5ZWM2ZTU1Yi4uMzEzYWY1OGZiMDFmMTM1MmUzODUyZDZhYzliMzlk
MTRlMmU3MzUwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE2LTAzLTE0ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CisKKyAgICAgICAgSW50cm9k
dWNlIENhbGxXaXRoPURvY3VtZW50IGluIGJpbmRpbmcgZ2VuZXJhdG9yCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUzNTgKKworICAgICAgICBSZXZp
ZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3Rz
IGFuZCBiaW5kaW5nIHRlc3QuCisKKyAgICAgICAgKiBNb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uLmNwcDoKKwkJKFdlYkNvcmU6Ok5vdGlmaWNhdGlvbjo6cGVybWlzc2lvbik6IFRh
a2luZyBhIERvY3VtZW50JiBpbnN0ZWFkIG9mIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLgorICAg
ICAgICAoV2ViQ29yZTo6Tm90aWZpY2F0aW9uOjpyZXF1ZXN0UGVybWlzc2lvbik6IERpdHRvLgor
ICAgICAgICAqIE1vZHVsZXMvbm90aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaDoKKyAgICAgICAg
KiBNb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0aW9uLmlkbDogVXNpbmcgQ2FsbFdpdGg9
RG9jdW1lbnQuCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06
IEFkZGluZyBzdXBwb3J0IGZvciBDYWxsV2l0aD1Eb2N1bWVudCBhbmQgY2hhbmdlZCBuYW1lIGZy
b20gc2NyaXB0Q29udGV4dCB0byBjb250ZXh0LgorICAgICAgICAoR2VuZXJhdGVDYWxsV2l0aCk6
CisgICAgICAgIChHZW5lcmF0ZUNvbnN0cnVjdG9yRGVmaW5pdGlvbik6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dDogQWRkaW5nIHN1cHBvcnQgZm9yIENhbGxX
aXRoPURvY3VtZW50LgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dl
YktpdERPTVRlc3RPYmouY3BwOgorICAgICAgICAod2Via2l0X2RvbV90ZXN0X29ial93aXRoX2Rv
Y3VtZW50X2FyZ3VtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVj
dC9XZWJLaXRET01UZXN0T2JqLmg6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RJbnRlcmZhY2VQ
cm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QyKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJp
YnV0ZVJhaXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ompz
VGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVS
YWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRy
aWJ1dGVSYWlzZXMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlUmFpc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OnNldEpTVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25X
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRB
bmRTY3JpcHRTdGF0ZU9iakV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpqc1Rlc3RPYmpQ
cm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9u
V2l0aERvY3VtZW50QXJndW1lbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9P
YmpDL0RPTVRlc3RPYmouaDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9E
T01UZXN0T2JqLm1tOgorICAgICAgICAoLVtET01UZXN0T2JqIHdpdGhEb2N1bWVudEFyZ3VtZW50
XSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsOiBBZGRpbmcg
YmluZGluZyB0ZXN0LgorICAgICAgICAqIHBhZ2UvRE9NV2luZG93LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRPTVdpbmRvdzo6Zm9jdXMpOiBUYWtpbmcgYSBEb2N1bWVudCYgaW5zdGVhZCBvZiBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0Ji4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6Y2xv
c2UpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL0RPTVdpbmRvdy5oOgorICAgICAgICAqIHBhZ2Uv
RE9NV2luZG93LmlkbDoKKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SGlzdG9yeTo6YmFjayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeTo6
Zm9yd2FyZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeTo6Z28pOiBEaXR0by4K
KyAgICAgICAgKiBwYWdlL0hpc3RvcnkuaDoKKyAgICAgICAgKiBwYWdlL0hpc3RvcnkuaWRsOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0dWJGcm9udGVuZDo6Y2xvc2VXaW5kb3cpOiBDYWxsaW5nIERPTVdpbmRvdzo6Y2xvc2Uo
KSBkaXJlY3RseS4KKwogMjAxNi0wMy0xMyAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBFTkFCTEUoRVM2X1RFTVBMQVRFX0xJVEVSQUxfU1lO
VEFYKSBndWFyZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZpY2F0
aW9ucy9Ob3RpZmljYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRp
b25zL05vdGlmaWNhdGlvbi5jcHAKaW5kZXggNjU3OGRhNDQ5MDExMjdhNTQzZTYxZTY3YWQxMjRm
ZjQxN2Y4NDU0NC4uYzI5YWUxZjRjZTRhNjIwNzZiYWY5NDk1NGRlNjAyY2JiODBjOTFmZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNhdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNh
dGlvbi5jcHAKQEAgLTIyMSwxMCArMjIxLDkgQEAgdm9pZCBOb3RpZmljYXRpb246OnRhc2tUaW1l
ckZpcmVkKCkKIAogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi1jb25zdCBTdHJpbmcgTm90
aWZpY2F0aW9uOjpwZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCitj
b25zdCBTdHJpbmcgTm90aWZpY2F0aW9uOjpwZXJtaXNzaW9uKERvY3VtZW50JiBkb2N1bWVudCkK
IHsKLSAgICBBU1NFUlQoZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpLnBhZ2UoKSk7Ci0gICAg
cmV0dXJuIHBlcm1pc3Npb25TdHJpbmcoTm90aWZpY2F0aW9uQ29udHJvbGxlcjo6ZnJvbShkb3du
Y2FzdDxEb2N1bWVudD4oY29udGV4dCkucGFnZSgpKS0+Y2xpZW50KCktPmNoZWNrUGVybWlzc2lv
bigmY29udGV4dCkpOworICAgIHJldHVybiBwZXJtaXNzaW9uU3RyaW5nKE5vdGlmaWNhdGlvbkNv
bnRyb2xsZXI6OmZyb20oZG9jdW1lbnQucGFnZSgpKS0+Y2xpZW50KCktPmNoZWNrUGVybWlzc2lv
bigmZG9jdW1lbnQpKTsKIH0KIAogY29uc3QgU3RyaW5nIE5vdGlmaWNhdGlvbjo6cGVybWlzc2lv
blN0cmluZyhOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24gcGVybWlzc2lvbikKQEAgLTI0
MiwxMCArMjQxLDkgQEAgY29uc3QgU3RyaW5nIE5vdGlmaWNhdGlvbjo6cGVybWlzc2lvblN0cmlu
ZyhOb3RpZmljYXRpb25DbGllbnQ6OlBlcm1pc3Npb24gcGVybWkKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CiAKLXZvaWQgTm90aWZpY2F0aW9uOjpyZXF1ZXN0UGVybWlzc2lvbihTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiBjb250ZXh0LCBQYXNzUmVmUHRyPE5vdGlmaWNhdGlvblBlcm1pc3Npb25D
YWxsYmFjaz4gY2FsbGJhY2spCit2b2lkIE5vdGlmaWNhdGlvbjo6cmVxdWVzdFBlcm1pc3Npb24o
RG9jdW1lbnQmIGRvY3VtZW50LCBQYXNzUmVmUHRyPE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxs
YmFjaz4gY2FsbGJhY2spCiB7Ci0gICAgQVNTRVJUKGRvd25jYXN0PERvY3VtZW50Pihjb250ZXh0
KS5wYWdlKCkpOwotICAgIE5vdGlmaWNhdGlvbkNvbnRyb2xsZXI6OmZyb20oZG93bmNhc3Q8RG9j
dW1lbnQ+KGNvbnRleHQpLnBhZ2UoKSktPmNsaWVudCgpLT5yZXF1ZXN0UGVybWlzc2lvbigmY29u
dGV4dCwgY2FsbGJhY2spOworICAgIE5vdGlmaWNhdGlvbkNvbnRyb2xsZXI6OmZyb20oZG9jdW1l
bnQucGFnZSgpKS0+Y2xpZW50KCktPnJlcXVlc3RQZXJtaXNzaW9uKCZkb2N1bWVudCwgY2FsbGJh
Y2spOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90
aWZpY2F0aW9ucy9Ob3RpZmljYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbm90aWZp
Y2F0aW9ucy9Ob3RpZmljYXRpb24uaAppbmRleCAwMWYyNzA1NDY5MmFlOTVkOTg2MTk1Y2IwZWMy
YzIwM2FlYjM4NzQ1Li4yNGUwYzVjYTI2ODY4NDE4ZDA0MzkwNTEwMzhhZjczNzhlZTk0ZTgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZpY2F0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3RpZmljYXRpb25zL05vdGlmaWNh
dGlvbi5oCkBAIC01MiwxMSArNTIsMTEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RGljdGlvbmFyeTsKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgTm90aWZpY2F0aW9uQ2VudGVyOwog
Y2xhc3MgTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrOwogY2xhc3MgUmVzb3VyY2VFcnJv
cjsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7Ci1jbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0
OwogY2xhc3MgVGhyZWFkYWJsZUxvYWRlcjsKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
QEAgLTEyMiw5ICsxMjIsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaW5h
bGl6ZSgpOwogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCi0gICAgc3RhdGljIGNvbnN0IFN0
cmluZyBwZXJtaXNzaW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsKKyAgICBzdGF0aWMgY29u
c3QgU3RyaW5nIHBlcm1pc3Npb24oRG9jdW1lbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgY29uc3QgU3RyaW5nIHBlcm1pc3Npb25TdHJpbmcoTm90aWZpY2F0aW9uQ2xpZW50OjpQZXJt
aXNzaW9uKTsKLSAgICBzdGF0aWMgdm9pZCByZXF1ZXN0UGVybWlzc2lvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgUGFzc1JlZlB0cjxOb3RpZmljYXRpb25QZXJtaXNzaW9uQ2FsbGJhY2s+ID0g
bnVsbHB0cik7CisgICAgc3RhdGljIHZvaWQgcmVxdWVzdFBlcm1pc3Npb24oRG9jdW1lbnQmLCBQ
YXNzUmVmUHRyPE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjaz4gPSBudWxscHRyKTsKICNl
bmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9ub3Rp
ZmljYXRpb25zL05vdGlmaWNhdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlm
aWNhdGlvbnMvTm90aWZpY2F0aW9uLmlkbAppbmRleCBhMDYyNzg1ZWM3ZDgyN2I3M2YzMTZjM2Uw
OTE4MTI2MjM2NjE5NWYyLi45ODQ1NGEzM2UwNTQ1MDRlMjZmYjk0ZDZlOWJjM2E3YjMxZThlNDE5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90aWZp
Y2F0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25vdGlmaWNhdGlvbnMvTm90
aWZpY2F0aW9uLmlkbApAQCAtNDEsOCArNDEsOCBAQAogICAgIFtDb25kaXRpb25hbD1MRUdBQ1lf
Tk9USUZJQ0FUSU9OU10gdm9pZCBjYW5jZWwoKTsKICAgICBbQ29uZGl0aW9uYWw9Tk9USUZJQ0FU
SU9OU10gdm9pZCBjbG9zZSgpOwogCi0gICAgW0NvbmRpdGlvbmFsPU5PVElGSUNBVElPTlMsIENh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIHN0YXRpYyByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHBlcm1pc3Npb247Ci0gICAgW0NvbmRpdGlvbmFsPU5PVElGSUNBVElPTlMsIENh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIHN0YXRpYyB2b2lkIHJlcXVlc3RQZXJtaXNz
aW9uKG9wdGlvbmFsIE5vdGlmaWNhdGlvblBlcm1pc3Npb25DYWxsYmFjayBjYWxsYmFjayk7Cisg
ICAgW0NvbmRpdGlvbmFsPU5PVElGSUNBVElPTlMsIENhbGxXaXRoPURvY3VtZW50XSBzdGF0aWMg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBwZXJtaXNzaW9uOworICAgIFtDb25kaXRpb25h
bD1OT1RJRklDQVRJT05TLCBDYWxsV2l0aD1Eb2N1bWVudF0gc3RhdGljIHZvaWQgcmVxdWVzdFBl
cm1pc3Npb24ob3B0aW9uYWwgTm90aWZpY2F0aW9uUGVybWlzc2lvbkNhbGxiYWNrIGNhbGxiYWNr
KTsKIAogICAgIGF0dHJpYnV0ZSBFdmVudEhhbmRsZXIgb25jbGljazsKICAgICBhdHRyaWJ1dGUg
RXZlbnRIYW5kbGVyIG9uY2xvc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbSBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCmluZGV4IDYwN2Q4MGRmNGZmZWFhN2I3MDQ3YTE3NjJh
Y2RhMDYwZDI5ZWViNTcuLjNhMjg4Y2UwYmRlMjdiMjU3OGEzZWM0ZDk5ODkwMzgzOGNjZTk2NDEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtCkBAIC0zMjg5LDEwICszMjg5LDE5IEBAIHN1YiBHZW5lcmF0ZUNhbGxXaXRoCiAgICAg
bXkgQGNhbGxXaXRoQXJnczsKICAgICBwdXNoKEBjYWxsV2l0aEFyZ3MsICIqc3RhdGUiKSBpZiAk
Y29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250YWlucygkY2FsbFdpdGgsICJTY3Jp
cHRTdGF0ZSIpOwogICAgIGlmICgkY29kZUdlbmVyYXRvci0+RXh0ZW5kZWRBdHRyaWJ1dGVDb250
YWlucygkY2FsbFdpdGgsICJTY3JpcHRFeGVjdXRpb25Db250ZXh0IikpIHsKLSAgICAgICAgcHVz
aChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01H
bG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpO1xuIik7Ci0gICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAo
IXNjcmlwdENvbnRleHQpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1
dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEds
b2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7CisgICAgICAgIHB1
c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWNvbnRleHQpXG4iKTsKICAgICAgICAgcHVzaChA
JG91dHB1dEFycmF5LCAiICAgICAgICByZXR1cm4iIC4gKCRyZXR1cm5WYWx1ZSA/ICIgIiAuICRy
ZXR1cm5WYWx1ZSA6ICIiKSAuICI7XG4iKTsKLSAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAi
KnNjcmlwdENvbnRleHQiKTsKKyAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiKmNvbnRleHQi
KTsKKyAgICB9CisgICAgaWYgKCRjb2RlR2VuZXJhdG9yLT5FeHRlbmRlZEF0dHJpYnV0ZUNvbnRh
aW5zKCRjYWxsV2l0aCwgIkRvY3VtZW50IikpIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siRG9j
dW1lbnQuaCJ9ID0gMTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpO1xuIik7CisgICAgICAgIHB1c2goQCRv
dXRwdXRBcnJheSwgIiAgICBpZiAoIWNvbnRleHQpXG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgICAgICByZXR1cm4iIC4gKCRyZXR1cm5WYWx1ZSA/ICIgIiAuICRyZXR1cm5W
YWx1ZSA6ICIiKSAuICI7XG4iKTsKKyAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIEFT
U0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpO1xuIik7CisgICAgICAgIHB1c2goQCRvdXRwdXRB
cnJheSwgIiAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29udGV4dCk7
XG4iKTsKKyAgICAgICAgcHVzaChAY2FsbFdpdGhBcmdzLCAiZG9jdW1lbnQiKTsKICAgICB9CiAg
ICAgaWYgKCRmdW5jdGlvbiBhbmQgJGNvZGVHZW5lcmF0b3ItPkV4dGVuZGVkQXR0cmlidXRlQ29u
dGFpbnMoJGNhbGxXaXRoLCAiU2NyaXB0QXJndW1lbnRzIikpIHsKICAgICAgICAgcHVzaChAJG91
dHB1dEFycmF5LCAiICAgIFJlZlB0cjxJbnNwZWN0b3I6OlNjcmlwdEFyZ3VtZW50cz4gc2NyaXB0
QXJndW1lbnRzKEluc3BlY3Rvcjo6Y3JlYXRlU2NyaXB0QXJndW1lbnRzKHN0YXRlLCAiIC4gQHsk
ZnVuY3Rpb24tPnBhcmFtZXRlcnN9IC4gIikpO1xuIik7CkBAIC00OTI1LDYgKzQ5MzQsNyBAQCBF
TkQKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCA9IGNhc3RlZFRoaXMtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KTtcbiIpOwogICAgICAgICAgICAgICAgIHB1c2goQCRvdXRwdXRBcnJheSwgIiAgICBpZiAoIWNv
bnRleHQpXG4iKTsKICAgICAgICAgICAgICAgICBwdXNoKEAkb3V0cHV0QXJyYXksICIgICAgICAg
IHJldHVybiB0aHJvd0NvbnN0cnVjdG9yRG9jdW1lbnRVbmF2YWlsYWJsZUVycm9yKCpzdGF0ZSwg
XCIke2ludGVyZmFjZU5hbWV9XCIpO1xuIik7CisgICAgICAgICAgICAgICAgcHVzaChAJG91dHB1
dEFycmF5LCAiICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50KCkpO1xuIik7CiAgICAgICAg
ICAgICAgICAgcHVzaChAJG91dHB1dEFycmF5LCAiICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KCpjb250ZXh0KTtcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKCRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvcikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKaW5kZXggYjkyMmJkN2M5NzM1NDMz
YTBlZTZmNWU3ZWJlNjNkOGUyNWJjYWY2MC4uODE2YjhkMWYxNmY1MTViZDZjNmExYjM0NWFjY2Y2
YThiYmM0MTM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9J
RExBdHRyaWJ1dGVzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lE
TEF0dHJpYnV0ZXMudHh0CkBAIC0yNCw3ICsyNCw3IEBAIENQUFB1cmVJbnRlcmZhY2UKIENhY2hl
ZEF0dHJpYnV0ZQogQ2FsbGJhY2tOZWVkc09wZXJhdG9yRXF1YWwKIENhbGxiYWNrPUZ1bmN0aW9u
T25seQotQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dHxTY3JpcHRTdGF0ZXxTY3JpcHRB
cmd1bWVudHN8Q2FsbFN0YWNrfEFjdGl2ZVdpbmRvd3xGaXJzdFdpbmRvdworQ2FsbFdpdGg9RG9j
dW1lbnR8U2NyaXB0RXhlY3V0aW9uQ29udGV4dHxTY3JpcHRTdGF0ZXxTY3JpcHRBcmd1bWVudHN8
Q2FsbFN0YWNrfEFjdGl2ZVdpbmRvd3xGaXJzdFdpbmRvdwogQ2hlY2tTZWN1cml0eQogQ2hlY2tT
ZWN1cml0eUZvck5vZGUKIENsYW1wCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01UZXN0T2JqLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCmlu
ZGV4IDJlMTM1MDkyZmZlZWExMjhhODJiYjMwMjk2YjVjMWE0NjAyYjJkNzUuLmZhN2Y1OTE2Nzlh
NjQ0MDc4MDhiY2UxYTJhNDlmOTkzMTAxNzA1MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRlc3RPYmouY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9HT2JqZWN0L1dlYktpdERPTVRl
c3RPYmouY3BwCkBAIC0xNDY1LDYgKzE0NjUsMTQgQEAgV2ViS2l0RE9NVGVzdE9iaiogd2Via2l0
X2RvbV90ZXN0X29ial93aXRoX3NjcmlwdF9leGVjdXRpb25fY29udGV4dF9hbmRfc2NyaXB0X3MK
ICAgICByZXR1cm4gV2ViS2l0OjpraXQoZ29iamVjdFJlc3VsdC5nZXQoKSk7CiB9CiAKK3ZvaWQg
d2Via2l0X2RvbV90ZXN0X29ial93aXRoX2RvY3VtZW50X2FyZ3VtZW50KFdlYktpdERPTVRlc3RP
YmoqIHNlbGYpCit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19URVNUX09CSihzZWxmKSk7CisgICAg
V2ViQ29yZTo6VGVzdE9iaiogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKKyAgICBpdGVtLT53
aXRoRG9jdW1lbnRBcmd1bWVudCgpOworfQorCiB2b2lkIHdlYmtpdF9kb21fdGVzdF9vYmpfbWV0
aG9kX3dpdGhfb3B0aW9uYWxfYXJnKFdlYktpdERPTVRlc3RPYmoqIHNlbGYsIGdsb25nIG9wdCkK
IHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9XZWJLaXRET01U
ZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvR09iamVjdC9X
ZWJLaXRET01UZXN0T2JqLmgKaW5kZXggOTY0YTE2NWE5ZTUyMWU4MmY1NTFlN2VjODFjODA2ZDBj
MjAwNTVmYy4uMDU1YzViNmZiNTEwODJlYWRlMjhlMTUzOTg1NzEyMmZjODQ5NTc5NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0dPYmplY3QvV2ViS2l0
RE9NVGVzdE9iai5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9H
T2JqZWN0L1dlYktpdERPTVRlc3RPYmouaApAQCAtNDM3LDYgKzQzNywxNSBAQCBXRUJLSVRfQVBJ
IFdlYktpdERPTVRlc3RPYmoqCiB3ZWJraXRfZG9tX3Rlc3Rfb2JqX3dpdGhfc2NyaXB0X2V4ZWN1
dGlvbl9jb250ZXh0X2FuZF9zY3JpcHRfc3RhdGVfd2l0aF9zcGFjZXMoV2ViS2l0RE9NVGVzdE9i
aiogc2VsZik7CiAKIC8qKgorICogd2Via2l0X2RvbV90ZXN0X29ial93aXRoX2RvY3VtZW50X2Fy
Z3VtZW50OgorICogQHNlbGY6IEEgI1dlYktpdERPTVRlc3RPYmoKKyAqCisgKiBTdGFiaWxpdHk6
IFVuc3RhYmxlCisqKi8KK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2RvbV90ZXN0X29ial93aXRo
X2RvY3VtZW50X2FyZ3VtZW50KFdlYktpdERPTVRlc3RPYmoqIHNlbGYpOworCisvKioKICAqIHdl
YmtpdF9kb21fdGVzdF9vYmpfbWV0aG9kX3dpdGhfb3B0aW9uYWxfYXJnOgogICogQHNlbGY6IEEg
I1dlYktpdERPTVRlc3RPYmoKICAqIEBvcHQ6IEEgI2dsb25nCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
CmluZGV4IGZhNTE2OWFjZTY1YjU0OTBjNjlkNmVjMmY2MDJlOGU5NGI5ZmI1MWYuLjA0MzA3MDAy
M2QzYjMwYTRmYTRlNmQzMGM5NzliZjZmYThjMDg0ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3Bw
CkBAIC03OTIsOCArNzkyLDggQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RJ
bnRlcmZhY2VQcm90b3R5cGVGdW5jdGlvbkltcGxlbWVudHNNZXRob2QyKEUKICAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQogICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8
SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghc2NyaXB0Q29udGV4dCkKKyAgICBhdXRvKiBj
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgU3RyaW5n
IHN0ckFyZyA9IHN0YXRlLT5hcmd1bWVudCgwKS50b1N0cmluZyhzdGF0ZSktPnZhbHVlKHN0YXRl
KTsKICAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKQEAgLTgwMSw3ICs4
MDEsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdEludGVyZmFjZVByb3Rv
dHlwZUZ1bmN0aW9uSW1wbGVtZW50c01ldGhvZDIoRQogICAgIFRlc3RPYmoqIG9iakFyZyA9IEpT
VGVzdE9iajo6dG9XcmFwcGVkKHN0YXRlLT5hcmd1bWVudCgxKSk7CiAgICAgaWYgKFVOTElLRUxZ
KHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRU
aGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC5pbXBsZW1lbnRzTWV0aG9kMigq
c2NyaXB0Q29udGV4dCwgc3RyQXJnLCBvYmpBcmcsIGVjKSkpOworICAgIEpTVmFsdWUgcmVzdWx0
ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGlt
cGwuaW1wbGVtZW50c01ldGhvZDIoKmNvbnRleHQsIHN0ckFyZywgb2JqQXJnLCBlYykpKTsKIAog
ICAgIHNldERPTUV4Y2VwdGlvbihzdGF0ZSwgZWMpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKQEAgLTg1OCw4ICs4NTgsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGpzVGVzdEludGVyZmFjZVByb3RvdHlwZUZ1bmN0aW9uU3VwcGxlbWVudGFsTWV0aG9kMgog
ICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCiAgICAgICAgIHJl
dHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0
YXRlKSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byogc2NyaXB0Q29udGV4
dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFzY3JpcHRDb250ZXh0KQor
ICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICgh
Y29udGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
ICAgICBTdHJpbmcgc3RyQXJnID0gc3RhdGUtPmFyZ3VtZW50KDApLnRvU3RyaW5nKHN0YXRlKS0+
dmFsdWUoc3RhdGUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQpA
QCAtODY3LDcgKzg2Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0SW50
ZXJmYWNlUHJvdG90eXBlRnVuY3Rpb25TdXBwbGVtZW50YWxNZXRob2QyCiAgICAgVGVzdE9iaiog
b2JqQXJnID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQoc3RhdGUtPmFyZ3VtZW50KDEpKTsKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3Rh
dGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihXZWJDb3JlOjpUZXN0
U3VwcGxlbWVudGFsOjpzdXBwbGVtZW50YWxNZXRob2QyKGltcGwsICpzY3JpcHRDb250ZXh0LCBz
dHJBcmcsIG9iakFyZywgZWMpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBj
YXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoV2ViQ29yZTo6VGVzdFN1cHBs
ZW1lbnRhbDo6c3VwcGxlbWVudGFsTWV0aG9kMihpbXBsLCAqY29udGV4dCwgc3RyQXJnLCBvYmpB
cmcsIGVjKSkpOwogCiAgICAgc2V0RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAppbmRleCAxYjYzNjdkN2UzYjYyOTdl
YTU5YjRkZmZlZWNmMzIxM2QwNDg5ZDY4Li42YjU4NTc1OGI5N2MzYWRiNTRlNzVmNjc0Y2Y1YjBl
YzE4YzU3ODk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvSlMvSlNUZXN0T2JqLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcApAQCAtMTI5LDYgKzEyOSw3IEBAIEpTQzo6RW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRF
eGVjdXRpb25DCiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2Jq
RXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcyhKU0M6OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlw
dEFyZ3VtZW50c0FuZENhbGxTdGFjayhKU0M6OkV4ZWNTdGF0ZSopOworSlNDOjpFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aERvY3VtZW50
QXJndW1lbnQoSlNDOjpFeGVjU3RhdGUqKTsKIEpTQzo6RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZyhKU0M6
OkV4ZWNTdGF0ZSopOwogSlNDOjpFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9i
alByb3RvdHlwZUZ1bmN0aW9uTWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlKEpT
Qzo6RXhlY1N0YXRlKik7CiBKU0M6OkVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFy
ZyhKU0M6OkV4ZWNTdGF0ZSopOwpAQCAtNjYxLDYgKzY2Miw3IEBAIHN0YXRpYyBjb25zdCBIYXNo
VGFibGVWYWx1ZSBKU1Rlc3RPYmpQcm90b3R5cGVUYWJsZVZhbHVlc1tdID0KICAgICB7ICJ3aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uIiwgSlNDOjpG
dW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0
aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24pLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAi
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMiLCBKU0M6
OkZ1bmN0aW9uLCBOb0ludHJpbnNpYywgeyAoaW50cHRyX3Qpc3RhdGljX2Nhc3Q8TmF0aXZlRnVu
Y3Rpb24+KGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXMpLCAoaW50cHRyX3QpICgwKSB9IH0sCiAgICAgeyAi
d2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjayIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmlu
c2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJv
dG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrKSwgKGludHB0cl90
KSAoMCkgfSB9LAorICAgIHsgIndpdGhEb2N1bWVudEFyZ3VtZW50IiwgSlNDOjpGdW5jdGlvbiwg
Tm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1bmN0aW9uPihqc1Rl
c3RPYmpQcm90b3R5cGVGdW5jdGlvbldpdGhEb2N1bWVudEFyZ3VtZW50KSwgKGludHB0cl90KSAo
MCkgfSB9LAogICAgIHsgIm1ldGhvZFdpdGhPcHRpb25hbEFyZyIsIEpTQzo6RnVuY3Rpb24sIE5v
SW50cmluc2ljLCB7IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0
T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoT3B0aW9uYWxBcmcpLCAoaW50cHRyX3QpICgw
KSB9IH0sCiAgICAgeyAibWV0aG9kV2l0aE9wdGlvbmFsQXJnQW5kRGVmYXVsdFZhbHVlIiwgSlND
OjpGdW5jdGlvbiwgTm9JbnRyaW5zaWMsIHsgKGludHB0cl90KXN0YXRpY19jYXN0PE5hdGl2ZUZ1
bmN0aW9uPihqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1ldGhvZFdpdGhPcHRpb25hbEFyZ0Fu
ZERlZmF1bHRWYWx1ZSksIChpbnRwdHJfdCkgKDApIH0gfSwKICAgICB7ICJtZXRob2RXaXRoTm9u
T3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyIsIEpTQzo6RnVuY3Rpb24sIE5vSW50cmluc2ljLCB7
IChpbnRwdHJfdClzdGF0aWNfY2FzdDxOYXRpdmVGdW5jdGlvbj4oanNUZXN0T2JqUHJvdG90eXBl
RnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRPcHRpb25hbEFyZyksIChpbnRwdHJf
dCkgKDEpIH0gfSwKQEAgLTE0NzQsMTEgKzE0NzYsMTEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoRXhlY1N0YXRlKiBzdGF0ZSwg
RW4KICAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKSB7CiAgICAgICAgIHJldHVybiB0aHJv
d0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlIik7CiAgICAgfQotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nh
c3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIGlmICghc2NyaXB0Q29udGV4dCkKKyAgICBhdXRv
KiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9i
YWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRv
SlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCpzY3JpcHRDb250ZXh0KSkpOworICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCks
IFdURjo6Z2V0UHRyKGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoKmNv
bnRleHQpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCkBAIC0x
NTEwLDExICsxNTEyLDExIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKEV4ZWNTdGF0ZSogc3RhCiAgICAgICAgIHJldHVy
biB0aHJvd0dldHRlclR5cGVFcnJvcigqc3RhdGUsICJUZXN0T2JqIiwgIndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzIik7CiAgICAgfQogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmpl
Y3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpOwotICAgIGlmICghc2NyaXB0Q29udGV4dCkKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0
PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRo
aXMtPndyYXBwZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRo
aXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QXR0cmlidXRlUmFpc2VzKCpzY3JpcHRDb250ZXh0LCBlYykpKTsKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6Omdl
dFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlUmFpc2VzKCpjb250
ZXh0LCBlYykpKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUsIGVjKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0xNTI5LDExICsxNTMxLDExIEBAIEVuY29k
ZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3Rh
dGVBdHRyaWJ1dGUoRXhlY1N0CiAgICAgaWYgKFVOTElLRUxZKCFjYXN0ZWRUaGlzKSkgewogICAg
ICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRlIik7CiAgICAgfQot
ICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0
ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAg
IGlmICghc2NyaXB0Q29udGV4dCkKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9NR2xv
YmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2Jh
bE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5k
U2NyaXB0U3RhdGVBdHRyaWJ1dGUoKnN0YXRlLCAqc2NyaXB0Q29udGV4dCkpKTsKKyAgICBKU1Zh
bHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBXVEY6
OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRy
aWJ1dGUoKnN0YXRlLCAqY29udGV4dCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKQEAgLTE1NDgsMTEgKzE1NTAsMTEgQEAgRW5jb2RlZEpTVmFsdWUganNUZXN0
T2JqV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNl
cygKICAgICAgICAgcmV0dXJuIHRocm93R2V0dGVyVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoi
LCAid2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJhaXNl
cyIpOwogICAgIH0KICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBhdXRvKiBzY3JpcHRD
b250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxP
YmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIXNjcmlwdENvbnRl
eHQpCisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRl
LT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAg
aWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1
ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmli
dXRlUmFpc2VzKCpzdGF0ZSwgKnNjcmlwdENvbnRleHQsIGVjKSkpOworICAgIEpTVmFsdWUgcmVz
dWx0ID0gdG9KUyhzdGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRy
KGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlcygqc3RhdGUsICpjb250ZXh0LCBlYykpKTsKICAgICBzZXRET01FeGNlcHRpb24oc3RhdGUs
IGVjKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CkBAIC0xNTY3LDEx
ICsxNTY5LDExIEBAIEVuY29kZWRKU1ZhbHVlIGpzVGVzdE9ialdpdGhTY3JpcHRFeGVjdXRpb25D
b250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmliCiAgICAgaWYgKFVOTElLRUxZKCFj
YXN0ZWRUaGlzKSkgewogICAgICAgICByZXR1cm4gdGhyb3dHZXR0ZXJUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0
aFNwYWNlc0F0dHJpYnV0ZSIpOwogICAgIH0KLSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganND
YXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIXNjcmlwdENvbnRleHQpCisgICAgYXV0
byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogICAgIGF1
dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSB0
b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0
ZSgqc3RhdGUsICpzY3JpcHRDb250ZXh0KSkpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhz
dGF0ZSwgY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRyKGltcGwud2l0aFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhTcGFjZXNBdHRyaWJ1dGUoKnN0
YXRlLCAqY29udGV4dCkpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9
CiAKQEAgLTI2OTQsMTAgKzI2OTYsMTAgQEAgYm9vbCBzZXRKU1Rlc3RPYmpXaXRoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dEF0dHJpYnV0ZShFeGVjU3RhdGUqIHN0YXRlLCBFbmNvZGVkSlMKICAgICBU
ZXN0T2JqKiBuYXRpdmVWYWx1ZSA9IEpTVGVzdE9iajo6dG9XcmFwcGVkKHZhbHVlKTsKICAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmhhZEV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGF1dG8qIHNjcmlwdENvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihz
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwot
ICAgIGlmICghc2NyaXB0Q29udGV4dCkKKyAgICBhdXRvKiBjb250ZXh0ID0ganNDYXN0PEpTRE9N
R2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpbXBsLnNldFdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0cmlidXRlKCpzY3JpcHRD
b250ZXh0LCBuYXRpdmVWYWx1ZSk7CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dEF0dHJpYnV0ZSgqY29udGV4dCwgbmF0aXZlVmFsdWUpOwogICAgIHJldHVybiB0cnVlOwog
fQogCkBAIC0yNzMxLDEwICsyNzMzLDEwIEBAIGJvb2wgc2V0SlNUZXN0T2JqV2l0aFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YXRlKiBzdGF0ZSwgRW5jCiAgICAg
VGVzdE9iaiogbmF0aXZlVmFsdWUgPSBKU1Rlc3RPYmo6OnRvV3JhcHBlZCh2YWx1ZSk7CiAgICAg
aWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBhdXRvKiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4o
c3RhdGUtPmxleGljYWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsK
LSAgICBpZiAoIXNjcmlwdENvbnRleHQpCisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RP
TUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcygq
c2NyaXB0Q29udGV4dCwgbmF0aXZlVmFsdWUpOworICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRBdHRyaWJ1dGVSYWlzZXMoKmNvbnRleHQsIG5hdGl2ZVZhbHVlKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjc1MSwxMCArMjc1MywxMCBAQCBib29sIHNldEpTVGVzdE9i
aldpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoRXhlY1N0
YXRlKiBzdAogICAgIFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQo
dmFsdWUpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUds
b2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCk7Ci0gICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAgIGF1dG8qIGNvbnRleHQg
PSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
KS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRT
Y3JpcHRTdGF0ZUF0dHJpYnV0ZSgqc3RhdGUsICpzY3JpcHRDb250ZXh0LCBuYXRpdmVWYWx1ZSk7
CisgICAgaW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0
cmlidXRlKCpzdGF0ZSwgKmNvbnRleHQsIG5hdGl2ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMjc3MSwxMCArMjc3MywxMCBAQCBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXMoRXhlY1N0YQogICAg
IFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0
dHJpYnV0ZVJhaXNlcygqc3RhdGUsICpzY3JpcHRDb250ZXh0LCBuYXRpdmVWYWx1ZSk7CisgICAg
aW1wbC5zZXRXaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlQXR0cmlidXRl
UmFpc2VzKCpzdGF0ZSwgKmNvbnRleHQsIG5hdGl2ZVZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMjc5MSwxMCArMjc5MywxMCBAQCBib29sIHNldEpTVGVzdE9ialdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQXR0cmlidXRlKEV4ZQogICAg
IFRlc3RPYmoqIG5hdGl2ZVZhbHVlID0gSlNUZXN0T2JqOjp0b1dyYXBwZWQodmFsdWUpOwogICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+
KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
Ci0gICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNE
T01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdp
dGhTcGFjZXNBdHRyaWJ1dGUoKnN0YXRlLCAqc2NyaXB0Q29udGV4dCwgbmF0aXZlVmFsdWUpOwor
ICAgIGltcGwuc2V0V2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNBdHRyaWJ1dGUoKnN0YXRlLCAqY29udGV4dCwgbmF0aXZlVmFsdWUpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0zNjk4LDEwICszNzAwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4CiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIs
ICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCIpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byogc2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxK
U0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFzY3JpcHRDb250ZXh0KQorICAgIGF1dG8qIGNv
bnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBpbXBsLndp
dGhTY3JpcHRFeGVjdXRpb25Db250ZXh0KCpzY3JpcHRDb250ZXh0KTsKKyAgICBpbXBsLndpdGhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCpjb250ZXh0KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwogfQogCkBAIC0zNzEzLDEwICszNzE1LDEwIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0
RXhlY3V0aW9uQ29udGV4CiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRl
LCAiVGVzdE9iaiIsICJ3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlIik7
CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyhjYXN0ZWRUaGlzLCBKU1Rlc3RPYmo6Omlu
Zm8oKSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBhdXRv
KiBzY3JpcHRDb250ZXh0ID0ganNDYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oc3RhdGUtPmxleGlj
YWxHbG9iYWxPYmplY3QoKSktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICBpZiAoIXNj
cmlwdENvbnRleHQpCisgICAgYXV0byogY29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVj
dCo+KHN0YXRlLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCk7CisgICAgaWYgKCFjb250ZXh0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOwotICAgIGltcGwud2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZSgqc3RhdGUsICpzY3JpcHRDb250ZXh0KTsKKyAgICBpbXBsLndpdGhTY3JpcHRFeGVj
dXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGUoKnN0YXRlLCAqY29udGV4dCk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIH0KIApAQCAtMzcyOSwxMCArMzczMSwx
MCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlwZUZ1bmN0
aW9uV2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJ
VFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0
ZWRUaGlzLT53cmFwcGVkKCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgYXV0byog
c2NyaXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFzY3Jp
cHRDb250ZXh0KQorICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3Qq
PihzdGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
OworICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMt
Pmdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250
ZXh0QW5kU2NyaXB0U3RhdGVPYmpFeGNlcHRpb24oKnN0YXRlLCAqc2NyaXB0Q29udGV4dCwgZWMp
KSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxP
YmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNj
cmlwdFN0YXRlT2JqRXhjZXB0aW9uKCpzdGF0ZSwgKmNvbnRleHQsIGVjKSkpOwogCiAgICAgc2V0
RE9NRXhjZXB0aW9uKHN0YXRlLCBlYyk7CiAgICAgaWYgKFVOTElLRUxZKHN0YXRlLT5oYWRFeGNl
cHRpb24oKSkpCkBAIC0zNzQ4LDEwICszNzUwLDEwIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwganNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4
CiAgICAgICAgIHJldHVybiB0aHJvd1RoaXNUeXBlRXJyb3IoKnN0YXRlLCAiVGVzdE9iaiIsICJ3
aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlcyIpOwogICAg
IEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMoY2FzdGVkVGhpcywgSlNUZXN0T2JqOjppbmZvKCkp
OwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgYXV0byogc2Ny
aXB0Q29udGV4dCA9IGpzQ2FzdDxKU0RPTUdsb2JhbE9iamVjdCo+KHN0YXRlLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7Ci0gICAgaWYgKCFzY3JpcHRD
b250ZXh0KQorICAgIGF1dG8qIGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihz
dGF0ZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwor
ICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoc3RhdGUsIGNhc3RlZFRoaXMtPmds
b2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihpbXBsLndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0
QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzKCpzdGF0ZSwgKnNjcmlwdENvbnRleHQpKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKHN0YXRlLCBjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSwg
V1RGOjpnZXRQdHIoaW1wbC53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRl
V2l0aFNwYWNlcygqc3RhdGUsICpjb250ZXh0KSkpOwogICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+
aGFkRXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKQEAgLTM3NzAsNiAr
Mzc3MiwyMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGpzVGVzdE9ialByb3RvdHlw
ZUZ1bmN0aW9uV2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbAogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
anNUZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25XaXRoRG9jdW1lbnRBcmd1bWVudChFeGVjU3RhdGUq
IHN0YXRlKQoreworICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwor
ICAgIGF1dG8gY2FzdGVkVGhpcyA9IGpzRHluYW1pY0Nhc3Q8SlNUZXN0T2JqKj4odGhpc1ZhbHVl
KTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhc3RlZFRoaXMpKQorICAgICAgICByZXR1cm4gdGhyb3dU
aGlzVHlwZUVycm9yKCpzdGF0ZSwgIlRlc3RPYmoiLCAid2l0aERvY3VtZW50QXJndW1lbnQiKTsK
KyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKGNhc3RlZFRoaXMsIEpTVGVzdE9iajo6aW5m
bygpKTsKKyAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOworICAgIGF1dG8q
IGNvbnRleHQgPSBqc0Nhc3Q8SlNET01HbG9iYWxPYmplY3QqPihzdGF0ZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBBU1NF
UlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0
PERvY3VtZW50PigqY29udGV4dCk7CisgICAgaW1wbC53aXRoRG9jdW1lbnRBcmd1bWVudChkb2N1
bWVudCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKK30KKwog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBqc1Rlc3RPYmpQcm90b3R5cGVGdW5jdGlvbk1l
dGhvZFdpdGhPcHRpb25hbEFyZyhFeGVjU3RhdGUqIHN0YXRlKQogewogICAgIEpTVmFsdWUgdGhp
c1ZhbHVlID0gc3RhdGUtPnRoaXNWYWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5oCmluZGV4IDY0NjBjNDYyMzI4
N2RiOWIyY2VjOWNiOGNkYmJiMTQzZGFkZTZmOGQuLmJjYWQwYzExZmU0ZDgyODlmMWZlYTk4ZmU0
MGVjMzhjOTA0N2JjODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RPYmouaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLmgKQEAgLTE2OCw2ICsxNjgsNyBAQCBXRUJDT1JF
X0VYUE9SVCBAaW50ZXJmYWNlIERPTVRlc3RPYmogOiBET01PYmplY3QKIC0gKERPTVRlc3RPYmog
Kil3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uOwog
LSAoRE9NVGVzdE9iaiAqKXdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVX
aXRoU3BhY2VzOwogLSAodm9pZCl3aXRoU2NyaXB0QXJndW1lbnRzQW5kQ2FsbFN0YWNrOworLSAo
dm9pZCl3aXRoRG9jdW1lbnRBcmd1bWVudDsKIC0gKHZvaWQpbWV0aG9kV2l0aE9wdGlvbmFsQXJn
OihpbnQpb3B0OwogLSAodm9pZCltZXRob2RXaXRoT3B0aW9uYWxBcmdBbmREZWZhdWx0VmFsdWU6
KGludClvcHQ7CiAtICh2b2lkKW1ldGhvZFdpdGhOb25PcHRpb25hbEFyZ0FuZE9wdGlvbmFsQXJn
OihpbnQpbm9uT3B0IG9wdDooaW50KW9wdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0gYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvT2JqQy9ET01UZXN0T2JqLm1tCmluZGV4IDgxOTZiZGIxY2U4
NDEwOGYxOTllNzM1ZWIzOTI4MzllMjNlOWYyZDkuLjJmYmMyOTZmNTIxODJmNWM4MWZhMzk2MDA1
MmMyZmRlMDEzN2U4NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9PYmpDL0RPTVRlc3RPYmoubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L09iakMvRE9NVGVzdE9iai5tbQpAQCAtMTE3Miw2ICsxMTcyLDEyIEBACiAg
ICAgSU1QTC0+d2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFjaygpOwogfQogCistICh2b2lk
KXdpdGhEb2N1bWVudEFyZ3VtZW50Cit7CisgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOworICAgIElNUEwtPndpdGhEb2N1bWVudEFyZ3VtZW50KCk7Cit9CisKIC0gKHZv
aWQpbWV0aG9kV2l0aE9wdGlvbmFsQXJnOihpbnQpb3B0CiB7CiAgICAgV2ViQ29yZTo6SlNNYWlu
VGhyZWFkTnVsbFN0YXRlIHN0YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L1Rlc3RPYmouaWRsIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Rlc3RPYmouaWRsCmluZGV4IGE2MTI2MWQ1Yzk5MDNhNzI5ZjY4OGM2NmE4OTky
NmJlOGI2YjcyYjMuLjk3OGQ1ZmJlNDQxYTFhODI0YWY2NjMxOWFmNDkzODM4NDA2MjEyM2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0T2JqLmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVGVzdE9iai5pZGwK
QEAgLTE1OSw2ICsxNTksNyBAQCBlbnVtIF9vcHRpb25hbCB7ICIiLCAiT3B0aW9uYWxWYWx1ZTEi
LCAiT3B0aW9uYWxWYWx1ZTIiLCAiT3B0aW9uYWxWYWx1ZTMiIH07CiAgICAgW0NhbGxXaXRoPVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmU2NyaXB0U3RhdGUsIFJhaXNlc0V4Y2VwdGlvbl0gVGVzdE9i
aiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlT2JqRXhjZXB0aW9uKCk7
CiAgICAgW0NhbGxXaXRoPSAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCAgJiAgU2NyaXB0U3RhdGUg
IF0gVGVzdE9iaiB3aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNw
YWNlcygpOwogICAgIFtDYWxsV2l0aD1TY3JpcHRBcmd1bWVudHMmQ2FsbFN0YWNrXSB2b2lkIHdp
dGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2soKTsKKyAgICBbQ2FsbFdpdGg9RG9jdW1lbnRd
IHZvaWQgd2l0aERvY3VtZW50QXJndW1lbnQoKTsKIAogICAgIFtDYWxsV2l0aD1TY3JpcHRTdGF0
ZV0gYXR0cmlidXRlIGxvbmcgd2l0aFNjcmlwdFN0YXRlQXR0cmlidXRlOwogICAgIFtDYWxsV2l0
aD1TY3JpcHRTdGF0ZSwgU2V0dGVyQ2FsbFdpdGg9QWN0aXZlV2luZG93JkZpcnN0V2luZG93XSBh
dHRyaWJ1dGUgbG9uZyB3aXRoQ2FsbFdpdGhBbmRTZXR0ZXJDYWxsV2l0aEF0dHJpYnV0ZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBmMzczM2ExNzYxMzZlYTI3NjRiYWM4NjgyYTll
YjA4MDFmM2Y3ZWMwLi4xYzY5YjE1ZGEyZTYwMGQyMjIzMjM1ZDFmNjY5ZjYwMTQ3MWJmZjE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC05NjIsNyArOTYyLDEyIEBAIEVsZW1lbnQq
IERPTVdpbmRvdzo6ZnJhbWVFbGVtZW50KCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZS0+b3du
ZXJFbGVtZW50KCk7CiB9CiAKLXZvaWQgRE9NV2luZG93Ojpmb2N1cyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0KQordm9pZCBET01XaW5kb3c6OmZvY3VzKERvY3VtZW50JiBkb2N1bWVu
dCkKK3sKKyAgICBmb2N1cyhvcGVuZXIoKSAmJiBvcGVuZXIoKSAhPSB0aGlzICYmIGRvY3VtZW50
LmRvbVdpbmRvdygpID09IG9wZW5lcigpKTsKK30KKwordm9pZCBET01XaW5kb3c6OmZvY3VzKGJv
b2wgYWxsb3dGb2N1cykKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAg
LTk3MSwxMyArOTc2LDcgQEAgdm9pZCBET01XaW5kb3c6OmZvY3VzKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpCiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBi
b29sIGFsbG93Rm9jdXMgPSBXaW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0b3I6OndpbmRvd0ZvY3Vz
QWxsb3dlZCgpIHx8ICFtX2ZyYW1lLT5zZXR0aW5ncygpLndpbmRvd0ZvY3VzUmVzdHJpY3RlZCgp
OwotICAgIGlmIChjb250ZXh0KSB7Ci0gICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0g
ICAgICAgIERvY3VtZW50JiBhY3RpdmVEb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqY29u
dGV4dCk7Ci0gICAgICAgIGlmIChvcGVuZXIoKSAmJiBvcGVuZXIoKSAhPSB0aGlzICYmIGFjdGl2
ZURvY3VtZW50LmRvbVdpbmRvdygpID09IG9wZW5lcigpKQotICAgICAgICAgICAgYWxsb3dGb2N1
cyA9IHRydWU7Ci0gICAgfQorICAgIGFsbG93Rm9jdXMgPSBhbGxvd0ZvY3VzIHx8IFdpbmRvd0Zv
Y3VzQWxsb3dlZEluZGljYXRvcjo6d2luZG93Rm9jdXNBbGxvd2VkKCkgfHwgIW1fZnJhbWUtPnNl
dHRpbmdzKCkud2luZG93Rm9jdXNSZXN0cmljdGVkKCk7CiAKICAgICAvLyBJZiB3ZSdyZSBhIHRv
cCBsZXZlbCB3aW5kb3csIGJyaW5nIHRoZSB3aW5kb3cgdG8gdGhlIGZyb250LgogICAgIGlmICht
X2ZyYW1lLT5pc01haW5GcmFtZSgpICYmIGFsbG93Rm9jdXMpCkBAIC0xMDEyLDcgKzEwMTEsMTQg
QEAgdm9pZCBET01XaW5kb3c6OmJsdXIoKQogICAgIHBhZ2UtPmNocm9tZSgpLnVuZm9jdXMoKTsK
IH0KIAotdm9pZCBET01XaW5kb3c6OmNsb3NlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCit2b2lkIERPTVdpbmRvdzo6Y2xvc2UoRG9jdW1lbnQmIGRvY3VtZW50KQoreworICAgIGlm
ICghZG9jdW1lbnQuY2FuTmF2aWdhdGUobV9mcmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICBj
bG9zZSgpOworfQorCit2b2lkIERPTVdpbmRvdzo6Y2xvc2UoKQogewogICAgIGlmICghbV9mcmFt
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAyNCwxMiArMTAzMCw2IEBAIHZvaWQgRE9NV2luZG93
OjpjbG9zZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIGlmICghbV9mcmFt
ZS0+aXNNYWluRnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGNvbnRleHQpIHsK
LSAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICAgICAgaWYgKCFkb3duY2FzdDxE
b2N1bWVudD4oKmNvbnRleHQpLmNhbk5hdmlnYXRlKG1fZnJhbWUpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIGJvb2wgYWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MgPSBtX2Zy
YW1lLT5zZXR0aW5ncygpLmFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKCk7CiAKICAgICBpZiAo
IShwYWdlLT5vcGVuZWRCeURPTSgpIHx8IHBhZ2UtPmJhY2tGb3J3YXJkKCkuY291bnQoKSA8PSAx
IHx8IGFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9ET01XaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmgK
aW5kZXggYjM0ZjM1OWI2MWFjNmZjM2U4NjdhZjZlNmU4NjQ3ZDdjMjUyMDJjZi4uZjM3NDY2Mjhl
YTM5MTcxMDA3ZTA4ZDU1NGMwNGYzZjVhYmNmMzk4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5o
CkBAIC0xNjAsMTEgKzE2MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgRWxl
bWVudCogZnJhbWVFbGVtZW50KCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCBmb2N1cyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiA9IG51bGxwdHIpOwotICAgICAgICB2b2lkIGZvY3VzKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpIHsgZm9jdXMoJmNvbnRleHQpOyB9CisgICAgICAgIHZv
aWQgZm9jdXMoYm9vbCBhbGxvd0ZvY3VzID0gZmFsc2UpOworICAgICAgICB2b2lkIGZvY3VzKERv
Y3VtZW50Jik7CiAgICAgICAgIHZvaWQgYmx1cigpOwotICAgICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsb3NlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqID0gbnVsbHB0cik7Ci0gICAgICAgIHZv
aWQgY2xvc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeyBjbG9zZSgmY29udGV4
dCk7IH0KKyAgICAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9zZSgpOworICAgICAgICB2b2lk
IGNsb3NlKERvY3VtZW50Jik7CiAgICAgICAgIHZvaWQgcHJpbnQoKTsKICAgICAgICAgdm9pZCBz
dG9wKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmlkbAppbmRleCA4NDg2MGZkOGVhOTA3M2Q1
OWMyOGNmYWQzNGQxOGMwNTNjMDIyNzcyLi5jZWE2NTk3NGM3ZDQxMGMxNTVmZjFkZTQyZGMzOGNh
NTMyMmY1MTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5pZGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuaWRsCkBAIC01Nyw5ICs1Nyw5IEBA
CiAKICAgICBbQ2hlY2tTZWN1cml0eUZvck5vZGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSBFbGVtZW50
IGZyYW1lRWxlbWVudDsKIAotICAgIFtEb05vdENoZWNrU2VjdXJpdHksIENhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIEZvcndhcmREZWNsYXJlSW5IZWFkZXJdIHZvaWQgZm9jdXMoKTsK
KyAgICBbRG9Ob3RDaGVja1NlY3VyaXR5LCBDYWxsV2l0aD1Eb2N1bWVudCwgRm9yd2FyZERlY2xh
cmVJbkhlYWRlcl0gdm9pZCBmb2N1cygpOwogICAgIFtEb05vdENoZWNrU2VjdXJpdHksIEZvcndh
cmREZWNsYXJlSW5IZWFkZXJdIHZvaWQgYmx1cigpOwotICAgIFtEb05vdENoZWNrU2VjdXJpdHks
IENhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEZvcndhcmREZWNsYXJlSW5IZWFkZXJd
IHZvaWQgY2xvc2UoKTsKKyAgICBbRG9Ob3RDaGVja1NlY3VyaXR5LCBDYWxsV2l0aD1Eb2N1bWVu
dCwgRm9yd2FyZERlY2xhcmVJbkhlYWRlcl0gdm9pZCBjbG9zZSgpOwogCiAgICAgdm9pZCBwcmlu
dCgpOwogICAgIHZvaWQgc3RvcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9I
aXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5jcHAKaW5kZXggYjk1NzFj
MWQ0MGIzMGMyOGJmNTc4YjAwZDE5Y2E3NTQ4MmUyNDYwOC4uODc0YWRjYjFjMzk1ZjczOTA2ZTkx
OWI1NzRhN2NlNzc0Yzc5Yjg1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0
b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0hpc3RvcnkuY3BwCkBAIC05MSw5ICs5
MSw5IEBAIHZvaWQgSGlzdG9yeTo6YmFjaygpCiAgICAgZ28oLTEpOwogfQogCi12b2lkIEhpc3Rv
cnk6OmJhY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKK3ZvaWQgSGlzdG9yeTo6
YmFjayhEb2N1bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgZ28oY29udGV4dCwgLTEpOworICAgIGdv
KGRvY3VtZW50LCAtMSk7CiB9CiAKIHZvaWQgSGlzdG9yeTo6Zm9yd2FyZCgpCkBAIC0xMDEsOSAr
MTAxLDkgQEAgdm9pZCBIaXN0b3J5Ojpmb3J3YXJkKCkKICAgICBnbygxKTsKIH0KIAotdm9pZCBI
aXN0b3J5Ojpmb3J3YXJkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCit2b2lkIEhp
c3Rvcnk6OmZvcndhcmQoRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGdvKGNvbnRleHQsIDEp
OworICAgIGdvKGRvY3VtZW50LCAxKTsKIH0KIAogdm9pZCBIaXN0b3J5OjpnbyhpbnQgZGlzdGFu
Y2UpCkBAIC0xMTQsMTcgKzExNCwxNCBAQCB2b2lkIEhpc3Rvcnk6OmdvKGludCBkaXN0YW5jZSkK
ICAgICBtX2ZyYW1lLT5uYXZpZ2F0aW9uU2NoZWR1bGVyKCkuc2NoZWR1bGVIaXN0b3J5TmF2aWdh
dGlvbihkaXN0YW5jZSk7CiB9CiAKLXZvaWQgSGlzdG9yeTo6Z28oU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgaW50IGRpc3RhbmNlKQordm9pZCBIaXN0b3J5OjpnbyhEb2N1bWVudCYg
ZG9jdW1lbnQsIGludCBkaXN0YW5jZSkKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgRG9jdW1lbnQqIGFjdGl2
ZURvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwotICAgIGlmICghYWN0aXZl
RG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKIAotICAgIGlmICghYWN0aXZlRG9jdW1lbnQtPmNh
bk5hdmlnYXRlKG1fZnJhbWUpKQorICAgIGlmICghZG9jdW1lbnQuY2FuTmF2aWdhdGUobV9mcmFt
ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZnJhbWUtPm5hdmlnYXRpb25TY2hlZHVsZXIo
KS5zY2hlZHVsZUhpc3RvcnlOYXZpZ2F0aW9uKGRpc3RhbmNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmgK
aW5kZXggNWFlNTBiZTYzYTI5YTM4NjI5OTM1Y2E2YWU1NTg1MmIzZjhiZDU0OC4uNzEzNDMyZGJh
NTI2NGJmNDFjNDkzYzJjMzVjNmQ1YTQxYWNiMDY2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9IaXN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmgKQEAg
LTM2LDggKzM2LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEZyYW1lOwotY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIHN0cnVjdCBFeGNl
cHRpb25Db2RlV2l0aE1lc3NhZ2U7CiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC00
OSwxNSArNDksMTEgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiBzdGF0ZSgpOwogICAgIHZvaWQgYmFjaygpOwogICAgIHZvaWQgZm9yd2FyZCgpOwotICAg
IHZvaWQgZ28oaW50IGRpc3RhbmNlKTsKKyAgICB2b2lkIGdvKGludCk7CiAKLSAgICB2b2lkIGJh
Y2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkgeyBiYWNrKCZjb250ZXh0KTsgfQot
ICAgIHZvaWQgZm9yd2FyZChTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KSB7IGZvcndh
cmQoJmNvbnRleHQpOyB9Ci0gICAgdm9pZCBnbyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250
ZXh0LCBpbnQgZGlzdGFuY2UpIHsgZ28oJmNvbnRleHQsIGRpc3RhbmNlKTsgfQotCi0gICAgdm9p
ZCBiYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKLSAgICB2b2lkIGZvcndhcmQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCopOwotICAgIHZvaWQgZ28oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IGludCBkaXN0YW5jZSk7CisgICAgdm9pZCBiYWNrKERvY3VtZW50Jik7CisgICAgdm9pZCBmb3J3
YXJkKERvY3VtZW50Jik7CisgICAgdm9pZCBnbyhEb2N1bWVudCYsIGludCk7CiAKICAgICBib29s
IHN0YXRlQ2hhbmdlZCgpIGNvbnN0OwogICAgIGJvb2wgaXNTYW1lQXNDdXJyZW50U3RhdGUoU2Vy
aWFsaXplZFNjcmlwdFZhbHVlKikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0hpc3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9IaXN0b3J5LmlkbAppbmRleCAw
YjdiMmVlYjYyZjg0YzM3ZjhlNDAzNzIzMWZjZTMwZDMzNTUxYWRmLi5mNzc1ODIyNjI1N2FhZDNh
YmQ2Yjc3ZTQ0Njc2NWQzZThlZTdjNWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0hpc3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvSGlzdG9yeS5pZGwKQEAgLTI5
LDkgKzI5LDkgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7
CiAgICAgW0NhY2hlZEF0dHJpYnV0ZSwgQ3VzdG9tXSByZWFkb25seSBhdHRyaWJ1dGUgU2VyaWFs
aXplZFNjcmlwdFZhbHVlIHN0YXRlOwogCi0gICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIEZvcndhcmREZWNsYXJlSW5IZWFkZXJdIHZvaWQgYmFjaygpOwotICAgIFtDYWxsV2l0
aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBGb3J3YXJkRGVjbGFyZUluSGVhZGVyXSB2b2lkIGZv
cndhcmQoKTsKLSAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRm9yd2FyZERl
Y2xhcmVJbkhlYWRlcl0gdm9pZCBnbyhbRGVmYXVsdD1VbmRlZmluZWRdIG9wdGlvbmFsIGxvbmcg
ZGlzdGFuY2UpOworICAgIFtDYWxsV2l0aD1Eb2N1bWVudCwgRm9yd2FyZERlY2xhcmVJbkhlYWRl
cl0gdm9pZCBiYWNrKCk7CisgICAgW0NhbGxXaXRoPURvY3VtZW50LCBGb3J3YXJkRGVjbGFyZUlu
SGVhZGVyXSB2b2lkIGZvcndhcmQoKTsKKyAgICBbQ2FsbFdpdGg9RG9jdW1lbnQsIEZvcndhcmRE
ZWNsYXJlSW5IZWFkZXJdIHZvaWQgZ28oW0RlZmF1bHQ9VW5kZWZpbmVkXSBvcHRpb25hbCBsb25n
IGRpc3RhbmNlKTsKIAogICAgIFtDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBwdXNoU3Rh
dGUoYW55IGRhdGEsIERPTVN0cmluZyB0aXRsZSwgb3B0aW9uYWwgRE9NU3RyaW5nIHVybCk7CiAg
ICAgW0N1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHJlcGxhY2VTdGF0ZShhbnkgZGF0YSwg
RE9NU3RyaW5nIHRpdGxlLCBvcHRpb25hbCBET01TdHJpbmcgdXJsKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAppbmRleCA3ZWExNTI0Y2U4MGFkOTk3ZTM5OGM5MjEwMzg5MjY1YWU4
YzgxZDBhLi4xOWZkOGQwYzEwYjk0MjQ3YjU2ZjJiMDEwYWIyNDJjMzYyMTc2ODZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0yOTYsNyArMjk2LDcgQEAgdm9pZCBJbnNw
ZWN0b3JTdHViRnJvbnRlbmQ6OmNsb3NlV2luZG93KCkKICAgICBtX2Zyb250ZW5kQ29udHJvbGxl
ci5zZXRJbnNwZWN0b3JGcm9udGVuZENsaWVudChudWxscHRyKTsKICAgICBpbnNwZWN0ZWRQYWdl
KCktPmluc3BlY3RvckNvbnRyb2xsZXIoKS5kaXNjb25uZWN0RnJvbnRlbmQodGhpcyk7CiAKLSAg
ICBtX2Zyb250ZW5kV2luZG93LT5jbG9zZShtX2Zyb250ZW5kV2luZG93LT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOworICAgIG1fZnJvbnRlbmRXaW5kb3ctPmNsb3NlKCk7CiAgICAgbV9mcm9u
dGVuZFdpbmRvdyA9IG51bGxwdHI7CiB9CiAK
</data>
<flag name="commit-queue"
          id="298454"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>