<?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>213177</bug_id>
          
          <creation_ts>2020-06-14 03:40:48 -0700</creation_ts>
          <short_desc>[GTK][WPE] Add API to allow applications to handle the HTTP authentication credential storage</short_desc>
          <delta_ts>2020-09-19 02:57:24 -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>
          
          
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>rexlsf99</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1662469</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-14 03:40:48 -0700</bug_when>
    <thetext>We depend on libsecret to handle credential persistent storage automatically, but apps might want to use their own storage. I think we could do something like this:

1. Add webkit_authentication_request_set_use_custom_credential_storage (or similar name) to let the request know that saving credentials is allowed but will be handled by user.
2. Add webkit_authentication_request_set_proposed_credential to set the credentials read by application from persistent storage (for apps that want to show the dialog, other prefer to just authenticate without showing the dialog prefilled).
3. When using custom credential storage the user keeps a ref of the request but returns FALSE from authenticate signal to let WebKit handle the dialog (or just TRUE to authenticate with storage credentials)
4. We add a new CredentialPersistence type CredentialPersistenceHandledByUser to let the network process know and avoid storing the credentials using libsecret.
5. On authentication success the request emits WebKitAuthenticationRequest::authenticated signal with the accepted credentials

With this approach the the auhentication request would still have the proposed credential read from persistent storage by libsecret. Apps might decide to always ignore the proposed credentials when using custom storage. Another alternative would be to add a setting to the WebContext to globally disable the persistent storage using libsecret, then we wouldn&apos;t need to the webkit_authentication_request_set_use_custom_credential_storage().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662487</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-06-14 07:03:17 -0700</bug_when>
    <thetext>Sounds good to me.

&gt; With this approach the the auhentication request would still have the
&gt; proposed credential read from persistent storage by libsecret. Apps might
&gt; decide to always ignore the proposed credentials when using custom storage.

I think if apps will write to custom storage, they probably also want to read from custom storage and ignore any credentials managed by WebKit... right?

&gt; Another alternative would be to add a setting to the WebContext to globally
&gt; disable the persistent storage using libsecret, then we wouldn&apos;t need to the
&gt; webkit_authentication_request_set_use_custom_credential_storage().

Hm, either way seems fine to me... keeping everything in WebKitAuthenticationRequest seems nice, to keep related APIs in one place. On the other hand, it probably does make more sense as a global setting rather than a per-request setting. I doubt any app would want to sometimes use WebKit storage for some requests and sometimes use custom storage for other requests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662563</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-15 00:34:03 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #1)
&gt; Sounds good to me.
&gt; 
&gt; &gt; With this approach the the auhentication request would still have the
&gt; &gt; proposed credential read from persistent storage by libsecret. Apps might
&gt; &gt; decide to always ignore the proposed credentials when using custom storage.
&gt; 
&gt; I think if apps will write to custom storage, they probably also want to
&gt; read from custom storage and ignore any credentials managed by WebKit...
&gt; right?

Exactly, the thing is that with API to auth request, the decision is made too late and the credentials have already been read by WebKit using libsecret. It&apos;s not a problem, because apps handling storage can just ignore the proposed credentials.

&gt; &gt; Another alternative would be to add a setting to the WebContext to globally
&gt; &gt; disable the persistent storage using libsecret, then we wouldn&apos;t need to the
&gt; &gt; webkit_authentication_request_set_use_custom_credential_storage().
&gt; 
&gt; Hm, either way seems fine to me... keeping everything in
&gt; WebKitAuthenticationRequest seems nice, to keep related APIs in one place.
&gt; On the other hand, it probably does make more sense as a global setting
&gt; rather than a per-request setting. I doubt any app would want to sometimes
&gt; use WebKit storage for some requests and sometimes use custom storage for
&gt; other requests.

Right, that&apos;s a good point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662655</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-06-15 08:22:16 -0700</bug_when>
    <thetext>Both options seem almost equally good, but since we have to pick one, I guess I would slightly favor WebKitWebContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665314</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-23 02:01:58 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #3)
&gt; Both options seem almost equally good, but since we have to pick one, I
&gt; guess I would slightly favor WebKitWebContext.

I decided to do both in the end:

  - I added a &quot;global&quot; setting to disable persistent credential storage (but to website data manager instead of web context). This way apps can simply disable persistent credential storage even if they are not going to handle the credentials at all.

  - Added webkit_authentication_request_set_proposed_credential() that allows apps to set the proposed credential from their own storage.

  - Added WebKitAuthenticationRequest::authenticated signal. Emitted when the authentication success with the accepted credentials to allow applications to save them.

