<?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>199085</bug_id>
          
          <creation_ts>2019-06-20 15:51:26 -0700</creation_ts>
          <short_desc>Implement a new SPI to inform clients about AppSSO</short_desc>
          <delta_ts>2019-06-25 20:11:42 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jiewen Tan">jiewen_tan</reporter>
          <assigned_to name="Jiewen Tan">jiewen_tan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1546707</commentid>
    <comment_count>0</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-20 15:51:26 -0700</bug_when>
    <thetext>Implement a new SPI to inform clients about AppSSO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546708</commentid>
    <comment_count>1</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-20 15:51:39 -0700</bug_when>
    <thetext>&lt;rdar://problem/50028246&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546718</commentid>
    <comment_count>2</comment_count>
      <attachid>372598</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-20 16:01:27 -0700</bug_when>
    <thetext>Created attachment 372598
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546914</commentid>
    <comment_count>3</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-06-21 10:41:22 -0700</bug_when>
    <thetext>GTK build error:

Source/WebKit/CMakeFiles/WebKit.dir/__/__/DerivedSources/WebKit/VisitedLinkStoreMessageReceiver.cpp.o -c /home/ews/gtk-wk2-ews/WebKit/WebKitBuild/Release/DerivedSources/WebKit/VisitedLinkStoreMessageReceiver.cpp
In file included from ../../Source/WebKit/UIProcess/VisitedLinkStore.h:31,
                 from /home/ews/gtk-wk2-ews/WebKit/WebKitBuild/Release/DerivedSources/WebKit/VisitedLinkStoreMessageReceiver.cpp:27:
../../Source/WebKit/UIProcess/WebPageProxy.h:44:10: fatal error: SOAuthorizationLoadPolicy.h: No such file or directory
 #include &quot;SOAuthorizationLoadPolicy.h&quot;
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546915</commentid>
    <comment_count>4</comment_count>
      <attachid>372598</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-06-21 10:45:03 -0700</bug_when>
    <thetext>Comment on attachment 372598
Patch

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

This seems reasonable, but we need a WK API review (ggaren?), and please fix the build issues I highlighted. r- to fix the build.

&gt; Source/WebKit/UIProcess/API/APINavigationClient.h:35
&gt; +#include &quot;SOAuthorizationLoadPolicy.h&quot;

This needs to be protected with HAVE(APP_SSO).

&gt; Source/WebKit/UIProcess/WebPageProxy.h:44
&gt; +#include &quot;SOAuthorizationLoadPolicy.h&quot;

This needs to be protected by HAVE(APP_SSO)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1546917</commentid>
    <comment_count>5</comment_count>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 10:50:44 -0700</bug_when>
    <thetext>(In reply to Brent Fulgham from comment #4)
&gt; Comment on attachment 372598 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=372598&amp;action=review
&gt; 
&gt; This seems reasonable, but we need a WK API review (ggaren?), and please fix
&gt; the build issues I highlighted. r- to fix the build.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/APINavigationClient.h:35
&gt; &gt; +#include &quot;SOAuthorizationLoadPolicy.h&quot;
&gt; 
&gt; This needs to be protected with HAVE(APP_SSO).
&gt; 
&gt; &gt; Source/WebKit/UIProcess/WebPageProxy.h:44
&gt; &gt; +#include &quot;SOAuthorizationLoadPolicy.h&quot;
&gt; 
&gt; This needs to be protected by HAVE(APP_SSO)

Thanks Brent for reviewing the patch. I was working on another branch locally, and therefore couldn&apos;t make this change timely.

Also, I might just remove the extension name in this SPI as we might not be able to get that information before the session start. Also, since the UI can be shown out of process, it might not event make sense to misguide clients to show that name. Therefore, I might need a separate SPI to tell clients what extension is showing when the UI is actually handled by the UI process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547047</commentid>
    <comment_count>6</comment_count>
      <attachid>372662</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-21 18:17:26 -0700</bug_when>
    <thetext>Created attachment 372662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547734</commentid>
    <comment_count>7</comment_count>
      <attachid>372662</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2019-06-25 11:04:06 -0700</bug_when>
    <thetext>Comment on attachment 372662
Patch

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

r=me

&gt; Source/WebKit/ChangeLog:10
&gt; +        navigations. Therefore, clients can make a informed decision whether this is the right moment

make a informed decision whether =&gt; make an informed decision about whether

&gt; Source/WebKit/ChangeLog:12
&gt; +        pass along a human readable name for the extension such that clients could do whatever they

could do =&gt; can do

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:109
&gt; +        if (!weakThis)
&gt; +            return;

Why use a weak reference instead of a strong reference? What will keep the SOAuthorizationSession alive if the call to decidePolicyForSOAuthorizationLoad returns asynchronously?

If we do want to use a weak reference, after checking the weak reference, we should put it into a strong reference and then use data members directly instead of using weakThis-&gt;, for both readability and protection from null pointer crashes.

Or, if we switch to capturing a strong reference, we can also use data members directly.

&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:119
&gt; +        // FIXME&lt;rdar://problem/48909336&gt;: Replace the below with AppSSO constants.

FIXME: &lt;rdar://problem/48909336&gt; Replace the below with AppSSO constants.

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:189
&gt; +    if (self.allowSOAuthorizationLoad) {
&gt; +        completionHandler(policy);
&gt; +        return;
&gt; +    }

Seems like we should also have a test for invoking the completion handler on the next tick of the runloop, in case that exposes any object lifetime issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547935</commentid>
    <comment_count>8</comment_count>
      <attachid>372662</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-25 18:47:52 -0700</bug_when>
    <thetext>Comment on attachment 372662
Patch

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

Thanks Geoff for r+ this patch.

&gt;&gt; Source/WebKit/ChangeLog:10
&gt;&gt; +        navigations. Therefore, clients can make a informed decision whether this is the right moment
&gt; 
&gt; make a informed decision whether =&gt; make an informed decision about whether

Fixed.

&gt;&gt; Source/WebKit/ChangeLog:12
&gt;&gt; +        pass along a human readable name for the extension such that clients could do whatever they
&gt; 
&gt; could do =&gt; can do

Fixed.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:109
&gt;&gt; +            return;
&gt; 
&gt; Why use a weak reference instead of a strong reference? What will keep the SOAuthorizationSession alive if the call to decidePolicyForSOAuthorizationLoad returns asynchronously?
&gt; 
&gt; If we do want to use a weak reference, after checking the weak reference, we should put it into a strong reference and then use data members directly instead of using weakThis-&gt;, for both readability and protection from null pointer crashes.
&gt; 
&gt; Or, if we switch to capturing a strong reference, we can also use data members directly.

Ultimately, the website datastore will keep it alive. I don&apos;t know why we would want to use a strong reference to extend the lifetime of the current SOAuthorizationSession if the corresponding datastore dies or another SOAuthorizationSession suppresses the current one. Therefore, a weakPtr seems appropriate.

With regard to adding a protector like strong reference to the lambda scope, I feel like it is not necessary. If this becomes null at any point of the execution of this lambda, that means there is a bug at any of those method this lambda tries to call. Adding a protector would effectively hide the real bug.

For readability, I could capture this as well. And then, we could just use the weakThis once at the very beginning of the lambda.

&gt;&gt; Source/WebKit/UIProcess/Cocoa/SOAuthorization/SOAuthorizationSession.mm:119
&gt;&gt; +        // FIXME&lt;rdar://problem/48909336&gt;: Replace the below with AppSSO constants.
&gt; 
&gt; FIXME: &lt;rdar://problem/48909336&gt; Replace the below with AppSSO constants.

Fixed.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/TestSOAuthorization.mm:189
&gt;&gt; +    }
&gt; 
&gt; Seems like we should also have a test for invoking the completion handler on the next tick of the runloop, in case that exposes any object lifetime issues.

Sounds great. Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547949</commentid>
    <comment_count>9</comment_count>
      <attachid>372894</attachid>
    <who name="Jiewen Tan">jiewen_tan</who>
    <bug_when>2019-06-25 19:28:50 -0700</bug_when>
    <thetext>Created attachment 372894
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1547957</commentid>
    <comment_count>10</comment_count>
      <attachid>372894</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-25 20:11:42 -0700</bug_when>
    <thetext>Comment on attachment 372894
Patch for landing

Clearing flags on attachment: 372894

Committed r246829: &lt;https://trac.webkit.org/changeset/246829&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372598</attachid>
            <date>2019-06-20 16:01:27 -0700</date>
            <delta_ts>2019-06-21 18:17:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199085-20190620160126.patch</filename>
            <type>text/plain</type>
            <size>31214</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NjEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ5ZTI2MWYwMjA4MDQ3Zjhi
