<?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>150604</bug_id>
          
          <creation_ts>2015-10-27 14:22:30 -0700</creation_ts>
          <short_desc>Implement viewport-width-based fast-click heuristic</short_desc>
          <delta_ts>2016-01-23 19:53:32 -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>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>iPhone / iPad</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>122212</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>18runt88</cc>
    
    <cc>andre</cc>
    
    <cc>benjamin</cc>
    
    <cc>bruno</cc>
    
    <cc>hello</cc>
    
    <cc>jonlee</cc>
    
    <cc>redux</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1136926</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-10-27 14:22:30 -0700</bug_when>
    <thetext>Remove the experimental scroll/zoom-based heuristics for fast-clicking and replace it with a heuristic based on viewport width and current zoom scale. If the viewport width is equal to the device width and the user has not zoomed yet (i.e. at initial scale) then fire fast clicks instead of double taps. In all other cases, perform the old behavior. To make this optimization useful for width = device-width websites with scalable viewports, we also make double-tap-to-zoom-out change the viewport scale to be the initial scale rather than the min scale.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136927</commentid>
    <comment_count>1</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-10-27 14:23:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/23267308&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136945</commentid>
    <comment_count>2</comment_count>
      <attachid>264163</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-10-27 14:49:18 -0700</bug_when>
    <thetext>Created attachment 264163
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136956</commentid>
    <comment_count>3</comment_count>
      <attachid>264163</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-27 15:27:55 -0700</bug_when>
    <thetext>Comment on attachment 264163
Patch

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

Looks good but I would like to see a new version that removes some of the NSUserDefaults calls.

&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h:231
&gt; +    double viewportWidth() const { return m_viewportWidth; }
&gt; +    void setViewportWidth(double width) { m_viewportWidth = width; }

This name here is too ambiguous I think. We use the term &quot;viewport&quot; in a number of ways, but this one specifically applies to the contents of the viewport meta tag, right?

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:3080
&gt; +    if ([[NSUserDefaults standardUserDefaults] boolForKey:@&quot;WebKitFastClickingDisabled&quot;])
&gt; +        return YES;

I think you should cache this pref and not check it every time.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h:112
&gt; +@property (nonatomic, readonly) BOOL _allowDoubleTapGestures;

This would be better as _allowsDoubleTapGestures

&gt; Source/WebKit2/UIProcess/PageClient.h:297
&gt; +    virtual void disableDoubleTapGesturesDuringTapIfNotAlreadyDisabled(uint64_t requestID) = 0;

Is the &quot;IfNotAlreadyDisabled&quot; useful?

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h:186
&gt; +- (BOOL)_singleTapMayModifyDoubleTapGesturesEnabled;

This needs a new name that is easier to parse.

&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:836
&gt; +    return [[NSUserDefaults standardUserDefaults] boolForKey:@&quot;WebKitShowFastClickDebugTapHighlights&quot;];

Not a fan of consulting prefs several times on every link tap. Should these be WK2 prefs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136960</commentid>
    <comment_count>4</comment_count>
      <attachid>264163</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-10-27 15:40:38 -0700</bug_when>
    <thetext>Comment on attachment 264163
Patch

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

&gt;&gt; Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h:231
&gt;&gt; +    void setViewportWidth(double width) { m_viewportWidth = width; }
&gt; 
&gt; This name here is too ambiguous I think. We use the term &quot;viewport&quot; in a number of ways, but this one specifically applies to the contents of the viewport meta tag, right?

Yes -- good point. viewportMetaTagWidth would be a more appropriate name, especially since it can take on values like ViewportArguments::ValueDeviceWidth (a.k.a. -2)

&gt;&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:3080
&gt;&gt; +        return YES;
&gt; 
&gt; I think you should cache this pref and not check it every time.

Sounds good -- I&apos;ll store the flag.

&gt;&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebViewInternal.h:112
&gt;&gt; +@property (nonatomic, readonly) BOOL _allowDoubleTapGestures;
&gt; 
&gt; This would be better as _allowsDoubleTapGestures

Renamed.

&gt;&gt; Source/WebKit2/UIProcess/PageClient.h:297
&gt;&gt; +    virtual void disableDoubleTapGesturesDuringTapIfNotAlreadyDisabled(uint64_t requestID) = 0;
&gt; 
&gt; Is the &quot;IfNotAlreadyDisabled&quot; useful?

It was originally &quot;IfNecessary&quot;, but I thought that might be a bit too vague -- I&apos;ll change it back (I think it&apos;s important to keep the &quot;IfNecessary&quot; though, since we will ignore the message in the UI process if it&apos;s redundant, e.g. touch-action: manipulation in a device-width viewport).

&gt;&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.h:186
&gt;&gt; +- (BOOL)_singleTapMayModifyDoubleTapGesturesEnabled;
&gt; 
&gt; This needs a new name that is easier to parse.

Agreed -- maybe _mayDisableDoubleTapGesturesDuringSingleTap?

&gt;&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:836
&gt;&gt; +    return [[NSUserDefaults standardUserDefaults] boolForKey:@&quot;WebKitShowFastClickDebugTapHighlights&quot;];
&gt; 
&gt; Not a fan of consulting prefs several times on every link tap. Should these be WK2 prefs?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136971</commentid>
    <comment_count>5</comment_count>
      <attachid>264163</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-10-27 16:26:46 -0700</bug_when>
    <thetext>Comment on attachment 264163
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:836
&gt;&gt;&gt; +    return [[NSUserDefaults standardUserDefaults] boolForKey:@&quot;WebKitShowFastClickDebugTapHighlights&quot;];
&gt;&gt; 
&gt;&gt; Not a fan of consulting prefs several times on every link tap. Should these be WK2 prefs?
&gt; 
&gt; Will do.

(as in, will cache the values for now). If we decide to go with this heuristic, I&apos;ll make a new patch that puts all the relevant fast-clicking options into WKPreferences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136979</commentid>
    <comment_count>6</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-10-27 16:35:39 -0700</bug_when>
    <thetext>Committed r191644: &lt;http://trac.webkit.org/changeset/191644&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136989</commentid>
    <comment_count>7</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-10-27 17:01:28 -0700</bug_when>
    <thetext>*** Bug 150469 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137069</commentid>
    <comment_count>8</comment_count>
    <who name="Patrick H. Lauke">redux</who>
    <bug_when>2015-10-28 00:19:54 -0700</bug_when>
    <thetext>Just wanted to mention how happy it makes me to see this. Great stuff!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149377</commentid>
    <comment_count>9</comment_count>
    <who name="hexalys">bruno</who>
    <bug_when>2015-12-15 13:48:08 -0800</bug_when>
    <thetext>I am noting that the webkit blog post&apos;s language and this bug appear specific to `device-with` only in terms of width qualifying for the fastclick behavior. Does or should the fast-click optimization cover a &apos;custom-viewport-width &lt; viewport-width&apos; as well?

If not already covered, I think that a viewport or &apos;width=300,initial-scale=1.0&apos; should also assume the fast-tap behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149380</commentid>
    <comment_count>10</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2015-12-15 13:59:44 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; I am noting that the webkit blog post&apos;s language and this bug appear
&gt; specific to `device-with` only in terms of width qualifying for the
&gt; fastclick behavior. Does or should the fast-click optimization cover a
&gt; &apos;custom-viewport-width &lt; viewport-width&apos; as well?
&gt; 
&gt; If not already covered, I think that a viewport or
&gt; &apos;width=300,initial-scale=1.0&apos; should also assume the fast-tap behavior.

Currently, we only support fast-clicking for scalable viewports at width=device-width. We experimented with extending this to width &lt; device-width as well, but were concerned that the ability to fast-click would differ when changing device orientation, which would be confusing to some users.

We are considering ways to further extend fast-clicking behavior to scalable web pages. One way would be to do what you described, but instead of using device-width, use the smaller of the two device dimensions (width vs. height) to make behavior consistent across orientations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149382</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Rebert">webkit</who>
    <bug_when>2015-12-15 14:01:56 -0800</bug_when>
    <thetext>The blog post: https://webkit.org/blog/5610/more-responsive-tapping-on-ios/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1149392</commentid>
    <comment_count>12</comment_count>
    <who name="hexalys">bruno</who>
    <bug_when>2015-12-15 14:34:37 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; Currently, we only support fast-clicking for scalable viewports at
&gt; width=device-width. We experimented with extending this to width &lt;
&gt; device-width as well, but were concerned that the ability to fast-click
&gt; would differ when changing device orientation, which would be confusing to
&gt; some users.

OK, makes sense in that respect. It could however apply during a screen lock.
Or Screen.lockOrientation() context whenever it gets implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156108</commentid>
    <comment_count>13</comment_count>
    <who name="André Hänsel">andre</who>
    <bug_when>2016-01-15 21:00:07 -0800</bug_when>
    <thetext>I just noticed that on some of my pages the double-tap-and-hold gesture is broken. I use this gesture a lot because pinch-zoom is difficult (and dangerous if you&apos;re walking next to a drain :)) with one hand on large devices.

While analyzing the issue I found that it seems to be only on pages that have width=device-width set, which led me to this bug.

Shouldn&apos;t the zoom functionality not only be removed from clickable elements?

So if a tap hits no element that is a link, has an onclick handler bound or a focus-sensitive pseudoclass - basically if a tap has no effect - the zoom should still work after a subsequent tap-and-hold?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156558</commentid>
    <comment_count>14</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2016-01-19 00:12:41 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; I just noticed that on some of my pages the double-tap-and-hold gesture is
&gt; broken. I use this gesture a lot because pinch-zoom is difficult (and
&gt; dangerous if you&apos;re walking next to a drain :)) with one hand on large
&gt; devices.
&gt; 
&gt; While analyzing the issue I found that it seems to be only on pages that
&gt; have width=device-width set, which led me to this bug.
&gt; 
&gt; Shouldn&apos;t the zoom functionality not only be removed from clickable elements?
&gt; 
&gt; So if a tap hits no element that is a link, has an onclick handler bound or
&gt; a focus-sensitive pseudoclass - basically if a tap has no effect - the zoom
&gt; should still work after a subsequent tap-and-hold?

Could you file a new bug for this, and include an example showing the issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1158084</commentid>
    <comment_count>15</comment_count>
    <who name="André Hänsel">andre</who>
    <bug_when>2016-01-23 19:53:32 -0800</bug_when>
    <thetext>Done: https://bugs.webkit.org/show_bug.cgi?id=153402</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264163</attachid>
            <date>2015-10-27 14:49:18 -0700</date>
            <delta_ts>2015-10-27 15:27:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150604-20151027144828.patch</filename>
            <type>text/plain</type>
            <size>49665</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxNDUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWIyNDBhM2Y5NzRjY2Y2