I have found two problems when starting to use this API in epiphany:

  1- Already remembered password will be lost from the user point of view. I&apos;m not sure it&apos;s possible to write a migrator that reads the webkit passwords and stores them in ephy.

  2- We need to get the stored credentials synchronously, since we need to decide whether to return TRUE (when we have credentials and authenticate without showing the dialog) or FALSE to show the dialog. I don&apos;t know how to do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665340</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-23 05:26:32 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; (In reply to Michael Catanzaro from comment #3)
&gt; &gt; Both options seem almost equally good, but since we have to pick one, I
&gt; &gt; guess I would slightly favor WebKitWebContext.
&gt; 
&gt; I decided to do both in the end:
&gt; 
&gt;   - I added a &quot;global&quot; setting to disable persistent credential storage (but
&gt; to website data manager instead of web context). This way apps can simply
&gt; disable persistent credential storage even if they are not going to handle
&gt; the credentials at all.
&gt; 
&gt;   - Added webkit_authentication_request_set_proposed_credential() that
&gt; allows apps to set the proposed credential from their own storage.
&gt; 
&gt;   - Added WebKitAuthenticationRequest::authenticated signal. Emitted when
&gt; the authentication success with the accepted credentials to allow
&gt; applications to save them.

Also added webkit_authentication_request_set_can_save_credentials() so that the auth dialog shows the remember checkbox even when persistent storage is disabled in WebKit.

&gt; I have found two problems when starting to use this API in epiphany:
&gt; 
&gt;   1- Already remembered password will be lost from the user point of view.
&gt; I&apos;m not sure it&apos;s possible to write a migrator that reads the webkit
&gt; passwords and stores them in ephy.
&gt; 
&gt;   2- We need to get the stored credentials synchronously, since we need to
&gt; decide whether to return TRUE (when we have credentials and authenticate
&gt; without showing the dialog) or FALSE to show the dialog. I don&apos;t know how to
&gt; do this.

I managed to make 2 work, by always assuming we have credentials saved and returning TRUE to not show the dialog. If we finally get the credentials we just authenticate, otherwise we force a retry and then we check it&apos;s a retry and return FALSE to show the dialog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665344</commentid>
    <comment_count>6</comment_count>
      <attachid>402549</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-23 05:51:09 -0700</bug_when>
    <thetext>Created attachment 402549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665347</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-06-23 05:52:16 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665393</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-06-23 08:33:38 -0700</bug_when>
    <thetext>&gt; 1- Already remembered password will be lost from the user point of view. I&apos;m not sure it&apos;s possible to write a migrator that reads the webkit passwords and stores them in ephy.

It&apos;s impossible, because there&apos;s no way to tell which passwords were saved by WebKit. That&apos;s the problem with using the default network schema: all the credentials are &quot;leaked&quot;. The only way to clean them up is to delete everything using the default schema, but that would delete credentials saved by random apps. Well, you could write a migrator that would migrate *every* secret, but it would necessarily migrate passwords saved by random apps, so I don&apos;t think it&apos;s a good idea. I would treat all previous HTTP auth passwords as permanently lost.

It would be nice for WebKit to stop using the default schema altogether when built with USE(GTK4).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665394</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-06-23 08:36:45 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #5) 
&gt; I managed to make 2 work, by always assuming we have credentials saved and
&gt; returning TRUE to not show the dialog. If we finally get the credentials we
&gt; just authenticate, otherwise we force a retry and then we check it&apos;s a retry
&gt; and return FALSE to show the dialog.

I think this is OK, but it should be documented clearly, because it&apos;s going to be confusing for everyone if the documentation doesn&apos;t indicate how to do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665467</commentid>
    <comment_count>10</comment_count>
      <attachid>402549</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-06-23 11:42:39 -0700</bug_when>
    <thetext>Comment on attachment 402549
Patch

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

Good API design. Good test (very comprehensive). Thanks for handling this.

&gt; Source/WebKit/NetworkProcess/soup/NetworkProcessSoup.cpp:187
&gt; +    if (auto* session = networkSession(sessionID))
&gt; +        static_cast&lt;NetworkSessionSoup&amp;&gt;(*session).setPersistentCredentialStorageEnabled(enabled);

Can we ASSERT() here that session is nonnull?

&gt; Source/WebKit/UIProcess/API/glib/WebKitAuthenticationRequest.cpp:198
&gt; + * if private browsing is enabled or persistent credential storage has been

if private browsing is enabled, or if persistent credential storage has been

&gt; Source/WebKit/UIProcess/API/glib/WebKitAuthenticationRequest.cpp:229
&gt; + * This should be used by applications handlig their own credentials

handling

&gt; Source/WebKit/UIProcess/API/glib/WebKitAuthenticationRequest.cpp:277
&gt; + * stored from a previous session. This should only be used by applications
&gt; + * handling their own credential storage, when using the default WebKit credential
&gt; + * storage webkit_authentication_request_get_proposed_credential() already contains
&gt; + * previously stored credentials.

Sounds like: &quot;this should only be used when handling own credential storage and when default credential storage contains previously stored credentials,&quot; which is not what you meant.

Fix: &quot;This should only be used by applications handling their own credential storage. (When using the default WebKit credential storage, webkit_authentication_request_get_proposed_credential() already contains previously-stored credentials.)

&gt; Source/WebKit/UIProcess/API/glib/WebKitAuthenticationRequest.cpp:278
&gt; + * Passing a %NULL @credential will clear the proposed credential.

When might you want to clear the proposed credential?

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:165
&gt; -    g_assert_true(test-&gt;authenticationCancelledReceived);
&gt; +    g_assert_true(test-&gt;m_authenticationCancelledReceived);

How about also checking: g_assert_false(test-&gt;m_authenticationSucceededReceived)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665660</commentid>
    <comment_count>11</comment_count>
      <attachid>402549</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-24 00:53:36 -0700</bug_when>
    <thetext>Comment on attachment 402549
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/glib/WebKitAuthenticationRequest.cpp:278
&gt;&gt; + * Passing a %NULL @credential will clear the proposed credential.
&gt; 
&gt; When might you want to clear the proposed credential?

When using the internal credential storage and you don&apos;t want the dialog to be pre-filled, for example.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:165
&gt;&gt; +    g_assert_true(test-&gt;m_authenticationCancelledReceived);
&gt; 
&gt; How about also checking: g_assert_false(test-&gt;m_authenticationSucceededReceived)?

We are doing it below, I just forgot to remove this one.

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestAuthentication.cpp:174
&gt; +    g_assert_true(test-&gt;m_authenticationCancelledReceived);
&gt; +    g_assert_false(test-&gt;m_authenticationSucceededReceived);

Here, it&apos;s the same check at the same point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665661</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-24 00:55:27 -0700</bug_when>
    <thetext>Committed r263444: &lt;https://trac.webkit.org/changeset/263444&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402549</attachid>
            <date>2020-06-23 05:51:09 -0700</date>
            <delta_ts>2020-06-23 11:42:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-auth-custom-credential-storage.diff</filename>
            <type>text/plain</type>
            <size>58200</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggY2RlZjcwYmFiZjdmLi4yMjgzMWM1ZTY5ODcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNjggQEAKKzIwMjAtMDYtMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gQWRkIEFQSSB0byBhbGxvdyBhcHBsaWNhdGlv
bnMgdG8gaGFuZGxlIHRoZSBIVFRQIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWwgc3RvcmFnZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMTc3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEFQSSB0
byBkaXNhYmxlIHRoZSBpbnRlcm5hbCBjcmVkZW50aWFsIHN0b3JhZ2Ugc3VwcG9ydCB3aGVuIGJ1
aWxkaW5nIHdpdGggbGlic2VjcmV0LiBBbmQgYWRkIG5ldyBBUEkgdG8KKyAgICAgICAgV2ViS2l0
QXV0aGVudGljYXRpb25SZXF1ZXN0IHRvIGFsbG93IGFwcGxpY2F0aW9ucyB0byB1c2UgdGhlaXIg
b3duIGNyZWRlbnRpYWxzIHN0b3JhZ2U6CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Nlc3Npb25DcmVhdGlv
blBhcmFtZXRlcnM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWNvZGUpOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNz
L05ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmg6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrU291cDo6cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmF1dGhlbnRpY2F0ZSk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlQXV0aGVudGlj
YXRlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkR2V0SGVhZGVy
cyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmg6
CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0UGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vz
c2lvblNvdXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrU2Vzc2lvblNvdXA6Ok5ldHdv
cmtTZXNzaW9uU291cCk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vz
c2lvblNvdXAuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0LmNwcDoKKyAgICAgICAgKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdERp
c3Bvc2UpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2xhc3NfaW5p
dCk6CisgICAgICAgICh3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RDcmVhdGUpOgorICAgICAg
ICAod2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0RGlkQXV0aGVudGljYXRlKToKKyAgICAgICAg
KHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdEdldFByb3Bvc2VkQ3JlZGVudGlhbCk6CisgICAg
ICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscyk6
CisgICAgICAgICh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9zZXRfY2FuX3NhdmVfY3Jl
ZGVudGlhbHMpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3By
b3Bvc2VkX2NyZWRlbnRpYWwpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3Rfc2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwpOgorICAgICAgICAod2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlKToKKyAgICAgICAgKHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2NhbmNlbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh3ZWJraXRXZWJWaWV3Q29tcGxldGVBdXRo
ZW50aWNhdGlvblJlcXVlc3QpOgorICAgICAgICAod2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKToK
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdMb2FkRmFpbGVkKToKKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdMb2FkRmFpbGVkV2l0aFRMU0Vycm9ycyk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3SGFuZGxl
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ2xpYi9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkKToKKyAg
ICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfcGVyc2lzdGVudF9jcmVkZW50
aWFsX3N0b3JhZ2VfZW5hYmxlZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
QXV0aGVudGljYXRpb25EaWFsb2cuY3BwOgorICAgICAgICAod2Via2l0QXV0aGVudGljYXRpb25E
aWFsb2dJbml0aWFsaXplKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9X
ZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dw
ZS9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dw
ZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRl
RGF0YS9XZWJzaXRlRGF0YVN0b3JlLmg6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3Rv
cmU6OnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgY29uc3QpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9zb3VwL1dlYnNpdGVEYXRhU3RvcmVTb3VwLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6cGxhdGZvcm1TZXROZXR3b3JrUGFyYW1l
dGVycyk6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhU3RvcmU6OnNldFBlcnNpc3RlbnRD
cmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9zb3VwL1dlYlBy
b2Nlc3NQb29sU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NQb29sOjpwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzcyk6CisKIDIwMjAtMDYtMjIgIENhcmxvcyBHYXJj
aWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gQWRk
IEFQSSB0byBjb25maWd1cmUgYW5kIGhhbmRsZSBET00gY2FjaGUgdG8gV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmgKaW5kZXggM2Y5OTZhOWFkNDdmLi43ZmI5ZjdiYTE3ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTQzOCw2ICs0MzgsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0SWdub3JlVExTRXJyb3JzKGJvb2wpOwogICAgIHZvaWQgdXNlclBy
ZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICB2b2lk
IHNldE5ldHdvcmtQcm94eVNldHRpbmdzKGNvbnN0IFdlYkNvcmU6OlNvdXBOZXR3b3JrUHJveHlT
ZXR0aW5ncyYpOworICAgIHZvaWQgc2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZChQQUw6OlNlc3Npb25JRCwgYm9vbCk7CiAjZW5kaWYKIAogI2lmIFVTRShDVVJMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2Fn
ZXMuaW4KaW5kZXggMDhmMDcwNjRhOGUwLi5kMmM4NjI4ZDdkYTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpA
QCAtMzIsNiArMzIsNyBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZl
ciB7CiAgICAgVXNlclByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoVmVjdG9yPFN0cmluZz4gbGFu
Z3VhZ2VzKQogICAgIFNldE5ldHdvcmtQcm94eVNldHRpbmdzKHN0cnVjdCBXZWJDb3JlOjpTb3Vw
TmV0d29ya1Byb3h5U2V0dGluZ3Mgc2V0dGluZ3MpCiAgICAgUHJlZmV0Y2hETlMoU3RyaW5nIGhv
c3RuYW1lKQorICAgIFNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoUEFMOjpT
ZXNzaW9uSUQgc2Vzc2lvbklELCBib29sIGVuYWJsZWQpCiAjZW5kaWYKIAogI2lmIFVTRShDVVJM
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lv
bkNyZWF0aW9uUGFyYW1ldGVycy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAppbmRleCAzZDUxODBhZGJiMWYuLjNk
ODNjZDIzNmJhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVycy5jcHAKQEAgLTYwLDYg
KzYwLDcgQEAgdm9pZCBOZXR3b3JrU2Vzc2lvbkNyZWF0aW9uUGFyYW1ldGVyczo6ZW5jb2RlKElQ
Qzo6RW5jb2RlciYgZW5jb2RlcikgY29uc3QKICNpZiBVU0UoU09VUCkKICAgICBlbmNvZGVyIDw8
IGNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aDsKICAgICBlbmNvZGVyIDw8IGNvb2tpZVBlcnNp
c3RlbnRTdG9yYWdlVHlwZTsKKyAgICBlbmNvZGVyIDw8IHBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQ7CiAjZW5kaWYKICNpZiBVU0UoQ1VSTCkKICAgICBlbmNvZGVyIDw8IGNvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlRmlsZTsKQEAgLTE2Miw2ICsxNjMsMTEgQEAgT3B0aW9uYWw8TmV0
d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM+IE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJh
bWV0ZXJzOjpkZWMKICAgICBkZWNvZGVyID4+IGNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZTsK
ICAgICBpZiAoIWNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIE9wdGlvbmFsPGJvb2w+IHBlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQ7CisgICAgZGVjb2RlciA+PiBwZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkOworICAgIGlmICghcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICNlbmRpZgogCiAjaWYgVVNFKENVUkwpCkBAIC0y
NzIsNiArMjc4LDcgQEAgT3B0aW9uYWw8TmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnM+
IE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzOjpkZWMKICNpZiBVU0UoU09VUCkKICAg
ICAgICAgLCBXVEZNb3ZlKCpjb29raWVQZXJzaXN0ZW50U3RvcmFnZVBhdGgpCiAgICAgICAgICwg
V1RGTW92ZSgqY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlKQorICAgICAgICAsIFdURk1vdmUo
KnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQpCiAjZW5kaWYKICNpZiBVU0UoQ1VS
TCkKICAgICAgICAgLCBXVEZNb3ZlKCpjb29raWVQZXJzaXN0ZW50U3RvcmFnZUZpbGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uQ3JlYXRp
b25QYXJhbWV0ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmgKaW5kZXggN2Q0MmFhNGJmMzQ4Li5mNjc3NDU1MGEyNDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb25D
cmVhdGlvblBhcmFtZXRlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzLmgKQEAgLTcyLDYgKzcyLDcgQEAgc3RydWN0
IE5ldHdvcmtTZXNzaW9uQ3JlYXRpb25QYXJhbWV0ZXJzIHsKICNpZiBVU0UoU09VUCkKICAgICBT
dHJpbmcgY29va2llUGVyc2lzdGVudFN0b3JhZ2VQYXRoOwogICAgIFNvdXBDb29raWVQZXJzaXN0
ZW50U3RvcmFnZVR5cGUgY29va2llUGVyc2lzdGVudFN0b3JhZ2VUeXBlIHsgU291cENvb2tpZVBl
cnNpc3RlbnRTdG9yYWdlVHlwZTo6VGV4dCB9OworICAgIGJvb2wgcGVyc2lzdGVudENyZWRlbnRp
YWxTdG9yYWdlRW5hYmxlZCB7IHRydWUgfTsKICNlbmRpZgogI2lmIFVTRShDVVJMKQogICAgIFN0
cmluZyBjb29raWVQZXJzaXN0ZW50U3RvcmFnZUZpbGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKaW5kZXgg
MThhMjI5YzFhNDQ3Li5jNGQxMzIzNzk4YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAKQEAgLTQ2MSw2
ICs0NjEsMTEgQEAgYm9vbCBOZXR3b3JrRGF0YVRhc2tTb3VwOjp0bHNDb25uZWN0aW9uQWNjZXB0
Q2VydGlmaWNhdGUoR1Rsc0NlcnRpZmljYXRlKiBjZXJ0aWYKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK2Jvb2wgTmV0d29ya0RhdGFUYXNrU291cDo6cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdl
RW5hYmxlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9u
U291cCY+KCptX3Nlc3Npb24pLnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKTsK
K30KKwogdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjphcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1
ZXN0KFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBpZiAobV91c2VyLmlzRW1wdHko
KSAmJiBtX3Bhc3N3b3JkLmlzRW1wdHkoKSkKQEAgLTUzMSw3ICs1MzYsNyBAQCB2b2lkIE5ldHdv
cmtEYXRhVGFza1NvdXA6OmF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNo
YWxsZW5nZSkKICAgICAvLyBvZiBhbGwgcmVxdWVzdCBsYXRlbmN5LCB2ZXJzdXMgYSBvbmUtdGlt
ZSBsYXRlbmN5IGZvciB0aGUgc21hbGwgc3Vic2V0IG9mIHJlcXVlc3RzIHRoYXQKICAgICAvLyB1
c2UgSFRUUCBhdXRoZW50aWNhdGlvbi4gSW4gdGhlIGVuZCwgdGhpcyBkb2Vzbid0IG1hdHRlciBt
dWNoLCBiZWNhdXNlIHBlcnNpc3RlbnQgY3JlZGVudGlhbHMKICAgICAvLyB3aWxsIGJlY29tZSBz
ZXNzaW9uIGNyZWRlbnRpYWxzIGFmdGVyIHRoZSBmaXJzdCB1c2UuCi0gICAgaWYgKG1fc3RvcmVk
Q3JlZGVudGlhbHNQb2xpY3kgPT0gU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OlVzZSkgeworICAg
IGlmIChtX3N0b3JlZENyZWRlbnRpYWxzUG9saWN5ID09IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5
OjpVc2UgJiYgcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpKSB7CiAgICAgICAg
IGF1dG8gcHJvdGVjdGlvblNwYWNlID0gY2hhbGxlbmdlLnByb3RlY3Rpb25TcGFjZSgpOwogICAg
ICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLT5nZXRDcmVkZW50aWFsRnJv
bVBlcnNpc3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFjZSwgbV9jYW5jZWxsYWJsZS5nZXQoKSwK
ICAgICAgICAgICAgIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGF1dGhD
aGFsbGVuZ2UgPSBXVEZNb3ZlKGNoYWxsZW5nZSldIChDcmVkZW50aWFsJiYgY3JlZGVudGlhbCkg
bXV0YWJsZSB7CkBAIC01NzAsNyArNTc1LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpj
b250aW51ZUF1dGhlbnRpY2F0ZShBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYmIGNoYWxsZW4KICAg
ICAgICAgICAgICAgICBpZiAoY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IENyZWRlbnRpYWxQ
ZXJzaXN0ZW5jZUZvclNlc3Npb24gfHwgY3JlZGVudGlhbC5wZXJzaXN0ZW5jZSgpID09IENyZWRl
bnRpYWxQZXJzaXN0ZW5jZVBlcm1hbmVudCkKICAgICAgICAgICAgICAgICAgICAgbV9zZXNzaW9u
LT5uZXR3b3JrU3RvcmFnZVNlc3Npb24oKS0+Y3JlZGVudGlhbFN0b3JhZ2UoKS5zZXQobV9wYXJ0
aXRpb24sIGNyZWRlbnRpYWwsIGNoYWxsZW5nZS5wcm90ZWN0aW9uU3BhY2UoKSwgY2hhbGxlbmdl
LmZhaWx1cmVSZXNwb25zZSgpLnVybCgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChjcmVkZW50
aWFsLnBlcnNpc3RlbmNlKCkgPT0gQ3JlZGVudGlhbFBlcnNpc3RlbmNlUGVybWFuZW50KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNyZWRlbnRpYWwucGVyc2lzdGVuY2UoKSA9PSBDcmVkZW50aWFs
UGVyc2lzdGVuY2VQZXJtYW5lbnQgJiYgcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxl
ZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fcHJvdGVjdGlvblNwYWNlRm9yUGVyc2lzdGVu
dFN0b3JhZ2UgPSBjaGFsbGVuZ2UucHJvdGVjdGlvblNwYWNlKCk7CiAgICAgICAgICAgICAgICAg
ICAgIG1fY3JlZGVudGlhbEZvclBlcnNpc3RlbnRTdG9yYWdlID0gY3JlZGVudGlhbDsKICAgICAg
ICAgICAgICAgICB9CkBAIC04ODIsNyArODg3LDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3Vw
OjpkaWRHZXRIZWFkZXJzKCkKICAgICAvLyBzaW5jZSB3ZSBhcmUgd2FpdGluZyB1bnRpbCB3ZSBr
bm93IHRoYXQgdGhpcyBhdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQgYmVmb3JlIGFjdHVhbGx5IHN0
b3JpbmcuCiAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHdlIHdhbnQgdG8gYXZvaWQgaGl0dGluZyB0
aGUgZGlzayB0d2ljZSAob25jZSB0byBhZGQgYW5kIG9uY2UgdG8gcmVtb3ZlKSBmb3IKICAgICAv
LyBpbmNvcnJlY3QgY3JlZGVudGlhbHMgb3IgcG9sbHV0aW5nIHRoZSBrZXljaGFpbiB3aXRoIGlu
dmFsaWQgY3JlZGVudGlhbHMuCi0gICAgaWYgKCFpc0F1dGhlbnRpY2F0aW9uRmFpbHVyZVN0YXR1
c0NvZGUobV9zb3VwTWVzc2FnZS0+c3RhdHVzX2NvZGUpICYmIG1fc291cE1lc3NhZ2UtPnN0YXR1
c19jb2RlIDwgNTAwKSB7CisgICAgaWYgKCFpc0F1dGhlbnRpY2F0aW9uRmFpbHVyZVN0YXR1c0Nv
ZGUobV9zb3VwTWVzc2FnZS0+c3RhdHVzX2NvZGUpICYmIG1fc291cE1lc3NhZ2UtPnN0YXR1c19j
b2RlIDwgNTAwICYmIHBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKSkgewogICAg
ICAgICBtX3Nlc3Npb24tPm5ldHdvcmtTdG9yYWdlU2Vzc2lvbigpLT5zYXZlQ3JlZGVudGlhbFRv
UGVyc2lzdGVudFN0b3JhZ2UobV9wcm90ZWN0aW9uU3BhY2VGb3JQZXJzaXN0ZW50U3RvcmFnZSwg
bV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2UpOwogICAgICAgICBtX3Byb3RlY3Rpb25T
cGFjZUZvclBlcnNpc3RlbnRTdG9yYWdlID0gUHJvdGVjdGlvblNwYWNlKCk7CiAgICAgICAgIG1f
Y3JlZGVudGlhbEZvclBlcnNpc3RlbnRTdG9yYWdlID0gQ3JlZGVudGlhbCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAu
aCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3Vw
LmgKaW5kZXggNzRlMzFmMzRlMjRjLi4xY2E0NTA3Y2FkYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaApAQCAt
NzEsNiArNzEsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBnYm9vbGVhbiB0bHNDb25uZWN0aW9u
QWNjZXB0Q2VydGlmaWNhdGVDYWxsYmFjayhHVGxzQ29ubmVjdGlvbiosIEdUbHNDZXJ0aWZpY2F0
ZSosIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CiAgICAgYm9v
bCB0bHNDb25uZWN0aW9uQWNjZXB0Q2VydGlmaWNhdGUoR1Rsc0NlcnRpZmljYXRlKiwgR1Rsc0Nl
cnRpZmljYXRlRmxhZ3MpOwogCisgICAgYm9vbCBwZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VF
bmFibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBhcHBseUF1dGhlbnRpY2F0aW9uVG9SZXF1ZXN0KFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYpOwogICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0ZUNh
bGxiYWNrKFNvdXBTZXNzaW9uKiwgU291cE1lc3NhZ2UqLCBTb3VwQXV0aCosIGdib29sZWFuIHJl
dHJ5aW5nLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CiAgICAgdm9pZCBhdXRoZW50aWNhdGUoV2Vi
Q29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrUHJvY2Vzc1NvdXAuY3BwCmluZGV4IDA4
M2QwMThhY2I0NS4uYTNmZTZlZWQyMzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Byb2Nlc3NTb3VwLmNwcApAQCAtMTgxLDYgKzE4
MSwxMiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXROZXR3b3JrUHJveHlTZXR0aW5ncyhjb25z
dCBTb3VwTmV0d29ya1Byb3h5U2V0dGluZ3MmIHNldAogICAgIH0pOwogfQogCit2b2lkIE5ldHdv
cmtQcm9jZXNzOjpzZXRQZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgYm9vbCBlbmFibGVkKQoreworICAgIGlmIChhdXRvKiBzZXNzaW9u
ID0gbmV0d29ya1Nlc3Npb24oc2Vzc2lvbklEKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8TmV0d29y
a1Nlc3Npb25Tb3VwJj4oKnNlc3Npb24pLnNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVu
YWJsZWQoZW5hYmxlZCk7Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnBsYXRmb3JtUHJvY2Vz
c0RpZFRyYW5zaXRpb25Ub0ZvcmVncm91bmQoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Np
b25Tb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vz
c2lvblNvdXAuY3BwCmluZGV4IDQwNzM2MWYwMzZlNy4uYmQwN2JhYTE5NmViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25Tb3VwLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya1Nlc3Npb25T
b3VwLmNwcApAQCAtNDIsNiArNDIsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIE5ldHdv
cmtTZXNzaW9uU291cDo6TmV0d29ya1Nlc3Npb25Tb3VwKE5ldHdvcmtQcm9jZXNzJiBuZXR3b3Jr
UHJvY2VzcywgTmV0d29ya1Nlc3Npb25DcmVhdGlvblBhcmFtZXRlcnMmJiBwYXJhbWV0ZXJzKQog
ICAgIDogTmV0d29ya1Nlc3Npb24obmV0d29ya1Byb2Nlc3MsIHBhcmFtZXRlcnMpCiAgICAgLCBt
X25ldHdvcmtTZXNzaW9uKG1ha2VVbmlxdWU8U291cE5ldHdvcmtTZXNzaW9uPihtX3Nlc3Npb25J
RCkpCisgICAgLCBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQocGFyYW1ldGVy
cy5wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKQogewogICAgIGF1dG8qIHN0b3Jh
Z2VTZXNzaW9uID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uKCk7CiAgICAgQVNTRVJUKHN0b3JhZ2VT
ZXNzaW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrU2Vzc2lvblNvdXAuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9O
ZXR3b3JrU2Vzc2lvblNvdXAuaAppbmRleCA0NjZiMjc4MmJmOTMuLmViZGFjNTk5YjZmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtTZXNzaW9u
U291cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrU2Vz
c2lvblNvdXAuaApAQCAtNTQsMTEgKzU0LDE1IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0Q29v
a2llUGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgU3RyaW5nJiBzdG9yYWdlUGF0aCwgU291cENvb2tp
ZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CiAKKyAgICB2b2lkIHNldFBlcnNpc3RlbnRDcmVkZW50
aWFsU3RvcmFnZUVuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fcGVyc2lzdGVudENyZWRlbnRpYWxT
dG9yYWdlRW5hYmxlZCA9IGVuYWJsZWQ7IH0KKyAgICBib29sIHBlcnNpc3RlbnRDcmVkZW50aWFs
U3RvcmFnZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3BlcnNpc3RlbnRDcmVkZW50aWFsU3Rv
cmFnZUVuYWJsZWQ7IH0KKwogcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViU29ja2V0
VGFzaz4gY3JlYXRlV2ViU29ja2V0VGFzayhOZXR3b3JrU29ja2V0Q2hhbm5lbCYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpIGZpbmFsOwog
ICAgIHZvaWQgY2xlYXJDcmVkZW50aWFscygpIGZpbmFsOwogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlNvdXBOZXR3b3JrU2Vzc2lvbj4gbV9uZXR3b3JrU2Vzc2lvbjsKKyAgICBib29s
IG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCB7IHRydWUgfTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAKaW5kZXgg
ZDg5ZjMwN2U0NDc2Li4zMzA4OGU5OWJlNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0
LmNwcApAQCAtNTYsNiArNTYsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAqLwogCiBl
bnVtIHsKKyAgICBBVVRIRU5USUNBVEVELAogICAgIENBTkNFTExFRCwKIAogICAgIExBU1RfU0lH
TkFMCkBAIC02NCw5ICs2NSwxMyBAQCBlbnVtIHsKIHN0cnVjdCBfV2ViS2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0UHJpdmF0ZSB7CiAgICAgUmVmUHRyPEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJv
eHk+IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogICAgIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZDsKKyAgICBib29sIHBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQ7CiAgICAg
Ym9vbCBoYW5kbGVkUmVxdWVzdDsKICAgICBDU3RyaW5nIGhvc3Q7CiAgICAgQ1N0cmluZyByZWFs
bTsKKyAgICBPcHRpb25hbDxXZWJDb3JlOjpDcmVkZW50aWFsPiBwcm9wb3NlZENyZWRlbnRpYWw7
CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6Q3JlZGVudGlhbD4gYWNjZXB0ZWRDcmVkZW50aWFsOwor
ICAgIE9wdGlvbmFsPGJvb2w+IGNhblNhdmVDcmVkZW50aWFsczsKIH07CiAKIHN0YXRpYyBndWlu
dCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKQEAgLTEwNSw4ICsxMTAsNyBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3REaXNwb3NlKEdPYmplY3QqIG9iamVj
dCkKICAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfQVVU
SEVOVElDQVRJT05fUkVRVUVTVChvYmplY3QpOwogCiAgICAgLy8gTWFrZSBzdXJlIHRoZSByZXF1
ZXN0IGlzIGFsd2F5cyBoYW5kbGVkIGJlZm9yZSBmaW5hbGl6aW5nLgotICAgIGlmICghcmVxdWVz
dC0+cHJpdi0+aGFuZGxlZFJlcXVlc3QpCi0gICAgICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2NhbmNlbChyZXF1ZXN0KTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9jYW5jZWwocmVxdWVzdCk7CiAKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7CiB9CkBAIC0xMTYs
NiArMTIwLDI3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Ns
YXNzX2luaXQoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CiAgICAgR09iamVjdENsYXNzKiBv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHJlcXVlc3RDbGFzcyk7CiAgICAgb2JqZWN0Q2xh
c3MtPmRpc3Bvc2UgPSB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3REaXNwb3NlOwogCisgICAg
LyoqCisgICAgICogV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0OjphdXRoZW50aWNhdGVkOgor
ICAgICAqIEByZXF1ZXN0OiB0aGUgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICAgICAq
IEBjcmVkZW50aWFsOiB0aGUgI1dlYktpdENyZWRlbnRpYWwgYWNjZXB0ZWQKKyAgICAgKgorICAg
ICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiB0aGUgdXNlciBhdXRoZW50aWNhdGlvbiBy
ZXF1ZXN0IHN1Y2NlZWRlZC4KKyAgICAgKiBBcHBsaWNhdGlvbnMgaGFuZGxpbmcgdGhlaXIgb3du
IGNyZWRlbnRpYWwgc3RvcmFnZSBzaG91bGQgY29ubmVjdCB0bworICAgICAqIHRoaXMgc2lnbmFs
IHRvIHNhdmUgdGhlIGNyZWRlbnRpYWxzLgorICAgICAqCisgICAgICogU2luY2U6IDIuMzAKKyAg
ICAgKi8KKyAgICBzaWduYWxzW0FVVEhFTlRJQ0FURURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3
KAorICAgICAgICAgICAgImF1dGhlbnRpY2F0ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAg
ICAgICAgICAwLCAwLCBudWxscHRyLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dl
bmVyaWMsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9U
WVBFX0NSRURFTlRJQUwgfCBHX1NJR05BTF9UWVBFX1NUQVRJQ19TQ09QRSk7CisKICAgICAvKioK
ICAgICAgKiBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3Q6OmNhbmNlbGxlZDoKICAgICAgKiBA
cmVxdWVzdDogdGhlICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKQEAgLTEzNSwxMSArMTYw
LDEyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2NsYXNzX2lu
aXQoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CiAgICAgICAgICAgICBHX1RZUEVfTk9ORSwg
MCk7CiB9CiAKLVdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogd2Via2l0QXV0aGVudGljYXRp
b25SZXF1ZXN0Q3JlYXRlKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkqIGF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLCBib29sIHByaXZhdGVCcm93c2luZ0VuYWJsZWQpCitXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QqIHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZShBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZVByb3h5KiBhdXRoZW50aWNhdGlvbkNoYWxsZW5nZSwgYm9vbCBwcml2
YXRlQnJvd3NpbmdFbmFibGVkLCBib29sIHBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJs
ZWQpCiB7CiAgICAgV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lU
X0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0FVVEhFTlRJ
Q0FUSU9OX1JFUVVFU1QsIE5VTEwpKTsKICAgICByZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSA9IGF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogICAgIHJlcXVlc3QtPnByaXYt
PnByaXZhdGVCcm93c2luZ0VuYWJsZWQgPSBwcml2YXRlQnJvd3NpbmdFbmFibGVkOworICAgIHJl
cXVlc3QtPnByaXYtPnBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBwZXJzaXN0
ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCkBA
IC0xNDgsMTQgKzE3NCwyOSBAQCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiB3ZWJraXRB
dXRoZW50aWNhdGlvblJlcXVlc3RHZXRBdXRoZW50aWNhdGlvbkNoYWxsZQogICAgIHJldHVybiBy
ZXF1ZXN0LT5wcml2LT5hdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5nZXQoKTsKIH0KIAordm9pZCB3
ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3REaWRBdXRoZW50aWNhdGUoV2ViS2l0QXV0aGVudGlj
YXRpb25SZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGF1dG8qIGNyZWRlbnRpYWwgPSB3ZWJraXRD
cmVkZW50aWFsQ3JlYXRlKHJlcXVlc3QtPnByaXYtPmFjY2VwdGVkQ3JlZGVudGlhbC52YWx1ZU9y
KFdlYkNvcmU6OkNyZWRlbnRpYWwoKSkpOworICAgIGdfc2lnbmFsX2VtaXQocmVxdWVzdCwgc2ln
bmFsc1tBVVRIRU5USUNBVEVEXSwgMCwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0X2NyZWRlbnRp
YWxfZnJlZShjcmVkZW50aWFsKTsKK30KKworY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYgd2Vi
a2l0QXV0aGVudGljYXRpb25SZXF1ZXN0R2V0UHJvcG9zZWRDcmVkZW50aWFsKFdlYktpdEF1dGhl
bnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+cHJv
cG9zZWRDcmVkZW50aWFsKQorICAgICAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+cHJvcG9zZWRD
cmVkZW50aWFsLnZhbHVlKCk7CisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlLT5jb3JlKCkucHJvcG9zZWRDcmVkZW50aWFsKCk7Cit9CisKIC8qKgogICog
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHM6CiAgKiBA
cmVxdWVzdDogYSAjV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0CiAgKgogICogRGV0ZXJtaW5l
IHdoZXRoZXIgdGhlIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBhc3NvY2lhdGVkIHdpdGggdGhpcwog
ICogI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCBzaG91bGQgYWxsb3cgdGhlIHN0b3JhZ2Ug
b2YgY3JlZGVudGlhbHMuCi0gKiBUaGlzIHdpbGwgcmV0dXJuICVGQUxTRSBpZiBXZWJLaXQgZG9l
c24ndCBzdXBwb3J0IGNyZWRlbnRpYWwgc3RvcmluZwotICogb3IgaWYgcHJpdmF0ZSBicm93c2lu
ZyBpcyBlbmFibGVkLgorICogVGhpcyB3aWxsIHJldHVybiAlRkFMU0UgaWYgV2ViS2l0IGRvZXNu
J3Qgc3VwcG9ydCBjcmVkZW50aWFsIHN0b3JpbmcsCisgKiBpZiBwcml2YXRlIGJyb3dzaW5nIGlz
IGVuYWJsZWQgb3IgcGVyc2lzdGVudCBjcmVkZW50aWFsIHN0b3JhZ2UgaGFzIGJlZW4KKyAqIGRp
c2FibGVkIGluICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuCiAgKgogICogUmV0dXJuczogJVRS
VUUgaWYgV2ViS2l0IGNhbiBzdG9yZSBjcmVkZW50aWFscyBvciAlRkFMU0Ugb3RoZXJ3aXNlLgog
ICoKQEAgLTE2NSwxMyArMjA2LDQxIEBAIGdib29sZWFuIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKFdlYktpdEF1dGhlbnRpY2F0aW9uCiB7CiAgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVx
dWVzdCksIEZBTFNFKTsKIAorICAgIGlmIChyZXF1ZXN0LT5wcml2LT5wcml2YXRlQnJvd3NpbmdF
bmFibGVkKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAocmVxdWVzdC0+cHJpdi0+
Y2FuU2F2ZUNyZWRlbnRpYWxzKQorICAgICAgICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+Y2FuU2F2
ZUNyZWRlbnRpYWxzLnZhbHVlKCk7CisKICNpZiBVU0UoTElCU0VDUkVUKQotICAgIHJldHVybiAh
cmVxdWVzdC0+cHJpdi0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDsKKyAgICByZXR1cm4gcmVxdWVz
dC0+cHJpdi0+cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZDsKICNlbHNlCiAgICAg
cmV0dXJuIEZBTFNFOwogI2VuZGlmCiB9CiAKKy8qKgorICogd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3Rfc2V0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzOgorICogQHJlcXVlc3Q6IGEgI1dlYktp
dEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICogQGVuYWJsZWQ6IHZhbHVlIHRvIHNldAorICoKKyAq
IFNldCB3aGV0aGVyIHRoZSBhdXRoZW50aWNhdGlvbiBtZXRob2QgYXNzb2NpYXRlZCB3aXRoIEBy
ZXF1ZXN0CisgKiBzaG91bGQgYWxsb3cgdGhlIHN0b3JhZ2Ugb2YgY3JlZGVudGlhbHMuCisgKiBU
aGlzIHNob3VsZCBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucyBoYW5kbGlnIHRoZWlyIG93biBjcmVk
ZW50aWFscworICogc3RvcmFnZSB0byBpbmRpY2F0ZSB0aGF0IGl0IHNob3VsZCBiZSBzdXBwb3J0
ZWQgZXZlbiB3aGVuIGludGVybmFsCisgKiBjcmVkZW50aWFsIHN0b3JhZ2UgaXMgZGlzYWJsZWQg
b3IgdW5zdXBwb3J0ZWQuCisgKiBOb3RlIHRoYXQgc3RvcmluZyBvZiBjcmVkZW50aWFscyB3aWxs
IG5vdCBiZSBhbGxvd2VkIG9uIGVwaGVtZXJhbAorICogc2Vzc2lvbnMgaW4gYW55IGNhc2UuCisg
KgorICogU2luY2U6IDIuMzAKKyAqLwordm9pZCB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVz
dF9zZXRfY2FuX3NhdmVfY3JlZGVudGlhbHMoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiBy
ZXF1ZXN0LCBnYm9vbGVhbiBlbmFibGVkKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCkpOworCisgICAgcmVxdWVzdC0+cHJp
di0+Y2FuU2F2ZUNyZWRlbnRpYWxzID0gZW5hYmxlZDsKK30KKwogLyoqCiAgKiB3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbDoKICAqIEByZXF1ZXN0
OiBhICNXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QKQEAgLTE4NywxNSArMjU2LDQxIEBAIGdi
b29sZWFuIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxz
KFdlYktpdEF1dGhlbnRpY2F0aW9uCiAgKi8KIFdlYktpdENyZWRlbnRpYWwqIHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsKFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfQVVUSEVOVElDQVRJT05fUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCksIG51
bGxwdHIpOwogCi0gICAgY29uc3QgYXV0byYgY3JlZGVudGlhbCA9IHJlcXVlc3QtPnByaXYtPmF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5jb3JlKCkucHJvcG9zZWRDcmVkZW50aWFsKCk7CisgICAg
Y29uc3QgYXV0byYgY3JlZGVudGlhbCA9IHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdEdldFBy
b3Bvc2VkQ3JlZGVudGlhbChyZXF1ZXN0KTsKICAgICBpZiAoY3JlZGVudGlhbC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVy
biB3ZWJraXRDcmVkZW50aWFsQ3JlYXRlKGNyZWRlbnRpYWwpOwogfQogCisvKioKKyAqIHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X3NldF9wcm9wb3NlZF9jcmVkZW50aWFsOgorICogQHJl
cXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdAorICogQGNyZWRlbnRpYWw6IGEg
I1dlYktpdENyZWRlbnRpYWwsIG9yICVOVUxMCisgKgorICogU2V0IHRoZSAjV2ViS2l0Q3JlZGVu
dGlhbCBvZiB0aGUgcHJvcG9zZWQgYXV0aGVudGljYXRpb24gY2hhbGxlbmdlIHRoYXQgd2FzCisg
KiBzdG9yZWQgZnJvbSBhIHByZXZpb3VzIHNlc3Npb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNl
ZCBieSBhcHBsaWNhdGlvbnMKKyAqIGhhbmRsaW5nIHRoZWlyIG93biBjcmVkZW50aWFsIHN0b3Jh
Z2UsIHdoZW4gdXNpbmcgdGhlIGRlZmF1bHQgV2ViS2l0IGNyZWRlbnRpYWwKKyAqIHN0b3JhZ2Ug
d2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwoKSBh
bHJlYWR5IGNvbnRhaW5zCisgKiBwcmV2aW91c2x5IHN0b3JlZCBjcmVkZW50aWFscy4KKyAqIFBh
c3NpbmcgYSAlTlVMTCBAY3JlZGVudGlhbCB3aWxsIGNsZWFyIHRoZSBwcm9wb3NlZCBjcmVkZW50
aWFsLgorICoKKyAqIFNpbmNlOiAyLjMwCisgKi8KK3ZvaWQgd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3Rfc2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwoV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0KiByZXF1ZXN0LCBXZWJLaXRDcmVkZW50aWFsKiBjcmVkZW50aWFsKQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVxdWVzdCkpOwor
CisgICAgaWYgKCFjcmVkZW50aWFsKSB7CisgICAgICAgIHJlcXVlc3QtPnByaXYtPnByb3Bvc2Vk
Q3JlZGVudGlhbCA9IFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHJlcXVlc3QtPnByaXYtPnByb3Bvc2VkQ3JlZGVudGlhbCA9IHdlYmtpdENyZWRlbnRpYWxHZXRD
cmVkZW50aWFsKGNyZWRlbnRpYWwpOworfQorCiAvKioKICAqIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2dldF9ob3N0OgogICogQHJlcXVlc3Q6IGEgI1dlYktpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdApAQCAtMzE2LDggKzQxMSwxMSBAQCB2b2lkIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9y
ZXF1ZXN0X2F1dGhlbnRpY2F0ZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcQogewog
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0FVVEhFTlRJQ0FUSU9OX1JFUVVFU1QocmVx
dWVzdCkpOwogCi0gICAgcmVxdWVzdC0+cHJpdi0+YXV0aGVudGljYXRpb25DaGFsbGVuZ2UtPmxp
c3RlbmVyKCkuY29tcGxldGVDaGFsbGVuZ2UoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZURpc3Bvc2l0aW9uOjpVc2VDcmVkZW50aWFsLCBjcmVkZW50aWFsID8gd2Via2l0Q3JlZGVudGlh
bEdldENyZWRlbnRpYWwoY3JlZGVudGlhbCkgOiBXZWJDb3JlOjpDcmVkZW50aWFsKCkpOwotCisg
ICAgaWYgKGNyZWRlbnRpYWwpCisgICAgICAgIHJlcXVlc3QtPnByaXYtPmFjY2VwdGVkQ3JlZGVu
dGlhbCA9IHdlYmtpdENyZWRlbnRpYWxHZXRDcmVkZW50aWFsKGNyZWRlbnRpYWwpOworICAgIGVs
c2UKKyAgICAgICAgcmVxdWVzdC0+cHJpdi0+YWNjZXB0ZWRDcmVkZW50aWFsID0gV1RGOjpudWxs
b3B0OworICAgIHJlcXVlc3QtPnByaXYtPmF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLT5saXN0ZW5l
cigpLmNvbXBsZXRlQ2hhbGxlbmdlKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNw
b3NpdGlvbjo6VXNlQ3JlZGVudGlhbCwgcmVxdWVzdC0+cHJpdi0+YWNjZXB0ZWRDcmVkZW50aWFs
LnZhbHVlT3IoV2ViQ29yZTo6Q3JlZGVudGlhbCgpKSk7CiAgICAgcmVxdWVzdC0+cHJpdi0+aGFu
ZGxlZFJlcXVlc3QgPSB0cnVlOwogfQogCkBAIC0zMzQsNyArNDMyLDEyIEBAIHZvaWQgd2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsKFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dCogcmVxdWVzdCkKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19BVVRIRU5USUNB
VElPTl9SRVFVRVNUKHJlcXVlc3QpKTsKIAorICAgIGlmIChyZXF1ZXN0LT5wcml2LT5oYW5kbGVk
UmVxdWVzdCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgcmVxdWVzdC0+cHJpdi0+YXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UtPmxpc3RlbmVyKCkuY29tcGxldGVDaGFsbGVuZ2UoV2ViS2l0OjpBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpDYW5jZWwpOworICAgIHJlcXVlc3QtPnBy
aXYtPmFjY2VwdGVkQ3JlZGVudGlhbCA9IFdURjo6bnVsbG9wdDsKKyAgICByZXF1ZXN0LT5wcml2
LT5oYW5kbGVkUmVxdWVzdCA9IHRydWU7CiAKICAgICBnX3NpZ25hbF9lbWl0KHJlcXVlc3QsIHNp
Z25hbHNbQ0FOQ0VMTEVEXSwgMCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3RQ
cml2YXRlLmgKaW5kZXggMDA1OWExMDM3NzcyLi5iMjBlNTBlMTk1OWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVz
dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3RQcml2YXRlLmgKQEAgLTIxLDYgKzIxLDkgQEAKIAogI2luY2x1
ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJXZWJLaXRBdXRo
ZW50aWNhdGlvblJlcXVlc3QuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NyZWRlbnRpYWwuaD4KIAot
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiB3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RD
cmVhdGUoV2ViS2l0OjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5KiwgYm9vbCBwcml2YXRl
QnJvd3NpbmdFbmFibGVkKTsKK1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogd2Via2l0QXV0
aGVudGljYXRpb25SZXF1ZXN0Q3JlYXRlKFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eSosIGJvb2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCwgYm9vbCBwZXJzaXN0ZW50Q3JlZGVu
dGlhbFN0b3JhZ2VFbmFibGVkKTsKIFdlYktpdDo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eSogd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0R2V0QXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0Kik7Cit2b2lkIHdlYmtpdEF1dGhlbnRpY2F0aW9u
UmVxdWVzdERpZEF1dGhlbnRpY2F0ZShXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqKTsKK2Nv
bnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmIHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdEdldFBy
b3Bvc2VkQ3JlZGVudGlhbChXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXgg
N2I4N2M0MzY0NzU5Li5jYWY4ZWZlODgxZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yMjQ3LDEzICsyMjQ3LDI1IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFz
cyogd2ViVmlld0NsYXNzKQogICAgICAgICBXRUJLSVRfVFlQRV9VU0VSX01FU1NBR0UpOwogfQog
Ci1zdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q2FuY2VsQXV0aGVudGljYXRpb25SZXF1ZXN0KFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3Q29tcGxldGVB
dXRoZW50aWNhdGlvblJlcXVlc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKLSAgICBpZiAo
IXdlYlZpZXctPnByaXYtPmF1dGhlbnRpY2F0aW9uUmVxdWVzdCkKKyAgICBXZWJLaXRXZWJWaWV3
UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgaWYgKCFwcml2LT5hdXRoZW50aWNh
dGlvblJlcXVlc3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2NhbmNlbCh3ZWJWaWV3LT5wcml2LT5hdXRoZW50aWNhdGlvblJlcXVlc3QuZ2V0
KCkpOwotICAgIHdlYlZpZXctPnByaXYtPmF1dGhlbnRpY2F0aW9uUmVxdWVzdC5jbGVhcigpOwor
ICAgIGlmIChwcml2LT5tYWluUmVzb3VyY2UpIHsKKyAgICAgICAgaWYgKGF1dG8qIHJlc3BvbnNl
ID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UocHJpdi0+bWFpblJlc291cmNlLmdl
dCgpKSkgeworICAgICAgICAgICAgYXV0byBzdGF0dXNDb2RlID0gd2Via2l0X3VyaV9yZXNwb25z
ZV9nZXRfc3RhdHVzX2NvZGUocmVzcG9uc2UpOworICAgICAgICAgICAgaWYgKHN0YXR1c0NvZGUg
IT0gU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEICYmIHN0YXR1c0NvZGUgIT0gU09VUF9TVEFUVVNf
UFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQgJiYgc3RhdHVzQ29kZSA8IDUwMCkgeworICAg
ICAgICAgICAgICAgIHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdERpZEF1dGhlbnRpY2F0ZShw
cml2LT5hdXRoZW50aWNhdGlvblJlcXVlc3QuZ2V0KCkpOworICAgICAgICAgICAgICAgIHByaXYt
PmF1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3RfY2FuY2VsKHByaXYtPmF1dGhlbnRpY2F0aW9uUmVxdWVzdC5nZXQoKSk7
CisgICAgcHJpdi0+YXV0aGVudGljYXRpb25SZXF1ZXN0ID0gbnVsbHB0cjsKIH0KIAogdm9pZCB3
ZWJraXRXZWJWaWV3Q3JlYXRlUGFnZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBSZWY8QVBJOjpQ
YWdlQ29uZmlndXJhdGlvbj4mJiBjb25maWd1cmF0aW9uKQpAQCAtMjMwMSw3ICsyMzEzLDcgQEAg
dm9pZCB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2Vi
S2l0TG9hZEV2ZW50IGxvYWRFdmVudCkKICAgICAgICAgd2Via2l0V2ViVmlld0NhbmNlbEZhdmlj
b25SZXF1ZXN0KHdlYlZpZXcpOwogICAgICAgICB3ZWJraXRXZWJWaWV3V2F0Y2hGb3JDaGFuZ2Vz
SW5GYXZpY29uKHdlYlZpZXcpOwogI2VuZGlmCi0gICAgICAgIHdlYmtpdFdlYlZpZXdDYW5jZWxB
dXRoZW50aWNhdGlvblJlcXVlc3Qod2ViVmlldyk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdDb21w
bGV0ZUF1dGhlbnRpY2F0aW9uUmVxdWVzdCh3ZWJWaWV3KTsKICAgICAgICAgcHJpdi0+bG9hZGlu
Z1Jlc291cmNlc01hcC5jbGVhcigpOwogICAgICAgICBwcml2LT5tYWluUmVzb3VyY2UgPSBudWxs
cHRyOwogICAgICAgICB3ZWJWaWV3LT5wcml2LT5pc0FjdGl2ZVVSSUNoYW5nZUJsb2NrZWQgPSBm
YWxzZTsKQEAgLTIzMjMsNyArMjMzNSw3IEBAIHZvaWQgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2Vk
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQpCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFdFQktJVF9MT0FEX0ZJTklTSEVEOgotICAgICAg
ICB3ZWJraXRXZWJWaWV3Q2FuY2VsQXV0aGVudGljYXRpb25SZXF1ZXN0KHdlYlZpZXcpOworICAg
ICAgICB3ZWJraXRXZWJWaWV3Q29tcGxldGVBdXRoZW50aWNhdGlvblJlcXVlc3Qod2ViVmlldyk7
CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMjMzNCw3
ICsyMzQ2LDcgQEAgdm9pZCB3ZWJraXRXZWJWaWV3TG9hZENoYW5nZWQoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCkKIAogdm9pZCB3ZWJraXRXZWJWaWV3
TG9hZEZhaWxlZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRMb2FkRXZlbnQgbG9hZEV2
ZW50LCBjb25zdCBjaGFyKiBmYWlsaW5nVVJJLCBHRXJyb3IgKmVycm9yKQogewotICAgIHdlYmtp
dFdlYlZpZXdDYW5jZWxBdXRoZW50aWNhdGlvblJlcXVlc3Qod2ViVmlldyk7CisgICAgd2Via2l0
V2ViVmlld0NvbXBsZXRlQXV0aGVudGljYXRpb25SZXF1ZXN0KHdlYlZpZXcpOwogCiAgICAgZ2Jv
b2xlYW4gcmV0dXJuVmFsdWU7CiAgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0xP
QURfRkFJTEVEXSwgMCwgbG9hZEV2ZW50LCBmYWlsaW5nVVJJLCBlcnJvciwgJnJldHVyblZhbHVl
KTsKQEAgLTIzNDMsNyArMjM1NSw3IEBAIHZvaWQgd2Via2l0V2ViVmlld0xvYWRGYWlsZWQoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0TG9hZEV2ZW50IGxvYWRFdmVudCwKIAogdm9pZCB3
ZWJraXRXZWJWaWV3TG9hZEZhaWxlZFdpdGhUTFNFcnJvcnMoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgY29uc3QgY2hhciogZmFpbGluZ1VSSSwgR0Vycm9yKiBlcnJvciwgR1Rsc0NlcnRpZmljYXRl
RmxhZ3MgdGxzRXJyb3JzLCBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRlKQogewotICAgIHdl
YmtpdFdlYlZpZXdDYW5jZWxBdXRoZW50aWNhdGlvblJlcXVlc3Qod2ViVmlldyk7CisgICAgd2Vi
a2l0V2ViVmlld0NvbXBsZXRlQXV0aGVudGljYXRpb25SZXF1ZXN0KHdlYlZpZXcpOwogCiAgICAg
V2ViS2l0VExTRXJyb3JzUG9saWN5IHRsc0Vycm9yc1BvbGljeSA9IHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfdGxzX2Vycm9yc19wb2xpY3kod2ViVmlldy0+cHJpdi0+Y29udGV4dC5nZXQoKSk7CiAg
ICAgaWYgKHRsc0Vycm9yc1BvbGljeSA9PSBXRUJLSVRfVExTX0VSUk9SU19QT0xJQ1lfRkFJTCkg
ewpAQCAtMjY5Miw3ICsyNzA0LDkgQEAgdm9pZCB3ZWJraXRXZWJWaWV3U3VibWl0Rm9ybVJlcXVl
c3QoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Rm9ybVN1Ym1pc3Npb24KIAogdm9pZCB3
ZWJraXRXZWJWaWV3SGFuZGxlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eSogYXV0aGVudGljYXRpb25DaGFs
bGVuZ2UpCiB7Ci0gICAgd2ViVmlldy0+cHJpdi0+YXV0aGVudGljYXRpb25SZXF1ZXN0ID0gYWRv
cHRHUmVmKHdlYmtpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdENyZWF0ZShhdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSwgd2ViVmlldy0+cHJpdi0+aXNFcGhlbWVyYWwpKTsKKyAgICBhdXRvKiB3ZWJzaXRl
RGF0YU1hbmFnZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdl
YlZpZXcpOworICAgIHdlYlZpZXctPnByaXYtPmF1dGhlbnRpY2F0aW9uUmVxdWVzdCA9IGFkb3B0
R1JlZih3ZWJraXRBdXRoZW50aWNhdGlvblJlcXVlc3RDcmVhdGUoYXV0aGVudGljYXRpb25DaGFs
bGVuZ2UsCisgICAgICAgIHdlYlZpZXctPnByaXYtPmlzRXBoZW1lcmFsLCB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZ2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQo
d2Vic2l0ZURhdGFNYW5hZ2VyKSkpOwogICAgIGdib29sZWFuIHJldHVyblZhbHVlOwogICAgIGdf
c2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tBVVRIRU5USUNBVEVdLCAwLCB3ZWJWaWV3LT5w
cml2LT5hdXRoZW50aWNhdGlvblJlcXVlc3QuZ2V0KCksICZyZXR1cm5WYWx1ZSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyLmNwcAppbmRleCBkNWU0NDY2ZjdlMzguLjgwMDkyYjFlOGNiNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCkBAIC04NzEsNiArODcxLDQyIEBAIGdib29sZWFuIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX2VuYWJsZWQoV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyKiBtCiAgICAgcmV0dXJuIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFT
dG9yZShtYW5hZ2VyKS5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOwogfQogCisvKioK
KyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9jcmVkZW50aWFs
X3N0b3JhZ2VfZW5hYmxlZDoKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIKKyAqIEBlbmFibGVkOiB2YWx1ZSB0byBzZXQKKyAqCisgKiBFbmFibGUgb3IgZGlzYWJsZSBw
ZXJzaXN0ZW50IGNyZWRlbnRpYWwgc3RvcmFnZS4gV2hlbiBlbmFibGVkLCB3aGljaCBpcyB0aGUg
ZGVmYXVsdCBmb3IKKyAqIG5vbi1lcGhlbWVyYWwgc2Vzc2lvbnMsIHRoZSBuZXR3b3JrIHByb2Nl
c3Mgd2lsbCB0cnkgdG8gcmVhZCBhbmQgd3JpdGUgSFRUUCBhdXRoZW50aWFjYXRpb24KKyAqIGNy
ZWRlbnRpYWxzIGZyb20gcGVyc2lzdGVudCBzdG9yYWdlLgorICoKKyAqIFNpbmNlOiAyLjMwCisg
Ki8KK3ZvaWQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X2NyZWRl
bnRpYWxfc3RvcmFnZV9lbmFibGVkKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciwg
Z2Jvb2xlYW4gZW5hYmxlZCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJT
SVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7CisKKyAgICB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJHZXREYXRhU3RvcmUobWFuYWdlcikuc2V0UGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5h
YmxlZChlbmFibGVkKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Z2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQ6CisgKiBAbWFuYWdlcjog
YSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogR2V0IHdoZXRoZXIgcGVyc2lzdGVu
dCBjcmVkZW50aWFsIHN0b3JhZ2UgaXMgZW5hYmxlZCBvciBub3QuCisgKiBTZWUgYWxzbyB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdl
X2VuYWJsZWQoKS4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBwZXJzaXN0ZW50IGNyZWRlbnRp
YWwgc3RvcmFnZSBpcyBlbmFibGVkLCBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIFNpbmNl
OiAyLjMwCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfcGVy
c2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZChXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIqIG1hbmFnZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJ
VEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBGQUxTRSk7CisKKyAgICByZXR1cm4gd2Via2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKG1hbmFnZXIpLnBlcnNpc3RlbnRDcmVkZW50aWFs
U3RvcmFnZUVuYWJsZWQoKTsKK30KKwogc3RhdGljIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHRvV2Vic2l0ZURhdGFUeXBlcyhXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHR5cGVzKQogewogICAg
IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHJldHVyblZhbHVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxvZy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9u
RGlhbG9nLmNwcAppbmRleCAyYzE4YzAwZTY0ZTkuLmJmYzRkYzc3ZTM0NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50aWNhdGlvbkRpYWxv
Zy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRoZW50
aWNhdGlvbkRpYWxvZy5jcHAKQEAgLTIyNiw3ICsyMjYsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRB
dXRoZW50aWNhdGlvbkRpYWxvZ0luaXRpYWxpemUoV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cq
IGF1dAogICAgIGd0a19lbnRyeV9zZXRfdmlzaWJpbGl0eShHVEtfRU5UUlkocHJpdi0+cGFzc3dv
cmRFbnRyeSksIEZBTFNFKTsKICAgICBndGtfd2lkZ2V0X3NldF92aXNpYmxlKHByaXYtPnJlbWVt
YmVyQ2hlY2tCdXR0b24sIHByaXYtPmNyZWRlbnRpYWxTdG9yYWdlTW9kZSAhPSBEaXNhbGxvd1Bl
cnNpc3RlbnRTdG9yYWdlICYmICFyZWFsbS5pc0VtcHR5KCkpOwogCi0gICAgY29uc3QgV2ViQ29y
ZTo6Q3JlZGVudGlhbCYgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3RvcmFnZSA9IGNoYWxsZW5n
ZS5wcm9wb3NlZENyZWRlbnRpYWwoKTsKKyAgICBjb25zdCBhdXRvJiBjcmVkZW50aWFsRnJvbVBl
cnNpc3RlbnRTdG9yYWdlID0gd2Via2l0QXV0aGVudGljYXRpb25SZXF1ZXN0R2V0UHJvcG9zZWRD
cmVkZW50aWFsKHByaXYtPnJlcXVlc3QuZ2V0KCkpOwogICAgIGlmICghY3JlZGVudGlhbEZyb21Q
ZXJzaXN0ZW50U3RvcmFnZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0
KEdUS19FTlRSWShwcml2LT5sb2dpbkVudHJ5KSwgY3JlZGVudGlhbEZyb21QZXJzaXN0ZW50U3Rv
cmFnZS51c2VyKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIGd0a19lbnRyeV9zZXRfdGV4dChH
VEtfRU5UUlkocHJpdi0+cGFzc3dvcmRFbnRyeSksIGNyZWRlbnRpYWxGcm9tUGVyc2lzdGVudFN0
b3JhZ2UucGFzc3dvcmQoKS51dGY4KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5o
CmluZGV4IDU5Y2M5ZjA4YzdhNy4uYjMxMWE0NWY2M2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1
ZXN0LmgKQEAgLTkyLDkgKzkyLDE3IEBAIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dl
dF90eXBlICAgICAgICAgICAgICAgICh2b2lkKTsKIFdFQktJVF9BUEkgZ2Jvb2xlYW4KIHdlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzICAgIChXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X3NldF9jYW5fc2F2ZV9jcmVkZW50aWFscyhXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgICAgICAg
ICBlbmFibGVkKTsKKwogV0VCS0lUX0FQSSBXZWJLaXRDcmVkZW50aWFsICoKIHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9jcmVkZW50aWFsIChXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X3NldF9wcm9wb3NlZF9jcmVkZW50aWFsIChXZWJLaXRBdXRoZW50
aWNhdGlvblJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q3JlZGVudGlhbCAgICAgICAgICAgICpjcmVk
ZW50aWFsKTsKKwogV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCiB3ZWJraXRfYXV0aGVudGljYXRp
b25fcmVxdWVzdF9nZXRfaG9zdCAgICAgICAgICAgICAgICAoV2ViS2l0QXV0aGVudGljYXRpb25S
ZXF1ZXN0ICpyZXF1ZXN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgKaW5kZXggZTNmNjg1NTEzYmUx
Li5jNzExMmM1YmJkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaApAQCAtMTEyLDYgKzExMiwxMyBA
QCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X2l0cF9lbmFibGVkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKFdlYktpdFdlYgogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfZW5hYmxlZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwogCitXRUJLSVRfQVBJIHZv
aWQKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9jcmVkZW50aWFs
X3N0b3JhZ2VfZW5hYmxlZCAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgIGVuYWJsZWQpOworCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3BlcnNpc3RlbnRf
Y3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFu
YWdlcik7CisKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2Zl
dGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIgKm1hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYnNpdGVEYXRhVHlwZXMg
ICAgdHlwZXMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAppbmRleCAxYzM2N2VlMjAy
NDguLmQ0MjEwYThkNjVhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CkBAIC0z
NDUsMTAgKzM0NSwxMiBAQCBXZWJLaXRBdXRoZW50aWNhdGlvblNjaGVtZQogd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfYXV0aGVudGljYXRlCiB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVx
dWVzdF9jYW5jZWwKIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRl
bnRpYWxzCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9zZXRfY2FuX3NhdmVfY3JlZGVu
dGlhbHMKIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9ob3N0CiB3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcG9ydAogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVl
c3RfaXNfcmV0cnkKIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9wb3NlZF9j
cmVkZW50aWFsCit3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9zZXRfcHJvcG9zZWRfY3Jl
ZGVudGlhbAogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3JlYWxtCiB3ZWJraXRf
YXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfc2NoZW1lCiB3ZWJraXRfYXV0aGVudGljYXRpb25f
cmVxdWVzdF9pc19mb3JfcHJveHkKQEAgLTE0NjcsNiArMTQ2OSw4IEBAIHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfZG9tX2NhY2hlX2RpcmVjdG9yeQogd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcgogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X3NldF9pdHBfZW5hYmxlZAogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfZW5h
YmxlZAord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X2NyZWRlbnRp
YWxfc3RvcmFnZV9lbmFibGVkCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3BlcnNp
c3RlbnRfY3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9mZXRjaAogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoX2ZpbmlzaAogd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3JlbW92ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgK
aW5kZXggOThlYTZmY2YzZWFlLi5lNTE0NDE4M2IyMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0LmgKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRBdXRoZW50aWNhdGlvblJlcXVl
c3QuaApAQCAtOTEsOSArOTEsMTcgQEAgd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0
X3R5cGUgICAgICAgICAgICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMgICAgKFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CiAKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3Rfc2V0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKFdlYktpdEF1
dGhlbnRpY2F0aW9uUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICAg
IGVuYWJsZWQpOworCiBXRUJLSVRfQVBJIFdlYktpdENyZWRlbnRpYWwgKgogd2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwgKFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCAqcmVxdWVzdCk7CiAKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3Rfc2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwgKFdlYktpdEF1dGhlbnRp
Y2F0aW9uUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDcmVkZW50aWFsICAgICAgICAgICAgKmNyZWRl
bnRpYWwpOworCiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2dldF9ob3N0ICAgICAgICAgICAgICAgIChXZWJLaXRBdXRoZW50aWNhdGlvblJl
cXVlc3QgKnJlcXVlc3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL3dwZS9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaAppbmRleCAxNzUwMjM1OTcyY2Qu
LmFlNDM4ZmVhZmViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oCkBAIC0xMTIsNiArMTEyLDEzIEBA
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfaXRwX2VuYWJsZWQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoV2ViS2l0V2ViCiBXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9lbmFibGVkICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CiAKK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxf
c3RvcmFnZV9lbmFibGVkIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgZW5hYmxlZCk7CisKK1dFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfcGVyc2lzdGVudF9j
cmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5h
Z2VyKTsKKwogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0
Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciAqbWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyAg
ICB0eXBlcywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9j
cy93cGUtMS4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
ZG9jcy93cGUtMS4wLXNlY3Rpb25zLnR4dAppbmRleCBjODZkYmM3M2E3OGUuLjA1OTIwN2U1ZDQ5
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0x
LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9j
cy93cGUtMS4wLXNlY3Rpb25zLnR4dApAQCAtMzQ4LDEwICszNDgsMTIgQEAgV2ViS2l0QXV0aGVu
dGljYXRpb25TY2hlbWUKIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2F1dGhlbnRpY2F0
ZQogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuY2VsCiB3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9jYW5fc2F2ZV9jcmVkZW50aWFscword2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3Rfc2V0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzCiB3ZWJraXRfYXV0aGVudGljYXRpb25f
cmVxdWVzdF9nZXRfaG9zdAogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3BvcnQK
IHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2lzX3JldHJ5CiB3ZWJraXRfYXV0aGVudGlj
YXRpb25fcmVxdWVzdF9nZXRfcHJvcG9zZWRfY3JlZGVudGlhbAord2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3Rfc2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwKIHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2dldF9yZWFsbQogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Nj
aGVtZQogd2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfaXNfZm9yX3Byb3h5CkBAIC0xNDAx
LDYgKzE0MDMsOCBAQCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2RvbV9jYWNoZV9k
aXJlY3RvcnkKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfY29va2llX21hbmFnZXIK
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9zZXRfaXRwX2VuYWJsZWQKIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX2VuYWJsZWQKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9zZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZAord2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9wZXJzaXN0ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFi
bGVkCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2gKIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9mZXRjaF9maW5pc2gKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9yZW1v
dmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNp
dGVEYXRhU3RvcmUuaAppbmRleCA2MWMxNWIyOGJlYWIuLjg0OWNjNGExNTE2ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhU3Rv
cmUuaApAQCAtMjQyLDYgKzI0MiwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgV2ViQ29yZTo6Q3Vy
bFByb3h5U2V0dGluZ3MmIG5ldHdvcmtQcm94eVNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4gbV9w
cm94eVNldHRpbmdzOyB9CiAjZW5kaWYKIAorI2lmIFVTRShTT1VQKQorICAgIHZvaWQgc2V0UGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZChib29sKTsKKyAgICBib29sIHBlcnNpc3Rl
bnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3BlcnNpc3RlbnRD
cmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgJiYgaXNQZXJzaXN0ZW50KCk7IH0KKyNlbmRpZgorCiAg
ICAgc3RhdGljIHZvaWQgYWxsb3dXZWJzaXRlRGF0YVJlY29yZHNGb3JBbGxPcmlnaW5zKCk7CiAK
ICNpZiBIQVZFKFNFQ19LRVlfUFJPWFkpCkBAIC0zNjgsNiArMzczLDEwIEBAIHByaXZhdGU6CiAg
ICAgV2ViQ29yZTo6Q3VybFByb3h5U2V0dGluZ3MgbV9wcm94eVNldHRpbmdzOwogI2VuZGlmCiAK
KyNpZiBVU0UoU09VUCkKKyAgICBib29sIG1fcGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5h
YmxlZCB7IHRydWUgfTsKKyNlbmRpZgorCiAgICAgSGFzaFNldDxXZWJDb3JlOjpDb29raWU+IG1f
cGVuZGluZ0Nvb2tpZXM7CiAgICAgCiAgICAgV2Vha0hhc2hTZXQ8V2ViUHJvY2Vzc1Byb3h5PiBt
X3Byb2Nlc3NlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVE
YXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2Vic2l0ZURhdGEvc291cC9XZWJzaXRlRGF0YVN0b3JlU291cC5jcHAKaW5kZXggNDg5YzNm
MjI5MTRkLi4xMmY5Y2Q4MTliNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL3NvdXAvV2Vic2l0ZURhdGFTdG9yZVNvdXAuY3Bw
CkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2Vic2l0
ZURhdGFTdG9yZS5oIgogCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NQb29s
LmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKQEAgLTM2LDkgKzM3
LDIzIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpwbGF0Zm9y
bVNldE5ldHdvcmtQYXJhbWV0ZXJzKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzJiBwYXJhbWV0
ZXJzKQogewogICAgIGF1dG8mIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnMu
bmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzOworICAgIG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5w
ZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gbV9wZXJzaXN0ZW50Q3JlZGVudGlh
bFN0b3JhZ2VFbmFibGVkOwogCiAgICAgaWYgKGF1dG8qIHByb2Nlc3NQb29sID0gcHJvY2Vzc1Bv
b2xGb3JDb29raWVTdG9yYWdlT3BlcmF0aW9ucygpKQogICAgICAgICBwcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlKG1fc2Vzc2lvbklELCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVu
dFN0b3JhZ2VQYXRoLCBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuY29va2llUGVyc2lzdGVudFN0
b3JhZ2VUeXBlKTsKIH0KIAordm9pZCBXZWJzaXRlRGF0YVN0b3JlOjpzZXRQZXJzaXN0ZW50Q3Jl
ZGVudGlhbFN0b3JhZ2VFbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBpZiAocGVyc2lzdGVu
dENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChlbmFibGVkICYmICFpc1BlcnNpc3RlbnQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV9wZXJzaXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkID0gZW5hYmxlZDsKKyAg
ICBmb3IgKGF1dG8mIHByb2Nlc3NQb29sIDogcHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nl
c3NQb29sLT5zZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6
OlNldFBlcnNpc3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQobV9zZXNzaW9uSUQsIG1fcGVy
c2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCkpOwogfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vz
c1Bvb2xTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bv
b2xTb3VwLmNwcAppbmRleCA1OWVlNzg4YzEyMWMuLmI2ZTU2NmMxZTlmMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3Mvc291cC9XZWJQcm9jZXNzUG9vbFNvdXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL3NvdXAvV2ViUHJvY2Vzc1Bvb2xTb3VwLmNwcApAQCAt
MzksNiArMzksOCBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpwbGF0Zm9ybUluaXRpYWxpemVOZXR3
b3JrUHJvY2VzcyhOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYQogewogICAgIE5ldHdvcmtTZXNz
aW9uQ3JlYXRpb25QYXJhbWV0ZXJzJiBkZWZhdWx0U2Vzc2lvblBhcmFtZXRlcnMgPSBwYXJhbWV0
ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVyczsK
ICAgICBzdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+Z2V0Q29va2llUGVyc2lz
dGVudFN0b3JhZ2UoZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnNlc3Npb25JRCwgZGVmYXVsdFNl
c3Npb25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlUGF0aCwgZGVmYXVsdFNlc3Np
b25QYXJhbWV0ZXJzLmNvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZSk7CisgICAgaWYgKG1fd2Vi
c2l0ZURhdGFTdG9yZSkKKyAgICAgICAgZGVmYXVsdFNlc3Npb25QYXJhbWV0ZXJzLnBlcnNpc3Rl
bnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPnBlcnNpc3Rl
bnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKTsKIAogICAgIHBhcmFtZXRlcnMuY29va2llQWNj
ZXB0UG9saWN5ID0gbV9pbml0aWFsSFRUUENvb2tpZUFjY2VwdFBvbGljeTsKICAgICBwYXJhbWV0
ZXJzLmlnbm9yZVRMU0Vycm9ycyA9IG1faWdub3JlVExTRXJyb3JzOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDk3MWNiMDcxODhiZS4uOTJmZGE3
MTU0ODUxIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDYtMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdW1dQRV0gQWRkIEFQSSB0byBhbGxvdyBh
cHBsaWNhdGlvbnMgdG8gaGFuZGxlIHRoZSBIVFRQIGF1dGhlbnRpY2F0aW9uIGNyZWRlbnRpYWwg
c3RvcmFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjEzMTc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXBkYXRlIHRoZSBhdXRoZW50aWNhdGlvbiB0ZXN0cyB0byBjaGVjayB0aGUgbmV3IEFQSS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0QXV0aGVudGljYXRp
b24uY3BwOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkNhbmNlbCk6CisgICAg
ICAgICh0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uTG9hZENhbmNlbGxlZCk6CisgICAgICAgICh0
ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRmFpbHVyZSk6CisgICAgICAgICh0ZXN0V2ViVmlld0F1
dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKToKKyAgICAgICAgKHRlc3RXZWJWaWV3QXV0aGVudGlj
YXRpb25FcGhlbWVyYWwpOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3Jh
Z2UpOgorICAgICAgICAodGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MpOgorICAgICAg
ICAodGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkVtcHR5UmVhbG0pOgorICAgICAgICAoc2VydmVy
Q2FsbGJhY2spOgorICAgICAgICAoYmVmb3JlQWxsKToKKwogMjAyMC0wNi0yMiAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gTWluaUJy
b3dzZXI6IHNldCBhIGJhc2UgZGlyZWN0b3J5IGZvciB3ZWJzaXRlIGRhdGEgYW5kIGNhY2hlCmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEF1dGhl
bnRpY2F0aW9uLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0R0xpYi9UZXN0
QXV0aGVudGljYXRpb24uY3BwCmluZGV4IDVlODU5ZWI1MmIwMC4uMmMzYTEwOTNiM2Y4IDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdEF1dGhlbnRp
Y2F0aW9uLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVz
dEF1dGhlbnRpY2F0aW9uLmNwcApAQCAtMjQsNiArMjQsMjAgQEAKIAogc3RhdGljIFdlYktpdFRl
c3RTZXJ2ZXIqIGtTZXJ2ZXI7CiAKK3N0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0VXNlcm5hbWVb
XSA9ICJ1c2VybmFtZSI7CitzdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFBhc3N3b3JkW10gPSAi
cGFzc3dvcmQiOworc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlW10g
PSAiV2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdCI7CitzdGF0aWMgY29uc3QgY2hhciBh
dXRoRXhwZWN0ZWRGYWlsdXJlVGl0bGVbXSA9ICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCI7
CitzdGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uW10gPSAiQmFzaWMg
ZFhObGNtNWhiV1U2Y0dGemMzZHZjbVE9IjsgLy8gQmFzZTY0IGVuY29kaW5nIG9mICJ1c2VybmFt
ZTpwYXNzd29yZCIuCitzdGF0aWMgY29uc3QgY2hhciBhdXRoU3VjY2Vzc0hUTUxTdHJpbmdbXSA9
CisgICAgIjxodG1sPiIKKyAgICAiPGhlYWQ+PHRpdGxlPldlYktpdDJHdGsrIEF1dGhlbnRpY2F0
aW9uIHRlc3Q8L3RpdGxlPjwvaGVhZD4iCisgICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKK3N0
YXRpYyBjb25zdCBjaGFyIGF1dGhGYWlsdXJlSFRNTFN0cmluZ1tdID0KKyAgICAiPGh0bWw+Igor
ICAgICI8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVh
ZD4iCisgICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKKwogY2xhc3MgQXV0aGVudGljYXRpb25U
ZXN0OiBwdWJsaWMgTG9hZFRyYWNraW5nVGVzdCB7CiBwdWJsaWM6CiAgICAgTUFLRV9HTElCX1RF
U1RfRklYVFVSRShBdXRoZW50aWNhdGlvblRlc3QpOwpAQCAtMzksMjYgKzUzLDM5IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBzdGF0aWMgaW50IGF1dGhlbnRpY2F0aW9uUmV0cmllczsKLSAgICBz
dGF0aWMgYm9vbCBhdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkOwogCiAgICAgdm9pZCBs
b2FkVVJJKGNvbnN0IGNoYXIqIHVyaSkKICAgICB7CiAgICAgICAgIC8vIFJlc2V0IHRoZSByZXRy
eSBjb3VudCBvZiB0aGUgZmFrZSBzZXJ2ZXIgd2hlbiBhIHBhZ2UgaXMgbG9hZGVkLgogICAgICAg
ICBhdXRoZW50aWNhdGlvblJldHJpZXMgPSAwOwotICAgICAgICBhdXRoZW50aWNhdGlvbkNhbmNl
bGxlZFJlY2VpdmVkID0gZmFsc2U7CisgICAgICAgIG1fYXV0aGVudGljYXRpb25DYW5jZWxsZWRS
ZWNlaXZlZCA9IGZhbHNlOwogICAgICAgICBMb2FkVHJhY2tpbmdUZXN0Ojpsb2FkVVJJKHVyaSk7
CiAgICAgfQogCiAgICAgc3RhdGljIGdib29sZWFuIHJ1bkF1dGhlbnRpY2F0aW9uQ2FsbGJhY2so
V2ViS2l0V2ViVmlldyosIFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCogcmVxdWVzdCwgQXV0
aGVudGljYXRpb25UZXN0KiB0ZXN0KQogICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChy
ZXF1ZXN0LCAiYXV0aGVudGljYXRlZCIsIEdfQ0FMTEJBQ0soYXV0aGVudGljYXRpb25TdWNjZWVk
ZWRDYWxsYmFjayksIHRlc3QpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlcXVlc3QsICJj
YW5jZWxsZWQiLCBHX0NBTExCQUNLKGF1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkQ2FsbGJhY2spLCB0
ZXN0KTsKICAgICAgICAgdGVzdC0+cnVuQXV0aGVudGljYXRpb24ocmVxdWVzdCk7CiAgICAgICAg
IHJldHVybiBUUlVFOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGF1dGhlbnRpY2F0aW9uQ2Fu
Y2VsbGVkQ2FsbGJhY2soV2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiwgQXV0aGVudGljYXRp
b25UZXN0KikKKyAgICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGlvblN1Y2NlZWRlZENhbGxiYWNr
KFdlYktpdEF1dGhlbnRpY2F0aW9uUmVxdWVzdCosIFdlYktpdENyZWRlbnRpYWwqIGNyZWRlbnRp
YWwsIEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCkKICAgICB7Ci0gICAgICAgIGF1dGhlbnRpY2F0
aW9uQ2FuY2VsbGVkUmVjZWl2ZWQgPSB0cnVlOworICAgICAgICBnX2Fzc2VydF9ub25udWxsKGNy
ZWRlbnRpYWwpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2NyZWRlbnRpYWxfZ2V0
X3VzZXJuYW1lKGNyZWRlbnRpYWwpLCA9PSwgYXV0aFRlc3RVc2VybmFtZSk7CisgICAgICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfY3JlZGVudGlhbF9nZXRfcGFzc3dvcmQoY3JlZGVudGlhbCks
ID09LCBhdXRoVGVzdFBhc3N3b3JkKTsKKyAgICAgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRf
Y3JlZGVudGlhbF9nZXRfcGVyc2lzdGVuY2UoY3JlZGVudGlhbCksID09LCBXRUJLSVRfQ1JFREVO
VElBTF9QRVJTSVNURU5DRV9GT1JfU0VTU0lPTik7CisgICAgICAgIGdfYXNzZXJ0X2ZhbHNlKHRl
c3QtPm1fYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCk7CisgICAgICAgIGdfYXNzZXJ0
X2ZhbHNlKHRlc3QtPm1fYXV0aGVudGljYXRpb25TdWNjZWVkZWRSZWNlaXZlZCk7CisgICAgICAg
IHRlc3QtPm1fYXV0aGVudGljYXRpb25TdWNjZWVkZWRSZWNlaXZlZCA9IHRydWU7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgYXV0aGVudGljYXRpb25DYW5jZWxsZWRDYWxsYmFjayhXZWJLaXRB
dXRoZW50aWNhdGlvblJlcXVlc3QqLCBBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QpCisgICAgewor
ICAgICAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2F1dGhlbnRpY2F0aW9uU3VjY2VlZGVkUmVj
ZWl2ZWQpOworICAgICAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2F1dGhlbnRpY2F0aW9uQ2Fu
Y2VsbGVkUmVjZWl2ZWQpOworICAgICAgICB0ZXN0LT5tX2F1dGhlbnRpY2F0aW9uQ2FuY2VsbGVk
UmVjZWl2ZWQgPSB0cnVlOwogICAgIH0KIAogICAgIHZvaWQgcnVuQXV0aGVudGljYXRpb24oV2Vi
S2l0QXV0aGVudGljYXRpb25SZXF1ZXN0KiByZXF1ZXN0KQpAQCAtNzQsOCArMTAxLDkgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9hdXRoZW50aWNhdGlvblJlcXVlc3QuZ2V0KCk7CiAgICAg
fQogCi1wcml2YXRlOgogICAgIEdSZWZQdHI8V2ViS2l0QXV0aGVudGljYXRpb25SZXF1ZXN0PiBt
X2F1dGhlbnRpY2F0aW9uUmVxdWVzdDsKKyAgICBib29sIG1fYXV0aGVudGljYXRpb25TdWNjZWVk
ZWRSZWNlaXZlZCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2F1dGhlbnRpY2F0aW9uQ2FuY2VsbGVk
UmVjZWl2ZWQgeyBmYWxzZSB9OwogfTsKIAogY2xhc3MgRXBoZW1lcmFsQXV0aGVudGljYXRpb25U
ZXN0IDogcHVibGljIEF1dGhlbnRpY2F0aW9uVGVzdCB7CkBAIC05NCwyMSArMTIyLDYgQEAgcHVi
bGljOgogfTsKIAogaW50IEF1dGhlbnRpY2F0aW9uVGVzdDo6YXV0aGVudGljYXRpb25SZXRyaWVz
ID0gMDsKLWJvb2wgQXV0aGVudGljYXRpb25UZXN0OjphdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJl
Y2VpdmVkID0gZmFsc2U7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGF1dGhUZXN0VXNlcm5hbWVbXSA9
ICJ1c2VybmFtZSI7Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRoVGVzdFBhc3N3b3JkW10gPSAicGFz
c3dvcmQiOwotc3RhdGljIGNvbnN0IGNoYXIgYXV0aEV4cGVjdGVkU3VjY2Vzc1RpdGxlW10gPSAi
V2ViS2l0Mkd0aysgQXV0aGVudGljYXRpb24gdGVzdCI7Ci1zdGF0aWMgY29uc3QgY2hhciBhdXRo
RXhwZWN0ZWRGYWlsdXJlVGl0bGVbXSA9ICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCI7Ci1z
dGF0aWMgY29uc3QgY2hhciBhdXRoRXhwZWN0ZWRBdXRob3JpemF0aW9uW10gPSAiQmFzaWMgZFhO
bGNtNWhiV1U2Y0dGemMzZHZjbVE9IjsgLy8gQmFzZTY0IGVuY29kaW5nIG9mICJ1c2VybmFtZTpw
YXNzd29yZCIuCi1zdGF0aWMgY29uc3QgY2hhciBhdXRoU3VjY2Vzc0hUTUxTdHJpbmdbXSA9Ci0g
ICAgIjxodG1sPiIKLSAgICAiPGhlYWQ+PHRpdGxlPldlYktpdDJHdGsrIEF1dGhlbnRpY2F0aW9u
IHRlc3Q8L3RpdGxlPjwvaGVhZD4iCi0gICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKLXN0YXRp
YyBjb25zdCBjaGFyIGF1dGhGYWlsdXJlSFRNTFN0cmluZ1tdID0KLSAgICAiPGh0bWw+IgotICAg
ICI8aGVhZD48dGl0bGU+NDAxIEF1dGhvcml6YXRpb24gUmVxdWlyZWQ8L3RpdGxlPjwvaGVhZD4i
Ci0gICAgIjxib2R5PjwvYm9keT48L2h0bWw+IjsKIAogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdB
dXRoZW50aWNhdGlvblJlcXVlc3QoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2lu
dGVyKQogewpAQCAtMTM4LDYgKzE1MSw4IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVu
dGljYXRpb25DYW5jZWwoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2luCiAgICAg
Z19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rl
c3Q6OkxvYWRGaW5pc2hlZCk7CiAKICAgICBnX2Fzc2VydF9lcnJvcih0ZXN0LT5tX2Vycm9yLmdl
dCgpLCBXRUJLSVRfTkVUV09SS19FUlJPUiwgV0VCS0lUX05FVFdPUktfRVJST1JfQ0FOQ0VMTEVE
KTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fYXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNl
aXZlZCk7CisgICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+bV9hdXRoZW50aWNhdGlvblN1Y2NlZWRl
ZFJlY2VpdmVkKTsKIH0KIAogc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkxv
YWRDYW5jZWxsZWQoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAt
MTQ3LDcgKzE2Miw3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Mb2Fk
Q2FuY2VsbGVkKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvCiAgICAgd2Via2l0X3dlYl92
aWV3X3N0b3BfbG9hZGluZyh0ZXN0LT5tX3dlYlZpZXcpOwogICAgIC8vIEV4cGVjdCBlbXB0eSBw
YWdlLgogICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOwotICAgIGdfYXNzZXJ0X3Ry
dWUodGVzdC0+YXV0aGVudGljYXRpb25DYW5jZWxsZWRSZWNlaXZlZCk7CisgICAgZ19hc3NlcnRf
dHJ1ZSh0ZXN0LT5tX2F1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQpOwogCiAgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50cy5zaXplKCksID09LCAzKTsKICAgICBnX2Fz
c2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzBdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkU3RhcnRlZCk7CkBAIC0xNTUsNiArMTcwLDggQEAgc3RhdGljIHZvaWQg
dGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkxvYWRDYW5jZWxsZWQoQXV0aGVudGljYXRpb25UZXN0
KiB0ZXN0LCBnY28KICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9
PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKIAogICAgIGdfYXNzZXJ0X2Vycm9y
KHRlc3QtPm1fZXJyb3IuZ2V0KCksIFdFQktJVF9ORVRXT1JLX0VSUk9SLCBXRUJLSVRfTkVUV09S
S19FUlJPUl9DQU5DRUxMRUQpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9hdXRoZW50aWNh
dGlvbkNhbmNlbGxlZFJlY2VpdmVkKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2F1dGhl
bnRpY2F0aW9uU3VjY2VlZGVkUmVjZWl2ZWQpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmll
d0F1dGhlbnRpY2F0aW9uRmFpbHVyZShBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCkBAIC0xODEsNiArMTk4LDggQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50
aWNhdGlvbkZhaWx1cmUoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2kKICAgICBn
X2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVz
dDo6TG9hZENvbW1pdHRlZCk7CiAgICAgZ19hc3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50
c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6OkxvYWRGaW5pc2hlZCk7CiAgICAgZ19hc3NlcnRf
Y21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1
dGhFeHBlY3RlZEZhaWx1cmVUaXRsZSk7CisgICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+bV9hdXRo
ZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVkKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5t
X2F1dGhlbnRpY2F0aW9uU3VjY2VlZGVkUmVjZWl2ZWQpOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0
V2ViVmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKQEAgLTE5Nyw2ICsyMTYsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0V2Vi
Vmlld0F1dGhlbnRpY2F0aW9uTm9DcmVkZW50aWFsKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwg
Z2NvbgogICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2Fk
VHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKICAg
ICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZp
ZXcpLCA9PSwgYXV0aEV4cGVjdGVkRmFpbHVyZVRpdGxlKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh0
ZXN0LT5tX2F1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQpOworICAgIGdfYXNzZXJ0X2Zh
bHNlKHRlc3QtPm1fYXV0aGVudGljYXRpb25TdWNjZWVkZWRSZWNlaXZlZCk7CiB9CiAKIHN0YXRp
YyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25FcGhlbWVyYWwoRXBoZW1lcmFsQXV0aGVu
dGljYXRpb25UZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAtMjA1LDIwICsyMjYsNTcgQEAg
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkVwaGVtZXJhbChFcGhlbWVyYWxB
dXRoZW50aWNhdGlvblRlc3QqIHRlc3QKICAgICBhdXRvKiByZXF1ZXN0ID0gdGVzdC0+d2FpdEZv
ckF1dGhlbnRpY2F0aW9uUmVxdWVzdCgpOwogICAgIGdfYXNzZXJ0X251bGwod2Via2l0X2F1dGhl
bnRpY2F0aW9uX3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVzdCkpOwogICAg
IGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2Ny
ZWRlbnRpYWxzKHJlcXVlc3QpKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9z
ZXRfY2FuX3NhdmVfY3JlZGVudGlhbHMocmVxdWVzdCwgVFJVRSk7CisgICAgZ19hc3NlcnRfZmFs
c2Uod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3JlZGVudGlhbHMocmVx
dWVzdCkpOwogfQogCi0jaWYgVVNFKExJQlNFQ1JFVCkKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3
QXV0aGVudGljYXRpb25TdG9yYWdlKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9p
bnRlcikKIHsKKyAgICBXZWJLaXRBdXRoZW50aWNhdGlvblJlcXVlc3QqIHJlcXVlc3QgPSBudWxs
cHRyOworI2lmIFVTRShMSUJTRUNSRVQpCiAgICAgLy8gSWYgV2ViS2l0IGhhcyBiZWVuIGNvbXBp
bGVkIHdpdGggbGlic2VjcmV0LCBhbmQgcHJpdmF0ZSBicm93c2luZyBpcyBkaXNhYmxlZAogICAg
IC8vIHRoZW4gY2hlY2sgdGhhdCBjcmVkZW50aWFscyBjYW4gYmUgc2F2ZWQuCiAgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwiKS5kYXRhKCkp
OwotICAgIGF1dG8qIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1ZXN0
KCk7CisgICAgcmVxdWVzdCA9IHRlc3QtPndhaXRGb3JBdXRoZW50aWNhdGlvblJlcXVlc3QoKTsK
ICAgICBnX2Fzc2VydF9udWxsKHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2dldF9wcm9w
b3NlZF9jcmVkZW50aWFsKHJlcXVlc3QpKTsKICAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF9hdXRo
ZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpKTsKLX0KKyAg
ICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9zZXRfY2FuX3NhdmVfY3JlZGVudGlhbHMo
cmVxdWVzdCwgRkFMU0UpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHdlYmtpdF9hdXRoZW50aWNhdGlv
bl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVlc3QpKTsKKyAgICB3ZWJraXRfYXV0
aGVudGljYXRpb25fcmVxdWVzdF9jYW5jZWwocmVxdWVzdCk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisgICAgZ19hc3NlcnRfdHJ1ZSh0ZXN0LT5tX2F1dGhlbnRpY2F0aW9u
Q2FuY2VsbGVkUmVjZWl2ZWQpOworICAgIGdfYXNzZXJ0X2ZhbHNlKHRlc3QtPm1fYXV0aGVudGlj
YXRpb25TdWNjZWVkZWRSZWNlaXZlZCk7CiAjZW5kaWYKIAorICAgIGF1dG8qIHdlYnNpdGVEYXRh
TWFuYWdlciA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIodGVzdC0+
bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydF90cnVlKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfcGVyc2lzdGVudF9jcmVkZW50aWFsX3N0b3JhZ2VfZW5hYmxlZCh3ZWJzaXRlRGF0YU1h
bmFnZXIpKTsKKyAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRf
Y3JlZGVudGlhbF9zdG9yYWdlX2VuYWJsZWQod2Vic2l0ZURhdGFNYW5hZ2VyLCBGQUxTRSk7Cisg
ICAgZ19hc3NlcnRfZmFsc2Uod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9wZXJzaXN0
ZW50X2NyZWRlbnRpYWxfc3RvcmFnZV9lbmFibGVkKHdlYnNpdGVEYXRhTWFuYWdlcikpOworCisg
ICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvYXV0aC10ZXN0Lmh0bWwi
KS5kYXRhKCkpOworICAgIHJlcXVlc3QgPSB0ZXN0LT53YWl0Rm9yQXV0aGVudGljYXRpb25SZXF1
ZXN0KCk7CisgICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9n
ZXRfcHJvcG9zZWRfY3JlZGVudGlhbChyZXF1ZXN0KSk7CisgICAgd2Via2l0X2F1dGhlbnRpY2F0
aW9uX3JlcXVlc3Rfc2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVzdCwgbnVsbHB0cik7Cisg
ICAgZ19hc3NlcnRfbnVsbCh3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9nZXRfcHJvcG9z
ZWRfY3JlZGVudGlhbChyZXF1ZXN0KSk7CisgICAgYXV0byogY3JlZGVudGlhbCA9IHdlYmtpdF9j
cmVkZW50aWFsX25ldyhhdXRoVGVzdFVzZXJuYW1lLCBhdXRoVGVzdFBhc3N3b3JkLCBXRUJLSVRf
Q1JFREVOVElBTF9QRVJTSVNURU5DRV9GT1JfU0VTU0lPTik7CisgICAgd2Via2l0X2F1dGhlbnRp
Y2F0aW9uX3JlcXVlc3Rfc2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVzdCwgY3JlZGVudGlh
bCk7CisgICAgYXV0byogcHJvcG9zZWRDcmVkZW50aWFsID0gd2Via2l0X2F1dGhlbnRpY2F0aW9u
X3JlcXVlc3RfZ2V0X3Byb3Bvc2VkX2NyZWRlbnRpYWwocmVxdWVzdCk7CisgICAgZ19hc3NlcnRf
bm9ubnVsbChwcm9wb3NlZENyZWRlbnRpYWwpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
Y3JlZGVudGlhbF9nZXRfdXNlcm5hbWUoY3JlZGVudGlhbCksID09LCB3ZWJraXRfY3JlZGVudGlh
bF9nZXRfdXNlcm5hbWUocHJvcG9zZWRDcmVkZW50aWFsKSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF9jcmVkZW50aWFsX2dldF9wYXNzd29yZChjcmVkZW50aWFsKSwgPT0sIHdlYmtpdF9j
cmVkZW50aWFsX2dldF9wYXNzd29yZChwcm9wb3NlZENyZWRlbnRpYWwpKTsKKyAgICBnX2Fzc2Vy
dF9jbXB1aW50KHdlYmtpdF9jcmVkZW50aWFsX2dldF9wZXJzaXN0ZW5jZShjcmVkZW50aWFsKSwg
PT0sIHdlYmtpdF9jcmVkZW50aWFsX2dldF9wZXJzaXN0ZW5jZShwcm9wb3NlZENyZWRlbnRpYWwp
KTsKKyAgICB3ZWJraXRfY3JlZGVudGlhbF9mcmVlKHByb3Bvc2VkQ3JlZGVudGlhbCk7CisgICAg
Z19hc3NlcnRfZmFsc2Uod2Via2l0X2F1dGhlbnRpY2F0aW9uX3JlcXVlc3RfY2FuX3NhdmVfY3Jl
ZGVudGlhbHMocmVxdWVzdCkpOworICAgIHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X3Nl
dF9jYW5fc2F2ZV9jcmVkZW50aWFscyhyZXF1ZXN0LCBUUlVFKTsKKyAgICBnX2Fzc2VydF90cnVl
KHdlYmtpdF9hdXRoZW50aWNhdGlvbl9yZXF1ZXN0X2Nhbl9zYXZlX2NyZWRlbnRpYWxzKHJlcXVl
c3QpKTsKKyAgICB3ZWJraXRfYXV0aGVudGljYXRpb25fcmVxdWVzdF9hdXRoZW50aWNhdGUocmVx
dWVzdCwgY3JlZGVudGlhbCk7CisgICAgd2Via2l0X2NyZWRlbnRpYWxfZnJlZShjcmVkZW50aWFs
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBnX2Fzc2VydF9mYWxz
ZSh0ZXN0LT5tX2F1dGhlbnRpY2F0aW9uQ2FuY2VsbGVkUmVjZWl2ZWQpOworICAgIGdfYXNzZXJ0
X3RydWUodGVzdC0+bV9hdXRoZW50aWNhdGlvblN1Y2NlZWRlZFJlY2VpdmVkKTsKKyAgICB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfY3JlZGVudGlhbF9zdG9yYWdl
X2VuYWJsZWQod2Vic2l0ZURhdGFNYW5hZ2VyLCBUUlVFKTsKK30KKwogc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MoQXV0aGVudGljYXRpb25UZXN0KiB0ZXN0LCBn
Y29uc3Rwb2ludGVyKQogewogICAgIC8vIFRlc3QgY29ycmVjdCBhdXRoZW50aWNhdGlvbi4KQEAg
LTIzNCw2ICsyOTIsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uU3Vj
Y2VzcyhBdXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdHBvaQogICAgIGdfYXNzZXJ0X2Nt
cGludCh0ZXN0LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29t
bWl0dGVkKTsKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwg
TG9hZFRyYWNraW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKICAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYl92aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVk
U3VjY2Vzc1RpdGxlKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2F1dGhlbnRpY2F0aW9u
Q2FuY2VsbGVkUmVjZWl2ZWQpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9hdXRoZW50aWNh
dGlvblN1Y2NlZWRlZFJlY2VpdmVkKTsKIAogICAgIC8vIFRlc3QgbG9hZGluZyB0aGUgc2FtZSAo
YXV0aG9yaXplZCkgcGFnZSBhZ2Fpbi4KICAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9hdXRoLXRlc3QuaHRtbCIpLmRhdGEoKSk7CkBAIC0yNDUsNiArMzA1LDggQEAg
c3RhdGljIHZvaWQgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN1Y2Nlc3MoQXV0aGVudGljYXRp
b25UZXN0KiB0ZXN0LCBnY29uc3Rwb2kKICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2Fk
RXZlbnRzWzFdLCA9PSwgTG9hZFRyYWNraW5nVGVzdDo6TG9hZENvbW1pdHRlZCk7CiAgICAgZ19h
c3NlcnRfY21waW50KHRlc3QtPm1fbG9hZEV2ZW50c1syXSwgPT0sIExvYWRUcmFja2luZ1Rlc3Q6
OkxvYWRGaW5pc2hlZCk7CiAgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRf
dGl0bGUodGVzdC0+bV93ZWJWaWV3KSwgPT0sIGF1dGhFeHBlY3RlZFN1Y2Nlc3NUaXRsZSk7Cisg
ICAgZ19hc3NlcnRfZmFsc2UodGVzdC0+bV9hdXRoZW50aWNhdGlvbkNhbmNlbGxlZFJlY2VpdmVk
KTsKKyAgICBnX2Fzc2VydF90cnVlKHRlc3QtPm1fYXV0aGVudGljYXRpb25TdWNjZWVkZWRSZWNl
aXZlZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25FbXB0eVJl
YWxtKEF1dGhlbnRpY2F0aW9uVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKQEAgLTI2MSw2ICsz
MjMsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRW1wdHlSZWFsbShB
dXRoZW50aWNhdGlvblRlc3QqIHRlc3QsIGdjb25zdAogICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0
LT5tX2xvYWRFdmVudHNbMV0sID09LCBMb2FkVHJhY2tpbmdUZXN0OjpMb2FkQ29tbWl0dGVkKTsK
ICAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9sb2FkRXZlbnRzWzJdLCA9PSwgTG9hZFRyYWNr
aW5nVGVzdDo6TG9hZEZpbmlzaGVkKTsKICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYl92
aWV3X2dldF90aXRsZSh0ZXN0LT5tX3dlYlZpZXcpLCA9PSwgYXV0aEV4cGVjdGVkU3VjY2Vzc1Rp
dGxlKTsKKyAgICBnX2Fzc2VydF9mYWxzZSh0ZXN0LT5tX2F1dGhlbnRpY2F0aW9uQ2FuY2VsbGVk
UmVjZWl2ZWQpOworICAgIGdfYXNzZXJ0X3RydWUodGVzdC0+bV9hdXRoZW50aWNhdGlvblN1Y2Nl
ZWRlZFJlY2VpdmVkKTsKIH0KIAogY2xhc3MgVHVubmVsIHsKQEAgLTM1MCw3ICs0MTQsNyBAQCBz
dGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdl
KiBtZXNzYWdlLCBjb25zdCBjaGFyKgogICAgICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXV0aEZhaWx1
cmVIVE1MU3RyaW5nLCBzdHJsZW4oYXV0aEZhaWx1cmVIVE1MU3RyaW5nKSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAvLyBBdXRoZW50aWNhdGlvbiBub3Qgc3VjY2Vzc2Z1bCwgZGlz
cGxheSBhICI0MDEgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCIgcGFnZS4KLSAgICAgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICAgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIGlzUHJveHkgPyBTT1VQX1NUQVRV
U19QUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCA6IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpF
RCk7CiAgICAgICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhdXRoRmFpbHVyZUhUTUxTdHJpbmcsIHN0cmxl
bihhdXRoRmFpbHVyZUhUTUxTdHJpbmcpKTsKICAgICAgICAgfQogICAgIH0gZWxzZQpAQCAtNDI5
LDkgKzQ5Myw3IEBAIHZvaWQgYmVmb3JlQWxsKCkKICAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFk
ZCgiQXV0aGVudGljYXRpb24iLCAiYXV0aGVudGljYXRpb24tZmFpbHVyZSIsIHRlc3RXZWJWaWV3
QXV0aGVudGljYXRpb25GYWlsdXJlKTsKICAgICBBdXRoZW50aWNhdGlvblRlc3Q6OmFkZCgiQXV0
aGVudGljYXRpb24iLCAiYXV0aGVudGljYXRpb24tbm8tY3JlZGVudGlhbCIsIHRlc3RXZWJWaWV3
QXV0aGVudGljYXRpb25Ob0NyZWRlbnRpYWwpOwogICAgIEVwaGVtZXJhbEF1dGhlbnRpY2F0aW9u
VGVzdDo6YWRkKCJBdXRoZW50aWNhdGlvbiIsICJhdXRoZW50aWNhdGlvbi1lcGhlbWVyYWwiLCB0
ZXN0V2ViVmlld0F1dGhlbnRpY2F0aW9uRXBoZW1lcmFsKTsKLSNpZiBVU0UoTElCU0VDUkVUKQog
ICAgIEF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJBdXRoZW50aWNhdGlvbiIsICJhdXRoZW50aWNh
dGlvbi1zdG9yYWdlIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblN0b3JhZ2UpOwotI2VuZGlm
CiAgICAgQXV0aGVudGljYXRpb25UZXN0OjphZGQoIkF1dGhlbnRpY2F0aW9uIiwgImF1dGhlbnRp
Y2F0aW9uLWVtcHR5LXJlYWxtIiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvbkVtcHR5UmVhbG0p
OwogICAgIFByb3h5QXV0aGVudGljYXRpb25UZXN0OjphZGQoIkF1dGhlbnRpY2F0aW9uIiwgImF1
dGhlbnRpY2F0aW9uLXByb3h5IiwgdGVzdFdlYlZpZXdBdXRoZW50aWNhdGlvblByb3h5KTsKICAg
ICBQcm94eUF1dGhlbnRpY2F0aW9uVGVzdDo6YWRkKCJBdXRoZW50aWNhdGlvbiIsICJhdXRoZW50
aWNhdGlvbi1wcm94eS1odHRwcyIsIHRlc3RXZWJWaWV3QXV0aGVudGljYXRpb25Qcm94eUhUVFBT
KTsK
</data>
<flag name="review"
          id="417975"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>