<?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>74595</bug_id>
          
          <creation_ts>2011-12-15 02:03:20 -0800</creation_ts>
          <short_desc>[GTK] Add WebKitWindowProperties to WebKit2 GTK+ API</short_desc>
          <delta_ts>2011-12-15 08:11:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>521755</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-15 02:03:20 -0800</bug_when>
    <thetext>Now that we have initial UI client implementation that adds create/ready-to-show/close signals, we need an object to represent the WindowFeatures that should be applied in WebKitWebView::ready-to-show. I&apos;ve used properties instead of features, because I find features a bit confusing, but I&apos;m not opposed to use Features if you guys think it&apos;s a better name or for consistency with wk1 API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521759</commentid>
    <comment_count>1</comment_count>
      <attachid>119400</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-15 02:13:40 -0800</bug_when>
    <thetext>Created attachment 119400
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521761</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-15 02:15:58 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521851</commentid>
    <comment_count>3</comment_count>
      <attachid>119400</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-15 06:06:41 -0800</bug_when>
    <thetext>Comment on attachment 119400
Patch

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

I like the rename to WindowProperties, it certainly caused some misunderstanding before, being called features. I love how good our API test coverage is becoming, WebKit2GTK+ will shine, you&apos;re doing a great job Carlos! =)

I was thinking about getWindowFrame. I remember at some point considering, in webkit1, whether we should report the actual window size or the knowledge WebWindowFeatures had of it, for some sites had terrible checks like &quot;while (size != desired_size) request_size_change(desired_size)&quot;, or something like that, but I don&apos;t think we did anything regarding that, and things seem to be working fine, so this one also looks fine to me.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWindowProperties.cpp:452
&gt; + * Get the geometry that the window should have on the screen when shown.

Nit: should be Gets, since we&apos;re talking about the function. Also, s/that//, I think.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWindowProperties.h:61
&gt; +webkit_window_properties_get_geometry            (WebKitWindowProperties *window_properties,
&gt; +                                                  GdkRectangle           *geometry);

Should we use cairo_rectangle_int_t here, rather than GdkRectangle? GdkRectangle is currently a typedef to the cairo type, and we seem to be gradually moving towards using the cairo types directly. I&apos;ll ask the GTK+ people and report back here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521859</commentid>
    <comment_count>4</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-12-15 06:19:18 -0800</bug_when>
    <thetext>&lt;ebassi&gt; kov: I strongly recommend using cairo types

So I say we should =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521863</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-15 06:24:16 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 119400 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119400&amp;action=review
&gt; 
&gt; I like the rename to WindowProperties, it certainly caused some misunderstanding before, being called features. I love how good our API test coverage is becoming, WebKit2GTK+ will shine, you&apos;re doing a great job Carlos! =)

Thanks! Unit tests are indeed quite useful to find bugs early.

&gt; I was thinking about getWindowFrame. I remember at some point considering, in webkit1, whether we should report the actual window size or the knowledge WebWindowFeatures had of it, for some sites had terrible checks like &quot;while (size != desired_size) request_size_change(desired_size)&quot;, or something like that, but I don&apos;t think we did anything regarding that, and things seem to be working fine, so this one also looks fine to me.

Well, the window features size is what you should use for the window, while getWindowFrame is the actual size of the window, it might be different. 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWindowProperties.cpp:452
&gt; &gt; + * Get the geometry that the window should have on the screen when shown.
&gt; 
&gt; Nit: should be Gets, since we&apos;re talking about the function. Also, s/that//, I think.

I used Get for consistency with WebKitSettings API docs that uses Get/Set everywhere, but I&apos;m not english expert.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWindowProperties.h:61
&gt; &gt; +webkit_window_properties_get_geometry            (WebKitWindowProperties *window_properties,
&gt; &gt; +                                                  GdkRectangle           *geometry);
&gt; 
&gt; Should we use cairo_rectangle_int_t here, rather than GdkRectangle? GdkRectangle is currently a typedef to the cairo type, and we seem to be gradually moving towards using the cairo types directly. I&apos;ll ask the GTK+ people and report back here.

I used GdkRecangle here because it&apos;s a boxed property and I need to use GDK_TYPE_RECTANGLE, I could use cairo_rectangle in public API but it might be confusing because API docs will say the property is a GdkRectangle</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521881</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-15 07:12:18 -0800</bug_when>
    <thetext>Committed r102935: &lt;http://trac.webkit.org/changeset/102935&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521898</commentid>
    <comment_count>7</comment_count>
      <attachid>119400</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-12-15 08:11:12 -0800</bug_when>
    <thetext>Comment on attachment 119400
Patch

Nice patch. Little nit: toolbar, menubar, locationbar and statusbar should probably be tool-bar, menu-bar location-bar and status-bar.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119400</attachid>
            <date>2011-12-15 02:13:40 -0800</date>
            <delta_ts>2011-12-15 08:11:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-window-properties.diff</filename>
            <type>text/plain</type>
            <size>58604</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3MGRiZGJiLi5kN2Q5N2Y5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODYg
QEAKKzIwMTEtMTItMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzIHRvIFdlYktpdDIg
R1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc0NTk1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVSUNsaWVudC5jcHA6CisgICAgICAgIChjcmVhdGVO
ZXdQYWdlKTogUGFzcyB0aGUgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSB3aW5kb3cKKyAgICAg
ICAgZmVhdHVyZXMgdG8gd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoKS4KKyAgICAgICAgKHRv
b2xiYXJzQXJlVmlzaWJsZSk6IFJldHVybgorICAgICAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVz
OnRvb2xiYXItdmlzaWJsZS4KKyAgICAgICAgKHNldFRvb2xiYXJzQXJlVmlzaWJsZSk6IFNldAor
ICAgICAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzOnRvb2xiYXItdmlzaWJsZS4KKyAgICAgICAg
KG1lbnVCYXJJc1Zpc2libGUpOiBSZXR1cm4gV2ViS2l0V2luZG93UHJvcGVydGllczptZW51LXZp
c2libGUuCisgICAgICAgIChzZXRNZW51QmFySXNWaXNpYmxlKTogU2V0IFdlYktpdFdpbmRvd1By
b3BlcnRpZXM6bWVudS12aXNpYmxlLgorICAgICAgICAoc3RhdHVzQmFySXNWaXNpYmxlKTogUmV0
dXJuCisgICAgICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXM6c3RhdHVzLXZpc2libGUuCisgICAg
ICAgIChzZXRTdGF0dXNCYXJJc1Zpc2libGUpOiBTZXQKKyAgICAgICAgV2ViS2l0V2luZG93UHJv
cGVydGllczpzdGF0dXMtdmlzaWJsZS4KKyAgICAgICAgKGlzUmVzaXphYmxlKTogUmV0dXJuIFdl
YktpdFdpbmRvd1Byb3BlcnRpZXM6cmVzaXphYmxlLgorICAgICAgICAoc2V0SXNSZXNpemFibGUp
OiBTZXQgV2ViS2l0V2luZG93UHJvcGVydGllczpyZXNpemFibGUuCisgICAgICAgIChnZXRXaW5k
b3dGcmFtZSk6IFJldHVybiBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzOmdlb21ldHJ5LgorICAgICAg
ICAoc2V0V2luZG93RnJhbWUpOiBTZXQgV2ViS2l0V2luZG93UHJvcGVydGllczpnZW9tZXRyeS4K
KyAgICAgICAgKHdlYmtpdFVJQ2xpZW50QXR0YWNoVUlDbGllbnRUb1BhZ2UpOiBJbml0aWFsaXpl
IHRoZSBVSSBjbGllbnQgZm9yCisgICAgICAgIHRoZSBnaXZlbiBwYWdlLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92
aWV3X2luaXQpOiBDcmVhdGUgYSBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzIG9iamVjdCBmb3IKKyAg
ICAgICAgdGhlIHZpZXcuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6Cisg
ICAgICAgICh3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3UGFnZSk6IFVwZGF0ZSB0aGUgV2ViS2l0V2lu
ZG93UHJvcGVydGllcworICAgICAgICBvYmplY3QgdXNpbmcgdGhlIHdpbmRvdyBmZWF0dXJlcyBk
aWN0aW9uYXJ5LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGll
cyk6IFJldHVybiB0aGUKKyAgICAgICAgV2ViS2l0V2luZG93UHJvcGVydGllcyBvYmplY3Qgb2Yg
dGhlIHZpZXcuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5jcHA6IEFkZGVk
LgorICAgICAgICAod2Via2l0V2luZG93UHJvcGVydGllc0ZpbmFsaXplKToKKyAgICAgICAgKHdl
YmtpdFdpbmRvd1Byb3BlcnRpZXNHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRXaW5kb3dQ
cm9wZXJ0aWVzU2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVz
X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2luaXQpOgor
ICAgICAgICAod2Via2l0V2luZG93UHJvcGVydGllc0NyZWF0ZSk6IENyZWF0ZSBhIG5ldworICAg
ICAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzIG9iamVjdC4KKyAgICAgICAgKHdlYmtpdFdpbmRv
d1Byb3BlcnRpZXNTZXRHZW9tZXRyeSk6CisgICAgICAgICh3ZWJraXRXaW5kb3dQcm9wZXJ0aWVz
U2V0VG9vbGJhclZpc2libGUpOgorICAgICAgICAod2Via2l0V2luZG93UHJvcGVydGllc1NldE1l
bnViYXJWaXNpYmxlKToKKyAgICAgICAgKHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRTdGF0dXNi
YXJWaXNpYmxlKToKKyAgICAgICAgKHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRMb2NhdGlvbmJh
clZpc2libGUpOgorICAgICAgICAod2Via2l0V2luZG93UHJvcGVydGllc1NldFNjcm9sbGJhcnNW
aXNpYmxlKToKKyAgICAgICAgKHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRSZXNpemFibGUpOgor
ICAgICAgICAod2Via2l0V2luZG93UHJvcGVydGllc1NldEZ1bGxzY3JlZW4pOgorICAgICAgICAo
d2Via2l0V2luZG93UHJvcGVydGllc1VwZGF0ZUZyb21XS1dpbmRvd0ZlYXR1cmVzKTogUGFyc2Ug
dGhlCisgICAgICAgIHdpbmRvdyBmZWF0dXJlcyBkaWN0aW9uYXJ5IGFuZCB1cGRhdGUgdGhlIFdl
YktpdFdpbmRvd1Byb3BlcnRpZXMKKyAgICAgICAgb2JqZWN0IGFjY29yZGluZ2x5LgorICAgICAg
ICAod2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9nZW9tZXRyeSk6CisgICAgICAgICh3ZWJr
aXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Rvb2xiYXJfdmlzaWJsZSk6CisgICAgICAgICh3ZWJr
aXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxlKToKKyAgICAgICAgKHdl
YmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfc2Nyb2xsYmFyc192aXNpYmxlKToKKyAgICAgICAg
KHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbWVudWJhcl92aXNpYmxlKToKKyAgICAgICAg
KHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbG9jYXRpb25iYXJfdmlzaWJsZSk6CisgICAg
ICAgICh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6YWJsZSk6CisgICAgICAgICh3
ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2Z1bGxzY3JlZW4pOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaDogQWRkZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZh
dGUuaC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5z
Z21sOiBBZGQgbmV3IHNlY3Rpb24gZm9yCisgICAgICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dDogQWRkIG5ldyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay50eXBlczogQWRkCisgICAgICAgIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRf
dHlwZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmll
dy5jcHA6CisgICAgICAgIChXaW5kb3dQcm9wZXJ0aWVzOjp3aW5kb3dQcm9wZXJ0aWVzTm90aWZ5
Q2FsbGJhY2spOgorICAgICAgICAoV2luZG93UHJvcGVydGllczo6dmlld1JlYWR5VG9TaG93KToK
KyAgICAgICAgKFdpbmRvd1Byb3BlcnRpZXM6OnZpZXdDcmVhdGUpOgorICAgICAgICAoV2luZG93
UHJvcGVydGllczo6c2V0RXhwZWN0ZWRXaW5kb3dQcm9wZXJ0aWVzKToKKyAgICAgICAgKHRlc3RX
ZWJWaWV3V2luZG93UHJvcGVydGllcyk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogSW5jbHVkZSBXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzLmguCisgICAgICAgICogVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViVUlDbGllbnQ6OmNyZWF0ZU5ld1BhZ2UpOiBBZGQgYWxzbyAibG9jYXRpb25CYXJW
aXNpYmxlIgorICAgICAgICB0byB0aGUgd2luZG93IGZlYXR1cmVzIGRpY3Rpb25hcnkuCisKIDIw
MTEtMTItMTQgIEppbmcgWmhhbyAgPGppbmd6aGFvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBP
cGVuaW5nIHR3byBwb3B1cCBtZW51cyBieSBkaXNwYXRjaEV2ZW50KCkgbWFrZXMgcHJvYmxlbXMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IGY2NmNmZGQuLmI3ZDgyNTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmFtCkBAIC05MCw2ICs5MCw3IEBAIHdlYmtpdDJndGtfaGVhZGVycyA9IFwKIAkkKFdlYktp
dDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlc3BvbnNlLmggXAogCSQoV2ViS2l0Mikv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaAogCiB3ZWJraXQyX2J1aWx0X3NvdXJjZXMgKz0gXApAQCAtNTQ3LDYg
KzU0OCw5IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdF
QktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBcCisJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5jcHAgXAorCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaCBcCisJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllc1By
aXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIFwK
IAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VQcm94eS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BdXRoZW50aWNh
dGlvbi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVByb3h5LmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VUlDbGllbnQuY3BwCmluZGV4IDc0ZDhjNjMu
LmMxY2Y5MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFVJQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRVSUNsaWVudC5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJXZWJLaXRVSUNs
aWVudC5oIgogCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5o
IgogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CiAKQEAgLTI4LDkgKzI5LDkgQEAgdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKIAogR19ERUZJTkVfVFlQRShXZWJLaXRVSUNsaWVudCwgd2Via2l0
X3VpX2NsaWVudCwgR19UWVBFX09CSkVDVCkKIAotc3RhdGljIFdLUGFnZVJlZiBjcmVhdGVOZXdQ
YWdlKFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlcXVlc3RSZWYsIFdLRGljdGlvbmFyeVJlZiwgV0tF
dmVudE1vZGlmaWVycywgV0tFdmVudE1vdXNlQnV0dG9uLCBjb25zdCB2b2lkKikKK3N0YXRpYyBX
S1BhZ2VSZWYgY3JlYXRlTmV3UGFnZShXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZXF1ZXN0UmVmLCBX
S0RpY3Rpb25hcnlSZWYgd2tXaW5kb3dGZWF0dXJlcywgV0tFdmVudE1vZGlmaWVycywgV0tFdmVu
dE1vdXNlQnV0dG9uLCBjb25zdCB2b2lkKikKIHsKLSAgICByZXR1cm4gd2Via2l0V2ViVmlld0Ny
ZWF0ZU5ld1BhZ2UoV0VCS0lUX1dFQl9WSUVXKHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgpKSk7
CisgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdlKFdFQktJVF9XRUJfVklFVyh0
b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSksIHdrV2luZG93RmVhdHVyZXMpOwogfQogCiBzdGF0
aWMgdm9pZCBzaG93UGFnZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCopCkBAIC01OSw2ICs2
MCw3MiBAQCBzdGF0aWMgV0tTdHJpbmdSZWYgcnVuSmF2YVNjcmlwdFByb21wdChXS1BhZ2VSZWYg
cGFnZSwgV0tTdHJpbmdSZWYgbWVzc2FnZSwgV0tTdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0b0ltcGwoZGVmYXVsdFZhbHVlKS0+c3RyaW5nKCkudXRmOCgp
KTsKIH0KIAorc3RhdGljIGJvb2wgdG9vbGJhcnNBcmVWaXNpYmxlKFdLUGFnZVJlZiBwYWdlLCBj
b25zdCB2b2lkKikKK3sKKyAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0
aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhXRUJLSVRfV0VCX1ZJ
RVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpKTsKKyAgICByZXR1cm4gd2Via2l0X3dpbmRv
d19wcm9wZXJ0aWVzX2dldF90b29sYmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcyk7Cit9CisK
K3N0YXRpYyB2b2lkIHNldFRvb2xiYXJzQXJlVmlzaWJsZShXS1BhZ2VSZWYgcGFnZSwgYm9vbCB0
b29sYmFyc1Zpc2libGUsIGNvbnN0IHZvaWQqKQoreworICAgIFdlYktpdFdpbmRvd1Byb3BlcnRp
ZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0
aWVzKFdFQktJVF9XRUJfVklFVyh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSkpOworICAgIHdl
YmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRUb29sYmFyVmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCB0
b29sYmFyc1Zpc2libGUpOworfQorCitzdGF0aWMgYm9vbCBtZW51QmFySXNWaXNpYmxlKFdLUGFn
ZVJlZiBwYWdlLCBjb25zdCB2b2lkKikKK3sKKyAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3
aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhX
RUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpKTsKKyAgICByZXR1cm4g
d2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9tZW51YmFyX3Zpc2libGUod2luZG93UHJvcGVy
dGllcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldE1lbnVCYXJJc1Zpc2libGUoV0tQYWdlUmVmIHBh
Z2UsIGJvb2wgbWVudUJhclZpc2libGUsIGNvbnN0IHZvaWQqKQoreworICAgIFdlYktpdFdpbmRv
d1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRv
d19wcm9wZXJ0aWVzKFdFQktJVF9XRUJfVklFVyh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSkp
OworICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRNZW51YmFyVmlzaWJsZSh3aW5kb3dQcm9w
ZXJ0aWVzLCBtZW51QmFyVmlzaWJsZSk7Cit9CisKK3N0YXRpYyBib29sIHN0YXR1c0JhcklzVmlz
aWJsZShXS1BhZ2VSZWYgcGFnZSwgY29uc3Qgdm9pZCopCit7CisgICAgV2ViS2l0V2luZG93UHJv
cGVydGllcyogd2luZG93UHJvcGVydGllcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3By
b3BlcnRpZXMoV0VCS0lUX1dFQl9WSUVXKHRvSW1wbChwYWdlKS0+dmlld1dpZGdldCgpKSk7Cisg
ICAgcmV0dXJuIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfc3RhdHVzYmFyX3Zpc2libGUo
d2luZG93UHJvcGVydGllcyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldFN0YXR1c0JhcklzVmlzaWJs
ZShXS1BhZ2VSZWYgcGFnZSwgYm9vbCBzdGF0dXNCYXJWaXNpYmxlLCBjb25zdCB2b2lkKikKK3sK
KyAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dl
Yl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyhXRUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2Up
LT52aWV3V2lkZ2V0KCkpKTsKKyAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0U3RhdHVzYmFy
VmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzLCBzdGF0dXNCYXJWaXNpYmxlKTsKK30KKworc3RhdGlj
IGJvb2wgaXNSZXNpemFibGUoV0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIFdl
YktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9XRUJfVklFVyh0b0ltcGwocGFnZSktPnZpZXdX
aWRnZXQoKSkpOworICAgIHJldHVybiB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6
YWJsZSh3aW5kb3dQcm9wZXJ0aWVzKTsKK30KKworc3RhdGljIHZvaWQgc2V0SXNSZXNpemFibGUo
V0tQYWdlUmVmIHBhZ2UsIGJvb2wgcmVzaXphYmxlLCBjb25zdCB2b2lkKikKK3sKKyAgICBXZWJL
aXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dl
dF93aW5kb3dfcHJvcGVydGllcyhXRUJLSVRfV0VCX1ZJRVcodG9JbXBsKHBhZ2UpLT52aWV3V2lk
Z2V0KCkpKTsKKyAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0UmVzaXphYmxlKHdpbmRvd1By
b3BlcnRpZXMsIHJlc2l6YWJsZSk7Cit9CisKK3N0YXRpYyBXS1JlY3QgZ2V0V2luZG93RnJhbWUo
V0tQYWdlUmVmIHBhZ2UsIGNvbnN0IHZvaWQqKQoreworICAgIEdka1JlY3RhbmdsZSBnZW9tZXRy
eSA9IHsgMCwgMCwgMCwgMCB9OworICAgIEd0a1dpZGdldCogd2luZG93ID0gZ3RrX3dpZGdldF9n
ZXRfdG9wbGV2ZWwodG9JbXBsKHBhZ2UpLT52aWV3V2lkZ2V0KCkpOworICAgIGlmIChndGtfd2lk
Z2V0X2lzX3RvcGxldmVsKHdpbmRvdykpIHsKKyAgICAgICAgZ3RrX3dpbmRvd19nZXRfcG9zaXRp
b24oR1RLX1dJTkRPVyh3aW5kb3cpLCAmZ2VvbWV0cnkueCwgJmdlb21ldHJ5LnkpOworICAgICAg
ICBndGtfd2luZG93X2dldF9zaXplKEdUS19XSU5ET1cod2luZG93KSwgJmdlb21ldHJ5LndpZHRo
LCAmZ2VvbWV0cnkuaGVpZ2h0KTsKKyAgICB9CisgICAgcmV0dXJuIFdLUmVjdE1ha2UoZ2VvbWV0
cnkueCwgZ2VvbWV0cnkueSwgZ2VvbWV0cnkud2lkdGgsIGdlb21ldHJ5LmhlaWdodCk7Cit9CisK
K3N0YXRpYyB2b2lkIHNldFdpbmRvd0ZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS1JlY3QgZnJhbWUs
IGNvbnN0IHZvaWQqKQoreworICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3Bl
cnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKFdFQktJVF9XRUJf
VklFVyh0b0ltcGwocGFnZSktPnZpZXdXaWRnZXQoKSkpOworICAgIEdka1JlY3RhbmdsZSBnZW9t
ZXRyeSA9IHsgZnJhbWUub3JpZ2luLngsIGZyYW1lLm9yaWdpbi55LCBmcmFtZS5zaXplLndpZHRo
LCBmcmFtZS5zaXplLmhlaWdodCB9OworICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRHZW9t
ZXRyeSh3aW5kb3dQcm9wZXJ0aWVzLCAmZ2VvbWV0cnkpOworfQorCiB2b2lkIHdlYmtpdFVJQ2xp
ZW50QXR0YWNoVUlDbGllbnRUb1BhZ2UoV2ViS2l0VUlDbGllbnQqIHVpQ2xpZW50LCBXS1BhZ2VS
ZWYgd2tQYWdlKQogewogICAgIFdLUGFnZVVJQ2xpZW50IHdrVUlDbGllbnQgPSB7CkBAIC03OCwx
NiArMTQ1LDE2IEBAIHZvaWQgd2Via2l0VUlDbGllbnRBdHRhY2hVSUNsaWVudFRvUGFnZShXZWJL
aXRVSUNsaWVudCogdWlDbGllbnQsIFdLUGFnZVJlZiB3a1BhCiAgICAgICAgIDAsIC8vIG1pc3Np
bmdQbHVnaW5CdXR0b25DbGlja2VkCiAgICAgICAgIDAsIC8vIGRpZE5vdEhhbmRsZUtleUV2ZW50
CiAgICAgICAgIDAsIC8vIGRpZE5vdEhhbmRsZVdoZWVsRXZlbnQKLSAgICAgICAgMCwgLy8gdG9v
bGJhcnNBcmVWaXNpYmxlCi0gICAgICAgIDAsIC8vIHNldFRvb2xiYXJzQXJlVmlzaWJsZQotICAg
ICAgICAwLCAvLyBtZW51QmFySXNWaXNpYmxlCi0gICAgICAgIDAsIC8vIHNldE1lbnVCYXJJc1Zp
c2libGUKLSAgICAgICAgMCwgLy8gc3RhdHVzQmFySXNWaXNpYmxlCi0gICAgICAgIDAsIC8vIHNl
dFN0YXR1c0JhcklzVmlzaWJsZQotICAgICAgICAwLCAvLyBpc1Jlc2l6YWJsZQotICAgICAgICAw
LCAvLyBzZXRJc1Jlc2l6YWJsZQotICAgICAgICAwLCAvLyBnZXRXaW5kb3dGcmFtZQotICAgICAg
ICAwLCAvLyBzZXRXaW5kb3dGcmFtZQorICAgICAgICB0b29sYmFyc0FyZVZpc2libGUsCisgICAg
ICAgIHNldFRvb2xiYXJzQXJlVmlzaWJsZSwKKyAgICAgICAgbWVudUJhcklzVmlzaWJsZSwKKyAg
ICAgICAgc2V0TWVudUJhcklzVmlzaWJsZSwKKyAgICAgICAgc3RhdHVzQmFySXNWaXNpYmxlLAor
ICAgICAgICBzZXRTdGF0dXNCYXJJc1Zpc2libGUsCisgICAgICAgIGlzUmVzaXphYmxlLAorICAg
ICAgICBzZXRJc1Jlc2l6YWJsZSwKKyAgICAgICAgZ2V0V2luZG93RnJhbWUsCisgICAgICAgIHNl
dFdpbmRvd0ZyYW1lLAogICAgICAgICAwLCAvLyBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwK
ICAgICAgICAgMCwgLy8gZGlkRHJhdwogICAgICAgICAwLCAvLyBwYWdlRGlkU2Nyb2xsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmlu
ZGV4IDdjMGE2N2MuLjY5MTM4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
V2ViS2l0V2ViTG9hZGVyQ2xpZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9EcmFn
SWNvbi5oPgpAQCAtNzUsNiArNzYsNyBAQCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdQcml2YXRlIHsK
ICAgICBHUmVmUHRyPFdlYktpdFVJQ2xpZW50PiB1aUNsaWVudDsKICAgICBHUmVmUHRyPFdlYktp
dEJhY2tGb3J3YXJkTGlzdD4gYmFja0ZvcndhcmRMaXN0OwogICAgIEdSZWZQdHI8V2ViS2l0U2V0
dGluZ3M+IHNldHRpbmdzOworICAgIEdSZWZQdHI8V2ViS2l0V2luZG93UHJvcGVydGllcz4gd2lu
ZG93UHJvcGVydGllczsKIH07CiAKIHN0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9
IHsgMCwgfTsKQEAgLTIwNiw2ICsyMDgsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
aW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBw
cml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHdlYlZpZXcsIFdFQktJVF9UWVBFX1dF
Ql9WSUVXLCBXZWJLaXRXZWJWaWV3UHJpdmF0ZSk7CiAgICAgd2ViVmlldy0+cHJpdiA9IHByaXY7
CiAgICAgbmV3IChwcml2KSBXZWJLaXRXZWJWaWV3UHJpdmF0ZSgpOworCisgICAgd2ViVmlldy0+
cHJpdi0+d2luZG93UHJvcGVydGllcyA9IGFkb3B0R1JlZih3ZWJraXRXaW5kb3dQcm9wZXJ0aWVz
Q3JlYXRlKCkpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0FjY3VtdWxhdG9y
T2JqZWN0SGFuZGxlZChHU2lnbmFsSW52b2NhdGlvbkhpbnQqLCBHVmFsdWUqIHJldHVyblZhbHVl
LCBjb25zdCBHVmFsdWUqIGhhbmRsZXJSZXR1cm4sIGdwb2ludGVyKQpAQCAtMzIzLDcgKzMyNyw4
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdD
bGFzcyogd2ViVmlld0NsYXNzKQogICAgICAqIHdoZW4gaXQgc2hvdWxkIGJlIGRpc3BsYXllZCB0
byB0aGUgdXNlci4gV2hlbiB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkCiAgICAgICogYWxsIHRoZSBp
bmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIHdpbmRvdyBzaG91bGQgbG9vaywgaW5jbHVkaW5nCiAg
ICAgICogc2l6ZSwgcG9zaXRpb24sIHdoZXRoZXIgdGhlIGxvY2F0aW9uLCBzdGF0dXMgYW5kIHNj
cm9sbGJhcnMKLSAgICAgKiBzaG91bGQgYmUgZGlzcGxheWVkLCBpcyBhbHJlYWR5IHNldC4KKyAg
ICAgKiBzaG91bGQgYmUgZGlzcGxheWVkLCBpcyBhbHJlYWR5IHNldCBvbiB0aGUgI1dlYktpdFdp
bmRvd1Byb3BlcnRpZXMKKyAgICAgKiBvZiBAd2ViX3ZpZXcuIFNlZSBhbHNvIHdlYmtpdF93ZWJf
dmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMoKS4KICAgICAgKi8KICAgICBzaWduYWxzW1JFQURZ
X1RPX1NIT1ddID0KICAgICAgICAgZ19zaWduYWxfbmV3KCJyZWFkeS10by1zaG93IiwKQEAgLTQ1
OCwxMyArNDYzLDE1IEBAIHZvaWQgd2Via2l0V2ViVmlld1VwZGF0ZVVSSShXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh3ZWJWaWV3KSwgInVyaSIp
OwogfQogCi1XS1BhZ2VSZWYgd2Via2l0V2ViVmlld0NyZWF0ZU5ld1BhZ2UoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKK1dLUGFnZVJlZiB3ZWJraXRXZWJWaWV3Q3JlYXRlTmV3UGFnZShXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBXS0RpY3Rpb25hcnlSZWYgd2tXaW5kb3dGZWF0dXJlcykKIHsKICAg
ICBXZWJLaXRXZWJWaWV3KiBuZXdXZWJWaWV3OwogICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywg
c2lnbmFsc1tDUkVBVEVdLCAwLCAmbmV3V2ViVmlldyk7CiAgICAgaWYgKCFuZXdXZWJWaWV3KQog
ICAgICAgICByZXR1cm4gMDsKIAorICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNVcGRhdGVGcm9t
V0tXaW5kb3dGZWF0dXJlcyhuZXdXZWJWaWV3LT5wcml2LT53aW5kb3dQcm9wZXJ0aWVzLmdldCgp
LCB3a1dpbmRvd0ZlYXR1cmVzKTsKKwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXS1BhZ2VSZWY+
KFdLUmV0YWluKHRvQVBJKHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdf
QkFTRShuZXdXZWJWaWV3KSkpKSk7CiB9CiAKQEAgLTEwMjUsMyArMTAzMiwxOSBAQCBXZWJLaXRT
ZXR0aW5ncyogd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogCiAgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPnNldHRpbmdzLmdldCgpOwogfQorCisv
KioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXM6CisgKiBAd2ViX3Zp
ZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBHZXQgdGhlICNXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzIG9iamVjdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzCisgKiB0aGF0IHRoZSB3aW5kb3cg
Y29udGFpbmluZyBAd2ViX3ZpZXcgc2hvdWxkIGhhdmUuCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIG5vbmUpOiB0aGUgI1dlYktpdFdpbmRvd1Byb3BlcnRpZXMgb2YgQHdlYl92aWV3CisgKi8K
K1dlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3Bl
cnRpZXMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOworCisgICAgcmV0dXJuIHdlYlZpZXct
PnByaXYtPndpbmRvd1Byb3BlcnRpZXMuZ2V0KCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggZWJmY2ZjNy4uNDdlOGQ0MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFdlYlZpZXdCYXNlLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9w
ZXJ0aWVzLmg+CiAKIEdfQkVHSU5fREVDTFMKIApAQCAtMTczLDYgKzE3NCw5IEBAIHdlYmtpdF93
ZWJfdmlld19zZXRfc2V0dGluZ3MgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICp3ZWJfdmllCiBXRUJLSVRfQVBJIFdlYktpdFNldHRpbmdzICoKIHdlYmtpdF93ZWJf
dmlld19nZXRfc2V0dGluZ3MgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICp3ZWJfdmlldyk7CiAKK1dFQktJVF9BUEkgV2ViS2l0V2luZG93UHJvcGVydGllcyAqCit3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzICAgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgICAgICAqd2ViX3ZpZXcpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJp
dmF0ZS5oCmluZGV4IGU4MTA3NjEuLjhmYzgzOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaApAQCAtMjgsMTQg
KzI4LDEzIEBACiAjZGVmaW5lIFdlYktpdFdlYlZpZXdQcml2YXRlX2gKIAogI2luY2x1ZGUgIldl
YktpdFdlYlZpZXcuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8
V2ViS2l0Mi9XZWJLaXQyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiB2b2lk
IHdlYmtpdFdlYlZpZXdTZXRFc3RpbWF0ZWRMb2FkUHJvZ3Jlc3MoV2ViS2l0V2ViVmlldyosIGRv
dWJsZSBlc3RpbWF0ZWRMb2FkUHJvZ3Jlc3MpOwogdm9pZCB3ZWJraXRXZWJWaWV3U2V0VGl0bGUo
V2ViS2l0V2ViVmlldyosIGNvbnN0IENTdHJpbmcmKTsKIHZvaWQgd2Via2l0V2ViVmlld1VwZGF0
ZVVSSShXZWJLaXRXZWJWaWV3Kik7Ci1XS1BhZ2VSZWYgd2Via2l0V2ViVmlld0NyZWF0ZU5ld1Bh
Z2UoV2ViS2l0V2ViVmlldyopOworV0tQYWdlUmVmIHdlYmtpdFdlYlZpZXdDcmVhdGVOZXdQYWdl
KFdlYktpdFdlYlZpZXcqLCBXS0RpY3Rpb25hcnlSZWYgd2tXaW5kb3dGZWF0dXJlcyk7CiB2b2lk
IHdlYmtpdFdlYlZpZXdSZWFkeVRvU2hvd1BhZ2UoV2ViS2l0V2ViVmlldyopOwogdm9pZCB3ZWJr
aXRXZWJWaWV3Q2xvc2VQYWdlKFdlYktpdFdlYlZpZXcqKTsKIHZvaWQgd2Via2l0V2ViVmlld1J1
bkphdmFTY3JpcHRBbGVydChXZWJLaXRXZWJWaWV3KiwgY29uc3QgQ1N0cmluZyYgbWVzc2FnZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5k
b3dQcm9wZXJ0aWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdpbmRvd1Byb3BlcnRpZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjFkNzRhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmNwcApAQCAtMCwwICsxLDU2NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllcy5oIgorCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50UmVjdC5oPgorI2luY2x1
ZGUgPFdlYktpdDIvV0tEaWN0aW9uYXJ5Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS051bWJlci5o
PgorI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dL
U3RyaW5nLmg+CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKworLyoqCisgKiBTRUNUSU9O
OiBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFdpbmRvdyBw
cm9wZXJ0aWVzIG9mIGEgI1dlYktpdFdlYlZpZXcKKyAqIEB0aXRsZTogV2ViS2l0V2luZG93UHJv
cGVydGllcworICogQHNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldzo6cmVhZHktdG8tc2hvdworICoK
KyAqIFRoZSBjb250ZW50IG9mIGEgI1dlYktpdFdlYlZpZXcgY2FuIHJlcXVlc3QgdG8gY2hhbmdl
IGNlcnRhaW4KKyAqIHByb3BlcnRpZXMgb2YgdGhlIHdpbmRvdyBjb250YWluaW5nIHRoZSB2aWV3
LiBUaGlzIGNhbiBpbmNsdWRlIHRoZSB4LCB5IHBvc2l0aW9uCisgKiBvZiB0aGUgd2luZG93LCB0
aGUgd2lkdGggYW5kIGhlaWdodCBidXQgYWxzbyBpZiBhIHRvb2xiYXIsCisgKiBzY3JvbGxiYXIs
IHN0YXR1c2JhciwgbG9jYXRpb25iYXIgc2hvdWxkIGJlIHZpc2libGUgdG8gdGhlIHVzZXIsCisg
KiBhbmQgdGhlIHJlcXVlc3QgdG8gc2hvdyB0aGUgI1dlYktpdFdlYlZpZXcgZnVsbHNjcmVlbi4K
KyAqCisgKiBUaGUgI1dlYktpdFdlYlZpZXc6cmVhZHktdG8tc2hvdyBzaWduYWwgaGFuZGxlciBp
cyB0aGUgcHJvcGVyIHBsYWNlCisgKiB0byBhcHBseSB0aGUgaW5pdGlhbCB3aW5kb3cgcHJvcGVy
dGllcy4gVGhlbiB5b3UgY2FuIG1vbml0b3IgdGhlCisgKiAjV2ViS2l0V2luZG93UHJvcGVydGll
cyBieSBjb25uZWN0aW5nIHRvIDo6bm90aWZ5IHNpZ25hbC4KKyAqCisgKiA8aW5mb3JtYWxleGFt
cGxlPjxwcm9ncmFtbGlzdGluZz4KKyAqIHN0YXRpYyB2b2lkIHJlYWR5X3RvX3Nob3dfY2IgKFdl
YktpdFdlYlZpZXcgKndlYl92aWV3LCBncG9pbnRlciB1c2VyX2RhdGEpCisgKiB7CisgKiAgICAg
R3RrV2lkZ2V0ICp3aW5kb3c7CisgKiAgICAgV2ViS2l0V2luZG93UHJvcGVydGllcyAqd2luZG93
X3Byb3BlcnRpZXM7CisgKiAgICAgZ2Jvb2xlYW4gdmlzaWJsZTsKKyAqCisgKiAgICAgLzwhLS0g
LS0+KiBDcmVhdGUgdGhlIHdpbmRvdyB0byBjb250YWluIHRoZSBXZWJLaXRXZWJWaWV3ICo8IS0t
IC0tPi8KKyAqICAgICB3aW5kb3cgPSBicm93c2VyX3dpbmRvd19uZXcgKCk7CisgKiAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKHdpbmRvdyksIEdUS19XSURHRVQgKHdlYl92
aWV3KSk7CisgKiAgICAgZ3RrX3dpZGdldF9zaG93IChHVEtfV0lER0VUICh3ZWJfdmlldykpOwor
ICoKKyAqICAgICAvPCEtLSAtLT4qIEdldCB0aGUgV2ViS2l0V2luZG93UHJvcGVydGllcyBvZiB0
aGUgd2ViIHZpZXcgYW5kIG1vbml0b3IgaXQgKjwhLS0gLS0+LworICogICAgIHdpbmRvd19wcm9w
ZXJ0aWVzID0gd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfcHJvcGVydGllcyAod2ViX3ZpZXcp
OworICogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdpbmRvd19wcm9wZXJ0aWVzLCAibm90aWZ5Ojpn
ZW9tZXRyeSIsCisgKiAgICAgICAgICAgICAgICAgICAgICAgR19DQUxMQkFDSyAod2luZG93X2dl
b21ldHJ5X2NoYW5nZWQpLCB3aW5kb3cpOworICogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdpbmRv
d19wcm9wZXJ0aWVzLCAibm90aWZ5Ojp0b29sYmFyLXZpc2libGUiLAorICogICAgICAgICAgICAg
ICAgICAgICAgIEdfQ0FMTEJBQ0sgKHdpbmRvd190b29sYmFyX3Zpc2liaWxpdHlfY2hhbmdlZCks
IHdpbmRvdyk7CisgKiAgICAgZ19zaWduYWxfY29ubmVjdCAod2luZG93X3Byb3BlcnRpZXMsICJu
b3RpZnk6Om1lbnViYXItdmlzaWJsZSIsCisgKiAgICAgICAgICAgICAgICAgICAgICAgR19DQUxM
QkFDSyAod2luZG93X21lbnViYXJfdmlzaWJpbGl0eV9jaGFuZ2VkKSwgd2luZG93KTsKKyAqICAg
ICAuLi4uCisgKgorICogICAgIC88IS0tIC0tPiogQXBwbHkgdGhlIHdpbmRvdyBwcm9wZXJ0aWVz
IGJlZm9yZSBzaG93aW5nIHRoZSB3aW5kb3cgKjwhLS0gLS0+LworICogICAgIHZpc2libGUgPSB3
ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Rvb2xiYXJfdmlzaWJsZSAod2luZG93X3Byb3Bl
cnRpZXMpOworICogICAgIGJyb3dzZXJfd2luZG93X3NldF90b29sYmFyX3Zpc2libGUgKEJST1dT
RVJfV0lORE9XICh3aW5kb3cpLCB2aXNpYmxlKTsKKyAqICAgICB2aXNpYmxlID0gd2Via2l0X3dp
bmRvd19wcm9wZXJ0aWVzX2dldF9tZW51YmFyX3Zpc2libGUgKHdpbmRvd19wcm9wZXJ0aWVzKTsK
KyAqICAgICBicm93c2VyX3dpbmRvd19zZXRfbWVudWJhcl92aXNpYmxlIChCUk9XU0VSX1dJTkRP
VyAod2luZG93KSwgdmlzaWJsZSk7CisgKiAgICAgLi4uLgorICoKKyAqICAgICBpZiAod2Via2l0
X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9mdWxsc2NyZWVuICh3aW5kb3dfcHJvcGVydGllcykpIHsK
KyAqICAgICAgICAgZ3RrX3dpbmRvd19mdWxsc2NyZWVuIChHVEtfV0lORE9XICh3aW5kb3cpKTsK
KyAqICAgICB9IGVsc2UgeworICogICAgICAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnk7CisgKgor
ICogICAgICAgICBndGtfd2luZG93X3NldF9yZXNpemFibGUgKEdUS19XSU5ET1cgKHdpbmRvdyks
CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3dpbmRvd19wcm9w
ZXJ0aWVzX2dldF9yZXNpemFibGUgKHdpbmRvd19wcm9wZXJ0aWVzKSk7CisgKiAgICAgICAgIHdl
YmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfZ2VvbWV0cnkgKHdpbmRvd19wcm9wZXJ0aWVzLCAm
Z2VvbWV0cnkpOworICogICAgICAgICBndGtfd2luZG93X21vdmUgKEdUS19XSU5ET1cgKHdpbmRv
dyksIGdlb21ldHJ5LngsIGdlb21ldHJ5LnkpOworICogICAgICAgICBndGtfd2luZG93X3Jlc2l6
ZSAoR1RLX1dJTkRPVyAod2luZG93KSwgZ2VvbWV0cnkud2lkdGgsIGdlb21ldHJ5LmhlaWdodCk7
CisgKiAgICAgfQorICoKKyAqICAgICBndGtfd2lkZ2V0X3Nob3cgKHdpbmRvdyk7CisgKiB9Cisg
KiA8L3Byb2dyYW1saXN0aW5nPjwvaW5mb3JtYWxleGFtcGxlPgorICovCisKK2VudW0geworICAg
IFBST1BfMCwKKworICAgIFBST1BfR0VPTUVUUlksCisgICAgUFJPUF9UT09MQkFSX1ZJU0lCTEUs
CisgICAgUFJPUF9TVEFUVVNCQVJfVklTSUJMRSwKKyAgICBQUk9QX1NDUk9MTEJBUlNfVklTSUJM
RSwKKyAgICBQUk9QX01FTlVCQVJfVklTSUJMRSwKKyAgICBQUk9QX0xPQ0FUSU9OQkFSX1ZJU0lC
TEUsCisgICAgUFJPUF9SRVNJWkFCTEUsCisgICAgUFJPUF9GVUxMU0NSRUVOCit9OworCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzLCB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXMsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBf
V2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUgeworICAgIEdka1JlY3RhbmdsZSBnZW9tZXRy
eTsKKworICAgIGJvb2wgdG9vbGJhclZpc2libGU7CisgICAgYm9vbCBzdGF0dXNiYXJWaXNpYmxl
OworICAgIGJvb2wgc2Nyb2xsYmFyc1Zpc2libGU7CisgICAgYm9vbCBtZW51YmFyVmlzaWJsZTsK
KyAgICBib29sIGxvY2F0aW9uYmFyVmlzaWJsZTsKKworICAgIGJvb2wgcmVzaXphYmxlOworICAg
IGJvb2wgZnVsbHNjcmVlbjsKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdpbmRvd1Byb3BlcnRp
ZXNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX1dJTkRPV19QUk9QRVJU
SUVTKG9iamVjdCktPnByaXYtPn5XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZSgpOworICAg
IEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVz
R2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUs
IEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3
aW5kb3dQcm9wZXJ0aWVzID0gV0VCS0lUX1dJTkRPV19QUk9QRVJUSUVTKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9HRU9NRVRSWToKKyAgICAgICAgZ192
YWx1ZV9zZXRfYm94ZWQodmFsdWUsICZ3aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5nZW9tZXRyeSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UT09MQkFSX1ZJU0lCTEU6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRf
dG9vbGJhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1NUQVRVU0JBUl9WSVNJQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFu
KHZhbHVlLCB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3N0YXR1c2Jhcl92aXNpYmxlKHdp
bmRvd1Byb3BlcnRpZXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1NDUk9MTEJB
UlNfVklTSUJMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Via2l0X3dp
bmRvd19wcm9wZXJ0aWVzX2dldF9zY3JvbGxiYXJzX3Zpc2libGUod2luZG93UHJvcGVydGllcykp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVOVUJBUl9WSVNJQkxFOgorICAgICAg
ICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0
X21lbnViYXJfdmlzaWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9MT0NBVElPTkJBUl9WSVNJQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2xvY2F0aW9uYmFyX3Zpc2li
bGUod2luZG93UHJvcGVydGllcykpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVT
SVpBQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCB3ZWJraXRfd2luZG93
X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6YWJsZSh3aW5kb3dQcm9wZXJ0aWVzKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9GVUxMU0NSRUVOOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2Z1bGxzY3JlZW4od2luZG93
UHJvcGVydGllcykpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09C
SkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0UHJvcGVy
dHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQ
YXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3aW5k
b3dQcm9wZXJ0aWVzID0gV0VCS0lUX1dJTkRPV19QUk9QRVJUSUVTKG9iamVjdCk7CisKKyAgICBz
d2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9HRU9NRVRSWToKKyAgICAgICAgaWYgKEdk
a1JlY3RhbmdsZSogZ2VvbWV0cnkgPSBzdGF0aWNfY2FzdDxHZGtSZWN0YW5nbGUqPihnX3ZhbHVl
X2dldF9ib3hlZCh2YWx1ZSkpKQorICAgICAgICAgICAgd2luZG93UHJvcGVydGllcy0+cHJpdi0+
Z2VvbWV0cnkgPSAqZ2VvbWV0cnk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UT09M
QkFSX1ZJU0lCTEU6CisgICAgICAgIHdpbmRvd1Byb3BlcnRpZXMtPnByaXYtPnRvb2xiYXJWaXNp
YmxlID0gZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9TVEFUVVNCQVJfVklTSUJMRToKKyAgICAgICAgd2luZG93UHJvcGVydGllcy0+cHJp
di0+c3RhdHVzYmFyVmlzaWJsZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfU0NST0xMQkFSU19WSVNJQkxFOgorICAgICAgICB3aW5k
b3dQcm9wZXJ0aWVzLT5wcml2LT5zY3JvbGxiYXJzVmlzaWJsZSA9IGdfdmFsdWVfZ2V0X2Jvb2xl
YW4odmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUVOVUJBUl9WSVNJQkxF
OgorICAgICAgICB3aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5tZW51YmFyVmlzaWJsZSA9IGdfdmFs
dWVfZ2V0X2Jvb2xlYW4odmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9D
QVRJT05CQVJfVklTSUJMRToKKyAgICAgICAgd2luZG93UHJvcGVydGllcy0+cHJpdi0+bG9jYXRp
b25iYXJWaXNpYmxlID0gZ192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9SRVNJWkFCTEU6CisgICAgICAgIHdpbmRvd1Byb3BlcnRpZXMtPnBy
aXYtPnJlc2l6YWJsZSA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRlVMTFNDUkVFTjoKKyAgICAgICAgd2luZG93UHJvcGVydGllcy0+
cHJpdi0+ZnVsbHNjcmVlbiA9IGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfY2xhc3NfaW5pdChXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzQ2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKworICAgIG9iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNGaW5hbGl6ZTsKKyAgICBvYmplY3RDbGFzcy0+
Z2V0X3Byb3BlcnR5ID0gd2Via2l0V2luZG93UHJvcGVydGllc0dldFByb3BlcnR5OworICAgIG9i
amVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0UHJvcGVy
dHk7CisKKyAgICBHUGFyYW1GbGFncyBwYXJhbUZsYWdzID0gc3RhdGljX2Nhc3Q8R1BhcmFtRmxh
Z3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKTsKKwor
ICAgIC8qKgorICAgICAqIFdlYktpdFdlYldpbmRvd1Byb3BlcnRpZXM6Z2VvbWV0cnk6CisgICAg
ICoKKyAgICAgKiBUaGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhlIHdpbmRvdyBvbiB0aGUgc2Ny
ZWVuLgorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0dFT01FVFJZ
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2JveGVk
KCJnZW9tZXRyeSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiR2VvbWV0cnkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgc2l6ZSBhbmQgcG9zaXRpb24gb2YgdGhl
IHdpbmRvdyBvbiB0aGUgc2NyZWVuLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdES19UWVBFX1JFQ1RBTkdMRSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbUZsYWdzKSk7
CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJXaW5kb3dQcm9wZXJ0aWVzOnRvb2xiYXItdmlz
aWJsZToKKyAgICAgKgorICAgICAqIFdoZXRoZXIgdGhlIHRvb2xiYXIgc2hvdWxkIGJlIHZpc2li
bGUgZm9yIHRoZSB3aW5kb3cuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBST1BfVE9PTEJBUl9WSVNJQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oInRvb2xiYXItdmlzaWJsZSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUb29sYmFyIFZp
c2libGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIldoZXRoZXIgdGhlIHRvb2xiYXIgc2hvdWxkIGJlIHZpc2libGUgZm9yIHRo
ZSB3aW5kb3cuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1GbGFncykpOworCisgICAgLyoqCisgICAgICogV2Vi
S2l0V2ViV2luZG93UHJvcGVydGllczpzdGF0dXNiYXItdmlzaWJsZToKKyAgICAgKgorICAgICAq
IFdoZXRoZXIgdGhlIHN0YXR1c2JhciBzaG91bGQgYmUgdmlzaWJsZSBmb3IgdGhlIHdpbmRvdy4K
KyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TVEFUVVNCQVJfVklT
SUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKCJzdGF0dXNiYXItdmlzaWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJTdGF0dXNiYXIgVmlzaWJsZSIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
V2hldGhlciB0aGUgc3RhdHVzYmFyIHNob3VsZCBiZSB2aXNpYmxlIGZvciB0aGUgd2luZG93LiIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtRmxhZ3MpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYldpbmRv
d1Byb3BlcnRpZXM6c2Nyb2xsYmFycy12aXNpYmxlOgorICAgICAqCisgICAgICogV2hldGhlciB0
aGUgc2Nyb2xsYmFycyBzaG91bGQgYmUgdmlzaWJsZSBmb3IgdGhlIHdpbmRvdy4KKyAgICAgKi8K
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9TQ1JPTExCQVJTX1ZJU0lCTEUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigi
c2Nyb2xsYmFycy12aXNpYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIlNjcm9sbGJhcnMgVmlzaWJsZSIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiV2hldGhl
ciB0aGUgc2Nyb2xsYmFycyBzaG91bGQgYmUgdmlzaWJsZSBmb3IgdGhlIHdpbmRvdy4iKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRS
VUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbUZsYWdzKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJXaW5kb3dQcm9w
ZXJ0aWVzOm1lbnViYXItdmlzaWJsZToKKyAgICAgKgorICAgICAqIFdoZXRoZXIgdGhlIG1lbnVi
YXIgc2hvdWxkIGJlIHZpc2libGUgZm9yIHRoZSB3aW5kb3cuCisgICAgICovCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfTUVOVUJBUl9WSVNJQkxFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oIm1lbnViYXItdmlzaWJs
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJNZW51YmFyIFZpc2libGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldoZXRoZXIgdGhlIG1lbnViYXIgc2hvdWxk
IGJlIHZpc2libGUgZm9yIHRoZSB3aW5kb3cuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1GbGFncykpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0V2ViV2luZG93UHJvcGVydGllczpsb2NhdGlvbmJhci12aXNp
YmxlOgorICAgICAqCisgICAgICogV2hldGhlciB0aGUgbG9jYXRpb25iYXIgc2hvdWxkIGJlIHZp
c2libGUgZm9yIHRoZSB3aW5kb3cuCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfTE9DQVRJT05CQVJfVklTSUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKCJsb2NhdGlvbmJhci12aXNpYmxlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
IkxvY2F0aW9uYmFyIFZpc2libGUiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldoZXRoZXIgdGhlIGxvY2F0aW9uYmFyIHNob3Vs
ZCBiZSB2aXNpYmxlIGZvciB0aGUgd2luZG93LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtRmxhZ3MpKTsKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRXZWJXaW5kb3dQcm9wZXJ0aWVzOnJlc2l6YWJsZToKKyAgICAg
KgorICAgICAqIFdoZXRoZXIgdGhlIHdpbmRvdyBjYW4gYmUgcmVzaXplZC4KKyAgICAgKi8KKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9SRVNJWkFCTEUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigicmVzaXphYmxlIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlJlc2l6YWJsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiV2hldGhlciB0aGUgd2luZG93IGNhbiBiZSByZXNpemVkLiIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtRmxhZ3MpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYldpbmRv
d1Byb3BlcnRpZXM6ZnVsbHNjcmVlbjoKKyAgICAgKgorICAgICAqIFdoZXRoZXIgd2luZG93IHdp
bGwgYmUgZGlzcGxheWVkIGZ1bGxzY3JlZW4uCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBST1BfRlVMTFNDUkVFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKCJmdWxsc2NyZWVuIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkZ1bGxzY3JlZW4i
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIldoZXRoZXIgd2luZG93IHdpbGwgYmUgZGlzcGxheWVkIGZ1bGxzY3JlZW4uIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
QUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtRmxhZ3MpKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShyZXF1
ZXN0Q2xhc3MsIHNpemVvZihXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZSkpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfaW5pdChXZWJLaXRXaW5kb3dQcm9w
ZXJ0aWVzKiByZXF1ZXN0KQoreworICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlKiBw
cml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHJlcXVlc3QsIFdFQktJVF9UWVBFX1dJ
TkRPV19QUk9QRVJUSUVTLCBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZSk7CisgICAgcmVx
dWVzdC0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVz
UHJpdmF0ZSgpOworfQorCitXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3ZWJraXRXaW5kb3dQcm9w
ZXJ0aWVzQ3JlYXRlKCkKK3sKKyAgICByZXR1cm4gV0VCS0lUX1dJTkRPV19QUk9QRVJUSUVTKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XSU5ET1dfUFJPUEVSVElFUywgTlVMTCkpOworfQorCit2
b2lkIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRHZW9tZXRyeShXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzKiB3aW5kb3dQcm9wZXJ0aWVzLCBHZGtSZWN0YW5nbGUqIGdlb21ldHJ5KQoreworICAgIGlm
ICh3aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5nZW9tZXRyeS54ID09IGdlb21ldHJ5LT54CisgICAg
ICAgICYmIHdpbmRvd1Byb3BlcnRpZXMtPnByaXYtPmdlb21ldHJ5LnkgPT0gZ2VvbWV0cnktPnkK
KyAgICAgICAgJiYgd2luZG93UHJvcGVydGllcy0+cHJpdi0+Z2VvbWV0cnkud2lkdGggPT0gZ2Vv
bWV0cnktPndpZHRoCisgICAgICAgICYmIHdpbmRvd1Byb3BlcnRpZXMtPnByaXYtPmdlb21ldHJ5
LmhlaWdodCA9PSBnZW9tZXRyeS0+aGVpZ2h0KQorICAgICAgICByZXR1cm47CisgICAgd2luZG93
UHJvcGVydGllcy0+cHJpdi0+Z2VvbWV0cnkgPSAqZ2VvbWV0cnk7CisgICAgZ19vYmplY3Rfbm90
aWZ5KEdfT0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMpLCAiZ2VvbWV0cnkiKTsKK30KKwordm9pZCB3
ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0VG9vbGJhclZpc2libGUoV2ViS2l0V2luZG93UHJvcGVy
dGllcyogd2luZG93UHJvcGVydGllcywgYm9vbCB0b29sYmFyc1Zpc2libGUpCit7CisgICAgaWYg
KHdpbmRvd1Byb3BlcnRpZXMtPnByaXYtPnRvb2xiYXJWaXNpYmxlID09IHRvb2xiYXJzVmlzaWJs
ZSkKKyAgICAgICAgcmV0dXJuOworICAgIHdpbmRvd1Byb3BlcnRpZXMtPnByaXYtPnRvb2xiYXJW
aXNpYmxlID0gdG9vbGJhcnNWaXNpYmxlOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh3
aW5kb3dQcm9wZXJ0aWVzKSwgInRvb2xiYXItdmlzaWJsZSIpOworfQorCit2b2lkIHdlYmtpdFdp
bmRvd1Byb3BlcnRpZXNTZXRNZW51YmFyVmlzaWJsZShXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiB3
aW5kb3dQcm9wZXJ0aWVzLCBib29sIG1lbnVCYXJWaXNpYmxlKQoreworICAgIGlmICh3aW5kb3dQ
cm9wZXJ0aWVzLT5wcml2LT5tZW51YmFyVmlzaWJsZSA9PSBtZW51QmFyVmlzaWJsZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHdpbmRvd1Byb3BlcnRpZXMtPnByaXYtPm1lbnViYXJWaXNpYmxlID0g
bWVudUJhclZpc2libGU7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHdpbmRvd1Byb3Bl
cnRpZXMpLCAibWVudWJhci12aXNpYmxlIik7Cit9CisKK3ZvaWQgd2Via2l0V2luZG93UHJvcGVy
dGllc1NldFN0YXR1c2JhclZpc2libGUoV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJv
cGVydGllcywgYm9vbCBzdGF0dXNCYXJWaXNpYmxlKQoreworICAgIGlmICh3aW5kb3dQcm9wZXJ0
aWVzLT5wcml2LT5zdGF0dXNiYXJWaXNpYmxlID09IHN0YXR1c0JhclZpc2libGUpCisgICAgICAg
IHJldHVybjsKKyAgICB3aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5zdGF0dXNiYXJWaXNpYmxlID0g
c3RhdHVzQmFyVmlzaWJsZTsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2luZG93UHJv
cGVydGllcyksICJzdGF0dXNiYXItdmlzaWJsZSIpOworfQorCit2b2lkIHdlYmtpdFdpbmRvd1By
b3BlcnRpZXNTZXRMb2NhdGlvbmJhclZpc2libGUoV2ViS2l0V2luZG93UHJvcGVydGllcyogd2lu
ZG93UHJvcGVydGllcywgYm9vbCBsb2NhdGlvbkJhclZpc2libGUpCit7CisgICAgaWYgKHdpbmRv
d1Byb3BlcnRpZXMtPnByaXYtPmxvY2F0aW9uYmFyVmlzaWJsZSA9PSBsb2NhdGlvbkJhclZpc2li
bGUpCisgICAgICAgIHJldHVybjsKKyAgICB3aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5sb2NhdGlv
bmJhclZpc2libGUgPSBsb2NhdGlvbkJhclZpc2libGU7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdf
T0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMpLCAibG9jYXRpb25iYXItdmlzaWJsZSIpOworfQorCit2
b2lkIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRTY3JvbGxiYXJzVmlzaWJsZShXZWJLaXRXaW5k
b3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzLCBib29sIHNjcm9sbEJhcnNWaXNpYmxlKQor
eworICAgIGlmICh3aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5zY3JvbGxiYXJzVmlzaWJsZSA9PSBz
Y3JvbGxCYXJzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOworICAgIHdpbmRvd1Byb3BlcnRpZXMt
PnByaXYtPnNjcm9sbGJhcnNWaXNpYmxlID0gc2Nyb2xsQmFyc1Zpc2libGU7CisgICAgZ19vYmpl
Y3Rfbm90aWZ5KEdfT0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMpLCAic2Nyb2xsYmFycy12aXNpYmxl
Iik7Cit9CisKK3ZvaWQgd2Via2l0V2luZG93UHJvcGVydGllc1NldFJlc2l6YWJsZShXZWJLaXRX
aW5kb3dQcm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzLCBib29sIHJlc2l6YWJsZSkKK3sKKyAg
ICBpZiAod2luZG93UHJvcGVydGllcy0+cHJpdi0+cmVzaXphYmxlID09IHJlc2l6YWJsZSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHdpbmRvd1Byb3BlcnRpZXMtPnByaXYtPnJlc2l6YWJsZSA9IHJl
c2l6YWJsZTsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qod2luZG93UHJvcGVydGllcyks
ICJyZXNpemFibGUtdmlzaWJsZSIpOworfQorCit2b2lkIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNT
ZXRGdWxsc2NyZWVuKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMsIGJv
b2wgZnVsbHNjcmVlbikKK3sKKyAgICBpZiAod2luZG93UHJvcGVydGllcy0+cHJpdi0+ZnVsbHNj
cmVlbiA9PSBmdWxsc2NyZWVuKQorICAgICAgICByZXR1cm47CisgICAgd2luZG93UHJvcGVydGll
cy0+cHJpdi0+ZnVsbHNjcmVlbiA9IGZ1bGxzY3JlZW47CisgICAgZ19vYmplY3Rfbm90aWZ5KEdf
T0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMpLCAiZnVsbHNjcmVlbiIpOworfQorCit2b2lkIHdlYmtp
dFdpbmRvd1Byb3BlcnRpZXNVcGRhdGVGcm9tV0tXaW5kb3dGZWF0dXJlcyhXZWJLaXRXaW5kb3dQ
cm9wZXJ0aWVzKiB3aW5kb3dQcm9wZXJ0aWVzLCBXS0RpY3Rpb25hcnlSZWYgd2tGZWF0dXJlcykK
K3sKKyAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB3aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5n
ZW9tZXRyeTsKKworICAgIFdLRG91YmxlUmVmIGRvdWJsZVZhbHVlOworICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB4S2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJ4IikpOworICAgIGlmIChkb3VibGVWYWx1ZSA9IHN0YXRpY19jYXN0PFdLRG91YmxlUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHdrRmVhdHVyZXMsIHhLZXkuZ2V0KCkpKSkKKyAgICAg
ICAgZ2VvbWV0cnkueCA9IFdLRG91YmxlR2V0VmFsdWUoZG91YmxlVmFsdWUpOworCisgICAgV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHlLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoInkiKSk7CisgICAgaWYgKGRvdWJsZVZhbHVlID0gc3RhdGljX2Nhc3Q8V0tEb3Vi
bGVSZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkod2tGZWF0dXJlcywgeUtleS5nZXQoKSkp
KQorICAgICAgICBnZW9tZXRyeS55ID0gV0tEb3VibGVHZXRWYWx1ZShkb3VibGVWYWx1ZSk7CisK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2lkdGhLZXkoQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIndpZHRoIikpOworICAgIGlmIChkb3VibGVWYWx1ZSA9IHN0
YXRpY19jYXN0PFdLRG91YmxlUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHdrRmVhdHVy
ZXMsIHdpZHRoS2V5LmdldCgpKSkpCisgICAgICAgIGdlb21ldHJ5LndpZHRoID0gV0tEb3VibGVH
ZXRWYWx1ZShkb3VibGVWYWx1ZSk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gaGVp
Z2h0S2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJoZWlnaHQiKSk7
CisgICAgaWYgKGRvdWJsZVZhbHVlID0gc3RhdGljX2Nhc3Q8V0tEb3VibGVSZWY+KFdLRGljdGlv
bmFyeUdldEl0ZW1Gb3JLZXkod2tGZWF0dXJlcywgaGVpZ2h0S2V5LmdldCgpKSkpCisgICAgICAg
IGdlb21ldHJ5LmhlaWdodCA9IFdLRG91YmxlR2V0VmFsdWUoZG91YmxlVmFsdWUpOworICAgIHdl
YmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRHZW9tZXRyeSh3aW5kb3dQcm9wZXJ0aWVzLCAmZ2VvbWV0
cnkpOworCisgICAgV0tCb29sZWFuUmVmIGJvb2xlYW5WYWx1ZTsKKyAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVudUJhclZpc2libGVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRo
VVRGOENTdHJpbmcoIm1lbnVCYXJWaXNpYmxlIikpOworICAgIGlmIChib29sZWFuVmFsdWUgPSBz
dGF0aWNfY2FzdDxXS0Jvb2xlYW5SZWY+KFdLRGljdGlvbmFyeUdldEl0ZW1Gb3JLZXkod2tGZWF0
dXJlcywgbWVudUJhclZpc2libGVLZXkuZ2V0KCkpKSkKKyAgICAgICAgd2Via2l0V2luZG93UHJv
cGVydGllc1NldE1lbnViYXJWaXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMsIFdLQm9vbGVhbkdldFZh
bHVlKGJvb2xlYW5WYWx1ZSkpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHN0YXR1
c0JhclZpc2libGVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoInN0
YXR1c0JhclZpc2libGUiKSk7CisgICAgaWYgKGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PFdL
Qm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5R2V0SXRlbUZvcktleSh3a0ZlYXR1cmVzLCBzdGF0dXNC
YXJWaXNpYmxlS2V5LmdldCgpKSkpCisgICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRT
dGF0dXNiYXJWaXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMsIFdLQm9vbGVhbkdldFZhbHVlKGJvb2xl
YW5WYWx1ZSkpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvb2xCYXJWaXNpYmxl
S2V5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJ0b29sQmFyVmlzaWJs
ZSIpKTsKKyAgICBpZiAoYm9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihX
S0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHdrRmVhdHVyZXMsIHRvb2xCYXJWaXNpYmxlS2V5Lmdl
dCgpKSkpCisgICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRUb29sYmFyVmlzaWJsZSh3
aW5kb3dQcm9wZXJ0aWVzLCBXS0Jvb2xlYW5HZXRWYWx1ZShib29sZWFuVmFsdWUpKTsKKworICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBsb2NhdGlvbkJhclZpc2libGVLZXkoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxvY2F0aW9uQmFyVmlzaWJsZSIpKTsKKyAg
ICBpZiAoYm9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25h
cnlHZXRJdGVtRm9yS2V5KHdrRmVhdHVyZXMsIGxvY2F0aW9uQmFyVmlzaWJsZUtleS5nZXQoKSkp
KQorICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0TG9jYXRpb25iYXJWaXNpYmxlKHdp
bmRvd1Byb3BlcnRpZXMsIFdLQm9vbGVhbkdldFZhbHVlKGJvb2xlYW5WYWx1ZSkpOworCisgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHNjcm9sbGJhcnNWaXNpYmxlS2V5KEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJzY3JvbGxiYXJzVmlzaWJsZSIpKTsKKyAgICBp
ZiAoYm9vbGVhblZhbHVlID0gc3RhdGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlH
ZXRJdGVtRm9yS2V5KHdrRmVhdHVyZXMsIHNjcm9sbGJhcnNWaXNpYmxlS2V5LmdldCgpKSkpCisg
ICAgICAgIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRTY3JvbGxiYXJzVmlzaWJsZSh3aW5kb3dQ
cm9wZXJ0aWVzLCBXS0Jvb2xlYW5HZXRWYWx1ZShib29sZWFuVmFsdWUpKTsKKworICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiByZXNpemFibGVLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVX
aXRoVVRGOENTdHJpbmcoInJlc2l6YWJsZSIpKTsKKyAgICBpZiAoYm9vbGVhblZhbHVlID0gc3Rh
dGljX2Nhc3Q8V0tCb29sZWFuUmVmPihXS0RpY3Rpb25hcnlHZXRJdGVtRm9yS2V5KHdrRmVhdHVy
ZXMsIHJlc2l6YWJsZUtleS5nZXQoKSkpKQorICAgICAgICB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVz
U2V0UmVzaXphYmxlKHdpbmRvd1Byb3BlcnRpZXMsIFdLQm9vbGVhbkdldFZhbHVlKGJvb2xlYW5W
YWx1ZSkpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGZ1bGxzY3JlZW5LZXkoQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImZ1bGxzY3JlZW4iKSk7CisgICAg
aWYgKGJvb2xlYW5WYWx1ZSA9IHN0YXRpY19jYXN0PFdLQm9vbGVhblJlZj4oV0tEaWN0aW9uYXJ5
R2V0SXRlbUZvcktleSh3a0ZlYXR1cmVzLCBmdWxsc2NyZWVuS2V5LmdldCgpKSkpCisgICAgICAg
IHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRGdWxsc2NyZWVuKHdpbmRvd1Byb3BlcnRpZXMsIFdL
Qm9vbGVhbkdldFZhbHVlKGJvb2xlYW5WYWx1ZSkpOworfQorCisvKioKKyAqIHdlYmtpdF93aW5k
b3dfcHJvcGVydGllc19nZXRfZ2VvbWV0cnk6CisgKiBAd2luZG93X3Byb3BlcnRpZXM6IGEgI1dl
YktpdFdpbmRvd1Byb3BlcnRpZXMKKyAqIEBnZW9tZXRyeTogKG91dCk6IHJldHVybiBsb2NhdGlv
biBmb3IgdGhlIHdpbmRvdyBnZW9tZXRyeQorICoKKyAqIEdldCB0aGUgZ2VvbWV0cnkgdGhhdCB0
aGUgd2luZG93IHNob3VsZCBoYXZlIG9uIHRoZSBzY3JlZW4gd2hlbiBzaG93bi4KKyAqLwordm9p
ZCB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2dlb21ldHJ5KFdlYktpdFdpbmRvd1Byb3Bl
cnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMsIEdka1JlY3RhbmdsZSogZ2VvbWV0cnkpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0lORE9XX1BST1BFUlRJRVMod2luZG93UHJvcGVy
dGllcykpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZ2VvbWV0cnkpOworCisgICAgKmdlb21ldHJ5
ID0gd2luZG93UHJvcGVydGllcy0+cHJpdi0+Z2VvbWV0cnk7Cit9CisKKy8qKgorICogd2Via2l0
X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90b29sYmFyX3Zpc2libGU6CisgKiBAd2luZG93X3Byb3Bl
cnRpZXM6IGEgI1dlYktpdFdpbmRvd1Byb3BlcnRpZXMKKyAqCisgKiBHZXQgd2hldGhlciB0aGUg
d2luZG93IHNob3VsZCBoYXZlIHRoZSB0b29sYmFyIHZpc2libGUgb3Igbm90LgorICoKKyAqIFJl
dHVybnM6ICVUUlVFIGlmIHRvb2xiYXIgc2hvdWxkIGJlIHZpc2libGUgb3IgJUZBTFNFIG90aGVy
d2lzZS4KKyAqLworZ2Jvb2xlYW4gd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF90b29sYmFy
X3Zpc2libGUoV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcykKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0lORE9XX1BST1BFUlRJRVMod2luZG93
UHJvcGVydGllcyksIFRSVUUpOworCisgICAgcmV0dXJuIHdpbmRvd1Byb3BlcnRpZXMtPnByaXYt
PnRvb2xiYXJWaXNpYmxlOworfQorCisvKioKKyAqIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19n
ZXRfc3RhdHVzYmFyX3Zpc2libGU6CisgKiBAd2luZG93X3Byb3BlcnRpZXM6IGEgI1dlYktpdFdp
bmRvd1Byb3BlcnRpZXMKKyAqCisgKiBHZXQgd2hldGhlciB0aGUgd2luZG93IHNob3VsZCBoYXZl
IHRoZSBzdGF0dXNiYXIgdmlzaWJsZSBvciBub3QuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYg
c3RhdHVzYmFyIHNob3VsZCBiZSB2aXNpYmxlIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKi8KK2di
b29sZWFuIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfc3RhdHVzYmFyX3Zpc2libGUoV2Vi
S2l0V2luZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcykKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0lORE9XX1BST1BFUlRJRVMod2luZG93UHJvcGVydGllcyks
IFRSVUUpOworCisgICAgcmV0dXJuIHdpbmRvd1Byb3BlcnRpZXMtPnByaXYtPnN0YXR1c2JhclZp
c2libGU7Cit9CisKKy8qKgorICogd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zY3JvbGxi
YXJzX3Zpc2libGU6CisgKiBAd2luZG93X3Byb3BlcnRpZXM6IGEgI1dlYktpdFdpbmRvd1Byb3Bl
cnRpZXMKKyAqCisgKiBHZXQgd2hldGhlciB0aGUgd2luZG93IHNob3VsZCBoYXZlIHRoZSBzY3Jv
bGxiYXJzIHZpc2libGUgb3Igbm90LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHNjcm9sbGJh
cnMgc2hvdWxkIGJlIHZpc2libGUgb3IgJUZBTFNFIG90aGVyd2lzZS4KKyAqLworZ2Jvb2xlYW4g
d2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zY3JvbGxiYXJzX3Zpc2libGUoV2ViS2l0V2lu
ZG93UHJvcGVydGllcyogd2luZG93UHJvcGVydGllcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0lORE9XX1BST1BFUlRJRVMod2luZG93UHJvcGVydGllcyksIFRSVUUp
OworCisgICAgcmV0dXJuIHdpbmRvd1Byb3BlcnRpZXMtPnByaXYtPnNjcm9sbGJhcnNWaXNpYmxl
OworfQorCisvKioKKyAqIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbWVudWJhcl92aXNp
YmxlOgorICogQHdpbmRvd19wcm9wZXJ0aWVzOiBhICNXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzCisg
KgorICogR2V0IHdoZXRoZXIgdGhlIHdpbmRvdyBzaG91bGQgaGF2ZSB0aGUgbWVudWJhciB2aXNp
YmxlIG9yIG5vdC4KKyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBtZW51YmFyIHNob3VsZCBiZSB2
aXNpYmxlIG9yICVGQUxTRSBvdGhlcndpc2UuCisgKi8KK2dib29sZWFuIHdlYmtpdF93aW5kb3df
cHJvcGVydGllc19nZXRfbWVudWJhcl92aXNpYmxlKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdp
bmRvd1Byb3BlcnRpZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dJ
TkRPV19QUk9QRVJUSUVTKHdpbmRvd1Byb3BlcnRpZXMpLCBUUlVFKTsKKworICAgIHJldHVybiB3
aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5tZW51YmFyVmlzaWJsZTsKK30KKworLyoqCisgKiB3ZWJr
aXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2xvY2F0aW9uYmFyX3Zpc2libGU6CisgKiBAd2luZG93
X3Byb3BlcnRpZXM6IGEgI1dlYktpdFdpbmRvd1Byb3BlcnRpZXMKKyAqCisgKiBHZXQgd2hldGhl
ciB0aGUgd2luZG93IHNob3VsZCBoYXZlIHRoZSBsb2NhdGlvbmJhciB2aXNpYmxlIG9yIG5vdC4K
KyAqCisgKiBSZXR1cm5zOiAlVFJVRSBpZiBsb2NhdGlvbmJhciBzaG91bGQgYmUgdmlzaWJsZSBv
ciAlRkFMU0Ugb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbiB3ZWJraXRfd2luZG93X3Byb3BlcnRp
ZXNfZ2V0X2xvY2F0aW9uYmFyX3Zpc2libGUoV2ViS2l0V2luZG93UHJvcGVydGllcyogd2luZG93
UHJvcGVydGllcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0lORE9X
X1BST1BFUlRJRVMod2luZG93UHJvcGVydGllcyksIFRSVUUpOworCisgICAgcmV0dXJuIHdpbmRv
d1Byb3BlcnRpZXMtPnByaXYtPmxvY2F0aW9uYmFyVmlzaWJsZTsKK30KKworLyoqCisgKiB3ZWJr
aXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6YWJsZToKKyAqIEB3aW5kb3dfcHJvcGVydGll
czogYSAjV2ViS2l0V2luZG93UHJvcGVydGllcworICoKKyAqIEdldCB3aGV0aGVyIHRoZSB3aW5k
b3cgc2hvdWxkIGJlIHJlc2l6YWJsZSBieSB0aGUgdXNlciBvciBub3QuCisgKgorICogUmV0dXJu
czogJVRSVUUgaWYgdGhlIHdpbmRvdyBzaG91bGQgYmUgcmVzaXphYmxlIG9yICVGQUxTRSBvdGhl
cndpc2UuCisgKi8KK2dib29sZWFuIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfcmVzaXph
YmxlKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dJTkRPV19QUk9QRVJUSUVTKHdpbmRvd1Byb3Bl
cnRpZXMpLCBUUlVFKTsKKworICAgIHJldHVybiB3aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5yZXNp
emFibGU7Cit9CisKKy8qKgorICogd2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9mdWxsc2Ny
ZWVuOgorICogQHdpbmRvd19wcm9wZXJ0aWVzOiBhICNXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzCisg
KgorICogR2V0IHdoZXRoZXIgdGhlIHdpbmRvdyBzaG91bGQgYmUgc2hvd24gaW4gZnVsbHNjcmVl
biBzdGF0ZSBvciBub3QuCisgKgorICogUmV0dXJuczogJVRSVUUgaWYgdGhlIHdpbmRvdyBzaG91
bGQgYmUgZnVsbHNjcmVlbiBvciAlRkFMU0Ugb3RoZXJ3aXNlLgorICovCitnYm9vbGVhbiB3ZWJr
aXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2Z1bGxzY3JlZW4oV2ViS2l0V2luZG93UHJvcGVydGll
cyogd2luZG93UHJvcGVydGllcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0lORE9XX1BST1BFUlRJRVMod2luZG93UHJvcGVydGllcyksIEZBTFNFKTsKKworICAgIHJl
dHVybiB3aW5kb3dQcm9wZXJ0aWVzLT5wcml2LT5mdWxsc2NyZWVuOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGll
cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZDcxZmIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQ
cm9wZXJ0aWVzLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVk
KFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBj
YW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0V2luZG93
UHJvcGVydGllc19oCisjZGVmaW5lIFdlYktpdFdpbmRvd1Byb3BlcnRpZXNfaAorCisjaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQ
RV9XSU5ET1dfUFJPUEVSVElFUyAgICAgICAgICAgICh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNf
Z2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dJTkRPV19QUk9QRVJUSUVTKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dJTkRP
V19QUk9QRVJUSUVTLCBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X1dJTkRPV19QUk9QRVJUSUVTKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFdFQktJVF9UWVBFX1dJTkRPV19QUk9QRVJUSUVTKSkKKyNkZWZpbmUgV0VCS0lU
X1dJTkRPV19QUk9QRVJUSUVTX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NB
U1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dJTkRPV19QUk9QRVJUSUVTLCBXZWJLaXRXaW5kb3dQ
cm9wZXJ0aWVzQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0lORE9XX1BST1BFUlRJRVNfQ0xB
U1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
V0lORE9XX1BST1BFUlRJRVMpKQorI2RlZmluZSBXRUJLSVRfV0lORE9XX1BST1BFUlRJRVNfR0VU
X0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZ
UEVfV0lORE9XX1BST1BFUlRJRVMsIFdlYktpdFdpbmRvd1Byb3BlcnRpZXNDbGFzcykpCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzIFdlYktpdFdpbmRvd1Byb3BlcnRp
ZXM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2luZG93UHJvcGVydGllc0NsYXNzIFdlYktpdFdp
bmRvd1Byb3BlcnRpZXNDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzUHJpdmF0ZSBXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzUHJpdmF0ZTsKKworc3RydWN0IF9XZWJL
aXRXaW5kb3dQcm9wZXJ0aWVzIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2
YXRlID4qLworICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlICpwcml2OworfTsKKwor
c3RydWN0IF9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBw
YXJlbnRfY2xhc3M7CisKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF93aW5kb3dfcHJv
cGVydGllc19nZXRfdHlwZSAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9nZW9tZXRyeSAgICAgICAgICAgIChXZWJL
aXRXaW5kb3dQcm9wZXJ0aWVzICp3aW5kb3dfcHJvcGVydGllcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2RrUmVjdGFuZ2xlICAgICAgICAgICAq
Z2VvbWV0cnkpOworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dpbmRvd19wcm9wZXJ0aWVz
X2dldF90b29sYmFyX3Zpc2libGUgICAgIChXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzICp3aW5kb3df
cHJvcGVydGllcyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93aW5kb3dfcHJvcGVy
dGllc19nZXRfc3RhdHVzYmFyX3Zpc2libGUgICAoV2ViS2l0V2luZG93UHJvcGVydGllcyAqd2lu
ZG93X3Byb3BlcnRpZXMpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfd2luZG93X3By
b3BlcnRpZXNfZ2V0X3Njcm9sbGJhcnNfdmlzaWJsZSAgKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMg
KndpbmRvd19wcm9wZXJ0aWVzKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dpbmRv
d19wcm9wZXJ0aWVzX2dldF9tZW51YmFyX3Zpc2libGUgICAgIChXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzICp3aW5kb3dfcHJvcGVydGllcyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93
aW5kb3dfcHJvcGVydGllc19nZXRfbG9jYXRpb25iYXJfdmlzaWJsZSAoV2ViS2l0V2luZG93UHJv
cGVydGllcyAqd2luZG93X3Byb3BlcnRpZXMpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJr
aXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3Jlc2l6YWJsZSAgICAgICAgICAgKFdlYktpdFdpbmRv
d1Byb3BlcnRpZXMgKndpbmRvd19wcm9wZXJ0aWVzKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgor
d2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9mdWxsc2NyZWVuICAgICAgICAgIChXZWJLaXRX
aW5kb3dQcm9wZXJ0aWVzICp3aW5kb3dfcHJvcGVydGllcyk7CisKK0dfRU5EX0RFQ0xTCisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2luZG93UHJvcGVydGllc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uN2IxNzg5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgKQEAgLTAs
MCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICogUG9y
dGlvbnMgQ29weXJpZ2h0IChjKSAyMDExIE1vdG9yb2xhIE1vYmlsaXR5LCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYktpdFdpbmRvd1Byb3BlcnRpZXNQ
cml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGVfaAorCisjaW5j
bHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllcy5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNl
Lmg+CisKK1dlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNDcmVh
dGUoKTsKK3ZvaWQgd2Via2l0V2luZG93UHJvcGVydGllc1VwZGF0ZUZyb21XS1dpbmRvd0ZlYXR1
cmVzKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqLCBXS0RpY3Rpb25hcnlSZWYgd2tGZWF0dXJlcyk7
Cit2b2lkIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRHZW9tZXRyeShXZWJLaXRXaW5kb3dQcm9w
ZXJ0aWVzKiwgR2RrUmVjdGFuZ2xlKik7Cit2b2lkIHdlYmtpdFdpbmRvd1Byb3BlcnRpZXNTZXRU
b29sYmFyVmlzaWJsZShXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiwgYm9vbCB0b29sYmFyc1Zpc2li
bGUpOwordm9pZCB3ZWJraXRXaW5kb3dQcm9wZXJ0aWVzU2V0TWVudWJhclZpc2libGUoV2ViS2l0
V2luZG93UHJvcGVydGllcyosIGJvb2wgbWVudUJhclZpc2libGUpOwordm9pZCB3ZWJraXRXaW5k
b3dQcm9wZXJ0aWVzU2V0U3RhdHVzYmFyVmlzaWJsZShXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiwg
Ym9vbCBzdGF0dXNCYXJWaXNpYmxlKTsKK3ZvaWQgd2Via2l0V2luZG93UHJvcGVydGllc1NldFNj
cm9sbGJhcnNWaXNpYmxlKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqLCBib29sIHNjcm9sbEJhcnNW
aXNpYmxlKTsKK3ZvaWQgd2Via2l0V2luZG93UHJvcGVydGllc1NldFJlc2l6YWJsZShXZWJLaXRX
aW5kb3dQcm9wZXJ0aWVzKiwgYm9vbCByZXNpemFibGUpOwordm9pZCB3ZWJraXRXaW5kb3dQcm9w
ZXJ0aWVzU2V0RnVsbHNjcmVlbihXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzKiwgYm9vbCBmdWxsc2Ny
ZWVuKTsKKworI2VuZGlmIC8vIFdlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1k
b2NzLnNnbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstZG9jcy5zZ21sCmluZGV4IDU2NzZlMzMuLjVhYmNiMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dt
bApAQCAtMjAsNiArMjAsNyBAQAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRTZXR0
aW5ncy54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0VVJJUmVxdWVzdC54
bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0VVJJUmVzcG9uc2UueG1sIi8+
CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMueG1sIi8+
CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEVycm9yLnhtbCIvPgogICA8L2NoYXB0
ZXI+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IDAxZTIzNzMuLjRjMmY2MDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtNzIsNiArNzIsNyBAQCB3ZWJraXRfd2ViX3Zp
ZXdfZ29fdG9fYmFja19mb3J3YXJkX2xpc3RfaXRlbQogd2Via2l0X3dlYl92aWV3X2dldF91cmkK
IHdlYmtpdF93ZWJfdmlld19zZXRfc2V0dGluZ3MKIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGlu
Z3MKK3dlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X3Byb3BlcnRpZXMKIAogPFNVQlNFQ1RJT04g
U3RhbmRhcmQ+CiBXZWJLaXRXZWJWaWV3Q2xhc3MKQEAgLTI3NSw2ICsyNzYsMzIgQEAgd2Via2l0
X3VyaV9yZXNwb25zZV9nZXRfdHlwZQogPC9TRUNUSU9OPgogCiA8U0VDVElPTj4KKzxGSUxFPldl
YktpdFdpbmRvd1Byb3BlcnRpZXM8L0ZJTEU+CitXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzCit3ZWJr
aXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2dlb21ldHJ5Cit3ZWJraXRfd2luZG93X3Byb3BlcnRp
ZXNfZ2V0X3Rvb2xiYXJfdmlzaWJsZQord2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zdGF0
dXNiYXJfdmlzaWJsZQord2Via2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9zY3JvbGxiYXJzX3Zp
c2libGUKK3dlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbWVudWJhcl92aXNpYmxlCit3ZWJr
aXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2xvY2F0aW9uYmFyX3Zpc2libGUKK3dlYmtpdF93aW5k
b3dfcHJvcGVydGllc19nZXRfcmVzaXphYmxlCit3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0
X2Z1bGxzY3JlZW4KKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzQ2xhc3MKK1dFQktJVF9UWVBFX1dJTkRPV19QUk9QRVJUSUVTCitXRUJLSVRfV0lORE9XX1BS
T1BFUlRJRVMKK1dFQktJVF9JU19XSU5ET1dfUFJPUEVSVElFUworV0VCS0lUX1dJTkRPV19QUk9Q
RVJUSUVTX0NMQVNTCitXRUJLSVRfSVNfV0lORE9XX1BST1BFUlRJRVNfQ0xBU1MKK1dFQktJVF9X
SU5ET1dfUFJPUEVSVElFU19HRVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktp
dFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlCit3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X3R5
cGUKKzwvU0VDVElPTj4KKworPFNFQ1RJT04+CiA8RklMRT5XZWJLaXRFcnJvcjwvRklMRT4KIFdF
QktJVF9ORVRXT1JLX0VSUk9SCiBXRUJLSVRfUExVR0lOX0VSUk9SCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXgg
YTE5NmI5Yy4uMDVmZjE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtNywzICs3LDUgQEAgd2Via2l0X2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF90eXBlCiB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9n
ZXRfdHlwZQogd2Via2l0X3NldHRpbmdzX2dldF90eXBlCiB3ZWJraXRfdXJpX3Jlc3BvbnNlX2dl
dF90eXBlCit3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3R5cGUKK3dlYmtpdF93aW5kb3dfcHJvcGVy
dGllc19nZXRfdHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYlZpZXcuY3BwCmluZGV4IGNiNTc4MTYuLjlhMTM0
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRXZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9UZXN0V2ViS2l0V2ViVmlldy5jcHAKQEAgLTE5LDcgKzE5LDkgQEAKIAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0RlZmF1bHRDb250
ZXh0KFdlYlZpZXdUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewpAQCAtOTYsNiArOTgsNzgg
QEAgcHVibGljOgogICAgICAgICBQcm9tcHQKICAgICB9OwogCisgICAgY2xhc3MgV2luZG93UHJv
cGVydGllcyB7CisgICAgcHVibGljOgorICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKCkKKyAgICAg
ICAgICAgIDogbV90b29sYmFyVmlzaWJsZSh0cnVlKQorICAgICAgICAgICAgLCBtX3N0YXR1c2Jh
clZpc2libGUodHJ1ZSkKKyAgICAgICAgICAgICwgbV9zY3JvbGxiYXJzVmlzaWJsZSh0cnVlKQor
ICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxlKHRydWUpCisgICAgICAgICAgICAsIG1fbG9j
YXRpb25iYXJWaXNpYmxlKHRydWUpCisgICAgICAgICAgICAsIG1fcmVzaXphYmxlKHRydWUpCisg
ICAgICAgICAgICAsIG1fZnVsbHNjcmVlbihmYWxzZSkKKyAgICAgICAgeworICAgICAgICAgICAg
bWVtc2V0KCZtX2dlb21ldHJ5LCAwLCBzaXplb2YoR2RrUmVjdGFuZ2xlKSk7CisgICAgICAgIH0K
KworICAgICAgICBXaW5kb3dQcm9wZXJ0aWVzKFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRv
d1Byb3BlcnRpZXMpCisgICAgICAgICAgICA6IG1fdG9vbGJhclZpc2libGUod2Via2l0X3dpbmRv
d19wcm9wZXJ0aWVzX2dldF90b29sYmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisgICAg
ICAgICAgICAsIG1fc3RhdHVzYmFyVmlzaWJsZSh3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0
X3N0YXR1c2Jhcl92aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAgICAgLCBtX3Nj
cm9sbGJhcnNWaXNpYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfc2Nyb2xsYmFyc192
aXNpYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAgICAgLCBtX21lbnViYXJWaXNpYmxl
KHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfbWVudWJhcl92aXNpYmxlKHdpbmRvd1Byb3Bl
cnRpZXMpKQorICAgICAgICAgICAgLCBtX2xvY2F0aW9uYmFyVmlzaWJsZSh3ZWJraXRfd2luZG93
X3Byb3BlcnRpZXNfZ2V0X2xvY2F0aW9uYmFyX3Zpc2libGUod2luZG93UHJvcGVydGllcykpCisg
ICAgICAgICAgICAsIG1fcmVzaXphYmxlKHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfcmVz
aXphYmxlKHdpbmRvd1Byb3BlcnRpZXMpKQorICAgICAgICAgICAgLCBtX2Z1bGxzY3JlZW4od2Vi
a2l0X3dpbmRvd19wcm9wZXJ0aWVzX2dldF9mdWxsc2NyZWVuKHdpbmRvd1Byb3BlcnRpZXMpKQor
ICAgICAgICB7CisgICAgICAgICAgICB3ZWJraXRfd2luZG93X3Byb3BlcnRpZXNfZ2V0X2dlb21l
dHJ5KHdpbmRvd1Byb3BlcnRpZXMsICZtX2dlb21ldHJ5KTsKKyAgICAgICAgfQorCisgICAgICAg
IFdpbmRvd1Byb3BlcnRpZXMoR2RrUmVjdGFuZ2xlKiBnZW9tZXRyeSwgYm9vbCB0b29sYmFyVmlz
aWJsZSwgYm9vbCBzdGF0dXNiYXJWaXNpYmxlLCBib29sIHNjcm9sbGJhcnNWaXNpYmxlLCBib29s
IG1lbnViYXJWaXNpYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbG9jYXRpb25i
YXJWaXNpYmxlLCBib29sIHJlc2l6YWJsZSwgYm9vbCBmdWxsc2NyZWVuKQorICAgICAgICAgICAg
OiBtX2dlb21ldHJ5KCpnZW9tZXRyeSkKKyAgICAgICAgICAgICwgbV90b29sYmFyVmlzaWJsZSh0
b29sYmFyVmlzaWJsZSkKKyAgICAgICAgICAgICwgbV9zdGF0dXNiYXJWaXNpYmxlKHN0YXR1c2Jh
clZpc2libGUpCisgICAgICAgICAgICAsIG1fc2Nyb2xsYmFyc1Zpc2libGUoc2Nyb2xsYmFyc1Zp
c2libGUpCisgICAgICAgICAgICAsIG1fbWVudWJhclZpc2libGUobWVudWJhclZpc2libGUpCisg
ICAgICAgICAgICAsIG1fbG9jYXRpb25iYXJWaXNpYmxlKGxvY2F0aW9uYmFyVmlzaWJsZSkKKyAg
ICAgICAgICAgICwgbV9yZXNpemFibGUocmVzaXphYmxlKQorICAgICAgICAgICAgLCBtX2Z1bGxz
Y3JlZW4oZnVsbHNjcmVlbikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFdpbmRvd1Byb3BlcnRpZXMmIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9nZW9tZXRyeS54ID09IG90aGVyLm1fZ2VvbWV0cnkueAor
ICAgICAgICAgICAgICAgICYmIG1fZ2VvbWV0cnkueSA9PSBvdGhlci5tX2dlb21ldHJ5LnkKKyAg
ICAgICAgICAgICAgICAmJiBtX2dlb21ldHJ5LndpZHRoID09IG90aGVyLm1fZ2VvbWV0cnkud2lk
dGgKKyAgICAgICAgICAgICAgICAmJiBtX2dlb21ldHJ5LmhlaWdodCA9PSBvdGhlci5tX2dlb21l
dHJ5LmhlaWdodAorICAgICAgICAgICAgICAgICYmIG1fdG9vbGJhclZpc2libGUgPT0gb3RoZXIu
bV90b29sYmFyVmlzaWJsZQorICAgICAgICAgICAgICAgICYmIG1fc3RhdHVzYmFyVmlzaWJsZSA9
PSBvdGhlci5tX3N0YXR1c2JhclZpc2libGUKKyAgICAgICAgICAgICAgICAmJiBtX3Njcm9sbGJh
cnNWaXNpYmxlID09IG90aGVyLm1fc2Nyb2xsYmFyc1Zpc2libGUKKyAgICAgICAgICAgICAgICAm
JiBtX21lbnViYXJWaXNpYmxlID09IG90aGVyLm1fbWVudWJhclZpc2libGUKKyAgICAgICAgICAg
ICAgICAmJiBtX2xvY2F0aW9uYmFyVmlzaWJsZSA9PSBvdGhlci5tX2xvY2F0aW9uYmFyVmlzaWJs
ZQorICAgICAgICAgICAgICAgICYmIG1fcmVzaXphYmxlID09IG90aGVyLm1fcmVzaXphYmxlCisg
ICAgICAgICAgICAgICAgJiYgbV9mdWxsc2NyZWVuID09IG90aGVyLm1fZnVsbHNjcmVlbjsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgR2RrUmVjdGFuZ2xlIG1fZ2VvbWV0cnk7
CisKKyAgICAgICAgYm9vbCBtX3Rvb2xiYXJWaXNpYmxlOworICAgICAgICBib29sIG1fc3RhdHVz
YmFyVmlzaWJsZTsKKyAgICAgICAgYm9vbCBtX3Njcm9sbGJhcnNWaXNpYmxlOworICAgICAgICBi
b29sIG1fbWVudWJhclZpc2libGU7CisgICAgICAgIGJvb2wgbV9sb2NhdGlvbmJhclZpc2libGU7
CisKKyAgICAgICAgYm9vbCBtX3Jlc2l6YWJsZTsKKyAgICAgICAgYm9vbCBtX2Z1bGxzY3JlZW47
CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHdpbmRvd1Byb3BlcnRpZXNOb3RpZnlDYWxsYmFj
ayhHT2JqZWN0KiwgR1BhcmFtU3BlYyogcGFyYW1TcGVjLCBVSUNsaWVudFRlc3QqIHRlc3QpCisg
ICAgeworICAgICAgICB0ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmFkZChnX3BhcmFt
X3NwZWNfZ2V0X25hbWUocGFyYW1TcGVjKSk7CisgICAgfQorCiAgICAgc3RhdGljIHZvaWQgdmll
d0Nsb3NlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFVJQ2xpZW50VGVzdCogdGVzdCkKICAgICB7
CiAgICAgICAgIGdfYXNzZXJ0KHdlYlZpZXcgIT0gdGVzdC0+bV93ZWJWaWV3KTsKQEAgLTExMCw2
ICsxODQsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgZ19hc3NlcnQod2ViVmlldyAhPSB0
ZXN0LT5tX3dlYlZpZXcpOwogCisgICAgICAgIFdlYktpdFdpbmRvd1Byb3BlcnRpZXMqIHdpbmRv
d1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19wcm9wZXJ0aWVzKHdlYlZp
ZXcpOworICAgICAgICBnX2Fzc2VydCh3aW5kb3dQcm9wZXJ0aWVzKTsKKyAgICAgICAgZ19hc3Nl
cnQoV2luZG93UHJvcGVydGllcyh3aW5kb3dQcm9wZXJ0aWVzKSA9PSB0ZXN0LT5tX3dpbmRvd1By
b3BlcnRpZXMpOworCiAgICAgICAgIHRlc3QtPm1fd2ViVmlld0V2ZW50cy5hcHBlbmQoUmVhZHlU
b1Nob3cpOwogICAgIH0KIApAQCAtMTIyLDYgKzIwMCwxMiBAQCBwdWJsaWM6CiAKICAgICAgICAg
dGVzdC0+bV93ZWJWaWV3RXZlbnRzLmFwcGVuZChDcmVhdGUpOwogCisgICAgICAgIFdlYktpdFdp
bmRvd1Byb3BlcnRpZXMqIHdpbmRvd1Byb3BlcnRpZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dp
bmRvd19wcm9wZXJ0aWVzKFdFQktJVF9XRUJfVklFVyhuZXdXZWJWaWV3KSk7CisgICAgICAgIGdf
YXNzZXJ0KHdpbmRvd1Byb3BlcnRpZXMpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0Rl
bGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdpbmRvd1Byb3BlcnRpZXMpKTsKKyAgICAg
ICAgdGVzdC0+bV93aW5kb3dQcm9wZXJ0aWVzQ2hhbmdlZC5jbGVhcigpOworICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KHdpbmRvd1Byb3BlcnRpZXMsICJub3RpZnkiLCBHX0NBTExCQUNLKHdpbmRv
d1Byb3BlcnRpZXNOb3RpZnlDYWxsYmFjayksIHRlc3QpOworCiAgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QobmV3V2ViVmlldywgInJlYWR5LXRvLXNob3ciLCBHX0NBTExCQUNLKHZpZXdSZWFkeVRv
U2hvdyksIHRlc3QpOwogICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG5ld1dlYlZpZXcsICJjbG9z
ZSIsIEdfQ0FMTEJBQ0sodmlld0Nsb3NlKSwgdGVzdCk7CiAKQEAgLTE5MCw5ICsyNzQsMTYgQEAg
cHVibGljOgogICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiAgICAgfQogCisg
ICAgdm9pZCBzZXRFeHBlY3RlZFdpbmRvd1Byb3BlcnRpZXMoY29uc3QgV2luZG93UHJvcGVydGll
cyYgd2luZG93UHJvcGVydGllcykKKyAgICB7CisgICAgICAgIG1fd2luZG93UHJvcGVydGllcyA9
IHdpbmRvd1Byb3BlcnRpZXM7CisgICAgfQorCiAgICAgVmVjdG9yPFdlYlZpZXdFdmVudHM+IG1f
d2ViVmlld0V2ZW50czsKICAgICBTY3JpcHRUeXBlIG1fc2NyaXB0VHlwZTsKICAgICBib29sIG1f
c2NyaXB0RGlhbG9nQ29uZmlybWVkOworICAgIFdpbmRvd1Byb3BlcnRpZXMgbV93aW5kb3dQcm9w
ZXJ0aWVzOworICAgIEhhc2hTZXQ8V1RGOjpTdHJpbmc+IG1fd2luZG93UHJvcGVydGllc0NoYW5n
ZWQ7CiB9OwogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViVmlld0NyZWF0ZVJlYWR5Q2xvc2UoVUlDbGll
bnRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQpAQCAtMjMzLDYgKzMyNCwyOSBAQCBzdGF0aWMg
dm9pZCB0ZXN0V2ViVmlld0phdmFTY3JpcHREaWFsb2dzKFVJQ2xpZW50VGVzdCogdGVzdCwgZ2Nv
bnN0cG9pbnRlcikKICAgICB0ZXN0LT53YWl0VW50aWxNYWluTG9vcEZpbmlzaGVzKCk7CiB9CiAK
K3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3V2luZG93UHJvcGVydGllcyhVSUNsaWVudFRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHdpbmRvd1Byb3Jw
ZXJ0aWVzU3RyaW5nID0gImxlZnQ9MTAwLHRvcD0xNTAsd2lkdGg9ODAwLGhlaWdodD02MDAsbG9j
YXRpb249bm8sbWVudWJhcj1ubyxzdGF0dXM9bm8sdG9vbGJhcj1ubyxzY3JvbGxiYXJzPW5vIjsK
KyAgICBHZGtSZWN0YW5nbGUgZ2VvbWV0cnkgPSB7IDEwMCwgMTUwLCA4MDAsIDYwMCB9OworICAg
IHRlc3QtPnNldEV4cGVjdGVkV2luZG93UHJvcGVydGllcyhVSUNsaWVudFRlc3Q6OldpbmRvd1By
b3BlcnRpZXMoJmdlb21ldHJ5LCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRy
dWUsIGZhbHNlKSk7CisKKyAgICBHT3duUHRyPGNoYXI+IGh0bWxTdHJpbmcoZ19zdHJkdXBfcHJp
bnRmKCI8aHRtbD48Ym9keSBvbkxvYWQ9XCJ3aW5kb3cub3BlbignJywgJycsICclcycpLmNsb3Nl
KCk7XCI+PC9ib2R5PjwvaHRtbD4iLCB3aW5kb3dQcm9ycGVydGllc1N0cmluZykpOworICAgIHRl
c3QtPmxvYWRIdG1sKGh0bWxTdHJpbmcuZ2V0KCksIDApOworICAgIHRlc3QtPndhaXRVbnRpbE1h
aW5Mb29wRmluaXNoZXMoKTsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBwcm9wZXJ0aWVzQ2hh
bmdlZFtdID0geworICAgICAgICAiZ2VvbWV0cnkiLCAibG9jYXRpb25iYXItdmlzaWJsZSIsICJt
ZW51YmFyLXZpc2libGUiLCAic3RhdHVzYmFyLXZpc2libGUiLCAidG9vbGJhci12aXNpYmxlIiwg
InNjcm9sbGJhcnMtdmlzaWJsZSIKKyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
R19OX0VMRU1FTlRTKHByb3BlcnRpZXNDaGFuZ2VkKTsgKytpKQorICAgICAgICBnX2Fzc2VydCh0
ZXN0LT5tX3dpbmRvd1Byb3BlcnRpZXNDaGFuZ2VkLmNvbnRhaW5zKHByb3BlcnRpZXNDaGFuZ2Vk
W2ldKSk7CisKKyAgICBWZWN0b3I8VUlDbGllbnRUZXN0OjpXZWJWaWV3RXZlbnRzPiYgZXZlbnRz
ID0gdGVzdC0+bV93ZWJWaWV3RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6
ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIFVJQ2xpZW50
VGVzdDo6Q3JlYXRlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgVUlDbGll
bnRUZXN0OjpSZWFkeVRvU2hvdyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0s
IFVJQ2xpZW50VGVzdDo6Q2xvc2UpOworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7CiAgICAgV2Vi
Vmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2Vi
Vmlld0RlZmF1bHRDb250ZXh0KTsKQEAgLTI0MSw2ICszNTUsNyBAQCB2b2lkIGJlZm9yZUFsbCgp
CiAgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJzZXR0aW5ncyIsIHRlc3RX
ZWJWaWV3U2V0dGluZ3MpOwogICAgIFVJQ2xpZW50VGVzdDo6YWRkKCJXZWJLaXRXZWJWaWV3Iiwg
ImNyZWF0ZS1yZWFkeS1jbG9zZSIsIHRlc3RXZWJWaWV3Q3JlYXRlUmVhZHlDbG9zZSk7CiAgICAg
VUlDbGllbnRUZXN0OjphZGQoIldlYktpdFdlYlZpZXciLCAiamF2YXNjcmlwdC1kaWFsb2dzIiwg
dGVzdFdlYlZpZXdKYXZhU2NyaXB0RGlhbG9ncyk7CisgICAgVUlDbGllbnRUZXN0OjphZGQoIldl
YktpdFdlYlZpZXciLCAid2luZG93LXByb3BlcnRpZXMiLCB0ZXN0V2ViVmlld1dpbmRvd1Byb3Bl
cnRpZXMpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaAppbmRleCBjNTA4OGFkLi4zYTRhZjRjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRXZWJMb2FkZXJDbGllbnQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dl
YktpdFdlYlZpZXdCYXNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3Lmg+Cisj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+CiAKICN1bmRlZiBfX1dF
QktJVDJfSF9JTlNJREVfXwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViVUlDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlVJQ2xpZW50LmNw
cAppbmRleCA0MDM4NGY4Li5kMDEzMTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViVUlDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJV
SUNsaWVudC5jcHAKQEAgLTY0LDYgKzY0LDcgQEAgUGFzc1JlZlB0cjxXZWJQYWdlUHJveHk+IFdl
YlVJQ2xpZW50OjpjcmVhdGVOZXdQYWdlKFdlYlBhZ2VQcm94eSogcGFnZSwgY29uc3QgUmUKICAg
ICBtYXAuc2V0KCJtZW51QmFyVmlzaWJsZSIsIFdlYkJvb2xlYW46OmNyZWF0ZSh3aW5kb3dGZWF0
dXJlcy5tZW51QmFyVmlzaWJsZSkpOwogICAgIG1hcC5zZXQoInN0YXR1c0JhclZpc2libGUiLCBX
ZWJCb29sZWFuOjpjcmVhdGUod2luZG93RmVhdHVyZXMuc3RhdHVzQmFyVmlzaWJsZSkpOwogICAg
IG1hcC5zZXQoInRvb2xCYXJWaXNpYmxlIiwgV2ViQm9vbGVhbjo6Y3JlYXRlKHdpbmRvd0ZlYXR1
cmVzLnRvb2xCYXJWaXNpYmxlKSk7CisgICAgbWFwLnNldCgibG9jYXRpb25CYXJWaXNpYmxlIiwg
V2ViQm9vbGVhbjo6Y3JlYXRlKHdpbmRvd0ZlYXR1cmVzLmxvY2F0aW9uQmFyVmlzaWJsZSkpOwog
ICAgIG1hcC5zZXQoInNjcm9sbGJhcnNWaXNpYmxlIiwgV2ViQm9vbGVhbjo6Y3JlYXRlKHdpbmRv
d0ZlYXR1cmVzLnNjcm9sbGJhcnNWaXNpYmxlKSk7CiAgICAgbWFwLnNldCgicmVzaXphYmxlIiwg
V2ViQm9vbGVhbjo6Y3JlYXRlKHdpbmRvd0ZlYXR1cmVzLnJlc2l6YWJsZSkpOwogICAgIG1hcC5z
ZXQoImZ1bGxzY3JlZW4iLCBXZWJCb29sZWFuOjpjcmVhdGUod2luZG93RmVhdHVyZXMuZnVsbHNj
cmVlbikpOwo=
</data>
<flag name="review"
          id="119397"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>