YTc4NTdiMjFhMDhjMDQ3NmI2NjQ1NjIuLjEzZjNiNDUxM2U0NTI2Y2U1YWU2NjgxM2MzN2NmZTMw
MTk3MWJhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTktMDYtMjAgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYSBuZXcgU1BJ
IHRvIGluZm9ybSBjbGllbnRzIGFib3V0IEFwcFNTTworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDg1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81
MDAyODI0Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBuZXcgU1BJIHRvIGluZm9ybSBjbGllbnRzIGFib3V0
IGluY29taW5nIEFwcFNTTyBpbnRlcmNlcHRpb25zIGR1cmluZworICAgICAgICBuYXZpZ2F0aW9u
cy4gVGhlcmVmb3JlLCBjbGllbnRzIGNhbiBtYWtlIGEgaW5mb3JtZWQgZGVjaXNpb24gd2hldGhl
ciB0aGlzIGlzIHRoZSByaWdodCBtb21lbnQKKyAgICAgICAgdG8gZG8gdGhlIGludGVyY2VwdGlv
biBhcyBpbnRlcmNlcHRpb25zIG9mdGVuIHNob3cgbmF0aXZlIFVJLiBBbHNvLCB0aGUgU1BJIGlz
IGRlc2lnbmVkIHRvCisgICAgICAgIHBhc3MgYWxvbmcgYSBodW1hbiByZWFkYWJsZSBuYW1lIGZv
ciB0aGUgZXh0ZW5zaW9uIHN1Y2ggdGhhdCBjbGllbnRzIGNvdWxkIGRvIHdoYXRldmVyIHRoZXkK
KyAgICAgICAgd2FudCB0byBpbmZvcm0gdXNlcnMgYWJvdXQgd2hhdCdzIGdvaW5nIG9uLgorCisg
ICAgICAgIEhlcmUgaXMgdGhlIG5ldyBTUEk6CisgICAgICAgIC0gKHZvaWQpX3dlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhD
dXJyZW50UG9saWN5OihfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KXBvbGljeSBmb3JFeHRl
bnNpb246KE5TU3RyaW5nICopZXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShf
V0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkpY29tcGxldGlvbkhhbmRsZXI7CisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaDoKKyAgICAgICAg
KEFQSTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9h
ZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25EZWxlZ2F0ZVBy
aXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmF2aWdhdGlvblN0YXRlOjpzZXROYXZpZ2F0aW9uRGVsZWdhdGUpOgorICAgICAgICAo
V2ViS2l0Ojpzb0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6d2tT
T0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2Fk
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXph
dGlvbkxvYWRQb2xpY3kuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0
aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpzdGFydCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5
Rm9yU09BdXRob3JpemF0aW9uTG9hZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5
LTA2LTE5ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSB1bnVzZWQgb3JpZ2luc1dpdGhDcmVkZW50aWFscyBmcm9tIFdlYnNpdGVEYXRhCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaAppbmRleCAx
OTZjMzcyNDJiZDJjZWE2Y2U4ZWU1MjM0OTNhZDc4NzkwYTQ0NGQwLi4wYWFmMDI0Yzg2ODc3YzAx
OGU2Zjg1YTgzMGQxZDFkOTJlMTBlNzNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRl
ICJBdXRoZW50aWNhdGlvbkRlY2lzaW9uTGlzdGVuZXIuaCIKICNpbmNsdWRlICJQbHVnaW5Nb2R1
bGVJbmZvLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uLmgiCisjaW5jbHVk
ZSAiU09BdXRob3JpemF0aW9uTG9hZFBvbGljeS5oIgogI2luY2x1ZGUgIlNhbWVEb2N1bWVudE5h
dmlnYXRpb25UeXBlLmgiCiAjaW5jbHVkZSAiV2ViRXZlbnQuaCIKICNpbmNsdWRlICJXZWJGcmFt
ZVBvbGljeUxpc3RlbmVyUHJveHkuaCIKQEAgLTE0MCw2ICsxNDEsMTMgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBkaWRFbmROYXZpZ2F0aW9uR2VzdHVyZShXZWJLaXQ6OldlYlBhZ2VQcm94
eSYsIGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mKSB7
IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdChX
ZWJLaXQ6OldlYlBhZ2VQcm94eSYpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBkaWRDaGFuZ2VCYWNr
Rm9yd2FyZExpc3QoV2ViS2l0OjpXZWJQYWdlUHJveHkmLCBXZWJLaXQ6OldlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0qLCBjb25zdCBWZWN0b3I8UmVmPFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRl
bT4+JikgeyByZXR1cm4gZmFsc2U7IH0KKworI2lmIEhBVkUoQVBQX1NTTykKKyAgICB2aXJ0dWFs
IHZvaWQgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZChXZWJLaXQ6OldlYlBhZ2VQ
cm94eSYsIFdlYktpdDo6U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSBjdXJyZW50U09BdXRob3Jp
emF0aW9uTG9hZFBvbGljeSwgY29uc3QgV1RGOjpTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFdlYktpdDo6U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCisgICAgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjdXJyZW50U09BdXRob3JpemF0
aW9uTG9hZFBvbGljeSk7CisgICAgfQorI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBUEkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaAppbmRleCBlOWJlMDRkNWMzNTlhNTNlYjhjNDc0
MzY1ZGI5NmQxYTVkZTFjYTQ0Li4zOTI2YmIwZjNmMzY4NDE5OTZmYWJhMzJkYjE4YThiMTcyNjM0
YjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZp
Z2F0aW9uRGVsZWdhdGVQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLTmF2aWdhdGlvbkRlbGVnYXRlUHJpdmF0ZS5oCkBAIC01NCw2ICs1NCwxMSBAQCB0
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tQcm9jZXNzVGVybWluYXRpb25SZWFzb24pIHsK
ICAgICBfV0tQcm9jZXNzVGVybWluYXRpb25SZWFzb25DcmFzaCwKIH0gV0tfQVBJX0FWQUlMQUJM
RShtYWNvcygxMC4xNCksIGlvcygxMi4wKSk7CiAKK3R5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIs
IF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpIHsKKyAgICBfV0tTT0F1dGhvcml6YXRpb25M
b2FkUG9saWN5QWxsb3csCisgICAgX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeUlnbm9yZSwK
K30gV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CisKIHN0YXRpYyBj
b25zdCBXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kgX1dLTmF2aWdhdGlvbkFjdGlvblBvbGljeURv
d25sb2FkID0gKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkoV0tOYXZpZ2F0aW9uQWN0aW9uUG9s
aWN5QWxsb3cgKyAxKTsKIHN0YXRpYyBjb25zdCBXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMSksIGlvcyg5LjApKSBfV0tOYXZpZ2F0aW9uQWN0aW9u
UG9saWN5QWxsb3dXaXRob3V0VHJ5aW5nQXBwTGluayA9IChXS05hdmlnYXRpb25BY3Rpb25Qb2xp
Y3kpKF9XS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lEb3dubG9hZCArIDEpOwogc3RhdGljIGNvbnN0
IFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQp
LCBpb3MoMTIuMikpIF9XS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxvd0luTmV3UHJvY2VzcyA9
IChXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKF9XS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxv
d1dpdGhvdXRUcnlpbmdBcHBMaW5rICsgMSk7CkBAIC0xMTEsNCArMTE2LDYgQEAgc3RhdGljIGNv
bnN0IFdLTmF2aWdhdGlvblJlc3BvbnNlUG9saWN5IF9XS05hdmlnYXRpb25SZXNwb25zZVBvbGlj
eUJlY29tZURvd25sb2EKIC0gKHZvaWQpX3dlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgYmFj
a0ZvcndhcmRMaXN0SXRlbUFkZGVkOihXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKilpdGVtQWRkZWQg
cmVtb3ZlZDooTlNBcnJheTxXS0JhY2tGb3J3YXJkTGlzdEl0ZW0gKj4gKilpdGVtc1JlbW92ZWQg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSk7CiAjZW5kaWYKIAorLSAodm9pZClfd2Vi
VmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25M
b2FkV2l0aEN1cnJlbnRQb2xpY3k6KF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpcG9saWN5
IGZvckV4dGVuc2lvbjooTlNTdHJpbmcgKilleHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZv
aWQgKF4pKF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgcG9saWN5KSljb21wbGV0aW9uSGFu
ZGxlciBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKKwogQGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRl
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAppbmRl
eCAwOTE0NzBmZWYwMzVjOGQ0Yjg0ZjQ0YWJlZmJmMzAzYzllODljMWIzLi5kNjE2MjhkZGEwMDFi
NTdlOThmOWNmMjYwNjBhNTc3MjVmOWZmYTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaApAQCAtMTM5LDYgKzEzOSwxMCBAQCBwcml2YXRl
OgogICAgICAgICB2b2lkIGRlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oV2ViUGFnZVBy
b3h5JiwgUmVmPEFQSTo6TmF2aWdhdGlvbkFjdGlvbj4mJiwgUmVmPFdlYkZyYW1lUG9saWN5TGlz
dGVuZXJQcm94eT4mJiwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZTsKICAgICAgICAg
dm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uUmVzcG9uc2UoV2ViUGFnZVByb3h5JiwgUmVm
PEFQSTo6TmF2aWdhdGlvblJlc3BvbnNlPiYmLCBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5PiYmLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlOwogCisjaWYgSEFWRShBUFBf
U1NPKQorICAgICAgICB2b2lkIGRlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWQoV2Vi
UGFnZVByb3h5JiwgU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSwgY29uc3QgU3RyaW5nJiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KT4mJikgb3ZlcnJp
ZGU7CisjZW5kaWYKKwogICAgICAgICBOYXZpZ2F0aW9uU3RhdGUmIG1fbmF2aWdhdGlvblN0YXRl
OwogICAgIH07CiAgICAgCkBAIC0yMzgsNiArMjQyLDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGJv
b2wgd2ViVmlld1dpbGxHb1RvQmFja0ZvcndhcmRMaXN0SXRlbUluUGFnZUNhY2hlIDogMTsKICAg
ICAgICAgYm9vbCB3ZWJWaWV3RGVjaWRlUG9saWN5Rm9yUGx1Z2luTG9hZFdpdGhDdXJyZW50UG9s
aWN5UGx1Z2luSW5mb0NvbXBsZXRpb25IYW5kbGVyIDogMTsKICNlbmRpZgorCisjaWYgSEFWRShB
UFBfU1NPKQorICAgICAgICBib29sIHdlYlZpZXdEZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRp
b25Mb2FkV2l0aEN1cnJlbnRQb2xpY3lGb3JFeHRlbnNpb25Db21wbGV0aW9uSGFuZGxlciA6IDE7
CisjZW5kaWYKICAgICB9IG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kczsKIAogICAgIFdlYWtP
YmpDUHRyPGlkIDxXS0hpc3RvcnlEZWxlZ2F0ZVByaXZhdGU+ID4gbV9oaXN0b3J5RGVsZWdhdGU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3Rh
dGUubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0K
aW5kZXggMzI1ZmY4MTBiZTJiZjMxMTUxYTc3N2RmNzRhOTQ5YjAwYThiZmQ2Mi4uNmU5OTUwMGE5
NDQ0YzRlYWRhYjc1YzgxYjQ0ZmNiNmI0NDZmNjQyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQpAQCAtMTk2LDYgKzE5Niw5IEBAIHZv
aWQgTmF2aWdhdGlvblN0YXRlOjpzZXROYXZpZ2F0aW9uRGVsZWdhdGUoaWQgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlPiBkZWxlZ2F0ZSkKICAgICBtX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2Vi
Vmlld0JhY2tGb3J3YXJkTGlzdEl0ZW1BZGRlZFJlbW92ZWQgPSBbZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpiYWNrRm9yd2FyZExpc3RJdGVtQWRkZWQ6cmVt
b3ZlZDopXTsKICAgICBtX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBv
bGljeUZvclBsdWdpbkxvYWRXaXRoQ3VycmVudFBvbGljeVBsdWdpbkluZm9Db21wbGV0aW9uSGFu
ZGxlciA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRl
Y2lkZVBvbGljeUZvclBsdWdpbkxvYWRXaXRoQ3VycmVudFBvbGljeTpwbHVnaW5JbmZvOmNvbXBs
ZXRpb25IYW5kbGVyOildOwogI2VuZGlmCisjaWYgSEFWRShBUFBfU1NPKQorICAgIG1fbmF2aWdh
dGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9u
TG9hZFdpdGhDdXJyZW50UG9saWN5Rm9yRXh0ZW5zaW9uQ29tcGxldGlvbkhhbmRsZXIgPSBbZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkZWNpZGVQb2xpY3lG
b3JTT0F1dGhvcml6YXRpb25Mb2FkV2l0aEN1cnJlbnRQb2xpY3k6Zm9yRXh0ZW5zaW9uOmNvbXBs
ZXRpb25IYW5kbGVyOildOworI2VuZGlmCiB9CiAKIFJldGFpblB0cjxpZCA8V0tIaXN0b3J5RGVs
ZWdhdGVQcml2YXRlPiA+IE5hdmlnYXRpb25TdGF0ZTo6aGlzdG9yeURlbGVnYXRlKCkKQEAgLTEx
MDEsNiArMTEwNCw1NCBAQCB2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVudDo6
ZGlkRmluaXNoTG9hZEZvclF1aWNrTG9va0RvY3VtZW50SW5NYWluRgogfQogI2VuZGlmCiAKKyNp
ZiBIQVZFKEFQUF9TU08pCitzdGF0aWMgU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSBzb0F1dGhv
cml6YXRpb25Mb2FkUG9saWN5KF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgcG9saWN5KQor
eworICAgIHN3aXRjaCAocG9saWN5KSB7CisgICAgY2FzZSBfV0tTT0F1dGhvcml6YXRpb25Mb2Fk
UG9saWN5QWxsb3c6CisgICAgICAgIHJldHVybiBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5OjpB
bGxvdzsKKyAgICBjYXNlIF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lJZ25vcmU6CisgICAg
ICAgIHJldHVybiBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5OjpJZ25vcmU7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBTT0F1dGhvcml6YXRpb25Mb2FkUG9s
aWN5OjpBbGxvdzsKK30KKworc3RhdGljIF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgd2tT
T0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgcG9saWN5
KQoreworICAgIHN3aXRjaCAocG9saWN5KSB7CisgICAgY2FzZSBTT0F1dGhvcml6YXRpb25Mb2Fk
UG9saWN5OjpBbGxvdzoKKyAgICAgICAgcmV0dXJuIF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xp
Y3lBbGxvdzsKKyAgICBjYXNlIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3k6Oklnbm9yZToKKyAg
ICAgICAgcmV0dXJuIF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lJZ25vcmU7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBfV0tTT0F1dGhvcml6YXRpb25M
b2FkUG9saWN5QWxsb3c7Cit9CisKK3ZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xp
ZW50OjpkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkKFdlYlBhZ2VQcm94eSYsIFNP
QXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgY3VycmVudFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3ks
IGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFNPQXV0aG9y
aXphdGlvbkxvYWRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGlmICghbV9u
YXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQ
b2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkV2l0aEN1cnJlbnRQb2xpY3lGb3JFeHRlbnNpb25D
b21wbGV0aW9uSGFuZGxlcikgeworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihjdXJyZW50U09B
dXRob3JpemF0aW9uTG9hZFBvbGljeSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvIG5hdmlnYXRpb25EZWxlZ2F0ZSA9IG1fbmF2aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRl
bGVnYXRlLmdldCgpOworICAgIGlmICghbmF2aWdhdGlvbkRlbGVnYXRlKSB7CisgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGN1cnJlbnRTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gY2hlY2tlciA9IENvbXBsZXRpb25IYW5kbGVy
Q2FsbENoZWNrZXI6OmNyZWF0ZShuYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCksIEBzZWxlY3Rvcihf
d2ViVmlldzpkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkV2l0aEN1cnJlbnRQb2xp
Y3k6Zm9yRXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5kbGVyOikpOworICAgIFsoaWQgPFdLTmF2aWdh
dGlvbkRlbGVnYXRlUHJpdmF0ZT4pbmF2aWdhdGlvbkRlbGVnYXRlIF93ZWJWaWV3Om1fbmF2aWdh
dGlvblN0YXRlLm1fd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkV2l0
aEN1cnJlbnRQb2xpY3k6d2tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KGN1cnJlbnRTT0F1dGhv
cml6YXRpb25Mb2FkUG9saWN5KSBmb3JFeHRlbnNpb246ZXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5k
bGVyOm1ha2VCbG9ja1B0cihbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKSwgY2hlY2tlciA9IFdURk1vdmUoY2hlY2tlcildKF9XS1NPQXV0aG9yaXphdGlvbkxv
YWRQb2xpY3kgcG9saWN5KSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKGNoZWNrZXItPmNvbXBsZXRp
b25IYW5kbGVySGFzQmVlbkNhbGxlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBj
aGVja2VyLT5kaWRDYWxsQ29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoc29BdXRob3JpemF0aW9uTG9hZFBvbGljeShwb2xpY3kpKTsKKyAgICB9KS5nZXQoKV07
Cit9CisjZW5kaWYKKwogLy8gSGlzdG9yeURlbGVnYXRlUHJpdmF0ZSBzdXBwb3J0CiAgICAgCiBO
YXZpZ2F0aW9uU3RhdGU6Okhpc3RvcnlDbGllbnQ6Okhpc3RvcnlDbGllbnQoTmF2aWdhdGlvblN0
YXRlJiBuYXZpZ2F0aW9uU3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTG9hZFBvbGljeS5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlv
bkxvYWRQb2xpY3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNmVmMjc3Yzk1ODRiODI2Zjc0ZjkxNWY1ODBlM2Vk
MGZmNjAyOWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kuaApAQCAtMCwwICsx
LDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKEFQUF9TU08pCisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIGNsYXNzIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xp
Y3kgOiB1aW50OF90IHsKKyAgICBBbGxvdywKKyAgICBJZ25vcmUKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gSEFWRShBUFBfU1NPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNl
c3Npb24ubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24v
U09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQppbmRleCA4M2JiNWM2Y2I2YTA5ZDcxMTQ5ZTc5MjQ0
ODc4NTQ3NmMyODM3MzkyLi4wMWExMTdiZjExNjNjZDdlMDZjNDBkODVhYjY2YTQxYzkyMzZiMDhl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRp
b24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5tbQpAQCAtMzIs
NiArMzIsNyBAQAogI2ltcG9ydCAiQVBJTmF2aWdhdGlvbi5oIgogI2ltcG9ydCAiQVBJTmF2aWdh
dGlvbkFjdGlvbi5oIgogI2ltcG9ydCAiQVBJVUlDbGllbnQuaCIKKyNpbXBvcnQgIlNPQXV0aG9y
aXphdGlvbkxvYWRQb2xpY3kuaCIKICNpbXBvcnQgIldLVUlEZWxlZ2F0ZS5oIgogI2ltcG9ydCAi
V2ViUGFnZVByb3h5LmgiCiAjaW1wb3J0ICJXZWJTaXRlRGF0YVN0b3JlLmgiCkBAIC0xMDIsMjQg
KzEwMywzNSBAQCB2b2lkIFNPQXV0aG9yaXphdGlvblNlc3Npb246OnN0YXJ0KCkKIHsKICAgICBB
U1NFUlQoKG1fc3RhdGUgPT0gU3RhdGU6OklkbGUgfHwgbV9zdGF0ZSA9PSBTdGF0ZTo6V2FpdGlu
ZykgJiYgbV9wYWdlICYmIG1fbmF2aWdhdGlvbkFjdGlvbik7CiAgICAgbV9zdGF0ZSA9IFN0YXRl
OjpBY3RpdmU7Ci0gICAgaWYgKCFtX3NvQXV0aG9yaXphdGlvbikKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgLy8gRklYTUU8cmRhcjovL3Byb2JsZW0vNDg5MDkzMzY+OiBSZXBsYWNlIHRoZSBiZWxv
dyB3aXRoIEFwcFNTTyBjb25zdGFudHMuCi0gICAgYXV0byBpbml0aWF0b3JPcmlnaW4gPSBlbXB0
eVN0cmluZygpOwotICAgIGlmIChtX25hdmlnYXRpb25BY3Rpb24tPnNvdXJjZUZyYW1lKCkpCi0g
ICAgICAgIGluaXRpYXRvck9yaWdpbiA9IG1fbmF2aWdhdGlvbkFjdGlvbi0+c291cmNlRnJhbWUo
KS0+c2VjdXJpdHlPcmlnaW4oKS5zZWN1cml0eU9yaWdpbigpLnRvU3RyaW5nKCk7Ci0gICAgaWYg
KG1fYWN0aW9uID09IEluaXRpYXRpbmdBY3Rpb246OlN1YkZyYW1lICYmIG1fcGFnZS0+bWFpbkZy
YW1lKCkpCi0gICAgICAgIGluaXRpYXRvck9yaWdpbiA9IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
OjpjcmVhdGUobV9wYWdlLT5tYWluRnJhbWUoKS0+dXJsKCkpLT50b1N0cmluZygpOwotICAgIE5T
RGljdGlvbmFyeSAqYXV0aG9yaXphdGlvbk9wdGlvbnMgPSBAewotICAgICAgICBTT0F1dGhvcml6
YXRpb25PcHRpb25Vc2VyQWN0aW9uSW5pdGlhdGVkOiBAKG1fbmF2aWdhdGlvbkFjdGlvbi0+aXNQ
cm9jZXNzaW5nVXNlckdlc3R1cmUoKSksCi0gICAgICAgIEAiaW5pdGlhdG9yT3JpZ2luIjogKE5T
U3RyaW5nICopaW5pdGlhdG9yT3JpZ2luLAotICAgICAgICBAImluaXRpYXRpbmdBY3Rpb24iOiBA
KHN0YXRpY19jYXN0PE5TSW50ZWdlcj4obV9hY3Rpb24pKQotICAgIH07Ci0gICAgW21fc29BdXRo
b3JpemF0aW9uIHNldEF1dGhvcml6YXRpb25PcHRpb25zOmF1dGhvcml6YXRpb25PcHRpb25zXTsK
LQotICAgIGF1dG8gKm5zUmVxdWVzdCA9IG1fbmF2aWdhdGlvbkFjdGlvbi0+cmVxdWVzdCgpLm5z
VVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBvbGljeTo6VXBkYXRlSFRUUEJvZHkp
OwotICAgIFttX3NvQXV0aG9yaXphdGlvbiBiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOm5zUmVx
dWVzdC5VUkwgaHR0cEhlYWRlcnM6bnNSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVsZHMgaHR0cEJv
ZHk6bnNSZXF1ZXN0LkhUVFBCb2R5XTsKKyAgICBtX3BhZ2UtPmRlY2lkZVBvbGljeUZvclNPQXV0
aG9yaXphdGlvbkxvYWQoZW1wdHlTdHJpbmcoKSwgW3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRo
aXMpXSAoU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSBwb2xpY3kpIHsKKyAgICAgICAgaWYgKCF3
ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAocG9saWN5ID09IFNP
QXV0aG9yaXphdGlvbkxvYWRQb2xpY3k6Oklnbm9yZSkgeworICAgICAgICAgICAgd2Vha1RoaXMt
PmZhbGxCYWNrVG9XZWJQYXRoKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIXdlYWtUaGlzLT5tX3NvQXV0aG9yaXphdGlvbiB8fCAhd2Vha1RoaXMtPm1f
cGFnZSB8fCAhd2Vha1RoaXMtPm1fbmF2aWdhdGlvbkFjdGlvbikKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAvLyBGSVhNRTxyZGFyOi8vcHJvYmxlbS80ODkwOTMzNj46IFJlcGxhY2Ug
dGhlIGJlbG93IHdpdGggQXBwU1NPIGNvbnN0YW50cy4KKyAgICAgICAgYXV0byBpbml0aWF0b3JP
cmlnaW4gPSBlbXB0eVN0cmluZygpOworICAgICAgICBpZiAod2Vha1RoaXMtPm1fbmF2aWdhdGlv
bkFjdGlvbi0+c291cmNlRnJhbWUoKSkKKyAgICAgICAgICAgIGluaXRpYXRvck9yaWdpbiA9IHdl
YWtUaGlzLT5tX25hdmlnYXRpb25BY3Rpb24tPnNvdXJjZUZyYW1lKCktPnNlY3VyaXR5T3JpZ2lu
KCkuc2VjdXJpdHlPcmlnaW4oKS50b1N0cmluZygpOworICAgICAgICBpZiAod2Vha1RoaXMtPm1f
YWN0aW9uID09IEluaXRpYXRpbmdBY3Rpb246OlN1YkZyYW1lICYmIHdlYWtUaGlzLT5tX3BhZ2Ut
Pm1haW5GcmFtZSgpKQorICAgICAgICAgICAgaW5pdGlhdG9yT3JpZ2luID0gV2ViQ29yZTo6U2Vj
dXJpdHlPcmlnaW46OmNyZWF0ZSh3ZWFrVGhpcy0+bV9wYWdlLT5tYWluRnJhbWUoKS0+dXJsKCkp
LT50b1N0cmluZygpOworICAgICAgICBOU0RpY3Rpb25hcnkgKmF1dGhvcml6YXRpb25PcHRpb25z
ID0gQHsKKyAgICAgICAgICAgIFNPQXV0aG9yaXphdGlvbk9wdGlvblVzZXJBY3Rpb25Jbml0aWF0
ZWQ6IEAod2Vha1RoaXMtPm1fbmF2aWdhdGlvbkFjdGlvbi0+aXNQcm9jZXNzaW5nVXNlckdlc3R1
cmUoKSksCisgICAgICAgICAgICBAImluaXRpYXRvck9yaWdpbiI6IChOU1N0cmluZyAqKWluaXRp
YXRvck9yaWdpbiwKKyAgICAgICAgICAgIEAiaW5pdGlhdGluZ0FjdGlvbiI6IEAoc3RhdGljX2Nh
c3Q8TlNJbnRlZ2VyPih3ZWFrVGhpcy0+bV9hY3Rpb24pKQorICAgICAgICB9OworICAgICAgICBb
d2Vha1RoaXMtPm1fc29BdXRob3JpemF0aW9uIHNldEF1dGhvcml6YXRpb25PcHRpb25zOmF1dGhv
cml6YXRpb25PcHRpb25zXTsKKworICAgICAgICBhdXRvICpuc1JlcXVlc3QgPSB3ZWFrVGhpcy0+
bV9uYXZpZ2F0aW9uQWN0aW9uLT5yZXF1ZXN0KCkubnNVUkxSZXF1ZXN0KFdlYkNvcmU6OkhUVFBC
b2R5VXBkYXRlUG9saWN5OjpVcGRhdGVIVFRQQm9keSk7CisgICAgICAgIFt3ZWFrVGhpcy0+bV9z
b0F1dGhvcml6YXRpb24gYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpuc1JlcXVlc3QuVVJMIGh0
dHBIZWFkZXJzOm5zUmVxdWVzdC5hbGxIVFRQSGVhZGVyRmllbGRzIGh0dHBCb2R5Om5zUmVxdWVz
dC5IVFRQQm9keV07CisgICAgfSk7CiB9CiAKIHZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6
ZmFsbEJhY2tUb1dlYlBhdGgoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5j
cHAKaW5kZXggMTMwMmE4NGUxMDdmYTZkMzgwNzMwZGExYjg2OTM5ZmYyOWJmYzJkYy4uYmU4MGQ0
NGMyZmQ4MGI0ZjJkMThlMmZjZmU0ODUzNzEzZGNkNGEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05MjMwLDYgKzkyMzAsMTMgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmNvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKGNvbnN0IFN0cmluZyYgY2hhbm5lbE5hbWUs
IFdURkxvZ0NoYW4KICNlbmRpZgogfQogCisjaWYgSEFWRShBUFBfU1NPKQordm9pZCBXZWJQYWdl
UHJveHk6OmRlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWQoY29uc3QgU3RyaW5nJiBl
eHRlbnNpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU09BdXRob3JpemF0aW9uTG9hZFBvbGlj
eSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5kZWNp
ZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkKCp0aGlzLCBTT0F1dGhvcml6YXRpb25Mb2Fk
UG9saWN5OjpBbGxvdywgZXh0ZW5zaW9uLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9
CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICN1bmRlZiBNRVJHRV9XSEVFTF9F
VkVOVFMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggNWRkNjIzYjQ3
MzJkMGQ1NWVkNTUzNDBkOTYzZWUxMGU2YWZmOTgwOC4uMmY2NzZiMmYzNjhkNzBhMDRkZTJiZTdl
MjkxMGY0MzQ5MTk2YTBlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
QEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJQYWdlTG9hZFN0YXRlLmgiCiAjaW5jbHVkZSAi
UHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uLmgiCiAjaW5jbHVkZSAiUHJvY2Vzc1Rocm90dGxlci5o
IgorI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kuaCIKICNpbmNsdWRlICJTYW5k
Ym94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVTaGVldENhbGxiYWNrSUQuaCIKICNpbmNs
dWRlICJTaGFyZWFibGVCaXRtYXAuaCIKQEAgLTE1NDksNiArMTU1MCw3IEBAIHB1YmxpYzoKICNp
ZiBIQVZFKEFQUF9TU08pCiAgICAgdm9pZCBzZXRTaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlv
bkluQWxsTmF2aWdhdGlvblBvbGljeURlY2lzaW9uKCkgeyBtX3Nob3VsZFN1cHByZXNzU09BdXRo
b3JpemF0aW9uSW5BbGxOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gPSB0cnVlOyB9CiAgICAgdm9p
ZCBzZXRTaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbigpIHsgbV9zaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRp
b25Qb2xpY3lEZWNpc2lvbiA9IHRydWU7IH0KKyAgICB2b2lkIGRlY2lkZVBvbGljeUZvclNPQXV0
aG9yaXphdGlvbkxvYWQoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTT0F1
dGhvcml6YXRpb25Mb2FkUG9saWN5KT4mJik7CiAjZW5kaWYKIAogICAgIExvZ2dlciYgbG9nZ2Vy
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjNzE3NzZhMGQyZGM0ZjE3M2U5YzYzMzkzMGFhYThhYmYwZGM0NTZhLi4xYjUyMjYzYzQ2
ZGI1ZWZhMDNlZTI1ODI3OTFjZDk2NTQ4Zjk3OTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNDIsNiArMTA0Miw3IEBACiAJCTU3
OERDMjk4MjE1NUEwMDIwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OERDMjk3MjE1
NUEwMDEwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCAqLzsgfTsKIAkJ
NTdBQzhGNTAyMTdGRUVEOTAwNTU0MzhDIC8qIEhpZENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3QUM4RjRFMjE3RkVFRDkwMDU1NDM4
QyAvKiBIaWRDb25uZWN0aW9uLmggKi87IH07CiAJCTU3QjRCNDYwMjBCNTA0QUMwMEQ0QUQ3OSAv
KiBDbGllbnRDZXJ0aWZpY2F0ZUF1dGhlbnRpY2F0aW9uWFBDQ29uc3RhbnRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0I0QjQ1RTIwQjUwNEFCMDBE
NEFENzkgLyogQ2xpZW50Q2VydGlmaWNhdGVBdXRoZW50aWNhdGlvblhQQ0NvbnN0YW50cy5oICov
OyB9OworCQk1N0JCRUE2RDIyQkMwQkZFMDAyNzM5OTUgLyogU09BdXRob3JpemF0aW9uTG9hZFBv
bGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdC
QkVBNkMyMkJDMEJGRTAwMjczOTk1IC8qIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kuaCAqLzsg
fTsKIAkJNTdEQ0VENkUyMTQyRUU1RTAwMTZCODQ3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGlu
YXRvck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1N0RDRUQ2QjIxNDJFQUUyMDAxNkI4NDcgLyogV2ViQXV0aGVudGljYXRv
ckNvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTdEQ0VENkYyMTQyRUU2
MzAwMTZCODQ3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvck1lc3NhZ2VzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0RDRUQ2QTIxNDJFQUUy
MDAxNkI4NDcgLyogV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yTWVzc2FnZXMuaCAqLzsgfTsK
IAkJNTdEQ0VENzAyMTQyRUU2ODAwMTZCODQ3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRv
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU3RENFRDZDMjE0MkVBRjkwMDE2Qjg0NyAvKiBXZWJBdXRoZW50aWNh
dG9yQ29vcmRpbmF0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0zNDgwLDYg
KzM0ODEsNyBAQAogCQk1N0FDOEY0RjIxN0ZFRUQ5MDA1NTQzOEMgLyogSGlkQ29ubmVjdGlvbi5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEhpZENvbm5lY3Rpb24ubW07IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3QjRCNDVEMjBCNTA0QUIwMEQ0QUQ3OSAvKiBBdXRoZW50aWNhdGlv
bk1hbmFnZXJDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IEF1dGhlbnRpY2F0aW9uTWFuYWdlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1N0I0QjQ1RTIwQjUwNEFCMDBENEFENzkgLyogQ2xpZW50Q2VydGlmaWNhdGVBdXRoZW50
aWNhdGlvblhQQ0NvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
bGllbnRDZXJ0aWZpY2F0ZUF1dGhlbnRpY2F0aW9uWFBDQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTU3QkJFQTZDMjJCQzBCRkUwMDI3Mzk5NSAvKiBTT0F1dGhvcml6
YXRpb25Mb2FkUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNPQXV0aG9yaXphdGlvbkxvYWRQb2xp
Y3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTdEQ0VENkEyMTQyRUFFMjAwMTZC
ODQ3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvck1lc3NhZ2VzLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvck1lc3NhZ2Vz
Lmg7IHBhdGggPSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkF1dGhlbnRpY2F0b3JDb29yZGlu
YXRvck1lc3NhZ2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTU3
RENFRDZCMjE0MkVBRTIwMDE2Qjg0NyAvKiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JNZXNz
YWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2Vi
QXV0aGVudGljYXRvckNvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2
ZWRTb3VyY2VzL1dlYktpdDIvV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yTWVzc2FnZVJlY2Vp
dmVyLmNwcDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTdEQ0VENkMy
MTQyRUFGOTAwMTZCODQ3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkF1
dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERl
cml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAt
NzA0MCw2ICs3MDQyLDcgQEAKIAkJCQk1N0ZEMzE3QTIyQjM1MTRBMDA4RDBFOEIgLyogUmVkaXJl
Y3RTT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tICovLAogCQkJCTU3RkQzMTcyMjJCMzUxNDgwMDhE
MEU4QiAvKiBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oICovLAogCQkJCTU3RkQzMTc5MjJC
MzUxNDkwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbSAqLywKKwkJCQk1
N0JCRUE2QzIyQkMwQkZFMDAyNzM5OTUgLyogU09BdXRob3JpemF0aW9uTG9hZFBvbGljeS5oICov
LAogCQkJCTU3RkQzMTczMjJCMzUxNDgwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25OU1VSTEV4
dHJhcy5oICovLAogCQkJCTU3RkQzMTc2MjJCMzUxNDkwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRp
b25OU1VSTEV4dHJhcy5tbSAqLywKIAkJCQk1N0ZEMzE3QzIyQjM1MTRBMDA4RDBFOEIgLyogU09B
dXRob3JpemF0aW9uU2Vzc2lvbi5oICovLApAQCAtOTYzNiwxMSArOTYzOSwxMiBAQAogCQkJCTgz
Rjk2NDRFMUZBMEY3NkUwMEM0Nzc1MCAvKiBTaGFyZWRTdHJpbmdIYXNoVGFibGVSZWFkT25seS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUQ2N0IzMzkyMTJFMUY2MTAwRkFBNzg2IC8qIFNoYXJlU2hl
ZXRDYWxsYmFja0lELmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTQxRTlGQjIxRjgxREFEMDBCODhD
REIgLyogU2hvdWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKLQkJCQk1
NzZDQTlENzIyQjg2MjE4MDAzMDE0M0MgLyogU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5NTIyNkQ2MjA3RDE4NDYwMEY3ODQyMCAvKiBTaW11bGF0ZWRJ
bnB1dERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQUYwNkQ2MThCRDFBNDcwMDgx
Q0VCMSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyREU2OTQzRTE4QkQyQTY4MDA1QzE1RTUgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxl
ck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1N0ZEMzE4MzIyQjM1MTYyMDA4RDBFOEIg
LyogU09BdXRob3JpemF0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3QkJF
QTZEMjJCQzBCRkUwMDI3Mzk5NSAvKiBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NzZDQTlENzIyQjg2MjE4MDAzMDE0M0MgLyogU09BdXRob3JpemF0aW9u
TlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RkQzMTg1MjJCMzUxNjkwMDhEMEU4
QiAvKiBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjcyQjI4
QjE0MDY5ODVEMDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxNEJERUQzMTZDOThFREQwMEU0RTI1RSAvKiBTdGF0aXN0aWNzUmVxdWVzdC5oIGluIEhlYWRl
cnMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5k
ZXggZjg3NjA2MTU1MWRjZmRjN2Q4NmQyZTU1MjQ2MWU4MDA0YmEwZDRmZi4uZDlhYTFjYmVhMDBh
NGM0NWMyOGJhODczMDE3NWRhOGJmMDRlNDQ5MSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTA2LTIwICBKaWV3
ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGEgbmV3
IFNQSSB0byBpbmZvcm0gY2xpZW50cyBhYm91dCBBcHBTU08KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTA4NQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTAwMjgyNDY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RTT0F1dGhvcml6YXRp
b24ubW06CisgICAgICAgICgtW1Rlc3RTT0F1dGhvcml6YXRpb25CYXNpY0RlbGVnYXRlIHdlYlZp
ZXc6ZGlkRmluaXNoTmF2aWdhdGlvbjpdKToKKyAgICAgICAgKC1bVGVzdFNPQXV0aG9yaXphdGlv
bk5hdmlnYXRpb25EZWxlZ2F0ZSBpbml0XSk6CisgICAgICAgICgtW1Rlc3RTT0F1dGhvcml6YXRp
b25OYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0
aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5OmZvckV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjpd
KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE5LTA2LTE5ICBBYWthc2gg
SmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBbZXdzLWJ1aWxkXSBBZGQg
c3RlcCB0byBhbmFseXplIENvbXBpbGUgV2ViS2l0IGZhaWx1cmVzCmRpZmYgLS1naXQgYS9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RTT0F1dGhvcml6YXRpb24ubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RTT0F1dGhvcml6YXRp
b24ubW0KaW5kZXggOGM5NDdhNWYxN2E2MjI4Njc5MWVjOTcwOTEzODE3NWQwNWM2MzMwZC4uYzZl
ZDVkYzI0ODA1ZTFlNTJlMDQxMDQ5ZTY5N2ZiZWFhYjUwNDU4MyAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09BdXRob3JpemF0aW9uLm1tCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXph
dGlvbi5tbQpAQCAtMTE5LDggKzExOSwyMyBAQCBzdGF0aWMgY29uc3QgY2hhciogc2FtbFJlc3Bv
bnNlID0KICI8L3NjcmlwdD4iCiAiPC9odG1sPiI7CiAKK0BpbnRlcmZhY2UgVGVzdFNPQXV0aG9y
aXphdGlvbkJhc2ljRGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGU+CitA
ZW5kCisKK0BpbXBsZW1lbnRhdGlvbiBUZXN0U09BdXRob3JpemF0aW9uQmFzaWNEZWxlZ2F0ZQor
CistICh2b2lkKXdlYlZpZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGlkRmluaXNoTmF2aWdhdGlv
bjooV0tOYXZpZ2F0aW9uICopbmF2aWdhdGlvbgoreworICAgIEVYUEVDVF9GQUxTRShuYXZpZ2F0
aW9uQ29tcGxldGVkKTsKKyAgICBuYXZpZ2F0aW9uQ29tcGxldGVkID0gdHJ1ZTsKKyAgICBmaW5h
bFVSTCA9IG5hdmlnYXRpb24uX3JlcXVlc3QuVVJMLmFic29sdXRlU3RyaW5nOworfQorCitAZW5k
CisKIEBpbnRlcmZhY2UgVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSA6IE5T
T2JqZWN0IDxXS05hdmlnYXRpb25EZWxlZ2F0ZSwgV0tVSURlbGVnYXRlPgogQHByb3BlcnR5IGJv
b2wgaXNEZWZhdWx0UG9saWN5OworQHByb3BlcnR5IGJvb2wgYWxsb3dTT0F1dGhvcml6YXRpb25M
b2FkOwogLSAoaW5zdGFuY2V0eXBlKWluaXQ7CiBAZW5kCiAKQEAgLTEyOCw4ICsxNDMsMTAgQEAg
QGltcGxlbWVudGF0aW9uIFRlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUKIAog
LSAoaW5zdGFuY2V0eXBlKWluaXQKIHsKLSAgICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkKKyAg
ICBpZiAoc2VsZiA9IFtzdXBlciBpbml0XSkgewogICAgICAgICBzZWxmLmlzRGVmYXVsdFBvbGlj
eSA9IHRydWU7CisgICAgICAgIHNlbGYuYWxsb3dTT0F1dGhvcml6YXRpb25Mb2FkID0gdHJ1ZTsK
KyAgICB9CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKQEAgLTE1OCw2ICsxNzUsMTcgQEAgLSAoV0tX
ZWJWaWV3ICopd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBjcmVhdGVXZWJWaWV3V2l0aENv
bmZpZ3VyYXRpb246KFdLV2UKICAgICByZXR1cm4gZ05ld1dpbmRvdy5nZXQoKTsKIH0KIAorLSAo
dm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JTT0F1dGhv
cml6YXRpb25Mb2FkV2l0aEN1cnJlbnRQb2xpY3k6KF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xp
Y3kpcG9saWN5IGZvckV4dGVuc2lvbjooTlNTdHJpbmcgKilleHRlbnNpb24gY29tcGxldGlvbkhh
bmRsZXI6KHZvaWQgKF4pKF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgcG9saWN5KSljb21w
bGV0aW9uSGFuZGxlcgoreworICAgIEVYUEVDVF9FUShwb2xpY3ksIF9XS1NPQXV0aG9yaXphdGlv
bkxvYWRQb2xpY3lBbGxvdyk7CisgICAgRVhQRUNUX1RSVUUoW2V4dGVuc2lvbiBpc0VxdWFsOkAi
Il0pOworICAgIGlmIChzZWxmLmFsbG93U09BdXRob3JpemF0aW9uTG9hZCkgeworICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihwb2xpY3kpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNv
bXBsZXRpb25IYW5kbGVyKF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lJZ25vcmUpOworfQor
CiBAZW5kCiAKICNpZiBQTEFURk9STShNQUMpCkBAIC00MDUsOCArNDMzLDggQEAgVEVTVChTT0F1
dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZDEpCiAgICAgUmV0YWluUHRy
PE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpA
InNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRB
UEkucmVzb3VyY2VzIl07CiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2Vi
VmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOwot
ICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRp
b25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldl
YlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIGF1dG8gZGVsZWdhdGUg
PSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbkJhc2ljRGVsZWdhdGUgYWxsb2NdIGluaXRd
KTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwog
CiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0
ZXN0VVJMLmdldCgpXV07CiAgICAgVXRpbDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsK
QEAgLTQzMiw4ICs0NjAsOCBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNl
cHRpb25TdWNjZWVkMikKICAgICBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6
OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25X
aXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKIAogICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgMzIwLCA1MDApXSk7Ci0gICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRo
b3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJl
U09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7Cisg
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uQmFzaWNEZWxl
Z2F0ZSBhbGxvY10gaW5pdF0pOworICAgIFt3ZWJWaWV3IHNldE5hdmlnYXRpb25EZWxlZ2F0ZTpk
ZWxlZ2F0ZS5nZXQoKV07CiAKICAgICAvLyBGb3JjZSBBcHAgTGlua3Mgd2l0aCBhIHJlcXVlc3Qu
VVJMIHRoYXQgaGFzIGEgZGlmZmVyZW50IGhvc3QgdGhhbiB0aGUgY3VycmVudCBvbmUgKGVtcHR5
IGhvc3QpIGFuZCBTaG91bGRPcGVuRXh0ZXJuYWxVUkxzUG9saWN5OjpTaG91bGRBbGxvdy4KICAg
ICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRwczovL3d3dy5leGFtcGxlLmNvbSIpOwpA
QCAtOTQ2LDYgKzk3NCwyNCBAQCBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNl
cHRpb25Db21wbGV0ZVR3aWNlKQogICAgIFtnRGVsZWdhdGUgYXV0aG9yaXphdGlvbjpnQXV0aG9y
aXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6cmVzcG9uc2UuZ2V0KCkgaHR0cEJv
ZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdF0pLmdldCgpXTsKIH0KIAorVEVTVChTT0F1
dGhvcml6YXRpb25SZWRpcmVjdCwgU09BdXRob3JpemF0aW9uTG9hZFBvbGljeUlnbm9yZSkKK3sK
KyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6emxlciBzd2l6emxlcihQQUw6
OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5QZXJmb3JtQXV0aG9yaXph
dGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlk
ZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisgICAgUmV0YWluUHRyPE5TVVJM
PiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJjZTpAInNpbXBs
ZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVz
b3VyY2VzIl07CisKKyAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBh
bGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1
dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxl
Z2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXco
d2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOworICAgIFtkZWxlZ2F0ZSBzZXRBbGxvd1NP
QXV0aG9yaXphdGlvbkxvYWQ6ZmFsc2VdOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05T
VVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVu
KCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdl
dCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKIC8vIEZJWE1FKDE3NTIwNCk6IEVu
YWJsZSB0aGUgaU9TIHRlc3RzIG9uY2UgdGhlIGJ1ZyBpcyBmaXhlZC4KICNpZiBQTEFURk9STShN
QUMpCiBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0
aFVJKQpAQCAtMTY0MCw2ICsxNjg2LDMxIEBAIFRFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIEF1
dGhvcml6YXRpb25PcHRpb25zKQogICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwg
Imh0dHA6Ly93d3cud2Via2l0Lm9yZyIsIDEpOwogfQogCitURVNUKFNPQXV0aG9yaXphdGlvblBv
cFVwLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5SWdub3JlKQoreworICAgIHJlc2V0U3RhdGUo
KTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyKFBBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNw
b25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhv
cml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRw
Oi8vd3d3LmV4YW1wbGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChv
cGVuZXJUZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0
aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3Vy
ZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOwor
ICAgIFtkZWxlZ2F0ZSBzZXRBbGxvd1NPQXV0aG9yaXphdGlvbkxvYWQ6ZmFsc2VdOworCisgICAg
W3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDooTlNVUkwgKilVUkwoVVJM
KCksICJodHRwOi8vd3d3LndlYmtpdC5vcmciKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9u
Q29tcGxldGVkKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tz
QXRQb2ludDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQ
TEFURk9STShJT1MpCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUo
KSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmbmV3V2lu
ZG93Q3JlYXRlZCk7CisgICAgRVhQRUNUX0ZBTFNFKGF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwor
fQorCiBURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBOb0ludGVyY2VwdGlvbnMpCiB7CiAg
ICAgcmVzZXRTdGF0ZSgpOwpAQCAtMTg0Nyw2ICsxOTE4LDI2IEBAIFRFU1QoU09BdXRob3JpemF0
aW9uU3ViRnJhbWUsIEF1dGhvcml6YXRpb25PcHRpb25zKQogICAgIGNoZWNrQXV0aG9yaXphdGlv
bk9wdGlvbnMoZmFsc2UsICJodHRwOi8vd3d3LmFwcGxlLmNvbSIsIDIpOwogfQogCitURVNUKFNP
QXV0aG9yaXphdGlvblN1YkZyYW1lLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5SWdub3JlKQor
eworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3Jp
emF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJy
aWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBhdXRvIHRlc3RVUkwg
PSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRt
bCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBh
ZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwg
ZGVsZWdhdGUuZ2V0KCkpOworICAgIFtkZWxlZ2F0ZSBzZXRBbGxvd1NPQXV0aG9yaXphdGlvbkxv
YWQ6ZmFsc2VdOworCisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVS
TDooTlNVUkwgKilVUkwoVVJMKCksICJodHRwOi8vd3d3LmFwcGxlLmNvbSIpXTsKKyAgICAvLyBU
cnkgdG8gd2FpdCB1bnRpbCB0aGUgaWZyYW1lIGxvYWQgaXMgZmluaXNoZWQuCisgICAgVXRpbDo6
c2xlZXAoMC41KTsKKyAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgaW50ZXJjZXB0IHRoZSBpZnJh
bWUuCisgICAgRVhQRUNUX0ZBTFNFKGF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372662</attachid>
            <date>2019-06-21 18:17:26 -0700</date>
            <delta_ts>2019-06-25 11:04:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199085-20190621181725.patch</filename>
            <type>text/plain</type>
            <size>31271</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFiY2UzZjkxMzY5OWFhZTFj
