<?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>132879</bug_id>
          
          <creation_ts>2014-05-13 11:30:26 -0700</creation_ts>
          <short_desc>REGRESSION (WebKit2): Zooming to text field leaves it partially hidden by the form assistant</short_desc>
          <delta_ts>2023-12-08 06:20:27 -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>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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Enrica Casucci">enrica</reporter>
          <assigned_to name="Enrica Casucci">enrica</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>commit-queue</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1009024</commentid>
    <comment_count>0</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-05-13 11:30:26 -0700</bug_when>
    <thetext>We need to have in WebKit2 the same logic we had in WebKit for iOS.
This tracks the work required to implement the heuristics for zooming based on the font size and the device type.

&lt;rdar://problem/16318049&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009025</commentid>
    <comment_count>1</comment_count>
      <attachid>231397</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-05-13 11:35:51 -0700</bug_when>
    <thetext>Created attachment 231397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009026</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-05-13 11:36:49 -0700</bug_when>
    <thetext>Attachment 231397 did not pass style-queue:


ERROR: Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:499:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:500:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:501:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:502:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:503:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentViewInteraction.mm:504:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:700:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:746:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:750:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:751:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentView.mm:482:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentView.mm:483:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentView.mm:484:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentView.mm:485:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentView.mm:486:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebKit2/UIProcess/ios/WKContentView.mm:487:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 16 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009029</commentid>
    <comment_count>3</comment_count>
      <attachid>231397</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-05-13 11:45:31 -0700</bug_when>
    <thetext>Comment on attachment 231397
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        position in the when using delegate scrolling.

in the when

&gt; Source/WebCore/platform/ScrollView.cpp:500
&gt; +    IntPoint newScrollPosition = !delegatesScrolling() ? adjustScrollPositionWithinRange(scrollPoint) : scrollPoint;

this is somewhat scary to me

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:87
&gt; +@interface UIView (UIViewInternal)

are these supposed to be (Details), or do we have different guidance now? In any case I don&apos;t think UIViewInternal is the right category name.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:632
&gt; +// focusedElementRect and selectionRect are both in document cooridnate.

*coordinates*

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:638
&gt; +    const double WKWebViewStandardFontSize = 16;
&gt; +    const double kMinimumHeightToShowContentAboveKeyboard = 106;
&gt; +    const CFTimeInterval UIWebFormAnimationDuration = 0.25;
&gt; +    const double CaretOffsetFromWindowEdge = 20;

There is a big bunch of style mismatching here.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:655
&gt; +    // Find first parent view with a view controller -&gt; that controller&apos;s root controller -&gt; top-most full-screen view controller within root controller&apos;s hierarchy.

what-but-not-why comment

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:663
&gt; +    CGRect unoscuredScrollViewRectInWebViewCoordinate = UIEdgeInsetsInsetRect([self bounds], _obscuredInsets);

Coordinate*s* in a bunch of places

typo &quot;unoscured&quot;

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:744
&gt; +    WebCore::FloatPoint newCenter = CGPointMake((topLeft.x + unoscuredScrollViewRectInWebViewCoordinate.size.width / 2.0),

Why the inner parens?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009072</commentid>
    <comment_count>4</comment_count>
      <attachid>231397</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-05-13 14:09:52 -0700</bug_when>
    <thetext>Comment on attachment 231397
Patch

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

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:92
&gt; +- (BOOL)_isHostedInAnotherProcess;

I hope we don&apos;t actually need to support this?

&gt;&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:632
&gt;&gt; +// focusedElementRect and selectionRect are both in document cooridnate.
&gt; 
&gt; *coordinates*

Let&apos;s rename them instead of having a comment: focusedElementRectInDocumentCoordinates &amp;&amp; selectionRectInDocumentCoordinates.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:633
&gt; +- (void)_zoomToFocusRect:(WebCore::FloatRect)focusedElementRect selectionRect:(WebCore::FloatRect)selectionRect fontSize:(float)fontSize minimumScale:(double)minimumScale maximumScale:(double)maximumScale allowUserScaling:(BOOL)allowUserScaling forceScroll:(BOOL)forceScroll

Let&apos;s rename allowUserScaling, it is not only user scaling.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:641
&gt; +    double scale = (allowUserScaling) ? std::min(std::max(WKWebViewStandardFontSize / fontSize, minimumScale), maximumScale) : contentZoomScale(self);

No need for parenthesis on allowUserScaling.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:643
&gt; +    CGFloat documentWidth = [_contentView bounds].size.width;
&gt; +    if (documentWidth)

It seems unlikely we end up in here without a documentWidth.

If that happen, that means there is a race between this call and a document tear down. The right solution in that case is not to check the documentWidth, but having a requestID that you invalidate.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:648
&gt; +    UIScrollView *scrollView = _scrollView.get();

Let&apos;s use _scrollView everywhere for clarity.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:653
&gt; +    focusedElementRectInNewScale.moveBy([_contentView frame].origin);
&gt; +    focusedElementRectInNewScale.scale(scale);

Looks like I put those two lines in the wrong order.
The scale should go first, then moveBy.

&gt;&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:655
&gt;&gt; +    // Find first parent view with a view controller -&gt; that controller&apos;s root controller -&gt; top-most full-screen view controller within root controller&apos;s hierarchy.
&gt; 
&gt; what-but-not-why comment

I agree with Tim, this should say that you want to find the part of the view visible on screen.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:668
&gt; +    CGSize visibleSize = visibleScrollViewBoundsInWebViewCoordinate.size;
&gt; +    CGFloat visibleOffsetFromTop = 0;

I would put the new line above this pair instead of bellow.
The branch bellow is the one computing those values, it seems they should be in the same paragraph.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:695
&gt; +        // Don&apos;t bother scrolling if the entire node is already visible, whether or not we got a selectionRect.
&gt; +        if (CGRectContainsRect(currentlyVisibleRegionInWebViewCoordinates, focusedElementRectInNewScale))
&gt; +            return;
&gt; +
&gt; +        // Don&apos;t bother scrolling if we have a valid selectionRect and it is already visible.
&gt; +        if (selectionRectIsNotNull &amp;&amp; CGRectContainsRect(currentlyVisibleRegionInWebViewCoordinates, selectionRect))
&gt; +            return;

This does not look correct to me.

The first branch is comparing the focused element rect in *new* scale with the current visible region. You should instead compare the current visible rect.
Instead of focusedElementRectInNewScale, you could use convertRect:FromView:_contentView


The second branch comparing selectionRect in document coordinate with the visible region in webView coordinate, that does not make sense.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:702
&gt; +    CGFloat horizontalSpaceInWebViewCoordinates = MAX((visibleSize.width - focusedElementRectInNewScale.width()) / 2.0, 0.0);
&gt; +    CGFloat verticalSpaceInWebViewCoordinates = MAX((visibleSize.height - focusedElementRectInNewScale.height()) / 2.0, 0.0);

Let&apos;s use std::max() for consistency.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:713
&gt; +        selectionRectInNewScale.moveBy([_contentView frame].origin);
&gt; +        selectionRectInNewScale.scale(scale);

I made the same mistake here, the origin is scaled.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:720
&gt; +    documentBoundsInNewScale.moveBy([_contentView frame].origin);
&gt; +    documentBoundsInNewScale.scale(scale);

Ditto.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:747
&gt; +    newCenter.scale(1 / scale, 1 / scale);

I would have a comment explaining this, that is incredibly confusing API.

&gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:940
&gt;      _keyboardVerticalOverlap = [[UIPeripheralHost sharedInstance] getVerticalOverlapForView:self usingKeyboardInfo:keyboardInfo];

We should nuke this, generalize the new code for double tap to zoom.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1786
&gt; +    information.selectionRect = IntRect(m_lastInteractionLocation, IntSize(1, 1));

Hehehe</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009080</commentid>
    <comment_count>5</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-05-13 14:37:02 -0700</bug_when>
    <thetext>&gt; this is somewhat scary to me
I discussed this at length with Ben. We should not be clamping the scroll position on the WebProcess side where the information could be stale.

&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:87
&gt; &gt; +@interface UIView (UIViewInternal)
&gt; 
&gt; are these supposed to be (Details), or do we have different guidance now? In any case I don&apos;t think UIViewInternal is the right category name.
I followed what was donne on line 79 of the same file where the author used UIScrollViewInternal as category name.

&gt; Coordinate*s* in a bunch of places

Forgive me, it is the italian taking over coordinate is the plural in italian :-). I&apos;ll fix them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1009098</commentid>
    <comment_count>6</comment_count>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-05-13 15:05:23 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 231397 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=231397&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:92
