<?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>199151</bug_id>
          
          <creation_ts>2019-06-24 06:25:49 -0700</creation_ts>
          <short_desc>[SOUP] Use libsoup WebSockets API</short_desc>
          <delta_ts>2019-06-27 10:46:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=198568</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=199189</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=199276</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>199223</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>annulen</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>csaavedra</cc>
    
    <cc>ggaren</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1547307</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-24 06:25:49 -0700</bug_when>
    <thetext>Instead of the WebKit one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547309</commentid>
    <comment_count>1</comment_count>
      <attachid>372750</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-24 06:28:23 -0700</bug_when>
    <thetext>Created attachment 372750
WIP

This is a WIP patch. Old code is used unless WEBKIT_USE_SOUP_WEBSOCKETS env var is present. This is just temporary until the implementation is complete and we make layout tests pass. Most of them are failing with the patch, but in a lot of cases it&apos;s because of missing console messages that new code path doesn&apos;t generate. I&apos;ll add a comment with more information about the layout tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547314</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-24 06:49:43 -0700</bug_when>
    <thetext>As I said most of the tests are failing because of missing console messages, so they are actually working and I won&apos;t mention them here.

http/tests/websocket/tests/hybi/bad-handshake-crash.html

This needs investigation, &quot;WebSocket is open&quot; message is unexpectedly shown in the output.

http/tests/websocket/tests/hybi/client-close.html

I&apos;ve debugged this and I don&apos;t understand why it fails, the diff is:
-PASS closeEvent.reason is &quot;close_frame[:2]=&apos;\\x88\\x80&apos;&quot;
+FAIL closeEvent.reason should be close_frame[:2]=&apos;\x88\x80&apos;. Was close_frame[:2]=&apos;\x88\x82&apos;.

http/tests/websocket/tests/hybi/close-code-and-reason.html

This one expects error codes that the spec says shouldn&apos;t be used like 1006. But close reason is also failing, so it needs some more investigation.

http/tests/websocket/tests/hybi/close.html

It seems onclose is not called in a couple of cases.

http/tests/websocket/tests/hybi/deflate-frame-parameter.html
http/tests/websocket/tests/hybi/extensions.html

x-webkit-deflate-frame extension not supported

http/tests/websocket/tests/hybi/handshake-fail-by-no-cr.html

Libsoup doesn&apos;t fail when status line finishes with \n since that&apos;s what the http spec suggests.

http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1.html

There are a couple of cases where libsoup doesn&apos;t fail either.