NTUyNzVmZDQwNTQ4MmM4NjA0YmZiMDEuLjQyYjg5NjAyMzNmMDhjNzU2ODkwMjk4ZGY5MzI0MjA0
OTkxYmVkMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTktMDYtMjAgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYSBuZXcgU1BJ
IHRvIGluZm9ybSBjbGllbnRzIGFib3V0IEFwcFNTTworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDg1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81
MDAyODI0Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBuZXcgU1BJIHRvIGluZm9ybSBjbGllbnRzIGFib3V0
IGluY29taW5nIEFwcFNTTyBpbnRlcmNlcHRpb25zIGR1cmluZworICAgICAgICBuYXZpZ2F0aW9u
cy4gVGhlcmVmb3JlLCBjbGllbnRzIGNhbiBtYWtlIGEgaW5mb3JtZWQgZGVjaXNpb24gd2hldGhl
ciB0aGlzIGlzIHRoZSByaWdodCBtb21lbnQKKyAgICAgICAgdG8gZG8gdGhlIGludGVyY2VwdGlv
biBhcyBpbnRlcmNlcHRpb25zIG9mdGVuIHNob3cgbmF0aXZlIFVJLiBBbHNvLCB0aGUgU1BJIGlz
IGRlc2lnbmVkIHRvCisgICAgICAgIHBhc3MgYWxvbmcgYSBodW1hbiByZWFkYWJsZSBuYW1lIGZv
ciB0aGUgZXh0ZW5zaW9uIHN1Y2ggdGhhdCBjbGllbnRzIGNvdWxkIGRvIHdoYXRldmVyIHRoZXkK
KyAgICAgICAgd2FudCB0byBpbmZvcm0gdXNlcnMgYWJvdXQgd2hhdCdzIGdvaW5nIG9uLgorCisg
ICAgICAgIEhlcmUgaXMgdGhlIG5ldyBTUEk6CisgICAgICAgIC0gKHZvaWQpX3dlYlZpZXc6KFdL
V2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhD
dXJyZW50UG9saWN5OihfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KXBvbGljeSBmb3JFeHRl
bnNpb246KE5TU3RyaW5nICopZXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lkICheKShf
V0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkpY29tcGxldGlvbkhhbmRsZXI7CisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaDoKKyAgICAgICAg
KEFQSTo6TmF2aWdhdGlvbkNsaWVudDo6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9h
ZCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25EZWxlZ2F0ZVBy
aXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbToKKyAgICAgICAgKFdl
YktpdDo6TmF2aWdhdGlvblN0YXRlOjpzZXROYXZpZ2F0aW9uRGVsZWdhdGUpOgorICAgICAgICAo
V2ViS2l0Ojpzb0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6d2tT
T0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KToKKyAgICAgICAgKFdlYktpdDo6TmF2aWdhdGlvblN0
YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2Fk
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXph
dGlvbkxvYWRQb2xpY3kuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1NPQXV0
aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tOgorICAgICAgICAoV2ViS2l0OjpT
T0F1dGhvcml6YXRpb25TZXNzaW9uOjpzdGFydCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGVjaWRlUG9saWN5
Rm9yU09BdXRob3JpemF0aW9uTG9hZCk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCiAyMDE5
LTA2LTIxICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgYSBidWlsZCBmaXggYWZ0ZXIgcjI0NjcwMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9BUElOYXZpZ2F0aW9uQ2xpZW50LmgKaW5kZXggMTk2YzM3MjQyYmQyY2Vh
NmNlOGVlNTIzNDkzYWQ3ODc5MGE0NDRkMC4uYTZlMDE5Y2M0NTE4NjNhNDFhY2ZjOGJlYTdiZjMw
Mjg5NmIxYmI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSU5h
dmlnYXRpb25DbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2
aWdhdGlvbkNsaWVudC5oCkBAIC00MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTGF5
b3V0TWlsZXN0b25lLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAorI2lmIEhBVkUoQVBQ
X1NTTykKKyNpbmNsdWRlICJTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LmgiCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IENvbnRlbnRSdWxlTGlzdFJlc3VsdHM7CiBjbGFz
cyBSZXNvdXJjZUVycm9yOwpAQCAtMTQwLDYgKzE0NCwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIGRpZEVuZE5hdmlnYXRpb25HZXN0dXJlKFdlYktpdDo6V2ViUGFnZVByb3h5JiwgYm9v
bCB3aWxsTmF2aWdhdGUsIFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpIHsgfQogICAg
IHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KFdlYktpdDo6
V2ViUGFnZVByb3h5JikgeyB9CiAgICAgdmlydHVhbCBib29sIGRpZENoYW5nZUJhY2tGb3J3YXJk
TGlzdChXZWJLaXQ6OldlYlBhZ2VQcm94eSYsIFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0SXRl
bSosIGNvbnN0IFZlY3RvcjxSZWY8V2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtPj4mKSB7
IHJldHVybiBmYWxzZTsgfQorCisjaWYgSEFWRShBUFBfU1NPKQorICAgIHZpcnR1YWwgdm9pZCBk
ZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkKFdlYktpdDo6V2ViUGFnZVByb3h5Jiwg
V2ViS2l0OjpTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IGN1cnJlbnRTT0F1dGhvcml6YXRpb25M
b2FkUG9saWN5LCBjb25zdCBXVEY6OlN0cmluZyYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV2Vi
S2l0OjpTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKKyAg
ICB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGN1cnJlbnRTT0F1dGhvcml6YXRpb25Mb2Fk
UG9saWN5KTsKKyAgICB9CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEFQSQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkRlbGVn
YXRlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdh
dGlvbkRlbGVnYXRlUHJpdmF0ZS5oCmluZGV4IGU5YmUwNGQ1YzM1OWE1M2ViOGM0NzQzNjVkYjk2
ZDFhNWRlMWNhNDQuLjM5MjZiYjBmM2YzNjg0MTk5NmZhYmEzMmRiMThhOGIxNzI2MzRiMTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS05hdmlnYXRpb25E
ZWxlZ2F0ZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tOYXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmgKQEAgLTU0LDYgKzU0LDExIEBAIHR5cGVkZWYg
TlNfRU5VTShOU0ludGVnZXIsIF9XS1Byb2Nlc3NUZXJtaW5hdGlvblJlYXNvbikgewogICAgIF9X
S1Byb2Nlc3NUZXJtaW5hdGlvblJlYXNvbkNyYXNoLAogfSBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjE0KSwgaW9zKDEyLjApKTsKIAordHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLU09B
dXRob3JpemF0aW9uTG9hZFBvbGljeSkgeworICAgIF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xp
Y3lBbGxvdywKKyAgICBfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5SWdub3JlLAorfSBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKKwogc3RhdGljIGNvbnN0IFdL
TmF2aWdhdGlvbkFjdGlvblBvbGljeSBfV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5RG93bmxvYWQg
PSAoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5KShXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lBbGxv
dyArIDEpOwogc3RhdGljIGNvbnN0IFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSBXS19BUElfQVZB
SUxBQkxFKG1hY29zKDEwLjExKSwgaW9zKDkuMCkpIF9XS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lB
bGxvd1dpdGhvdXRUcnlpbmdBcHBMaW5rID0gKFdLTmF2aWdhdGlvbkFjdGlvblBvbGljeSkoX1dL
TmF2aWdhdGlvbkFjdGlvblBvbGljeURvd25sb2FkICsgMSk7CiBzdGF0aWMgY29uc3QgV0tOYXZp
Z2F0aW9uQWN0aW9uUG9saWN5IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygx
Mi4yKSkgX1dLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93SW5OZXdQcm9jZXNzID0gKFdLTmF2
aWdhdGlvbkFjdGlvblBvbGljeSkoX1dLTmF2aWdhdGlvbkFjdGlvblBvbGljeUFsbG93V2l0aG91
dFRyeWluZ0FwcExpbmsgKyAxKTsKQEAgLTExMSw0ICsxMTYsNiBAQCBzdGF0aWMgY29uc3QgV0tO
YXZpZ2F0aW9uUmVzcG9uc2VQb2xpY3kgX1dLTmF2aWdhdGlvblJlc3BvbnNlUG9saWN5QmVjb21l
RG93bmxvYQogLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBiYWNrRm9yd2Fy
ZExpc3RJdGVtQWRkZWQ6KFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqKWl0ZW1BZGRlZCByZW1vdmVk
OihOU0FycmF5PFdLQmFja0ZvcndhcmRMaXN0SXRlbSAqPiAqKWl0ZW1zUmVtb3ZlZCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpKTsKICNlbmRpZgogCistICh2b2lkKV93ZWJWaWV3OihX
S1dlYlZpZXcgKil3ZWJWaWV3IGRlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRo
Q3VycmVudFBvbGljeTooX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSlwb2xpY3kgZm9yRXh0
ZW5zaW9uOihOU1N0cmluZyAqKWV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXiko
X1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSBwb2xpY3kpKWNvbXBsZXRpb25IYW5kbGVyIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOworCiBAZW5kCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCmluZGV4IDA5MTQ3
MGZlZjAzNWM4ZDRiODRmNDRhYmVmYmYzMDNjOWU4OWMxYjMuLmQ2MTYyOGRkYTAwMWI1N2U5OGY5
Y2YyNjA2MGE1NzcyNWY5ZmZhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL05hdmlnYXRpb25TdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL05hdmlnYXRpb25TdGF0ZS5oCkBAIC0xMzksNiArMTM5LDEwIEBAIHByaXZhdGU6CiAgICAg
ICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihXZWJQYWdlUHJveHkmLCBS
ZWY8QVBJOjpOYXZpZ2F0aW9uQWN0aW9uPiYmLCBSZWY8V2ViRnJhbWVQb2xpY3lMaXN0ZW5lclBy
b3h5PiYmLCBBUEk6Ok9iamVjdCogdXNlckRhdGEpIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGRl
Y2lkZVBvbGljeUZvck5hdmlnYXRpb25SZXNwb25zZShXZWJQYWdlUHJveHkmLCBSZWY8QVBJOjpO
YXZpZ2F0aW9uUmVzcG9uc2U+JiYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3RlbmVyUHJveHk+JiYs
IEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAKKyNpZiBIQVZFKEFQUF9TU08pCisg
ICAgICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZChXZWJQYWdlUHJv
eHkmLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LCBjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpPiYmKSBvdmVycmlkZTsKKyNl
bmRpZgorCiAgICAgICAgIE5hdmlnYXRpb25TdGF0ZSYgbV9uYXZpZ2F0aW9uU3RhdGU7CiAgICAg
fTsKICAgICAKQEAgLTIzOCw2ICsyNDIsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCB3ZWJW
aWV3V2lsbEdvVG9CYWNrRm9yd2FyZExpc3RJdGVtSW5QYWdlQ2FjaGUgOiAxOwogICAgICAgICBi
b29sIHdlYlZpZXdEZWNpZGVQb2xpY3lGb3JQbHVnaW5Mb2FkV2l0aEN1cnJlbnRQb2xpY3lQbHVn
aW5JbmZvQ29tcGxldGlvbkhhbmRsZXIgOiAxOwogI2VuZGlmCisKKyNpZiBIQVZFKEFQUF9TU08p
CisgICAgICAgIGJvb2wgd2ViVmlld0RlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRX
aXRoQ3VycmVudFBvbGljeUZvckV4dGVuc2lvbkNvbXBsZXRpb25IYW5kbGVyIDogMTsKKyNlbmRp
ZgogICAgIH0gbV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzOwogCiAgICAgV2Vha09iakNQdHI8
aWQgPFdLSGlzdG9yeURlbGVnYXRlUHJpdmF0ZT4gPiBtX2hpc3RvcnlEZWxlZ2F0ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQppbmRleCAz
MjVmZjgxMGJlMmJmMzExNTFhNzc3ZGY3NGE5NDliMDBhOGJmZDYyLi42ZTk5NTAwYTk0NDRjNGVh
ZGFiNzVjODFiNDRmY2I2YjQ0NmY2NDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCkBAIC0xOTYsNiArMTk2LDkgQEAgdm9pZCBOYXZp
Z2F0aW9uU3RhdGU6OnNldE5hdmlnYXRpb25EZWxlZ2F0ZShpZCA8V0tOYXZpZ2F0aW9uRGVsZWdh
dGU+IGRlbGVnYXRlKQogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3QmFj
a0ZvcndhcmRMaXN0SXRlbUFkZGVkUmVtb3ZlZCA9IFtkZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmJhY2tGb3J3YXJkTGlzdEl0ZW1BZGRlZDpyZW1vdmVkOild
OwogICAgIG1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9saWN5Rm9y
UGx1Z2luTG9hZFdpdGhDdXJyZW50UG9saWN5UGx1Z2luSW5mb0NvbXBsZXRpb25IYW5kbGVyID0g
W2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGVjaWRlUG9s
aWN5Rm9yUGx1Z2luTG9hZFdpdGhDdXJyZW50UG9saWN5OnBsdWdpbkluZm86Y29tcGxldGlvbkhh
bmRsZXI6KV07CiAjZW5kaWYKKyNpZiBIQVZFKEFQUF9TU08pCisgICAgbV9uYXZpZ2F0aW9uRGVs
ZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkV2l0
aEN1cnJlbnRQb2xpY3lGb3JFeHRlbnNpb25Db21wbGV0aW9uSGFuZGxlciA9IFtkZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmRlY2lkZVBvbGljeUZvclNPQXV0
aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeTpmb3JFeHRlbnNpb246Y29tcGxldGlvbkhh
bmRsZXI6KV07CisjZW5kaWYKIH0KIAogUmV0YWluUHRyPGlkIDxXS0hpc3RvcnlEZWxlZ2F0ZVBy
aXZhdGU+ID4gTmF2aWdhdGlvblN0YXRlOjpoaXN0b3J5RGVsZWdhdGUoKQpAQCAtMTEwMSw2ICsx
MTA0LDU0IEBAIHZvaWQgTmF2aWdhdGlvblN0YXRlOjpOYXZpZ2F0aW9uQ2xpZW50OjpkaWRGaW5p
c2hMb2FkRm9yUXVpY2tMb29rRG9jdW1lbnRJbk1haW5GCiB9CiAjZW5kaWYKIAorI2lmIEhBVkUo
QVBQX1NTTykKK3N0YXRpYyBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHNvQXV0aG9yaXphdGlv
bkxvYWRQb2xpY3koX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSBwb2xpY3kpCit7CisgICAg
c3dpdGNoIChwb2xpY3kpIHsKKyAgICBjYXNlIF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lB
bGxvdzoKKyAgICAgICAgcmV0dXJuIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3k6OkFsbG93Owor
ICAgIGNhc2UgX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeUlnbm9yZToKKyAgICAgICAgcmV0
dXJuIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3k6Oklnbm9yZTsKKyAgICB9CisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3k6OkFs
bG93OworfQorCitzdGF0aWMgX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSB3a1NPQXV0aG9y
aXphdGlvbkxvYWRQb2xpY3koU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSBwb2xpY3kpCit7Cisg
ICAgc3dpdGNoIChwb2xpY3kpIHsKKyAgICBjYXNlIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3k6
OkFsbG93OgorICAgICAgICByZXR1cm4gX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeUFsbG93
OworICAgIGNhc2UgU09BdXRob3JpemF0aW9uTG9hZFBvbGljeTo6SWdub3JlOgorICAgICAgICBy
ZXR1cm4gX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeUlnbm9yZTsKKyAgICB9CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xp
Y3lBbGxvdzsKK30KKwordm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRl
Y2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWQoV2ViUGFnZVByb3h5JiwgU09BdXRob3Jp
emF0aW9uTG9hZFBvbGljeSBjdXJyZW50U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSwgY29uc3Qg
U3RyaW5nJiBleHRlbnNpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU09BdXRob3JpemF0aW9u
TG9hZFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgaWYgKCFtX25hdmlnYXRp
b25TdGF0ZS5tX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZv
clNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeUZvckV4dGVuc2lvbkNvbXBsZXRp
b25IYW5kbGVyKSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGN1cnJlbnRTT0F1dGhvcml6
YXRpb25Mb2FkUG9saWN5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gbmF2
aWdhdGlvbkRlbGVnYXRlID0gbV9uYXZpZ2F0aW9uU3RhdGUubV9uYXZpZ2F0aW9uRGVsZWdhdGUu
Z2V0KCk7CisgICAgaWYgKCFuYXZpZ2F0aW9uRGVsZWdhdGUpIHsKKyAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoY3VycmVudFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgYXV0byBjaGVja2VyID0gQ29tcGxldGlvbkhhbmRsZXJDYWxsQ2hl
Y2tlcjo6Y3JlYXRlKG5hdmlnYXRpb25EZWxlZ2F0ZS5nZXQoKSwgQHNlbGVjdG9yKF93ZWJWaWV3
OmRlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVudFBvbGljeTpmb3JF
eHRlbnNpb246Y29tcGxldGlvbkhhbmRsZXI6KSk7CisgICAgWyhpZCA8V0tOYXZpZ2F0aW9uRGVs
ZWdhdGVQcml2YXRlPiluYXZpZ2F0aW9uRGVsZWdhdGUgX3dlYlZpZXc6bV9uYXZpZ2F0aW9uU3Rh
dGUubV93ZWJWaWV3IGRlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWRXaXRoQ3VycmVu
dFBvbGljeTp3a1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3koY3VycmVudFNPQXV0aG9yaXphdGlv
bkxvYWRQb2xpY3kpIGZvckV4dGVuc2lvbjpleHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6bWFr
ZUJsb2NrUHRyKFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
LCBjaGVja2VyID0gV1RGTW92ZShjaGVja2VyKV0oX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGlj
eSBwb2xpY3kpIG11dGFibGUgeworICAgICAgICBpZiAoY2hlY2tlci0+Y29tcGxldGlvbkhhbmRs
ZXJIYXNCZWVuQ2FsbGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGNoZWNrZXIt
PmRpZENhbGxDb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihz
b0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KHBvbGljeSkpOworICAgIH0pLmdldCgpXTsKK30KKyNl
bmRpZgorCiAvLyBIaXN0b3J5RGVsZWdhdGVQcml2YXRlIHN1cHBvcnQKICAgICAKIE5hdmlnYXRp
b25TdGF0ZTo6SGlzdG9yeUNsaWVudDo6SGlzdG9yeUNsaWVudChOYXZpZ2F0aW9uU3RhdGUmIG5h
dmlnYXRpb25TdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTG9hZFBv
bGljeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA2ZWYyNzdjOTU4NGI4MjZmNzRmOTE1ZjU4MGUzZWQwZmY2MDI5
YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9TT0F1
dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uTG9hZFBvbGljeS5oCkBAIC0wLDAgKzEsMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEhBVkUoQVBQX1NTTykKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2VudW0gY2xhc3MgU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSA6IHVp
bnQ4X3QgeworICAgIEFsbG93LAorICAgIElnbm9yZQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBIQVZFKEFQUF9TU08pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRob3JpemF0aW9uU2Vzc2lvbi5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhv
cml6YXRpb25TZXNzaW9uLm1tCmluZGV4IDQ2NzhmZTNlYTdkODI1ZDE0ZmQ2ZjdmYjUwZmQ1YzNi
Y2I0YTA0ZWUuLmNiMzdhY2I2YzNhYmYwMmFiYjI2NDM2NzFlYjcyYWJmODAwZWIxZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1
dGhvcml6YXRpb25TZXNzaW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNzaW9uLm1tCkBAIC0zMiw2ICszMiw3
IEBACiAjaW1wb3J0ICJBUElOYXZpZ2F0aW9uLmgiCiAjaW1wb3J0ICJBUElOYXZpZ2F0aW9uQWN0
aW9uLmgiCiAjaW1wb3J0ICJBUElVSUNsaWVudC5oIgorI2ltcG9ydCAiU09BdXRob3JpemF0aW9u
TG9hZFBvbGljeS5oIgogI2ltcG9ydCAiV0tVSURlbGVnYXRlLmgiCiAjaW1wb3J0ICJXZWJQYWdl
UHJveHkuaCIKICNpbXBvcnQgIldlYlNpdGVEYXRhU3RvcmUuaCIKQEAgLTEwMiwyNCArMTAzLDM1
IEBAIHZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6c3RhcnQoKQogewogICAgIEFTU0VSVCgo
bV9zdGF0ZSA9PSBTdGF0ZTo6SWRsZSB8fCBtX3N0YXRlID09IFN0YXRlOjpXYWl0aW5nKSAmJiBt
X3BhZ2UgJiYgbV9uYXZpZ2F0aW9uQWN0aW9uKTsKICAgICBtX3N0YXRlID0gU3RhdGU6OkFjdGl2
ZTsKLSAgICBpZiAoIW1fc29BdXRob3JpemF0aW9uKQotICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBGSVhNRTxyZGFyOi8vcHJvYmxlbS80ODkwOTMzNj46IFJlcGxhY2UgdGhlIGJlbG93IHdpdGgg
QXBwU1NPIGNvbnN0YW50cy4KLSAgICBhdXRvIGluaXRpYXRvck9yaWdpbiA9IGVtcHR5U3RyaW5n
KCk7Ci0gICAgaWYgKG1fbmF2aWdhdGlvbkFjdGlvbi0+c291cmNlRnJhbWUoKSkKLSAgICAgICAg
aW5pdGlhdG9yT3JpZ2luID0gbV9uYXZpZ2F0aW9uQWN0aW9uLT5zb3VyY2VGcmFtZSgpLT5zZWN1
cml0eU9yaWdpbigpLnNlY3VyaXR5T3JpZ2luKCkudG9TdHJpbmcoKTsKLSAgICBpZiAobV9hY3Rp
b24gPT0gSW5pdGlhdGluZ0FjdGlvbjo6U3ViRnJhbWUgJiYgbV9wYWdlLT5tYWluRnJhbWUoKSkK
LSAgICAgICAgaW5pdGlhdG9yT3JpZ2luID0gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0
ZShtX3BhZ2UtPm1haW5GcmFtZSgpLT51cmwoKSktPnRvU3RyaW5nKCk7Ci0gICAgTlNEaWN0aW9u
YXJ5ICphdXRob3JpemF0aW9uT3B0aW9ucyA9IEB7Ci0gICAgICAgIFNPQXV0aG9yaXphdGlvbk9w
dGlvblVzZXJBY3Rpb25Jbml0aWF0ZWQ6IEAobV9uYXZpZ2F0aW9uQWN0aW9uLT5pc1Byb2Nlc3Np
bmdVc2VyR2VzdHVyZSgpKSwKLSAgICAgICAgQCJpbml0aWF0b3JPcmlnaW4iOiAoTlNTdHJpbmcg
Kilpbml0aWF0b3JPcmlnaW4sCi0gICAgICAgIEAiaW5pdGlhdGluZ0FjdGlvbiI6IEAoc3RhdGlj
X2Nhc3Q8TlNJbnRlZ2VyPihtX2FjdGlvbikpCi0gICAgfTsKLSAgICBbbV9zb0F1dGhvcml6YXRp
b24gc2V0QXV0aG9yaXphdGlvbk9wdGlvbnM6YXV0aG9yaXphdGlvbk9wdGlvbnNdOwotCi0gICAg
YXV0byAqbnNSZXF1ZXN0ID0gbV9uYXZpZ2F0aW9uQWN0aW9uLT5yZXF1ZXN0KCkubnNVUkxSZXF1
ZXN0KFdlYkNvcmU6OkhUVFBCb2R5VXBkYXRlUG9saWN5OjpVcGRhdGVIVFRQQm9keSk7Ci0gICAg
W21fc29BdXRob3JpemF0aW9uIGJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkw6bnNSZXF1ZXN0LlVS
TCBodHRwSGVhZGVyczpuc1JlcXVlc3QuYWxsSFRUUEhlYWRlckZpZWxkcyBodHRwQm9keTpuc1Jl
cXVlc3QuSFRUUEJvZHldOworICAgIG1fcGFnZS0+ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0
aW9uTG9hZChlbXB0eVN0cmluZygpLCBbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyldIChT
T0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkgeworICAgICAgICBpZiAoIXdlYWtUaGlz
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChwb2xpY3kgPT0gU09BdXRob3Jp
emF0aW9uTG9hZFBvbGljeTo6SWdub3JlKSB7CisgICAgICAgICAgICB3ZWFrVGhpcy0+ZmFsbEJh
Y2tUb1dlYlBhdGgoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghd2Vha1RoaXMtPm1fc29BdXRob3JpemF0aW9uIHx8ICF3ZWFrVGhpcy0+bV9wYWdlIHx8
ICF3ZWFrVGhpcy0+bV9uYXZpZ2F0aW9uQWN0aW9uKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIC8vIEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzQ4OTA5MzM2PjogUmVwbGFjZSB0aGUgYmVs
b3cgd2l0aCBBcHBTU08gY29uc3RhbnRzLgorICAgICAgICBhdXRvIGluaXRpYXRvck9yaWdpbiA9
IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIGlmICh3ZWFrVGhpcy0+bV9uYXZpZ2F0aW9uQWN0aW9u
LT5zb3VyY2VGcmFtZSgpKQorICAgICAgICAgICAgaW5pdGlhdG9yT3JpZ2luID0gd2Vha1RoaXMt
Pm1fbmF2aWdhdGlvbkFjdGlvbi0+c291cmNlRnJhbWUoKS0+c2VjdXJpdHlPcmlnaW4oKS5zZWN1
cml0eU9yaWdpbigpLnRvU3RyaW5nKCk7CisgICAgICAgIGlmICh3ZWFrVGhpcy0+bV9hY3Rpb24g
PT0gSW5pdGlhdGluZ0FjdGlvbjo6U3ViRnJhbWUgJiYgd2Vha1RoaXMtPm1fcGFnZS0+bWFpbkZy
YW1lKCkpCisgICAgICAgICAgICBpbml0aWF0b3JPcmlnaW4gPSBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbjo6Y3JlYXRlKHdlYWtUaGlzLT5tX3BhZ2UtPm1haW5GcmFtZSgpLT51cmwoKSktPnRvU3Ry
aW5nKCk7CisgICAgICAgIE5TRGljdGlvbmFyeSAqYXV0aG9yaXphdGlvbk9wdGlvbnMgPSBAewor
ICAgICAgICAgICAgU09BdXRob3JpemF0aW9uT3B0aW9uVXNlckFjdGlvbkluaXRpYXRlZDogQCh3
ZWFrVGhpcy0+bV9uYXZpZ2F0aW9uQWN0aW9uLT5pc1Byb2Nlc3NpbmdVc2VyR2VzdHVyZSgpKSwK
KyAgICAgICAgICAgIEAiaW5pdGlhdG9yT3JpZ2luIjogKE5TU3RyaW5nICopaW5pdGlhdG9yT3Jp
Z2luLAorICAgICAgICAgICAgQCJpbml0aWF0aW5nQWN0aW9uIjogQChzdGF0aWNfY2FzdDxOU0lu
dGVnZXI+KHdlYWtUaGlzLT5tX2FjdGlvbikpCisgICAgICAgIH07CisgICAgICAgIFt3ZWFrVGhp
cy0+bV9zb0F1dGhvcml6YXRpb24gc2V0QXV0aG9yaXphdGlvbk9wdGlvbnM6YXV0aG9yaXphdGlv
bk9wdGlvbnNdOworCisgICAgICAgIGF1dG8gKm5zUmVxdWVzdCA9IHdlYWtUaGlzLT5tX25hdmln
YXRpb25BY3Rpb24tPnJlcXVlc3QoKS5uc1VSTFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRh
dGVQb2xpY3k6OlVwZGF0ZUhUVFBCb2R5KTsKKyAgICAgICAgW3dlYWtUaGlzLT5tX3NvQXV0aG9y
aXphdGlvbiBiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOm5zUmVxdWVzdC5VUkwgaHR0cEhlYWRl
cnM6bnNSZXF1ZXN0LmFsbEhUVFBIZWFkZXJGaWVsZHMgaHR0cEJvZHk6bnNSZXF1ZXN0LkhUVFBC
b2R5XTsKKyAgICB9KTsKIH0KIAogdm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpmYWxsQmFj
a1RvV2ViUGF0aCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRl
eCBkN2I2ZDc1YTA1NjUxNjc3ZWU2MGQxZWI5NmQzZjkxYTA3N2QwMGVlLi5hYzc0YmQ0YzdhYzRh
MTMwNTQwMTYwMmQzYjI3NjQzMGFkYjg4OGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAKQEAgLTkyNDcsNiArOTI0NywxMyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
Y29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoY29uc3QgU3RyaW5nJiBjaGFubmVsTmFtZSwgV1RGTG9n
Q2hhbgogI2VuZGlmCiB9CiAKKyNpZiBIQVZFKEFQUF9TU08pCit2b2lkIFdlYlBhZ2VQcm94eTo6
ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZChjb25zdCBTdHJpbmcmIGV4dGVuc2lv
biwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBtX25hdmlnYXRpb25DbGllbnQtPmRlY2lkZVBvbGlj
eUZvclNPQXV0aG9yaXphdGlvbkxvYWQoKnRoaXMsIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3k6
OkFsbG93LCBleHRlbnNpb24sIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKyNlbmRp
ZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI3VuZGVmIE1FUkdFX1dIRUVMX0VWRU5UUwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA2ZTMyOTdkYzE2NzQyNTU2
ZmE2MDYzNzhlNzdjYTUzOTk0MWY0N2ZjLi4zNWU4NWYwZTM1MWM3MjM4MjRmNmZhMTM2ZTdiZWZk
NTc0NjIyOWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMTQx
LDYgKzE0MSwxMCBAQCBPQkpDX0NMQVNTIF9XS1JlbW90ZU9iamVjdFJlZ2lzdHJ5OwogI2luY2x1
ZGUgPFdlYkNvcmUvV2ViTWVkaWFTZXNzaW9uTWFuYWdlckNsaWVudC5oPgogI2VuZGlmCiAKKyNp
ZiBIQVZFKEFQUF9TU08pCisjaW5jbHVkZSAiU09BdXRob3JpemF0aW9uTG9hZFBvbGljeS5oIgor
I2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU0VTU0lPTikKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIE1lZGlhU2Vzc2lvbk1ldGFkYXRhOwpAQCAtMTU0NSw2ICsxNTQ5LDcgQEAgcHVibGlj
OgogI2lmIEhBVkUoQVBQX1NTTykKICAgICB2b2lkIHNldFNob3VsZFN1cHByZXNzU09BdXRob3Jp
emF0aW9uSW5BbGxOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24oKSB7IG1fc2hvdWxkU3VwcHJlc3NT
T0F1dGhvcml6YXRpb25JbkFsbE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbiA9IHRydWU7IH0KICAg
ICB2b2lkIHNldFNob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2aWdhdGlvblBv
bGljeURlY2lzaW9uKCkgeyBtX3Nob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9uSW5OZXh0TmF2
aWdhdGlvblBvbGljeURlY2lzaW9uID0gdHJ1ZTsgfQorICAgIHZvaWQgZGVjaWRlUG9saWN5Rm9y
U09BdXRob3JpemF0aW9uTG9hZChjb25zdCBTdHJpbmcmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpPiYmKTsKICNlbmRpZgogCiAgICAgTG9nZ2VyJiBs
b2dnZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGM3MTc3NmEwZDJkYzRmMTczZTljNjMzOTMwYWFhOGFiZjBkYzQ1NmEuLjFiNTIy
NjNjNDZkYjVlZmEwM2VlMjU4Mjc5MWNkOTY1NDhmOTc5NWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA0Miw2ICsxMDQyLDcgQEAK
IAkJNTc4REMyOTgyMTU1QTAwMjAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGlu
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTc4REMy
OTcyMTU1QTAwMTAwNzRFODE1IC8qIExvY2FsQXV0aGVudGljYXRpb25Tb2Z0TGluay5oICovOyB9
OwogCQk1N0FDOEY1MDIxN0ZFRUQ5MDA1NTQzOEMgLyogSGlkQ29ubmVjdGlvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdBQzhGNEUyMTdGRUVEOTAw
NTU0MzhDIC8qIEhpZENvbm5lY3Rpb24uaCAqLzsgfTsKIAkJNTdCNEI0NjAyMEI1MDRBQzAwRDRB
RDc5IC8qIENsaWVudENlcnRpZmljYXRlQXV0aGVudGljYXRpb25YUENDb25zdGFudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3QjRCNDVFMjBCNTA0
QUIwMEQ0QUQ3OSAvKiBDbGllbnRDZXJ0aWZpY2F0ZUF1dGhlbnRpY2F0aW9uWFBDQ29uc3RhbnRz
LmggKi87IH07CisJCTU3QkJFQTZEMjJCQzBCRkUwMDI3Mzk5NSAvKiBTT0F1dGhvcml6YXRpb25M
b2FkUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1N0JCRUE2QzIyQkMwQkZFMDAyNzM5OTUgLyogU09BdXRob3JpemF0aW9uTG9hZFBvbGljeS5o
ICovOyB9OwogCQk1N0RDRUQ2RTIxNDJFRTVFMDAxNkI4NDcgLyogV2ViQXV0aGVudGljYXRvckNv
b3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3RENFRDZCMjE0MkVBRTIwMDE2Qjg0NyAvKiBXZWJBdXRoZW50
aWNhdG9yQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQk1N0RDRUQ2RjIx
NDJFRTYzMDAxNkI4NDcgLyogV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yTWVzc2FnZXMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3RENFRDZBMjE0
MkVBRTIwMDE2Qjg0NyAvKiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JNZXNzYWdlcy5oICov
OyB9OwogCQk1N0RDRUQ3MDIxNDJFRTY4MDAxNkI4NDcgLyogV2ViQXV0aGVudGljYXRvckNvb3Jk
aW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTdEQ0VENkMyMTQyRUFGOTAwMTZCODQ3IC8qIFdlYkF1dGhl
bnRpY2F0b3JDb29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKQEAgLTM0
ODAsNiArMzQ4MSw3IEBACiAJCTU3QUM4RjRGMjE3RkVFRDkwMDU1NDM4QyAvKiBIaWRDb25uZWN0
aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gSGlkQ29ubmVjdGlvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTdCNEI0NUQyMEI1MDRBQjAwRDRBRDc5IC8qIEF1dGhlbnRp
Y2F0aW9uTWFuYWdlckNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gQXV0aGVudGljYXRpb25NYW5hZ2VyQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU3QjRCNDVFMjBCNTA0QUIwMEQ0QUQ3OSAvKiBDbGllbnRDZXJ0aWZpY2F0ZUF1
dGhlbnRpY2F0aW9uWFBDQ29uc3RhbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENsaWVudENlcnRpZmljYXRlQXV0aGVudGljYXRpb25YUENDb25zdGFudHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTdCQkVBNkMyMkJDMEJGRTAwMjczOTk1IC8qIFNPQXV0
aG9yaXphdGlvbkxvYWRQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU09BdXRob3JpemF0aW9uTG9h
ZFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1N0RDRUQ2QTIxNDJFQUUy
MDAxNkI4NDcgLyogV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yTWVzc2FnZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yTWVz
c2FnZXMuaDsgcGF0aCA9IERlcml2ZWRTb3VyY2VzL1dlYktpdDIvV2ViQXV0aGVudGljYXRvckNv
b3JkaW5hdG9yTWVzc2FnZXMuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
IAkJNTdEQ0VENkIyMTQyRUFFMjAwMTZCODQ3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRv
ck1lc3NhZ2VSZWNlaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRoID0g
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JNZXNzYWdl
UmVjZWl2ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk1N0RD
RUQ2QzIxNDJFQUY5MDAxNkI4NDcgLyogV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
V2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwOyBwYXRo
ID0gRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9XZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CkBAIC03MDQwLDYgKzcwNDIsNyBAQAogCQkJCTU3RkQzMTdBMjJCMzUxNEEwMDhEMEU4QiAvKiBS
ZWRpcmVjdFNPQXV0aG9yaXphdGlvblNlc3Npb24ubW0gKi8sCiAJCQkJNTdGRDMxNzIyMkIzNTE0
ODAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLmggKi8sCiAJCQkJNTdGRDMx
NzkyMkIzNTE0OTAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbkNvb3JkaW5hdG9yLm1tICovLAor
CQkJCTU3QkJFQTZDMjJCQzBCRkUwMDI3Mzk5NSAvKiBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5
LmggKi8sCiAJCQkJNTdGRDMxNzMyMkIzNTE0ODAwOEQwRThCIC8qIFNPQXV0aG9yaXphdGlvbk5T
VVJMRXh0cmFzLmggKi8sCiAJCQkJNTdGRDMxNzYyMkIzNTE0OTAwOEQwRThCIC8qIFNPQXV0aG9y
aXphdGlvbk5TVVJMRXh0cmFzLm1tICovLAogCQkJCTU3RkQzMTdDMjJCMzUxNEEwMDhEMEU4QiAv
KiBTT0F1dGhvcml6YXRpb25TZXNzaW9uLmggKi8sCkBAIC05NjM2LDExICs5NjM5LDEyIEBACiAJ
CQkJODNGOTY0NEUxRkEwRjc2RTAwQzQ3NzUwIC8qIFNoYXJlZFN0cmluZ0hhc2hUYWJsZVJlYWRP
bmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDY3QjMzOTIxMkUxRjYxMDBGQUE3ODYgLyogU2hh
cmVTaGVldENhbGxiYWNrSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBNDFFOUZCMjFGODFEQUQw
MEI4OENEQiAvKiBTaG91bGRHcmFuZGZhdGhlclN0YXRpc3RpY3MuaCBpbiBIZWFkZXJzICovLAot
CQkJCTU3NkNBOUQ3MjJCODYyMTgwMDMwMTQzQyAvKiBTT0F1dGhvcml6YXRpb25OU1VSTEV4dHJh
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1MjI2RDYyMDdEMTg0NjAwRjc4NDIwIC8qIFNpbXVs
YXRlZElucHV0RGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkRBRjA2RDYxOEJEMUE0
NzAwODFDRUIxIC8qIFNtYXJ0TWFnbmlmaWNhdGlvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJERTY5NDNFMThCRDJBNjgwMDVDMTVFNSAvKiBTbWFydE1hZ25pZmljYXRpb25Db250
cm9sbGVyTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RkQzMTgzMjJCMzUxNjIwMDhE
MEU4QiAvKiBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTdCQkVBNkQyMkJDMEJGRTAwMjczOTk1IC8qIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kuaCBp
biBIZWFkZXJzICovLAorCQkJCTU3NkNBOUQ3MjJCODYyMTgwMDMwMTQzQyAvKiBTT0F1dGhvcml6
YXRpb25OU1VSTEV4dHJhcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTdGRDMxODUyMkIzNTE2OTAw
OEQwRThCIC8qIFNPQXV0aG9yaXphdGlvblNlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUy
NzJCMjhCMTQwNjk4NUQwMDk2QTVEMCAvKiBTdGF0aXN0aWNzRGF0YS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE0QkRFRDMxNkM5OEVERDAwRTRFMjVFIC8qIFN0YXRpc3RpY3NSZXF1ZXN0LmggaW4g
SGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCA3MDhlMTFkODYwYzA5ZjgyZTg3ODJlYjUyMjk5Y2UwNmExMTcxNmZhLi5mOTRkOTA3
ZTJmMjA0ZWU1ODQ5MzdkMjI0ZDc0ODUxYmNmMWI5YjY2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTktMDYtMjAg
IEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQg
YSBuZXcgU1BJIHRvIGluZm9ybSBjbGllbnRzIGFib3V0IEFwcFNTTworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDg1CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS81MDAyODI0Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9y
aXphdGlvbi5tbToKKyAgICAgICAgKC1bVGVzdFNPQXV0aG9yaXphdGlvbkJhc2ljRGVsZWdhdGUg
d2ViVmlldzpkaWRGaW5pc2hOYXZpZ2F0aW9uOl0pOgorICAgICAgICAoLVtUZXN0U09BdXRob3Jp
emF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGluaXRdKToKKyAgICAgICAgKC1bVGVzdFNPQXV0aG9y
aXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzpkZWNpZGVQb2xpY3lGb3JTT0F1dGhv
cml6YXRpb25Mb2FkV2l0aEN1cnJlbnRQb2xpY3k6Zm9yRXh0ZW5zaW9uOmNvbXBsZXRpb25IYW5k
bGVyOl0pOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMTktMDYtMjEgIEpp
ZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJQYWdlUHJveHk6
OmxvYWREYXRhIHNob3VsZCBhY2NlcHQgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09BdXRo
b3JpemF0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0
U09BdXRob3JpemF0aW9uLm1tCmluZGV4IDQyMTk3ZTRlZjQ5YWM3YWJiMjlmMzZkN2IzY2I5MjBl
Yjc3MjZiZTMuLmQ0NzQ0MzlhZWVhMmJkNjAwNWNiOTgyMDBhZDEzYTI2NzIyZmE1ODUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9y
aXphdGlvbi5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rl
c3RTT0F1dGhvcml6YXRpb24ubW0KQEAgLTEyMCw5ICsxMjAsMjQgQEAgc3RhdGljIGNvbnN0IGNo
YXIqIHNhbWxSZXNwb25zZSA9CiAiPC9zY3JpcHQ+IgogIjwvaHRtbD4iOwogCitAaW50ZXJmYWNl
IFRlc3RTT0F1dGhvcml6YXRpb25CYXNpY0RlbGVnYXRlIDogTlNPYmplY3QgPFdLTmF2aWdhdGlv
bkRlbGVnYXRlPgorQGVuZAorCitAaW1wbGVtZW50YXRpb24gVGVzdFNPQXV0aG9yaXphdGlvbkJh
c2ljRGVsZWdhdGUKKworLSAodm9pZCl3ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGRpZEZp
bmlzaE5hdmlnYXRpb246KFdLTmF2aWdhdGlvbiAqKW5hdmlnYXRpb24KK3sKKyAgICBFWFBFQ1Rf
RkFMU0UobmF2aWdhdGlvbkNvbXBsZXRlZCk7CisgICAgbmF2aWdhdGlvbkNvbXBsZXRlZCA9IHRy
dWU7CisgICAgZmluYWxVUkwgPSBuYXZpZ2F0aW9uLl9yZXF1ZXN0LlVSTC5hYnNvbHV0ZVN0cmlu
ZzsKK30KKworQGVuZAorCiBAaW50ZXJmYWNlIFRlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9u
RGVsZWdhdGUgOiBOU09iamVjdCA8V0tOYXZpZ2F0aW9uRGVsZWdhdGUsIFdLVUlEZWxlZ2F0ZT4K
IEBwcm9wZXJ0eSBib29sIGlzRGVmYXVsdFBvbGljeTsKIEBwcm9wZXJ0eSBib29sIHNob3VsZE9w
ZW5FeHRlcm5hbFNjaGVtZXM7CitAcHJvcGVydHkgYm9vbCBhbGxvd1NPQXV0aG9yaXphdGlvbkxv
YWQ7CiAtIChpbnN0YW5jZXR5cGUpaW5pdDsKIEBlbmQKIApAQCAtMTMzLDYgKzE0OCw3IEBAIC0g
KGluc3RhbmNldHlwZSlpbml0CiAgICAgaWYgKHNlbGYgPSBbc3VwZXIgaW5pdF0pIHsKICAgICAg
ICAgc2VsZi5pc0RlZmF1bHRQb2xpY3kgPSB0cnVlOwogICAgICAgICBzZWxmLnNob3VsZE9wZW5F
eHRlcm5hbFNjaGVtZXMgPSBmYWxzZTsKKyAgICAgICAgc2VsZi5hbGxvd1NPQXV0aG9yaXphdGlv
bkxvYWQgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTE2Myw2ICsxNzks
MTcgQEAgLSAoV0tXZWJWaWV3ICopd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBjcmVhdGVX
ZWJWaWV3V2l0aENvbmZpZ3VyYXRpb246KFdLV2UKICAgICByZXR1cm4gZ05ld1dpbmRvdy5nZXQo
KTsKIH0KIAorLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xp
Y3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkV2l0aEN1cnJlbnRQb2xpY3k6KF9XS1NPQXV0aG9yaXph
dGlvbkxvYWRQb2xpY3kpcG9saWN5IGZvckV4dGVuc2lvbjooTlNTdHJpbmcgKilleHRlbnNpb24g
Y29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kg
cG9saWN5KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIEVYUEVDVF9FUShwb2xpY3ksIF9XS1NP
QXV0aG9yaXphdGlvbkxvYWRQb2xpY3lBbGxvdyk7CisgICAgRVhQRUNUX1RSVUUoW2V4dGVuc2lv
biBpc0VxdWFsOkAiIl0pOworICAgIGlmIChzZWxmLmFsbG93U09BdXRob3JpemF0aW9uTG9hZCkg
eworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihwb2xpY3kpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNvbXBsZXRpb25IYW5kbGVyKF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lJ
Z25vcmUpOworfQorCiBAZW5kCiAKICNpZiBQTEFURk9STShNQUMpCkBAIC00MTYsOCArNDQzLDgg
QEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2VlZDEpCiAg
ICAgUmV0YWluUHRyPE5TVVJMPiB0ZXN0VVJMID0gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxG
b3JSZXNvdXJjZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpA
IlRlc3RXZWJLaXRBUEkucmVzb3VyY2VzIl07CiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5T
KFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMy
MCwgNTAwKV0pOwotICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXph
dGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0
aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5FeHRl
cm5hbFNjaGVtZXNQb2xpY3k6OkFsbG93KTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhb
W1Rlc3RTT0F1dGhvcml6YXRpb25CYXNpY0RlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dl
YlZpZXcgc2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKIAogICAgIFt3ZWJW
aWV3IGxvYWRSZXF1ZXN0OltOU1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6dGVzdFVSTC5nZXQo
KV1dOwogICAgIFV0aWw6OnJ1bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CkBAIC00NDMsOCAr
NDcwLDggQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgSW50ZXJjZXB0aW9uU3VjY2Vl
ZDIpCiAgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMoUEFMOjpnZXRTT0F1dGhv
cml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpodHRw
SGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVCZWdpbkF1
dGhvcml6YXRpb25XaXRoVVJMKSk7CiAKICAgICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVz
dFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAw
KV0pOwotICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5h
dmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOwotICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXph
dGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCksIE9wZW5FeHRlcm5hbFNj
aGVtZXNQb2xpY3k6OkFsbG93KTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RT
T0F1dGhvcml6YXRpb25CYXNpY0RlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgW3dlYlZpZXcg
c2V0TmF2aWdhdGlvbkRlbGVnYXRlOmRlbGVnYXRlLmdldCgpXTsKIAogICAgIC8vIEZvcmNlIEFw
cCBMaW5rcyB3aXRoIGEgcmVxdWVzdC5VUkwgdGhhdCBoYXMgYSBkaWZmZXJlbnQgaG9zdCB0aGFu
IHRoZSBjdXJyZW50IG9uZSAoZW1wdHkgaG9zdCkgYW5kIFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQ
b2xpY3k6OlNob3VsZEFsbG93LgogICAgIGF1dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHBz
Oi8vd3d3LmV4YW1wbGUuY29tIik7CkBAIC05NTcsNiArOTg0LDI0IEBAIFRFU1QoU09BdXRob3Jp
emF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvbkNvbXBsZXRlVHdpY2UpCiAgICAgW2dEZWxlZ2F0
ZSBhdXRob3JpemF0aW9uOmdBdXRob3JpemF0aW9uIGRpZENvbXBsZXRlV2l0aEhUVFBSZXNwb25z
ZTpyZXNwb25zZS5nZXQoKSBodHRwQm9keTphZG9wdE5TKFtbTlNEYXRhIGFsbG9jXSBpbml0XSku
Z2V0KCldOwogfQogCitURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBTT0F1dGhvcml6YXRp
b25Mb2FkUG9saWN5SWdub3JlKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhv
ZFN3aXp6bGVyIHN3aXp6bGVyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVj
dG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRl
cnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7
CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVd
IFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0
b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRo
b3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJl
U09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3Bl
bkV4dGVybmFsU2NoZW1lc1BvbGljeTo6QWxsb3cpOworICAgIFtkZWxlZ2F0ZSBzZXRBbGxvd1NP
QXV0aG9yaXphdGlvbkxvYWQ6ZmFsc2VdOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05T
VVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVu
KCZuYXZpZ2F0aW9uQ29tcGxldGVkKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdl
dCgpLmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKIC8vIEZJWE1FKDE3NTIwNCk6IEVu
YWJsZSB0aGUgaU9TIHRlc3RzIG9uY2UgdGhlIGJ1ZyBpcyBmaXhlZC4KICNpZiBQTEFURk9STShN
QUMpCiBURVNUKFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkV2l0
aFVJKQpAQCAtMTY1NCw2ICsxNjk5LDMxIEBAIFRFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIEF1
dGhvcml6YXRpb25PcHRpb25zKQogICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnModHJ1ZSwg
Imh0dHA6Ly93d3cud2Via2l0Lm9yZyIsIDEpOwogfQogCitURVNUKFNPQXV0aG9yaXphdGlvblBv
cFVwLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5SWdub3JlKQoreworICAgIHJlc2V0U3RhdGUo
KTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyKFBBTDo6Z2V0U09BdXRob3JpemF0
aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNw
b25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhv
cml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBhdXRvIHRlc3RVUkwgPSBVUkwoVVJMKCksICJodHRw
Oi8vd3d3LmV4YW1wbGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRtbCA9IGdlbmVyYXRlSHRtbChv
cGVuZXJUZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAgICBhdXRvIHdlYlZpZXcgPSBh
ZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhGcmFtZTpDR1JlY3RNYWtlKDAs
IDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0
aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5pdF0pOworICAgIGNvbmZpZ3Vy
ZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwgZGVsZWdhdGUuZ2V0KCkpOwor
ICAgIFtkZWxlZ2F0ZSBzZXRBbGxvd1NPQXV0aG9yaXphdGlvbkxvYWQ6ZmFsc2VdOworCisgICAg
W3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVSTDooTlNVUkwgKilVUkwoVVJM
KCksICJodHRwOi8vd3d3LndlYmtpdC5vcmciKV07CisgICAgVXRpbDo6cnVuKCZuYXZpZ2F0aW9u
Q29tcGxldGVkKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBzZW5kQ2xpY2tz
QXRQb2ludDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07CisjZWxpZiBQ
TEFURk9STShJT1MpCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBAImNsaWNrTWUo
KSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1bigmbmV3V2lu
ZG93Q3JlYXRlZCk7CisgICAgRVhQRUNUX0ZBTFNFKGF1dGhvcml6YXRpb25QZXJmb3JtZWQpOwor
fQorCiBURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBOb0ludGVyY2VwdGlvbnMpCiB7CiAg
ICAgcmVzZXRTdGF0ZSgpOwpAQCAtMTg2MSw2ICsxOTMxLDI2IEBAIFRFU1QoU09BdXRob3JpemF0
aW9uU3ViRnJhbWUsIEF1dGhvcml6YXRpb25PcHRpb25zKQogICAgIGNoZWNrQXV0aG9yaXphdGlv
bk9wdGlvbnMoZmFsc2UsICJodHRwOi8vd3d3LmFwcGxlLmNvbSIsIDIpOwogfQogCitURVNUKFNP
QXV0aG9yaXphdGlvblN1YkZyYW1lLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5SWdub3JlKQor
eworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyKFBB
TDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3Jp
emF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJy
aWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBhdXRvIHRlc3RVUkwg
PSBVUkwoVVJMKCksICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIik7CisgICAgYXV0byB0ZXN0SHRt
bCA9IGdlbmVyYXRlSHRtbChwYXJlbnRUZW1wbGF0ZSwgdGVzdFVSTC5zdHJpbmcoKSk7CisKKyAg
ICBhdXRvIHdlYlZpZXcgPSBhZG9wdE5TKFtbVGVzdFdLV2ViVmlldyBhbGxvY10gaW5pdFdpdGhG
cmFtZTpDR1JlY3RNYWtlKDAsIDAsIDMyMCwgNTAwKV0pOworICAgIGF1dG8gZGVsZWdhdGUgPSBh
ZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRpb25EZWxlZ2F0ZSBhbGxvY10gaW5p
dF0pOworICAgIGNvbmZpZ3VyZVNPQXV0aG9yaXphdGlvbldlYlZpZXcod2ViVmlldy5nZXQoKSwg
ZGVsZWdhdGUuZ2V0KCkpOworICAgIFtkZWxlZ2F0ZSBzZXRBbGxvd1NPQXV0aG9yaXphdGlvbkxv
YWQ6ZmFsc2VdOworCisgICAgW3dlYlZpZXcgbG9hZEhUTUxTdHJpbmc6dGVzdEh0bWwgYmFzZVVS
TDooTlNVUkwgKilVUkwoVVJMKCksICJodHRwOi8vd3d3LmFwcGxlLmNvbSIpXTsKKyAgICAvLyBU
cnkgdG8gd2FpdCB1bnRpbCB0aGUgaWZyYW1lIGxvYWQgaXMgZmluaXNoZWQuCisgICAgVXRpbDo6
c2xlZXAoMC41KTsKKyAgICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3QgaW50ZXJjZXB0IHRoZSBpZnJh
bWUuCisgICAgRVhQRUNUX0ZBTFNFKGF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCiAKICNlbmRpZgo=
</data>
<flag name="review"
          id="388471"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372894</attachid>
            <date>2019-06-25 19:28:50 -0700</date>
            <delta_ts>2019-06-25 20:11:42 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-199085-20190625192850.patch</filename>
            <type>text/plain</type>
            <size>40794</size>
            <attacher name="Jiewen Tan">jiewen_tan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2NzA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFiY2UzZjkxMzY5OWFhZTFj
