<?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>134784</bug_id>
          
          <creation_ts>2014-07-09 17:13:39 -0700</creation_ts>
          <short_desc>Phone number highlights should always be visible if the mouse hovers over</short_desc>
          <delta_ts>2014-07-10 09:45:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</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="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1021487</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-09 17:13:39 -0700</bug_when>
    <thetext>Phone number highlights should always be visible if the mouse hovers over

&lt;rdar://problem/17527476&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021489</commentid>
    <comment_count>1</comment_count>
      <attachid>234671</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-09 17:19:28 -0700</bug_when>
    <thetext>Created attachment 234671
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021622</commentid>
    <comment_count>2</comment_count>
      <attachid>234671</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-07-10 09:02:09 -0700</bug_when>
    <thetext>Comment on attachment 234671
Patch v1 

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

&gt; Source/WebKit2/ChangeLog:15
&gt; +        The exception is establishHoveredTelephoneHighlight which gets a more detailed explanation below.

Maybe it can have a better name, then?

&gt; Source/WebKit2/WebProcess/WebPage/ServicesOverlayController.h:48
&gt; +    TelephoneNumberData(RetainPtr&lt;DDHighlightRef&gt; theHighlight, PassRefPtr&lt;WebCore::Range&gt; theRange)

These &quot;the&quot;s are weird, and you can actually have the names match the members, that works fine, if a little weird.

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:265
&gt; +    if (maybeDrawTelephoneNumberHighlight(graphicsContext, dirtyRect))

It&apos;s weird that the call sites of these two &quot;maybe&quot; functions are so vague about when it will happen. Maybe &quot;drawTelephoneNumberHighlightIfVisible&quot;?

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:378
&gt; +void ServicesOverlayController::establishHoveredTelephoneHighlight(Boolean&amp; onButton)

It&apos;s really weird that you&apos;re using Boolean internally to this extent.

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:398
&gt; +            CGRect cgRect = (CGRect)rect;

do you need this cast? I thought IntRect-&gt;CGRect was implicit.

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:408
&gt; +        m_servicesOverlay-&gt;setNeedsDisplay();

someday we should tighten up these repaints (or use a smaller overlay, which I thought we were already doing but see no indication of). not today.

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:522
&gt; +        ASSERT_NOT_REACHED();

once you create the overlay, is it ever uninstalled/destroyed before the page goes away?! if not, that seems ... bad</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021626</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-10 09:22:37 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 234671 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234671&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/ChangeLog:15
&gt; &gt; +        The exception is establishHoveredTelephoneHighlight which gets a more detailed explanation below.
&gt; 
&gt; Maybe it can have a better name, then?

Unfortunately I couldn&apos;t come up with one, otherwise I would&apos;ve used it already  =/

&gt; &gt; Source/WebKit2/WebProcess/WebPage/ServicesOverlayController.h:48
&gt; &gt; +    TelephoneNumberData(RetainPtr&lt;DDHighlightRef&gt; theHighlight, PassRefPtr&lt;WebCore::Range&gt; theRange)
&gt; 
&gt; These &quot;the&quot;s are weird, and you can actually have the names match the members, that works fine, if a little weird.

I did not know you could do that and I hate it.  But I made the change in this patch.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:265
&gt; &gt; +    if (maybeDrawTelephoneNumberHighlight(graphicsContext, dirtyRect))
&gt; 
&gt; It&apos;s weird that the call sites of these two &quot;maybe&quot; functions are so vague about when it will happen. Maybe &quot;drawTelephoneNumberHighlightIfVisible&quot;?

Good change.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:378
&gt; &gt; +void ServicesOverlayController::establishHoveredTelephoneHighlight(Boolean&amp; onButton)
&gt; 
&gt; It&apos;s really weird that you&apos;re using Boolean internally to this extent.

Agreed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:398
&gt; &gt; +            CGRect cgRect = (CGRect)rect;
&gt; 
&gt; do you need this cast? I thought IntRect-&gt;CGRect was implicit.

Nope!  Had it before for whatever reason, carried it over here...  it&apos;s not needed.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:408
&gt; &gt; +        m_servicesOverlay-&gt;setNeedsDisplay();
&gt; 
&gt; someday we should tighten up these repaints (or use a smaller overlay, which I thought we were already doing but see no indication of). not today.

Nope, the new small overlays came in after this was originally written.  It *should* use the smaller ones, and it should use them in WebCore...  &lt;wink wink nudge nudge&gt;

&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:522
&gt; &gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; once you create the overlay, is it ever uninstalled/destroyed before the page goes away?! if not, that seems ... bad

Yes, it is uninstalled/destroyed before the page goes away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021627</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-10 09:22:45 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/170966</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021633</commentid>
    <comment_count>5</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-07-10 09:32:24 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 234671 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234671&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/ChangeLog:15
&gt; &gt; &gt; +        The exception is establishHoveredTelephoneHighlight which gets a more detailed explanation below.
&gt; &gt; 
&gt; &gt; Maybe it can have a better name, then?
&gt; 
&gt; Unfortunately I couldn&apos;t come up with one, otherwise I would&apos;ve used it already  =/

Yeah, there&apos;s a reason I didn&apos;t make a suggestion.

&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:408
&gt; &gt; &gt; +        m_servicesOverlay-&gt;setNeedsDisplay();
&gt; &gt; 
&gt; &gt; someday we should tighten up these repaints (or use a smaller overlay, which I thought we were already doing but see no indication of). not today.
&gt; 
&gt; Nope, the new small overlays came in after this was originally written.  It *should* use the smaller ones, and it should use them in WebCore...  &lt;wink wink nudge nudge&gt;

Someday!

&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:522
&gt; &gt; &gt; +        ASSERT_NOT_REACHED();
&gt; &gt; 
&gt; &gt; once you create the overlay, is it ever uninstalled/destroyed before the page goes away?! if not, that seems ... bad
&gt; 
&gt; Yes, it is uninstalled/destroyed before the page goes away.