MGUwYzJhYWVkNDkyNWE2NGZiZjhiZGEyMy4uMjE1MWY1MmZlOGVmNTM3NzE2MDIzODUyOGYxNTFi
N2U2M2ZlYzBlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg1IEBACisyMDE1LTEwLTI3ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCB2
aWV3cG9ydC13aWR0aC1iYXNlZCBmYXN0LWNsaWNrIGhldXJpc3RpYworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNjA0CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS8yMzI2NzMwOD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbXBsZW1lbnQgYSBuZXcgZmFzdC1jbGljayBoZXVyaXN0aWMgdGhhdCBhcHBs
aWVzIHRvIHZpZXdwb3J0cyB3aXRoIHdpZHRoID0gZGV2aWNlLXdpZHRoLiBUaGUgYmFzaWMgcnVs
ZXMgYXJlCisgICAgICAgIGFzIGZvbGxvd3M6IHdoZW4gYSBwYWdlIGhhcyB2aWV3cG9ydCB3aWR0
aCA9IGRldmljZS13aWR0aCBhbmQgaXMgYXQgaW5pdGlhbCB6b29tIHNjYWxlLCB3ZSBkaXNhYmxl
IGRvdWJsZS10YXBwaW5nCisgICAgICAgIGluIGZhdm9yIG9mIGZhc3QtY2xpY2tpbmcuIEhvd2V2
ZXIsIGlmIHRoZSB2aWV3cG9ydCBzY2FsZSBpcyBub3QgdGhlIGluaXRpYWwgc2NhbGUsIHdlIGFs
bG93IGRvdWJsZSB0YXBwaW5nLiBGb3IKKyAgICAgICAgZmFzdC1jbGlja2luZyB0byByZW1haW4g
dXNlZnVsIGFmdGVyIHRoZSB1c2VyIHBpbmNoLXpvb21zLCB3ZSBjaGFuZ2Ugb3VyIGRvdWJsZS10
YXAgdG8gem9vbSBvdXQgYmVoYXZpb3IgdG8gem9vbQorICAgICAgICB0byB0aGUgaW5pdGlhbCBz
Y2FsZSByYXRoZXIgdGhhbiB0aGUgbWluaW11bSBzY2FsZS4gRm9yIHVuc2NhbGFibGUgdmlld3Bv
cnRzLCB3ZSBkZWZhdWx0IHRvIGZhc3QtY2xpY2tpbmcgYmVoYXZpb3IsCisgICAgICAgIGFuZCBm
b3IgYWxsIG90aGVyIHZpZXdwb3J0cyBub3QgYXQgZGV2aWNlLXdpZHRoLCB3ZSBkb3VibGUtdGFw
IHRvIHpvb20gYW5kIHNjcm9sbCBhcyBub3JtYWwuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZW1v
dmVzIHNvbWUgbG9naWMgcHJldmlvdXNseSB1c2VkIGZvciBvdXIgc2Nyb2xsLSBhbmQgem9vbS1i
YXNlZCBmYXN0LWNsaWNraW5nIGhldXJpc3RpYywgYW5kIGFkZHMKKyAgICAgICAgaW5mb3JtYXRp
b24gYWJvdXQgdGhlIHZpZXdwb3J0IHdpZHRoIGFuZCBpbml0aWFsIHNjYWxlIHRvIFJlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9ucy4gVGhpcyBpbmZvcm1hdGlvbiBpcyB0aGVuCisgICAgICAgIHVz
ZWQgYnkgdGhlIFVJIHByb2Nlc3MgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgZG91YmxlIHRhcHBpbmcg
c2hvdWxkIGJlIGRpc2FibGVkIG9yIGVuYWJsZWQuCisKKyAgICAgICAgVGhlIGZhc3QtY2xpY2sg
aGV1cmlzdGljIGNhbiBiZSB0dXJuZWQgb2ZmIHRocm91Z2ggdXNlciBkZWZhdWx0IHByZWZlcmVu
Y2VzLCBhbmQgYSB0YXAgaGlnaGxpZ2h0IGZvciBkZWJ1Z2dpbmcKKyAgICAgICAgZmFzdC1jbGlj
a2luZyBjYW4gYWxzbyBiZSBlbmFibGVkIHRocm91Z2ggYSB1c2VyIGRlZmF1bHQgcHJlZmVyZW5j
ZS4gQSByZWQgaGlnaGxpZ2h0IGluZGljYXRlcyB0aGF0IGEgc2luZ2xlLQorICAgICAgICB0YXAg
d2FzIHNsb3csIHdoZXJlYXMgYSBncmVlbiBoaWdobGlnaHQgaW5kaWNhdGVzIGEgZmFzdCBzaW5n
bGUtdGFwLgorCisgICAgICAgICogU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bi5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6aW5pdGlh
bFNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246OnNldEluaXRpYWxTY2FsZUZhY3Rvcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVy
VHJlZVRyYW5zYWN0aW9uOjp2aWV3cG9ydFdpZHRoKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
TGF5ZXJUcmVlVHJhbnNhY3Rpb246OnNldFZpZXdwb3J0V2lkdGgpOgorICAgICAgICAqIFNoYXJl
ZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IGluaXRXaXRoRnJhbWU6
Y29uZmlndXJhdGlvbjpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9wcm9jZXNzRGlkRXhpdF0p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgX2RpZENvbW1pdExheWVyVHJlZTpdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF96b29tVG9Jbml0aWFsU2NhbGVXaXRoT3JpZ2luOmFuaW1hdGVkOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgX2FsbG93RG91YmxlVGFwR2VzdHVyZXNdKToKKyAgICAgICAg
KC1bV0tXZWJWaWV3IF9zZXRWaWV3cG9ydE1ldGFUYWdXaWR0aDpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tXZWJWaWV3IF9jb250ZW50Wm9vbVNjYWxlXSk6IERlbGV0ZWQuCisgICAgICAgICgt
W1dLV2ViVmlldyBfdmlld3BvcnRNZXRhVGFnV2lkdGhdKTogRGVsZXRlZC4KKyAgICAgICAgKC1b
V0tXZWJWaWV3IF92aWV3cG9ydElzVXNlclNjYWxhYmxlXSk6IERlbGV0ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9Q
YWdlQ2xpZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaXNh
YmxlRG91YmxlVGFwR2VzdHVyZXNEdXJpbmdUYXBJZk5vdEFscmVhZHlEaXNhYmxlZCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaWRDaGFuZ2VWaWV3cG9ydE1ldGFUYWdXaWR0
aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpkaXNhYmxlRG91
YmxlVGFwR2VzdHVyZXNVbnRpbFRhcElzRmluaXNoZWRJZk5lY2Vzc2FyeSk6IERlbGV0ZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL2lvcy9TbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL2lvcy9TbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyLm1tOgor
ICAgICAgICAoV2ViS2l0OjpTbWFydE1hZ25pZmljYXRpb25Db250cm9sbGVyOjpkaWRDb2xsZWN0
R2VvbWV0cnlGb3JTbWFydE1hZ25pZmljYXRpb25HZXN0dXJlKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1dLQ29udGVudFZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXcubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3pvb21Ub0luaXRpYWxTY2FsZVdp
dGhPcmlnaW46XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfc2hvd1RhcEhpZ2hsaWdodF0pOgorICAg
ICAgICAoLVtXS0NvbnRlbnRWaWV3IF9zaG91bGRTaG93RGVidWdUYXBIaWdobGlnaHRzXSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgX2RpZEdldFRhcEhpZ2hsaWdodEZvclJlcXVlc3Q6Y29s
b3I6cXVhZHM6dG9wTGVmdFJhZGl1czp0b3BSaWdodFJhZGl1czpib3R0b21MZWZ0UmFkaXVzOmJv
dHRvbVJpZ2h0UmFkaXVzOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9zaW5nbGVUYXBN
YXlNb2RpZnlEb3VibGVUYXBHZXN0dXJlc0VuYWJsZWRdKToKKyAgICAgICAgKC1bV0tDb250ZW50
VmlldyBfZGlzYWJsZURvdWJsZVRhcEdlc3R1cmVzRHVyaW5nVGFwSWZOb3RBbHJlYWR5RGlzYWJs
ZWQ6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX2ZpbmlzaEludGVyYWN0aW9uXSk6Cisg
ICAgICAgICgtW1dLQ29udGVudFZpZXcgX2VuZFBvdGVudGlhbFRhcEFuZEVuYWJsZURvdWJsZVRh
cEdlc3R1cmVzSWZOZWNlc3NhcnldKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfdGFwSGln
aGxpZ2h0Q29sb3JGb3JGYXN0Q2xpY2s6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgX3Nl
dERvdWJsZVRhcEdlc3R1cmVzRW5hYmxlZDpdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBf
ZmFzdENsaWNrWm9vbVRocmVzaG9sZF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRW
aWV3IF9hbGxvd0RvdWJsZVRhcFRvWm9vbUZvckN1cnJlbnRab29tU2NhbGU6YW5kVGFyZ2V0Wm9v
bVNjYWxlOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9kaXNhYmxlRG91
YmxlVGFwR2VzdHVyZXNVbnRpbFRhcElzRmluaXNoZWRJZk5lY2Vzc2FyeTphbGxvd3NEb3VibGVU
YXBab29tOnRhcmdldFJlY3Q6aXNSZXBsYWNlZDptaW5pbXVtU2NhbGU6bWF4aW11bVNjYWxlOl0p
OiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OmRpc2FibGVEb3VibGVUYXBHZXN0dXJlc0R1
cmluZ1RhcElmTm90QWxyZWFkeURpc2FibGVkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5Ojp2aWV3cG9ydE1ldGFUYWdXaWR0aERpZENoYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6ZGlzYWJsZURvdWJsZVRhcEdlc3R1cmVzVW50aWxUYXBJc0Zp
bmlzaGVkSWZOZWNlc3NhcnkpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp3aWxsQ29tbWl0
TGF5ZXJUcmVlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBvdGVudGlhbFRhcEF0UG9zaXRpb24pOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp2aWV3cG9ydFByb3BlcnRpZXNEaWRDaGFuZ2UpOiBE
ZWxldGVkLgorCiAyMDE1LTEwLTIyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgogCiAgICAgICAgIEltcGxlbWVudCB0b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjsgZm9y
IGlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbi5oCmluZGV4IDhhMDBhM2M2OGIyY2IyYTYyZDk4OWM0MTllMWFlYzIyMTcw
NGQxYzEuLjViYzRkZjU2MzdiYTU3YmZkZjg1MDM1M2JhMGNjZjdjZDQ2YzEyYjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uLmgKQEAgLTIyNCw2ICsyMjQsMTIgQEAgcHVibGljOgogICAgIGRvdWJsZSBtYXhpbXVtU2Nh
bGVGYWN0b3IoKSBjb25zdCB7IHJldHVybiBtX21heGltdW1TY2FsZUZhY3RvcjsgfQogICAgIHZv
aWQgc2V0TWF4aW11bVNjYWxlRmFjdG9yKGRvdWJsZSBzY2FsZSkgeyBtX21heGltdW1TY2FsZUZh
Y3RvciA9IHNjYWxlOyB9CiAKKyAgICBkb3VibGUgaW5pdGlhbFNjYWxlRmFjdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9pbml0aWFsU2NhbGVGYWN0b3I7IH0KKyAgICB2b2lkIHNldEluaXRpYWxTY2Fs
ZUZhY3Rvcihkb3VibGUgc2NhbGUpIHsgbV9pbml0aWFsU2NhbGVGYWN0b3IgPSBzY2FsZTsgfQor
CisgICAgZG91YmxlIHZpZXdwb3J0V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0V2lk
dGg7IH0KKyAgICB2b2lkIHNldFZpZXdwb3J0V2lkdGgoZG91YmxlIHdpZHRoKSB7IG1fdmlld3Bv
cnRXaWR0aCA9IHdpZHRoOyB9CisKICAgICBib29sIGFsbG93c1VzZXJTY2FsaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9hbGxvd3NVc2VyU2NhbGluZzsgfQogICAgIHZvaWQgc2V0QWxsb3dzVXNlclNj
YWxpbmcoYm9vbCBhbGxvd3NVc2VyU2NhbGluZykgeyBtX2FsbG93c1VzZXJTY2FsaW5nID0gYWxs
b3dzVXNlclNjYWxpbmc7IH0KIApAQCAtMjU4LDYgKzI2NCw4IEBAIHByaXZhdGU6CiAgICAgZG91
YmxlIG1fcGFnZVNjYWxlRmFjdG9yIHsgMSB9OwogICAgIGRvdWJsZSBtX21pbmltdW1TY2FsZUZh
Y3RvciB7IDEgfTsKICAgICBkb3VibGUgbV9tYXhpbXVtU2NhbGVGYWN0b3IgeyAxIH07CisgICAg
ZG91YmxlIG1faW5pdGlhbFNjYWxlRmFjdG9yIHsgMSB9OworICAgIGRvdWJsZSBtX3ZpZXdwb3J0
V2lkdGggeyAtMSB9OwogICAgIHVpbnQ2NF90IG1fcmVuZGVyVHJlZVNpemUgeyAwIH07CiAgICAg
dWludDY0X3QgbV90cmFuc2FjdGlvbklEIHsgMCB9OwogICAgIFdlYkNvcmU6OkxheW91dE1pbGVz
dG9uZXMgbV9uZXdseVJlYWNoZWRMYXlvdXRNaWxlc3RvbmVzIHsgMCB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbSBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW0K
aW5kZXggN2U3YzkzMmMyZjBlZDExZTg4OWMxNTdiYTc0YjQ5MjkzNDU0MWIwMi4uZWJjNTEyYzNl
ZDg4MGNmYTBmNzFiNGUwNDg4NWU4OWY3ZjMxYmQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCkBAIC01MTcs
NiArNTE3LDggQEAgdm9pZCBSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6ZW5jb2RlKElQQzo6
QXJndW1lbnRFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgbV9wYWdlU2Nh
bGVGYWN0b3I7CiAgICAgZW5jb2RlciA8PCBtX21pbmltdW1TY2FsZUZhY3RvcjsKICAgICBlbmNv
ZGVyIDw8IG1fbWF4aW11bVNjYWxlRmFjdG9yOworICAgIGVuY29kZXIgPDwgbV9pbml0aWFsU2Nh
bGVGYWN0b3I7CisgICAgZW5jb2RlciA8PCBtX3ZpZXdwb3J0V2lkdGg7CiAKICAgICBlbmNvZGVy
IDw8IG1fcmVuZGVyVHJlZVNpemU7CiAgICAgZW5jb2RlciA8PCBtX3RyYW5zYWN0aW9uSUQ7CkBA
IC01OTcsNiArNTk5LDEyIEBAIGJvb2wgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OmRlY29k
ZShJUEM6OkFyZ3VtZW50RGVjb2RlciYgZGVjb2RlciwgUmVtb3RlTGF5CiAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZShyZXN1bHQubV9tYXhpbXVtU2NhbGVGYWN0b3IpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlc3VsdC5tX2luaXRpYWxTY2FsZUZh
Y3RvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0Lm1fdmlld3BvcnRXaWR0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlm
ICghZGVjb2Rlci5kZWNvZGUocmVzdWx0Lm1fcmVuZGVyVHJlZVNpemUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXcubW0KaW5kZXggNDJiZTk3YWRjY2Y2NGJlNDIyYTViYTFmN2IzNjhkYjE1ZDQwNzMyMC4u
YWU5Mzc3Nzc5ZmEwZmUwY2ExZDBjNWUyNzVmNTA1YzFlYTQ0OWY2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTE3Miw2ICsxNzIs
OCBAQCBAaW1wbGVtZW50YXRpb24gV0tXZWJWaWV3IHsKICAgICBDR1NpemUgX21heGltdW1Vbm9i
c2N1cmVkU2l6ZU92ZXJyaWRlOwogICAgIENHUmVjdCBfaW5wdXRWaWV3Qm91bmRzOwogICAgIENH
RmxvYXQgX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoOworICAgIENHRmxvYXQgX2luaXRpYWxTY2FsZUZh
Y3RvcjsKKwogICAgIEJPT0wgX2FsbG93c0xpbmtQcmV2aWV3OwogCiAgICAgVUlFZGdlSW5zZXRz
IF9vYnNjdXJlZEluc2V0czsKQEAgLTM1MSw3ICszNTMsOCBAQCAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhGcmFtZTooQ0dSZWN0KWZyYW1lIGNvbmZpZ3VyYXRpb246KFdLV2ViVmlld0NvbmZpZ3Vy
YXRpbwogICAgIFtfc2Nyb2xsVmlldyBhZGRTdWJ2aWV3OltfY29udGVudFZpZXcgdW5zY2FsZWRW
aWV3XV07CiAgICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZpZXdCYWNrZ3JvdW5kXTsKIAotICAgIF92
aWV3cG9ydE1ldGFUYWdXaWR0aCA9IC0xOworICAgIF92aWV3cG9ydE1ldGFUYWdXaWR0aCA9IFdl
YkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CisgICAgX2luaXRpYWxTY2FsZUZh
Y3RvciA9IDE7CiAKICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwogCkBAIC03OTgs
MTEgKzgwMSw2IEBAIC0gKHZvaWQpX2RpZEZpbmlzaExvYWRpbmdEYXRhRm9yQ3VzdG9tQ29udGVu
dFByb3ZpZGVyV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOihjb25zCiAgICAgX3BhZ2UtPmRpZExheW91
dEZvckN1c3RvbUNvbnRlbnRQcm92aWRlcigpOwogfQogCi0tICh2b2lkKV9zZXRWaWV3cG9ydE1l
dGFUYWdXaWR0aDooZmxvYXQpbmV3V2lkdGgKLXsKLSAgICBfdmlld3BvcnRNZXRhVGFnV2lkdGgg
PSBuZXdXaWR0aDsKLX0KLQogLSAodm9pZClfd2lsbEludm9rZVVJU2Nyb2xsVmlld0RlbGVnYXRl
Q2FsbGJhY2sKIHsKICAgICBfZGVsYXlVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzID0gWUVTOwpA
QCAtOTE1LDcgKzkxMyw4IEBAIC0gKHZvaWQpX3Byb2Nlc3NEaWRFeGl0CiAgICAgW19zY3JvbGxW
aWV3IHNldENvbnRlbnRPZmZzZXQ6W3NlbGYgX2FkanVzdGVkQ29udGVudE9mZnNldDpDR1BvaW50
WmVyb11dOwogICAgIFtfc2Nyb2xsVmlldyBzZXRab29tU2NhbGU6MV07CiAKLSAgICBfdmlld3Bv
cnRNZXRhVGFnV2lkdGggPSAtMTsKKyAgICBfdmlld3BvcnRNZXRhVGFnV2lkdGggPSBXZWJDb3Jl
OjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIF9pbml0aWFsU2NhbGVGYWN0b3Ig
PSAxOwogICAgIF9oYXNDb21taXR0ZWRMb2FkRm9yTWFpbkZyYW1lID0gTk87CiAgICAgX25lZWRz
UmVzZXRWaWV3U3RhdGVBZnRlckNvbW1pdExvYWRGb3JNYWluRnJhbWUgPSBOTzsKICAgICBfZHlu
YW1pY1ZpZXdwb3J0VXBkYXRlTW9kZSA9IER5bmFtaWNWaWV3cG9ydFVwZGF0ZU1vZGU6Ok5vdFJl
c2l6aW5nOwpAQCAtOTk3LDcgKzk5NiwxMCBAQCAtICh2b2lkKV9kaWRDb21taXRMYXllclRyZWU6
KGNvbnN0IFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mKWxheWVyVHJlZQogICAg
IGlmICghbGF5ZXJUcmVlVHJhbnNhY3Rpb24uc2NhbGVXYXNTZXRCeVVJUHJvY2VzcygpICYmICFb
X3Njcm9sbFZpZXcgaXNab29taW5nXSAmJiAhW19zY3JvbGxWaWV3IGlzWm9vbUJvdW5jaW5nXSAm
JiAhW19zY3JvbGxWaWV3IF9pc0FuaW1hdGluZ1pvb21dKQogICAgICAgICBbX3Njcm9sbFZpZXcg
c2V0Wm9vbVNjYWxlOmxheWVyVHJlZVRyYW5zYWN0aW9uLnBhZ2VTY2FsZUZhY3RvcigpXTsKIAot
ICAgIFtfY29udGVudFZpZXcgX3NldERvdWJsZVRhcEdlc3R1cmVzRW5hYmxlZDpzZWxmLl92aWV3
cG9ydElzVXNlclNjYWxhYmxlXTsKKyAgICBfdmlld3BvcnRNZXRhVGFnV2lkdGggPSBsYXllclRy
ZWVUcmFuc2FjdGlvbi52aWV3cG9ydFdpZHRoKCk7CisgICAgX2luaXRpYWxTY2FsZUZhY3RvciA9
IGxheWVyVHJlZVRyYW5zYWN0aW9uLmluaXRpYWxTY2FsZUZhY3RvcigpOworICAgIGlmICghW19j
b250ZW50VmlldyBfc2luZ2xlVGFwTWF5TW9kaWZ5RG91YmxlVGFwR2VzdHVyZXNFbmFibGVkXSkK
KyAgICAgICAgW19jb250ZW50VmlldyBfc2V0RG91YmxlVGFwR2VzdHVyZXNFbmFibGVkOnNlbGYu
X2FsbG93RG91YmxlVGFwR2VzdHVyZXNdOwogCiAgICAgW3NlbGYgX3VwZGF0ZVNjcm9sbFZpZXdC
YWNrZ3JvdW5kXTsKIApAQCAtMTI3Niw2ICsxMjc4LDEyIEBAIC0gKHZvaWQpX3pvb21PdXRXaXRo
T3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBhbmltYXRlZDooQk9PTClhbmltYXRl
ZAogICAgIFtzZWxmIF96b29tVG9Qb2ludDpvcmlnaW4gYXRTY2FsZTpbX3Njcm9sbFZpZXcgbWlu
aW11bVpvb21TY2FsZV0gYW5pbWF0ZWQ6YW5pbWF0ZWRdOwogfQogCistICh2b2lkKV96b29tVG9J
bml0aWFsU2NhbGVXaXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBhbmltYXRl
ZDooQk9PTClhbmltYXRlZAoreworICAgIEFTU0VSVChfaW5pdGlhbFNjYWxlRmFjdG9yID4gMCk7
CisgICAgW3NlbGYgX3pvb21Ub1BvaW50Om9yaWdpbiBhdFNjYWxlOl9pbml0aWFsU2NhbGVGYWN0
b3IgYW5pbWF0ZWQ6YW5pbWF0ZWRdOworfQorCiAvLyBmb2N1c2VkRWxlbWVudFJlY3QgYW5kIHNl
bGVjdGlvblJlY3QgYXJlIGJvdGggaW4gZG9jdW1lbnQgY29vcmRpbmF0ZXMuCiAtICh2b2lkKV96
b29tVG9Gb2N1c1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdClmb2N1c2VkRWxlbWVudFJlY3RJbkRv
Y3VtZW50Q29vcmRpbmF0ZXMgc2VsZWN0aW9uUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KXNlbGVj
dGlvblJlY3RJbkRvY3VtZW50Q29vcmRpbmF0ZXMgZm9udFNpemU6KGZsb2F0KWZvbnRTaXplIG1p
bmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhp
bXVtU2NhbGUgYWxsb3dTY2FsaW5nOihCT09MKWFsbG93U2NhbGluZyBmb3JjZVNjcm9sbDooQk9P
TClmb3JjZVNjcm9sbAogewpAQCAtMTM5NSwxMSArMTQwMyw2IEBAIC0gKHZvaWQpX3pvb21Ub0Zv
Y3VzUmVjdDooV2ViQ29yZTo6RmxvYXRSZWN0KWZvY3VzZWRFbGVtZW50UmVjdEluRG9jdW1lbnRD
b29yZGluCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZTpZRVNdOwogfQogCi0tIChDR0Zs
b2F0KV9jb250ZW50Wm9vbVNjYWxlCi17Ci0gICAgcmV0dXJuIGNvbnRlbnRab29tU2NhbGUoc2Vs
Zik7Ci19Ci0KIC0gKENHRmxvYXQpX3RhcmdldENvbnRlbnRab29tU2NhbGVGb3JSZWN0Oihjb25z
dCBXZWJDb3JlOjpGbG9hdFJlY3QmKXRhcmdldFJlY3QgY3VycmVudFNjYWxlOihkb3VibGUpY3Vy
cmVudFNjYWxlIGZpdEVudGlyZVJlY3Q6KEJPT0wpZml0RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6
KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlCiB7
CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIHVub2JzY3VyZWRDb250ZW50U2l6ZShbc2VsZiBfY29u
dGVudFJlY3RGb3JVc2VySW50ZXJhY3Rpb25dLnNpemUpOwpAQCAtMzA3MSwxNCArMzA3NCwyMCBA
QCAtIChOU1N0cmluZyAqKV9zdWdnZXN0ZWRGaWxlbmFtZUZvckRpc3BsYXllZFBERgogICAgIHJl
dHVybiBbKFdLUERGVmlldyAqKV9jdXN0b21Db250ZW50Vmlldy5nZXQoKSBzdWdnZXN0ZWRGaWxl
bmFtZV07CiB9CiAKLS0gKENHRmxvYXQpX3ZpZXdwb3J0TWV0YVRhZ1dpZHRoCistIChCT09MKV9h
bGxvd0RvdWJsZVRhcEdlc3R1cmVzCiB7Ci0gICAgcmV0dXJuIF92aWV3cG9ydE1ldGFUYWdXaWR0
aDsKLX0KKyAgICBpZiAoW1tOU1VzZXJEZWZhdWx0cyBzdGFuZGFyZFVzZXJEZWZhdWx0c10gYm9v
bEZvcktleTpAIldlYktpdEZhc3RDbGlja2luZ0Rpc2FibGVkIl0pCisgICAgICAgIHJldHVybiBZ
RVM7CiAKLS0gKEJPT0wpX3ZpZXdwb3J0SXNVc2VyU2NhbGFibGUKLXsKLSAgICByZXR1cm4gW19z
Y3JvbGxWaWV3IGlzWm9vbUVuYWJsZWRdICYmIFtfc2Nyb2xsVmlldyBtaW5pbXVtWm9vbVNjYWxl
XSA8IFtfc2Nyb2xsVmlldyBtYXhpbXVtWm9vbVNjYWxlXTsKKyAgICAvLyBJZiB0aGUgcGFnZSBp
cyBub3QgdXNlciBzY2FsYWJsZSwgd2UgZG9uJ3QgYWxsb3cgZG91YmxlIHRhcCBnZXN0dXJlcy4K
KyAgICBpZiAoIVtfc2Nyb2xsVmlldyBpc1pvb21FbmFibGVkXSB8fCBbX3Njcm9sbFZpZXcgbWlu
aW11bVpvb21TY2FsZV0gPj0gW19zY3JvbGxWaWV3IG1heGltdW1ab29tU2NhbGVdKQorICAgICAg
ICByZXR1cm4gTk87CisKKyAgICAvLyBGb3Igc2NhbGFibGUgdmlld3BvcnRzLCBvbmx5IGRpc2Fi
bGUgZG91YmxlIHRhcCBnZXN0dXJlcyBpZiB0aGUgdmlld3BvcnQgd2lkdGggaXMgZGV2aWNlIHdp
ZHRoLgorICAgIGlmIChfdmlld3BvcnRNZXRhVGFnV2lkdGggIT0gV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHM6OlZhbHVlRGV2aWNlV2lkdGgpCisgICAgICAgIHJldHVybiBZRVM7CisKKyAgICBy
ZXR1cm4gIWFyZUVzc2VudGlhbGx5RXF1YWxBc0Zsb2F0KGNvbnRlbnRab29tU2NhbGUoc2VsZiks
IF9pbml0aWFsU2NhbGVGYWN0b3IpOwogfQogCiAtIChfV0tXZWJWaWV3UHJpbnRGb3JtYXR0ZXIg
Kilfd2ViVmlld1ByaW50Rm9ybWF0dGVyCkBAIC0zMTk4LDcgKzMyMDcsNiBAQCAtIChDR1BvaW50
KV9jb252ZXJ0UG9pbnRGcm9tVmlld1RvQ29udGVudHM6KENHUG9pbnQpcG9pbnQKIHsKICAgICBy
ZXR1cm4gW3NlbGYgY29udmVydFBvaW50OnBvaW50IHRvVmlldzpzZWxmLl9jdXJyZW50Q29udGVu
dFZpZXddOwogfQotCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQogCiAvLyBFeGVjdXRlIHRoZSBz
dXBwbGllZCBibG9jayBhZnRlciB0aGUgbmV4dCB0cmFuc2FjdGlvbiBmcm9tIHRoZSBXZWJQcm9j
ZXNzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dl
YlZpZXdJbnRlcm5hbC5oCmluZGV4IGE5MzZhNmYxOGExZmE0MTA5YWM2ODRiYzBhOGZjZmYyMTRl
NDI5ZmYuLjMwZjQ2MjY2MjIwMzAxYWU4MmE1M2IwODI5NmY2NmNkNDQ1MThmYmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVy
bmFsLmgKQEAgLTg3LDEwICs4NywxMCBAQCBzdHJ1Y3QgUHJpbnRJbmZvOwogLSAodm9pZClfem9v
bVRvRm9jdXNSZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpZm9jdXNlZEVsZW1lbnRSZWN0IHNlbGVj
dGlvblJlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdClzZWxlY3Rpb25SZWN0SW5Eb2N1bWVudENvb3Jk
aW5hdGVzIGZvbnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5p
bXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIGFsbG93U2NhbGluZzoo
Qk9PTClhbGxvd1NjYWxpbmcgZm9yY2VTY3JvbGw6KEJPT0wpZm9yY2VTY3JvbGw7CiAtIChCT09M
KV96b29tVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCB3aXRoT3JpZ2luOihX
ZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVudGlyZVJl
Y3QgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91Ymxl
KW1heGltdW1TY2FsZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1pbmltdW1TY3JvbGxE
aXN0YW5jZTsKIC0gKHZvaWQpX3pvb21PdXRXaXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50
KW9yaWdpbiBhbmltYXRlZDooQk9PTClhbmltYXRlZDsKKy0gKHZvaWQpX3pvb21Ub0luaXRpYWxT
Y2FsZVdpdGhPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIGFuaW1hdGVkOihCT09M
KWFuaW1hdGVkOwogCiAtICh2b2lkKV9zZXRIYXNDdXN0b21Db250ZW50VmlldzooQk9PTCloYXND
dXN0b21Db250ZW50VmlldyBsb2FkZWRNSU1FVHlwZTooY29uc3QgV1RGOjpTdHJpbmcmKW1pbWVU
eXBlOwogLSAodm9pZClfZGlkRmluaXNoTG9hZGluZ0RhdGFGb3JDdXN0b21Db250ZW50UHJvdmlk
ZXJXaXRoU3VnZ2VzdGVkRmlsZW5hbWU6KGNvbnN0IFdURjo6U3RyaW5nJilzdWdnZXN0ZWRGaWxl
bmFtZSBkYXRhOihOU0RhdGEgKilkYXRhOwotLSAodm9pZClfc2V0Vmlld3BvcnRNZXRhVGFnV2lk
dGg6KGZsb2F0KW5ld1dpZHRoOwogCiAtICh2b2lkKV93aWxsSW52b2tlVUlTY3JvbGxWaWV3RGVs
ZWdhdGVDYWxsYmFjazsKIC0gKHZvaWQpX2RpZEludm9rZVVJU2Nyb2xsVmlld0RlbGVnYXRlQ2Fs
bGJhY2s7CkBAIC0xMDksOSArMTA5LDcgQEAgc3RydWN0IFByaW50SW5mbzsKIC0gKHZvaWQpX25h
dmlnYXRpb25HZXN0dXJlRGlkQmVnaW47CiAtICh2b2lkKV9uYXZpZ2F0aW9uR2VzdHVyZURpZEVu
ZDsKIAotLSAoQ0dGbG9hdClfY29udGVudFpvb21TY2FsZTsKLS0gKENHRmxvYXQpX3RhcmdldENv
bnRlbnRab29tU2NhbGVGb3JSZWN0Oihjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKXRhcmdldFJl
Y3QgY3VycmVudFNjYWxlOihkb3VibGUpY3VycmVudFNjYWxlIGZpdEVudGlyZVJlY3Q6KEJPT0wp
Zml0RW50aXJlUmVjdCBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNj
YWxlOihkb3VibGUpbWF4aW11bVNjYWxlOwotCitAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9u
bHkpIEJPT0wgX2FsbG93RG91YmxlVGFwR2VzdHVyZXM7CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIFVJRWRnZUluc2V0cyBfY29tcHV0ZWRDb250ZW50SW5zZXQ7CiAjZWxzZQogQHBy
b3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0SWdub3Jlc05vbldoZWVsRXZlbnRzOikgQk9P
TCBfaWdub3Jlc05vbldoZWVsRXZlbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld1ByaXZhdGUuaAppbmRleCA0MzhkNmM1MWQyMjBhZjU4
NWI3NTQyODNiMmE5MjkyMDIxOTk4M2I1Li45MTE3OWJlMGQ0MWEyOTc2NjZmNTBmYzlmMTM1MjM1
YzQ0MGM0M2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLV2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLV2ViVmlld1ByaXZhdGUuaApAQCAtMTMzLDEwICsxMzMsNiBAQCB0eXBlZGVmIE5TX0VO
VU0oTlNJbnRlZ2VyLCBfV0tJbW1lZGlhdGVBY3Rpb25UeXBlKSB7CiAvLyBGSVhNRTogVGhpcyBj
YW4gYmUgcmVtb3ZlZCBvbmNlIFdLTmF2aWdhdGlvbidzIHJlc3BvbnNlIHByb3BlcnR5IGlzIGlt
cGxlbWVudGVkLgogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU1N0cmluZyAqX3N1
Z2dlc3RlZEZpbGVuYW1lRm9yRGlzcGxheWVkUERGOwogCi0vLyBUaGUgdmlld3BvcnQgbWV0YSB0
YWcgd2lkdGggaXMgbmVnYXRpdmUgaWYgdGhlIHZhbHVlIGlzIG5vdCBkZWZpbmVkLgotQHByb3Bl
cnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBDR0Zsb2F0IF92aWV3cG9ydE1ldGFUYWdXaWR0aDsK
LUBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgQk9PTCBfdmlld3BvcnRJc1VzZXJTY2Fs
YWJsZTsKLQogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBfV0tXZWJWaWV3UHJpbnRG
b3JtYXR0ZXIgKl93ZWJWaWV3UHJpbnRGb3JtYXR0ZXI7CiAKIC0gKHZvaWQpX2JlZ2luSW50ZXJh
Y3RpdmVPYnNjdXJlZEluc2V0c0NoYW5nZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCmluZGV4IDhmMzllMWVjNTdlNjQwODY3N2Y4YTBmZDc5OGYzN2VmYTFlOTgxZDAuLjZmYmE2
YjVlZTI4YmNmODRiMTdlYzBmMjgzMjE0Y2U1MWYxNjRiMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1BhZ2VDbGllbnQuaApAQCAtMjk0LDggKzI5NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGlkVXBkYXRlQmxvY2tTZWxlY3Rpb25XaXRoVG91Y2godWludDMyX3QgdG91Y2gsIHVp
bnQzMl90IGZsYWdzLCBmbG9hdCBncm93VGhyZXNob2xkLCBmbG9hdCBzaHJpbmtUaHJlc2hvbGQp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGJvb2wgaGFz
VmlkZW8sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGVsZW1lbnRSZWN0KSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHpvb21Ub1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0LCBkb3VibGUgbWluaW11bVNj
YWxlLCBkb3VibGUgbWF4aW11bVNjYWxlKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpZENoYW5n
ZVZpZXdwb3J0TWV0YVRhZ1dpZHRoKGZsb2F0KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGVEb3VibGVUYXBHZXN0dXJlc1VudGlsVGFwSXNGaW5pc2hlZElmTmVjZXNzYXJ5KHVpbnQ2NF90
IHJlcXVlc3RJRCwgYm9vbCBhbGxvd3NEb3VibGVUYXBab29tLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGJvb2wgaXNSZXBsYWNlZEVsZW1lbnQsIGRvdWJsZSBtaW5pbXVt
U2NhbGUsIGRvdWJsZSBtYXhpbXVtU2NhbGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJs
ZURvdWJsZVRhcEdlc3R1cmVzRHVyaW5nVGFwSWZOb3RBbHJlYWR5RGlzYWJsZWQodWludDY0X3Qg
cmVxdWVzdElEKSA9IDA7CiAgICAgdmlydHVhbCBkb3VibGUgbWluaW11bVpvb21TY2FsZSgpIGNv
bnN0ID0gMDsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkZsb2F0UmVjdCBkb2N1bWVudFJlY3QoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCB2b2lkIG92ZXJmbG93U2Nyb2xsVmlld1dpbGxTdGFydFBh
bkdlc3R1cmUoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5k
ZXggZDIwMDI4M2I3Yjk1MzBhNjFlMjUwMjg0N2MzYmM3YmMyZDI0ZDRiZi4uZjgwNjFkNDEyOTZk
MWNlMWFiYzM1ZTUwMTA3YTRkZWM2MDg4MzM0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaApAQCAtNTA5LDggKzUwOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHpvb21U
b1JlY3QoV2ViQ29yZTo6RmxvYXRSZWN0LCBkb3VibGUgbWluaW11bVNjYWxlLCBkb3VibGUgbWF4
aW11bVNjYWxlKTsKICAgICB2b2lkIGNvbW1pdFBvdGVudGlhbFRhcEZhaWxlZCgpOwogICAgIHZv
aWQgZGlkTm90SGFuZGxlVGFwQXNDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwotICAg
IHZvaWQgdmlld3BvcnRNZXRhVGFnV2lkdGhEaWRDaGFuZ2UoZmxvYXQgd2lkdGgpOwotICAgIHZv
aWQgZGlzYWJsZURvdWJsZVRhcEdlc3R1cmVzVW50aWxUYXBJc0ZpbmlzaGVkSWZOZWNlc3Nhcnko
dWludDY0X3QgcmVxdWVzdElELCBib29sIGFsbG93c0RvdWJsZVRhcFpvb20sIGNvbnN0IFdlYkNv
cmU6OkZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgYm9vbCBpc1JlcGxhY2VkRWxlbWVudCwgZG91Ymxl
IG1pbmltdW1TY2FsZSwgZG91YmxlIG1heGltdW1TY2FsZSk7CisgICAgdm9pZCBkaXNhYmxlRG91
YmxlVGFwR2VzdHVyZXNEdXJpbmdUYXBJZk5vdEFscmVhZHlEaXNhYmxlZCh1aW50NjRfdCByZXF1
ZXN0SUQpOwogICAgIHZvaWQgZGlkRmluaXNoRHJhd2luZ1BhZ2VzVG9QREYoY29uc3QgSVBDOjpE
YXRhUmVmZXJlbmNlJik7CiAgICAgdm9pZCBjb250ZW50U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlKGNv
bnN0IFN0cmluZyYgY29udGVudFNpemVDYXRlZ29yeSk7CiAgICAgdm9pZCBnZXRMb29rdXBDb250
ZXh0QXRQb2ludChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIHN0ZDo6ZnVuY3Rpb248dm9pZChj
b25zdCBTdHJpbmcmLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4pOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggNWY2YjVlMzI1YjMw
MzI5Zjg5MmRjOGFkODA0ZDYwYTgyMThhMzc0NS4uMjc3YTBiZTViZGUwMGNmY2NjMTk0N2VkMTk1
YzcyYzljZjdjZTczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xODMsOCArMTgzLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFn
ZVByb3h5IHsKICAgICBab29tVG9SZWN0KFdlYkNvcmU6OkZsb2F0UmVjdCByZWN0LCBkb3VibGUg
bWluaW11bVNjYWxlLCBkb3VibGUgbWF4aW11bVNjYWxlKQogICAgIENvbW1pdFBvdGVudGlhbFRh
cEZhaWxlZCgpCiAgICAgRGlkTm90SGFuZGxlVGFwQXNDbGljayhXZWJDb3JlOjpJbnRQb2ludCBw
b2ludCkKLSAgICBWaWV3cG9ydE1ldGFUYWdXaWR0aERpZENoYW5nZShmbG9hdCB3aWR0aCkKLSAg
ICBEaXNhYmxlRG91YmxlVGFwR2VzdHVyZXNVbnRpbFRhcElzRmluaXNoZWRJZk5lY2Vzc2FyeSh1
aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgYWxsb3dzRG91YmxlVGFwWm9vbSwgV2ViQ29yZTo6Rmxv
YXRSZWN0IHRhcmdldFJlY3QsIGJvb2wgaXNSZXBsYWNlZEVsZW1lbnQsIGRvdWJsZSBtaW5pbXVt
U2NhbGUsIGRvdWJsZSBtYXhpbXVtU2NhbGUpCisgICAgRGlzYWJsZURvdWJsZVRhcEdlc3R1cmVz
RHVyaW5nVGFwSWZOb3RBbHJlYWR5RGlzYWJsZWQodWludDY0X3QgcmVxdWVzdElEKQogICAgIERp
ZEZpbmlzaERyYXdpbmdQYWdlc1RvUERGKElQQzo6RGF0YVJlZmVyZW5jZSBwZGZEYXRhKQogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9QYWdlQ2xpZW50SW1wbElPUy5oCmluZGV4IDZlYzQ3YjY0NTIxMTBlNGNiZWNhNWY2ZjNlYzM0
ZGRmNzczMDQ2ZWYuLmUzMmExZmZiNmIzYTk5OTNhMGQ1NWEzNDNhNmY2MGNhMmViNjU1MzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1Mu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgK
QEAgLTEzNCw4ICsxMzQsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzaG93UGxheWJh
Y2tUYXJnZXRQaWNrZXIoYm9vbCBoYXNWaWRlbywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZWxl
bWVudFJlY3QpIG92ZXJyaWRlOwogCiAgICAgdmlydHVhbCBib29sIGhhbmRsZVJ1bk9wZW5QYW5l
bChXZWJQYWdlUHJveHkqLCBXZWJGcmFtZVByb3h5KiwgV2ViT3BlblBhbmVsUGFyYW1ldGVycyos
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyUHJveHkqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkQ2hhbmdlVmlld3BvcnRNZXRhVGFnV2lkdGgoZmxvYXQpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgdm9pZCBkaXNhYmxlRG91YmxlVGFwR2VzdHVyZXNVbnRpbFRhcElzRmluaXNoZWRJ
Zk5lY2Vzc2FyeSh1aW50NjRfdCByZXF1ZXN0SUQsIGJvb2wgYWxsb3dzRG91YmxlVGFwWm9vbSwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBib29sIGlzUmVwbGFjZWRFbGVt
ZW50LCBkb3VibGUgbWluaW11bVNjYWxlLCBkb3VibGUgbWF4aW11bVNjYWxlKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZURvdWJsZVRhcEdlc3R1cmVzRHVyaW5nVGFwSWZOb3RB
bHJlYWR5RGlzYWJsZWQodWludDY0X3QgcmVxdWVzdElEKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGRvdWJsZSBtaW5pbXVtWm9vbVNjYWxlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBX
ZWJDb3JlOjpGbG9hdFJlY3QgZG9jdW1lbnRSZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCmluZGV4
IDU1ZWMyYWVjYWVhZjU5YzFhMWMzM2M5NzRjOTQ1NmEzYThjZjk4OGEuLjVhOGQzZGMwYjBiMDA3
MTJmNTIzYzAzZWM3NGZmOWNhOWM0NzU2OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQpAQCAtMjU0LDE3ICsyNTQsMTIgQEAgdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ2hhbmdlQ29udGVudFNpemUoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZGlkQ2hhbmdlVmlld3BvcnRNZXRhVGFnV2lkdGgoZmxvYXQgbmV3V2lkdGgpCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjpkaXNhYmxlRG91YmxlVGFwR2VzdHVyZXNEdXJpbmdUYXBJZk5vdEFscmVhZHlE
aXNhYmxlZCh1aW50NjRfdCByZXF1ZXN0SUQpCiB7Ci0gICAgW21fd2ViVmlldyBfc2V0Vmlld3Bv
cnRNZXRhVGFnV2lkdGg6bmV3V2lkdGhdOwotfQotCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpkaXNh
YmxlRG91YmxlVGFwR2VzdHVyZXNVbnRpbFRhcElzRmluaXNoZWRJZk5lY2Vzc2FyeSh1aW50NjRf
dCByZXF1ZXN0SUQsIGJvb2wgYWxsb3dzRG91YmxlVGFwWm9vbSwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0JiB0YXJnZXRSZWN0LCBib29sIGlzUmVwbGFjZWRFbGVtZW50LCBkb3VibGUgbWluaW11
bVNjYWxlLCBkb3VibGUgbWF4aW11bVNjYWxlKQotewotICAgIGlmICghbV93ZWJWaWV3Ll92aWV3
cG9ydElzVXNlclNjYWxhYmxlKQorICAgIGlmICghbV93ZWJWaWV3Ll9hbGxvd0RvdWJsZVRhcEdl
c3R1cmVzKQogICAgICAgICByZXR1cm47CiAKLSAgICBbbV9jb250ZW50VmlldyBfZGlzYWJsZURv
dWJsZVRhcEdlc3R1cmVzVW50aWxUYXBJc0ZpbmlzaGVkSWZOZWNlc3Nhcnk6cmVxdWVzdElEIGFs
bG93c0RvdWJsZVRhcFpvb206YWxsb3dzRG91YmxlVGFwWm9vbSB0YXJnZXRSZWN0OnRhcmdldFJl
Y3QgaXNSZXBsYWNlZDppc1JlcGxhY2VkRWxlbWVudCBtaW5pbXVtU2NhbGU6bWluaW11bVNjYWxl
IG1heGltdW1TY2FsZTptYXhpbXVtU2NhbGVdOworICAgIFttX2NvbnRlbnRWaWV3IF9kaXNhYmxl
RG91YmxlVGFwR2VzdHVyZXNEdXJpbmdUYXBJZk5vdEFscmVhZHlEaXNhYmxlZDpyZXF1ZXN0SURd
OwogfQogCiBkb3VibGUgUGFnZUNsaWVudEltcGw6Om1pbmltdW1ab29tU2NhbGUoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9TbWFydE1hZ25pZmljYXRp
b25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1NtYXJ0TWFnbmlm
aWNhdGlvbkNvbnRyb2xsZXIuaAppbmRleCBiNzY1YTBhMzNlNzM4ZmI1ZDM5MDFlMzk4MmE5ZDgz
NGY0YmI0YTFlLi5mYzQ4Y2FkOWY2YjY5MmM1MDYxMTg1NzhmMzE2Njg4ZTM4MDQ0MDJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1NtYXJ0TWFnbmlmaWNhdGlvbkNv
bnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1NtYXJ0TWFnbmlm
aWNhdGlvbkNvbnRyb2xsZXIuaApAQCAtNDgsNyArNDgsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGhhbmRsZVNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6RmxvYXRQb2ludCBvcmln
aW4pOwogICAgIHZvaWQgaGFuZGxlUmVzZXRNYWduaWZpY2F0aW9uR2VzdHVyZShXZWJDb3JlOjpG
bG9hdFBvaW50IG9yaWdpbik7Ci0gICAgdm9pZCBhZGp1c3RTbWFydE1hZ25pZmljYXRpb25UYXJn
ZXRSZWN0QW5kWm9vbVNjYWxlcyhib29sIGFkZE1hZ25pZmljYXRpb25QYWRkaW5nLCBXZWJDb3Jl
OjpGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGRvdWJsZSYgbWluaW11bVNjYWxlLCBkb3VibGUmIG1h
eGltdW1TY2FsZSk7CiAKIHByaXZhdGU6CiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIuCkBA
IC01Niw2ICs1NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpZENvbGxlY3RHZW9tZXRyeUZv
clNtYXJ0TWFnbmlmaWNhdGlvbkdlc3R1cmUoV2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4sIFdl
YkNvcmU6OkZsb2F0UmVjdCByZW5kZXJSZWN0LCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNv
bnRlbnRCb3VuZHMsIGJvb2wgaXNSZXBsYWNlZEVsZW1lbnQsIGRvdWJsZSB2aWV3cG9ydE1pbmlt
dW1TY2FsZSwgZG91YmxlIHZpZXdwb3J0TWF4aW11bVNjYWxlKTsKICAgICB2b2lkIG1hZ25pZnko
V2ViQ29yZTo6RmxvYXRQb2ludCBvcmlnaW4sIFdlYkNvcmU6OkZsb2F0UmVjdCB0YXJnZXRSZWN0
LCBXZWJDb3JlOjpGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0LCBkb3VibGUgdmlld3BvcnRN
aW5pbXVtU2NhbGUsIGRvdWJsZSB2aWV3cG9ydE1heGltdW1TY2FsZSk7CisgICAgdm9pZCBhZGp1
c3RTbWFydE1hZ25pZmljYXRpb25UYXJnZXRSZWN0QW5kWm9vbVNjYWxlcyhib29sIGFkZE1hZ25p
ZmljYXRpb25QYWRkaW5nLCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGRvdWJsZSYg
bWluaW11bVNjYWxlLCBkb3VibGUmIG1heGltdW1TY2FsZSk7CiAKICAgICBXZWJQYWdlUHJveHkm
IG1fd2ViUGFnZVByb3h5OwogICAgIFdLQ29udGVudFZpZXcgKm1fY29udGVudFZpZXc7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1NtYXJ0TWFnbmlmaWNhdGlvbkNv
bnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1NtYXJ0TWFnbmlmaWNh
dGlvbkNvbnRyb2xsZXIubW0KaW5kZXggNDEwYjgyMzk1N2ZiODM5MTAwZDZhODk4Mjk4NmJiYzZl
NzMzOTlkZS4uMDZkNzUwNmU0Yzc3OWY5YmViZTQ1MjUwMjJkNDg2NjVlYjA4ZWZkYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9TbWFydE1hZ25pZmljYXRpb25Db250
cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvU21hcnRNYWduaWZp
Y2F0aW9uQ29udHJvbGxlci5tbQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFNtYXJ0TWFnbmlmaWNh
dGlvbkNvbnRyb2xsZXI6OmRpZENvbGxlY3RHZW9tZXRyeUZvclNtYXJ0TWFnbmlmaWNhdGlvbkdl
c3R1cgogewogICAgIGlmICh0YXJnZXRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhN
RTogSWYgd2UgZG9uJ3Qgem9vbSwgc2VuZCB0aGUgdGFwIGFsb25nIHRvIHRleHQgc2VsZWN0aW9u
IChzZWUgPHJkYXI6Ly9wcm9ibGVtLzY4MTAzNDQ+KS4KLSAgICAgICAgW21fY29udGVudFZpZXcg
X3pvb21PdXRXaXRoT3JpZ2luOm9yaWdpbl07CisgICAgICAgIFttX2NvbnRlbnRWaWV3IF96b29t
VG9Jbml0aWFsU2NhbGVXaXRoT3JpZ2luOm9yaWdpbl07CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAgICAgZG91YmxlIG1pbmltdW1TY2FsZSA9IHZpZXdwb3J0TWluaW11bVNjYWxlOwpAQCAtMTE5
LDcgKzExOSw3IEBAIHZvaWQgU21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlcjo6ZGlkQ29sbGVj
dEdlb21ldHJ5Rm9yU21hcnRNYWduaWZpY2F0aW9uR2VzdHVyCiAgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIEZJWE1FOiBJZiB3ZSBzdGlsbCBkb24ndCB6b29tLCBzZW5kIHRoZSB0YXAgYWxvbmcg
dG8gdGV4dCBzZWxlY3Rpb24gKHNlZSA8cmRhcjovL3Byb2JsZW0vNjgxMDM0ND4pLgotICAgIFtt
X2NvbnRlbnRWaWV3IF96b29tT3V0V2l0aE9yaWdpbjpvcmlnaW5dOworICAgIFttX2NvbnRlbnRW
aWV3IF96b29tVG9Jbml0aWFsU2NhbGVXaXRoT3JpZ2luOm9yaWdpbl07CiB9CiAKIHZvaWQgU21h
cnRNYWduaWZpY2F0aW9uQ29udHJvbGxlcjo6bWFnbmlmeShGbG9hdFBvaW50IG9yaWdpbiwgRmxv
YXRSZWN0IHRhcmdldFJlY3QsIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QsIGRvdWJsZSB2
aWV3cG9ydE1pbmltdW1TY2FsZSwgZG91YmxlIHZpZXdwb3J0TWF4aW11bVNjYWxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3LmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXcuaAppbmRleCBiNzIwZGE5NjIz
ZTU2N2EzZDA5OGQ4YmU1M2JjNjk0NTU2YWI0NTBjLi4wMzcwODZiMGYyZTZhMzRhNjliZDU4ODQw
YzBjZTFlNDA1MWM1NjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXcuaApAQCAtOTIsNSArOTIsNiBAQCBjbGFzcyBXZWJQcm9jZXNzUG9vbDsKIC0gKHZv
aWQpX3pvb21Ub0ZvY3VzUmVjdDooQ0dSZWN0KXJlY3RUb0ZvY3VzIHNlbGVjdGlvblJlY3Q6KENH
UmVjdClzZWxlY3Rpb25SZWN0IGZvbnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5pbXVtU2NhbGU6
KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIGFs
bG93U2NhbGluZzooQk9PTClhbGxvd1NjYWxpbmcgZm9yY2VTY3JvbGw6KEJPT0wpZm9yY2VTY3Jv
bGw7CiAtIChCT09MKV96b29tVG9SZWN0OihDR1JlY3QpdGFyZ2V0UmVjdCB3aXRoT3JpZ2luOihD
R1BvaW50KW9yaWdpbiBmaXRFbnRpcmVSZWN0OihCT09MKWZpdEVudGlyZVJlY3QgbWluaW11bVNj
YWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1heGltdW1TY2Fs
ZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KENHRmxvYXQpbWluaW11bVNjcm9sbERpc3RhbmNlOwog
LSAodm9pZClfem9vbU91dFdpdGhPcmlnaW46KENHUG9pbnQpb3JpZ2luOworLSAodm9pZClfem9v
bVRvSW5pdGlhbFNjYWxlV2l0aE9yaWdpbjooQ0dQb2ludClvcmlnaW47CiAKIEBlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQppbmRleCA1ODc4ODZh
MDkxMWE2YzZiMzgwZTMwY2VkMWI1ZmQzZTI3ZWU2Mjg1Li5iZDM0ZDQ1NjQ1NWIwMTQ3ODEwMmNl
NmY4YTMxODE2YTdjMzcyMGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3Lm1tCkBAIC01NDAsNiArNTQwLDExIEBAIC0gKHZvaWQpX3pvb21PdXRXaXRo
T3JpZ2luOihDR1BvaW50KW9yaWdpbgogICAgIHJldHVybiBbX3dlYlZpZXcgX3pvb21PdXRXaXRo
T3JpZ2luOm9yaWdpbiBhbmltYXRlZDpZRVNdOwogfQogCistICh2b2lkKV96b29tVG9Jbml0aWFs
U2NhbGVXaXRoT3JpZ2luOihDR1BvaW50KW9yaWdpbgoreworICAgIHJldHVybiBbX3dlYlZpZXcg
X3pvb21Ub0luaXRpYWxTY2FsZVdpdGhPcmlnaW46b3JpZ2luIGFuaW1hdGVkOllFU107Cit9CisK
IC0gKHZvaWQpX2FwcGxpY2F0aW9uV2lsbFJlc2lnbkFjdGl2ZTooTlNOb3RpZmljYXRpb24qKW5v
dGlmaWNhdGlvbgogewogICAgIF9wYWdlLT5hcHBsaWNhdGlvbldpbGxSZXNpZ25BY3RpdmUoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5oCmluZGV4IGNlYTI4MjY3MjY0MTVlNjM5YWU2NGM1YzY1ZDI4ZGMzYzcyN2Jk
YzEuLjFlMTM4MjE1N2U2OTRiMzg0ZjU2MDRhZjBkNTUxNjhhZjVlZDEzZDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24uaApAQCAtMTgzLDcgKzE4Myw4IEBAIHN0cnVjdCBXS0F1dG9Db3JyZWN0aW9uRGF0YSB7CiAt
ICh2b2lkKV9jb21taXRQb3RlbnRpYWxUYXBGYWlsZWQ7CiAtICh2b2lkKV9kaWRHZXRUYXBIaWdo
bGlnaHRGb3JSZXF1ZXN0Oih1aW50NjRfdClyZXF1ZXN0SUQgY29sb3I6KGNvbnN0IFdlYkNvcmU6
OkNvbG9yJiljb2xvciBxdWFkczooY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4mKWhp
Z2hsaWdodGVkUXVhZHMgdG9wTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9w
TGVmdFJhZGl1cyB0b3BSaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9wUmln
aHRSYWRpdXMgYm90dG9tTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90dG9t
TGVmdFJhZGl1cyBib3R0b21SaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90
dG9tUmlnaHRSYWRpdXM7CiAKLS0gKHZvaWQpX2Rpc2FibGVEb3VibGVUYXBHZXN0dXJlc1VudGls
VGFwSXNGaW5pc2hlZElmTmVjZXNzYXJ5Oih1aW50NjRfdClyZXF1ZXN0SUQgYWxsb3dzRG91Ymxl
VGFwWm9vbTooYm9vbClhbGxvd3NEb3VibGVUYXBab29tIHRhcmdldFJlY3Q6KFdlYkNvcmU6OkZs
b2F0UmVjdCl0YXJnZXRSZWN0IGlzUmVwbGFjZWQ6KEJPT0wpaXNSZXBsYWNlZEVsZW1lbnQgbWlu
aW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1heGlt
dW1TY2FsZTsKKy0gKEJPT0wpX3NpbmdsZVRhcE1heU1vZGlmeURvdWJsZVRhcEdlc3R1cmVzRW5h
YmxlZDsKKy0gKHZvaWQpX2Rpc2FibGVEb3VibGVUYXBHZXN0dXJlc0R1cmluZ1RhcElmTm90QWxy
ZWFkeURpc2FibGVkOih1aW50NjRfdClyZXF1ZXN0SUQ7CiAtICh2b2lkKV9zdGFydEFzc2lzdGlu
Z05vZGU6KGNvbnN0IFdlYktpdDo6QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24mKWluZm9ybWF0aW9u
IHVzZXJJc0ludGVyYWN0aW5nOihCT09MKXVzZXJJc0ludGVyYWN0aW5nIGJsdXJQcmV2aW91c05v
ZGU6KEJPT0wpYmx1clByZXZpb3VzTm9kZSB1c2VyT2JqZWN0OihOU09iamVjdCA8TlNTZWN1cmVD
b2Rpbmc+ICopdXNlck9iamVjdDsKIC0gKHZvaWQpX3N0b3BBc3Npc3RpbmdOb2RlOwogLSAodm9p
ZClfc2VsZWN0aW9uQ2hhbmdlZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggMTMwMDU4ODhlM2U1MTVi
MzA5ZTc1NjllZmJlMTA2NTgwZjMzNDhhYy4uNGY0M2Y1ODk1ZWFkNWVkYWM2Y2Y5ZThhNDFkYjZj
NzA1MDY5MzdjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTgxOCw3ICs4MTgsNyBAQCAtICh2b2lk
KV91cGRhdGVUYXBIaWdobGlnaHQKIAogLSAodm9pZClfc2hvd1RhcEhpZ2hsaWdodAogewotICAg
IGlmICghaGlnaGxpZ2h0ZWRRdWFkc0FyZVNtYWxsZXJUaGFuUmVjdChfdGFwSGlnaGxpZ2h0SW5m
b3JtYXRpb24ucXVhZHMsIF9wYWdlLT51bm9ic2N1cmVkQ29udGVudFJlY3QoKSkpCisgICAgaWYg
KCFoaWdobGlnaHRlZFF1YWRzQXJlU21hbGxlclRoYW5SZWN0KF90YXBIaWdobGlnaHRJbmZvcm1h
dGlvbi5xdWFkcywgX3BhZ2UtPnVub2JzY3VyZWRDb250ZW50UmVjdCgpKSAmJiAhW3NlbGYgX3No
b3VsZFNob3dEZWJ1Z1RhcEhpZ2hsaWdodHNdKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
IV9oaWdobGlnaHRWaWV3KSB7CkBAIC04MzEsNiArODMxLDExIEBAIC0gKHZvaWQpX3Nob3dUYXBI
aWdobGlnaHQKICAgICBbc2VsZiBfdXBkYXRlVGFwSGlnaGxpZ2h0XTsKIH0KIAorLSAoQk9PTClf
c2hvdWxkU2hvd0RlYnVnVGFwSGlnaGxpZ2h0cworeworICAgIHJldHVybiBbW05TVXNlckRlZmF1
bHRzIHN0YW5kYXJkVXNlckRlZmF1bHRzXSBib29sRm9yS2V5OkAiV2ViS2l0U2hvd0Zhc3RDbGlj
a0RlYnVnVGFwSGlnaGxpZ2h0cyJdOworfQorCiAtICh2b2lkKV9kaWRHZXRUYXBIaWdobGlnaHRG
b3JSZXF1ZXN0Oih1aW50NjRfdClyZXF1ZXN0SUQgY29sb3I6KGNvbnN0IFdlYkNvcmU6OkNvbG9y
Jiljb2xvciBxdWFkczooY29uc3QgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4mKWhpZ2hsaWdo
dGVkUXVhZHMgdG9wTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9wTGVmdFJh
ZGl1cyB0b3BSaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpdG9wUmlnaHRSYWRp
dXMgYm90dG9tTGVmdFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90dG9tTGVmdFJh
ZGl1cyBib3R0b21SaWdodFJhZGl1czooY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpYm90dG9tUmln
aHRSYWRpdXMKIHsKICAgICBpZiAoIV9pc1RhcEhpZ2hsaWdodElEVmFsaWQgfHwgX2xhdGVzdFRh
cElEICE9IHJlcXVlc3RJRCkKQEAgLTgzOCwxMiArODQzLDE1IEBAIC0gKHZvaWQpX2RpZEdldFRh
cEhpZ2hsaWdodEZvclJlcXVlc3Q6KHVpbnQ2NF90KXJlcXVlc3RJRCBjb2xvcjooY29uc3QgV2Vi
Q29yZTo6CiAKICAgICBfaXNUYXBIaWdobGlnaHRJRFZhbGlkID0gTk87CiAKLSAgICBfdGFwSGln
aGxpZ2h0SW5mb3JtYXRpb24uY29sb3IgPSBjb2xvcjsKICAgICBfdGFwSGlnaGxpZ2h0SW5mb3Jt
YXRpb24ucXVhZHMgPSBoaWdobGlnaHRlZFF1YWRzOwogICAgIF90YXBIaWdobGlnaHRJbmZvcm1h
dGlvbi50b3BMZWZ0UmFkaXVzID0gdG9wTGVmdFJhZGl1czsKICAgICBfdGFwSGlnaGxpZ2h0SW5m
b3JtYXRpb24udG9wUmlnaHRSYWRpdXMgPSB0b3BSaWdodFJhZGl1czsKICAgICBfdGFwSGlnaGxp
Z2h0SW5mb3JtYXRpb24uYm90dG9tTGVmdFJhZGl1cyA9IGJvdHRvbUxlZnRSYWRpdXM7CiAgICAg
X3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmJvdHRvbVJpZ2h0UmFkaXVzID0gYm90dG9tUmlnaHRS
YWRpdXM7CisgICAgaWYgKFtzZWxmIF9zaG91bGRTaG93RGVidWdUYXBIaWdobGlnaHRzXSkKKyAg
ICAgICAgX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmNvbG9yID0gW3NlbGYgX3RhcEhpZ2hsaWdo
dENvbG9yRm9yRmFzdENsaWNrOiFbX2RvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyIGlzRW5hYmxl
ZF1dOworICAgIGVsc2UKKyAgICAgICAgX3RhcEhpZ2hsaWdodEluZm9ybWF0aW9uLmNvbG9yID0g
Y29sb3I7CiAKICAgICBpZiAoX3BvdGVudGlhbFRhcEluUHJvZ3Jlc3MpIHsKICAgICAgICAgX2hh
c1RhcEhpZ2hsaWdodEZvclBvdGVudGlhbFRhcCA9IFlFUzsKQEAgLTg1OCw0MSArODY2LDE2IEBA
IC0gKHZvaWQpX2RpZEdldFRhcEhpZ2hsaWdodEZvclJlcXVlc3Q6KHVpbnQ2NF90KXJlcXVlc3RJ
RCBjb2xvcjooY29uc3QgV2ViQ29yZTo6CiAgICAgfQogfQogCi0tIChDR0Zsb2F0KV9mYXN0Q2xp
Y2tab29tVGhyZXNob2xkCistIChCT09MKV9zaW5nbGVUYXBNYXlNb2RpZnlEb3VibGVUYXBHZXN0
dXJlc0VuYWJsZWQKIHsKLSAgICBOU1VzZXJEZWZhdWx0cyAqZGVmYXVsdHMgPSBbTlNVc2VyRGVm
YXVsdHMgc3RhbmRhcmRVc2VyRGVmYXVsdHNdOwotICAgIGlmICghW2RlZmF1bHRzIGJvb2xGb3JL
ZXk6QCJXZWJLaXRGYXN0Q2xpY2tpbmdFbmFibGVkIl0pCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuIFtkZWZhdWx0cyBmbG9hdEZvcktleTpAIldlYktpdEZhc3RDbGlja1pvb21UaHJl
c2hvbGQiXTsKKyAgICByZXR1cm4gX3BvdGVudGlhbFRhcEluUHJvZ3Jlc3M7CiB9CiAKLS0gKEJP
T0wpX2FsbG93RG91YmxlVGFwVG9ab29tRm9yQ3VycmVudFpvb21TY2FsZTooQ0dGbG9hdCljdXJy
ZW50Wm9vbVNjYWxlIGFuZFRhcmdldFpvb21TY2FsZTooQ0dGbG9hdCl0YXJnZXRab29tU2NhbGUK
LXsKLSAgICBDR0Zsb2F0IHpvb21UaHJlc2hvbGQgPSBbc2VsZiBfZmFzdENsaWNrWm9vbVRocmVz
aG9sZF07Ci0gICAgaWYgKCF6b29tVGhyZXNob2xkKQotICAgICAgICByZXR1cm4gWUVTOwotCi0g
ICAgQ0dGbG9hdCBtaW5pbXVtWm9vbVJhdGlvRm9yRG91YmxlVGFwVG9ab29tSW4gPSAxICsgem9v
bVRocmVzaG9sZDsKLSAgICBDR0Zsb2F0IG1heGltdW1ab29tUmF0aW9Gb3JEb3VibGVUYXBUb1pv
b21PdXQgPSAxIC8gbWluaW11bVpvb21SYXRpb0ZvckRvdWJsZVRhcFRvWm9vbUluOwotICAgIENH
RmxvYXQgem9vbVJhdGlvID0gdGFyZ2V0Wm9vbVNjYWxlIC8gY3VycmVudFpvb21TY2FsZTsKLSAg
ICByZXR1cm4gem9vbVJhdGlvIDwgbWF4aW11bVpvb21SYXRpb0ZvckRvdWJsZVRhcFRvWm9vbU91
dCB8fCB6b29tUmF0aW8gPiBtaW5pbXVtWm9vbVJhdGlvRm9yRG91YmxlVGFwVG9ab29tSW47Ci19
Ci0KLS0gKHZvaWQpX2Rpc2FibGVEb3VibGVUYXBHZXN0dXJlc1VudGlsVGFwSXNGaW5pc2hlZElm
TmVjZXNzYXJ5Oih1aW50NjRfdClyZXF1ZXN0SUQgYWxsb3dzRG91YmxlVGFwWm9vbTooYm9vbClh
bGxvd3NEb3VibGVUYXBab29tIHRhcmdldFJlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0YXJnZXRS
ZWN0IGlzUmVwbGFjZWQ6KEJPT0wpaXNSZXBsYWNlZEVsZW1lbnQgbWluaW11bVNjYWxlOihkb3Vi
bGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91YmxlKW1heGltdW1TY2FsZQorLSAodm9p
ZClfZGlzYWJsZURvdWJsZVRhcEdlc3R1cmVzRHVyaW5nVGFwSWZOb3RBbHJlYWR5RGlzYWJsZWQ6
KHVpbnQ2NF90KXJlcXVlc3RJRAogewogICAgIGlmICghX3BvdGVudGlhbFRhcEluUHJvZ3Jlc3Mg
fHwgX2xhdGVzdFRhcElEICE9IHJlcXVlc3RJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGFsbG93c0RvdWJsZVRhcFpvb20pIHsKLSAgICAgICAgLy8gVGhvdWdoIHRoZSBlbGVtZW50IGFs
bG93cyB1cyB0byB6b29tIGluIG9uIGRvdWJsZSB0YXAsIHdlIGF2b2lkIHRoaXMgYmVoYXZpb3Ig
aW4gZmF2b3Igb2YgZmFzdCBjbGlja2luZyBpZiB0aGUgZGlmZmVyZW5jZSBpbiBzY2FsZSBpcyBp
bnNpZ25pZmljYW50LgotICAgICAgICBfc21hcnRNYWduaWZpY2F0aW9uQ29udHJvbGxlci0+YWRq
dXN0U21hcnRNYWduaWZpY2F0aW9uVGFyZ2V0UmVjdEFuZFpvb21TY2FsZXMoIWlzUmVwbGFjZWRF
bGVtZW50LCB0YXJnZXRSZWN0LCBtaW5pbXVtU2NhbGUsIG1heGltdW1TY2FsZSk7Ci0gICAgICAg
IENHRmxvYXQgY3VycmVudFpvb21TY2FsZSA9IFtfd2ViVmlldyBfY29udGVudFpvb21TY2FsZV07
Ci0gICAgICAgIENHRmxvYXQgdGFyZ2V0Wm9vbVNjYWxlID0gW193ZWJWaWV3IF90YXJnZXRDb250
ZW50Wm9vbVNjYWxlRm9yUmVjdDp0YXJnZXRSZWN0IGN1cnJlbnRTY2FsZTpjdXJyZW50Wm9vbVNj
YWxlIGZpdEVudGlyZVJlY3Q6aXNSZXBsYWNlZEVsZW1lbnQgbWluaW11bVNjYWxlOm1pbmltdW1T
Y2FsZSBtYXhpbXVtU2NhbGU6bWF4aW11bVNjYWxlXTsKLSAgICAgICAgaWYgKFtzZWxmIF9hbGxv
d0RvdWJsZVRhcFRvWm9vbUZvckN1cnJlbnRab29tU2NhbGU6Y3VycmVudFpvb21TY2FsZSBhbmRU
YXJnZXRab29tU2NhbGU6dGFyZ2V0Wm9vbVNjYWxlXSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KICAgICBbc2VsZiBfc2V0RG91YmxlVGFwR2VzdHVyZXNFbmFibGVkOk5PXTsKIH0KIApA
QCAtMTEzMSw3ICsxMTE0LDggQEAgLSAodm9pZClfY2FuY2VsSW50ZXJhY3Rpb24KIC0gKHZvaWQp
X2ZpbmlzaEludGVyYWN0aW9uCiB7CiAgICAgX2lzVGFwSGlnaGxpZ2h0SURWYWxpZCA9IE5POwot
ICAgIFtVSVZpZXcgYW5pbWF0ZVdpdGhEdXJhdGlvbjowLjEKKyAgICBDR0Zsb2F0IHRhcEhpZ2hs
aWdodEZhZGVEdXJhdGlvbiA9IFtzZWxmIF9zaG91bGRTaG93RGVidWdUYXBIaWdobGlnaHRzXSA/
IDAuMjUgOiAwLjE7CisgICAgW1VJVmlldyBhbmltYXRlV2l0aER1cmF0aW9uOnRhcEhpZ2hsaWdo
dEZhZGVEdXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uczpeewogICAgICAg
ICAgICAgICAgICAgICAgICAgIFtfaGlnaGxpZ2h0VmlldyBsYXllcl0ub3BhY2l0eSA9IDA7CiAg
ICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMjM3LDcgKzEyMjEsNyBAQCAtICh2b2lkKV9sb25n
UHJlc3NSZWNvZ25pemVkOihVSUxvbmdQcmVzc0dlc3R1cmVSZWNvZ25pemVyICopZ2VzdHVyZVJl
Y29nbml6ZXIKIAogLSAodm9pZClfZW5kUG90ZW50aWFsVGFwQW5kRW5hYmxlRG91YmxlVGFwR2Vz
dHVyZXNJZk5lY2Vzc2FyeQogewotICAgIGlmIChfd2ViVmlldy5fdmlld3BvcnRJc1VzZXJTY2Fs
YWJsZSkKKyAgICBpZiAoX3dlYlZpZXcuX2FsbG93RG91YmxlVGFwR2VzdHVyZXMpCiAgICAgICAg
IFtzZWxmIF9zZXREb3VibGVUYXBHZXN0dXJlc0VuYWJsZWQ6WUVTXTsKIAogICAgIF9wb3RlbnRp
YWxUYXBJblByb2dyZXNzID0gTk87CkBAIC0yMzkyLDYgKzIzNzYsMTIgQEAgLSAodm9pZClfYmVj
b21lRmlyc3RSZXNwb25kZXJXaXRoU2VsZWN0aW9uTW92aW5nRm9yd2FyZDooQk9PTClzZWxlY3Rp
bmdGb3J3YXJkIGMKICAgICB9KTsKIH0KIAorLSAoV2ViQ29yZTo6Q29sb3IpX3RhcEhpZ2hsaWdo
dENvbG9yRm9yRmFzdENsaWNrOihCT09MKWZvckZhc3RDbGljaworeworICAgIEFTU0VSVChbc2Vs
ZiBfc2hvdWxkU2hvd0RlYnVnVGFwSGlnaGxpZ2h0c10pOworICAgIHJldHVybiBmb3JGYXN0Q2xp
Y2sgPyBXZWJDb3JlOjpDb2xvcigwLCAyMjUsIDAsIDEyNykgOiBXZWJDb3JlOjpDb2xvcigyMjUs
IDAsIDAsIDEyNyk7Cit9CisKIC0gKHZvaWQpX3NldERvdWJsZVRhcEdlc3R1cmVzRW5hYmxlZDoo
Qk9PTCllbmFibGVkCiB7CiAgICAgaWYgKGVuYWJsZWQgJiYgIVtfZG91YmxlVGFwR2VzdHVyZVJl
Y29nbml6ZXIgaXNFbmFibGVkXSkgewpAQCAtMjQwMSw2ICsyMzkxLDEwIEBAIC0gKHZvaWQpX3Nl
dERvdWJsZVRhcEdlc3R1cmVzRW5hYmxlZDooQk9PTCllbmFibGVkCiAgICAgICAgIFtfZG91Ymxl
VGFwR2VzdHVyZVJlY29nbml6ZXIgc2V0RGVsZWdhdGU6bmlsXTsKICAgICAgICAgW3NlbGYgX2Ny
ZWF0ZUFuZENvbmZpZ3VyZURvdWJsZVRhcEdlc3R1cmVSZWNvZ25pemVyXTsKICAgICB9CisKKyAg
ICBpZiAoW3NlbGYgX3Nob3VsZFNob3dEZWJ1Z1RhcEhpZ2hsaWdodHNdICYmICFlbmFibGVkKQor
ICAgICAgICBfdGFwSGlnaGxpZ2h0SW5mb3JtYXRpb24uY29sb3IgPSBbc2VsZiBfdGFwSGlnaGxp
Z2h0Q29sb3JGb3JGYXN0Q2xpY2s6WUVTXTsKKwogICAgIFtfZG91YmxlVGFwR2VzdHVyZVJlY29n
bml6ZXIgc2V0RW5hYmxlZDplbmFibGVkXTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQppbmRleCA3ZDMwN2NmZTI0OTVkYTUwMzIzM2Zh
MjQ5Y2IzZjllMmI2ZDI3Zjg0Li5hYzg1NGJhYTgxY2NhMGExZTkzMjg0ZTliNTMxZmY2YTc5ZjZk
MDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94
eUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlP
Uy5tbQpAQCAtOTMyLDE0ICs5MzIsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkTm90SGFuZGxl
VGFwQXNDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgcG9pbnQpCiAgICAgbV91aUNsaWVu
dC0+ZGlkTm90SGFuZGxlVGFwQXNDbGljayhwb2ludCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5
Ojp2aWV3cG9ydE1ldGFUYWdXaWR0aERpZENoYW5nZShmbG9hdCB3aWR0aCkKK3ZvaWQgV2ViUGFn
ZVByb3h5OjpkaXNhYmxlRG91YmxlVGFwR2VzdHVyZXNEdXJpbmdUYXBJZk5vdEFscmVhZHlEaXNh
YmxlZCh1aW50NjRfdCByZXF1ZXN0SUQpCiB7Ci0gICAgbV9wYWdlQ2xpZW50LmRpZENoYW5nZVZp
ZXdwb3J0TWV0YVRhZ1dpZHRoKHdpZHRoKTsKLX0KLQotdm9pZCBXZWJQYWdlUHJveHk6OmRpc2Fi
bGVEb3VibGVUYXBHZXN0dXJlc1VudGlsVGFwSXNGaW5pc2hlZElmTmVjZXNzYXJ5KHVpbnQ2NF90
IHJlcXVlc3RJRCwgYm9vbCBhbGxvd3NEb3VibGVUYXBab29tLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmIHRhcmdldFJlY3QsIGJvb2wgaXNSZXBsYWNlZEVsZW1lbnQsIGRvdWJsZSBtaW5pbXVt
U2NhbGUsIGRvdWJsZSBtYXhpbXVtU2NhbGUpCi17Ci0gICAgbV9wYWdlQ2xpZW50LmRpc2FibGVE
b3VibGVUYXBHZXN0dXJlc1VudGlsVGFwSXNGaW5pc2hlZElmTmVjZXNzYXJ5KHJlcXVlc3RJRCwg
YWxsb3dzRG91YmxlVGFwWm9vbSwgdGFyZ2V0UmVjdCwgaXNSZXBsYWNlZEVsZW1lbnQsIG1pbmlt
dW1TY2FsZSwgbWF4aW11bVNjYWxlKTsKKyAgICBtX3BhZ2VDbGllbnQuZGlzYWJsZURvdWJsZVRh
cEdlc3R1cmVzRHVyaW5nVGFwSWZOb3RBbHJlYWR5RGlzYWJsZWQocmVxdWVzdElEKTsKIH0KIAog
dm9pZCBXZWJQYWdlUHJveHk6OmRpZEZpbmlzaERyYXdpbmdQYWdlc1RvUERGKGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYgcGRmRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5oCmlu
ZGV4IDk4ZDljOTdiMmM0ZDEzM2NlMTkxODZjOTE2ZWVmNDBjN2ViZGJmMjMuLjA1ZmE2NzRhNWZk
ZjY5MTc1YmI1NjhjZTA3MTU1YzM3NDlhODg5YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xs
ZWN0b3IuaApAQCAtNDUsNyArNDUsNiBAQCBwdWJsaWM6CiAgICAgflZpZXdHZXN0dXJlR2VvbWV0
cnlDb2xsZWN0b3IoKTsKIAogICAgIHZvaWQgbWFpbkZyYW1lRGlkTGF5b3V0KCk7Ci0gICAgdm9p
ZCBjb21wdXRlWm9vbUluZm9ybWF0aW9uRm9yTm9kZShXZWJDb3JlOjpOb2RlJiwgV2ViQ29yZTo6
RmxvYXRQb2ludCYgb3JpZ2luLCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlbmRlclJlY3QsIGJvb2wm
IGlzUmVwbGFjZWQsIGRvdWJsZSYgdmlld3BvcnRNaW5pbXVtU2NhbGUsIGRvdWJsZSYgdmlld3Bv
cnRNYXhpbXVtU2NhbGUpOwogCiBwcml2YXRlOgogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVy
LgpAQCAtNjIsNiArNjEsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICB2b2lkIGRpc3BhdGNo
RGlkQ29sbGVjdEdlb21ldHJ5Rm9yU21hcnRNYWduaWZpY2F0aW9uR2VzdHVyZShXZWJDb3JlOjpG
bG9hdFBvaW50IG9yaWdpbiwgV2ViQ29yZTo6RmxvYXRSZWN0IHRhcmdldFJlY3QsIFdlYkNvcmU6
OkZsb2F0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QsIGJvb2wgaXNSZXBsYWNlZEVsZW1lbnQsIGRv
dWJsZSB2aWV3cG9ydE1pbmltdW1TY2FsZSwgZG91YmxlIHZpZXdwb3J0TWF4aW11bVNjYWxlKTsK
KyAgICB2b2lkIGNvbXB1dGVab29tSW5mb3JtYXRpb25Gb3JOb2RlKFdlYkNvcmU6Ok5vZGUmLCBX
ZWJDb3JlOjpGbG9hdFBvaW50JiBvcmlnaW4sIFdlYkNvcmU6OkZsb2F0UmVjdCYgcmVuZGVyUmVj
dCwgYm9vbCYgaXNSZXBsYWNlZCwgZG91YmxlJiB2aWV3cG9ydE1pbmltdW1TY2FsZSwgZG91Ymxl
JiB2aWV3cG9ydE1heGltdW1TY2FsZSk7CiAKICAgICBXZWJQYWdlJiBtX3dlYlBhZ2U7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAxNWRl
NjFkMGZhN2YyZjExY2I1Nzk1N2IyNGNhNThmZGYwOGFiOGJlLi5kMTk3MjBiZGY0MjJiNjZmNzFk
ZmNkN2Y3OTgzZGM2ODJmNDQyY2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0yOTQyLDYgKzI5NDIsOCBAQCB2b2lkIFdlYlBhZ2U6Ondp
bGxDb21taXRMYXllclRyZWUoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24mIGxheWVyVHJhbnNh
Y3Rpb24pCiAgICAgbGF5ZXJUcmFuc2FjdGlvbi5zZXRTY2FsZVdhc1NldEJ5VUlQcm9jZXNzKHNj
YWxlV2FzU2V0QnlVSVByb2Nlc3MoKSk7CiAgICAgbGF5ZXJUcmFuc2FjdGlvbi5zZXRNaW5pbXVt
U2NhbGVGYWN0b3IobV92aWV3cG9ydENvbmZpZ3VyYXRpb24ubWluaW11bVNjYWxlKCkpOwogICAg
IGxheWVyVHJhbnNhY3Rpb24uc2V0TWF4aW11bVNjYWxlRmFjdG9yKG1fdmlld3BvcnRDb25maWd1
cmF0aW9uLm1heGltdW1TY2FsZSgpKTsKKyAgICBsYXllclRyYW5zYWN0aW9uLnNldEluaXRpYWxT
Y2FsZUZhY3RvcihtX3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5pbml0aWFsU2NhbGUoKSk7CisgICAg
bGF5ZXJUcmFuc2FjdGlvbi5zZXRWaWV3cG9ydFdpZHRoKG1fdmlld3BvcnRDb25maWd1cmF0aW9u
LnZpZXdwb3J0QXJndW1lbnRzKCkud2lkdGgpOwogICAgIGxheWVyVHJhbnNhY3Rpb24uc2V0QWxs
b3dzVXNlclNjYWxpbmcoYWxsb3dzVXNlclNjYWxpbmcoKSk7CiAjZW5kaWYKICNpZiBQTEFURk9S
TShNQUMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dl
YlBhZ2VJT1MubW0KaW5kZXggZWE0Mjc0NDVlMzVjNmZlNDhjMTViMTY3Zjk4M2Q1OTA5ODhmYjY1
MS4uMDViNzlhMDQxMWM2ZjlmZmZkMTdlMWEyMmVjNGJmMzI3NDQxMmQ2MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAt
MjMzLDEzICsyMzMsOCBAQCB2b2lkIFdlYlBhZ2U6OnZpZXdwb3J0UHJvcGVydGllc0RpZENoYW5n
ZShjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYgdmlld3BvcnRBcmd1bQogICAgIGlmIChtX3ZpZXdw
b3J0Q29uZmlndXJhdGlvbi52aWV3cG9ydEFyZ3VtZW50cygpID09IHZpZXdwb3J0QXJndW1lbnRz
KQogICAgICAgICByZXR1cm47CiAKLSAgICBmbG9hdCBvbGRXaWR0aCA9IG1fdmlld3BvcnRDb25m
aWd1cmF0aW9uLnZpZXdwb3J0QXJndW1lbnRzKCkud2lkdGg7Ci0KICAgICBtX3ZpZXdwb3J0Q29u
ZmlndXJhdGlvbi5zZXRWaWV3cG9ydEFyZ3VtZW50cyh2aWV3cG9ydEFyZ3VtZW50cyk7CiAgICAg
dmlld3BvcnRDb25maWd1cmF0aW9uQ2hhbmdlZCgpOwotCi0gICAgaWYgKG9sZFdpZHRoICE9IHZp
ZXdwb3J0QXJndW1lbnRzLndpZHRoKQotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlZpZXdwb3J0TWV0YVRhZ1dpZHRoRGlkQ2hhbmdlKHZpZXdwb3J0QXJndW1lbnRzLndpZHRo
KSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6ZGlkUmVjZWl2ZU1vYmlsZURvY1R5cGUoYm9vbCBpc01v
YmlsZURvY3R5cGUpCkBAIC02NjQsMjIgKzY1OSwxMCBAQCB2b2lkIFdlYlBhZ2U6OnBvdGVudGlh
bFRhcEF0UG9zaXRpb24odWludDY0X3QgcmVxdWVzdElELCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aQogewogICAgIG1fcG90ZW50aWFsVGFwTm9kZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCkubm9kZVJl
c3BvbmRpbmdUb0NsaWNrRXZlbnRzKHBvc2l0aW9uLCBtX3BvdGVudGlhbFRhcExvY2F0aW9uKTsK
ICAgICBzZW5kVGFwSGlnaGxpZ2h0Rm9yTm9kZUlmTmVjZXNzYXJ5KHJlcXVlc3RJRCwgbV9wb3Rl
bnRpYWxUYXBOb2RlLmdldCgpKTsKLSAgICBpZiAobV9wb3RlbnRpYWxUYXBOb2RlKSB7CiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICAgICAgaWYgKCFtX3BvdGVudGlhbFRhcE5vZGUtPmFs
bG93c0RvdWJsZVRhcEdlc3R1cmUoKSkgewotICAgICAgICAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpEaXNhYmxlRG91YmxlVGFwR2VzdHVyZXNVbnRpbFRhcElzRmluaXNoZWRJZk5l
Y2Vzc2FyeShyZXF1ZXN0SUQsIGZhbHNlLCBGbG9hdFJlY3QoKSwgZmFsc2UsIDAsIDApKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGlmIChtX3BvdGVudGlhbFRhcE5vZGUg
JiYgIW1fcG90ZW50aWFsVGFwTm9kZS0+YWxsb3dzRG91YmxlVGFwR2VzdHVyZSgpKQorICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpc2FibGVEb3VibGVUYXBHZXN0dXJlc0R1
cmluZ1RhcElmTm90QWxyZWFkeURpc2FibGVkKHJlcXVlc3RJRCkpOwogI2VuZGlmCi0gICAgICAg
IEZsb2F0UG9pbnQgb3JpZ2luID0gcG9zaXRpb247Ci0gICAgICAgIEZsb2F0UmVjdCByZW5kZXJS
ZWN0OwotICAgICAgICBib29sIGlzUmVwbGFjZWQ7Ci0gICAgICAgIGRvdWJsZSB2aWV3cG9ydE1p
bmltdW1TY2FsZTsKLSAgICAgICAgZG91YmxlIHZpZXdwb3J0TWF4aW11bVNjYWxlOwotCi0gICAg
ICAgIG1fdmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jb21wdXRlWm9vbUluZm9ybWF0aW9u
Rm9yTm9kZSgqbV9wb3RlbnRpYWxUYXBOb2RlLmdldCgpLCBvcmlnaW4sIHJlbmRlclJlY3QsIGlz
UmVwbGFjZWQsIHZpZXdwb3J0TWluaW11bVNjYWxlLCB2aWV3cG9ydE1heGltdW1TY2FsZSk7Ci0g
ICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlzYWJsZURvdWJsZVRhcEdlc3R1
cmVzVW50aWxUYXBJc0ZpbmlzaGVkSWZOZWNlc3NhcnkocmVxdWVzdElELCB0cnVlLCByZW5kZXJS
ZWN0LCBpc1JlcGxhY2VkLCB2aWV3cG9ydE1pbmltdW1TY2FsZSwgdmlld3BvcnRNYXhpbXVtU2Nh
bGUpKTsKLSAgICB9CiB9CiAKIHZvaWQgV2ViUGFnZTo6Y29tbWl0UG90ZW50aWFsVGFwKHVpbnQ2
NF90IGxhc3RMYXllclRyZWVUcmFuc2FjdGlvbklkKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGU5Zjc3YzdmMjIxMmQ1YTQ4
NjkzZTJmYmNkMTBjZTQ5ZDY3NGUzZTIuLmM0MDgxOWQ1Y2EzZTI1MjUwZjMyZTAxMTBkYjdlZmM0
NjAyNjEwODcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNS0xMC0yNyAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdmlld3BvcnQt
d2lkdGgtYmFzZWQgZmFzdC1jbGljayBoZXVyaXN0aWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDYwNAorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
MjMyNjczMDg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW1wbGVtZW50IGEgbmV3IGZhc3QtY2xpY2sgaGV1cmlzdGljIHRoYXQgYXBwbGllcyB0byB2
aWV3cG9ydHMgd2l0aCB3aWR0aCA9IGRldmljZS13aWR0aC4gQWRkcworICAgICAgICBuZXcgdGVz
dHMgdG8gY2hlY2sgdmFyaW91cyBmYXN0LWNsaWNraW5nIGJlaGF2aW9ycy4gVGhlc2UgdGhyZWUg
dGVzdHMgY2hlY2sgKGZvciBwYWdlcyB3aXRoIHdpZHRoPQorICAgICAgICBkZXZpY2Utd2lkdGgp
IHRoYXQ6CisKKyAgICAgICAgLSBEb3VibGUtdGFwcGluZyB0byB6b29tIHN0aWxsIHdvcmtzIHdo
ZW4gdGhlIHNjYWxlIGlzIG5vdCB0aGUgaW5pdGlhbCBzY2FsZS4KKyAgICAgICAgLSBJZiB0aGUg
cGFnZSBpcyBhdCBpbml0aWFsIHNjYWxlLCB3ZSBmaXJlIGZhc3QtY2xpY2tzIGluc3RlYWQgb2Yg
em9vbWluZy4KKyAgICAgICAgLSBXaGVuIHpvb21pbmcgb3V0IGZyb20gZWxlbWVudCBzY2FsZSwg
d2UgZW5kIHVwIGF0IGluaXRpYWwgc2NhbGUgaW5zdGVhZCBvZiBtaW5pbXVtIHNjYWxlLgorCisg
ICAgICAgICogZmFzdC9ldmVudHMvaW9zL3ZpZXdwb3J0LWRldmljZS13aWR0aC1hbGxvd3MtZG91
YmxlLXRhcC16b29tLW91dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZl
bnRzL2lvcy92aWV3cG9ydC1kZXZpY2Utd2lkdGgtYWxsb3dzLWRvdWJsZS10YXAtem9vbS1vdXQu
aHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9ldmVudHMvaW9zL3ZpZXdwb3J0LWRldmljZS13
aWR0aC1hdC1pbml0aWFsLXNjYWxlLWZhc3QtY2xpY2tzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9ldmVudHMvaW9zL3ZpZXdwb3J0LWRldmljZS13aWR0aC1hdC1pbml0aWFs
LXNjYWxlLWZhc3QtY2xpY2tzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2lv
cy92aWV3cG9ydC16b29tcy1mcm9tLWVsZW1lbnQtdG8taW5pdGlhbC1zY2FsZS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZXZlbnRzL2lvcy92aWV3cG9ydC16b29tcy1mcm9t
LWVsZW1lbnQtdG8taW5pdGlhbC1zY2FsZS5odG1sOiBBZGRlZC4KKwogMjAxNS0xMC0yMiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQg
dG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247IGZvciBpT1MKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL2lvcy92aWV3cG9ydC1kZXZpY2Utd2lkdGgtYWxsb3dzLWRvdWJsZS10
YXAtem9vbS1vdXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL3Zp
ZXdwb3J0LWRldmljZS13aWR0aC1hbGxvd3MtZG91YmxlLXRhcC16b29tLW91dC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjQ0NzExNDYxZDUyMDUxNDNkNDFmNGJkYTg5MmI2YjBkMzVkZmQ5ZAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy92aWV3cG9ydC1k
ZXZpY2Utd2lkdGgtYWxsb3dzLWRvdWJsZS10YXAtem9vbS1vdXQtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMiBAQAorVGhlIHZpZXdwb3J0IHpvb21lZCB0byBzY2FsZTogMS42CisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy92aWV3cG9ydC1kZXZpY2Utd2lkdGgtYWxs
b3dzLWRvdWJsZS10YXAtem9vbS1vdXQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lv
cy92aWV3cG9ydC1kZXZpY2Utd2lkdGgtYWxsb3dzLWRvdWJsZS10YXAtem9vbS1vdXQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wYTBlMjlmNTk4NjMyM2JlODM5ZmMyNjE1ZDQyOGU2NzU1OWU0NTFjCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL3ZpZXdwb3J0LWRldmlj
ZS13aWR0aC1hbGxvd3MtZG91YmxlLXRhcC16b29tLW91dC5odG1sCkBAIC0wLDAgKzEsNTcgQEAK
KzwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmll
d3BvcnQ9dHJ1ZSBdIC0tPgorCis8aHRtbD4KKzxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50
PSJpbml0aWFsLXNjYWxlPTEuMCwgd2lkdGg9ZGV2aWNlLXdpZHRoIj4KKzxoZWFkPgorICAgIDxz
Y3JpcHQgaWQ9InVpLXNjcmlwdCIgdHlwZT0idGV4dC9wbGFpbiI+CisgICAgICAgIChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgIHVpQ29udHJvbGxlci5kaWRFbmRab29taW5nQ2FsbGJhY2sgPSBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB1aUNvbnRyb2xsZXIudWlTY3JpcHRDb21wbGV0
ZSh1aUNvbnRyb2xsZXIuem9vbVNjYWxlKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICB1
aUNvbnRyb2xsZXIuZG91YmxlVGFwQXRQb2ludCgxNSwgMTUsIGZ1bmN0aW9uKCkge30pOworICAg
ICAgICB9KSgpOworICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5k
b3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIGdldFVJU2NyaXB0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1aS1zY3JpcHQiKS50ZXh0OworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgh
d2luZG93LmV2ZW50U2VuZGVyIHx8ICF0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgZXZlbnRTZW5kZXIuc2NhbGVQYWdlQnkoMywg
Myk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGdldFVJU2NyaXB0KCksIGZ1
bmN0aW9uKHJlc3VsdCkgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJ0YXJnZXQiKS5pbm5lclRleHQgPSAiVGhlIHZpZXdwb3J0IHpvb21lZCB0byBzY2FsZTogIiAr
IHJlc3VsdDsKKyAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soKQor
ICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0Iiku
aW5uZXJUZXh0ID0gIkZBSUw6IENsaWNrIGZpcmVkIHdoZW4gd2Ugc2hvdWxkIG9ubHkgYmUgem9v
bWluZy4iOworICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0K
KyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGU+CisgICAgICAgIGJvZHkgeworICAgICAgICAgICAg
bWFyZ2luOiAwOworICAgICAgICB9CisgICAgICAgICN0YXJnZXQgeworICAgICAgICAgICAgaGVp
Z2h0OiAxMDBweDsKKyAgICAgICAgICAgIHdpZHRoOiAxMDBweDsKKyAgICAgICAgICAgIGJhY2tn
cm91bmQtY29sb3I6IHNpbHZlcjsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8ZGl2IGlkPSJ0YXJnZXQiPjwvZGl2PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL3ZpZXdw
b3J0LWRldmljZS13aWR0aC1hdC1pbml0aWFsLXNjYWxlLWZhc3QtY2xpY2tzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy92aWV3cG9ydC1kZXZpY2Utd2lkdGgtYXQt
aW5pdGlhbC1zY2FsZS1mYXN0LWNsaWNrcy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTEyMzc0
YjljYjU2MWUxMDE4YWUxN2JhMDRlYTlhYWQxMTc1NTYwOAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy92aWV3cG9ydC1kZXZpY2Utd2lkdGgtYXQtaW5pdGlh
bC1zY2FsZS1mYXN0LWNsaWNrcy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKK1JlcGVhdGVkbHkg
dGFwcGluZyBvbiB0aGUgYnV0dG9uIHNob3VsZCBmaXJlIGNsaWNrIGV2ZW50cy4KKworVGhpcyB0
ZXN0IGlzIGJlc3QgcnVuIGluIFdlYktpdFRlc3RSdW5uZXIuIElmIHlvdSBhcmUgcnVubmluZyB0
aGlzIHRlc3QgbWFudWFsbHksIHZlcmlmeSB0aGF0IHRhcHBpbmcgdGhlIGJ1dHRvbiBjYXVzZXMg
YSAiQ2xpY2shIiBtZXNzYWdlIHRvIGFwcGVhciBiZWxvdywgYW5kIHRoYXQgY2xpY2sgb2NjdXJy
ZWQgd2l0aG91dCB0aGUgcmVndWxhciAzNTBtcyBkZWxheSBmb3IgZG91YmxlIHRhcHBpbmcuCisK
K0NsaWNrIQorQ2xpY2shCitDbGljayEKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvaW9zL3ZpZXdwb3J0LWRldmljZS13aWR0aC1hdC1pbml0aWFsLXNjYWxlLWZhc3QtY2xp
Y2tzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy9pb3Mvdmlld3BvcnQtZGV2aWNlLXdp
ZHRoLWF0LWluaXRpYWwtc2NhbGUtZmFzdC1jbGlja3MuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjM3Mzkx
ZmEwYjU2NTZjM2QyZjU4OTAxNGE0ZWJiYTYyZmUzZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvaW9zL3ZpZXdwb3J0LWRldmljZS13aWR0aC1hdC1pbml0aWFs
LXNjYWxlLWZhc3QtY2xpY2tzLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPCFET0NUWVBFIGh0bWw+
IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgdXNlRmxleGlibGVWaWV3cG9ydD10cnVlIF0gLS0+
CisKKzxodG1sPgorPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9
MS4wLCB3aWR0aD1kZXZpY2Utd2lkdGgiPgorCis8aGVhZD4KKyAgICA8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IGlk
PSJ1aS1zY3JpcHQiIHR5cGU9InRleHQvcGxhaW4iPgorICAgICAgICAoZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICB1aUNvbnRyb2xsZXIuZGlkRW5kWm9vbWluZ0NhbGxiYWNrID0gZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoIkZBSUw6
IFpvb21lZCB0byBzY2FsZSAiICsgdWlDb250cm9sbGVyLnpvb21TY2FsZSArICIgd2hlbiB3ZSBz
aG91bGQgb25seSBiZSBmaXJpbmcgZmFzdCBjbGlja3MuIik7CisgICAgICAgICAgICB9OworCisg
ICAgICAgICAgICBmdW5jdGlvbiBmaXJlU3VjY2Vzc2l2ZVNpbmdsZVRhcHMoKSB7CisgICAgICAg
ICAgICAgICAgdWlDb250cm9sbGVyLnNpbmdsZVRhcEF0UG9pbnQoMjAwLCAyMDAsIGZpcmVTdWNj
ZXNzaXZlU2luZ2xlVGFwcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaXJlU3VjY2Vz
c2l2ZVNpbmdsZVRhcHMoKTsKKyAgICAgICAgfSkoKTsKKyAgICA8L3NjcmlwdD4KKworICAgIDxz
Y3JpcHQ+CisgICAgdmFyIGNsaWNrQ291bnQgPSAwOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
cikKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKKyAgICBmdW5jdGlvbiBn
ZXRVSVNjcmlwdCgpIHsKKyAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1
aS1zY3JpcHQiKS50ZXh0OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAg
ICAgIGlmICh0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KQorICAgICAgICAgICAgdGVzdFJ1bm5lci5y
dW5VSVNjcmlwdChnZXRVSVNjcmlwdCgpLCBmdW5jdGlvbihyZXN1bHQpIHsgfSk7CisgICAgfQor
ICAgIGZ1bmN0aW9uIGhhbmRsZUNsaWNrZWQoKSB7CisgICAgICAgIGNsaWNrQ291bnQrKzsKKyAg
ICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgi
Q2xpY2shIikpOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImJyIikpOworICAgICAgICBpZiAoY2xpY2tDb3VudCA9PSAzKQorICAgICAg
ICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfQorICAgIDwvc2NyaXB0PgorCisg
ICAgPHN0eWxlPgorICAgIGJvZHkgeworICAgICAgICBtYXJnaW46IDA7CisgICAgfQorCisgICAg
I3RhcmdldCB7CisgICAgICAgIHdpZHRoOiA0MDBweDsKKyAgICAgICAgaGVpZ2h0OiA0MDBweDsK
KyAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJydW5UZXN0KCki
PgorICAgIDxidXR0b24gaWQ9InRhcmdldCIgb25jbGljaz0iaGFuZGxlQ2xpY2tlZCgpIj48L2J1
dHRvbj4KKyAgICA8cD5SZXBlYXRlZGx5IHRhcHBpbmcgb24gdGhlIGJ1dHRvbiBzaG91bGQgZmly
ZSBjbGljayBldmVudHMuPC9wPgorICAgIDxwPlRoaXMgdGVzdCBpcyBiZXN0IHJ1biBpbiBXZWJL
aXRUZXN0UnVubmVyLiBJZiB5b3UgYXJlIHJ1bm5pbmcgdGhpcyB0ZXN0IG1hbnVhbGx5LCB2ZXJp
ZnkgdGhhdCB0YXBwaW5nIHRoZSBidXR0b24gY2F1c2VzIGEgIkNsaWNrISIgbWVzc2FnZSB0byBh
cHBlYXIgYmVsb3csIGFuZCB0aGF0IGNsaWNrIG9jY3VycmVkIHdpdGhvdXQgdGhlIHJlZ3VsYXIg
MzUwbXMgZGVsYXkgZm9yIGRvdWJsZSB0YXBwaW5nLjwvcD4KKyAgICA8c2NyaXB0IHNyYz0iLi4v
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+CisKKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy92aWV3cG9ydC16
b29tcy1mcm9tLWVsZW1lbnQtdG8taW5pdGlhbC1zY2FsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2V2ZW50cy9pb3Mvdmlld3BvcnQtem9vbXMtZnJvbS1lbGVtZW50LXRvLWluaXRp
YWwtc2NhbGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5Nzk0NjQ5MmJmMTg0NWRkNTg1YTRi
ODQyYzk3MmEwOGY5NTA5OGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2V2
ZW50cy9pb3Mvdmlld3BvcnQtem9vbXMtZnJvbS1lbGVtZW50LXRvLWluaXRpYWwtc2NhbGUtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEgQEAKK1RoZSB2aWV3cG9ydCB6b29tZWQgdG8gc2NhbGU6IDUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy92aWV3cG9ydC16b29tcy1m
cm9tLWVsZW1lbnQtdG8taW5pdGlhbC1zY2FsZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvaW9zL3ZpZXdwb3J0LXpvb21zLWZyb20tZWxlbWVudC10by1pbml0aWFsLXNjYWxlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjc2OTEyMmE4YjIzYjI4OWU3NDkzMWQ4NWE1Yzg1MmJjM2ZiMjBkMwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZXZlbnRzL2lvcy92aWV3cG9ydC16b29t
cy1mcm9tLWVsZW1lbnQtdG8taW5pdGlhbC1zY2FsZS5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwh
RE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIHVzZUZsZXhpYmxlVmlld3Bv
cnQ9dHJ1ZSBdIC0tPgorCis8aHRtbD4KKzxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJp
bml0aWFsLXNjYWxlPTUsIHdpZHRoPWRldmljZS13aWR0aCI+Cis8aGVhZD4KKyAgICA8c2NyaXB0
IGlkPSJ1aS1zY3JpcHQiIHR5cGU9InRleHQvcGxhaW4iPgorICAgICAgICAoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICB1aUNvbnRyb2xsZXIuZGlkRW5kWm9vbWluZ0NhbGxiYWNrID0gZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgdWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUodWlD
b250cm9sbGVyLnpvb21TY2FsZSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgdWlDb250
cm9sbGVyLmRvdWJsZVRhcEF0UG9pbnQoMTUsIDE1LCBmdW5jdGlvbigpIHt9KTsKKyAgICAgICAg
fSkoKTsKKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LnRl
c3RSdW5uZXIpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAg
ICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiBnZXRVSVNjcmlwdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgidWktc2NyaXB0IikudGV4dDsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIXdpbmRv
dy5ldmVudFNlbmRlciB8fCAhdGVzdFJ1bm5lci5ydW5VSVNjcmlwdCkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLnNjYWxlUGFnZUJ5KDEuNiwgMS42
KTsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoZ2V0VUlTY3JpcHQoKSwgZnVu
Y3Rpb24ocmVzdWx0KSB7CisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
InRhcmdldCIpLmlubmVyVGV4dCA9ICJUaGUgdmlld3BvcnQgem9vbWVkIHRvIHNjYWxlOiAiICsg
TnVtYmVyKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGhhbmRsZUNs
aWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRh
cmdldCIpLmlubmVyVGV4dCA9ICJGQUlMOiBDbGljayBmaXJlZCB3aGVuIHdlIHNob3VsZCBvbmx5
IGJlIHpvb21pbmcuIjsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAg
ICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlPgorICAgICAgICBib2R5IHsKKyAgICAg
ICAgICAgIG1hcmdpbjogMDsKKyAgICAgICAgfQorICAgICAgICAjdGFyZ2V0IHsKKyAgICAgICAg
ICAgIGhlaWdodDogMTAwcHg7CisgICAgICAgICAgICB3aWR0aDogMTAwcHg7CisgICAgICAgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBzaWx2ZXI7CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgorPC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPGRpdiBpZD0idGFyZ2V0Ij48L2Rpdj4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="289302"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>