&gt; &gt; +- (BOOL)_isHostedInAnotherProcess;
&gt; 
&gt; I hope we don&apos;t actually need to support this?
In theory an app developer can use he WK2 view in a remotely hosted view...

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm:653
&gt; &gt; +    focusedElementRectInNewScale.moveBy([_contentView frame].origin);
&gt; &gt; +    focusedElementRectInNewScale.scale(scale);
&gt; 
&gt; Looks like I put those two lines in the wrong order.
&gt; The scale should go first, then moveBy.
&gt;

I&apos;ve fixed it in both places.
 
&gt; &gt;      _keyboardVerticalOverlap = [[UIPeripheralHost sharedInstance] getVerticalOverlapForView:self usingKeyboardInfo:keyboardInfo];
&gt; 
&gt; We should nuke this, generalize the new code for double tap to zoom.
I will replace its use with _inputViewBounds.size.height

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1786
&gt; &gt; +    information.selectionRect = IntRect(m_lastInteractionLocation, IntSize(1, 1));
&gt; 
&gt; Hehehe
I know :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1997978</commentid>
    <comment_count>7</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2023-12-08 06:20:27 -0800</bug_when>
    <thetext>Landed here: https://github.com/WebKit/WebKit/commit/395ac0af89e548a5ef46420d96307a0ab0934017


and didn&apos;t seem to back out.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231397</attachid>
            <date>2014-05-13 11:35:51 -0700</date>
            <delta_ts>2014-05-13 14:09:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>zoomtofocus.txt</filename>
            <type>text/plain</type>
            <size>24666</size>
            <attacher name="Enrica Casucci">enrica</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODY4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE0LTA1LTEzICBFbnJpY2Eg
Q2FzdWNjaSAgPGVucmljYUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTiAoV2ViS2l0
Mik6IFpvb21pbmcgdG8gdGV4dCBmaWVsZCBsZWF2ZXMgaXQgcGFydGlhbGx5IGhpZGRlbiBieSB0
aGUgZm9ybSBhc3Npc3RhbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzI4NzkKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE2MzE4MDQ5PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBzb21l
IGV4cG9ydHMuIFRoZSBmaXggdG8gc2V0U2Nyb2xsUG9zaXRpb24gaXMgdG8gYXZvaWQgY2xhbXBp
bmcgdGhlIHNjcm9sbAorICAgICAgICBwb3NpdGlvbiBpbiB0aGUgd2hlbiB1c2luZyBkZWxlZ2F0
ZSBzY3JvbGxpbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBwbGF0
Zm9ybS9TY3JvbGxWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNj
cm9sbFBvc2l0aW9uKToKKwogMjAxNC0wNS0xMyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NTSU9OKHIxNjg1MjgpIFN1YnBpeGVsIHJlbmRlcmluZzog
U2VsZWN0aW9uIHJlY3QgaXMgbm90IHBvc2l0aW9uZWQgcHJvcGVybHkgd2hlbiBTVkcgdGV4dCBp
cyBzZWxlY3RlZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNjg2ODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMTU1MCw2
ICsxNTUwLDcgQEAgX19aTks3V2ViQ29yZTExUmVuZGVyQmxvY2syNWlubGluZUVsZW1lbgogX19a
Tks3V2ViQ29yZTExUmVuZGVyTGF5ZXIxOWFic29sdXRlQm91bmRpbmdCb3hFdgogX19aTks3V2Vi
Q29yZTExUmVuZGVyTGF5ZXIyNG5lZWRzQ29tcG9zaXRlZFNjcm9sbGluZ0V2CiBfX1pOSzdXZWJD
b3JlMTFSZW5kZXJTdHlsZTExZm9udE1ldHJpY3NFdgorX19aTks3V2ViQ29yZTExUmVuZGVyU3R5
bGUxNWZvbnREZXNjcmlwdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTFSZW5kZXJTdHlsZTIxdmlzaXRl
ZERlcGVuZGVudENvbG9yRWkKIF9fWk5LN1dlYkNvcmUxMVJlbmRlclN0eWxlNGZvbnRFdgogX19a
Tks3V2ViQ29yZTEyUmVuZGVyT2JqZWN0MTRlbmNsb3NpbmdMYXllckV2CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkocmV2aXNpb24gMTY4Njg0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5Nyw3
ICs0OTcsNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFNjcm9sbFBvc2l0aW9uKGNvbnN0CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBJbnRQb2ludCBuZXdTY3JvbGxQb3NpdGlvbiA9IGFk
anVzdFNjcm9sbFBvc2l0aW9uV2l0aGluUmFuZ2Uoc2Nyb2xsUG9pbnQpOworICAgIEludFBvaW50
IG5ld1Njcm9sbFBvc2l0aW9uID0gIWRlbGVnYXRlc1Njcm9sbGluZygpID8gYWRqdXN0U2Nyb2xs
UG9zaXRpb25XaXRoaW5SYW5nZShzY3JvbGxQb2ludCkgOiBzY3JvbGxQb2ludDsKIAogICAgIGlm
ICgoIWRlbGVnYXRlc1Njcm9sbGluZygpIHx8ICFpblByb2dyYW1tYXRpY1Njcm9sbCgpKSAmJiBu
ZXdTY3JvbGxQb3NpdGlvbiA9PSBzY3JvbGxQb3NpdGlvbigpKQogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjg2ODkpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAxNC0wNS0xMyAgRW5yaWNhIENh
c3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJT04gKFdlYktpdDIp
OiBab29taW5nIHRvIHRleHQgZmllbGQgbGVhdmVzIGl0IHBhcnRpYWxseSBoaWRkZW4gYnkgdGhl
IGZvcm0gYXNzaXN0YW50LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMyODc5CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNjMxODA0OT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRzIHRoZSBoZXVy
aXN0aWNzIHRvIHpvb20gYW5kIHNjcm9sbCB0byBlbnN1cmUgdGhlIGVsZW1lbnQgYmVpbmcgZm9j
dXNlZAorICAgICAgICBpcyBmdWxseSB2aXNpYmxlIGFuZCBpdHMgdGV4dCByZWFkYWJsZS4KKwor
ICAgICAgICAqIFNoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0
OjpBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZGVjb2RlKToKKyAgICAgICAgKiBTaGFyZWQvQXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24uaDoKKyAgICAgICAgKFdlYktpdDo6QXNzaXN0ZWROb2RlSW5m
b3JtYXRpb246OkFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF96b29tVG9Gb2N1
c1JlY3Q6V2ViQ29yZTo6c2VsZWN0aW9uUmVjdDpXZWJDb3JlOjpmb250U2l6ZTptaW5pbXVtU2Nh
bGU6bWF4aW11bVNjYWxlOmFsbG93VXNlclNjYWxpbmc6Zm9yY2VTY3JvbGw6XSk6CisgICAgICAg
ICgtW1dLV2ViVmlldyBfa2V5Ym9hcmRDaGFuZ2VkV2l0aEluZm86YWRqdXN0U2Nyb2xsVmlldzpd
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF96b29t
VG9Gb2N1c1JlY3Q6c2VsZWN0aW9uUmVjdDpmb250U2l6ZTptaW5pbXVtU2NhbGU6bWF4aW11bVNj
YWxlOmFsbG93VXNlclNjYWxpbmc6Zm9yY2VTY3JvbGw6XSk6CisgICAgICAgICogVUlQcm9jZXNz
L2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZp
ZXcgX2Rpc3BsYXlGb3JtTm9kZUlucHV0Vmlld10pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3
IF9zdGFydEFzc2lzdGluZ05vZGU6dXNlcklzSW50ZXJhY3Rpbmc6dXNlck9iamVjdDpdKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmdldEFzc2lzdGVkTm9kZUluZm9ybWF0aW9uKToKKwogMjAxNC0wNS0x
MyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWJL
aXQyIFZpZXcgR2VzdHVyZXMgKFN3aXBlKTogRW5jb2RlIHNuYXBzaG90cyBhcyBKUEVHIG9uIHNv
bWUgcGxhdGZvcm1zCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXNzaXN0ZWROb2RlSW5m
b3JtYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Bc3Npc3Rl
ZE5vZGVJbmZvcm1hdGlvbi5jcHAJKHJldmlzaW9uIDE2ODY4NCkKKysrIFNvdXJjZS9XZWJLaXQy
L1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0
LDggKzY0LDEwIEBAIGJvb2wgV0tPcHRpb25JdGVtOjpkZWNvZGUoSVBDOjpBcmd1bWVudEQKIHZv
aWQgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb246OmVuY29kZShJUEM6OkFyZ3VtZW50RW5jb2RlciYg
ZW5jb2RlcikgY29uc3QKIHsKICAgICBlbmNvZGVyIDw8IGVsZW1lbnRSZWN0OworICAgIGVuY29k
ZXIgPDwgc2VsZWN0aW9uUmVjdDsKICAgICBlbmNvZGVyIDw8IG1pbmltdW1TY2FsZUZhY3RvcjsK
ICAgICBlbmNvZGVyIDw8IG1heGltdW1TY2FsZUZhY3RvcjsKKyAgICBlbmNvZGVyIDw8IG5vZGVG
b250U2l6ZTsKICAgICBlbmNvZGVyIDw8IGhhc05leHROb2RlOwogICAgIGVuY29kZXIgPDwgaGFz
UHJldmlvdXNOb2RlOwogICAgIGVuY29kZXIgPDwgaXNBdXRvY29ycmVjdDsKQEAgLTc2LDYgKzc4
LDcgQEAgdm9pZCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbjo6ZW5jb2RlKElQQwogICAgIGVuY29k
ZXIgPDwgc2VsZWN0ZWRJbmRleDsKICAgICBlbmNvZGVyIDw8IGlzTXVsdGlTZWxlY3Q7CiAgICAg
ZW5jb2RlciA8PCBpc1JlYWRPbmx5OworICAgIGVuY29kZXIgPDwgYWxsb3dzVXNlclNjYWxpbmc7
CiAgICAgZW5jb2RlciA8PCB2YWx1ZTsKICAgICBlbmNvZGVyIDw8IHZhbHVlQXNOdW1iZXI7CiAg
ICAgZW5jb2RlciA8PCB0aXRsZTsKQEAgLTg2LDEyICs4OSwxOCBAQCBib29sIEFzc2lzdGVkTm9k
ZUluZm9ybWF0aW9uOjpkZWNvZGUoSVBDCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQu
ZWxlbWVudFJlY3QpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoIWRlY29kZXIu
ZGVjb2RlKHJlc3VsdC5zZWxlY3Rpb25SZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubWluaW11bVNjYWxlRmFjdG9yKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQubWF4aW11
bVNjYWxlRmFjdG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZXN1bHQubm9kZUZvbnRTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAg
ICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaGFzTmV4dE5vZGUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKQEAgLTEyMiw2ICsxMzEsOSBAQCBib29sIEFzc2lzdGVkTm9kZUluZm9ybWF0
aW9uOjpkZWNvZGUoSVBDCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuaXNSZWFkT25s
eSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVz
dWx0LmFsbG93c1VzZXJTY2FsaW5nKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQudmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9Bc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bi5oCShyZXZpc2lvbiAxNjg2ODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvQXNzaXN0ZWRO
b2RlSW5mb3JtYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTEgKzk1LDEzIEBAIHN0cnVj
dCBBc3Npc3RlZE5vZGVJbmZvcm1hdGlvbiB7CiAgICAgQXNzaXN0ZWROb2RlSW5mb3JtYXRpb24o
KQogICAgICAgICA6IG1pbmltdW1TY2FsZUZhY3RvcigtSU5GSU5JVFkpCiAgICAgICAgICwgbWF4
aW11bVNjYWxlRmFjdG9yKElORklOSVRZKQorICAgICAgICAsIG5vZGVGb250U2l6ZSgwKQogICAg
ICAgICAsIGhhc05leHROb2RlKGZhbHNlKQogICAgICAgICAsIGhhc1ByZXZpb3VzTm9kZShmYWxz
ZSkKICAgICAgICAgLCBpc0F1dG9jb3JyZWN0KGZhbHNlKQogICAgICAgICAsIGlzTXVsdGlTZWxl
Y3QoZmFsc2UpCiAgICAgICAgICwgaXNSZWFkT25seShmYWxzZSkKKyAgICAgICAgLCBhbGxvd3NV
c2VyU2NhbGluZyhmYWxzZSkKICAgICAgICAgLCBhdXRvY2FwaXRhbGl6ZVR5cGUoV2ViQXV0b2Nh
cGl0YWxpemVUeXBlRGVmYXVsdCkKICAgICAgICAgLCBlbGVtZW50VHlwZShXS1R5cGVOb25lKQog
ICAgICAgICAsIHNlbGVjdGVkSW5kZXgoLTEpCkBAIC0xMDgsMTMgKzExMCwxNiBAQCBzdHJ1Y3Qg
QXNzaXN0ZWROb2RlSW5mb3JtYXRpb24gewogICAgIH0KIAogICAgIFdlYkNvcmU6OkludFJlY3Qg
ZWxlbWVudFJlY3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBzZWxlY3Rpb25SZWN0OwogICAgIGRv
dWJsZSBtaW5pbXVtU2NhbGVGYWN0b3I7CiAgICAgZG91YmxlIG1heGltdW1TY2FsZUZhY3RvcjsK
KyAgICBkb3VibGUgbm9kZUZvbnRTaXplOwogICAgIGJvb2wgaGFzTmV4dE5vZGU7CiAgICAgYm9v
bCBoYXNQcmV2aW91c05vZGU7CiAgICAgYm9vbCBpc0F1dG9jb3JyZWN0OwogICAgIGJvb2wgaXNN
dWx0aVNlbGVjdDsKICAgICBib29sIGlzUmVhZE9ubHk7CisgICAgYm9vbCBhbGxvd3NVc2VyU2Nh
bGluZzsKICAgICBXZWJBdXRvY2FwaXRhbGl6ZVR5cGUgYXV0b2NhcGl0YWxpemVUeXBlOwogICAg
IFdLSW5wdXRUeXBlIGVsZW1lbnRUeXBlOwogICAgIFN0cmluZyBmb3JtQWN0aW9uOwpJbmRleDog
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0JKHJl
dmlzaW9uIDE2ODY4NCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tX
ZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4MywxOSBAQCAtICh2b2lkKV9hZGp1
c3RGb3JBdXRvbWF0aWNLZXlib2FyZEluZm86CiBAaW50ZXJmYWNlIFVJUGVyaXBoZXJhbEhvc3Qo
VUlLaXRJbnRlcm5hbCkKIC0gKENHRmxvYXQpZ2V0VmVydGljYWxPdmVybGFwRm9yVmlldzooVUlW
aWV3ICopdmlldyB1c2luZ0tleWJvYXJkSW5mbzooTlNEaWN0aW9uYXJ5ICopaW5mbzsKIEBlbmQK
KworQGludGVyZmFjZSBVSVZpZXcgKFVJVmlld0ludGVybmFsKQorLSAoVUlWaWV3Q29udHJvbGxl
ciAqKV92aWV3Q29udHJvbGxlckZvckFuY2VzdG9yOworQGVuZAorCitAaW50ZXJmYWNlIFVJV2lu
ZG93IChVSVdpbmRvd0ludGVybmFsKQorLSAoQk9PTClfaXNIb3N0ZWRJbkFub3RoZXJQcm9jZXNz
OworQGVuZAorCitAaW50ZXJmYWNlIFVJVmlld0NvbnRyb2xsZXIgKFVJVmlld0NvbnRyb2xsZXJJ
bnRlcm5hbCkKKy0gKFVJVmlld0NvbnRyb2xsZXIgKilfcm9vdEFuY2VzdG9yVmlld0NvbnRyb2xs
ZXI7CistIChVSVZpZXdDb250cm9sbGVyICopX3ZpZXdDb250cm9sbGVyRm9yU3VwcG9ydGVkSW50
ZXJmYWNlT3JpZW50YXRpb25zOworQGVuZAogI2VuZGlmCiAKICNpZiBQTEFURk9STShNQUMpCkBA
IC0xMDUsNiArMTE4LDcgQEAgLSAoQ0dGbG9hdClnZXRWZXJ0aWNhbE92ZXJsYXBGb3JWaWV3OihV
SQogICAgIEJPT0wgX2hhc1N0YXRpY01pbmltdW1MYXlvdXRTaXplOwogICAgIENHU2l6ZSBfbWlu
aW11bUxheW91dFNpemVPdmVycmlkZTsKICAgICBDR1NpemUgX21pbmltdW1MYXlvdXRTaXplT3Zl
cnJpZGVGb3JNaW5pbWFsVUk7CisgICAgQ0dSZWN0IF9pbnB1dFZpZXdCb3VuZHM7CiAKICAgICBV
SUVkZ2VJbnNldHMgX29ic2N1cmVkSW5zZXRzOwogICAgIGJvb2wgX2lzQ2hhbmdpbmdPYnNjdXJl
ZEluc2V0c0ludGVyYWN0aXZlbHk7CkBAIC02MTUsNiArNjI5LDEyOCBAQCAtICh2b2lkKV96b29t
T3V0V2l0aE9yaWdpbjooV2ViQ29yZTo6RmxvCiAgICAgW3NlbGYgX3pvb21Ub1BvaW50Om9yaWdp
biBhdFNjYWxlOltfc2Nyb2xsVmlldyBtaW5pbXVtWm9vbVNjYWxlXV07CiB9CiAKKy8vIGZvY3Vz
ZWRFbGVtZW50UmVjdCBhbmQgc2VsZWN0aW9uUmVjdCBhcmUgYm90aCBpbiBkb2N1bWVudCBjb29y
aWRuYXRlLgorLSAodm9pZClfem9vbVRvRm9jdXNSZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpZm9j
dXNlZEVsZW1lbnRSZWN0IHNlbGVjdGlvblJlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdClzZWxlY3Rp
b25SZWN0IGZvbnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5p
bXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIGFsbG93VXNlclNjYWxp
bmc6KEJPT0wpYWxsb3dVc2VyU2NhbGluZyBmb3JjZVNjcm9sbDooQk9PTClmb3JjZVNjcm9sbAor
eworICAgIGNvbnN0IGRvdWJsZSBXS1dlYlZpZXdTdGFuZGFyZEZvbnRTaXplID0gMTY7CisgICAg
Y29uc3QgZG91YmxlIGtNaW5pbXVtSGVpZ2h0VG9TaG93Q29udGVudEFib3ZlS2V5Ym9hcmQgPSAx
MDY7CisgICAgY29uc3QgQ0ZUaW1lSW50ZXJ2YWwgVUlXZWJGb3JtQW5pbWF0aW9uRHVyYXRpb24g
PSAwLjI1OworICAgIGNvbnN0IGRvdWJsZSBDYXJldE9mZnNldEZyb21XaW5kb3dFZGdlID0gMjA7
CisKKyAgICAvLyBab29tIGFyb3VuZCB0aGUgZWxlbWVudCdzIGJvdW5kaW5nIGZyYW1lLiBXZSB1
c2UgYSAic3RhbmRhcmQiIHNpemUgdG8gZGV0ZXJtaW5lIHRoZSBwcm9wZXIgZnJhbWUuCisgICAg
ZG91YmxlIHNjYWxlID0gKGFsbG93VXNlclNjYWxpbmcpID8gc3RkOjptaW4oc3RkOjptYXgoV0tX
ZWJWaWV3U3RhbmRhcmRGb250U2l6ZSAvIGZvbnRTaXplLCBtaW5pbXVtU2NhbGUpLCBtYXhpbXVt
U2NhbGUpIDogY29udGVudFpvb21TY2FsZShzZWxmKTsKKyAgICBDR0Zsb2F0IGRvY3VtZW50V2lk
dGggPSBbX2NvbnRlbnRWaWV3IGJvdW5kc10uc2l6ZS53aWR0aDsKKyAgICBpZiAoZG9jdW1lbnRX
aWR0aCkKKyAgICAgICAgc2NhbGUgPSBDR1JvdW5kKGRvY3VtZW50V2lkdGggKiBzY2FsZSkgLyBk
b2N1bWVudFdpZHRoOworICAgIGVsc2UgaWYgKCFzY2FsZSkKKyAgICAgICAgc2NhbGUgPSAxLjA7
CisKKyAgICBVSVNjcm9sbFZpZXcgKnNjcm9sbFZpZXcgPSBfc2Nyb2xsVmlldy5nZXQoKTsKKyAg
ICBVSVdpbmRvdyAqd2luZG93ID0gW3Njcm9sbFZpZXcgd2luZG93XTsKKworICAgIFdlYkNvcmU6
OkZsb2F0UmVjdCBmb2N1c2VkRWxlbWVudFJlY3RJbk5ld1NjYWxlID0gZm9jdXNlZEVsZW1lbnRS
ZWN0OworICAgIGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUubW92ZUJ5KFtfY29udGVudFZp
ZXcgZnJhbWVdLm9yaWdpbik7CisgICAgZm9jdXNlZEVsZW1lbnRSZWN0SW5OZXdTY2FsZS5zY2Fs
ZShzY2FsZSk7CisKKyAgICAvLyBGaW5kIGZpcnN0IHBhcmVudCB2aWV3IHdpdGggYSB2aWV3IGNv
bnRyb2xsZXIgLT4gdGhhdCBjb250cm9sbGVyJ3Mgcm9vdCBjb250cm9sbGVyIC0+IHRvcC1tb3N0
IGZ1bGwtc2NyZWVuIHZpZXcgY29udHJvbGxlciB3aXRoaW4gcm9vdCBjb250cm9sbGVyJ3MgaGll
cmFyY2h5LgorICAgIFVJVmlld0NvbnRyb2xsZXIgKnRvcFZpZXdDb250cm9sbGVyID0gW1tbc2Ny
b2xsVmlldyBfdmlld0NvbnRyb2xsZXJGb3JBbmNlc3Rvcl0gX3Jvb3RBbmNlc3RvclZpZXdDb250
cm9sbGVyXSBfdmlld0NvbnRyb2xsZXJGb3JTdXBwb3J0ZWRJbnRlcmZhY2VPcmllbnRhdGlvbnNd
OworICAgIC8vIE9idGFpbiB0aGUgZnVsbC1zY3JlZW4sIG9yaWVudGVkIHZpZXcgdGhhdCBoYXMg
dGhlIGNvb3JkaW5hdGUgc3lzdGVtIHRvIHdoaWNoIHdlIHdhbnQgdGhlIGdlb21ldHJ5IHRvIGJl
IGFsaWduZWQuCisgICAgLy8gSW4gdGhlIGNhc2Ugd2hlcmUgdGhlIHZpZXcgaGFzIG5vIHZpZXcg
Y29udHJvbGxlciwgd2UgZGVmYXVsdCB0byB0aGUgd2luZG93LgorICAgIFVJVmlldyAqZnVsbFNj
cmVlblZpZXcgPSB0b3BWaWV3Q29udHJvbGxlci52aWV3OworICAgIGlmICghZnVsbFNjcmVlblZp
ZXcpCisgICAgICAgIGZ1bGxTY3JlZW5WaWV3ID0gd2luZG93OworCisgICAgQ0dSZWN0IHVub3Nj
dXJlZFNjcm9sbFZpZXdSZWN0SW5XZWJWaWV3Q29vcmRpbmF0ZSA9IFVJRWRnZUluc2V0c0luc2V0
UmVjdChbc2VsZiBib3VuZHNdLCBfb2JzY3VyZWRJbnNldHMpOworICAgIENHUmVjdCB2aXNpYmxl
U2Nyb2xsVmlld0JvdW5kc0luV2ViVmlld0Nvb3JkaW5hdGUgPSBDR1JlY3RJbnRlcnNlY3Rpb24o
dW5vc2N1cmVkU2Nyb2xsVmlld1JlY3RJbldlYlZpZXdDb29yZGluYXRlLCBbZnVsbFNjcmVlblZp
ZXcgY29udmVydFJlY3Q6W2Z1bGxTY3JlZW5WaWV3IGJvdW5kc10gdG9WaWV3OnNlbGZdKTsKKyAg
ICBDR1JlY3QgZm9ybUFzc2lzdGFudEZyYW1lSW5XZWJWaWV3Q29vcmRpbmF0ZSA9IFt3aW5kb3cg
Y29udmVydFJlY3Q6X2lucHV0Vmlld0JvdW5kcyB0b1ZpZXc6c2VsZl07CisgICAgQ0dSZWN0IGlu
dGVyc2VjdGlvbkJldHdlZW5TY3JvbGxWaWV3QW5kRm9ybUFzc2lzdGFudCA9IENHUmVjdEludGVy
c2VjdGlvbih2aXNpYmxlU2Nyb2xsVmlld0JvdW5kc0luV2ViVmlld0Nvb3JkaW5hdGUsIGZvcm1B
c3Npc3RhbnRGcmFtZUluV2ViVmlld0Nvb3JkaW5hdGUpOworICAgIENHU2l6ZSB2aXNpYmxlU2l6
ZSA9IHZpc2libGVTY3JvbGxWaWV3Qm91bmRzSW5XZWJWaWV3Q29vcmRpbmF0ZS5zaXplOworICAg
IENHRmxvYXQgdmlzaWJsZU9mZnNldEZyb21Ub3AgPSAwOworCisgICAgaWYgKCFDR1JlY3RJc0Vt
cHR5KGludGVyc2VjdGlvbkJldHdlZW5TY3JvbGxWaWV3QW5kRm9ybUFzc2lzdGFudCkpIHsKKyAg
ICAgICAgQ0dGbG9hdCBoZWlnaHRWaXNpYmxlQWJvdmVGb3JtQXNzaXN0YW50ID0gQ0dSZWN0R2V0
TWluWShpbnRlcnNlY3Rpb25CZXR3ZWVuU2Nyb2xsVmlld0FuZEZvcm1Bc3Npc3RhbnQpIC0gQ0dS
ZWN0R2V0TWluWSh2aXNpYmxlU2Nyb2xsVmlld0JvdW5kc0luV2ViVmlld0Nvb3JkaW5hdGUpOwor
ICAgICAgICBDR0Zsb2F0IGhlaWdodFZpc2libGVCZWxvd0Zvcm1Bc3Npc3RhbnQgPSBDR1JlY3RH
ZXRNYXhZKHZpc2libGVTY3JvbGxWaWV3Qm91bmRzSW5XZWJWaWV3Q29vcmRpbmF0ZSkgLSBDR1Jl
Y3RHZXRNYXhZKGludGVyc2VjdGlvbkJldHdlZW5TY3JvbGxWaWV3QW5kRm9ybUFzc2lzdGFudCk7
CisKKyAgICAgICAgaWYgKGhlaWdodFZpc2libGVBYm92ZUZvcm1Bc3Npc3RhbnQgPj0ga01pbmlt
dW1IZWlnaHRUb1Nob3dDb250ZW50QWJvdmVLZXlib2FyZCB8fCBoZWlnaHRWaXNpYmxlQmVsb3dG
b3JtQXNzaXN0YW50IDwgaGVpZ2h0VmlzaWJsZUFib3ZlRm9ybUFzc2lzdGFudCkKKyAgICAgICAg
ICAgIHZpc2libGVTaXplLmhlaWdodCA9IGhlaWdodFZpc2libGVBYm92ZUZvcm1Bc3Npc3RhbnQ7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdmlzaWJsZVNpemUuaGVpZ2h0ID0gaGVpZ2h0
VmlzaWJsZUJlbG93Rm9ybUFzc2lzdGFudDsKKyAgICAgICAgICAgIHZpc2libGVPZmZzZXRGcm9t
VG9wID0gQ0dSZWN0R2V0TWF4WShpbnRlcnNlY3Rpb25CZXR3ZWVuU2Nyb2xsVmlld0FuZEZvcm1B
c3Npc3RhbnQpIC0gQ0dSZWN0R2V0TWluWSh2aXNpYmxlU2Nyb2xsVmlld0JvdW5kc0luV2ViVmll
d0Nvb3JkaW5hdGUpOworICAgICAgICB9CisgICAgfQorCisgICAgQk9PTCBzZWxlY3Rpb25SZWN0
SXNOb3ROdWxsID0gIXNlbGVjdGlvblJlY3QuaXNaZXJvKCk7CisgICAgaWYgKCFmb3JjZVNjcm9s
bCkgeworICAgICAgICBDR1JlY3QgY3VycmVudGx5VmlzaWJsZVJlZ2lvbkluV2ViVmlld0Nvb3Jk
aW5hdGVzOworICAgICAgICBjdXJyZW50bHlWaXNpYmxlUmVnaW9uSW5XZWJWaWV3Q29vcmRpbmF0
ZXMub3JpZ2luID0gdW5vc2N1cmVkU2Nyb2xsVmlld1JlY3RJbldlYlZpZXdDb29yZGluYXRlLm9y
aWdpbjsKKyAgICAgICAgY3VycmVudGx5VmlzaWJsZVJlZ2lvbkluV2ViVmlld0Nvb3JkaW5hdGVz
Lm9yaWdpbi55ICs9IHZpc2libGVPZmZzZXRGcm9tVG9wOworICAgICAgICBjdXJyZW50bHlWaXNp
YmxlUmVnaW9uSW5XZWJWaWV3Q29vcmRpbmF0ZXMuc2l6ZSA9IHZpc2libGVTaXplOworCisgICAg
ICAgIC8vIERvbid0IGJvdGhlciBzY3JvbGxpbmcgaWYgdGhlIGVudGlyZSBub2RlIGlzIGFscmVh
ZHkgdmlzaWJsZSwgd2hldGhlciBvciBub3Qgd2UgZ290IGEgc2VsZWN0aW9uUmVjdC4KKyAgICAg
ICAgaWYgKENHUmVjdENvbnRhaW5zUmVjdChjdXJyZW50bHlWaXNpYmxlUmVnaW9uSW5XZWJWaWV3
Q29vcmRpbmF0ZXMsIGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIC8vIERvbid0IGJvdGhlciBzY3JvbGxpbmcgaWYgd2UgaGF2ZSBh
IHZhbGlkIHNlbGVjdGlvblJlY3QgYW5kIGl0IGlzIGFscmVhZHkgdmlzaWJsZS4KKyAgICAgICAg
aWYgKHNlbGVjdGlvblJlY3RJc05vdE51bGwgJiYgQ0dSZWN0Q29udGFpbnNSZWN0KGN1cnJlbnRs
eVZpc2libGVSZWdpb25JbldlYlZpZXdDb29yZGluYXRlcywgc2VsZWN0aW9uUmVjdCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2Ugd2FudCB0byB6b29tIHRvIHRoZSBs
ZWZ0L3RvcCBjb3JuZXIgb2YgdGhlIERPTSBub2RlLCB3aXRoIGFzIG11Y2ggc3BhY2luZyBvbiBh
bGwgc2lkZXMgYXMgd2UKKyAgICAvLyBjYW4gZ2V0IGJhc2VkIG9uIHRoZSB2aXNpYmxlIGFyZWEg
YWZ0ZXIgem9vbWluZyAod29ya2luZ0ZyYW1lKS4gIFRoZSBzcGFjaW5nIGluIGVpdGhlciBkaW1l
bnNpb24gaXMgaGFsZiB0aGUKKyAgICAvLyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHNpemUgb2Yg
dGhlIERPTSBub2RlIGFuZCB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSBmcmFtZS4KKyAgICBDR0Zs
b2F0IGhvcml6b250YWxTcGFjZUluV2ViVmlld0Nvb3JkaW5hdGVzID0gTUFYKCh2aXNpYmxlU2l6
ZS53aWR0aCAtIGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUud2lkdGgoKSkgLyAyLjAsIDAu
MCk7CisgICAgQ0dGbG9hdCB2ZXJ0aWNhbFNwYWNlSW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBNQVgo
KHZpc2libGVTaXplLmhlaWdodCAtIGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUuaGVpZ2h0
KCkpIC8gMi4wLCAwLjApOworCisgICAgQ0dQb2ludCB0b3BMZWZ0OworICAgIHRvcExlZnQueCA9
IGZvY3VzZWRFbGVtZW50UmVjdEluTmV3U2NhbGUueCgpIC0gaG9yaXpvbnRhbFNwYWNlSW5XZWJW
aWV3Q29vcmRpbmF0ZXM7CisgICAgdG9wTGVmdC55ID0gZm9jdXNlZEVsZW1lbnRSZWN0SW5OZXdT
Y2FsZS55KCkgLSB2ZXJ0aWNhbFNwYWNlSW5XZWJWaWV3Q29vcmRpbmF0ZXMgLSB2aXNpYmxlT2Zm
c2V0RnJvbVRvcDsKKworICAgIENHRmxvYXQgbWluaW11bUFsbG93YWJsZUhvcml6b250YWxPZmZz
ZXRJbldlYlZpZXdDb29yZGluYXRlcyA9IC1JTkZJTklUWTsKKyAgICBDR0Zsb2F0IG1pbmltdW1B
bGxvd2FibGVWZXJ0aWNhbE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzID0gLUlORklOSVRZOwor
ICAgIGlmIChzZWxlY3Rpb25SZWN0SXNOb3ROdWxsKSB7CisgICAgICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBzZWxlY3Rpb25SZWN0SW5OZXdTY2FsZSA9IHNlbGVjdGlvblJlY3Q7CisgICAgICAgIHNl
bGVjdGlvblJlY3RJbk5ld1NjYWxlLm1vdmVCeShbX2NvbnRlbnRWaWV3IGZyYW1lXS5vcmlnaW4p
OworICAgICAgICBzZWxlY3Rpb25SZWN0SW5OZXdTY2FsZS5zY2FsZShzY2FsZSk7CisgICAgICAg
IG1pbmltdW1BbGxvd2FibGVIb3Jpem9udGFsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBD
R1JlY3RHZXRNYXhYKHNlbGVjdGlvblJlY3RJbk5ld1NjYWxlKSArIENhcmV0T2Zmc2V0RnJvbVdp
bmRvd0VkZ2UgLSB2aXNpYmxlU2l6ZS53aWR0aDsKKyAgICAgICAgbWluaW11bUFsbG93YWJsZVZl
cnRpY2FsT2Zmc2V0SW5XZWJWaWV3Q29vcmRpbmF0ZXMgPSBDR1JlY3RHZXRNYXhZKHNlbGVjdGlv
blJlY3RJbk5ld1NjYWxlKSArIENhcmV0T2Zmc2V0RnJvbVdpbmRvd0VkZ2UgLSB2aXNpYmxlU2l6
ZS5oZWlnaHQgLSB2aXNpYmxlT2Zmc2V0RnJvbVRvcDsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpG
bG9hdFJlY3QgZG9jdW1lbnRCb3VuZHNJbk5ld1NjYWxlID0gW19jb250ZW50VmlldyBib3VuZHNd
OworICAgIGRvY3VtZW50Qm91bmRzSW5OZXdTY2FsZS5tb3ZlQnkoW19jb250ZW50VmlldyBmcmFt
ZV0ub3JpZ2luKTsKKyAgICBkb2N1bWVudEJvdW5kc0luTmV3U2NhbGUuc2NhbGUoc2NhbGUpOwor
CisgICAgLy8gQ29uc3RyYWluIHRoZSBsZWZ0IGVkZ2UgaW4gZG9jdW1lbnQgY29vcmRpbmF0ZXMg
c28gdGhhdDoKKyAgICAvLyAgLSBpdCBpc24ndCBzbyBzbWFsbCB0aGF0IHRoZSBzY3JvbGxWaXNp
YmxlUmVjdCBpc24ndCB2aXNpYmxlIG9uIHRoZSBzY3JlZW4KKyAgICAvLyAgLSBpdCBpc24ndCBz
byBncmVhdCB0aGF0IHRoZSBkb2N1bWVudCdzIHJpZ2h0IGVkZ2UgaXMgbGVzcyB0aGFuIHRoZSBy
aWdodCBlZGdlIG9mIHRoZSBzY3JlZW4KKyAgICBpZiAoc2VsZWN0aW9uUmVjdElzTm90TnVsbCAm
JiB0b3BMZWZ0LnggPCBtaW5pbXVtQWxsb3dhYmxlSG9yaXpvbnRhbE9mZnNldEluV2ViVmlld0Nv
b3JkaW5hdGVzKQorICAgICAgICB0b3BMZWZ0LnggPSBtaW5pbXVtQWxsb3dhYmxlSG9yaXpvbnRh
bE9mZnNldEluV2ViVmlld0Nvb3JkaW5hdGVzOworICAgIGVsc2UgeworICAgICAgICBDR0Zsb2F0
IG1heGltdW1BbGxvd2FibGVIb3Jpem9udGFsT2Zmc2V0ID0gQ0dSZWN0R2V0TWF4WChkb2N1bWVu
dEJvdW5kc0luTmV3U2NhbGUpIC0gdmlzaWJsZVNpemUud2lkdGg7CisgICAgICAgIGlmICh0b3BM
ZWZ0LnggPiBtYXhpbXVtQWxsb3dhYmxlSG9yaXpvbnRhbE9mZnNldCkKKyAgICAgICAgICAgIHRv
cExlZnQueCA9IG1heGltdW1BbGxvd2FibGVIb3Jpem9udGFsT2Zmc2V0OworICAgIH0KKworICAg
IC8vIENvbnN0cmFpbiB0aGUgdG9wIGVkZ2UgaW4gZG9jdW1lbnQgY29vcmRpbmF0ZXMgc28gdGhh
dDoKKyAgICAvLyAgLSBpdCBpc24ndCBzbyBzbWFsbCB0aGF0IHRoZSBzY3JvbGxWaXNpYmxlUmVj
dCBpc24ndCB2aXNpYmxlIG9uIHRoZSBzY3JlZW4KKyAgICAvLyAgLSBpdCBpc24ndCBzbyBncmVh
dCB0aGF0IHRoZSBkb2N1bWVudCdzIGJvdHRvbSBlZGdlIGlzIGhpZ2hlciB0aGFuIHRoZSB0b3Ag
b2YgdGhlIGZvcm0gYXNzaXN0YW50CisgICAgaWYgKHNlbGVjdGlvblJlY3RJc05vdE51bGwgJiYg
dG9wTGVmdC55IDwgbWluaW11bUFsbG93YWJsZVZlcnRpY2FsT2Zmc2V0SW5XZWJWaWV3Q29vcmRp
bmF0ZXMpCisgICAgICAgIHRvcExlZnQueSA9IG1pbmltdW1BbGxvd2FibGVWZXJ0aWNhbE9mZnNl
dEluV2ViVmlld0Nvb3JkaW5hdGVzOworICAgIGVsc2UgeworICAgICAgICBDR0Zsb2F0IG1heGlt
dW1BbGxvd2FibGVWZXJ0aWNhbE9mZnNldCA9IENHUmVjdEdldE1heFkoZG9jdW1lbnRCb3VuZHNJ
bk5ld1NjYWxlKSAtIHZpc2libGVTaXplLmhlaWdodDsKKyAgICAgICAgaWYgKHRvcExlZnQueSA+
IG1heGltdW1BbGxvd2FibGVWZXJ0aWNhbE9mZnNldCkKKyAgICAgICAgICAgIHRvcExlZnQueSA9
IG1heGltdW1BbGxvd2FibGVWZXJ0aWNhbE9mZnNldDsKKyAgICB9CisKKyAgICBXZWJDb3JlOjpG
bG9hdFBvaW50IG5ld0NlbnRlciA9IENHUG9pbnRNYWtlKCh0b3BMZWZ0LnggKyB1bm9zY3VyZWRT
Y3JvbGxWaWV3UmVjdEluV2ViVmlld0Nvb3JkaW5hdGUuc2l6ZS53aWR0aCAvIDIuMCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG9wTGVmdC55ICsg
dW5vc2N1cmVkU2Nyb2xsVmlld1JlY3RJbldlYlZpZXdDb29yZGluYXRlLnNpemUuaGVpZ2h0IC8g
Mi4wKSk7CisKKyAgICBuZXdDZW50ZXIuc2NhbGUoMSAvIHNjYWxlLCAxIC8gc2NhbGUpOworICAg
IFtfc2Nyb2xsVmlldyBfem9vbVRvQ2VudGVyOm5ld0NlbnRlcgorICAgICAgICAgICAgICAgICAg
ICAgICAgc2NhbGU6c2NhbGUKKyAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOlVJV2ViRm9y
bUFuaW1hdGlvbkR1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZTpZRVNdOwor
fQorCiAtIChCT09MKV96b29tVG9SZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCB3
aXRoT3JpZ2luOihXZWJDb3JlOjpGbG9hdFBvaW50KW9yaWdpbiBmaXRFbnRpcmVSZWN0OihCT09M
KWZpdEVudGlyZVJlY3QgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1T
Y2FsZTooZG91YmxlKW1heGltdW1TY2FsZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6KGZsb2F0KW1p
bmltdW1TY3JvbGxEaXN0YW5jZQogewogICAgIGNvbnN0IGZsb2F0IG1heGltdW1TY2FsZUZhY3Rv
ckRlbHRhRm9yUGFuU2Nyb2xsID0gMC4wMjsKQEAgLTc4OSw2ICs5MjUsMTggQEAgLSAodm9pZClf
dXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cwogCiAtICh2b2lkKV9rZXlib2FyZENoYW5nZWRXaXRo
SW5mbzooTlNEaWN0aW9uYXJ5ICopa2V5Ym9hcmRJbmZvIGFkanVzdFNjcm9sbFZpZXc6KEJPT0wp
YWRqdXN0U2Nyb2xsVmlldwogeworICAgIE5TVmFsdWUgKmVuZEZyYW1lVmFsdWUgPSBba2V5Ym9h
cmRJbmZvIG9iamVjdEZvcktleTpVSUtleWJvYXJkRnJhbWVFbmRVc2VySW5mb0tleV07CisgICAg
aWYgKCFlbmRGcmFtZVZhbHVlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUga2V5Ym9h
cmQgcmVjdCBpcyBhbHdheXMgaW4gc2NyZWVuIGNvb3JkaW5hdGVzLiBJbiB0aGUgdmlldyBzZXJ2
aWNlcyBjYXNlIHRoZSB3aW5kb3cgZG9lcyBub3QKKyAgICAvLyBoYXZlIHRoZSBpbnRlcmZhY2Ug
b3JpZW50YXRpb24gcm90YXRpb24gdHJhbnNmb3JtYXRpb247IGl0cyBob3N0IGRvZXMuIFNvLCBp
dCBtYWtlcyBubyBzZW5zZSB0bworICAgIC8vIGNsaXAgdGhlIGtleWJvYXJkIHJlY3QgYWdhaW5z
dCBpdHMgc2NyZWVuLgorICAgIGlmIChbW3NlbGYgd2luZG93XSBfaXNIb3N0ZWRJbkFub3RoZXJQ
cm9jZXNzXSkKKyAgICAgICAgX2lucHV0Vmlld0JvdW5kcyA9IFtzZWxmLndpbmRvdyBjb252ZXJ0
UmVjdDpbZW5kRnJhbWVWYWx1ZSBDR1JlY3RWYWx1ZV0gZnJvbVdpbmRvdzpuaWxdOworICAgIGVs
c2UKKyAgICAgICAgX2lucHV0Vmlld0JvdW5kcyA9IFtzZWxmLndpbmRvdyBjb252ZXJ0UmVjdDpD
R1JlY3RJbnRlcnNlY3Rpb24oW2VuZEZyYW1lVmFsdWUgQ0dSZWN0VmFsdWVdLCBzZWxmLndpbmRv
dy5zY3JlZW4uYm91bmRzKSBmcm9tV2luZG93Om5pbF07CisKICAgICBfa2V5Ym9hcmRWZXJ0aWNh
bE92ZXJsYXAgPSBbW1VJUGVyaXBoZXJhbEhvc3Qgc2hhcmVkSW5zdGFuY2VdIGdldFZlcnRpY2Fs
T3ZlcmxhcEZvclZpZXc6c2VsZiB1c2luZ0tleWJvYXJkSW5mbzprZXlib2FyZEluZm9dOwogICAg
IFtzZWxmIF91cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzXTsKIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRlcm5hbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAko
cmV2aXNpb24gMTY4Njg0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdJbnRlcm5hbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw3IEBAIHN0cnVj
dCBWaWV3U25hcHNob3Q7CiAKIC0gKHZvaWQpX3Njcm9sbFRvQ29udGVudE9mZnNldDooV2ViQ29y
ZTo6RmxvYXRQb2ludCljb250ZW50T2Zmc2V0OwogLSAoQk9PTClfc2Nyb2xsVG9SZWN0OihXZWJD
b3JlOjpGbG9hdFJlY3QpdGFyZ2V0UmVjdCBvcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQpb3Jp
Z2luIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooZmxvYXQpbWluaW11bVNjcm9sbERpc3RhbmNlOwor
LSAodm9pZClfem9vbVRvRm9jdXNSZWN0OihXZWJDb3JlOjpGbG9hdFJlY3QpZm9jdXNlZEVsZW1l
bnRSZWN0IHNlbGVjdGlvblJlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdClzZWxlY3Rpb25SZWN0IGZv
bnRTaXplOihmbG9hdClmb250U2l6ZSBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUg
bWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11bVNjYWxlIGFsbG93VXNlclNjYWxpbmc6KEJPT0wp
YWxsb3dVc2VyU2NhbGluZyBmb3JjZVNjcm9sbDooQk9PTClmb3JjZVNjcm9sbDsKIC0gKEJPT0wp
X3pvb21Ub1JlY3Q6KFdlYkNvcmU6OkZsb2F0UmVjdCl0YXJnZXRSZWN0IHdpdGhPcmlnaW46KFdl
YkNvcmU6OkZsb2F0UG9pbnQpb3JpZ2luIGZpdEVudGlyZVJlY3Q6KEJPT0wpZml0RW50aXJlUmVj
dCBtaW5pbXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUp
bWF4aW11bVNjYWxlIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooZmxvYXQpbWluaW11bVNjcm9sbERp
c3RhbmNlOwogLSAodm9pZClfem9vbU91dFdpdGhPcmlnaW46KFdlYkNvcmU6OkZsb2F0UG9pbnQp
b3JpZ2luOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXcuaAkocmV2aXNpb24gMTY4Njg0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDcgQEAgc3RydWN0
IFdlYlBhZ2VDb25maWd1cmF0aW9uOwogLSAodm9pZClfc2V0QWNjZXNzaWJpbGl0eVdlYlByb2Nl
c3NUb2tlbjooTlNEYXRhICopZGF0YTsKIAogLSAoQk9PTClfc2Nyb2xsVG9SZWN0OihDR1JlY3Qp
dGFyZ2V0UmVjdCB3aXRoT3JpZ2luOihDR1BvaW50KW9yaWdpbiBtaW5pbXVtU2Nyb2xsRGlzdGFu
Y2U6KENHRmxvYXQpbWluaW11bVNjcm9sbERpc3RhbmNlOworLSAodm9pZClfem9vbVRvRm9jdXNS
ZWN0OihDR1JlY3QpcmVjdFRvRm9jdXMgc2VsZWN0aW9uUmVjdDooQ0dSZWN0KXNlbGVjdGlvblJl
Y3QgZm9udFNpemU6KGZsb2F0KWZvbnRTaXplIG1pbmltdW1TY2FsZTooZG91YmxlKW1pbmltdW1T
Y2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgYWxsb3dVc2VyU2NhbGluZzoo
Qk9PTClhbGxvd1VzZXJTY2FsaW5nIGZvcmNlU2Nyb2xsOihCT09MKWZvcmNlU2Nyb2xsOwogLSAo
Qk9PTClfem9vbVRvUmVjdDooQ0dSZWN0KXRhcmdldFJlY3Qgd2l0aE9yaWdpbjooQ0dQb2ludClv
cmlnaW4gZml0RW50aXJlUmVjdDooQk9PTClmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTooZG91
YmxlKW1pbmltdW1TY2FsZSBtYXhpbXVtU2NhbGU6KGRvdWJsZSltYXhpbXVtU2NhbGUgbWluaW11
bVNjcm9sbERpc3RhbmNlOihDR0Zsb2F0KW1pbmltdW1TY3JvbGxEaXN0YW5jZTsKIC0gKHZvaWQp
X3pvb21PdXRXaXRoT3JpZ2luOihDR1BvaW50KW9yaWdpbjsKIApJbmRleDogU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlldy5tbQkocmV2aXNpb24gMTY4Njg0KQor
KysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3Lm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00NzYsNiArNDc2LDE3IEBAIC0gKEJPT0wpX3Njcm9sbFRvUmVjdDooQ0dSZWN0
KXRhcmdldFJlY3QKICAgICByZXR1cm4gW193ZWJWaWV3IF9zY3JvbGxUb1JlY3Q6dGFyZ2V0UmVj
dCBvcmlnaW46b3JpZ2luIG1pbmltdW1TY3JvbGxEaXN0YW5jZTptaW5pbXVtU2Nyb2xsRGlzdGFu
Y2VdOwogfQogCistICh2b2lkKV96b29tVG9Gb2N1c1JlY3Q6KENHUmVjdClyZWN0VG9Gb2N1cyBz
ZWxlY3Rpb25SZWN0OihDR1JlY3Qpc2VsZWN0aW9uUmVjdCBmb250U2l6ZTooZmxvYXQpZm9udFNp
emUgbWluaW11bVNjYWxlOihkb3VibGUpbWluaW11bVNjYWxlIG1heGltdW1TY2FsZTooZG91Ymxl
KW1heGltdW1TY2FsZSBhbGxvd1VzZXJTY2FsaW5nOihCT09MKWFsbG93VXNlclNjYWxpbmcgZm9y
Y2VTY3JvbGw6KEJPT0wpZm9yY2VTY3JvbGwKK3sKKyAgICBbX3dlYlZpZXcgX3pvb21Ub0ZvY3Vz
UmVjdDpyZWN0VG9Gb2N1cworICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN0OnNlbGVjdGlv
blJlY3QKKyAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTpmb250U2l6ZQorICAgICAgICAg
ICAgICAgICAgbWluaW11bVNjYWxlOm1pbmltdW1TY2FsZQorICAgICAgICAgICAgICAgICAgbWF4
aW11bVNjYWxlOm1heGltdW1TY2FsZQorICAgICAgICAgICAgICBhbGxvd1VzZXJTY2FsaW5nOmFs
bG93VXNlclNjYWxpbmcKKyAgICAgICAgICAgICAgICAgICBmb3JjZVNjcm9sbDpmb3JjZVNjcm9s
bF07Cit9CisKIC0gKEJPT0wpX3pvb21Ub1JlY3Q6KENHUmVjdCl0YXJnZXRSZWN0IHdpdGhPcmln
aW46KENHUG9pbnQpb3JpZ2luIGZpdEVudGlyZVJlY3Q6KEJPT0wpZml0RW50aXJlUmVjdCBtaW5p
bXVtU2NhbGU6KGRvdWJsZSltaW5pbXVtU2NhbGUgbWF4aW11bVNjYWxlOihkb3VibGUpbWF4aW11
bVNjYWxlIG1pbmltdW1TY3JvbGxEaXN0YW5jZTooQ0dGbG9hdCltaW5pbXVtU2Nyb2xsRGlzdGFu
Y2UKIHsKICAgICByZXR1cm4gW193ZWJWaWV3IF96b29tVG9SZWN0OnRhcmdldFJlY3Qgd2l0aE9y
aWdpbjpvcmlnaW4gZml0RW50aXJlUmVjdDpmaXRFbnRpcmVSZWN0IG1pbmltdW1TY2FsZTptaW5p
bXVtU2NhbGUgbWF4aW11bVNjYWxlOm1heGltdW1TY2FsZSBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6
bWluaW11bVNjcm9sbERpc3RhbmNlXTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAx
Njg2ODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbQkod29ya2luZyBjb3B5KQpAQCAtNDk1LDE1ICs0OTUsMTMgQEAgLSAoQk9PTClf
cmVxdWlyZXNLZXlib2FyZFJlc2V0T25SZWxvYWQKIAogLSAodm9pZClfZGlzcGxheUZvcm1Ob2Rl
SW5wdXRWaWV3CiB7Ci0gICAgaWYgKFVJQ3VycmVudFVzZXJJbnRlcmZhY2VJZGlvbUlzUGFkKCkp
Ci0gICAgICAgIFtzZWxmIF9zY3JvbGxUb1JlY3Q6X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLmVs
ZW1lbnRSZWN0IHdpdGhPcmlnaW46X3BhZ2UtPmVkaXRvclN0YXRlKCkuY2FyZXRSZWN0QXRTdGFy
dC5sb2NhdGlvbigpIG1pbmltdW1TY3JvbGxEaXN0YW5jZTowXTsKLSAgICBlbHNlCi0gICAgICAg
IFtzZWxmIF96b29tVG9SZWN0Ol9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50UmVjdAot
ICAgICAgICAgICAgICAgd2l0aE9yaWdpbjpfcGFnZS0+ZWRpdG9yU3RhdGUoKS5jYXJldFJlY3RB
dFN0YXJ0LmxvY2F0aW9uKCkKLSAgICAgICAgICAgIGZpdEVudGlyZVJlY3Q6WUVTIG1pbmltdW1T
Y2FsZTpfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24ubWluaW11bVNjYWxlRmFjdG9yCi0gICAgICAg
ICAgICAgbWF4aW11bVNjYWxlOl9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5tYXhpbXVtU2NhbGVG
YWN0b3IKLSAgICBtaW5pbXVtU2Nyb2xsRGlzdGFuY2U6MF07Ci0KKyAgICBbc2VsZiBfem9vbVRv
Rm9jdXNSZWN0Ol9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5lbGVtZW50UmVjdAorICAgICAgICAg
ICAgIHNlbGVjdGlvblJlY3Q6X2Fzc2lzdGVkTm9kZUluZm9ybWF0aW9uLnNlbGVjdGlvblJlY3QK
KyAgICAgICAgICAgICAgICAgIGZvbnRTaXplOl9hc3Npc3RlZE5vZGVJbmZvcm1hdGlvbi5ub2Rl
Rm9udFNpemUKKyAgICAgICAgICAgICAgbWluaW11bVNjYWxlOl9hc3Npc3RlZE5vZGVJbmZvcm1h
dGlvbi5taW5pbXVtU2NhbGVGYWN0b3IKKyAgICAgICAgICAgICAgbWF4aW11bVNjYWxlOl9hc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbi5tYXhpbXVtU2NhbGVGYWN0b3IKKyAgICAgICAgICBhbGxvd1Vz
ZXJTY2FsaW5nOihfYXNzaXN0ZWROb2RlSW5mb3JtYXRpb24uYWxsb3dzVXNlclNjYWxpbmcgJiYg
IVVJQ3VycmVudFVzZXJJbnRlcmZhY2VJZGlvbUlzUGFkKCkpCisgICAgICAgICAgICAgICBmb3Jj
ZVNjcm9sbDpbc2VsZiByZXF1aXJlc0FjY2Vzc29yeVZpZXddXTsKICAgICBbc2VsZiBfdXBkYXRl
QWNjZXNzb3J5XTsKIH0KIApAQCAtMjEyNiw2ICsyMTI0LDExIEBAIC0gKHZvaWQpX3N0YXJ0QXNz
aXN0aW5nTm9kZTooY29uc3QgQXNzaXMKICAgICBpZiAoIXVzZXJJc0ludGVyYWN0aW5nICYmICFf
dGV4dFNlbGVjdGlvbkFzc2lzdGFudCkKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCByZW1vdmUgdGhpcyBjaGVjayB3aGVuIHdlIG1hbmFnZSB0byBzZW5kIFN0YXJ0
QXNzaXN0aW5nTm9kZSBmcm9tIHRoZSBXZWJQcm9jZXNzCisgICAgLy8gb25seSB3aGVuIGl0IGlz
IHRydWx5IHRpbWUgdG8gc2hvdyB0aGUga2V5Ym9hcmQuCisgICAgaWYgKF9hc3Npc3RlZE5vZGVJ
bmZvcm1hdGlvbi5lbGVtZW50VHlwZSA9PSBpbmZvcm1hdGlvbi5lbGVtZW50VHlwZSAmJiBfYXNz
aXN0ZWROb2RlSW5mb3JtYXRpb24uZWxlbWVudFJlY3QgPT0gaW5mb3JtYXRpb24uZWxlbWVudFJl
Y3QpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pc0VkaXRhYmxlID0gWUVTOwogICAgIF9hc3Np
c3RlZE5vZGVJbmZvcm1hdGlvbiA9IGluZm9ybWF0aW9uOwogICAgIF9pbnB1dFBlcmlwaGVyYWwg
PSBuaWw7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L2lvcy9XZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAxNjg2ODQpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTE3
NzYsMTIgKzE3NzYsMTcgQEAgdm9pZCBXZWJQYWdlOjpnZXRBc3Npc3RlZE5vZGVJbmZvcm1hdGlv
bgogewogICAgIGxheW91dElmTmVlZGVkKCk7CiAKLSAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciA9IG1fYXNzaXN0ZWROb2RlLT5yZW5kZXJlcigpKQorICAgIGlmIChSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyID0gbV9hc3Npc3RlZE5vZGUtPnJlbmRlcmVyKCkpIHsKICAgICAgICAgaW5mb3Jt
YXRpb24uZWxlbWVudFJlY3QgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpLnZpZXcoKS0+Y29udGVudHNUb1Jvb3RWaWV3KHJlbmRlcmVyLT5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpKTsKLSAgICBlbHNlCisgICAgICAgIGluZm9ybWF0aW9uLm5vZGVGb250
U2l6ZSA9IHJlbmRlcmVyLT5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpLmNvbXB1dGVkU2l6ZSgp
OworICAgIH0gZWxzZQogICAgICAgICBpbmZvcm1hdGlvbi5lbGVtZW50UmVjdCA9IEludFJlY3Qo
KTsKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcmV0dXJuIHRoZSBzZWxlY3Rpb24gcmVjdCwg
YnV0IHdoZW4gdGhpcyBpcyBjYWxsZWQgYXQgZm9jdXMgdGltZQorICAgIC8vIHdlIGRvbid0IGhh
dmUgYSBzZWxlY3Rpb24geWV0LiBVc2luZyB0aGUgbGFzdCBpbnRlcmFjdGlvbiBsb2NhdGlvbiBp
cyBhIHJlYXNvbmFibGUgYXBwcm94aW1hdGlvbiBmb3Igbm93LgorICAgIGluZm9ybWF0aW9uLnNl
bGVjdGlvblJlY3QgPSBJbnRSZWN0KG1fbGFzdEludGVyYWN0aW9uTG9jYXRpb24sIEludFNpemUo
MSwgMSkpOwogICAgIGluZm9ybWF0aW9uLm1pbmltdW1TY2FsZUZhY3RvciA9IG1fdmlld3BvcnRD
b25maWd1cmF0aW9uLm1pbmltdW1TY2FsZSgpOwogICAgIGluZm9ybWF0aW9uLm1heGltdW1TY2Fs
ZUZhY3RvciA9IG1fdmlld3BvcnRDb25maWd1cmF0aW9uLm1heGltdW1TY2FsZSgpOworICAgIGlu
Zm9ybWF0aW9uLmFsbG93c1VzZXJTY2FsaW5nID0gbV92aWV3cG9ydENvbmZpZ3VyYXRpb24uYWxs
b3dzVXNlclNjYWxpbmcoKTsKICAgICBpbmZvcm1hdGlvbi5oYXNOZXh0Tm9kZSA9IGhhc0ZvY3Vz
YWJsZUVsZW1lbnQobV9hc3Npc3RlZE5vZGUuZ2V0KCksIG1fcGFnZS5nZXQoKSwgdHJ1ZSk7CiAg
ICAgaW5mb3JtYXRpb24uaGFzUHJldmlvdXNOb2RlID0gaGFzRm9jdXNhYmxlRWxlbWVudChtX2Fz
c2lzdGVkTm9kZS5nZXQoKSwgbV9wYWdlLmdldCgpLCBmYWxzZSk7CiAK
</data>
<flag name="review"
          id="255840"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>