Where? I see how it is uninstalled *when* the page goes away, but that means that if you have a single selection/telephone number highlight, we have the (nonopaque) overlay tiles on top of the content until the page goes away, even if we&apos;re painting nothing into them. Expensive! (2x the memory, no opaque compositing optimizations, etc.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021637</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-10 09:45:41 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:522
&gt; &gt; &gt; &gt; +        ASSERT_NOT_REACHED();
&gt; &gt; &gt; 
&gt; &gt; &gt; once you create the overlay, is it ever uninstalled/destroyed before the page goes away?! if not, that seems ... bad
&gt; &gt; 
&gt; &gt; Yes, it is uninstalled/destroyed before the page goes away.
&gt; 
&gt; Where? I see how it is uninstalled *when* the page goes away, but that means that if you have a single selection/telephone number highlight, we have the (nonopaque) overlay tiles on top of the content until the page goes away, even if we&apos;re painting nothing into them. Expensive! (2x the memory, no opaque compositing optimizations, etc.)

Ugh.  Either the old TelephoneNumber overlay or the old Selection overly or both did this...  but you are correct, we don&apos;t do it now.

Filed https://bugs.webkit.org/show_bug.cgi?id=134803</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234671</attachid>
            <date>2014-07-09 17:19:28 -0700</date>
            <delta_ts>2014-07-10 09:02:08 -0700</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>26260</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZGE1MTIyLi4xMjAzZTMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTQtMDctMDkgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIFBob25lIG51bWJlciBoaWdobGlnaHRzIHNob3VsZCBhbHdheXMgYmUgdmlzaWJsZSBpZiB0
aGUgbW91c2UgaG92ZXJzIG92ZXIuCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xNzUyNzQ3Nj4g
YW5kIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ3ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUuZXhw
LmluOgorCiAyMDE0LTA3LTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBGaXggR09iamVjdCBET00gYmluZGluZ3MgQVBJ
IGJyZWFrcyB0ZXN0IGFmdGVyIHIxNzA3MDAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IDYxYzM3
NzguLjkwZWNmZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC00NTgsNiArNDU4LDcgQEAgX19a
TjdXZWJDb3JlMTRUaWxlQ29udHJvbGxlcjIzc2V0VGlsZURlYnVnQm9yZGVyQ29sb3JFTlNfNUNv
bG9yRQogX19aTjdXZWJDb3JlMTRUaWxlQ29udHJvbGxlcjIzc2V0VGlsZURlYnVnQm9yZGVyV2lk
dGhFZgogX19aTjdXZWJDb3JlMTRUaWxlQ29udHJvbGxlcjI3dGlsZUNhY2hlTGF5ZXJCb3VuZHND
aGFuZ2VkRXYKIF9fWk43V2ViQ29yZTE0VGlsZUNvbnRyb2xsZXI2Y3JlYXRlRVBOU18xNVBsYXRm
b3JtQ0FMYXllckUKK19fWk43V2ViQ29yZTE0YXJlUmFuZ2VzRXF1YWxFUEtOU181UmFuZ2VFUzJf
CiBfX1pON1dlYkNvcmUxNGRlY29kZUhvc3ROYW1lRVA4TlNTdHJpbmcKIF9fWk43V2ViQ29yZTE0
ZW5jb2RlSG9zdE5hbWVFUDhOU1N0cmluZwogX19aTjdXZWJDb3JlMTRlbmRPZlBhcmFncmFwaEVS
S05TXzE1VmlzaWJsZVBvc2l0aW9uRU5TXzI3RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlRQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCmluZGV4IDUxMWU0YjkuLjA4Y2MzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBA
QAorMjAxNC0wNy0wOSAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUGhvbmUgbnVtYmVyIGhpZ2hsaWdodHMgc2hvdWxkIGFsd2F5cyBiZSB2aXNpYmxlIGlmIHRo
ZSBtb3VzZSBob3ZlcnMgb3Zlci4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE3NTI3NDc2PiBh
bmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDc4NAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBmYWly
bHkgZXh0ZW5zaXZlIHJld3JpdGUgb2YgU2VydmljZXNPdmVybGF5Q29udHJvbGxlci4KKyAgICAg
ICAgSXQgYWxsb3dzIG9uZSBzZWxlY3Rpb24gaGlnaGxpZ2h0IGZvciB0aGUgZW50aXJlIHNlbGVj
dGlvbiwgYW5kIGFzIG1hbnkgdGVsZXBob25lIG51bWJlciBoaWdobGlnaHRzIGFzIHRoZXJlIGFy
ZSBudW1iZXJzLgorICAgICAgICBJZiBhIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0IGlzIGhv
dmVyZWQgb3ZlciwgaXQgd2lucyBhbmQgaXMgcGFpbnRlZC4KKyAgICAgICAgSWYgbm8gdGVsZXBo
b25lIG51bWJlciBoaWdobGlnaHQgaXMgaG92ZXJlZCBidXQgdGhlIHNlbGVjdGlvbiBoaWdobGln
aHQgaXMsIHRoZW4gaXQgaXMgcGFpbnRlZC4KKyAgICAgICAKKyAgICAgICAgVGhlIHB1cnBvc2Vz
IG9mIGVhY2ggbWV0aG9kIGFyZSBzZWxmIGV2aWRlbnQgYnkgdGhlaXIgbmFtZSwgYW5kIHRoZSBj
b25jZXB0cyBhcmUgbW9zdGx5IHRoZSBzYW1lIGFzIHRoZXkgdXNlZCB0byBiZS4KKworICAgICAg
ICBUaGUgZXhjZXB0aW9uIGlzIGVzdGFibGlzaEhvdmVyZWRUZWxlcGhvbmVIaWdobGlnaHQgd2hp
Y2ggZ2V0cyBhIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb24gYmVsb3cuCisgICAgICAgIAorICAg
ICAgICAqIFBsYXRmb3JtL0xvZ2dpbmcuaDogQWRkIGEgU2VydmljZXMgbG9nZ2luZyBjaGFubmVs
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIuaDoKKyAgICAgICAgKFdlYktpdDo6VGVsZXBob25lTnVtYmVyRGF0YTo6VGVsZXBob25lTnVt
YmVyRGF0YSk6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIpOgorICAgICAgICAoV2ViS2l0OjpTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpzZWxlY3Rpb25SZWN0c0RpZENoYW5nZSk6CisgICAgICAg
IChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnNlbGVjdGVkVGVsZXBob25lTnVt
YmVyUmFuZ2VzQ2hhbmdlZCk6CisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6OmNsZWFySGlnaGxpZ2h0U3RhdGUpOgorICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OmRyYXdTZWxlY3Rpb25IaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0
OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptYXliZURyYXdUZWxlcGhvbmVOdW1iZXJIaWdo
bGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkcmF3
SGlnaGxpZ2h0KToKKyAgICAgICAgKFdlYktpdDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6
Y2xlYXJTZWxlY3Rpb25IaWdobGlnaHQpOgorICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpjbGVhckhvdmVyZWRUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQpOgorICAg
ICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjplc3RhYmxpc2hIb3ZlcmVk
VGVsZXBob25lSGlnaGxpZ2h0KTogU3RhcnRzIHdhbGtpbmcgdGhlIHRlbGVwaG9uZSBudW1iZXIg
cmFuZ2VzIGFuZAorICAgICAgICAgICAgY3JlYXRpbmcgYSBoaWdobGlnaHQgZm9yIGVhY2ggb25l
IHRoYXQgZG9lc27igJl0IGFscmVhZHkgaGF2ZSBhIGhpZ2hsaWdodC4gSWYgdGhhdCBoaWdobGln
aHQgaXMgYWxzbyBiZWluZyBob3ZlcmVkIGJ5CisgICAgICAgICAgICB0aGUgbW91c2UsIHRoZW4g
aXQgaXMgc2V0IGFzIHRoZSBob3ZlcmVkIHRlbGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0IGFuZCB0
aGUgbWV0aG9kIHN0b3BzIGNyZWF0aW5nIG5ldyBoaWdobGlnaHRzLgorICAgICAgICAoV2ViS2l0
OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptYXliZUNyZWF0ZVNlbGVjdGlvbkhpZ2hsaWdo
dCk6CisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1vdXNlRXZl
bnQpOgorICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpoYW5kbGVD
bGljayk6CisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdU
ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpkcmF3Q3VycmVudEhpZ2hsaWdodCk6IERlbGV0ZWQuCisK
IDIwMTQtMDctMDggIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgV0tQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb25Qcml2YXRlJ3MgbWF4aW11bVByb2Nlc3ND
b3VudCBwcm9wZXJ0eSBoYXMgbm8gZWZmZWN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgKaW5k
ZXggZjVkOTg0ZC4uMGUzZTFkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
TG9nZ2luZy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0xvZ2dpbmcuaApAQCAtNTEs
NiArNTEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKICAgICBNKFRleHRJbnB1dCkgXAogICAgIE0o
VmlldykgXAogICAgIE0oSURCKSBcCisgICAgTShTZXJ2aWNlcykgXAogCiAjZGVmaW5lIERFQ0xB
UkVfTE9HX0NIQU5ORUwobmFtZSkgXAogICAgIGV4dGVybiBXVEZMb2dDaGFubmVsIEpPSU5fTE9H
X0NIQU5ORUxfV0lUSF9QUkVGSVgoTE9HX0NIQU5ORUxfUFJFRklYLCBuYW1lKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5oCmluZGV4IDA2ZjI4OWEuLjgxMjBlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIuaApAQCAtNDQsNiArNDQsMTcgQEAgY2xhc3MgV2ViUGFnZTsKIAogdHlwZWRlZiB2
b2lkKiBEREhpZ2hsaWdodFJlZjsKIAorc3RydWN0IFRlbGVwaG9uZU51bWJlckRhdGEgeworICAg
IFRlbGVwaG9uZU51bWJlckRhdGEoUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiB0aGVIaWdobGln
aHQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHRoZVJhbmdlKQorICAgICAgICA6IGhpZ2hs
aWdodCh0aGVIaWdobGlnaHQpCisgICAgICAgICwgcmFuZ2UodGhlUmFuZ2UpCisgICAgeworICAg
IH0KKworICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gaGlnaGxpZ2h0OworICAgIFJlZlB0
cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2U7Cit9OworCiBjbGFzcyBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyIDogcHJpdmF0ZSBQYWdlT3ZlcmxheTo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyKFdlYlBhZ2UmKTsKQEAgLTU0LDMyICs2NSwzOSBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjcmVhdGVPdmVybGF5SWZOZWVkZWQoKTsKLSAgICB2
b2lkIGhhbmRsZUNsaWNrKGNvbnN0IFdlYkNvcmU6OkludFBvaW50Jik7CisgICAgdm9pZCBoYW5k
bGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIERESGlnaGxpZ2h0UmVmKTsKICAgICB2
b2lkIGNsZWFySGlnaGxpZ2h0U3RhdGUoKTsKLSAgICAKKwogICAgIHZpcnR1YWwgdm9pZCBwYWdl
T3ZlcmxheURlc3Ryb3llZChQYWdlT3ZlcmxheSopIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCB3aWxsTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkTW92ZVRvV2ViUGFnZShQYWdlT3ZlcmxheSosIFdlYlBhZ2UqKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1JlY3QoUGFnZU92ZXJsYXkqLCBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0eVJlY3QpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBtb3VzZUV2ZW50KFBhZ2VPdmVybGF5KiwgY29uc3Qg
V2ViTW91c2VFdmVudCYpIG92ZXJyaWRlOwogCi0gICAgdm9pZCBkcmF3VGVsZXBob25lTnVtYmVy
SGlnaGxpZ2h0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IFdlYkNvcmU6OkludFJl
Y3QmIGRpcnR5UmVjdCk7CisgICAgYm9vbCBtYXliZURyYXdUZWxlcGhvbmVOdW1iZXJIaWdobGln
aHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGly
dHlSZWN0KTsKICAgICB2b2lkIGRyYXdTZWxlY3Rpb25IaWdobGlnaHQoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KTsKLSAgICB2b2lk
IGRyYXdDdXJyZW50SGlnaGxpZ2h0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYpOworICAgIHZv
aWQgZHJhd0hpZ2hsaWdodChEREhpZ2hsaWdodFJlZiwgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
Jik7CisKKyAgICB2b2lkIGVzdGFibGlzaEhvdmVyZWRUZWxlcGhvbmVIaWdobGlnaHQoQm9vbGVh
biYgb25CdXR0b24pOworICAgIHZvaWQgbWF5YmVDcmVhdGVTZWxlY3Rpb25IaWdobGlnaHQoKTsK
KworICAgIHZvaWQgY2xlYXJTZWxlY3Rpb25IaWdobGlnaHQoKTsKKyAgICB2b2lkIGNsZWFySG92
ZXJlZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodCgpOwogCiAgICAgV2ViUGFnZSogbV93ZWJQYWdl
OwogICAgIFBhZ2VPdmVybGF5KiBtX3NlcnZpY2VzT3ZlcmxheTsKICAgICAKICAgICBWZWN0b3I8
V2ViQ29yZTo6TGF5b3V0UmVjdD4gbV9jdXJyZW50U2VsZWN0aW9uUmVjdHM7CisgICAgUmV0YWlu
UHRyPERESGlnaGxpZ2h0UmVmPiBtX3NlbGVjdGlvbkhpZ2hsaWdodDsKKwogICAgIFZlY3RvcjxS
ZWZQdHI8V2ViQ29yZTo6UmFuZ2U+PiBtX2N1cnJlbnRUZWxlcGhvbmVOdW1iZXJSYW5nZXM7Cisg
ICAgVmVjdG9yPFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4+IG1fdGVsZXBob25lTnVtYmVySGln
aGxpZ2h0czsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VGVsZXBob25lTnVtYmVyRGF0YT4gbV9ob3Zl
cmVkVGVsZXBob25lTnVtYmVyRGF0YTsKIAotICAgIFdlYkNvcmU6OkludFBvaW50IG1fbW91c2VQ
b3NpdGlvbjsKLSAgICBib29sIG1fbW91c2VJc0Rvd25PbkJ1dHRvbjsKLSAgICBib29sIG1fbW91
c2VJc092ZXJIaWdobGlnaHQ7Ci0gICAgYm9vbCBtX2RyYXdpbmdUZWxlcGhvbmVOdW1iZXJIaWdo
bGlnaHQ7CisgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBtX2N1cnJlbnRIb3ZlcmVkSGln
aGxpZ2h0OworICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gbV9jdXJyZW50TW91c2VEb3du
T25CdXR0b25IaWdobGlnaHQ7CiAKLSAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1fY3Vy
cmVudEhpZ2hsaWdodDsKLSAgICBib29sIG1fY3VycmVudEhpZ2hsaWdodElzRGlydHk7CisgICAg
V2ViQ29yZTo6SW50UG9pbnQgbV9tb3VzZVBvc2l0aW9uOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KaW5kZXggOWQ4Y2MxMi4u
NDEwMTYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpIHx8IEVOQUJMRShURUxFUEhP
TkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQogCisjaW1wb3J0ICJMb2dnaW5n
LmgiCiAjaW1wb3J0ICJXZWJQYWdlLmgiCiAjaW1wb3J0ICJXZWJQcm9jZXNzLmgiCiAjaW1wb3J0
IDxXZWJDb3JlL0RvY3VtZW50Lmg+CkBAIC03NSwxMCArNzYsNiBAQCBzdGF0aWMgSW50UmVjdCB0
ZXh0UXVhZHNUb0JvdW5kaW5nUmVjdEZvclJhbmdlKFJhbmdlJiByYW5nZSkKIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoV2ViUGFnZSYgd2ViUGFn
ZSkKICAgICA6IG1fd2ViUGFnZSgmd2ViUGFnZSkKICAgICAsIG1fc2VydmljZXNPdmVybGF5KG51
bGxwdHIpCi0gICAgLCBtX21vdXNlSXNEb3duT25CdXR0b24oZmFsc2UpCi0gICAgLCBtX21vdXNl
SXNPdmVySGlnaGxpZ2h0KGZhbHNlKQotICAgICwgbV9kcmF3aW5nVGVsZXBob25lTnVtYmVySGln
aGxpZ2h0KGZhbHNlKQotICAgICwgbV9jdXJyZW50SGlnaGxpZ2h0SXNEaXJ0eShmYWxzZSkKIHsK
IH0KIApAQCAtMjIwLDcgKzIxNyw3IEBAIHN0YXRpYyB2b2lkIGNvbXBhY3RSZWN0c1dpdGhHYXBS
ZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBWZWN0b3I8R2FwCiB2b2lkIFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0IFZl
Y3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IFZlY3RvcjxHYXBSZWN0cz4mIGdhcFJlY3Rz
KQogewogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPiAxMDkwCi0gICAgbV9j
dXJyZW50SGlnaGxpZ2h0SXNEaXJ0eSA9IHRydWU7CisgICAgY2xlYXJTZWxlY3Rpb25IaWdobGln
aHQoKTsKICAgICBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cyA9IHJlY3RzOwogCiAgICAgY29tcGFj
dFJlY3RzV2l0aEdhcFJlY3RzKG1fY3VycmVudFNlbGVjdGlvblJlY3RzLCBnYXBSZWN0cyk7CkBA
IC0yMjgsNiArMjI1LDggQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpzZWxlY3Rp
b25SZWN0c0RpZENoYW5nZShjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4KICAgICAvLyBEYXRhRGV0
ZWN0b3JzIG5lZWRzIHRoZXNlIHJldmVyc2VkIGluIG9yZGVyIHRvIHBsYWNlIHRoZSBhcnJvdyBp
biB0aGUgcmlnaHQgbG9jYXRpb24uCiAgICAgbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMucmV2ZXJz
ZSgpOwogCisgICAgTE9HKFNlcnZpY2VzLCAiU2VydmljZXNPdmVybGF5Q29udHJvbGxlciAtIFNl
bGVjdGlvbiByZWN0cyBjaGFuZ2VkIC0gTm93IGhhdmUgJWx1XG4iLCByZWN0cy5zaXplKCkpOwor
CiAgICAgY3JlYXRlT3ZlcmxheUlmTmVlZGVkKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShy
ZWN0cyk7CkBAIC0yMzcsMTggKzIzNiwxMSBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0IFZlY3RvcjxMYXlvdXRSZWN0Pgogdm9p
ZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpzZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdl
c0NoYW5nZWQoY29uc3QgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiByYW5nZXMpCiB7CiAjaWYgUExB
VEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA5MAotICAg
IG1fY3VycmVudEhpZ2hsaWdodElzRGlydHkgPSB0cnVlOworICAgIExPRyhTZXJ2aWNlcywgIlNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgLSBUZWxlcGhvbmUgbnVtYmVyIHJhbmdlcyBjaGFuZ2Vk
IC0gSGFkICVsdSwgbm93IGhhdmUgJWx1XG4iLCBtX2N1cnJlbnRUZWxlcGhvbmVOdW1iZXJSYW5n
ZXMuc2l6ZSgpLCByYW5nZXMuc2l6ZSgpKTsKICAgICBtX2N1cnJlbnRUZWxlcGhvbmVOdW1iZXJS
YW5nZXMgPSByYW5nZXM7Ci0gICAgbV9kcmF3aW5nVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0ID0g
ZmFsc2U7CisgICAgbV90ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRzLmNsZWFyKCk7CisgICAgbV90
ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRzLnJlc2l6ZShyYW5nZXMuc2l6ZSgpKTsKIAotICAgIGlm
IChyYW5nZXMuc2l6ZSgpID09IDEpIHsKLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHJhbmdl
c1swXS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKSB7Ci0gICAgICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9y
bWFsaXplZFJhbmdlKCk7Ci0gICAgICAgICAgICBpZiAocmFuZ2VzWzBdLT5jb250YWlucygqc2Vs
ZWN0aW9uUmFuZ2UpKQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ1RlbGVwaG9uZU51bWJlckhp
Z2hsaWdodCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgY3JlYXRlT3Zlcmxh
eUlmTmVlZGVkKCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShyYW5nZXMpOwpAQCAtMjU3LDEx
ICsyNDksMTAgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpzZWxlY3RlZFRlbGVw
aG9uZU51bWJlclJhbmdlc0NoYW5nZWQoY29uc3QgVmVjdG8KIAogdm9pZCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpjbGVhckhpZ2hsaWdodFN0YXRlKCkKIHsKLSAgICBtX21vdXNlSXNEb3du
T25CdXR0b24gPSBmYWxzZTsKLSAgICBtX21vdXNlSXNPdmVySGlnaGxpZ2h0ID0gZmFsc2U7Ci0g
ICAgbV9kcmF3aW5nVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0ID0gZmFsc2U7CisgICAgY2xlYXJT
ZWxlY3Rpb25IaWdobGlnaHQoKTsKKyAgICBjbGVhckhvdmVyZWRUZWxlcGhvbmVOdW1iZXJIaWdo
bGlnaHQoKTsKIAotICAgIG1fY3VycmVudEhpZ2hsaWdodCA9IG51bGxwdHI7CisgICAgbV90ZWxl
cGhvbmVOdW1iZXJIaWdobGlnaHRzLmNsZWFyKCk7CiB9CiAKIHZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYXkqIG92ZXJsYXksIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBkaXJ0
eVJlY3QpCkBAIC0yNzEsMTYgKzI2MiwxNCBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OmRyYXdSZWN0KFBhZ2VPdmVybGF5KiBvdmVybGF5LCBXZWJDb3JlOjpHcmFwaGljcwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1fZHJhd2luZ1RlbGVwaG9uZU51bWJlckhp
Z2hsaWdodCkKLSAgICAgICAgZHJhd1RlbGVwaG9uZU51bWJlckhpZ2hsaWdodChncmFwaGljc0Nv
bnRleHQsIGRpcnR5UmVjdCk7Ci0gICAgZWxzZQotICAgICAgICBkcmF3U2VsZWN0aW9uSGlnaGxp
Z2h0KGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KTsKKyAgICBpZiAobWF5YmVEcmF3VGVsZXBo
b25lTnVtYmVySGlnaGxpZ2h0KGdyYXBoaWNzQ29udGV4dCwgZGlydHlSZWN0KSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgZHJhd1NlbGVjdGlvbkhpZ2hsaWdodChncmFwaGljc0NvbnRleHQsIGRp
cnR5UmVjdCk7CiB9CiAKIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1NlbGVj
dGlvbkhpZ2hsaWdodChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQogewotICAgIEFTU0VSVCghbV9kcmF3
aW5nVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0KTsKLQogICAgIC8vIEl0J3MgcG9zc2libGUgdG8g
ZW5kIHVwIGRyYXdpbmcgdGhlIHNlbGVjdGlvbiBoaWdobGlnaHQgYmVmb3JlIHdlJ3ZlIGFjdHVh
bGx5IHJlY2VpdmVkIHRoZSBzZWxlY3Rpb24gcmVjdHMuCiAgICAgLy8gSWYgdGhhdCBoYXBwZW5z
IHdlJ2xsIGVuZCB1cCBoZXJlIGFnYWluIG9uY2Ugd2UgaGF2ZSB0aGUgcmVjdHMuCiAgICAgaWYg
KG1fY3VycmVudFNlbGVjdGlvblJlY3RzLmlzRW1wdHkoKSkKQEAgLTI5MCw3NSArMjc5LDY2IEBA
IHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1NlbGVjdGlvbkhpZ2hsaWdodChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmCiAgICAgaWYgKCFXZWJQcm9jZXNzOjpzaGFyZWQoKS5o
YXNTZWxlY3Rpb25TZXJ2aWNlcygpICYmIG1fY3VycmVudFRlbGVwaG9uZU51bWJlclJhbmdlcy5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9jdXJyZW50SGlnaGxpZ2h0
IHx8IG1fY3VycmVudEhpZ2hsaWdodElzRGlydHkpIHsKLSAgICAgICAgVmVjdG9yPENHUmVjdD4g
Y2dSZWN0czsKLSAgICAgICAgY2dSZWN0cy5yZXNlcnZlQ2FwYWNpdHkobV9jdXJyZW50U2VsZWN0
aW9uUmVjdHMuc2l6ZSgpKTsKLQotICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX2N1cnJlbnRT
ZWxlY3Rpb25SZWN0cykKLSAgICAgICAgICAgIGNnUmVjdHMuYXBwZW5kKChDR1JlY3QpcGl4ZWxT
bmFwcGVkSW50UmVjdChyZWN0KSk7CisgICAgaWYgKCFtX3NlbGVjdGlvbkhpZ2hsaWdodCkKKyAg
ICAgICAgbWF5YmVDcmVhdGVTZWxlY3Rpb25IaWdobGlnaHQoKTsKIAotICAgICAgICBpZiAoIWNn
UmVjdHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBDR1JlY3QgYm91bmRzID0gbV93ZWJQYWdl
LT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPmJvdW5kc1JlY3QoKTsKLSAgICAgICAg
ICAgIG1fY3VycmVudEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVj
dHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVn
aW4oKSwgY2dSZWN0cy5zaXplKCksIGJvdW5kcywgRERIaWdobGlnaHROb091dGxpbmVXaXRoQXJy
b3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwotICAgICAgICAg
ICAgbV9jdXJyZW50SGlnaGxpZ2h0SXNEaXJ0eSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1fY3VycmVudEhpZ2hsaWdodCkKLSAgICAgICAgZHJhd0N1cnJlbnRIaWdobGln
aHQoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBpZiAobV9zZWxlY3Rpb25IaWdobGlnaHQpCisgICAg
ICAgIGRyYXdIaWdobGlnaHQobV9zZWxlY3Rpb25IaWdobGlnaHQuZ2V0KCksIGdyYXBoaWNzQ29u
dGV4dCk7CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1RlbGVwaG9u
ZU51bWJlckhpZ2hsaWdodChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgZGlydHlSZWN0KQorYm9vbCBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjptYXliZURyYXdUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IGRpcnR5UmVjdCkKIHsKLSAgICBBU1NFUlQobV9kcmF3aW5nVGVsZXBob25lTnVtYmVySGlnaGxp
Z2h0KTsKLSAgICBBU1NFUlQobV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFuZ2VzLnNpemUoKSA9
PSAxKTsKLQotICAgIGF1dG8mIHJhbmdlID0gbV9jdXJyZW50VGVsZXBob25lTnVtYmVyUmFuZ2Vz
WzBdOwotCi0gICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjaG9rZSBpZiB0aGUgcmFuZ2Ugd3JhcHMg
YXJvdW5kIHRoZSBlZGdlIG9mIHRoZSB2aWV3LgotICAgIC8vIFdoYXQgc2hvdWxkIHdlIGRvIGlu
IHRoYXQgY2FzZT8KLSAgICBJbnRSZWN0IHJlY3QgPSB0ZXh0UXVhZHNUb0JvdW5kaW5nUmVjdEZv
clJhbmdlKCpyYW5nZSk7Ci0KLSAgICAvLyBDb252ZXJ0IHRvIHRoZSBtYWluIGRvY3VtZW50J3Mg
Y29vcmRpbmF0ZSBzcGFjZS4KLSAgICAvLyBGSVhNRTogSXQncyBhIGxpdHRsZSBjcmF6eSB0byBj
YWxsIGNvbnRlbnRzVG9XaW5kb3cgYW5kIHRoZW4gd2luZG93VG9Db250ZW50cyBpbiBvcmRlciB0
byBnZXQgdGhlIHJpZ2h0IGNvb3JkaW5hdGUgc3BhY2UuCi0gICAgLy8gV2Ugc2hvdWxkIGNvbnNp
ZGVyIGFkZGluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0byBTY3JvbGxWaWV3IGZvciBjb250ZW50
c1RvRG9jdW1lbnQoKS4gUmlnaHQgbm93LCBjb250ZW50c1RvUm9vdFZpZXcoKSBpcwotICAgIC8v
IG5vdCBlcXVpdmFsZW50IHRvIHdoYXQgd2UgbmVlZCB3aGVuIHlvdSBoYXZlIGEgdG9wQ29udGVu
dEluc2V0IG9yIGEgaGVhZGVyIGJhbm5lci4KLSAgICBGcmFtZVZpZXcqIHZpZXdGb3JSYW5nZSA9
IHJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOwotICAgIGlmICghdmlld0ZvclJhbmdlKQot
ICAgICAgICByZXR1cm47Ci0gICAgRnJhbWVWaWV3JiBtYWluRnJhbWVWaWV3ID0gKm1fd2ViUGFn
ZS0+Y29yZVBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpOwotICAgIHJlY3Quc2V0TG9jYXRpb24o
bWFpbkZyYW1lVmlldy53aW5kb3dUb0NvbnRlbnRzKHZpZXdGb3JSYW5nZS0+Y29udGVudHNUb1dp
bmRvdyhyZWN0LmxvY2F0aW9uKCkpKSk7CisgICAgLy8gTWFrZSBzdXJlIHRoZSBob3ZlcmVkIHRl
bGVwaG9uZSBudW1iZXIgaGlnaGxpZ2h0IGlzIHN0aWxsIGhvdmVyZWQuCisgICAgaWYgKG1faG92
ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEpIHsKKyAgICAgICAgQm9vbGVhbiBvbkJ1dHRvbjsKKyAg
ICAgICAgaWYgKCFEREhpZ2hsaWdodFBvaW50SXNPbkhpZ2hsaWdodChtX2hvdmVyZWRUZWxlcGhv
bmVOdW1iZXJEYXRhLT5oaWdobGlnaHQuZ2V0KCksIChDR1BvaW50KW1fbW91c2VQb3NpdGlvbiwg
Jm9uQnV0dG9uKSkKKyAgICAgICAgICAgIGNsZWFySG92ZXJlZFRlbGVwaG9uZU51bWJlckhpZ2hs
aWdodCgpOworCisgICAgICAgIGJvb2wgZm91bmRNYXRjaGluZ1JhbmdlID0gZmFsc2U7CisKKyAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZSBob3ZlcmVkIGhpZ2hsaWdodCBzdGlsbCBjb3JyZXNwb25k
cyB0byBhIGN1cnJlbnQgdGVsZXBob25lIG51bWJlciByYW5nZS4KKyAgICAgICAgZm9yIChhdXRv
JiByYW5nZSA6IG1fY3VycmVudFRlbGVwaG9uZU51bWJlclJhbmdlcykgeworICAgICAgICAgICAg
aWYgKGFyZVJhbmdlc0VxdWFsKHJhbmdlLmdldCgpLCBtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJE
YXRhLT5yYW5nZS5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZE1hdGNoaW5nUmFuZ2Ug
PSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CiAKLSAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIHJlY3QgaXMgY29tcGxldGVseSBvdXRzaWRlIHRo
aXMgZHJhd2luZyB0aWxlLCBkb24ndCBwcm9jZXNzIGl0IGZ1cnRoZXIKLSAgICBpZiAoIXJlY3Qu
aW50ZXJzZWN0cyhkaXJ0eVJlY3QpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghZm91
bmRNYXRjaGluZ1JhbmdlKQorICAgICAgICAgICAgY2xlYXJIb3ZlcmVkVGVsZXBob25lTnVtYmVy
SGlnaGxpZ2h0KCk7CisgICAgfQogCi0gICAgaWYgKCFtX2N1cnJlbnRIaWdobGlnaHQgfHwgbV9j
dXJyZW50SGlnaGxpZ2h0SXNEaXJ0eSkgewotICAgICAgICBDR1JlY3QgY2dSZWN0ID0gKENHUmVj
dClyZWN0OworICAgIC8vIEZvdW5kIG91dCB3aGljaCAtIGlmIGFueSAtIHRlbGVwaG9uZSBudW1i
ZXIgaXMgaG92ZXJlZC4KKyAgICBpZiAoIW1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEpIHsK
KyAgICAgICAgQm9vbGVhbiBvbkJ1dHRvbjsKKyAgICAgICAgZXN0YWJsaXNoSG92ZXJlZFRlbGVw
aG9uZUhpZ2hsaWdodChvbkJ1dHRvbik7CisgICAgfQogCi0gICAgICAgIG1fY3VycmVudEhpZ2hs
aWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0
aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsICZjZ1JlY3QsIDEsIHZpZXdGb3JSYW5nZS0+Ym91
bmRzUmVjdCgpLCBEREhpZ2hsaWdodE91dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGly
ZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwotICAgICAgICBtX2N1cnJlbnRIaWdobGlnaHRJc0Rp
cnR5ID0gZmFsc2U7CisgICAgLy8gSWYgYSB0ZWxlcGhvbmUgbnVtYmVyIGlzIGFjdHVhbGx5IGhv
dmVyZWQsIGRyYXcgaXQuCisgICAgaWYgKG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEpIHsK
KyAgICAgICAgZHJhd0hpZ2hsaWdodChtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhLT5oaWdo
bGlnaHQuZ2V0KCksIGdyYXBoaWNzQ29udGV4dCk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIAotICAgIGlmIChtX2N1cnJlbnRIaWdobGlnaHQpCi0gICAgICAgIGRyYXdDdXJyZW50SGln
aGxpZ2h0KGdyYXBoaWNzQ29udGV4dCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdDdXJyZW50SGlnaGxpZ2h0KFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpkcmF3SGlnaGxpZ2h0KERESGlnaGxpZ2h0UmVmIGhpZ2hsaWdodCwgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQpCiB7Ci0gICAgQVNTRVJUKG1fY3VycmVu
dEhpZ2hsaWdodCk7CisgICAgQVNTRVJUKGhpZ2hsaWdodCk7CiAKICAgICBCb29sZWFuIG9uQnV0
dG9uOwotICAgIG1fbW91c2VJc092ZXJIaWdobGlnaHQgPSBEREhpZ2hsaWdodFBvaW50SXNPbkhp
Z2hsaWdodChtX2N1cnJlbnRIaWdobGlnaHQuZ2V0KCksIChDR1BvaW50KW1fbW91c2VQb3NpdGlv
biwgJm9uQnV0dG9uKTsKKyAgICBib29sIG1vdXNlSXNPdmVySGlnaGxpZ2h0ID0gRERIaWdobGln
aHRQb2ludElzT25IaWdobGlnaHQoaGlnaGxpZ2h0LCAoQ0dQb2ludCltX21vdXNlUG9zaXRpb24s
ICZvbkJ1dHRvbik7CiAKLSAgICAvLyBJZiB0aGUgbW91c2UgaXMgbm90IG92ZXIgdGhlIERESGln
aGxpZ2h0IHdlIGhhdmUgbm8gZHJhd2luZyB0byBkby4KLSAgICBpZiAoIW1fbW91c2VJc092ZXJI
aWdobGlnaHQpCisgICAgaWYgKCFtb3VzZUlzT3ZlckhpZ2hsaWdodCkgeworICAgICAgICBMT0co
U2VydmljZXMsICJTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpkcmF3SGlnaGxpZ2h0IC0gTW91
c2UgaXMgbm90IG92ZXIgaGlnaGxpZ2h0LCBzbyBkcmF3aW5nIG5vdGhpbmciKTsKICAgICAgICAg
cmV0dXJuOworICAgIH0KIAogICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBncmFwaGljc0Nv
bnRleHQucGxhdGZvcm1Db250ZXh0KCk7CiAgICAgCi0gICAgQ0dMYXllclJlZiBoaWdobGlnaHRM
YXllciA9IERESGlnaGxpZ2h0R2V0TGF5ZXJXaXRoQ29udGV4dChtX2N1cnJlbnRIaWdobGlnaHQu
Z2V0KCksIGNnQ29udGV4dCk7Ci0gICAgQ0dSZWN0IGhpZ2hsaWdodEJvdW5kaW5nUmVjdCA9IERE
SGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0KG1fY3VycmVudEhpZ2hsaWdodC5nZXQoKSk7CisgICAg
Q0dMYXllclJlZiBoaWdobGlnaHRMYXllciA9IERESGlnaGxpZ2h0R2V0TGF5ZXJXaXRoQ29udGV4
dChoaWdobGlnaHQsIGNnQ29udGV4dCk7CisgICAgQ0dSZWN0IGhpZ2hsaWdodEJvdW5kaW5nUmVj
dCA9IERESGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0KGhpZ2hsaWdodCk7CiAgICAgCiAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAKQEAg
LTM3MSw1NSArMzUxLDE0NCBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdD
dXJyZW50SGlnaGxpZ2h0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZwogICAgIENHQ29udGV4
dERyYXdMYXllckluUmVjdChjZ0NvbnRleHQsIGhpZ2hsaWdodERyYXdSZWN0LCBoaWdobGlnaHRM
YXllcik7CiB9CiAKK3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJTZWxlY3Rp
b25IaWdobGlnaHQoKQoreworICAgIGlmICghbV9zZWxlY3Rpb25IaWdobGlnaHQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0ID09IG1fc2VsZWN0
aW9uSGlnaGxpZ2h0KQorICAgICAgICBtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0ID0gbnVsbHB0
cjsKKyAgICBpZiAobV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPT0gbV9zZWxl
Y3Rpb25IaWdobGlnaHQpCisgICAgICAgIG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxp
Z2h0ID0gbnVsbHB0cjsKKyAgICBtX3NlbGVjdGlvbkhpZ2hsaWdodCA9IG51bGxwdHI7Cit9CisK
K3ZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y2xlYXJIb3ZlcmVkVGVsZXBob25lTnVt
YmVySGlnaGxpZ2h0KCkKK3sKKyAgICBpZiAoIW1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0ID09
IG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEtPmhpZ2hsaWdodCkKKyAgICAgICAgbV9jdXJy
ZW50SG92ZXJlZEhpZ2hsaWdodCA9IG51bGxwdHI7CisgICAgaWYgKG1fY3VycmVudE1vdXNlRG93
bk9uQnV0dG9uSGlnaGxpZ2h0ID09IG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEtPmhpZ2hs
aWdodCkKKyAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxs
cHRyOworICAgIG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEgPSBudWxscHRyOworfQorCit2
b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmVzdGFibGlzaEhvdmVyZWRUZWxlcGhvbmVI
aWdobGlnaHQoQm9vbGVhbiYgb25CdXR0b24pCit7CisgICAgQVNTRVJUKG1fY3VycmVudFRlbGVw
aG9uZU51bWJlclJhbmdlcy5zaXplKCkgPT0gbV90ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRzLnNp
emUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jdXJyZW50VGVsZXBob25l
TnVtYmVyUmFuZ2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghbV90ZWxlcGhvbmVOdW1i
ZXJIaWdobGlnaHRzW2ldKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGNob2tl
IGlmIHRoZSByYW5nZSB3cmFwcyBhcm91bmQgdGhlIGVkZ2Ugb2YgdGhlIHZpZXcuCisgICAgICAg
ICAgICAvLyBXaGF0IHNob3VsZCB3ZSBkbyBpbiB0aGF0IGNhc2U/CisgICAgICAgICAgICBJbnRS
ZWN0IHJlY3QgPSB0ZXh0UXVhZHNUb0JvdW5kaW5nUmVjdEZvclJhbmdlKCptX2N1cnJlbnRUZWxl
cGhvbmVOdW1iZXJSYW5nZXNbaV0pOworCisgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIHRoZSBt
YWluIGRvY3VtZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
dCdzIGEgbGl0dGxlIGNyYXp5IHRvIGNhbGwgY29udGVudHNUb1dpbmRvdyBhbmQgdGhlbiB3aW5k
b3dUb0NvbnRlbnRzIGluIG9yZGVyIHRvIGdldCB0aGUgcmlnaHQgY29vcmRpbmF0ZSBzcGFjZS4K
KyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBjb25zaWRlciBhZGRpbmcgY29udmVyc2lvbiBmdW5j
dGlvbnMgdG8gU2Nyb2xsVmlldyBmb3IgY29udGVudHNUb0RvY3VtZW50KCkuIFJpZ2h0IG5vdywg
Y29udGVudHNUb1Jvb3RWaWV3KCkgaXMKKyAgICAgICAgICAgIC8vIG5vdCBlcXVpdmFsZW50IHRv
IHdoYXQgd2UgbmVlZCB3aGVuIHlvdSBoYXZlIGEgdG9wQ29udGVudEluc2V0IG9yIGEgaGVhZGVy
IGJhbm5lci4KKyAgICAgICAgICAgIEZyYW1lVmlldyogdmlld0ZvclJhbmdlID0gbV9jdXJyZW50
VGVsZXBob25lTnVtYmVyUmFuZ2VzW2ldLT5vd25lckRvY3VtZW50KCkudmlldygpOworICAgICAg
ICAgICAgaWYgKCF2aWV3Rm9yUmFuZ2UpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBGcmFtZVZpZXcmIG1haW5GcmFtZVZpZXcgPSAqbV93ZWJQYWdlLT5jb3JlUGFnZSgp
LT5tYWluRnJhbWUoKS52aWV3KCk7CisgICAgICAgICAgICByZWN0LnNldExvY2F0aW9uKG1haW5G
cmFtZVZpZXcud2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3co
cmVjdC5sb2NhdGlvbigpKSkpOworCisgICAgICAgICAgICBDR1JlY3QgY2dSZWN0ID0gKENHUmVj
dClyZWN0OworICAgICAgICAgICAgbV90ZWxlcGhvbmVOdW1iZXJIaWdobGlnaHRzW2ldID0gYWRv
cHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmRE
aXJlY3Rpb24obnVsbHB0ciwgJmNnUmVjdCwgMSwgdmlld0ZvclJhbmdlLT5ib3VuZHNSZWN0KCks
IERESGlnaGxpZ2h0T3V0bGluZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1
cmFsLCBOTywgWUVTKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIURESGlnaGxpZ2h0UG9p
bnRJc09uSGlnaGxpZ2h0KG1fdGVsZXBob25lTnVtYmVySGlnaGxpZ2h0c1tpXS5nZXQoKSwgKENH
UG9pbnQpbV9tb3VzZVBvc2l0aW9uLCAmb25CdXR0b24pKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgaWYgKCFtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhIHx8IG1faG92ZXJl
ZFRlbGVwaG9uZU51bWJlckRhdGEtPmhpZ2hsaWdodCAhPSBtX3RlbGVwaG9uZU51bWJlckhpZ2hs
aWdodHNbaV0pCisgICAgICAgICAgICBtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhID0gc3Rk
OjptYWtlX3VuaXF1ZTxUZWxlcGhvbmVOdW1iZXJEYXRhPihtX3RlbGVwaG9uZU51bWJlckhpZ2hs
aWdodHNbaV0sIG1fY3VycmVudFRlbGVwaG9uZU51bWJlclJhbmdlc1tpXSk7CisKKyAgICAgICAg
bV9zZXJ2aWNlc092ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2xlYXJIb3ZlcmVkVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0KCk7CisgICAg
b25CdXR0b24gPSBmYWxzZTsKK30KKwordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpt
YXliZUNyZWF0ZVNlbGVjdGlvbkhpZ2hsaWdodCgpCit7CisgICAgQVNTRVJUKCFtX3NlbGVjdGlv
bkhpZ2hsaWdodCk7CisgICAgQVNTRVJUKG1fc2VydmljZXNPdmVybGF5KTsKKworICAgIFZlY3Rv
cjxDR1JlY3Q+IGNnUmVjdHM7CisgICAgY2dSZWN0cy5yZXNlcnZlQ2FwYWNpdHkobV9jdXJyZW50
U2VsZWN0aW9uUmVjdHMuc2l6ZSgpKTsKKworICAgIGZvciAoYXV0byYgcmVjdCA6IG1fY3VycmVu
dFNlbGVjdGlvblJlY3RzKQorICAgICAgICBjZ1JlY3RzLmFwcGVuZCgoQ0dSZWN0KXBpeGVsU25h
cHBlZEludFJlY3QocmVjdCkpOworCisgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkgeworICAg
ICAgICBDR1JlY3QgYm91bmRzID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52
aWV3KCktPmJvdW5kc1JlY3QoKTsKKyAgICAgICAgbV9zZWxlY3Rpb25IaWdobGlnaHQgPSBhZG9w
dENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERp
cmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCBib3VuZHMs
IERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0aEFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5h
dHVyYWwsIE5PLCBZRVMpKTsKKworICAgICAgICBtX3NlcnZpY2VzT3ZlcmxheS0+c2V0TmVlZHNE
aXNwbGF5KCk7CisgICAgfQorfQorCiBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Om1v
dXNlRXZlbnQoUGFnZU92ZXJsYXkqLCBjb25zdCBXZWJNb3VzZUV2ZW50JiBldmVudCkKIHsKICAg
ICBtX21vdXNlUG9zaXRpb24gPSBtX3dlYlBhZ2UtPmNvcmVQYWdlKCktPm1haW5GcmFtZSgpLnZp
ZXcoKS0+cm9vdFZpZXdUb0NvbnRlbnRzKGV2ZW50LnBvc2l0aW9uKCkpOwogCi0gICAgYm9vbCBt
b3VzZVdhc092ZXJIaWdobGlnaHQgPSBtX21vdXNlSXNPdmVySGlnaGxpZ2h0OworICAgIERESGln
aGxpZ2h0UmVmIG9sZEhvdmVyZWRIaWdobGlnaHQgPSBtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0
LmdldCgpOworCiAgICAgQm9vbGVhbiBvbkJ1dHRvbiA9IGZhbHNlOwotICAgIG1fbW91c2VJc092
ZXJIaWdobGlnaHQgPSBtX2N1cnJlbnRIaWdobGlnaHQgPyBEREhpZ2hsaWdodFBvaW50SXNPbkhp
Z2hsaWdodChtX2N1cnJlbnRIaWdobGlnaHQuZ2V0KCksIChDR1BvaW50KW1fbW91c2VQb3NpdGlv
biwgJm9uQnV0dG9uKSA6IGZhbHNlOworICAgIGVzdGFibGlzaEhvdmVyZWRUZWxlcGhvbmVIaWdo
bGlnaHQob25CdXR0b24pOworICAgIGlmIChtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhKSB7
CisgICAgICAgIEFTU0VSVChtX2hvdmVyZWRUZWxlcGhvbmVOdW1iZXJEYXRhLT5oaWdobGlnaHQp
OworICAgICAgICBtX2N1cnJlbnRIb3ZlcmVkSGlnaGxpZ2h0ID0gbV9ob3ZlcmVkVGVsZXBob25l
TnVtYmVyRGF0YS0+aGlnaGxpZ2h0OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9zZWxl
Y3Rpb25IaWdobGlnaHQpCisgICAgICAgICAgICBtYXliZUNyZWF0ZVNlbGVjdGlvbkhpZ2hsaWdo
dCgpOwogCi0gICAgaWYgKG1vdXNlV2FzT3ZlckhpZ2hsaWdodCAhPSBtX21vdXNlSXNPdmVySGln
aGxpZ2h0KQorICAgICAgICBpZiAobV9zZWxlY3Rpb25IaWdobGlnaHQgJiYgRERIaWdobGlnaHRQ
b2ludElzT25IaWdobGlnaHQobV9zZWxlY3Rpb25IaWdobGlnaHQuZ2V0KCksIChDR1BvaW50KW1f
bW91c2VQb3NpdGlvbiwgJm9uQnV0dG9uKSkKKyAgICAgICAgICAgIG1fY3VycmVudEhvdmVyZWRI
aWdobGlnaHQgPSBtX3NlbGVjdGlvbkhpZ2hsaWdodDsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9jdXJyZW50SG92ZXJlZEhpZ2hsaWdodCA9IG51bGxwdHI7CisgICAgfQorCisgICAgaWYg
KG9sZEhvdmVyZWRIaWdobGlnaHQgIT0gbV9jdXJyZW50SG92ZXJlZEhpZ2hsaWdodCkKICAgICAg
ICAgbV9zZXJ2aWNlc092ZXJsYXktPnNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgLy8gSWYgdGhp
cyBldmVudCBoYXMgbm90aGluZyB0byBkbyB3aXRoIHRoZSBsZWZ0IGJ1dHRvbiwgaXQgY2xlYXJz
IHRoZSBjdXJyZW50IG1vdXNlIGRvd24gdHJhY2tpbmcgYW5kIHdlJ3JlIGRvbmUgcHJvY2Vzc2lu
ZyBpdC4KICAgICBpZiAoZXZlbnQuYnV0dG9uKCkgIT0gV2ViTW91c2VFdmVudDo6TGVmdEJ1dHRv
bikgewotICAgICAgICBtX21vdXNlSXNEb3duT25CdXR0b24gPSBmYWxzZTsKKyAgICAgICAgbV9j
dXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBudWxscHRyOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKCFtX2N1cnJlbnRIaWdobGlnaHQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQogICAgIC8vIENoZWNrIGFuZCBzZWUgaWYgdGhlIG1vdXNlIHdlbnQg
dXAgYW5kIHdlIGhhdmUgYSBjdXJyZW50IG1vdXNlIGRvd24gaGlnaGxpZ2h0IGJ1dHRvbi4KICAg
ICBpZiAoZXZlbnQudHlwZSgpID09IFdlYkV2ZW50OjpNb3VzZVVwKSB7Ci0gICAgICAgIGJvb2wg
bW91c2VXYXNEb3duT25CdXR0b24gPSBtX21vdXNlSXNEb3duT25CdXR0b247Ci0gICAgICAgIG1f
bW91c2VJc0Rvd25PbkJ1dHRvbiA9IGZhbHNlOworICAgICAgICBSZXRhaW5QdHI8RERIaWdobGln
aHRSZWY+IG1vdXNlRG93bkhpZ2hsaWdodCA9IHN0ZDo6bW92ZShtX2N1cnJlbnRNb3VzZURvd25P
bkJ1dHRvbkhpZ2hsaWdodCk7CiAKICAgICAgICAgLy8gSWYgdGhlIG1vdXNlIGxpZnRlZCB3aGls
ZSBzdGlsbCBvdmVyIHRoZSBoaWdobGlnaHQgYnV0dG9uIHRoYXQgaXQgd2VudCBkb3duIG9uLCB0
aGVuIHRoYXQgaXMgYSBjbGljay4KLSAgICAgICAgaWYgKG1fbW91c2VJc092ZXJIaWdobGlnaHQg
JiYgb25CdXR0b24gJiYgbW91c2VXYXNEb3duT25CdXR0b24pIHsKLSAgICAgICAgICAgIGhhbmRs
ZUNsaWNrKG1fbW91c2VQb3NpdGlvbik7CisgICAgICAgIGlmIChvbkJ1dHRvbiAmJiBtb3VzZURv
d25IaWdobGlnaHQpIHsKKyAgICAgICAgICAgIGhhbmRsZUNsaWNrKG1fbW91c2VQb3NpdGlvbiwg
bW91c2VEb3duSGlnaGxpZ2h0LmdldCgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAorCiAg
ICAgLy8gQ2hlY2sgYW5kIHNlZSBpZiB0aGUgbW91c2UgbW92ZWQgd2l0aGluIHRoZSBjb25maW5l
cyBvZiB0aGUgREQgaGlnaGxpZ2h0IGJ1dHRvbi4KICAgICBpZiAoZXZlbnQudHlwZSgpID09IFdl
YkV2ZW50OjpNb3VzZU1vdmUpIHsKICAgICAgICAgLy8gTW92aW5nIHdpdGggdGhlIG1vdXNlIGJ1
dHRvbiBkb3duIGlzIG9rYXkgYXMgbG9uZyBhcyB0aGUgbW91c2UgbmV2ZXIgbGVhdmVzIHRoZSBo
aWdobGlnaHQgYnV0dG9uLgotICAgICAgICBpZiAobV9tb3VzZUlzT3ZlckhpZ2hsaWdodCAmJiBv
bkJ1dHRvbikKKyAgICAgICAgaWYgKG1fY3VycmVudE1vdXNlRG93bk9uQnV0dG9uSGlnaGxpZ2h0
ICYmIG9uQnV0dG9uKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgbV9tb3Vz
ZUlzRG93bk9uQnV0dG9uID0gZmFsc2U7Ci0gICAgICAgIAorICAgICAgICBtX2N1cnJlbnRNb3Vz
ZURvd25PbkJ1dHRvbkhpZ2hsaWdodCA9IG51bGxwdHI7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9Ci0gICAgCisKICAgICAvLyBDaGVjayBhbmQgc2VlIGlmIHRoZSBtb3VzZSB3ZW50IGRv
d24gb3ZlciBhIEREIGhpZ2hsaWdodCBidXR0b24uCiAgICAgaWYgKGV2ZW50LnR5cGUoKSA9PSBX
ZWJFdmVudDo6TW91c2VEb3duKSB7Ci0gICAgICAgIGlmIChtX21vdXNlSXNPdmVySGlnaGxpZ2h0
ICYmIG9uQnV0dG9uKSB7Ci0gICAgICAgICAgICBtX21vdXNlSXNEb3duT25CdXR0b24gPSB0cnVl
OworICAgICAgICBpZiAobV9jdXJyZW50SG92ZXJlZEhpZ2hsaWdodCAmJiBvbkJ1dHRvbikgewor
ICAgICAgICAgICAgbV9jdXJyZW50TW91c2VEb3duT25CdXR0b25IaWdobGlnaHQgPSBtX2N1cnJl
bnRIb3ZlcmVkSGlnaGxpZ2h0OwogICAgICAgICAgICAgbV9zZXJ2aWNlc092ZXJsYXktPnNldE5l
ZWRzRGlzcGxheSgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTQz
MCwyNSArNDk5LDI3IEBAIGJvb2wgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6bW91c2VFdmVu
dChQYWdlT3ZlcmxheSosIGNvbnN0IFdlYk1vdXNlRXZlbnQmIGV2CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBjbGlja1BvaW50KQordm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpoYW5kbGVDbGljayhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgY2xpY2tQb2ludCwg
RERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0KQogeworICAgIEFTU0VSVChoaWdobGlnaHQpOworCiAg
ICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtX3dlYlBhZ2UtPm1haW5GcmFtZVZpZXcoKTsKICAg
ICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UG9pbnQgd2luZG93
UG9pbnQgPSBmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3coY2xpY2tQb2ludCk7CiAKLSAgICBp
ZiAobV9kcmF3aW5nVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0KSB7Ci0gICAgICAgIEFTU0VSVCht
X2N1cnJlbnRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuc2l6ZSgpID09IDEpOwotICAgICAgICBtX3dl
YlBhZ2UtPmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKG1fY3VycmVudFRlbGVwaG9uZU51bWJl
clJhbmdlc1swXS0+dGV4dCgpLCB3aW5kb3dQb2ludCk7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAo
aGlnaGxpZ2h0ID09IG1fc2VsZWN0aW9uSGlnaGxpZ2h0KSB7CiAgICAgICAgIFZlY3RvcjxTdHJp
bmc+IHNlbGVjdGVkVGVsZXBob25lTnVtYmVyczsKICAgICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVO
dW1iZXJzLnJlc2VydmVDYXBhY2l0eShtX2N1cnJlbnRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuc2l6
ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IG1fY3VycmVudFRlbGVwaG9uZU51bWJl
clJhbmdlcykKICAgICAgICAgICAgIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycy5hcHBlbmQocmFu
Z2UtPnRleHQoKSk7CiAKICAgICAgICAgbV93ZWJQYWdlLT5oYW5kbGVTZWxlY3Rpb25TZXJ2aWNl
Q2xpY2sobV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS5zZWxlY3Rpb24oKSwgc2Vs
ZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLCB3aW5kb3dQb2ludCk7Ci0gICAgfQorICAgIH0gZWxzZSBp
ZiAobV9ob3ZlcmVkVGVsZXBob25lTnVtYmVyRGF0YSAmJiBtX2hvdmVyZWRUZWxlcGhvbmVOdW1i
ZXJEYXRhLT5oaWdobGlnaHQgPT0gaGlnaGxpZ2h0KQorICAgICAgICBtX3dlYlBhZ2UtPmhhbmRs
ZVRlbGVwaG9uZU51bWJlckNsaWNrKG1faG92ZXJlZFRlbGVwaG9uZU51bWJlckRhdGEtPnJhbmdl
LT50ZXh0KCksIHdpbmRvd1BvaW50KTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="259215"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>