NTUyNzVmZDQwNTQ4MmM4NjA0YmZiMDEuLmU2Nzk3NDQ0ODczNTkxODVlOGEwMjQ4YjFmMzM5MDAx
ODg0MTU1MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTktMDYtMjAgIEppZXdlbiBU
YW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgYSBuZXcgU1BJ
IHRvIGluZm9ybSBjbGllbnRzIGFib3V0IEFwcFNTTworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk5MDg1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81
MDAyODI0Nj4KKworICAgICAgICBSZXZpZXdlZCBieSBHZW9mZnJleSBHYXJlbi4KKworICAgICAg
ICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBuZXcgU1BJIHRvIGluZm9ybSBjbGllbnRzIGFib3V0
IGluY29taW5nIEFwcFNTTyBpbnRlcmNlcHRpb25zIGR1cmluZworICAgICAgICBuYXZpZ2F0aW9u
cy4gVGhlcmVmb3JlLCBjbGllbnRzIGNhbiBtYWtlIGFuIGluZm9ybWVkIGRlY2lzaW9uIGFib3V0
IHdoZXRoZXIgdGhpcyBpcyB0aGUgcmlnaHQKKyAgICAgICAgbW9tZW50IHRvIGRvIHRoZSBpbnRl
cmNlcHRpb24gYXMgaW50ZXJjZXB0aW9ucyBvZnRlbiBzaG93IG5hdGl2ZSBVSS4gQWxzbywgdGhl
IFNQSSBpcyBkZXNpZ25lZAorICAgICAgICB0byBwYXNzIGFsb25nIGEgaHVtYW4gcmVhZGFibGUg
bmFtZSBmb3IgdGhlIGV4dGVuc2lvbiBzdWNoIHRoYXQgY2xpZW50cyBjYW4gZG8gd2hhdGV2ZXIg
dGhleQorICAgICAgICB3YW50IHRvIGluZm9ybSB1c2VycyBhYm91dCB3aGF0J3MgZ29pbmcgb24u
CisKKyAgICAgICAgSGVyZSBpcyB0aGUgbmV3IFNQSToKKyAgICAgICAgLSAodm9pZClfd2ViVmll
dzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2Fk
V2l0aEN1cnJlbnRQb2xpY3k6KF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpcG9saWN5IGZv
ckV4dGVuc2lvbjooTlNTdHJpbmcgKilleHRlbnNpb24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQg
KF4pKF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgcG9saWN5KSljb21wbGV0aW9uSGFuZGxl
cjsKKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oOgorICAg
ICAgICAoQVBJOjpOYXZpZ2F0aW9uQ2xpZW50OjpkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRp
b25Mb2FkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdhdGlvbkRlbGVn
YXRlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tOgorICAgICAg
ICAoV2ViS2l0OjpOYXZpZ2F0aW9uU3RhdGU6OnNldE5hdmlnYXRpb25EZWxlZ2F0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OnNvQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpOgorICAgICAgICAoV2ViS2l0
Ojp3a1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpOgorICAgICAgICAoV2ViS2l0OjpOYXZpZ2F0
aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlv
bkxvYWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9TT0F1dGhvcml6YXRpb24vU09BdXRo
b3JpemF0aW9uTG9hZFBvbGljeS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2Ev
U09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW06CisgICAgICAgIChXZWJL
aXQ6OlNPQXV0aG9yaXphdGlvblNlc3Npb246OnN0YXJ0KToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpkZWNpZGVQ
b2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkKToKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lmg6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisK
IDIwMTktMDYtMjEgIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCBhIGJ1aWxkIGZpeCBhZnRlciByMjQ2NzAxCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJTmF2aWdhdGlvbkNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0FQSU5hdmlnYXRpb25DbGllbnQuaAppbmRleCAxOTZjMzcyNDJi
ZDJjZWE2Y2U4ZWU1MjM0OTNhZDc4NzkwYTQ0NGQwLi5hNmUwMTljYzQ1MTg2M2E0MWFjZmM4YmVh
N2JmMzAyODk2YjFiYjczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
QVBJTmF2aWdhdGlvbkNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElOYXZpZ2F0aW9uQ2xpZW50LmgKQEAgLTQwLDYgKzQwLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9MYXlvdXRNaWxlc3RvbmUuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCisjaWYgSEFW
RShBUFBfU1NPKQorI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kuaCIKKyNlbmRp
ZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgQ29udGVudFJ1bGVMaXN0UmVzdWx0czsK
IGNsYXNzIFJlc291cmNlRXJyb3I7CkBAIC0xNDAsNiArMTQ0LDEzIEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgZGlkRW5kTmF2aWdhdGlvbkdlc3R1cmUoV2ViS2l0OjpXZWJQYWdlUHJveHkm
LCBib29sIHdpbGxOYXZpZ2F0ZSwgV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RJdGVtJikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QoV2Vi
S2l0OjpXZWJQYWdlUHJveHkmKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgZGlkQ2hhbmdlQmFja0Zv
cndhcmRMaXN0KFdlYktpdDo6V2ViUGFnZVByb3h5JiwgV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExp
c3RJdGVtKiwgY29uc3QgVmVjdG9yPFJlZjxXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdEl0ZW0+
PiYpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyNpZiBIQVZFKEFQUF9TU08pCisgICAgdmlydHVhbCB2
b2lkIGRlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxvYWQoV2ViS2l0OjpXZWJQYWdlUHJv
eHkmLCBXZWJLaXQ6OlNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgY3VycmVudFNPQXV0aG9yaXph
dGlvbkxvYWRQb2xpY3ksIGNvbnN0IFdURjo6U3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChXZWJLaXQ6OlNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQorICAgIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVudFNPQXV0aG9yaXphdGlv
bkxvYWRQb2xpY3kpOworICAgIH0KKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVBJCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tOYXZpZ2F0aW9u
RGVsZWdhdGVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tO
YXZpZ2F0aW9uRGVsZWdhdGVQcml2YXRlLmgKaW5kZXggZTliZTA0ZDVjMzU5YTUzZWI4YzQ3NDM2
NWRiOTZkMWE1ZGUxY2E0NC4uMzkyNmJiMGYzZjM2ODQxOTk2ZmFiYTMyZGIxOGE4YjE3MjYzNGIx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLTmF2aWdh
dGlvbkRlbGVnYXRlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9XS05hdmlnYXRpb25EZWxlZ2F0ZVByaXZhdGUuaApAQCAtNTQsNiArNTQsMTEgQEAgdHlw
ZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uKSB7CiAg
ICAgX1dLUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uQ3Jhc2gsCiB9IFdLX0FQSV9BVkFJTEFCTEUo
bWFjb3MoMTAuMTQpLCBpb3MoMTIuMCkpOwogCit0eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBf
V0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KSB7CisgICAgX1dLU09BdXRob3JpemF0aW9uTG9h
ZFBvbGljeUFsbG93LAorICAgIF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lJZ25vcmUsCit9
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOworCiBzdGF0aWMgY29u
c3QgV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5IF9XS05hdmlnYXRpb25BY3Rpb25Qb2xpY3lEb3du
bG9hZCA9IChXS05hdmlnYXRpb25BY3Rpb25Qb2xpY3kpKFdLTmF2aWdhdGlvbkFjdGlvblBvbGlj
eUFsbG93ICsgMSk7CiBzdGF0aWMgY29uc3QgV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5IFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTEpLCBpb3MoOS4wKSkgX1dLTmF2aWdhdGlvbkFjdGlvblBv
bGljeUFsbG93V2l0aG91dFRyeWluZ0FwcExpbmsgPSAoV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5
KShfV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5RG93bmxvYWQgKyAxKTsKIHN0YXRpYyBjb25zdCBX
S05hdmlnYXRpb25BY3Rpb25Qb2xpY3kgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwg
aW9zKDEyLjIpKSBfV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3dJbk5ld1Byb2Nlc3MgPSAo
V0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5KShfV0tOYXZpZ2F0aW9uQWN0aW9uUG9saWN5QWxsb3dX
aXRob3V0VHJ5aW5nQXBwTGluayArIDEpOwpAQCAtMTExLDQgKzExNiw2IEBAIHN0YXRpYyBjb25z
dCBXS05hdmlnYXRpb25SZXNwb25zZVBvbGljeSBfV0tOYXZpZ2F0aW9uUmVzcG9uc2VQb2xpY3lC
ZWNvbWVEb3dubG9hCiAtICh2b2lkKV93ZWJWaWV3OihXS1dlYlZpZXcgKil3ZWJWaWV3IGJhY2tG
b3J3YXJkTGlzdEl0ZW1BZGRlZDooV0tCYWNrRm9yd2FyZExpc3RJdGVtICopaXRlbUFkZGVkIHJl
bW92ZWQ6KE5TQXJyYXk8V0tCYWNrRm9yd2FyZExpc3RJdGVtICo+ICopaXRlbXNSZW1vdmVkIFdL
X0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCkpOwogI2VuZGlmCiAKKy0gKHZvaWQpX3dlYlZp
ZXc6KFdLV2ViVmlldyAqKXdlYlZpZXcgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9h
ZFdpdGhDdXJyZW50UG9saWN5OihfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5KXBvbGljeSBm
b3JFeHRlbnNpb246KE5TU3RyaW5nICopZXh0ZW5zaW9uIGNvbXBsZXRpb25IYW5kbGVyOih2b2lk
ICheKShfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkpY29tcGxldGlvbkhhbmRs
ZXIgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CisKIEBlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmgKaW5kZXgg
MDkxNDcwZmVmMDM1YzhkNGI4NGY0NGFiZWZiZjMwM2M5ZTg5YzFiMy4uZDYxNjI4ZGRhMDAxYjU3
ZTk4ZjljZjI2MDYwYTU3NzI1ZjlmZmE2YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLmgKQEAgLTEzOSw2ICsxMzksMTAgQEAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKFdlYlBhZ2VQcm94
eSYsIFJlZjxBUEk6Ok5hdmlnYXRpb25BY3Rpb24+JiYsIFJlZjxXZWJGcmFtZVBvbGljeUxpc3Rl
bmVyUHJveHk+JiYsIEFQSTo6T2JqZWN0KiB1c2VyRGF0YSkgb3ZlcnJpZGU7CiAgICAgICAgIHZv
aWQgZGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvblJlc3BvbnNlKFdlYlBhZ2VQcm94eSYsIFJlZjxB
UEk6Ok5hdmlnYXRpb25SZXNwb25zZT4mJiwgUmVmPFdlYkZyYW1lUG9saWN5TGlzdGVuZXJQcm94
eT4mJiwgQVBJOjpPYmplY3QqIHVzZXJEYXRhKSBvdmVycmlkZTsKIAorI2lmIEhBVkUoQVBQX1NT
TykKKyAgICAgICAgdm9pZCBkZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkKFdlYlBh
Z2VQcm94eSYsIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3ksIGNvbnN0IFN0cmluZyYsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSk+JiYpIG92ZXJyaWRl
OworI2VuZGlmCisKICAgICAgICAgTmF2aWdhdGlvblN0YXRlJiBtX25hdmlnYXRpb25TdGF0ZTsK
ICAgICB9OwogICAgIApAQCAtMjM4LDYgKzI0MiwxMCBAQCBwcml2YXRlOgogICAgICAgICBib29s
IHdlYlZpZXdXaWxsR29Ub0JhY2tGb3J3YXJkTGlzdEl0ZW1JblBhZ2VDYWNoZSA6IDE7CiAgICAg
ICAgIGJvb2wgd2ViVmlld0RlY2lkZVBvbGljeUZvclBsdWdpbkxvYWRXaXRoQ3VycmVudFBvbGlj
eVBsdWdpbkluZm9Db21wbGV0aW9uSGFuZGxlciA6IDE7CiAjZW5kaWYKKworI2lmIEhBVkUoQVBQ
X1NTTykKKyAgICAgICAgYm9vbCB3ZWJWaWV3RGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9u
TG9hZFdpdGhDdXJyZW50UG9saWN5Rm9yRXh0ZW5zaW9uQ29tcGxldGlvbkhhbmRsZXIgOiAxOwor
I2VuZGlmCiAgICAgfSBtX25hdmlnYXRpb25EZWxlZ2F0ZU1ldGhvZHM7CiAKICAgICBXZWFrT2Jq
Q1B0cjxpZCA8V0tIaXN0b3J5RGVsZWdhdGVQcml2YXRlPiA+IG1faGlzdG9yeURlbGVnYXRlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRl
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvTmF2aWdhdGlvblN0YXRlLm1tCmlu
ZGV4IDMyNWZmODEwYmUyYmYzMTE1MWE3NzdkZjc0YTk0OWIwMGE4YmZkNjIuLjZlOTk1MDBhOTQ0
NGM0ZWFkYWI3NWM4MWI0NGZjYjZiNDQ2ZjY0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL05hdmlnYXRpb25TdGF0ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9OYXZpZ2F0aW9uU3RhdGUubW0KQEAgLTE5Niw2ICsxOTYsOSBAQCB2b2lk
IE5hdmlnYXRpb25TdGF0ZTo6c2V0TmF2aWdhdGlvbkRlbGVnYXRlKGlkIDxXS05hdmlnYXRpb25E
ZWxlZ2F0ZT4gZGVsZWdhdGUpCiAgICAgbV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZp
ZXdCYWNrRm9yd2FyZExpc3RJdGVtQWRkZWRSZW1vdmVkID0gW2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6YmFja0ZvcndhcmRMaXN0SXRlbUFkZGVkOnJlbW92
ZWQ6KV07CiAgICAgbV9uYXZpZ2F0aW9uRGVsZWdhdGVNZXRob2RzLndlYlZpZXdEZWNpZGVQb2xp
Y3lGb3JQbHVnaW5Mb2FkV2l0aEN1cnJlbnRQb2xpY3lQbHVnaW5JbmZvQ29tcGxldGlvbkhhbmRs
ZXIgPSBbZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihfd2ViVmlldzpkZWNp
ZGVQb2xpY3lGb3JQbHVnaW5Mb2FkV2l0aEN1cnJlbnRQb2xpY3k6cGx1Z2luSW5mbzpjb21wbGV0
aW9uSGFuZGxlcjopXTsKICNlbmRpZgorI2lmIEhBVkUoQVBQX1NTTykKKyAgICBtX25hdmlnYXRp
b25EZWxlZ2F0ZU1ldGhvZHMud2ViVmlld0RlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlvbkxv
YWRXaXRoQ3VycmVudFBvbGljeUZvckV4dGVuc2lvbkNvbXBsZXRpb25IYW5kbGVyID0gW2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoX3dlYlZpZXc6ZGVjaWRlUG9saWN5Rm9y
U09BdXRob3JpemF0aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5OmZvckV4dGVuc2lvbjpjb21wbGV0
aW9uSGFuZGxlcjopXTsKKyNlbmRpZgogfQogCiBSZXRhaW5QdHI8aWQgPFdLSGlzdG9yeURlbGVn
YXRlUHJpdmF0ZT4gPiBOYXZpZ2F0aW9uU3RhdGU6Omhpc3RvcnlEZWxlZ2F0ZSgpCkBAIC0xMTAx
LDYgKzExMDQsNTQgQEAgdm9pZCBOYXZpZ2F0aW9uU3RhdGU6Ok5hdmlnYXRpb25DbGllbnQ6OmRp
ZEZpbmlzaExvYWRGb3JRdWlja0xvb2tEb2N1bWVudEluTWFpbkYKIH0KICNlbmRpZgogCisjaWYg
SEFWRShBUFBfU1NPKQorc3RhdGljIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgc29BdXRob3Jp
emF0aW9uTG9hZFBvbGljeShfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkKK3sK
KyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgX1dLU09BdXRob3JpemF0aW9uTG9hZFBv
bGljeUFsbG93OgorICAgICAgICByZXR1cm4gU09BdXRob3JpemF0aW9uTG9hZFBvbGljeTo6QWxs
b3c7CisgICAgY2FzZSBfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5SWdub3JlOgorICAgICAg
ICByZXR1cm4gU09BdXRob3JpemF0aW9uTG9hZFBvbGljeTo6SWdub3JlOworICAgIH0KKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gU09BdXRob3JpemF0aW9uTG9hZFBvbGlj
eTo6QWxsb3c7Cit9CisKK3N0YXRpYyBfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHdrU09B
dXRob3JpemF0aW9uTG9hZFBvbGljeShTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5IHBvbGljeSkK
K3sKKyAgICBzd2l0Y2ggKHBvbGljeSkgeworICAgIGNhc2UgU09BdXRob3JpemF0aW9uTG9hZFBv
bGljeTo6QWxsb3c6CisgICAgICAgIHJldHVybiBfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5
QWxsb3c7CisgICAgY2FzZSBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5OjpJZ25vcmU6CisgICAg
ICAgIHJldHVybiBfV0tTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5SWdub3JlOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gX1dLU09BdXRob3JpemF0aW9uTG9h
ZFBvbGljeUFsbG93OworfQorCit2b2lkIE5hdmlnYXRpb25TdGF0ZTo6TmF2aWdhdGlvbkNsaWVu
dDo6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZChXZWJQYWdlUHJveHkmLCBTT0F1
dGhvcml6YXRpb25Mb2FkUG9saWN5IGN1cnJlbnRTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LCBj
b25zdCBTdHJpbmcmIGV4dGVuc2lvbiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTT0F1dGhvcml6
YXRpb25Mb2FkUG9saWN5KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIW1fbmF2
aWdhdGlvblN0YXRlLm1fbmF2aWdhdGlvbkRlbGVnYXRlTWV0aG9kcy53ZWJWaWV3RGVjaWRlUG9s
aWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5Rm9yRXh0ZW5zaW9uQ29t
cGxldGlvbkhhbmRsZXIpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoY3VycmVudFNPQXV0
aG9yaXphdGlvbkxvYWRQb2xpY3kpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBuYXZpZ2F0aW9uRGVsZWdhdGUgPSBtX25hdmlnYXRpb25TdGF0ZS5tX25hdmlnYXRpb25EZWxl
Z2F0ZS5nZXQoKTsKKyAgICBpZiAoIW5hdmlnYXRpb25EZWxlZ2F0ZSkgeworICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihjdXJyZW50U09BdXRob3JpemF0aW9uTG9hZFBvbGljeSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGNoZWNrZXIgPSBDb21wbGV0aW9uSGFuZGxlckNh
bGxDaGVja2VyOjpjcmVhdGUobmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpLCBAc2VsZWN0b3IoX3dl
YlZpZXc6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhDdXJyZW50UG9saWN5
OmZvckV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjopKTsKKyAgICBbKGlkIDxXS05hdmlnYXRp
b25EZWxlZ2F0ZVByaXZhdGU+KW5hdmlnYXRpb25EZWxlZ2F0ZSBfd2ViVmlldzptX25hdmlnYXRp
b25TdGF0ZS5tX3dlYlZpZXcgZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdpdGhD
dXJyZW50UG9saWN5OndrU09BdXRob3JpemF0aW9uTG9hZFBvbGljeShjdXJyZW50U09BdXRob3Jp
emF0aW9uTG9hZFBvbGljeSkgZm9yRXh0ZW5zaW9uOmV4dGVuc2lvbiBjb21wbGV0aW9uSGFuZGxl
cjptYWtlQmxvY2tQdHIoW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlciksIGNoZWNrZXIgPSBXVEZNb3ZlKGNoZWNrZXIpXShfV0tTT0F1dGhvcml6YXRpb25Mb2Fk
UG9saWN5IHBvbGljeSkgbXV0YWJsZSB7CisgICAgICAgIGlmIChjaGVja2VyLT5jb21wbGV0aW9u
SGFuZGxlckhhc0JlZW5DYWxsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2hl
Y2tlci0+ZGlkQ2FsbENvbXBsZXRpb25IYW5kbGVyKCk7CisgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKHNvQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kocG9saWN5KSk7CisgICAgfSkuZ2V0KCldOwor
fQorI2VuZGlmCisKIC8vIEhpc3RvcnlEZWxlZ2F0ZVByaXZhdGUgc3VwcG9ydAogICAgIAogTmF2
aWdhdGlvblN0YXRlOjpIaXN0b3J5Q2xpZW50OjpIaXN0b3J5Q2xpZW50KE5hdmlnYXRpb25TdGF0
ZSYgbmF2aWdhdGlvblN0YXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25M
b2FkUG9saWN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDZlZjI3N2M5NTg0YjgyNmY3NGY5MTVmNTgwZTNlZDBm
ZjYwMjljMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LmgKQEAgLTAsMCArMSwz
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgSEFWRShBUFBfU1NPKQorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBjbGFzcyBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5
IDogdWludDhfdCB7CisgICAgQWxsb3csCisgICAgSWdub3JlCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEhBVkUoQVBQX1NTTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1NPQXV0aG9yaXphdGlvbi9TT0F1dGhvcml6YXRpb25TZXNz
aW9uLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9uL1NP
QXV0aG9yaXphdGlvblNlc3Npb24ubW0KaW5kZXggNDY3OGZlM2VhN2Q4MjVkMTRmZDZmN2ZiNTBm
ZDVjM2JjYjRhMDRlZS4uYzk4OTJkZGRiYTA3ZmNhNmFjMmZkNGQxZDgxODdhNjJlYmU0ZjkzNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvU09BdXRob3JpemF0aW9u
L1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvU09BdXRob3JpemF0aW9uL1NPQXV0aG9yaXphdGlvblNlc3Npb24ubW0KQEAgLTMyLDYg
KzMyLDcgQEAKICNpbXBvcnQgIkFQSU5hdmlnYXRpb24uaCIKICNpbXBvcnQgIkFQSU5hdmlnYXRp
b25BY3Rpb24uaCIKICNpbXBvcnQgIkFQSVVJQ2xpZW50LmgiCisjaW1wb3J0ICJTT0F1dGhvcml6
YXRpb25Mb2FkUG9saWN5LmgiCiAjaW1wb3J0ICJXS1VJRGVsZWdhdGUuaCIKICNpbXBvcnQgIldl
YlBhZ2VQcm94eS5oIgogI2ltcG9ydCAiV2ViU2l0ZURhdGFTdG9yZS5oIgpAQCAtMTAyLDI0ICsx
MDMsMzUgQEAgdm9pZCBTT0F1dGhvcml6YXRpb25TZXNzaW9uOjpzdGFydCgpCiB7CiAgICAgQVNT
RVJUKChtX3N0YXRlID09IFN0YXRlOjpJZGxlIHx8IG1fc3RhdGUgPT0gU3RhdGU6OldhaXRpbmcp
ICYmIG1fcGFnZSAmJiBtX25hdmlnYXRpb25BY3Rpb24pOwogICAgIG1fc3RhdGUgPSBTdGF0ZTo6
QWN0aXZlOwotICAgIGlmICghbV9zb0F1dGhvcml6YXRpb24pCi0gICAgICAgIHJldHVybjsKIAot
ICAgIC8vIEZJWE1FPHJkYXI6Ly9wcm9ibGVtLzQ4OTA5MzM2PjogUmVwbGFjZSB0aGUgYmVsb3cg
d2l0aCBBcHBTU08gY29uc3RhbnRzLgotICAgIGF1dG8gaW5pdGlhdG9yT3JpZ2luID0gZW1wdHlT
dHJpbmcoKTsKLSAgICBpZiAobV9uYXZpZ2F0aW9uQWN0aW9uLT5zb3VyY2VGcmFtZSgpKQotICAg
ICAgICBpbml0aWF0b3JPcmlnaW4gPSBtX25hdmlnYXRpb25BY3Rpb24tPnNvdXJjZUZyYW1lKCkt
PnNlY3VyaXR5T3JpZ2luKCkuc2VjdXJpdHlPcmlnaW4oKS50b1N0cmluZygpOwotICAgIGlmICht
X2FjdGlvbiA9PSBJbml0aWF0aW5nQWN0aW9uOjpTdWJGcmFtZSAmJiBtX3BhZ2UtPm1haW5GcmFt
ZSgpKQotICAgICAgICBpbml0aWF0b3JPcmlnaW4gPSBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbjo6
Y3JlYXRlKG1fcGFnZS0+bWFpbkZyYW1lKCktPnVybCgpKS0+dG9TdHJpbmcoKTsKLSAgICBOU0Rp
Y3Rpb25hcnkgKmF1dGhvcml6YXRpb25PcHRpb25zID0gQHsKLSAgICAgICAgU09BdXRob3JpemF0
aW9uT3B0aW9uVXNlckFjdGlvbkluaXRpYXRlZDogQChtX25hdmlnYXRpb25BY3Rpb24tPmlzUHJv
Y2Vzc2luZ1VzZXJHZXN0dXJlKCkpLAotICAgICAgICBAImluaXRpYXRvck9yaWdpbiI6IChOU1N0
cmluZyAqKWluaXRpYXRvck9yaWdpbiwKLSAgICAgICAgQCJpbml0aWF0aW5nQWN0aW9uIjogQChz
dGF0aWNfY2FzdDxOU0ludGVnZXI+KG1fYWN0aW9uKSkKLSAgICB9OwotICAgIFttX3NvQXV0aG9y
aXphdGlvbiBzZXRBdXRob3JpemF0aW9uT3B0aW9uczphdXRob3JpemF0aW9uT3B0aW9uc107Ci0K
LSAgICBhdXRvICpuc1JlcXVlc3QgPSBtX25hdmlnYXRpb25BY3Rpb24tPnJlcXVlc3QoKS5uc1VS
TFJlcXVlc3QoV2ViQ29yZTo6SFRUUEJvZHlVcGRhdGVQb2xpY3k6OlVwZGF0ZUhUVFBCb2R5KTsK
LSAgICBbbV9zb0F1dGhvcml6YXRpb24gYmVnaW5BdXRob3JpemF0aW9uV2l0aFVSTDpuc1JlcXVl
c3QuVVJMIGh0dHBIZWFkZXJzOm5zUmVxdWVzdC5hbGxIVFRQSGVhZGVyRmllbGRzIGh0dHBCb2R5
Om5zUmVxdWVzdC5IVFRQQm9keV07CisgICAgbV9wYWdlLT5kZWNpZGVQb2xpY3lGb3JTT0F1dGhv
cml6YXRpb25Mb2FkKGVtcHR5U3RyaW5nKCksIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KCp0aGlzKV0gKFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kgcG9saWN5KSB7CisgICAgICAgIGlm
ICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHBvbGljeSA9
PSBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5OjpJZ25vcmUpIHsKKyAgICAgICAgICAgIGZhbGxC
YWNrVG9XZWJQYXRoKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoIW1fc29BdXRob3JpemF0aW9uIHx8ICFtX3BhZ2UgfHwgIW1fbmF2aWdhdGlvbkFjdGlv
bikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBGSVhNRTogPHJkYXI6Ly9wcm9i
bGVtLzQ4OTA5MzM2PiBSZXBsYWNlIHRoZSBiZWxvdyB3aXRoIEFwcFNTTyBjb25zdGFudHMuCisg
ICAgICAgIGF1dG8gaW5pdGlhdG9yT3JpZ2luID0gZW1wdHlTdHJpbmcoKTsKKyAgICAgICAgaWYg
KG1fbmF2aWdhdGlvbkFjdGlvbi0+c291cmNlRnJhbWUoKSkKKyAgICAgICAgICAgIGluaXRpYXRv
ck9yaWdpbiA9IG1fbmF2aWdhdGlvbkFjdGlvbi0+c291cmNlRnJhbWUoKS0+c2VjdXJpdHlPcmln
aW4oKS5zZWN1cml0eU9yaWdpbigpLnRvU3RyaW5nKCk7CisgICAgICAgIGlmIChtX2FjdGlvbiA9
PSBJbml0aWF0aW5nQWN0aW9uOjpTdWJGcmFtZSAmJiBtX3BhZ2UtPm1haW5GcmFtZSgpKQorICAg
ICAgICAgICAgaW5pdGlhdG9yT3JpZ2luID0gV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW46OmNyZWF0
ZShtX3BhZ2UtPm1haW5GcmFtZSgpLT51cmwoKSktPnRvU3RyaW5nKCk7CisgICAgICAgIE5TRGlj
dGlvbmFyeSAqYXV0aG9yaXphdGlvbk9wdGlvbnMgPSBAeworICAgICAgICAgICAgU09BdXRob3Jp
emF0aW9uT3B0aW9uVXNlckFjdGlvbkluaXRpYXRlZDogQChtX25hdmlnYXRpb25BY3Rpb24tPmlz
UHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkpLAorICAgICAgICAgICAgQCJpbml0aWF0b3JPcmlnaW4i
OiAoTlNTdHJpbmcgKilpbml0aWF0b3JPcmlnaW4sCisgICAgICAgICAgICBAImluaXRpYXRpbmdB
Y3Rpb24iOiBAKHN0YXRpY19jYXN0PE5TSW50ZWdlcj4obV9hY3Rpb24pKQorICAgICAgICB9Owor
ICAgICAgICBbbV9zb0F1dGhvcml6YXRpb24gc2V0QXV0aG9yaXphdGlvbk9wdGlvbnM6YXV0aG9y
aXphdGlvbk9wdGlvbnNdOworCisgICAgICAgIGF1dG8gKm5zUmVxdWVzdCA9IG1fbmF2aWdhdGlv
bkFjdGlvbi0+cmVxdWVzdCgpLm5zVVJMUmVxdWVzdChXZWJDb3JlOjpIVFRQQm9keVVwZGF0ZVBv
bGljeTo6VXBkYXRlSFRUUEJvZHkpOworICAgICAgICBbbV9zb0F1dGhvcml6YXRpb24gYmVnaW5B
dXRob3JpemF0aW9uV2l0aFVSTDpuc1JlcXVlc3QuVVJMIGh0dHBIZWFkZXJzOm5zUmVxdWVzdC5h
bGxIVFRQSGVhZGVyRmllbGRzIGh0dHBCb2R5Om5zUmVxdWVzdC5IVFRQQm9keV07CisgICAgfSk7
CiB9CiAKIHZvaWQgU09BdXRob3JpemF0aW9uU2Vzc2lvbjo6ZmFsbEJhY2tUb1dlYlBhdGgoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZDdiNmQ3NWEwNTY1
MTY3N2VlNjBkMWViOTZkM2Y5MWEwNzdkMDBlZS4uYWM3NGJkNGM3YWM0YTEzMDU0MDE2MDJkM2Iy
NzY0MzBhZGI4ODhiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CkBAIC05MjQ3LDYgKzkyNDcsMTMgQEAgdm9pZCBXZWJQYWdlUHJveHk6OmNvbmZpZ3VyZUxvZ2dp
bmdDaGFubmVsKGNvbnN0IFN0cmluZyYgY2hhbm5lbE5hbWUsIFdURkxvZ0NoYW4KICNlbmRpZgog
fQogCisjaWYgSEFWRShBUFBfU1NPKQordm9pZCBXZWJQYWdlUHJveHk6OmRlY2lkZVBvbGljeUZv
clNPQXV0aG9yaXphdGlvbkxvYWQoY29uc3QgU3RyaW5nJiBleHRlbnNpb24sIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoU09BdXRob3JpemF0aW9uTG9hZFBvbGljeSk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCit7CisgICAgbV9uYXZpZ2F0aW9uQ2xpZW50LT5kZWNpZGVQb2xpY3lGb3JTT0F1dGhvcml6
YXRpb25Mb2FkKCp0aGlzLCBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5OjpBbGxvdywgZXh0ZW5z
aW9uLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKICN1bmRlZiBNRVJHRV9XSEVFTF9FVkVOVFMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggNmUzMjk3ZGMxNjc0MjU1NmZhNjA2Mzc4ZTc3Y2E1
Mzk5NDFmNDdmYy4uMzVlODVmMGUzNTFjNzIzODI0ZjZmYTEzNmU3YmVmZDU3NDYyMjlmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTE0MSw2ICsxNDEsMTAgQEAg
T0JKQ19DTEFTUyBfV0tSZW1vdGVPYmplY3RSZWdpc3RyeTsKICNpbmNsdWRlIDxXZWJDb3JlL1dl
Yk1lZGlhU2Vzc2lvbk1hbmFnZXJDbGllbnQuaD4KICNlbmRpZgogCisjaWYgSEFWRShBUFBfU1NP
KQorI2luY2x1ZGUgIlNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kuaCIKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKE1FRElBX1NFU1NJT04pCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBNZWRpYVNl
c3Npb25NZXRhZGF0YTsKQEAgLTE1NDUsNiArMTU0OSw3IEBAIHB1YmxpYzoKICNpZiBIQVZFKEFQ
UF9TU08pCiAgICAgdm9pZCBzZXRTaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluQWxsTmF2
aWdhdGlvblBvbGljeURlY2lzaW9uKCkgeyBtX3Nob3VsZFN1cHByZXNzU09BdXRob3JpemF0aW9u
SW5BbGxOYXZpZ2F0aW9uUG9saWN5RGVjaXNpb24gPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRTaG91
bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lEZWNpc2lvbigp
IHsgbV9zaG91bGRTdXBwcmVzc1NPQXV0aG9yaXphdGlvbkluTmV4dE5hdmlnYXRpb25Qb2xpY3lE
ZWNpc2lvbiA9IHRydWU7IH0KKyAgICB2b2lkIGRlY2lkZVBvbGljeUZvclNPQXV0aG9yaXphdGlv
bkxvYWQoY29uc3QgU3RyaW5nJiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTT0F1dGhvcml6YXRp
b25Mb2FkUG9saWN5KT4mJik7CiAjZW5kaWYKIAogICAgIExvZ2dlciYgbG9nZ2VyKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjNzE3
NzZhMGQyZGM0ZjE3M2U5YzYzMzkzMGFhYThhYmYwZGM0NTZhLi4xYjUyMjYzYzQ2ZGI1ZWZhMDNl
ZTI1ODI3OTFjZDk2NTQ4Zjk3OTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwNDIsNiArMTA0Miw3IEBACiAJCTU3OERDMjk4MjE1
NUEwMDIwMDc0RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3OERDMjk3MjE1NUEwMDEwMDc0
RTgxNSAvKiBMb2NhbEF1dGhlbnRpY2F0aW9uU29mdExpbmsuaCAqLzsgfTsKIAkJNTdBQzhGNTAy
MTdGRUVEOTAwNTU0MzhDIC8qIEhpZENvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3QUM4RjRFMjE3RkVFRDkwMDU1NDM4QyAvKiBIaWRD
b25uZWN0aW9uLmggKi87IH07CiAJCTU3QjRCNDYwMjBCNTA0QUMwMEQ0QUQ3OSAvKiBDbGllbnRD
ZXJ0aWZpY2F0ZUF1dGhlbnRpY2F0aW9uWFBDQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0I0QjQ1RTIwQjUwNEFCMDBENEFENzkgLyog
Q2xpZW50Q2VydGlmaWNhdGVBdXRoZW50aWNhdGlvblhQQ0NvbnN0YW50cy5oICovOyB9OworCQk1
N0JCRUE2RDIyQkMwQkZFMDAyNzM5OTUgLyogU09BdXRob3JpemF0aW9uTG9hZFBvbGljeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdCQkVBNkMyMkJD
MEJGRTAwMjczOTk1IC8qIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kuaCAqLzsgfTsKIAkJNTdE
Q0VENkUyMTQyRUU1RTAwMTZCODQ3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvck1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1N0RDRUQ2QjIxNDJFQUUyMDAxNkI4NDcgLyogV2ViQXV0aGVudGljYXRvckNvb3JkaW5h
dG9yTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJNTdEQ0VENkYyMTQyRUU2MzAwMTZCODQ3
IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvck1lc3NhZ2VzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0RDRUQ2QTIxNDJFQUUyMDAxNkI4NDcg
LyogV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yTWVzc2FnZXMuaCAqLzsgfTsKIAkJNTdEQ0VE
NzAyMTQyRUU2ODAwMTZCODQ3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3RENFRDZDMjE0MkVBRjkwMDE2Qjg0NyAvKiBXZWJBdXRoZW50aWNhdG9yQ29vcmRp
bmF0b3JQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgKi87IH07CkBAIC0zNDgwLDYgKzM0ODEsNyBA
QAogCQk1N0FDOEY0RjIxN0ZFRUQ5MDA1NTQzOEMgLyogSGlkQ29ubmVjdGlvbi5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEhpZENvbm5lY3Rpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU3QjRCNDVEMjBCNTA0QUIwMEQ0QUQ3OSAvKiBBdXRoZW50aWNhdGlvbk1hbmFnZXJD
b2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1dGhlbnRp
Y2F0aW9uTWFuYWdlckNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1N0I0
QjQ1RTIwQjUwNEFCMDBENEFENzkgLyogQ2xpZW50Q2VydGlmaWNhdGVBdXRoZW50aWNhdGlvblhQ
Q0NvbnN0YW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGllbnRDZXJ0
aWZpY2F0ZUF1dGhlbnRpY2F0aW9uWFBDQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTU3QkJFQTZDMjJCQzBCRkUwMDI3Mzk5NSAvKiBTT0F1dGhvcml6YXRpb25Mb2Fk
UG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3kuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTdEQ0VENkEyMTQyRUFFMjAwMTZCODQ3IC8qIFdl
YkF1dGhlbnRpY2F0b3JDb29yZGluYXRvck1lc3NhZ2VzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvck1lc3NhZ2VzLmg7IHBhdGgg
PSBEZXJpdmVkU291cmNlcy9XZWJLaXQyL1dlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvck1lc3Nh
Z2VzLmg7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTU3RENFRDZCMjE0
MkVBRTIwMDE2Qjg0NyAvKiBXZWJBdXRoZW50aWNhdG9yQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViQXV0aGVudGlj
YXRvckNvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcDsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNTdEQ0VENkMyMTQyRUFGOTAw
MTZCODQ3IC8qIFdlYkF1dGhlbnRpY2F0b3JDb29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkF1dGhlbnRpY2F0
b3JDb29yZGluYXRvclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcDsgcGF0aCA9IERlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvV2ViQXV0aGVudGljYXRvckNvb3JkaW5hdG9yUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwpAQCAtNzA0MCw2ICs3
MDQyLDcgQEAKIAkJCQk1N0ZEMzE3QTIyQjM1MTRBMDA4RDBFOEIgLyogUmVkaXJlY3RTT0F1dGhv
cml6YXRpb25TZXNzaW9uLm1tICovLAogCQkJCTU3RkQzMTcyMjJCMzUxNDgwMDhEMEU4QiAvKiBT
T0F1dGhvcml6YXRpb25Db29yZGluYXRvci5oICovLAogCQkJCTU3RkQzMTc5MjJCMzUxNDkwMDhE
MEU4QiAvKiBTT0F1dGhvcml6YXRpb25Db29yZGluYXRvci5tbSAqLywKKwkJCQk1N0JCRUE2QzIy
QkMwQkZFMDAyNzM5OTUgLyogU09BdXRob3JpemF0aW9uTG9hZFBvbGljeS5oICovLAogCQkJCTU3
RkQzMTczMjJCMzUxNDgwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25OU1VSTEV4dHJhcy5oICov
LAogCQkJCTU3RkQzMTc2MjJCMzUxNDkwMDhEMEU4QiAvKiBTT0F1dGhvcml6YXRpb25OU1VSTEV4
dHJhcy5tbSAqLywKIAkJCQk1N0ZEMzE3QzIyQjM1MTRBMDA4RDBFOEIgLyogU09BdXRob3JpemF0
aW9uU2Vzc2lvbi5oICovLApAQCAtOTYzNiwxMSArOTYzOSwxMiBAQAogCQkJCTgzRjk2NDRFMUZB
MEY3NkUwMEM0Nzc1MCAvKiBTaGFyZWRTdHJpbmdIYXNoVGFibGVSZWFkT25seS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUQ2N0IzMzkyMTJFMUY2MTAwRkFBNzg2IC8qIFNoYXJlU2hlZXRDYWxsYmFj
a0lELmggaW4gSGVhZGVycyAqLywKIAkJCQk3QTQxRTlGQjIxRjgxREFEMDBCODhDREIgLyogU2hv
dWxkR3JhbmRmYXRoZXJTdGF0aXN0aWNzLmggaW4gSGVhZGVycyAqLywKLQkJCQk1NzZDQTlENzIy
Qjg2MjE4MDAzMDE0M0MgLyogU09BdXRob3JpemF0aW9uTlNVUkxFeHRyYXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk5NTIyNkQ2MjA3RDE4NDYwMEY3ODQyMCAvKiBTaW11bGF0ZWRJbnB1dERpc3Bh
dGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQUYwNkQ2MThCRDFBNDcwMDgxQ0VCMSAvKiBT
bWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkyREU2OTQz
RTE4QkQyQTY4MDA1QzE1RTUgLyogU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlck1lc3NhZ2Vz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1N0ZEMzE4MzIyQjM1MTYyMDA4RDBFOEIgLyogU09BdXRo
b3JpemF0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTU3QkJFQTZEMjJCQzBC
RkUwMDI3Mzk5NSAvKiBTT0F1dGhvcml6YXRpb25Mb2FkUG9saWN5LmggaW4gSGVhZGVycyAqLywK
KwkJCQk1NzZDQTlENzIyQjg2MjE4MDAzMDE0M0MgLyogU09BdXRob3JpemF0aW9uTlNVUkxFeHRy
YXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RkQzMTg1MjJCMzUxNjkwMDhEMEU4QiAvKiBTT0F1
dGhvcml6YXRpb25TZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjcyQjI4QjE0MDY5ODVE
MDA5NkE1RDAgLyogU3RhdGlzdGljc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNEJERUQz
MTZDOThFREQwMEU0RTI1RSAvKiBTdGF0aXN0aWNzUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNzA4ZTEx
ZDg2MGMwOWY4MmU4NzgyZWI1MjI5OWNlMDZhMTE3MTZmYS4uNjIxOTA3MzBjZGU2MTc3MGQ4NjY5
ZWRmM2JhY2Y0MWRhY2FhMDg5MCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE5LTA2LTIwICBKaWV3ZW4gVGFuICA8
amlld2VuX3RhbkBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGEgbmV3IFNQSSB0byBp
bmZvcm0gY2xpZW50cyBhYm91dCBBcHBTU08KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE5OTA4NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTAwMjgy
NDY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RTT0F1dGhvcml6YXRpb24ubW06Cisg
ICAgICAgICgtW1Rlc3RTT0F1dGhvcml6YXRpb25CYXNpY0RlbGVnYXRlIHdlYlZpZXc6ZGlkRmlu
aXNoTmF2aWdhdGlvbjpdKToKKyAgICAgICAgKC1bVGVzdFNPQXV0aG9yaXphdGlvbk5hdmlnYXRp
b25EZWxlZ2F0ZSBpbml0XSk6CisgICAgICAgICgtW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0
aW9uRGVsZWdhdGUgX3dlYlZpZXc6ZGVjaWRlUG9saWN5Rm9yU09BdXRob3JpemF0aW9uTG9hZFdp
dGhDdXJyZW50UG9saWN5OmZvckV4dGVuc2lvbjpjb21wbGV0aW9uSGFuZGxlcjpdKToKKyAgICAg
ICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE5LTA2LTIxICBKaWV3ZW4gVGFuICA8amll
d2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViUGFnZVByb3h5Ojpsb2FkRGF0YSBzaG91
bGQgYWNjZXB0IFNob3VsZE9wZW5FeHRlcm5hbFVSTHNQb2xpY3kKZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXphdGlvbi5tbSBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvVGVzdFNPQXV0aG9yaXphdGlv
bi5tbQppbmRleCA0MjE5N2U0ZWY0OWFjN2FiYjI5ZjM2ZDdiM2NiOTIwZWI3NzI2YmUzLi5lNzNk
MjBiM2I0ZTVhM2NjMWYzMGMzMzkwNjU2ZTlmODU2ZTRhM2U0IDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1Rlc3RTT0F1dGhvcml6YXRpb24ubW0KKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9UZXN0U09BdXRob3JpemF0
aW9uLm1tCkBAIC0xMjAsOSArMTIwLDI1IEBAIHN0YXRpYyBjb25zdCBjaGFyKiBzYW1sUmVzcG9u
c2UgPQogIjwvc2NyaXB0PiIKICI8L2h0bWw+IjsKIAorQGludGVyZmFjZSBUZXN0U09BdXRob3Jp
emF0aW9uQmFzaWNEZWxlZ2F0ZSA6IE5TT2JqZWN0IDxXS05hdmlnYXRpb25EZWxlZ2F0ZT4KK0Bl
bmQKKworQGltcGxlbWVudGF0aW9uIFRlc3RTT0F1dGhvcml6YXRpb25CYXNpY0RlbGVnYXRlCisK
Ky0gKHZvaWQpd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkaWRGaW5pc2hOYXZpZ2F0aW9u
OihXS05hdmlnYXRpb24gKiluYXZpZ2F0aW9uCit7CisgICAgRVhQRUNUX0ZBTFNFKG5hdmlnYXRp
b25Db21wbGV0ZWQpOworICAgIG5hdmlnYXRpb25Db21wbGV0ZWQgPSB0cnVlOworICAgIGZpbmFs
VVJMID0gbmF2aWdhdGlvbi5fcmVxdWVzdC5VUkwuYWJzb2x1dGVTdHJpbmc7Cit9CisKK0BlbmQK
KwogQGludGVyZmFjZSBUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIDogTlNP
YmplY3QgPFdLTmF2aWdhdGlvbkRlbGVnYXRlLCBXS1VJRGVsZWdhdGU+CiBAcHJvcGVydHkgYm9v
bCBpc0RlZmF1bHRQb2xpY3k7CiBAcHJvcGVydHkgYm9vbCBzaG91bGRPcGVuRXh0ZXJuYWxTY2hl
bWVzOworQHByb3BlcnR5IGJvb2wgYWxsb3dTT0F1dGhvcml6YXRpb25Mb2FkOworQHByb3BlcnR5
IGJvb2wgaXNBc3luY0V4ZWN1dGlvbjsKIC0gKGluc3RhbmNldHlwZSlpbml0OwogQGVuZAogCkBA
IC0xMzMsNiArMTQ5LDggQEAgLSAoaW5zdGFuY2V0eXBlKWluaXQKICAgICBpZiAoc2VsZiA9IFtz
dXBlciBpbml0XSkgewogICAgICAgICBzZWxmLmlzRGVmYXVsdFBvbGljeSA9IHRydWU7CiAgICAg
ICAgIHNlbGYuc2hvdWxkT3BlbkV4dGVybmFsU2NoZW1lcyA9IGZhbHNlOworICAgICAgICBzZWxm
LmFsbG93U09BdXRob3JpemF0aW9uTG9hZCA9IHRydWU7CisgICAgICAgIHNlbGYuaXNBc3luY0V4
ZWN1dGlvbiA9IGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KQEAgLTE2Myw2ICsx
ODEsMjcgQEAgLSAoV0tXZWJWaWV3ICopd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBjcmVh
dGVXZWJWaWV3V2l0aENvbmZpZ3VyYXRpb246KFdLV2UKICAgICByZXR1cm4gZ05ld1dpbmRvdy5n
ZXQoKTsKIH0KIAorLSAodm9pZClfd2ViVmlldzooV0tXZWJWaWV3ICopd2ViVmlldyBkZWNpZGVQ
b2xpY3lGb3JTT0F1dGhvcml6YXRpb25Mb2FkV2l0aEN1cnJlbnRQb2xpY3k6KF9XS1NPQXV0aG9y
aXphdGlvbkxvYWRQb2xpY3kpcG9saWN5IGZvckV4dGVuc2lvbjooTlNTdHJpbmcgKilleHRlbnNp
b24gY29tcGxldGlvbkhhbmRsZXI6KHZvaWQgKF4pKF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xp
Y3kgcG9saWN5KSljb21wbGV0aW9uSGFuZGxlcgoreworICAgIEVYUEVDVF9FUShwb2xpY3ksIF9X
S1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lBbGxvdyk7CisgICAgRVhQRUNUX1RSVUUoW2V4dGVu
c2lvbiBpc0VxdWFsOkAiIl0pOworICAgIGlmICghc2VsZi5pc0FzeW5jRXhlY3V0aW9uKSB7Cisg
ICAgICAgIGlmIChzZWxmLmFsbG93U09BdXRob3JpemF0aW9uTG9hZCkKKyAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHBvbGljeSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKF9XS1NPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lJZ25vcmUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBhbGxvd1NPQXV0aG9yaXphdGlvbkxvYWQgPSBz
ZWxmLmFsbG93U09BdXRob3JpemF0aW9uTG9hZDsKKyAgICBkaXNwYXRjaF9hc3luYyhkaXNwYXRj
aF9nZXRfbWFpbl9xdWV1ZSgpLCBeKCkgeworICAgICAgICBpZiAoYWxsb3dTT0F1dGhvcml6YXRp
b25Mb2FkKQorICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoX1dLU09BdXRob3JpemF0aW9u
TG9hZFBvbGljeUFsbG93KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoX1dLU09BdXRob3JpemF0aW9uTG9hZFBvbGljeUlnbm9yZSk7CisgICAgfSk7Cit9CisK
IEBlbmQKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTQxNiw4ICs0NTUsOCBAQCBURVNUKFNPQXV0
aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkMSkKICAgICBSZXRhaW5QdHI8
TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAi
c2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQ
SS5yZXNvdXJjZXMiXTsKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0g
ICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlv
bkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2Vi
Vmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1Bv
bGljeTo6QWxsb3cpOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9y
aXphdGlvbkJhc2ljRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2ViVmlldyBzZXROYXZp
Z2F0aW9uRGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwogCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVl
c3Q6W05TVVJMUmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CiAgICAgVXRp
bDo6cnVuKCZhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKQEAgLTQ0Myw4ICs0ODIsOCBAQCBURVNU
KFNPQXV0aG9yaXphdGlvblJlZGlyZWN0LCBJbnRlcmNlcHRpb25TdWNjZWVkMikKICAgICBJbnN0
YW5jZU1ldGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNz
KCksIEBzZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBC
b2R5OiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldp
dGhVUkwpKTsKIAogICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFs
bG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7Ci0gICAgYXV0
byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVn
YXRlIGFsbG9jXSBpbml0XSk7Ci0gICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3
ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeTo6
QWxsb3cpOworICAgIGF1dG8gZGVsZWdhdGUgPSBhZG9wdE5TKFtbVGVzdFNPQXV0aG9yaXphdGlv
bkJhc2ljRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBbd2ViVmlldyBzZXROYXZpZ2F0aW9u
RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwogCiAgICAgLy8gRm9yY2UgQXBwIExpbmtzIHdpdGgg
YSByZXF1ZXN0LlVSTCB0aGF0IGhhcyBhIGRpZmZlcmVudCBob3N0IHRoYW4gdGhlIGN1cnJlbnQg
b25lIChlbXB0eSBob3N0KSBhbmQgU2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeTo6U2hvdWxk
QWxsb3cuCiAgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0cHM6Ly93d3cuZXhhbXBs
ZS5jb20iKTsKQEAgLTk1Nyw2ICs5OTYsNzIgQEAgVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVj
dCwgSW50ZXJjZXB0aW9uQ29tcGxldGVUd2ljZSkKICAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRp
b246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdl
dCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CiB9CiAK
K1RFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lJ
Z25vcmUpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dp
enpsZXIoUEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9y
bUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3BvbnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElN
UD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKworICAgIFJldGFp
blB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3Vy
Y2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2Vi
S2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RX
S1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCld
KTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZp
Z2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRp
b25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBPcGVuRXh0ZXJuYWxTY2hl
bWVzUG9saWN5OjpBbGxvdyk7CisgICAgW2RlbGVnYXRlIHNldEFsbG93U09BdXRob3JpemF0aW9u
TG9hZDpmYWxzZV07CisKKyAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJl
cXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25D
b21wbGV0ZWQpOworCisgICAgRVhQRUNUX1dLX1NUUkVRKHRlc3RVUkwuZ2V0KCkuYWJzb2x1dGVT
dHJpbmcsIGZpbmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgU09B
dXRob3JpemF0aW9uTG9hZFBvbGljeUFsbG93QXN5bmMpCit7CisgICAgcmVzZXRTdGF0ZSgpOwor
ICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9u
Q2xhc3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25z
ZUNvZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6
YXRpb25XaXRoVVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFM
OjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVp
bnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1l
dGhvZFN3aXp6bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBz
ZWxlY3RvcihiZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5Oiks
IHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwp
KTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gdGVzdFVSTCA9IFtbTlNCdW5kbGUgbWFpbkJ1bmRs
ZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJl
Y3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOworCisgICAgYXV0byB3ZWJWaWV3ID0g
YWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgw
LCAwLCAzMjAsIDUwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1
dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1
cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpLCBP
cGVuRXh0ZXJuYWxTY2hlbWVzUG9saWN5OjpBbGxvdyk7CisKKyAgICBbd2ViVmlldyBsb2FkUmVx
dWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnRlc3RVUkwuZ2V0KCldXTsKKyAgICBV
dGlsOjpydW4oJmF1dGhvcml6YXRpb25QZXJmb3JtZWQpOworICAgIGNoZWNrQXV0aG9yaXphdGlv
bk9wdGlvbnMoZmFsc2UsICIiLCAwKTsKKworICAgIFJldGFpblB0cjxOU1VSTD4gcmVkaXJlY3RV
UkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlMiIgd2l0
aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEkucmVzb3VyY2Vz
Il07CisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tOU0hUVFBVUkxSZXNwb25zZSBhbGxv
Y10gaW5pdFdpdGhVUkw6dGVzdFVSTC5nZXQoKSBzdGF0dXNDb2RlOjMwMiBIVFRQVmVyc2lvbjpA
IkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6QHsgQCJMb2NhdGlvbiIgOiBbcmVkaXJlY3RVUkwgYWJz
b2x1dGVTdHJpbmddIH1dKTsKKyAgICBbZ0RlbGVnYXRlIGF1dGhvcml6YXRpb246Z0F1dGhvcml6
YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJlc3BvbnNlLmdldCgpIGh0dHBCb2R5
OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRdKS5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZu
YXZpZ2F0aW9uQ29tcGxldGVkKTsKKyNpZiBQTEFURk9STShJT1MpCisgICAgbmF2aWdhdGlvbkNv
bXBsZXRlZCA9IGZhbHNlOworICAgIFV0aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7Cisj
ZW5kaWYKKyAgICBFWFBFQ1RfV0tfU1RSRVEocmVkaXJlY3RVUkwuZ2V0KCkuYWJzb2x1dGVTdHJp
bmcsIGZpbmFsVVJMKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25SZWRpcmVjdCwgU09BdXRo
b3JpemF0aW9uTG9hZFBvbGljeUlnbm9yZUFzeW5jKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAg
ICBDbGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xh
c3MoKSwgQHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNv
ZGU6KSwgcmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRp
b25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNVUkw+IHRlc3RVUkwgPSBbW05TQnVuZGxl
IG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRt
bCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKKworICAgIGF1dG8g
d2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNH
UmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMo
W1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7Cisg
ICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0
ZS5nZXQoKSwgT3BlbkV4dGVybmFsU2NoZW1lc1BvbGljeTo6QWxsb3cpOworICAgIFtkZWxlZ2F0
ZSBzZXRBbGxvd1NPQXV0aG9yaXphdGlvbkxvYWQ6ZmFsc2VdOworICAgIFtkZWxlZ2F0ZSBzZXRJ
c0FzeW5jRXhlY3V0aW9uOnRydWVdOworCisgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDp0ZXN0VVJMLmdldCgpXV07CisgICAgVXRpbDo6cnVuKCZu
YXZpZ2F0aW9uQ29tcGxldGVkKTsKKworICAgIEVYUEVDVF9XS19TVFJFUSh0ZXN0VVJMLmdldCgp
LmFic29sdXRlU3RyaW5nLCBmaW5hbFVSTCk7Cit9CisKKwogLy8gRklYTUUoMTc1MjA0KTogRW5h
YmxlIHRoZSBpT1MgdGVzdHMgb25jZSB0aGUgYnVnIGlzIGZpeGVkLgogI2lmIFBMQVRGT1JNKE1B
QykKIFRFU1QoU09BdXRob3JpemF0aW9uUmVkaXJlY3QsIEludGVyY2VwdGlvblN1Y2NlZWRXaXRo
VUkpCkBAIC0xNjU0LDYgKzE3NTksOTUgQEAgVEVTVChTT0F1dGhvcml6YXRpb25Qb3BVcCwgQXV0
aG9yaXphdGlvbk9wdGlvbnMpCiAgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9ucyh0cnVlLCAi
aHR0cDovL3d3dy53ZWJraXQub3JnIiwgMSk7CiB9CiAKK1RFU1QoU09BdXRob3JpemF0aW9uUG9w
VXAsIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lJZ25vcmUpCit7CisgICAgcmVzZXRTdGF0ZSgp
OworICAgIENsYXNzTWV0aG9kU3dpenpsZXIgc3dpenpsZXIoUEFMOjpnZXRTT0F1dGhvcml6YXRp
b25DbGFzcygpLCBAc2VsZWN0b3IoY2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRoVVJMOnJlc3Bv
bnNlQ29kZTopLCByZWludGVycHJldF9jYXN0PElNUD4ob3ZlcnJpZGVDYW5QZXJmb3JtQXV0aG9y
aXphdGlvbldpdGhVUkwpKTsKKworICAgIGF1dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHA6
Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBhdXRvIHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKG9w
ZW5lclRlbXBsYXRlLCB0ZXN0VVJMLnN0cmluZygpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFk
b3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwg
MCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBkZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRo
b3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJl
U09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJWaWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7Cisg
ICAgW2RlbGVnYXRlIHNldEFsbG93U09BdXRob3JpemF0aW9uTG9hZDpmYWxzZV07CisKKyAgICBb
d2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNlVVJMOihOU1VSTCAqKVVSTChVUkwo
KSwgImh0dHA6Ly93d3cud2Via2l0Lm9yZyIpXTsKKyAgICBVdGlsOjpydW4oJm5hdmlnYXRpb25D
b21wbGV0ZWQpOworCisjaWYgUExBVEZPUk0oTUFDKQorICAgIFt3ZWJWaWV3IHNlbmRDbGlja3NB
dFBvaW50Ok5TTWFrZVBvaW50KDIwMCwgMjAwKSBudW1iZXJPZkNsaWNrczoxXTsKKyNlbGlmIFBM
QVRGT1JNKElPUykKKyAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6IEAiY2xpY2tNZSgp
IiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworI2VuZGlmCisgICAgVXRpbDo6cnVuKCZuZXdXaW5k
b3dDcmVhdGVkKTsKKyAgICBFWFBFQ1RfRkFMU0UoYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7Cit9
CisKK1RFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xpY3lB
bGxvd0FzeW5jKQoreworICAgIHJlc2V0U3RhdGUoKTsKKyAgICBDbGFzc01ldGhvZFN3aXp6bGVy
IHN3aXp6bGVyMShQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3RvcihjYW5Q
ZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0X2Nh
c3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworICAgIElu
c3RhbmNlTWV0aG9kU3dpenpsZXIgc3dpenpsZXIyKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xh
c3MoKSwgQHNlbGVjdG9yKHNldERlbGVnYXRlOiksIHJlaW50ZXJwcmV0X2Nhc3Q8SU1QPihvdmVy
cmlkZVNldERlbGVnYXRlKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjMo
UEFMOjpnZXRTT0F1dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3IoYmVnaW5BdXRob3JpemF0
aW9uV2l0aFVSTDpodHRwSGVhZGVyczpodHRwQm9keTopLCByZWludGVycHJldF9jYXN0PElNUD4o
b3ZlcnJpZGVCZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMKSk7CisKKyAgICBSZXRhaW5QdHI8TlNV
Ukw+IGJhc2VVUkwgPSBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2lt
cGxlMiIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJLaXRBUEku
cmVzb3VyY2VzIl07CisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0cDovL3d3dy5l
eGFtcGxlLmNvbSIpOworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwob3BlbmVyVGVt
cGxhdGUsIHRlc3RVUkwuc3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhb
W1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCA0MDAs
IDQwMCldKTsKKyAgICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRp
b25OYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhv
cml6YXRpb25XZWJWaWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBbZGVs
ZWdhdGUgc2V0SXNBc3luY0V4ZWN1dGlvbjp0cnVlXTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1M
U3RyaW5nOnRlc3RIdG1sIGJhc2VVUkw6YmFzZVVSTC5nZXQoKV07CisgICAgVXRpbDo6cnVuKCZu
YXZpZ2F0aW9uQ29tcGxldGVkKTsKKworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbd2ViVmlldyBz
ZW5kQ2xpY2tzQXRQb2ludDpOU01ha2VQb2ludCgyMDAsIDIwMCkgbnVtYmVyT2ZDbGlja3M6MV07
CisjZWxpZiBQTEFURk9STShJT1MpCisgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OiBA
ImNsaWNrTWUoKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyNlbmRpZgorICAgIFV0aWw6OnJ1
bigmYXV0aG9yaXphdGlvblBlcmZvcm1lZCk7CisgICAgY2hlY2tBdXRob3JpemF0aW9uT3B0aW9u
cyh0cnVlLCAiZmlsZTovLyIsIDEpOworCisgICAgYXV0byByZXNwb25zZSA9IGFkb3B0TlMoW1tO
U0hUVFBVUkxSZXNwb25zZSBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFVSTCBzdGF0dXNDb2RlOjIw
MCBIVFRQVmVyc2lvbjpAIkhUVFAvMS4xIiBoZWFkZXJGaWVsZHM6bmlsXSk7CisgICAgYXV0byBy
ZXNvbnNlSHRtbENTdHJpbmcgPSBnZW5lcmF0ZUh0bWwobmV3V2luZG93UmVzcG9uc2VUZW1wbGF0
ZSwgIndpbmRvdy5jbG9zZSgpOyIpLnV0ZjgoKTsgLy8gVGhlIHBvcCB1cCBjbG9zZXMgaXRzZWxm
LgorICAgIC8vIFRoZSBzZWNyZXQgV0tXZWJWaWV3IG5lZWRzIHRvIGJlIGRlc3Ryb3llZCByaWdo
dCB0aGUgd2F5LgorICAgIEBhdXRvcmVsZWFzZXBvb2wgeworICAgICAgICBbZ0RlbGVnYXRlIGF1
dGhvcml6YXRpb246Z0F1dGhvcml6YXRpb24gZGlkQ29tcGxldGVXaXRoSFRUUFJlc3BvbnNlOnJl
c3BvbnNlLmdldCgpIGh0dHBCb2R5OmFkb3B0TlMoW1tOU0RhdGEgYWxsb2NdIGluaXRXaXRoQnl0
ZXM6cmVzb25zZUh0bWxDU3RyaW5nLmRhdGEoKSBsZW5ndGg6cmVzb25zZUh0bWxDU3RyaW5nLmxl
bmd0aCgpXSkuZ2V0KCldOworICAgIH0KKyAgICBbd2ViVmlldyB3YWl0Rm9yTWVzc2FnZTpAIkhl
bGxvLiJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiV2luZG93Q2xvc2VkLiJdOwor
fQorCisKK1RFU1QoU09BdXRob3JpemF0aW9uUG9wVXAsIFNPQXV0aG9yaXphdGlvbkxvYWRQb2xp
Y3lJZ25vcmVBc3luYykKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RTd2l6
emxlciBzd2l6emxlcihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihj
YW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOworCisg
ICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIpOwor
ICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwob3BlbmVyVGVtcGxhdGUsIHRlc3RVUkwu
c3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcg
YWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAgICBh
dXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9uRGVs
ZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJWaWV3
KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBbZGVsZWdhdGUgc2V0QWxsb3dT
T0F1dGhvcml6YXRpb25Mb2FkOmZhbHNlXTsKKyAgICBbZGVsZWdhdGUgc2V0SXNBc3luY0V4ZWN1
dGlvbjp0cnVlXTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJhc2VV
Ukw6KE5TVVJMICopVVJMKFVSTCgpLCAiaHR0cDovL3d3dy53ZWJraXQub3JnIildOworICAgIFV0
aWw6OnJ1bigmbmF2aWdhdGlvbkNvbXBsZXRlZCk7CisKKyNpZiBQTEFURk9STShNQUMpCisgICAg
W3dlYlZpZXcgc2VuZENsaWNrc0F0UG9pbnQ6TlNNYWtlUG9pbnQoMjAwLCAyMDApIG51bWJlck9m
Q2xpY2tzOjFdOworI2VsaWYgUExBVEZPUk0oSU9TKQorICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2
YVNjcmlwdDogQCJjbGlja01lKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisjZW5kaWYKKyAg
ICBVdGlsOjpydW4oJm5ld1dpbmRvd0NyZWF0ZWQpOworICAgIEVYUEVDVF9GQUxTRShhdXRob3Jp
emF0aW9uUGVyZm9ybWVkKTsKK30KKwogVEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgTm9J
bnRlcmNlcHRpb25zKQogewogICAgIHJlc2V0U3RhdGUoKTsKQEAgLTE4NjEsNiArMjA1NSw3NSBA
QCBURVNUKFNPQXV0aG9yaXphdGlvblN1YkZyYW1lLCBBdXRob3JpemF0aW9uT3B0aW9ucykKICAg
ICBjaGVja0F1dGhvcml6YXRpb25PcHRpb25zKGZhbHNlLCAiaHR0cDovL3d3dy5hcHBsZS5jb20i
LCAyKTsKIH0KIAorVEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgU09BdXRob3JpemF0aW9u
TG9hZFBvbGljeUlnbm9yZSkKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RT
d2l6emxlciBzd2l6emxlcihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJw
cmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOwor
CisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIp
OworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwocGFyZW50VGVtcGxhdGUsIHRlc3RV
Ukwuc3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAg
ICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9u
RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJW
aWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBbZGVsZWdhdGUgc2V0QWxs
b3dTT0F1dGhvcml6YXRpb25Mb2FkOmZhbHNlXTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3Ry
aW5nOnRlc3RIdG1sIGJhc2VVUkw6KE5TVVJMICopVVJMKFVSTCgpLCAiaHR0cDovL3d3dy5hcHBs
ZS5jb20iKV07CisgICAgLy8gVHJ5IHRvIHdhaXQgdW50aWwgdGhlIGlmcmFtZSBsb2FkIGlzIGZp
bmlzaGVkLgorICAgIFV0aWw6OnNsZWVwKDAuNSk7CisgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0
IGludGVyY2VwdCB0aGUgaWZyYW1lLgorICAgIEVYUEVDVF9GQUxTRShhdXRob3JpemF0aW9uUGVy
Zm9ybWVkKTsKK30KKworVEVTVChTT0F1dGhvcml6YXRpb25TdWJGcmFtZSwgU09BdXRob3JpemF0
aW9uTG9hZFBvbGljeUFsbG93QXN5bmMpCit7CisgICAgcmVzZXRTdGF0ZSgpOworICAgIENsYXNz
TWV0aG9kU3dpenpsZXIgc3dpenpsZXIxKFBBTDo6Z2V0U09BdXRob3JpemF0aW9uQ2xhc3MoKSwg
QHNlbGVjdG9yKGNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTDpyZXNwb25zZUNvZGU6KSwg
cmVpbnRlcnByZXRfY2FzdDxJTVA+KG92ZXJyaWRlQ2FuUGVyZm9ybUF1dGhvcml6YXRpb25XaXRo
VVJMKSk7CisgICAgSW5zdGFuY2VNZXRob2RTd2l6emxlciBzd2l6emxlcjIoUEFMOjpnZXRTT0F1
dGhvcml6YXRpb25DbGFzcygpLCBAc2VsZWN0b3Ioc2V0RGVsZWdhdGU6KSwgcmVpbnRlcnByZXRf
Y2FzdDxJTVA+KG92ZXJyaWRlU2V0RGVsZWdhdGUpKTsKKyAgICBJbnN0YW5jZU1ldGhvZFN3aXp6
bGVyIHN3aXp6bGVyMyhQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rvcihi
ZWdpbkF1dGhvcml6YXRpb25XaXRoVVJMOmh0dHBIZWFkZXJzOmh0dHBCb2R5OiksIHJlaW50ZXJw
cmV0X2Nhc3Q8SU1QPihvdmVycmlkZUJlZ2luQXV0aG9yaXphdGlvbldpdGhVUkwpKTsKKyAgICBD
bGFzc01ldGhvZFN3aXp6bGVyIHN3aXp6bGVyNChbQUtBdXRob3JpemF0aW9uQ29udHJvbGxlciBj
bGFzc10sIEBzZWxlY3Rvcihpc1VSTEZyb21BcHBsZU93bmVkRG9tYWluOiksIHJlaW50ZXJwcmV0
X2Nhc3Q8SU1QPihvdmVycmlkZUlzVVJMRnJvbUFwcGxlT3duZWREb21haW4pKTsKKworICAgIGF1
dG8gdGVzdFVSTCA9IFVSTChVUkwoKSwgImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKTsKKyAgICBh
dXRvIHRlc3RIdG1sID0gZ2VuZXJhdGVIdG1sKHBhcmVudFRlbXBsYXRlLCB0ZXN0VVJMLnN0cmlu
ZygpKTsKKworICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJWaWV3IGFsbG9j
XSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgMzIwLCA1MDApXSk7CisgICAgYXV0byBk
ZWxlZ2F0ZSA9IGFkb3B0TlMoW1tUZXN0U09BdXRob3JpemF0aW9uTmF2aWdhdGlvbkRlbGVnYXRl
IGFsbG9jXSBpbml0XSk7CisgICAgY29uZmlndXJlU09BdXRob3JpemF0aW9uV2ViVmlldyh3ZWJW
aWV3LmdldCgpLCBkZWxlZ2F0ZS5nZXQoKSk7CisgICAgW2RlbGVnYXRlIHNldElzQXN5bmNFeGVj
dXRpb246dHJ1ZV07CisKKyAgICBbd2ViVmlldyBsb2FkSFRNTFN0cmluZzp0ZXN0SHRtbCBiYXNl
VVJMOm5pbF07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJodHRwOi8vd3d3LmV4YW1w
bGUuY29tIl07CisgICAgW3dlYlZpZXcgd2FpdEZvck1lc3NhZ2U6QCJTT0F1dGhvcml6YXRpb25E
aWRTdGFydCJdOworICAgIGNoZWNrQXV0aG9yaXphdGlvbk9wdGlvbnMoZmFsc2UsICJudWxsIiwg
Mik7CisKKyAgICBhdXRvIHJlc3BvbnNlID0gYWRvcHROUyhbW05TSFRUUFVSTFJlc3BvbnNlIGFs
bG9jXSBpbml0V2l0aFVSTDp0ZXN0VVJMIHN0YXR1c0NvZGU6MjAwIEhUVFBWZXJzaW9uOkAiSFRU
UC8xLjEiIGhlYWRlckZpZWxkczpuaWxdKTsKKyAgICBhdXRvIGlmcmFtZUh0bWxDU3RyaW5nID0g
Z2VuZXJhdGVIdG1sKGlmcmFtZVRlbXBsYXRlLCAiIikudXRmOCgpOworICAgIFtnRGVsZWdhdGUg
YXV0aG9yaXphdGlvbjpnQXV0aG9yaXphdGlvbiBkaWRDb21wbGV0ZVdpdGhIVFRQUmVzcG9uc2U6
cmVzcG9uc2UuZ2V0KCkgaHR0cEJvZHk6YWRvcHROUyhbW05TRGF0YSBhbGxvY10gaW5pdFdpdGhC
eXRlczppZnJhbWVIdG1sQ1N0cmluZy5kYXRhKCkgbGVuZ3RoOmlmcmFtZUh0bWxDU3RyaW5nLmxl
bmd0aCgpXSkuZ2V0KCldOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiaHR0cDovL3d3
dy5leGFtcGxlLmNvbSJdOworICAgIFt3ZWJWaWV3IHdhaXRGb3JNZXNzYWdlOkAiSGVsbG8uIl07
Cit9CisKK1RFU1QoU09BdXRob3JpemF0aW9uU3ViRnJhbWUsIFNPQXV0aG9yaXphdGlvbkxvYWRQ
b2xpY3lJZ25vcmVBc3luYykKK3sKKyAgICByZXNldFN0YXRlKCk7CisgICAgQ2xhc3NNZXRob2RT
d2l6emxlciBzd2l6emxlcihQQUw6OmdldFNPQXV0aG9yaXphdGlvbkNsYXNzKCksIEBzZWxlY3Rv
cihjYW5QZXJmb3JtQXV0aG9yaXphdGlvbldpdGhVUkw6cmVzcG9uc2VDb2RlOiksIHJlaW50ZXJw
cmV0X2Nhc3Q8SU1QPihvdmVycmlkZUNhblBlcmZvcm1BdXRob3JpemF0aW9uV2l0aFVSTCkpOwor
CisgICAgYXV0byB0ZXN0VVJMID0gVVJMKFVSTCgpLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIp
OworICAgIGF1dG8gdGVzdEh0bWwgPSBnZW5lcmF0ZUh0bWwocGFyZW50VGVtcGxhdGUsIHRlc3RV
Ukwuc3RyaW5nKCkpOworCisgICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZp
ZXcgYWxsb2NdIGluaXRXaXRoRnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCAzMjAsIDUwMCldKTsKKyAg
ICBhdXRvIGRlbGVnYXRlID0gYWRvcHROUyhbW1Rlc3RTT0F1dGhvcml6YXRpb25OYXZpZ2F0aW9u
RGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKKyAgICBjb25maWd1cmVTT0F1dGhvcml6YXRpb25XZWJW
aWV3KHdlYlZpZXcuZ2V0KCksIGRlbGVnYXRlLmdldCgpKTsKKyAgICBbZGVsZWdhdGUgc2V0QWxs
b3dTT0F1dGhvcml6YXRpb25Mb2FkOmZhbHNlXTsKKyAgICBbZGVsZWdhdGUgc2V0SXNBc3luY0V4
ZWN1dGlvbjp0cnVlXTsKKworICAgIFt3ZWJWaWV3IGxvYWRIVE1MU3RyaW5nOnRlc3RIdG1sIGJh
c2VVUkw6KE5TVVJMICopVVJMKFVSTCgpLCAiaHR0cDovL3d3dy5hcHBsZS5jb20iKV07CisgICAg
Ly8gVHJ5IHRvIHdhaXQgdW50aWwgdGhlIGlmcmFtZSBsb2FkIGlzIGZpbmlzaGVkLgorICAgIFV0
aWw6OnNsZWVwKDAuNSk7CisgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IGludGVyY2VwdCB0aGUg
aWZyYW1lLgorICAgIEVYUEVDVF9GQUxTRShhdXRob3JpemF0aW9uUGVyZm9ybWVkKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQogCiAjZW5kaWYK
</data>

          </attachment>
      

    </bug>

</bugzilla>