http/tests/websocket/tests/hybi/inspector/*

It seems we are not notifying the inspector in some cases about websockets with the new code path.

http/tests/websocket/tests/hybi/null-character.html

libsoup API always expect a null terminated string for text frames. I haven&apos;t found anything in the spec about it, it just says that text frames should contains valid utf8, and null character si perfectly valid, so maybe we need to add new API in libsoup to allow passing char* + length.

http/tests/websocket/tests/hybi/send-object-tostring-check.html

It expects to be closed cleanly, but apparently it isn&apos;t.

http/tests/websocket/tests/hybi/simple-wss.html

We don&apos;t have a way to accept the invalid certificate only for tests.

http/tests/websocket/tests/hybi/inspector/binary.html
http/tests/websocket/tests/hybi/send-blob-onmessage-origin.html
http/tests/websocket/tests/hybi/send-blob.html

Blobs are not implemented in new code path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547315</commentid>
    <comment_count>3</comment_count>
      <attachid>372750</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-06-24 06:50:39 -0700</bug_when>
    <thetext>Comment on attachment 372750
WIP

Amazing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547376</commentid>
    <comment_count>4</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-24 08:29:41 -0700</bug_when>
    <thetext>Nice to see that.
We have similar test issues with the NSURLSession code path that we will need to handle one way or the other.

I run some of these tests with Chrome and Firefox and some of them fail with either one or both, which indicates that these tests might be WebKit implementation specific.

(In reply to Carlos Garcia Campos from comment #2)
&gt; As I said most of the tests are failing because of missing console messages,
&gt; so they are actually working and I won&apos;t mention them here.

Right, I am not sure we will be able to get back the exact same missing console messages given that part of the messages are generated by processing done by libsoup/nsurlsession now.

&gt; 
&gt; http/tests/websocket/tests/hybi/bad-handshake-crash.html
&gt; 
&gt; This needs investigation, &quot;WebSocket is open&quot; message is unexpectedly shown
&gt; in the output.

I think we also have an issue there with NSURLSession.

&gt; http/tests/websocket/tests/hybi/client-close.html
&gt; 
&gt; I&apos;ve debugged this and I don&apos;t understand why it fails, the diff is:
&gt; -PASS closeEvent.reason is &quot;close_frame[:2]=&apos;\\x88\\x80&apos;&quot;
&gt; +FAIL closeEvent.reason should be close_frame[:2]=&apos;\x88\x80&apos;. Was
&gt; close_frame[:2]=&apos;\x88\x82&apos;.

Same issue here with NSURLSession.

&gt; http/tests/websocket/tests/hybi/close-code-and-reason.html
&gt; 
&gt; This one expects error codes that the spec says shouldn&apos;t be used like 1006.
&gt; But close reason is also failing, so it needs some more investigation.
&gt; 
&gt; http/tests/websocket/tests/hybi/close.html
&gt; 
&gt; It seems onclose is not called in a couple of cases.
&gt; 
&gt; http/tests/websocket/tests/hybi/deflate-frame-parameter.html
&gt; http/tests/websocket/tests/hybi/extensions.html
&gt; 
&gt; x-webkit-deflate-frame extension not supported

The idea would be to move from x-webkit-deflate-frame to the standard version permessage-deflate.

&gt; 
&gt; http/tests/websocket/tests/hybi/handshake-fail-by-no-cr.html
&gt; 
&gt; Libsoup doesn&apos;t fail when status line finishes with \n since that&apos;s what the
&gt; http spec suggests.
&gt; 
&gt; http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1.
&gt; html
&gt; 
&gt; There are a couple of cases where libsoup doesn&apos;t fail either.
&gt; 
&gt; http/tests/websocket/tests/hybi/inspector/*
&gt; 
&gt; It seems we are not notifying the inspector in some cases about websockets
&gt; with the new code path.

I am not sure we will be ever able to get back the same level of inspector control with the new code path.

&gt; http/tests/websocket/tests/hybi/null-character.html
&gt; 
&gt; libsoup API always expect a null terminated string for text frames. I
&gt; haven&apos;t found anything in the spec about it, it just says that text frames
&gt; should contains valid utf8, and null character si perfectly valid, so maybe
&gt; we need to add new API in libsoup to allow passing char* + length.
&gt; 
&gt; http/tests/websocket/tests/hybi/send-object-tostring-check.html
&gt; 
&gt; It expects to be closed cleanly, but apparently it isn&apos;t.
&gt; 
&gt; http/tests/websocket/tests/hybi/simple-wss.html
&gt; 
&gt; We don&apos;t have a way to accept the invalid certificate only for tests.

The plan is to reuse the existing NSURLSession code path for these.
I would hope you could do the same for libsoup.

&gt; http/tests/websocket/tests/hybi/inspector/binary.html
&gt; http/tests/websocket/tests/hybi/send-blob-onmessage-origin.html
&gt; http/tests/websocket/tests/hybi/send-blob.html
&gt; 
&gt; Blobs are not implemented in new code path.

Yep, this will be needed to implement.
This will require to queue additional outgoing messages until the blob is read/put in memory and sent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547378</commentid>
    <comment_count>5</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-24 08:30:23 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #1)
&gt; Created attachment 372750 [details]
&gt; WIP
&gt; 
&gt; This is a WIP patch. Old code is used unless WEBKIT_USE_SOUP_WEBSOCKETS env
&gt; var is present. This is just temporary until the implementation is complete
&gt; and we make layout tests pass. Most of them are failing with the patch, but
&gt; in a lot of cases it&apos;s because of missing console messages that new code
&gt; path doesn&apos;t generate. I&apos;ll add a comment with more information about the
&gt; layout tests.

Depending on how you want to do the switch, it might be feasible to rename/reuse NSURLSessionWebSocket runtime flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547647</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-25 01:17:09 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #4)
&gt; Nice to see that.
&gt; We have similar test issues with the NSURLSession code path that we will
&gt; need to handle one way or the other.

So, the NSURLSession impl is not used yet in production, and not tested by the bots either?

&gt; I run some of these tests with Chrome and Firefox and some of them fail with
&gt; either one or both, which indicates that these tests might be WebKit
&gt; implementation specific.

I&apos;ll prioritize the ones that we knoe are bugs or missing features.

&gt; (In reply to Carlos Garcia Campos from comment #2)
&gt; &gt; As I said most of the tests are failing because of missing console messages,
&gt; &gt; so they are actually working and I won&apos;t mention them here.
&gt; 
&gt; Right, I am not sure we will be able to get back the exact same missing
&gt; console messages given that part of the messages are generated by processing
&gt; done by libsoup/nsurlsession now.

Indeed, if we keep using console messages for those events, we will need platform specific test results. I don&apos;t know if it&apos;s possible to ignore those messages (if we end up adding them back) in layout tests to not show them in the results.

&gt; &gt; 
&gt; &gt; http/tests/websocket/tests/hybi/bad-handshake-crash.html
&gt; &gt; 
&gt; &gt; This needs investigation, &quot;WebSocket is open&quot; message is unexpectedly shown
&gt; &gt; in the output.
&gt; 
&gt; I think we also have an issue there with NSURLSession.
&gt; 
&gt; &gt; http/tests/websocket/tests/hybi/client-close.html
&gt; &gt; 
&gt; &gt; I&apos;ve debugged this and I don&apos;t understand why it fails, the diff is:
&gt; &gt; -PASS closeEvent.reason is &quot;close_frame[:2]=&apos;\\x88\\x80&apos;&quot;
&gt; &gt; +FAIL closeEvent.reason should be close_frame[:2]=&apos;\x88\x80&apos;. Was
&gt; &gt; close_frame[:2]=&apos;\x88\x82&apos;.
&gt; 
&gt; Same issue here with NSURLSession.

Interesting, I debugged it for a while, but couldn&apos;t understand what&apos;s going on there.
 
&gt; &gt; http/tests/websocket/tests/hybi/close-code-and-reason.html
&gt; &gt; 
&gt; &gt; This one expects error codes that the spec says shouldn&apos;t be used like 1006.
&gt; &gt; But close reason is also failing, so it needs some more investigation.
&gt; &gt; 
&gt; &gt; http/tests/websocket/tests/hybi/close.html
&gt; &gt; 
&gt; &gt; It seems onclose is not called in a couple of cases.
&gt; &gt; 
&gt; &gt; http/tests/websocket/tests/hybi/deflate-frame-parameter.html
&gt; &gt; http/tests/websocket/tests/hybi/extensions.html
&gt; &gt; 
&gt; &gt; x-webkit-deflate-frame extension not supported
&gt; 
&gt; The idea would be to move from x-webkit-deflate-frame to the standard
&gt; version permessage-deflate.

Since it&apos;s in a spec now I think we could implement it directly in libsoup, otherwise I&apos;ll add new API to libsoup to implement extensions. I guess this doesn&apos;t cause any regression in functionality, only that frames are not compressed.

&gt; &gt; 
&gt; &gt; http/tests/websocket/tests/hybi/handshake-fail-by-no-cr.html
&gt; &gt; 
&gt; &gt; Libsoup doesn&apos;t fail when status line finishes with \n since that&apos;s what the
&gt; &gt; http spec suggests.
&gt; &gt; 
&gt; &gt; http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1.
&gt; &gt; html
&gt; &gt; 
&gt; &gt; There are a couple of cases where libsoup doesn&apos;t fail either.
&gt; &gt; 
&gt; &gt; http/tests/websocket/tests/hybi/inspector/*
&gt; &gt; 
&gt; &gt; It seems we are not notifying the inspector in some cases about websockets
&gt; &gt; with the new code path.
&gt; 
&gt; I am not sure we will be ever able to get back the same level of inspector
&gt; control with the new code path.

I&apos;ll take a look.

&gt; &gt; http/tests/websocket/tests/hybi/null-character.html
&gt; &gt; 
&gt; &gt; libsoup API always expect a null terminated string for text frames. I
&gt; &gt; haven&apos;t found anything in the spec about it, it just says that text frames
&gt; &gt; should contains valid utf8, and null character si perfectly valid, so maybe
&gt; &gt; we need to add new API in libsoup to allow passing char* + length.
&gt; &gt; 
&gt; &gt; http/tests/websocket/tests/hybi/send-object-tostring-check.html
&gt; &gt; 
&gt; &gt; It expects to be closed cleanly, but apparently it isn&apos;t.
&gt; &gt; 
&gt; &gt; http/tests/websocket/tests/hybi/simple-wss.html
&gt; &gt; 
&gt; &gt; We don&apos;t have a way to accept the invalid certificate only for tests.
&gt; 
&gt; The plan is to reuse the existing NSURLSession code path for these.
&gt; I would hope you could do the same for libsoup.

I&apos;ll check it too. We should be able, since the handshake happens in the session like a normal load.

&gt; &gt; http/tests/websocket/tests/hybi/inspector/binary.html
&gt; &gt; http/tests/websocket/tests/hybi/send-blob-onmessage-origin.html
&gt; &gt; http/tests/websocket/tests/hybi/send-blob.html
&gt; &gt; 
&gt; &gt; Blobs are not implemented in new code path.
&gt; 
&gt; Yep, this will be needed to implement.
&gt; This will require to queue additional outgoing messages until the blob is
&gt; read/put in memory and sent.

I&apos;ll take a look too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547648</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-25 01:20:47 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #5)
&gt; (In reply to Carlos Garcia Campos from comment #1)
&gt; &gt; Created attachment 372750 [details]
&gt; &gt; WIP
&gt; &gt; 
&gt; &gt; This is a WIP patch. Old code is used unless WEBKIT_USE_SOUP_WEBSOCKETS env
&gt; &gt; var is present. This is just temporary until the implementation is complete
&gt; &gt; and we make layout tests pass. Most of them are failing with the patch, but
&gt; &gt; in a lot of cases it&apos;s because of missing console messages that new code
&gt; &gt; path doesn&apos;t generate. I&apos;ll add a comment with more information about the
&gt; &gt; layout tests.
&gt; 
&gt; Depending on how you want to do the switch, it might be feasible to
&gt; rename/reuse NSURLSessionWebSocket runtime flag.

We already depend on a lisboup version having the websockets API (although I&apos;ve fixed several bugs these days while working on it, but mostly edge cases covered by the tests). So, as soon as we have all the basic functionality working we can do the switch unconditionally. I can use platform specific test results until apple switches to use NSURLSession for the tests too. We can probably land this patch using the env var and continue working on the remaining issues in follow up patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547708</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-25 09:51:40 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #6)
&gt; (In reply to youenn fablet from comment #4)
&gt; &gt; Nice to see that.
&gt; &gt; We have similar test issues with the NSURLSession code path that we will
&gt; &gt; need to handle one way or the other.
&gt; 
&gt; So, the NSURLSession impl is not used yet in production, and not tested by
&gt; the bots either?

Right, it is off by default in WebKitTestRunner.

&gt; &gt; I run some of these tests with Chrome and Firefox and some of them fail with
&gt; &gt; either one or both, which indicates that these tests might be WebKit
&gt; &gt; implementation specific.
&gt; 
&gt; I&apos;ll prioritize the ones that we knoe are bugs or missing features.
&gt; 
&gt; &gt; (In reply to Carlos Garcia Campos from comment #2)
&gt; &gt; &gt; As I said most of the tests are failing because of missing console messages,
&gt; &gt; &gt; so they are actually working and I won&apos;t mention them here.
&gt; &gt; 
&gt; &gt; Right, I am not sure we will be able to get back the exact same missing
&gt; &gt; console messages given that part of the messages are generated by processing
&gt; &gt; done by libsoup/nsurlsession now.
&gt; 
&gt; Indeed, if we keep using console messages for those events, we will need
&gt; platform specific test results. I don&apos;t know if it&apos;s possible to ignore
&gt; those messages (if we end up adding them back) in layout tests to not show
&gt; them in the results.

It is possible using DumpJSConsoleLogInStdErr but I am not sure we want to use that option. Platform specific changes might be better.

&gt; &gt; &gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/bad-handshake-crash.html
&gt; &gt; &gt; 
&gt; &gt; &gt; This needs investigation, &quot;WebSocket is open&quot; message is unexpectedly shown
&gt; &gt; &gt; in the output.
&gt; &gt; 
&gt; &gt; I think we also have an issue there with NSURLSession.
&gt; &gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/client-close.html
&gt; &gt; &gt; 
&gt; &gt; &gt; I&apos;ve debugged this and I don&apos;t understand why it fails, the diff is:
&gt; &gt; &gt; -PASS closeEvent.reason is &quot;close_frame[:2]=&apos;\\x88\\x80&apos;&quot;
&gt; &gt; &gt; +FAIL closeEvent.reason should be close_frame[:2]=&apos;\x88\x80&apos;. Was
&gt; &gt; &gt; close_frame[:2]=&apos;\x88\x82&apos;.
&gt; &gt; 
&gt; &gt; Same issue here with NSURLSession.
&gt; 
&gt; Interesting, I debugged it for a while, but couldn&apos;t understand what&apos;s going
&gt; on there.
&gt;  
&gt; &gt; &gt; http/tests/websocket/tests/hybi/close-code-and-reason.html
&gt; &gt; &gt; 
&gt; &gt; &gt; This one expects error codes that the spec says shouldn&apos;t be used like 1006.
&gt; &gt; &gt; But close reason is also failing, so it needs some more investigation.
&gt; &gt; &gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/close.html
&gt; &gt; &gt; 
&gt; &gt; &gt; It seems onclose is not called in a couple of cases.
&gt; &gt; &gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/deflate-frame-parameter.html
&gt; &gt; &gt; http/tests/websocket/tests/hybi/extensions.html
&gt; &gt; &gt; 
&gt; &gt; &gt; x-webkit-deflate-frame extension not supported
&gt; &gt; 
&gt; &gt; The idea would be to move from x-webkit-deflate-frame to the standard
&gt; &gt; version permessage-deflate.
&gt; 
&gt; Since it&apos;s in a spec now I think we could implement it directly in libsoup,
&gt; otherwise I&apos;ll add new API to libsoup to implement extensions. I guess this
&gt; doesn&apos;t cause any regression in functionality, only that frames are not
&gt; compressed.

The handshake request would be different so servers could react differently and for instance fail the handshake.
That said, Chrome and Firefox are using the standard extension now, so compatibility risk might be low.

&gt; 
&gt; &gt; &gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/handshake-fail-by-no-cr.html
&gt; &gt; &gt; 
&gt; &gt; &gt; Libsoup doesn&apos;t fail when status line finishes with \n since that&apos;s what the
&gt; &gt; &gt; http spec suggests.
&gt; &gt; &gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/handshake-ok-with-http-version-beyond-1_1.
&gt; &gt; &gt; html
&gt; &gt; &gt; 
&gt; &gt; &gt; There are a couple of cases where libsoup doesn&apos;t fail either.
&gt; &gt; &gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/inspector/*
&gt; &gt; &gt; 
&gt; &gt; &gt; It seems we are not notifying the inspector in some cases about websockets
&gt; &gt; &gt; with the new code path.
&gt; &gt; 
&gt; &gt; I am not sure we will be ever able to get back the same level of inspector
&gt; &gt; control with the new code path.
&gt; 
&gt; I&apos;ll take a look.
&gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/null-character.html
&gt; &gt; &gt; 
&gt; &gt; &gt; libsoup API always expect a null terminated string for text frames. I
&gt; &gt; &gt; haven&apos;t found anything in the spec about it, it just says that text frames
&gt; &gt; &gt; should contains valid utf8, and null character si perfectly valid, so maybe
&gt; &gt; &gt; we need to add new API in libsoup to allow passing char* + length.
&gt; &gt; &gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/send-object-tostring-check.html
&gt; &gt; &gt; 
&gt; &gt; &gt; It expects to be closed cleanly, but apparently it isn&apos;t.
&gt; &gt; &gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/simple-wss.html
&gt; &gt; &gt; 
&gt; &gt; &gt; We don&apos;t have a way to accept the invalid certificate only for tests.
&gt; &gt; 
&gt; &gt; The plan is to reuse the existing NSURLSession code path for these.
&gt; &gt; I would hope you could do the same for libsoup.
&gt; 
&gt; I&apos;ll check it too. We should be able, since the handshake happens in the
&gt; session like a normal load.
&gt; 
&gt; &gt; &gt; http/tests/websocket/tests/hybi/inspector/binary.html
&gt; &gt; &gt; http/tests/websocket/tests/hybi/send-blob-onmessage-origin.html
&gt; &gt; &gt; http/tests/websocket/tests/hybi/send-blob.html
&gt; &gt; &gt; 
&gt; &gt; &gt; Blobs are not implemented in new code path.
&gt; &gt; 
&gt; &gt; Yep, this will be needed to implement.
&gt; &gt; This will require to queue additional outgoing messages until the blob is
&gt; &gt; read/put in memory and sent.
&gt; 
&gt; I&apos;ll take a look too.

Cool, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548002</commentid>
    <comment_count>9</comment_count>
      <attachid>372916</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-26 05:02:04 -0700</bug_when>
    <thetext>Created attachment 372916
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548040</commentid>
    <comment_count>10</comment_count>
      <attachid>372916</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-06-26 09:19:23 -0700</bug_when>
    <thetext>Comment on attachment 372916
Patch

OK the soup changes LGTM.

There are some bits in here that require owner approval from Youenn before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548065</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-06-26 11:03:42 -0700</bug_when>
    <thetext>Would be worth double-checking to make sure proxies still work, since we had a CVE there in the past.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548360</commentid>
    <comment_count>12</comment_count>
      <attachid>372916</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-26 22:06:59 -0700</bug_when>
    <thetext>Comment on attachment 372916
Patch

r=me as well.
Some comments below.

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

&gt; Source/WebKit/NetworkProcess/soup/WebSocketTaskSoup.h:38
&gt; +class WebSocketTask {

Some small code is shared between the soup and cocoa versions.
Maybe code should be shared.

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:164
&gt; +void WebSocketChannel::didConnect(const String&amp; subprotocol)

String&amp;&amp;

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:173
&gt; +        enqueueTask([this, subprotocol] {

WTFMove() and mutable

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:179
&gt; +    m_subprotocol = subprotocol;

WTFMove()

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:237
&gt; +void WebSocketChannel::didFail(const String&amp; reason)

String&amp;&amp;

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:243
&gt; +        enqueueTask([this, reason] {

WTFMove and mutable

&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:249
&gt; +    // FIXME: do something with reason.

reason might not be a great name since it relates to didClose.
Maybe errorMessage might be better.

There is a preexisting issue as well in the sense we might usually need to call didClose after didFail to trigger the onclose event.
This is not really consistent with other code where didFail is final.
Maybe we should rename didFail to didReceiveMessageError.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548388</commentid>
    <comment_count>13</comment_count>
      <attachid>372916</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-27 01:09:54 -0700</bug_when>
    <thetext>Comment on attachment 372916
Patch

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

&gt;&gt; Source/WebKit/NetworkProcess/soup/WebSocketTaskSoup.h:38
&gt;&gt; +class WebSocketTask {
&gt; 
&gt; Some small code is shared between the soup and cocoa versions.
&gt; Maybe code should be shared.

Yes, we could move to a shared header instead of the current one just including the platform ones.

&gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:164
&gt;&gt; +void WebSocketChannel::didConnect(const String&amp; subprotocol)
&gt; 
&gt; String&amp;&amp;

I&apos;m following what other IPC message chandlers do. I think we should change the others too, so better to do it in a follow up. I&apos;ll submit a new patch.

&gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:249
&gt;&gt; +    // FIXME: do something with reason.
&gt; 
&gt; reason might not be a great name since it relates to didClose.
&gt; Maybe errorMessage might be better.
&gt; 
&gt; There is a preexisting issue as well in the sense we might usually need to call didClose after didFail to trigger the onclose event.
&gt; This is not really consistent with other code where didFail is final.
&gt; Maybe we should rename didFail to didReceiveMessageError.

It&apos;s the same nomenclature used in WebCore/Modules/websockets/WebSocketChannel.cpp. In the old code WebSocketChannel::fail() calls m_handle-&gt;disconnect() after m_client-&gt;didReceiveMessageError() which closes the socket stream causing the close.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548398</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-27 01:41:35 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #11)
&gt; Would be worth double-checking to make sure proxies still work, since we had
&gt; a CVE there in the past.

That shouldn&apos;t be a problem. The bug was that we were not using the soup session to start the TCP connection, so anything condifugred in the session was lost. The new code path uses soup_session_websocket_connect_async().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548401</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-27 01:52:50 -0700</bug_when>
    <thetext>Committed r246877: &lt;https://trac.webkit.org/changeset/246877&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548436</commentid>
    <comment_count>16</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2019-06-27 05:11:32 -0700</bug_when>
    <thetext>Out of curiosity: what benefits does use of platform-specific implementation of WebSockets instead of internal impementation provide?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548459</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-06-27 06:35:58 -0700</bug_when>
    <thetext>At least it&apos;s less code to maintain in WebKit :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548474</commentid>
    <comment_count>18</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2019-06-27 07:30:23 -0700</bug_when>
    <thetext>But AFAIU WebKit implementation will have to stay anyway because of Windows ports and PlayStation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548480</commentid>
    <comment_count>19</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-27 08:01:30 -0700</bug_when>
    <thetext>WebSocket handshake is based on HTTP so it is best to let the underlying HTTP library handle it (cookies, certification validation, proxies...).
It would be nice if other WK2 implementations could follow the same path.
The other WebSocket library will remain for WK1.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1548481</commentid>
    <comment_count>20</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-06-27 08:04:17 -0700</bug_when>
    <thetext>
&gt; &gt;&gt; Source/WebKit/WebProcess/Network/WebSocketChannel.cpp:164
&gt; &gt;&gt; +void WebSocketChannel::didConnect(const String&amp; subprotocol)
&gt; &gt; 
&gt; &gt; String&amp;&amp;
&gt; 
&gt; I&apos;m following what other IPC message chandlers do. I think we should change
&gt; the others too, so better to do it in a follow up. I&apos;ll submit a new patch.

It is only needed to change the ones that can benefit r values.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372750</attachid>
            <date>2019-06-24 06:28:23 -0700</date>
            <delta_ts>2019-06-26 05:02:04 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>wk-soup-sockets.diff</filename>
            <type>text/plain</type>
            <size>20479</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMv
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IDcxNDJlYTllNjYxLi4wMGUyMDZk
YTY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCkBAIC01OCwxMiArNTgsMTkg
QEAgUmVmPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGkKIAogICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNh
c3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwogCisgICAgYm9vbCBzaG91bGRQcm92aWRlckNyZWF0ZVNv
Y2tldENoYW5uZWwgPSBmYWxzZTsKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9XRUJTT0NLRVQpCi0g
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuaXNOU1VSTFNl
c3Npb25XZWJTb2NrZXRFbmFibGVkKCkpIHsKKyAgICBzaG91bGRQcm92aWRlckNyZWF0ZVNvY2tl
dENoYW5uZWwgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmlzTlNV
UkxTZXNzaW9uV2ViU29ja2V0RW5hYmxlZCgpOworI2VuZGlmCisjaWYgVVNFKFNPVVApCisgICAg
c2hvdWxkUHJvdmlkZXJDcmVhdGVTb2NrZXRDaGFubmVsID0gZ2V0ZW52KCJXRUJLSVRfVVNFX1NP
VVBfV0VCU09DS0VUUyIpOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkUHJvdmlkZXJDcmVhdGVT
b2NrZXRDaGFubmVsKSB7CiAgICAgICAgIGlmIChhdXRvIGNoYW5uZWwgPSBwcm92aWRlci5jcmVh
dGVXZWJTb2NrZXRDaGFubmVsKGRvY3VtZW50LCBjbGllbnQpKQogICAgICAgICAgICAgcmV0dXJu
IGNoYW5uZWwucmVsZWFzZU5vbk51bGwoKTsKICAgICB9Ci0jZW5kaWYKKwogICAgIHJldHVybiBX
ZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoZG9jdW1lbnQsIGNsaWVudCwgcHJvdmlkZXIpOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2NrZXRD
aGFubmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1NvY2tldENo
YW5uZWwuY3BwCmluZGV4IDk0ODNhZGFiYmMxLi4yNzQxMGM4OTJhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU29ja2V0Q2hhbm5lbC5jcHAKQEAg
LTU1LDkgKzU1LDEwIEBAIE5ldHdvcmtTb2NrZXRDaGFubmVsOjpOZXR3b3JrU29ja2V0Q2hhbm5l
bChOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgY29ubmVjCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fc29ja2V0ID0gbV9zZXNzaW9uLT5jcmVhdGVXZWJTb2NrZXRUYXNrKCp0aGlzLCBy
ZXF1ZXN0LCBwcm90b2NvbCk7Ci0KLSAgICBtX3Nlc3Npb24tPmFkZFdlYlNvY2tldFRhc2soKm1f
c29ja2V0KTsKLSAgICBtX3NvY2tldC0+cmVzdW1lKCk7CisgICAgaWYgKG1fc29ja2V0KSB7Cisg
ICAgICAgIG1fc2Vzc2lvbi0+YWRkV2ViU29ja2V0VGFzaygqbV9zb2NrZXQpOworICAgICAgICBt
X3NvY2tldC0+cmVzdW1lKCk7CisgICAgfQogfQogCiBOZXR3b3JrU29ja2V0Q2hhbm5lbDo6fk5l
dHdvcmtTb2NrZXRDaGFubmVsKCkKQEAgLTk2LDkgKzk3LDkgQEAgdm9pZCBOZXR3b3JrU29ja2V0
Q2hhbm5lbDo6Y2xvc2UoaW50MzJfdCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikKICAgICBm
aW5pc2hDbG9zaW5nSWZQb3NzaWJsZSgpOwogfQogCi12b2lkIE5ldHdvcmtTb2NrZXRDaGFubmVs
OjpkaWRDb25uZWN0KCkKK3ZvaWQgTmV0d29ya1NvY2tldENoYW5uZWw6OmRpZENvbm5lY3QoY29u
c3QgU3RyaW5nJiBzdWJwcm90b2NvbCkKIHsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJTb2NrZXRD
aGFubmVsOjpEaWRDb25uZWN0IHsgfSk7CisgICAgc2VuZChNZXNzYWdlczo6V2ViU29ja2V0Q2hh
bm5lbDo6RGlkQ29ubmVjdCB7IHN1YnByb3RvY29sIH0pOwogfQogCiB2b2lkIE5ldHdvcmtTb2Nr
ZXRDaGFubmVsOjpkaWRSZWNlaXZlVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCkBAIC0xMTcsNiAr
MTE4LDExIEBAIHZvaWQgTmV0d29ya1NvY2tldENoYW5uZWw6OmRpZENsb3NlKHVuc2lnbmVkIHNo
b3J0IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uKQogICAgIGZpbmlzaENsb3NpbmdJZlBvc3Np
YmxlKCk7CiB9CiAKK3ZvaWQgTmV0d29ya1NvY2tldENoYW5uZWw6OmRpZEZhaWwoY29uc3QgU3Ry
aW5nJiByZWFzb24pCit7CisgICAgc2VuZChNZXNzYWdlczo6V2ViU29ja2V0Q2hhbm5lbDo6RGlk
RmFpbCB7IHJlYXNvbiB9KTsKK30KKwogSVBDOjpDb25uZWN0aW9uKiBOZXR3b3JrU29ja2V0Q2hh
bm5lbDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAogewogICAgIHJldHVybiAmbV9j
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNvbm5lY3Rpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1NvY2tldENoYW5uZWwuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1NvY2tldENoYW5uZWwuaAppbmRleCBkMDc2OTM3NDVm
Yi4uYzMyMDQ5Yjg0MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1NvY2tldENoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtTb2NrZXRDaGFubmVsLmgKQEAgLTU5LDEwICs1OSwxMSBAQCBwdWJsaWM6CiAgICAg
ZnJpZW5kIGNsYXNzIFdlYlNvY2tldFRhc2s7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBkaWRDb25u
ZWN0KCk7CisgICAgdm9pZCBkaWRDb25uZWN0KGNvbnN0IFN0cmluZyYgc3VicHJvdG9jb2wpOwog
ICAgIHZvaWQgZGlkUmVjZWl2ZVRleHQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBkaWRSZWNl
aXZlQmluYXJ5RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKTsKICAgICB2
b2lkIGRpZENsb3NlKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uKTsK
KyAgICB2b2lkIGRpZEZhaWwoY29uc3QgU3RyaW5nJiByZWFzb24pOwogCiAgICAgdm9pZCBzZW5k
U3RyaW5nKGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAg
dm9pZCBzZW5kRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKCk+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9X
ZWJTb2NrZXRUYXNrLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlNvY2tldFRh
c2suaAppbmRleCA5MzlmNjAxODYwZC4uM2E1OWZmYTZhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBQ
TEFURk9STShDT0NPQSkgJiYgSEFWRShOU1VSTFNFU1NJT05fV0VCU09DS0VUKQogI2luY2x1ZGUg
IldlYlNvY2tldFRhc2tDb2NvYS5oIgorI2VsaWYgVVNFKFNPVVApCisjaW5jbHVkZSAiV2ViU29j
a2V0VGFza1NvdXAuaCIKICNlbHNlCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNw
cAppbmRleCBiMjRlODMxYTIyOS4uNTMzN2Y4NDE3ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuY3BwCkBAIC0y
OSw3ICsyOSw5IEBACiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3MuaCIKICNpbmNsdWRlICJOZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFn
ZXIuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXRUYXNrU291cC5oIgogI2luY2x1ZGUgPFdlYkNvcmUv
TmV0d29ya1N0b3JhZ2VTZXNzaW9uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZVJlcXVl
c3QuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1NvdXBOZXR3b3JrU2Vzc2lvbi5oPgogI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgogCkBAIC02NSw0ICs2NywxNSBAQCB2b2lkIE5ldHdvcmtTZXNzaW9u
U291cDo6Y2xlYXJDcmVkZW50aWFscygpCiAjZW5kaWYKIH0KIAorc3RkOjp1bmlxdWVfcHRyPFdl
YlNvY2tldFRhc2s+IE5ldHdvcmtTZXNzaW9uU291cDo6Y3JlYXRlV2ViU29ja2V0VGFzayhOZXR3
b3JrU29ja2V0Q2hhbm5lbCYgY2hhbm5lbCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
LCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQoreworICAgIEdVbmlxdWVQdHI8U291cFVSST4gc291
cFVSSSA9IHJlcXVlc3QuY3JlYXRlU291cFVSSSgpOworICAgIGlmICghc291cFVSSSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBHUmVmUHRyPFNvdXBNZXNzYWdlPiBzb3VwTWVzc2Fn
ZSA9IGFkb3B0R1JlZihzb3VwX21lc3NhZ2VfbmV3X2Zyb21fdXJpKFNPVVBfTUVUSE9EX0dFVCwg
c291cFVSSS5nZXQoKSkpOworICAgIHJlcXVlc3QudXBkYXRlU291cE1lc3NhZ2Uoc291cE1lc3Nh
Z2UuZ2V0KCkpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFdlYlNvY2tldFRhc2s+KGNo
YW5uZWwsIHNvdXBTZXNzaW9uKCksIHNvdXBNZXNzYWdlLmdldCgpLCBwcm90b2NvbCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5oCmluZGV4IGRkODY0ZGQ2NDJjLi5jMzEz
MDU2ODI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05l
dHdvcmtTZXNzaW9uU291cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuaApAQCAtMzEsNiArMzEsOCBAQCB0eXBlZGVmIHN0cnVjdCBf
U291cFNlc3Npb24gU291cFNlc3Npb247CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBO
ZXR3b3JrU29ja2V0Q2hhbm5lbDsKK2NsYXNzIFdlYlNvY2tldFRhc2s7CiBzdHJ1Y3QgTmV0d29y
a1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM7CiAKIGNsYXNzIE5ldHdvcmtTZXNzaW9uU291cCBm
aW5hbCA6IHB1YmxpYyBOZXR3b3JrU2Vzc2lvbiB7CkBAIC00Niw2ICs0OCw4IEBAIHB1YmxpYzoK
IHByaXZhdGU6CiAgICAgTmV0d29ya1Nlc3Npb25Tb3VwKE5ldHdvcmtQcm9jZXNzJiwgTmV0d29y
a1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmJik7CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
U29ja2V0VGFzaz4gY3JlYXRlV2ViU29ja2V0VGFzayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYsIGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpIG92
ZXJyaWRlOworCiAgICAgdm9pZCBjbGVhckNyZWRlbnRpYWxzKCkgb3ZlcnJpZGU7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvV2ViU29ja2V0VGFz
a1NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYlNvY2tldFRh
c2tTb3VwLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjUwMmZh
MDUxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3Nv
dXAvV2ViU29ja2V0VGFza1NvdXAuY3BwCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJTb2NrZXRUYXNrU291cC5oIgorCisjaW5jbHVkZSAiRGF0YVJlZmVyZW5j
ZS5oIgorI2luY2x1ZGUgIk5ldHdvcmtTb2NrZXRDaGFubmVsLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9IVFRQUGFyc2Vycy5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK1dlYlNvY2tldFRhc2s6OldlYlNvY2tldFRhc2soTmV0d29ya1Nv
Y2tldENoYW5uZWwmIGNoYW5uZWwsIFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSog
bXNnLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQorICAgIDogbV9jaGFubmVsKGNoYW5uZWwpCisg
ICAgLCBtX2NhbmNlbGxhYmxlKGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKSkKK3sKKyAg
ICBhdXRvIHByb3RvY29sTGlzdCA9IHByb3RvY29sLnNwbGl0KCcsJyk7CisgICAgR1VuaXF1ZVB0
cjxjaGFyKj4gcHJvdG9jb2xzOworICAgIGlmICghcHJvdG9jb2xMaXN0LmlzRW1wdHkoKSkgewor
ICAgICAgICBwcm90b2NvbHMucmVzZXQoc3RhdGljX2Nhc3Q8Y2hhcioqPihnX25ldzAoY2hhcios
IHByb3RvY29sTGlzdC5zaXplKCkgKyAxKSkpOworICAgICAgICB1bnNpZ25lZCBpID0gMDsKKyAg
ICAgICAgZm9yIChhdXRvJiBzdWJwcm90b2NvbCA6IHByb3RvY29sTGlzdCkKKyAgICAgICAgICAg
IHByb3RvY29scy5nZXQoKVtpKytdID0gZ19zdHJkdXAoV2ViQ29yZTo6c3RyaXBMZWFkaW5nQW5k
VHJhaWxpbmdIVFRQU3BhY2VzKHN1YnByb3RvY29sKS51dGY4KCkuZGF0YSgpKTsKKyAgICB9Cisg
ICAgc291cF9zZXNzaW9uX3dlYnNvY2tldF9jb25uZWN0X2FzeW5jKHNlc3Npb24sIG1zZywgbnVs
bHB0ciwgcHJvdG9jb2xzLmdldCgpLCBtX2NhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICBbXSAo
R09iamVjdCogc2Vzc2lvbiwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRh
KSB7CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAg
ICBHUmVmUHRyPFNvdXBXZWJzb2NrZXRDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gYWRvcHRHUmVm
KHNvdXBfc2Vzc2lvbl93ZWJzb2NrZXRfY29ubmVjdF9maW5pc2goU09VUF9TRVNTSU9OKHNlc3Np
b24pLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOworICAgICAgICAgICAgaWYgKGdfZXJyb3Jf
bWF0Y2hlcyhlcnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGF1dG8qIHRhc2sgPSBzdGF0aWNf
Y2FzdDxXZWJTb2NrZXRUYXNrKj4odXNlckRhdGEpOworICAgICAgICAgICAgaWYgKGNvbm5lY3Rp
b24pCisgICAgICAgICAgICAgICAgdGFzay0+ZGlkQ29ubmVjdChXVEZNb3ZlKGNvbm5lY3Rpb24p
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0YXNrLT5kaWRGYWlsKFN0cmlu
Zzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpKTsKKyAgICAgICAgfSwgdGhpcyk7Cit9CisKK1dl
YlNvY2tldFRhc2s6On5XZWJTb2NrZXRUYXNrKCkKK3sKKyAgICBjYW5jZWwoKTsKK30KKwordm9p
ZCBXZWJTb2NrZXRUYXNrOjpkaWRDb25uZWN0KEdSZWZQdHI8U291cFdlYnNvY2tldENvbm5lY3Rp
b24+JiYgY29ubmVjdGlvbikKK3sKKyAgICBtX2Nvbm5lY3Rpb24gPSBXVEZNb3ZlKGNvbm5lY3Rp
b24pOworCisjaWYgU09VUF9DSEVDS19WRVJTSU9OKDIsIDU2LCAwKQorICAgIC8vIFVzZSB0aGUg
c2FtZSBtYXhpbXVtIHBheWxvYWQgbGVuZ3RoIGFzIFdlYktpdCBpbnRlcm5hbCBpbXBsZW1lbnRh
dGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisgICAgc3RhdGljIGNvbnN0IHVpbnQ2
NF90IG1heFBheWxvYWRMZW5ndGggPSBVSU5UNjRfQygweDdGRkZGRkZGRkZGRkZGRkYpOworICAg
IHNvdXBfd2Vic29ja2V0X2Nvbm5lY3Rpb25fc2V0X21heF9pbmNvbWluZ19wYXlsb2FkX3NpemUo
bV9jb25uZWN0aW9uLmdldCgpLCBtYXhQYXlsb2FkTGVuZ3RoKTsKKyNlbmRpZgorCisgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY29ubmVjdGlvbi5nZXQoKSwgIm1lc3NhZ2UiLCByZWlu
dGVycHJldF9jYXN0PEdDYWxsYmFjaz4oZGlkUmVjZWl2ZU1lc3NhZ2VDYWxsYmFjayksIHRoaXMp
OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2Nvbm5lY3Rpb24uZ2V0KCksICJlcnJv
ciIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0NhbGxiYWNrPihkaWRSZWNlaXZlRXJyb3JDYWxsYmFjayks
IHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2Nvbm5lY3Rpb24uZ2V0KCks
ICJjbG9zZWQiLCByZWludGVycHJldF9jYXN0PEdDYWxsYmFjaz4oZGlkQ2xvc2VDYWxsYmFjayks
IHRoaXMpOworCisgICAgbV9jaGFubmVsLmRpZENvbm5lY3Qoc291cF93ZWJzb2NrZXRfY29ubmVj
dGlvbl9nZXRfcHJvdG9jb2wobV9jb25uZWN0aW9uLmdldCgpKSk7Cit9CisKK3ZvaWQgV2ViU29j
a2V0VGFzazo6ZGlkUmVjZWl2ZU1lc3NhZ2VDYWxsYmFjayhXZWJTb2NrZXRUYXNrKiB0YXNrLCBT
b3VwV2Vic29ja2V0RGF0YVR5cGUgZGF0YVR5cGUsIEdCeXRlcyogbWVzc2FnZSkKK3sKKyAgICBp
ZiAoZ19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQodGFzay0+bV9jYW5jZWxsYWJsZS5nZXQoKSkp
CisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAoZGF0YVR5cGUpIHsKKyAgICBjYXNlIFNP
VVBfV0VCU09DS0VUX0RBVEFfVEVYVDoKKyAgICAgICAgdGFzay0+bV9jaGFubmVsLmRpZFJlY2Vp
dmVUZXh0KFN0cmluZzo6ZnJvbVVURjgoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGdfYnl0ZXNf
Z2V0X2RhdGEobWVzc2FnZSwgbnVsbHB0cikpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U09VUF9XRUJTT0NLRVRfREFUQV9CSU5BUlk6IHsKKyAgICAgICAgZ3NpemUgZGF0YVNpemU7Cisg
ICAgICAgIGF1dG8gZGF0YSA9IGdfYnl0ZXNfZ2V0X2RhdGEobWVzc2FnZSwgJmRhdGFTaXplKTsK
KyAgICAgICAgdGFzay0+bV9jaGFubmVsLmRpZFJlY2VpdmVCaW5hcnlEYXRhKHN0YXRpY19jYXN0
PGNvbnN0IHVpbnQ4X3QqPihkYXRhKSwgZGF0YVNpemUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgfQorfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OmRpZFJlY2VpdmVFcnJvckNhbGxiYWNr
KFdlYlNvY2tldFRhc2sqIHRhc2ssIEdFcnJvciogZXJyb3IpCit7CisgICAgaWYgKGdfY2FuY2Vs
bGFibGVfaXNfY2FuY2VsbGVkKHRhc2stPm1fY2FuY2VsbGFibGUuZ2V0KCkpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICB0YXNrLT5kaWRGYWlsKFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3Nh
Z2UpKTsKK30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpkaWRGYWlsKGNvbnN0IFN0cmluZyYgcmVh
c29uKQoreworICAgIGlmIChtX3JlY2VpdmVkRGlkRmFpbCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9yZWNlaXZlZERpZEZhaWwgPSB0cnVlOworICAgIG1fY2hhbm5lbC5kaWRGYWlsKHJlYXNv
bik7CisgICAgaWYgKCFtX2Nvbm5lY3Rpb24pIHsKKyAgICAgICAgZGlkQ2xvc2UoU09VUF9XRUJT
T0NLRVRfQ0xPU0VfQUJOT1JNQUwsIHsgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoc291cF93ZWJzb2NrZXRfY29ubmVjdGlvbl9nZXRfc3RhdGUobV9jb25uZWN0aW9uLmdl
dCgpKSA9PSBTT1VQX1dFQlNPQ0tFVF9TVEFURV9PUEVOKQorICAgICAgICBkaWRDbG9zZSgwLCB7
IH0pOworfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OmRpZENsb3NlQ2FsbGJhY2soV2ViU29ja2V0
VGFzayogdGFzaykKK3sKKyAgICB0YXNrLT5kaWRDbG9zZShzb3VwX3dlYnNvY2tldF9jb25uZWN0
aW9uX2dldF9jbG9zZV9jb2RlKHRhc2stPm1fY29ubmVjdGlvbi5nZXQoKSksIFN0cmluZzo6ZnJv
bVVURjgoc291cF93ZWJzb2NrZXRfY29ubmVjdGlvbl9nZXRfY2xvc2VfZGF0YSh0YXNrLT5tX2Nv
bm5lY3Rpb24uZ2V0KCkpKSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkQ2xvc2UodW5z
aWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24pCit7CisgICAgaWYgKG1fcmVj
ZWl2ZWREaWRDbG9zZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9yZWNlaXZlZERpZENsb3Nl
ID0gdHJ1ZTsKKyAgICBtX2NoYW5uZWwuZGlkQ2xvc2UoY29kZSwgcmVhc29uKTsKK30KKwordm9p
ZCBXZWJTb2NrZXRUYXNrOjpzZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYgdGV4dCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmIGNhbGxiYWNrKQoreworICAgIGlmIChtX2Nvbm5lY3Rpb24gJiYg
c291cF93ZWJzb2NrZXRfY29ubmVjdGlvbl9nZXRfc3RhdGUobV9jb25uZWN0aW9uLmdldCgpKSA9
PSBTT1VQX1dFQlNPQ0tFVF9TVEFURV9PUEVOKQorICAgICAgICBzb3VwX3dlYnNvY2tldF9jb25u
ZWN0aW9uX3NlbmRfdGV4dChtX2Nvbm5lY3Rpb24uZ2V0KCksIHRleHQudXRmOCgpLmRhdGEoKSk7
CisgICAgY2FsbGJhY2soKTsKK30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpzZW5kRGF0YShjb25z
dCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
YWxsYmFjaykKK3sKKyAgICBpZiAobV9jb25uZWN0aW9uICYmIHNvdXBfd2Vic29ja2V0X2Nvbm5l
Y3Rpb25fZ2V0X3N0YXRlKG1fY29ubmVjdGlvbi5nZXQoKSkgPT0gU09VUF9XRUJTT0NLRVRfU1RB
VEVfT1BFTikKKyAgICAgICAgc291cF93ZWJzb2NrZXRfY29ubmVjdGlvbl9zZW5kX2JpbmFyeSht
X2Nvbm5lY3Rpb24uZ2V0KCksIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CisgICAgY2FsbGJh
Y2soKTsKK30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpjbG9zZShpbnQzMl90IGNvZGUsIGNvbnN0
IFN0cmluZyYgcmVhc29uKQoreworICAgIGlmIChtX3JlY2VpdmVkRGlkQ2xvc2UpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX2Nvbm5lY3Rpb24pCisgICAgICAgIHNvdXBfd2Vic29ja2V0
X2Nvbm5lY3Rpb25fY2xvc2UobV9jb25uZWN0aW9uLmdldCgpLCBjb2RlLCByZWFzb24udXRmOCgp
LmRhdGEoKSk7CisgICAgZWxzZSB7CisgICAgICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2Fu
Y2VsbGFibGUuZ2V0KCkpOworICAgICAgICBkaWRDbG9zZShjb2RlID8gY29kZSA6IFNPVVBfV0VC
U09DS0VUX0NMT1NFX0FCTk9STUFMLCByZWFzb24pOworICAgIH0KK30KKwordm9pZCBXZWJTb2Nr
ZXRUYXNrOjpjYW5jZWwoKQoreworICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFi
bGUuZ2V0KCkpOworCisgICAgaWYgKG1fY29ubmVjdGlvbikgeworICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV9jb25uZWN0aW9uLmdldCgpLCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCBudWxscHRyLCBudWxscHRyLCB0aGlzKTsKKyAgICAgICAgbV9jb25u
ZWN0aW9uID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6cmVzdW1l
KCkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvV2ViU29ja2V0VGFza1NvdXAuaCBiL1NvdXJjZS9XZWJL
aXQvTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJTb2NrZXRUYXNrU291cC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43MTJlZTZhYzIwMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJTb2NrZXRUYXNrU291cC5oCkBA
IC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBJUEMgeworY2xhc3MgRGF0YVJl
ZmVyZW5jZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBOZXR3b3JrU29ja2V0Q2hh
bm5lbDsKKworY2xhc3MgV2ViU29ja2V0VGFzayB7CitwdWJsaWM6CisgICAgV2ViU29ja2V0VGFz
ayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYsIFNvdXBTZXNzaW9uKiwgU291cE1lc3NhZ2UqLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sKTsKKyAgICB+V2ViU29ja2V0VGFzaygpOworCisgICAgdm9pZCBz
ZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7Cisg
ICAgdm9pZCBzZW5kRGF0YShjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKCk+JiYpOworICAgIHZvaWQgY2xvc2UoaW50MzJfdCBjb2RlLCBjb25zdCBTdHJp
bmcmIHJlYXNvbik7CisKKyAgICB2b2lkIGNhbmNlbCgpOworICAgIHZvaWQgcmVzdW1lKCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBkaWRDb25uZWN0KEdSZWZQdHI8U291cFdlYnNvY2tldENvbm5l
Y3Rpb24+JiYpOworICAgIHZvaWQgZGlkRmFpbChjb25zdCBTdHJpbmcmIHJlYXNvbik7CisgICAg
dm9pZCBkaWRDbG9zZSh1bnNpZ25lZCBzaG9ydCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbik7
CisKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUNhbGxiYWNrKFdlYlNvY2tldFRh
c2sqLCBTb3VwV2Vic29ja2V0RGF0YVR5cGUsIEdCeXRlcyopOworICAgIHN0YXRpYyB2b2lkIGRp
ZFJlY2VpdmVFcnJvckNhbGxiYWNrKFdlYlNvY2tldFRhc2sqLCBHRXJyb3IqKTsKKyAgICBzdGF0
aWMgdm9pZCBkaWRDbG9zZUNhbGxiYWNrKFdlYlNvY2tldFRhc2sqKTsKKworICAgIE5ldHdvcmtT
b2NrZXRDaGFubmVsJiBtX2NoYW5uZWw7CisgICAgR1JlZlB0cjxTb3VwV2Vic29ja2V0Q29ubmVj
dGlvbj4gbV9jb25uZWN0aW9uOworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxlPiBtX2NhbmNlbGxh
YmxlOworICAgIGJvb2wgbV9yZWNlaXZlZERpZEZhaWwgeyBmYWxzZSB9OworICAgIGJvb2wgbV9y
ZWNlaXZlZERpZENsb3NlIHsgZmFsc2UgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJLaXQv
U291cmNlc0dUSy50eHQKaW5kZXggZDNmZWEwMWIyOGIuLmQ5YTBhZWM2ODZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNl
c0dUSy50eHQKQEAgLTQyLDYgKzQyLDcgQEAgTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJv
Y2Vzc1NvdXAuY3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291cC5jcHAK
IE5ldHdvcmtQcm9jZXNzL3NvdXAvUmVtb3RlTmV0d29ya2luZ0NvbnRleHRTb3VwLmNwcAogTmV0
d29ya1Byb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVzdElucHV0U3RyZWFtLmNwcAorTmV0d29y
a1Byb2Nlc3Mvc291cC9XZWJTb2NrZXRUYXNrU291cC5jcHAKIAogTmV0d29ya1Byb2Nlc3Mvd2Vi
cnRjL0xpYldlYlJUQ1NvY2tldENsaWVudC5jcHAKIE5ldHdvcmtQcm9jZXNzL3dlYnJ0Yy9OZXR3
b3JrUlRDTW9uaXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHAKaW5kZXggYmMyMjJlNDRlZmMuLmUzYTIzYTQ0YWE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRD
aGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2Nr
ZXRDaGFubmVsLmNwcApAQCAtNjcsOCArNjcsNyBAQCB1aW50NjRfdCBXZWJTb2NrZXRDaGFubmVs
OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0CiAKIFN0cmluZyBXZWJTb2NrZXRD
aGFubmVsOjpzdWJwcm90b2NvbCgpCiB7Ci0gICAgLy8gRklYTUU6IHN1cHBvcnQgc3VicHJvdG9j
b2wuCi0gICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIG1fc3VicHJvdG9jb2wu
aXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogbV9zdWJwcm90b2NvbDsKIH0KIAogU3RyaW5nIFdl
YlNvY2tldENoYW5uZWw6OmV4dGVuc2lvbnMoKQpAQCAtMTYyLDcgKzE2MSw3IEBAIHZvaWQgV2Vi
U29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCgpCiAgICAgTWVzc2FnZVNlbmRlcjo6c2VuZChNZXNz
YWdlczo6TmV0d29ya1NvY2tldENoYW5uZWw6OkNsb3NlIHsgMCwgeyB9IH0pOwogfQogCi12b2lk
IFdlYlNvY2tldENoYW5uZWw6OmRpZENvbm5lY3QoKQordm9pZCBXZWJTb2NrZXRDaGFubmVsOjpk
aWRDb25uZWN0KGNvbnN0IFN0cmluZyYgc3VicHJvdG9jb2wpCiB7CiAgICAgaWYgKG1faXNDbG9z
aW5nKQogICAgICAgICByZXR1cm47CkBAIC0xNzEsMTIgKzE3MCwxMyBAQCB2b2lkIFdlYlNvY2tl
dENoYW5uZWw6OmRpZENvbm5lY3QoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAobV9pc1N1
c3BlbmRlZCkgewotICAgICAgICBlbnF1ZXVlVGFzayhbdGhpc10gewotICAgICAgICAgICAgZGlk
Q29ubmVjdCgpOworICAgICAgICBlbnF1ZXVlVGFzayhbdGhpcywgc3VicHJvdG9jb2xdIHsKKyAg
ICAgICAgICAgIGRpZENvbm5lY3Qoc3VicHJvdG9jb2wpOwogICAgICAgICB9KTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIG1fc3VicHJvdG9jb2wgPSBzdWJwcm90b2NvbDsKICAgICBt
X2NsaWVudC0+ZGlkQ29ubmVjdCgpOwogfQogCkBAIC0yMzQsMjQgKzIzNCwyNSBAQCB2b2lkIFdl
YlNvY2tldENoYW5uZWw6OmRpZENsb3NlKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0cmlu
ZyYgcmVhc29uKQogICAgIG1fY2xpZW50LT5kaWRDbG9zZShtX2J1ZmZlcmVkQW1vdW50LCAobV9p
c0Nsb3NpbmcgfHwgY29kZSA9PSBXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50
Q29kZU5vcm1hbENsb3N1cmUpID8gV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbENsaWVudDo6Q2xv
c2luZ0hhbmRzaGFrZUNvbXBsZXRlIDogV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbENsaWVudDo6
Q2xvc2luZ0hhbmRzaGFrZUluY29tcGxldGUsIGNvZGUsIHJlYXNvbik7CiB9CiAKLXZvaWQgV2Vi
U29ja2V0Q2hhbm5lbDo6ZGlkRmFpbCgpCit2b2lkIFdlYlNvY2tldENoYW5uZWw6OmRpZEZhaWwo
Y29uc3QgU3RyaW5nJiByZWFzb24pCiB7CiAgICAgaWYgKCFtX2NsaWVudCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKG1faXNTdXNwZW5kZWQpIHsKLSAgICAgICAgZW5xdWV1ZVRhc2soW3Ro
aXNdIHsKLSAgICAgICAgICAgIGRpZEZhaWwoKTsKKyAgICAgICAgZW5xdWV1ZVRhc2soW3RoaXMs
IHJlYXNvbl0geworICAgICAgICAgICAgZGlkRmFpbChyZWFzb24pOwogICAgICAgICB9KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8vIEZJWE1FOiBkbyBzb21ldGhpbmcgd2l0aCBy
ZWFzb24uCiAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IoKTsKIH0KIAogdm9p
ZCBXZWJTb2NrZXRDaGFubmVsOjpuZXR3b3JrUHJvY2Vzc0NyYXNoZWQoKQogewotICAgIGRpZEZh
aWwoKTsKKyAgICBkaWRGYWlsKHsgfSk7CiB9CiAKIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6c3Vz
cGVuZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJT
b2NrZXRDaGFubmVsLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2Nr
ZXRDaGFubmVsLmgKaW5kZXggZTRkZTljMjY3ZjQuLmQ4YTZhYWMyMTEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmgKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC00
OSw3ICs0OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCiAgICAgdm9pZCBuZXR3b3JrUHJvY2Vzc0NyYXNo
ZWQoKTsKLSAgICB2b2lkIGRpZEZhaWwoKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29j
a2V0Q2hhbm5lbD46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldENoYW5uZWw+
OjpkZXJlZjsKQEAgLTc0LDEwICs3MywxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgZGVyZWZUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpIGZpbmFsIHsgZGVyZWYoKTsgfQogCiAgICAgLy8gTWVz
c2FnZSByZWNlaXZlcnMKLSAgICB2b2lkIGRpZENvbm5lY3QoKTsKKyAgICB2b2lkIGRpZENvbm5l
Y3QoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlVGV4dChjb25zdCBTdHJpbmcm
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVCaW5hcnlEYXRhKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5j
ZSYpOwogICAgIHZvaWQgZGlkQ2xvc2UodW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFN0cmluZyYpOwogCiAgICAgLy8gTWVzc2FnZVNl
bmRlcgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25z
dCBmaW5hbDsKQEAgLTg3LDYgKzg3LDcgQEAgcHJpdmF0ZToKIAogICAgIFdlYWtQdHI8V2ViQ29y
ZTo6RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgV2Vha1B0cjxXZWJDb3JlOjpXZWJTb2NrZXRD
aGFubmVsQ2xpZW50PiBtX2NsaWVudDsKKyAgICBTdHJpbmcgbV9zdWJwcm90b2NvbDsKICAgICBz
aXplX3QgbV9idWZmZXJlZEFtb3VudCB7IDAgfTsKICAgICBib29sIG1faXNDbG9zaW5nIHsgZmFs
c2UgfTsKICAgICBib29sIG1faXNTdXNwZW5kZWQgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwubWVz
c2FnZXMuaW4KaW5kZXggN2VmNDEzYmFhNjAuLjlhMWYwNWNmY2NiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwu
bWVzc2FnZXMuaW4KQEAgLTIxLDggKzIxLDkgQEAKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAogbWVzc2FnZXMg
LT4gV2ViU29ja2V0Q2hhbm5lbCB7Ci0gICAgRGlkQ29ubmVjdCgpCisgICAgRGlkQ29ubmVjdChT
dHJpbmcgc3VicHJvdG9jb2wpCiAgICAgRGlkQ2xvc2UodW5zaWduZWQgc2hvcnQgY29kZSwgU3Ry
aW5nIHJlYXNvbikKICAgICBEaWRSZWNlaXZlVGV4dChTdHJpbmcgbWVzc2FnZSkKICAgICBEaWRS
ZWNlaXZlQmluYXJ5RGF0YShJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSkKKyAgICBEaWRGYWlsKFN0
cmluZyByZWFzb24pCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372916</attachid>
            <date>2019-06-26 05:02:04 -0700</date>
            <delta_ts>2019-06-26 09:19:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-soup-websockets.diff</filename>
            <type>text/plain</type>
            <size>24245</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlM2M4NmY2Mzg4Zi4uZmE1MWRhZWM4NTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAxOS0wNi0yNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIFVzZSBsaWJzb3VwIFdlYlNvY2tldHMgQVBJCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkxNTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgY3JlYXRl
V2ViU29ja2V0Q2hhbm5lbCgpIGZyb20gdGhlIHByb3ZpZGVyIGFsc28gZm9yIGxpYnNvdXAgd2hl
biBXRUJLSVRfVVNFX1NPVVBfV0VCU09DS0VUUyBlbnYgdmFyIGlzIHNldC4KKworICAgICAgICAq
IE1vZHVsZXMvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKToKKwogMjAx
OS0wNi0yNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAg
ICAgICBbV2luQ2Fpcm9dIGluY29ycmVjdCBmb250IGhlaWdodCBmb3IgJ0dvb2dsZSBTYW5zIERp
c3BsYXknIGZvbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0
cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IDcxNDJlYTll
NjYxLi4wMGUyMDZkYTY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCkBAIC01
OCwxMiArNTgsMTkgQEAgUmVmPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGkKIAogICAgIGF1dG8mIGRvY3Vt
ZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KGNvbnRleHQpOwogCisgICAgYm9vbCBzaG91bGRQcm92
aWRlckNyZWF0ZVNvY2tldENoYW5uZWwgPSBmYWxzZTsKICNpZiBIQVZFKE5TVVJMU0VTU0lPTl9X
RUJTT0NLRVQpCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkuaXNOU1VSTFNlc3Npb25XZWJTb2NrZXRFbmFibGVkKCkpIHsKKyAgICBzaG91bGRQcm92aWRl
ckNyZWF0ZVNvY2tldENoYW5uZWwgPSBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0
dXJlcygpLmlzTlNVUkxTZXNzaW9uV2ViU29ja2V0RW5hYmxlZCgpOworI2VuZGlmCisjaWYgVVNF
KFNPVVApCisgICAgc2hvdWxkUHJvdmlkZXJDcmVhdGVTb2NrZXRDaGFubmVsID0gZ2V0ZW52KCJX
RUJLSVRfVVNFX1NPVVBfV0VCU09DS0VUUyIpOworI2VuZGlmCisKKyAgICBpZiAoc2hvdWxkUHJv
dmlkZXJDcmVhdGVTb2NrZXRDaGFubmVsKSB7CiAgICAgICAgIGlmIChhdXRvIGNoYW5uZWwgPSBw
cm92aWRlci5jcmVhdGVXZWJTb2NrZXRDaGFubmVsKGRvY3VtZW50LCBjbGllbnQpKQogICAgICAg
ICAgICAgcmV0dXJuIGNoYW5uZWwucmVsZWFzZU5vbk51bGwoKTsKICAgICB9Ci0jZW5kaWYKKwog
ICAgIHJldHVybiBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoZG9jdW1lbnQsIGNsaWVudCwgcHJv
dmlkZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRjYzhjMjE1OGI1Li44YWE3YjlhNDdjMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1MCBAQAorMjAxOS0wNi0yNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW1NPVVBdIFVzZSBsaWJzb3VwIFdlYlNvY2tl
dHMgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTkxNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBV
c2UgdGhlIG5ldyBXZWJTb2NrZXRzIGNvZGUgcGF0aCB0aGF0IGRlcGVuZHMgb24gcGxhdGZvcm0g
c3BlY2lmaWMgV2ViU29ja2V0cyBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgbGlic291cAorICAg
ICAgICBBUEkuIFRoaXMgaXMgYW4gaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBtYW51YWxseSB0ZXN0
ZWQgdXNpbmcgdGhlIGxheW91dCB0ZXN0cywgd2hpY2ggbW9zdCBvZiB0aGVtIGZhaWwgZHVlIHRv
CisgICAgICAgIG1pc3NpbmcgY29uc29sZSBtZXNzYWdlcywgbWlzc2luZyBmZWF0dXJlcyBpbiB0
aGUgbmV3IGNvZGUgcGF0aCBvciBkaWZmZXJlbmNlcyBpbiB0aGUgcGxhdGZvcm0KKyAgICAgICAg
aW1wbGVtZW50YXRpb24uIEl0IHdpbGwgYmUgZGlzYWJsZWQgYnkgZGVmYXVsdCB1bnRpbCBpdCdz
IGZlYXR1cmUgY29tcGxldGUgY29tcGFyZWQgdG8gdGhlIGludGVybmFsIFdlYktpdAorICAgICAg
ICBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2Nr
ZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1NvY2tldENoYW5uZWw6Ok5l
dHdvcmtTb2NrZXRDaGFubmVsKTogTnVsbCBjaGVjayBtX3NvY2tldCBiZWZvcmUgdXNpbmcgaXQs
IGJlY2F1c2UKKyAgICAgICAgY3JlYXRlV2ViU29ja2V0VGFzaygpIGNhbiByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1NvY2tldENoYW5uZWw6OmRpZENvbm5lY3QpOiBS
ZWNlaXZlIHRoZSBwcm90b2NvbCBhY2NlcHRlZCBieSB0aGUgc2VydmVyLgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrU29ja2V0Q2hhbm5lbDo6ZGlkRmFpbCk6IFNvbWV0aGluZyBmYWlsZWQgaW4g
dGhlIHNlcnZlciBzaWRlLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2NrZXRD
aGFubmVsLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvV2ViU29ja2V0VGFzay5oOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25Tb3VwOjpjcmVhdGVXZWJTb2NrZXRUYXNrKTogQ3Jl
YXRlIGEgV2ViU29ja2V0VGFzay4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdv
cmtTZXNzaW9uU291cC5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3NvdXAvV2ViU29ja2V0
VGFza1NvdXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0VGFzazo6V2Vi
U29ja2V0VGFzayk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFRhc2s6On5XZWJTb2NrZXRU
YXNrKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0VGFzazo6ZGlkQ29ubmVjdCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlNvY2tldFRhc2s6OmRpZFJlY2VpdmVNZXNzYWdlQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRUYXNrOjpkaWRSZWNlaXZlRXJyb3JDYWxsYmFjayk6
CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFRhc2s6OmRpZEZhaWwpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJTb2NrZXRUYXNrOjpkaWRDbG9zZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdDo6
V2ViU29ja2V0VGFzazo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRUYXNr
OjpzZW5kU3RyaW5nKToKKyAgICAgICAgKFdlYktpdDo6V2ViU29ja2V0VGFzazo6c2VuZERhdGEp
OgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRUYXNrOjpjbG9zZSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlNvY2tldFRhc2s6OmNhbmNlbCk6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tldFRh
c2s6OnJlc3VtZSk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJTb2NrZXRUYXNr
U291cC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlNvY2tl
dFRhc2suaC4KKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlNvY2tl
dENoYW5uZWw6OnN1YnByb3RvY29sKTogUmV0dXJuIHRoZSBwcm90b2NvbCBhY2NlcHRlZCBieSB0
aGUgc2VydmVyLgorICAgICAgICAoV2ViS2l0OjpXZWJTb2NrZXRDaGFubmVsOjpkaWRDb25uZWN0
KTogU2V0IHRoZSBwcm90b2NvbCBhY2NlcHRlZCBieSB0aGUgc2VydmVyLgorICAgICAgICAoV2Vi
S2l0OjpXZWJTb2NrZXRDaGFubmVsOjpkaWRGYWlsKTogSXQncyBub3cgYW4gSVBDIG1lc3NhZ2Ug
aGFuZGxlciBhbmQgcmVjZWl2ZXMgdGhlIHJlYXNvbiBhcyBwYXJhbWV0ZXIuCisgICAgICAgIChX
ZWJLaXQ6OldlYlNvY2tldENoYW5uZWw6Om5ldHdvcmtQcm9jZXNzQ3Jhc2hlZCk6IFBhc3MgZW1w
dHkgcmVhc29uLgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVs
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwubWVzc2Fn
ZXMuaW46CisKIDIwMTktMDYtMjUgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4K
IAogICAgICAgICBJbXBsZW1lbnQgYSBuZXcgU1BJIHRvIGluZm9ybSBjbGllbnRzIGFib3V0IEFw
cFNTTwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU29j
a2V0Q2hhbm5lbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2Nr
ZXRDaGFubmVsLmNwcAppbmRleCA5NDgzYWRhYmJjMS4uMjc0MTBjODkyYTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1NvY2tldENoYW5uZWwuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1NvY2tldENoYW5uZWwuY3Bw
CkBAIC01NSw5ICs1NSwxMCBAQCBOZXR3b3JrU29ja2V0Q2hhbm5lbDo6TmV0d29ya1NvY2tldENo
YW5uZWwoTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGNvbm5lYwogICAgICAgICByZXR1
cm47CiAKICAgICBtX3NvY2tldCA9IG1fc2Vzc2lvbi0+Y3JlYXRlV2ViU29ja2V0VGFzaygqdGhp
cywgcmVxdWVzdCwgcHJvdG9jb2wpOwotCi0gICAgbV9zZXNzaW9uLT5hZGRXZWJTb2NrZXRUYXNr
KCptX3NvY2tldCk7Ci0gICAgbV9zb2NrZXQtPnJlc3VtZSgpOworICAgIGlmIChtX3NvY2tldCkg
eworICAgICAgICBtX3Nlc3Npb24tPmFkZFdlYlNvY2tldFRhc2soKm1fc29ja2V0KTsKKyAgICAg
ICAgbV9zb2NrZXQtPnJlc3VtZSgpOworICAgIH0KIH0KIAogTmV0d29ya1NvY2tldENoYW5uZWw6
On5OZXR3b3JrU29ja2V0Q2hhbm5lbCgpCkBAIC05Niw5ICs5Nyw5IEBAIHZvaWQgTmV0d29ya1Nv
Y2tldENoYW5uZWw6OmNsb3NlKGludDMyX3QgY29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24pCiAg
ICAgZmluaXNoQ2xvc2luZ0lmUG9zc2libGUoKTsKIH0KIAotdm9pZCBOZXR3b3JrU29ja2V0Q2hh
bm5lbDo6ZGlkQ29ubmVjdCgpCit2b2lkIE5ldHdvcmtTb2NrZXRDaGFubmVsOjpkaWRDb25uZWN0
KGNvbnN0IFN0cmluZyYgc3VicHJvdG9jb2wpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViU29j
a2V0Q2hhbm5lbDo6RGlkQ29ubmVjdCB7IH0pOworICAgIHNlbmQoTWVzc2FnZXM6OldlYlNvY2tl
dENoYW5uZWw6OkRpZENvbm5lY3QgeyBzdWJwcm90b2NvbCB9KTsKIH0KIAogdm9pZCBOZXR3b3Jr
U29ja2V0Q2hhbm5lbDo6ZGlkUmVjZWl2ZVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtMTE3
LDYgKzExOCwxMSBAQCB2b2lkIE5ldHdvcmtTb2NrZXRDaGFubmVsOjpkaWRDbG9zZSh1bnNpZ25l
ZCBzaG9ydCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikKICAgICBmaW5pc2hDbG9zaW5nSWZQ
b3NzaWJsZSgpOwogfQogCit2b2lkIE5ldHdvcmtTb2NrZXRDaGFubmVsOjpkaWRGYWlsKGNvbnN0
IFN0cmluZyYgcmVhc29uKQoreworICAgIHNlbmQoTWVzc2FnZXM6OldlYlNvY2tldENoYW5uZWw6
OkRpZEZhaWwgeyByZWFzb24gfSk7Cit9CisKIElQQzo6Q29ubmVjdGlvbiogTmV0d29ya1NvY2tl
dENoYW5uZWw6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Jm1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jb25uZWN0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2NrZXRDaGFubmVsLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTb2NrZXRDaGFubmVsLmgKaW5kZXggZDA3Njkz
NzQ1ZmIuLmMzMjA0OWI4NDIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtTb2NrZXRDaGFubmVsLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrU29ja2V0Q2hhbm5lbC5oCkBAIC01OSwxMCArNTksMTEgQEAgcHVibGljOgog
ICAgIGZyaWVuZCBjbGFzcyBXZWJTb2NrZXRUYXNrOwogCiBwcml2YXRlOgotICAgIHZvaWQgZGlk
Q29ubmVjdCgpOworICAgIHZvaWQgZGlkQ29ubmVjdChjb25zdCBTdHJpbmcmIHN1YnByb3RvY29s
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVUZXh0KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZGlk
UmVjZWl2ZUJpbmFyeURhdGEoY29uc3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCk7CiAg
ICAgdm9pZCBkaWRDbG9zZSh1bnNpZ25lZCBzaG9ydCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNv
bik7CisgICAgdm9pZCBkaWRGYWlsKGNvbnN0IFN0cmluZyYgcmVhc29uKTsKIAogICAgIHZvaWQg
c2VuZFN0cmluZyhjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwog
ICAgIHZvaWQgc2VuZERhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZCgpPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvV2ViU29ja2V0VGFzay5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9XZWJTb2Nr
ZXRUYXNrLmgKaW5kZXggOTM5ZjYwMTg2MGQuLjNhNTlmZmE2YTFhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL1dlYlNvY2tldFRhc2suaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL1dlYlNvY2tldFRhc2suaApAQCAtMjcsNiArMjcsOCBAQAogCiAj
aWYgUExBVEZPUk0oQ09DT0EpICYmIEhBVkUoTlNVUkxTRVNTSU9OX1dFQlNPQ0tFVCkKICNpbmNs
dWRlICJXZWJTb2NrZXRUYXNrQ29jb2EuaCIKKyNlbGlmIFVTRShTT1VQKQorI2luY2x1ZGUgIldl
YlNvY2tldFRhc2tTb3VwLmgiCiAjZWxzZQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAu
Y3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9uU291
cC5jcHAKaW5kZXggYjI0ZTgzMWEyMjkuLjUzMzdmODQxN2U1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNwcApA
QCAtMjksNyArMjksOSBAQAogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMuaCIKICNpbmNsdWRlICJXZWJDb29raWVN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0VGFza1NvdXAuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL05ldHdvcmtTdG9yYWdlU2Vzc2lvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VS
ZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Tb3VwTmV0d29ya1Nlc3Npb24uaD4KICNpbmNs
dWRlIDxsaWJzb3VwL3NvdXAuaD4KIApAQCAtNjUsNCArNjcsMTUgQEAgdm9pZCBOZXR3b3JrU2Vz
c2lvblNvdXA6OmNsZWFyQ3JlZGVudGlhbHMoKQogI2VuZGlmCiB9CiAKK3N0ZDo6dW5pcXVlX3B0
cjxXZWJTb2NrZXRUYXNrPiBOZXR3b3JrU2Vzc2lvblNvdXA6OmNyZWF0ZVdlYlNvY2tldFRhc2so
TmV0d29ya1NvY2tldENoYW5uZWwmIGNoYW5uZWwsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKK3sKKyAgICBHVW5pcXVlUHRyPFNvdXBVUkk+
IHNvdXBVUkkgPSByZXF1ZXN0LmNyZWF0ZVNvdXBVUkkoKTsKKyAgICBpZiAoIXNvdXBVUkkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gc291cE1l
c3NhZ2UgPSBhZG9wdEdSZWYoc291cF9tZXNzYWdlX25ld19mcm9tX3VyaShTT1VQX01FVEhPRF9H
RVQsIHNvdXBVUkkuZ2V0KCkpKTsKKyAgICByZXF1ZXN0LnVwZGF0ZVNvdXBNZXNzYWdlKHNvdXBN
ZXNzYWdlLmdldCgpKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxXZWJTb2NrZXRUYXNr
PihjaGFubmVsLCBzb3VwU2Vzc2lvbigpLCBzb3VwTWVzc2FnZS5nZXQoKSwgcHJvdG9jb2wpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAuaAppbmRleCBkZDg2NGRkNjQyYy4u
YzMxMzA1NjgyNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrU2Vzc2lvblNvdXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmgKQEAgLTMxLDYgKzMxLDggQEAgdHlwZWRlZiBzdHJ1
Y3QgX1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorY2xh
c3MgTmV0d29ya1NvY2tldENoYW5uZWw7CitjbGFzcyBXZWJTb2NrZXRUYXNrOwogc3RydWN0IE5l
dHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzOwogCiBjbGFzcyBOZXR3b3JrU2Vzc2lvblNv
dXAgZmluYWwgOiBwdWJsaWMgTmV0d29ya1Nlc3Npb24gewpAQCAtNDYsNiArNDgsOCBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIE5ldHdvcmtTZXNzaW9uU291cChOZXR3b3JrUHJvY2VzcyYsIE5l
dHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiYpOwogCisgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYlNvY2tldFRhc2s+IGNyZWF0ZVdlYlNvY2tldFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwm
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdHJpbmcmIHByb3RvY29s
KSBvdmVycmlkZTsKKwogICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygpIG92ZXJyaWRlOwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYlNvY2tl
dFRhc2tTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9XZWJTb2Nr
ZXRUYXNrU291cC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmI1
MDJmYTA1MTBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9zb3VwL1dlYlNvY2tldFRhc2tTb3VwLmNwcApAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViU29ja2V0VGFza1NvdXAuaCIKKworI2luY2x1ZGUgIkRhdGFSZWZl
cmVuY2UuaCIKKyNpbmNsdWRlICJOZXR3b3JrU29ja2V0Q2hhbm5lbC5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvSFRUUFBhcnNlcnMuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJTb2NrZXRUYXNrOjpXZWJTb2NrZXRUYXNrKE5ldHdv
cmtTb2NrZXRDaGFubmVsJiBjaGFubmVsLCBTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3Nh
Z2UqIG1zZywgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKKyAgICA6IG1fY2hhbm5lbChjaGFubmVs
KQorICAgICwgbV9jYW5jZWxsYWJsZShhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXcoKSkpCit7
CisgICAgYXV0byBwcm90b2NvbExpc3QgPSBwcm90b2NvbC5zcGxpdCgnLCcpOworICAgIEdVbmlx
dWVQdHI8Y2hhcio+IHByb3RvY29sczsKKyAgICBpZiAoIXByb3RvY29sTGlzdC5pc0VtcHR5KCkp
IHsKKyAgICAgICAgcHJvdG9jb2xzLnJlc2V0KHN0YXRpY19jYXN0PGNoYXIqKj4oZ19uZXcwKGNo
YXIqLCBwcm90b2NvbExpc3Quc2l6ZSgpICsgMSkpKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7
CisgICAgICAgIGZvciAoYXV0byYgc3VicHJvdG9jb2wgOiBwcm90b2NvbExpc3QpCisgICAgICAg
ICAgICBwcm90b2NvbHMuZ2V0KClbaSsrXSA9IGdfc3RyZHVwKFdlYkNvcmU6OnN0cmlwTGVhZGlu
Z0FuZFRyYWlsaW5nSFRUUFNwYWNlcyhzdWJwcm90b2NvbCkudXRmOCgpLmRhdGEoKSk7CisgICAg
fQorICAgIHNvdXBfc2Vzc2lvbl93ZWJzb2NrZXRfY29ubmVjdF9hc3luYyhzZXNzaW9uLCBtc2cs
IG51bGxwdHIsIHByb3RvY29scy5nZXQoKSwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAgICAg
W10gKEdPYmplY3QqIHNlc3Npb24sIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgICAg
ICAgICAgR1JlZlB0cjxTb3VwV2Vic29ja2V0Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IGFkb3B0
R1JlZihzb3VwX3Nlc3Npb25fd2Vic29ja2V0X2Nvbm5lY3RfZmluaXNoKFNPVVBfU0VTU0lPTihz
ZXNzaW9uKSwgcmVzdWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgICAgIGlmIChnX2Vy
cm9yX21hdGNoZXMoZXJyb3IuZ2V0KCksIEdfSU9fRVJST1IsIEdfSU9fRVJST1JfQ0FOQ0VMTEVE
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBhdXRvKiB0YXNrID0gc3Rh
dGljX2Nhc3Q8V2ViU29ja2V0VGFzayo+KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGlmIChjb25u
ZWN0aW9uKQorICAgICAgICAgICAgICAgIHRhc2stPmRpZENvbm5lY3QoV1RGTW92ZShjb25uZWN0
aW9uKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdGFzay0+ZGlkRmFpbChT
dHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSk7CisgICAgICAgIH0sIHRoaXMpOworfQor
CitXZWJTb2NrZXRUYXNrOjp+V2ViU29ja2V0VGFzaygpCit7CisgICAgY2FuY2VsKCk7Cit9CisK
K3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkQ29ubmVjdChHUmVmUHRyPFNvdXBXZWJzb2NrZXRDb25u
ZWN0aW9uPiYmIGNvbm5lY3Rpb24pCit7CisgICAgbV9jb25uZWN0aW9uID0gV1RGTW92ZShjb25u
ZWN0aW9uKTsKKworI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA1NiwgMCkKKyAgICAvLyBVc2Ug
dGhlIHNhbWUgbWF4aW11bSBwYXlsb2FkIGxlbmd0aCBhcyBXZWJLaXQgaW50ZXJuYWwgaW1wbGVt
ZW50YXRpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgorICAgIHN0YXRpYyBjb25zdCB1
aW50NjRfdCBtYXhQYXlsb2FkTGVuZ3RoID0gVUlOVDY0X0MoMHg3RkZGRkZGRkZGRkZGRkZGKTsK
KyAgICBzb3VwX3dlYnNvY2tldF9jb25uZWN0aW9uX3NldF9tYXhfaW5jb21pbmdfcGF5bG9hZF9z
aXplKG1fY29ubmVjdGlvbi5nZXQoKSwgbWF4UGF5bG9hZExlbmd0aCk7CisjZW5kaWYKKworICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2Nvbm5lY3Rpb24uZ2V0KCksICJtZXNzYWdlIiwg
cmVpbnRlcnByZXRfY2FzdDxHQ2FsbGJhY2s+KGRpZFJlY2VpdmVNZXNzYWdlQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb25uZWN0aW9uLmdldCgpLCAi
ZXJyb3IiLCByZWludGVycHJldF9jYXN0PEdDYWxsYmFjaz4oZGlkUmVjZWl2ZUVycm9yQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb25uZWN0aW9uLmdl
dCgpLCAiY2xvc2VkIiwgcmVpbnRlcnByZXRfY2FzdDxHQ2FsbGJhY2s+KGRpZENsb3NlQ2FsbGJh
Y2spLCB0aGlzKTsKKworICAgIG1fY2hhbm5lbC5kaWRDb25uZWN0KHNvdXBfd2Vic29ja2V0X2Nv
bm5lY3Rpb25fZ2V0X3Byb3RvY29sKG1fY29ubmVjdGlvbi5nZXQoKSkpOworfQorCit2b2lkIFdl
YlNvY2tldFRhc2s6OmRpZFJlY2VpdmVNZXNzYWdlQ2FsbGJhY2soV2ViU29ja2V0VGFzayogdGFz
aywgU291cFdlYnNvY2tldERhdGFUeXBlIGRhdGFUeXBlLCBHQnl0ZXMqIG1lc3NhZ2UpCit7Cisg
ICAgaWYgKGdfY2FuY2VsbGFibGVfaXNfY2FuY2VsbGVkKHRhc2stPm1fY2FuY2VsbGFibGUuZ2V0
KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKGRhdGFUeXBlKSB7CisgICAgY2Fz
ZSBTT1VQX1dFQlNPQ0tFVF9EQVRBX1RFWFQ6CisgICAgICAgIHRhc2stPm1fY2hhbm5lbC5kaWRS
ZWNlaXZlVGV4dChTdHJpbmc6OmZyb21VVEY4KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihnX2J5
dGVzX2dldF9kYXRhKG1lc3NhZ2UsIG51bGxwdHIpKSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNPVVBfV0VCU09DS0VUX0RBVEFfQklOQVJZOiB7CisgICAgICAgIGdzaXplIGRhdGFTaXpl
OworICAgICAgICBhdXRvIGRhdGEgPSBnX2J5dGVzX2dldF9kYXRhKG1lc3NhZ2UsICZkYXRhU2l6
ZSk7CisgICAgICAgIHRhc2stPm1fY2hhbm5lbC5kaWRSZWNlaXZlQmluYXJ5RGF0YShzdGF0aWNf
Y2FzdDxjb25zdCB1aW50OF90Kj4oZGF0YSksIGRhdGFTaXplKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIH0KK30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpkaWRSZWNlaXZlRXJyb3JDYWxs
YmFjayhXZWJTb2NrZXRUYXNrKiB0YXNrLCBHRXJyb3IqIGVycm9yKQoreworICAgIGlmIChnX2Nh
bmNlbGxhYmxlX2lzX2NhbmNlbGxlZCh0YXNrLT5tX2NhbmNlbGxhYmxlLmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdGFzay0+ZGlkRmFpbChTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5t
ZXNzYWdlKSk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6ZGlkRmFpbChjb25zdCBTdHJpbmcm
IHJlYXNvbikKK3sKKyAgICBpZiAobV9yZWNlaXZlZERpZEZhaWwpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fcmVjZWl2ZWREaWRGYWlsID0gdHJ1ZTsKKyAgICBtX2NoYW5uZWwuZGlkRmFpbChy
ZWFzb24pOworICAgIGlmICghbV9jb25uZWN0aW9uKSB7CisgICAgICAgIGRpZENsb3NlKFNPVVBf
V0VCU09DS0VUX0NMT1NFX0FCTk9STUFMLCB7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHNvdXBfd2Vic29ja2V0X2Nvbm5lY3Rpb25fZ2V0X3N0YXRlKG1fY29ubmVjdGlv
bi5nZXQoKSkgPT0gU09VUF9XRUJTT0NLRVRfU1RBVEVfT1BFTikKKyAgICAgICAgZGlkQ2xvc2Uo
MCwgeyB9KTsKK30KKwordm9pZCBXZWJTb2NrZXRUYXNrOjpkaWRDbG9zZUNhbGxiYWNrKFdlYlNv
Y2tldFRhc2sqIHRhc2spCit7CisgICAgdGFzay0+ZGlkQ2xvc2Uoc291cF93ZWJzb2NrZXRfY29u
bmVjdGlvbl9nZXRfY2xvc2VfY29kZSh0YXNrLT5tX2Nvbm5lY3Rpb24uZ2V0KCkpLCBTdHJpbmc6
OmZyb21VVEY4KHNvdXBfd2Vic29ja2V0X2Nvbm5lY3Rpb25fZ2V0X2Nsb3NlX2RhdGEodGFzay0+
bV9jb25uZWN0aW9uLmdldCgpKSkpOworfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OmRpZENsb3Nl
KHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uKQoreworICAgIGlmICht
X3JlY2VpdmVkRGlkQ2xvc2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcmVjZWl2ZWREaWRD
bG9zZSA9IHRydWU7CisgICAgbV9jaGFubmVsLmRpZENsb3NlKGNvZGUsIHJlYXNvbik7Cit9CisK
K3ZvaWQgV2ViU29ja2V0VGFzazo6c2VuZFN0cmluZyhjb25zdCBTdHJpbmcmIHRleHQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjaykKK3sKKyAgICBpZiAobV9jb25uZWN0aW9u
ICYmIHNvdXBfd2Vic29ja2V0X2Nvbm5lY3Rpb25fZ2V0X3N0YXRlKG1fY29ubmVjdGlvbi5nZXQo
KSkgPT0gU09VUF9XRUJTT0NLRVRfU1RBVEVfT1BFTikKKyAgICAgICAgc291cF93ZWJzb2NrZXRf
Y29ubmVjdGlvbl9zZW5kX3RleHQobV9jb25uZWN0aW9uLmdldCgpLCB0ZXh0LnV0ZjgoKS5kYXRh
KCkpOworICAgIGNhbGxiYWNrKCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6c2VuZERhdGEo
Y29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+
JiYgY2FsbGJhY2spCit7CisgICAgaWYgKG1fY29ubmVjdGlvbiAmJiBzb3VwX3dlYnNvY2tldF9j
b25uZWN0aW9uX2dldF9zdGF0ZShtX2Nvbm5lY3Rpb24uZ2V0KCkpID09IFNPVVBfV0VCU09DS0VU
X1NUQVRFX09QRU4pCisgICAgICAgIHNvdXBfd2Vic29ja2V0X2Nvbm5lY3Rpb25fc2VuZF9iaW5h
cnkobV9jb25uZWN0aW9uLmdldCgpLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOworICAgIGNh
bGxiYWNrKCk7Cit9CisKK3ZvaWQgV2ViU29ja2V0VGFzazo6Y2xvc2UoaW50MzJfdCBjb2RlLCBj
b25zdCBTdHJpbmcmIHJlYXNvbikKK3sKKyAgICBpZiAobV9yZWNlaXZlZERpZENsb3NlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobV9jb25uZWN0aW9uKQorICAgICAgICBzb3VwX3dlYnNv
Y2tldF9jb25uZWN0aW9uX2Nsb3NlKG1fY29ubmVjdGlvbi5nZXQoKSwgY29kZSwgcmVhc29uLnV0
ZjgoKS5kYXRhKCkpOworICAgIGVsc2UgeworICAgICAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbCht
X2NhbmNlbGxhYmxlLmdldCgpKTsKKyAgICAgICAgZGlkQ2xvc2UoY29kZSA/IGNvZGUgOiBTT1VQ
X1dFQlNPQ0tFVF9DTE9TRV9BQk5PUk1BTCwgcmVhc29uKTsKKyAgICB9Cit9CisKK3ZvaWQgV2Vi
U29ja2V0VGFzazo6Y2FuY2VsKCkKK3sKKyAgICBnX2NhbmNlbGxhYmxlX2NhbmNlbChtX2NhbmNl
bGxhYmxlLmdldCgpKTsKKworICAgIGlmIChtX2Nvbm5lY3Rpb24pIHsKKyAgICAgICAgZ19zaWdu
YWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fY29ubmVjdGlvbi5nZXQoKSwgR19TSUdO
QUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVsbHB0ciwgdGhpcyk7CisgICAgICAgIG1f
Y29ubmVjdGlvbiA9IG51bGxwdHI7CisgICAgfQorfQorCit2b2lkIFdlYlNvY2tldFRhc2s6OnJl
c3VtZSgpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL1dlYlNvY2tldFRhc2tTb3VwLmggYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvV2ViU29ja2V0VGFza1NvdXAuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzEyZWU2YWMyMDAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvV2ViU29ja2V0VGFza1NvdXAu
aApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Cisj
aW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgorCituYW1lc3BhY2UgSVBDIHsKK2NsYXNzIERh
dGFSZWZlcmVuY2U7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgTmV0d29ya1NvY2tl
dENoYW5uZWw7CisKK2NsYXNzIFdlYlNvY2tldFRhc2sgeworcHVibGljOgorICAgIFdlYlNvY2tl
dFRhc2soTmV0d29ya1NvY2tldENoYW5uZWwmLCBTb3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdlKiwg
Y29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CisgICAgfldlYlNvY2tldFRhc2soKTsKKworICAgIHZv
aWQgc2VuZFN0cmluZyhjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYp
OworICAgIHZvaWQgc2VuZERhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZCgpPiYmKTsKKyAgICB2b2lkIGNsb3NlKGludDMyX3QgY29kZSwgY29uc3Qg
U3RyaW5nJiByZWFzb24pOworCisgICAgdm9pZCBjYW5jZWwoKTsKKyAgICB2b2lkIHJlc3VtZSgp
OworCitwcml2YXRlOgorICAgIHZvaWQgZGlkQ29ubmVjdChHUmVmUHRyPFNvdXBXZWJzb2NrZXRD
b25uZWN0aW9uPiYmKTsKKyAgICB2b2lkIGRpZEZhaWwoY29uc3QgU3RyaW5nJiByZWFzb24pOwor
ICAgIHZvaWQgZGlkQ2xvc2UodW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiByZWFz
b24pOworCisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VDYWxsYmFjayhXZWJTb2Nr
ZXRUYXNrKiwgU291cFdlYnNvY2tldERhdGFUeXBlLCBHQnl0ZXMqKTsKKyAgICBzdGF0aWMgdm9p
ZCBkaWRSZWNlaXZlRXJyb3JDYWxsYmFjayhXZWJTb2NrZXRUYXNrKiwgR0Vycm9yKik7CisgICAg
c3RhdGljIHZvaWQgZGlkQ2xvc2VDYWxsYmFjayhXZWJTb2NrZXRUYXNrKik7CisKKyAgICBOZXR3
b3JrU29ja2V0Q2hhbm5lbCYgbV9jaGFubmVsOworICAgIEdSZWZQdHI8U291cFdlYnNvY2tldENv
bm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gbV9jYW5j
ZWxsYWJsZTsKKyAgICBib29sIG1fcmVjZWl2ZWREaWRGYWlsIHsgZmFsc2UgfTsKKyAgICBib29s
IG1fcmVjZWl2ZWREaWRDbG9zZSB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNHVEsudHh0CmluZGV4IGQzZmVhMDFiMjhiLi5kOWEwYWVjNjg2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNHVEsudHh0CkBAIC00Miw2ICs0Miw3IEBAIE5ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29y
a1Byb2Nlc3NTb3VwLmNwcAogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vzc2lvblNvdXAu
Y3BwCiBOZXR3b3JrUHJvY2Vzcy9zb3VwL1JlbW90ZU5ldHdvcmtpbmdDb250ZXh0U291cC5jcHAK
IE5ldHdvcmtQcm9jZXNzL3NvdXAvV2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHAKK05l
dHdvcmtQcm9jZXNzL3NvdXAvV2ViU29ja2V0VGFza1NvdXAuY3BwCiAKIE5ldHdvcmtQcm9jZXNz
L3dlYnJ0Yy9MaWJXZWJSVENTb2NrZXRDbGllbnQuY3BwCiBOZXR3b3JrUHJvY2Vzcy93ZWJydGMv
TmV0d29ya1JUQ01vbml0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4IGJjMjIyZTQ0ZWZjLi5lM2EyM2E0
NGFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29j
a2V0Q2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2Vi
U29ja2V0Q2hhbm5lbC5jcHAKQEAgLTY3LDggKzY3LDcgQEAgdWludDY0X3QgV2ViU29ja2V0Q2hh
bm5lbDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAogCiBTdHJpbmcgV2ViU29j
a2V0Q2hhbm5lbDo6c3VicHJvdG9jb2woKQogewotICAgIC8vIEZJWE1FOiBzdXBwb3J0IHN1YnBy
b3RvY29sLgotICAgIHJldHVybiBlbXB0eVN0cmluZygpOworICAgIHJldHVybiBtX3N1YnByb3Rv
Y29sLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IG1fc3VicHJvdG9jb2w7CiB9CiAKIFN0cmlu
ZyBXZWJTb2NrZXRDaGFubmVsOjpleHRlbnNpb25zKCkKQEAgLTE2Miw3ICsxNjEsNyBAQCB2b2lk
IFdlYlNvY2tldENoYW5uZWw6OmRpc2Nvbm5lY3QoKQogICAgIE1lc3NhZ2VTZW5kZXI6OnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtTb2NrZXRDaGFubmVsOjpDbG9zZSB7IDAsIHsgfSB9KTsKIH0KIAot
dm9pZCBXZWJTb2NrZXRDaGFubmVsOjpkaWRDb25uZWN0KCkKK3ZvaWQgV2ViU29ja2V0Q2hhbm5l
bDo6ZGlkQ29ubmVjdChjb25zdCBTdHJpbmcmIHN1YnByb3RvY29sKQogewogICAgIGlmIChtX2lz
Q2xvc2luZykKICAgICAgICAgcmV0dXJuOwpAQCAtMTcxLDEyICsxNzAsMTMgQEAgdm9pZCBXZWJT
b2NrZXRDaGFubmVsOjpkaWRDb25uZWN0KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1f
aXNTdXNwZW5kZWQpIHsKLSAgICAgICAgZW5xdWV1ZVRhc2soW3RoaXNdIHsKLSAgICAgICAgICAg
IGRpZENvbm5lY3QoKTsKKyAgICAgICAgZW5xdWV1ZVRhc2soW3RoaXMsIHN1YnByb3RvY29sXSB7
CisgICAgICAgICAgICBkaWRDb25uZWN0KHN1YnByb3RvY29sKTsKICAgICAgICAgfSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKKyAgICBtX3N1YnByb3RvY29sID0gc3VicHJvdG9jb2w7CiAg
ICAgbV9jbGllbnQtPmRpZENvbm5lY3QoKTsKIH0KIApAQCAtMjM0LDI0ICsyMzQsMjUgQEAgdm9p
ZCBXZWJTb2NrZXRDaGFubmVsOjpkaWRDbG9zZSh1bnNpZ25lZCBzaG9ydCBjb2RlLCBjb25zdCBT
dHJpbmcmIHJlYXNvbikKICAgICBtX2NsaWVudC0+ZGlkQ2xvc2UobV9idWZmZXJlZEFtb3VudCwg
KG1faXNDbG9zaW5nIHx8IGNvZGUgPT0gV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6Q2xvc2VF
dmVudENvZGVOb3JtYWxDbG9zdXJlKSA/IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWxDbGllbnQ6
OkNsb3NpbmdIYW5kc2hha2VDb21wbGV0ZSA6IFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWxDbGll
bnQ6OkNsb3NpbmdIYW5kc2hha2VJbmNvbXBsZXRlLCBjb2RlLCByZWFzb24pOwogfQogCi12b2lk
IFdlYlNvY2tldENoYW5uZWw6OmRpZEZhaWwoKQordm9pZCBXZWJTb2NrZXRDaGFubmVsOjpkaWRG
YWlsKGNvbnN0IFN0cmluZyYgcmVhc29uKQogewogICAgIGlmICghbV9jbGllbnQpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChtX2lzU3VzcGVuZGVkKSB7Ci0gICAgICAgIGVucXVldWVUYXNr
KFt0aGlzXSB7Ci0gICAgICAgICAgICBkaWRGYWlsKCk7CisgICAgICAgIGVucXVldWVUYXNrKFt0
aGlzLCByZWFzb25dIHsKKyAgICAgICAgICAgIGRpZEZhaWwocmVhc29uKTsKICAgICAgICAgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogZG8gc29tZXRoaW5nIHdp
dGggcmVhc29uLgogICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZUVycm9yKCk7CiB9CiAK
IHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6bmV0d29ya1Byb2Nlc3NDcmFzaGVkKCkKIHsKLSAgICBk
aWRGYWlsKCk7CisgICAgZGlkRmFpbCh7IH0pOwogfQogCiB2b2lkIFdlYlNvY2tldENoYW5uZWw6
OnN1c3BlbmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViU29ja2V0Q2hhbm5lbC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2Vi
U29ja2V0Q2hhbm5lbC5oCmluZGV4IGU0ZGU5YzI2N2Y0Li5kOGE2YWFjMjExMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwuaApA
QCAtNDksNyArNDksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIAogICAgIHZvaWQgbmV0d29ya1Byb2Nlc3ND
cmFzaGVkKCk7Ci0gICAgdm9pZCBkaWRGYWlsKCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFdl
YlNvY2tldENoYW5uZWw+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXRDaGFu
bmVsPjo6ZGVyZWY7CkBAIC03NCwxMCArNzMsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRlcmVm
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwoKSBmaW5hbCB7IGRlcmVmKCk7IH0KIAogICAgIC8v
IE1lc3NhZ2UgcmVjZWl2ZXJzCi0gICAgdm9pZCBkaWRDb25uZWN0KCk7CisgICAgdm9pZCBkaWRD
b25uZWN0KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZVRleHQoY29uc3QgU3Ry
aW5nJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlQmluYXJ5RGF0YShjb25zdCBJUEM6OkRhdGFSZWZl
cmVuY2UmKTsKICAgICB2b2lkIGRpZENsb3NlKHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0
cmluZyYpOworICAgIHZvaWQgZGlkRmFpbChjb25zdCBTdHJpbmcmKTsKIAogICAgIC8vIE1lc3Nh
Z2VTZW5kZXIKICAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3QgZmluYWw7CkBAIC04Nyw2ICs4Nyw3IEBAIHByaXZhdGU6CiAKICAgICBXZWFrUHRyPFdl
YkNvcmU6OkRvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIFdlYWtQdHI8V2ViQ29yZTo6V2ViU29j
a2V0Q2hhbm5lbENsaWVudD4gbV9jbGllbnQ7CisgICAgU3RyaW5nIG1fc3VicHJvdG9jb2w7CiAg
ICAgc2l6ZV90IG1fYnVmZmVyZWRBbW91bnQgeyAwIH07CiAgICAgYm9vbCBtX2lzQ2xvc2luZyB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzU3VzcGVuZGVkIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlNvY2tldENoYW5uZWwubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFubmVs
Lm1lc3NhZ2VzLmluCmluZGV4IDdlZjQxM2JhYTYwLi45YTFmMDVjZmNjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL05ldHdvcmsvV2ViU29ja2V0Q2hhbm5lbC5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvTmV0d29yay9XZWJTb2NrZXRDaGFu
bmVsLm1lc3NhZ2VzLmluCkBAIC0yMSw4ICsyMSw5IEBACiAjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKIG1lc3Nh
Z2VzIC0+IFdlYlNvY2tldENoYW5uZWwgewotICAgIERpZENvbm5lY3QoKQorICAgIERpZENvbm5l
Y3QoU3RyaW5nIHN1YnByb3RvY29sKQogICAgIERpZENsb3NlKHVuc2lnbmVkIHNob3J0IGNvZGUs
IFN0cmluZyByZWFzb24pCiAgICAgRGlkUmVjZWl2ZVRleHQoU3RyaW5nIG1lc3NhZ2UpCiAgICAg
RGlkUmVjZWl2ZUJpbmFyeURhdGEoSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEpCisgICAgRGlkRmFp
bChTdHJpbmcgcmVhc29uKQogfQo=
</data>
<flag name="review"
          id="388700"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>