<?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>134568</bug_id>
          
          <creation_ts>2014-07-02 15:41:50 -0700</creation_ts>
          <short_desc>Selection rects sent to ServicesOverlayController are wrong</short_desc>
          <delta_ts>2014-07-03 12:17:00 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</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>darin</cc>
    
    <cc>rniwa</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1020079</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-02 15:41:50 -0700</bug_when>
    <thetext>Selection rects sent to ServicesOverlayController are wrong

&lt;rdar://problem/16727796&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020081</commentid>
    <comment_count>1</comment_count>
      <attachid>234290</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-02 15:52:27 -0700</bug_when>
    <thetext>Created attachment 234290
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020086</commentid>
    <comment_count>2</comment_count>
      <attachid>234290</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-07-02 16:03:26 -0700</bug_when>
    <thetext>Comment on attachment 234290
Patch v1

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

WebKit2 part is fine, but you&apos;re going to need rniwa/enrica/darin review for the other part.

&gt; Source/WebCore/editing/SelectionRectGatherer.cpp:65
&gt; +    // 1 rect selections need to be extended by the gap rects in both directions.

It seems unfortunate that this code isn&apos;t shared with the painting-time code that does the same thing.

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:55
&gt; +SOFT_LINK(DataDetectors, DDHighlightCreateWithRectsInVisibleRectWithStyleAndDirection, DDHighlightRef, (CFAllocatorRef allocator, CGRect * rects, CFIndex count, CGRect globalVisibleRect, DDHighlightStyle style, Boolean withArrow, NSWritingDirection writingDirection, Boolean endsWithEOL, Boolean flipped), (allocator, rects, count, globalVisibleRect, style, withArrow, writingDirection, endsWithEOL, flipped))

star in &quot;rects&quot; is in the wrong place

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:138
&gt; +    // DataDetectors needs these in the reverse order.

&quot;why&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020145</commentid>
    <comment_count>3</comment_count>
      <attachid>234290</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-07-02 18:39:51 -0700</bug_when>
    <thetext>Comment on attachment 234290
Patch v1

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

&gt; Source/WebCore/editing/SelectionRectGatherer.cpp:84
&gt; +            switch (m_rects.size()) {
&gt; +            case 1:
&gt; +                m_rects[0].shiftXEdgeTo(rects.left().x());
&gt; +                break;
&gt; +            case 2:
&gt; +                m_rects[1].shiftXEdgeTo(rects.left().x());
&gt; +                break;
&gt; +            case 3:
&gt; +                m_rects[1].shiftXEdgeTo(rects.left().x());
&gt; +                m_rects[2].shiftXEdgeTo(rects.left().x());
&gt; +                break;
&gt; +            default:
&gt; +                ASSERT_NOT_REACHED();
&gt; +            }

I don&apos;t see how this code could be right in RTL or vertical writing mode.
Also, it&apos;s not great to communicate three different cases using the number of rects.

&gt; Source/WebCore/editing/SelectionRectGatherer.cpp:119
&gt; +void SelectionRectGatherer::unifyMiddleRects()
&gt; +{
&gt; +    ASSERT(m_rects.size() &gt; 3);
&gt; +
&gt; +    LayoutRect united;
&gt; +    for (unsigned i = 1; i &lt; m_rects.size() - 1; ++i)
&gt; +        united.unite(m_rects[i]);
&gt; +
&gt; +    Vector&lt;LayoutRect&gt; newRects;
&gt; +    newRects.resize(3);
&gt; +    newRects[0] = m_rects[0];
&gt; +    newRects[1] = united;
&gt; +    newRects[2] = m_rects.last();
&gt; +
&gt; +    swap(m_rects, newRects);
&gt; +}

I think it&apos;s better we didn&apos;t split this logic into a separate function, and instead allocated some enum indicating the type
and then three different variables indicating the semantics of each rect instead of swapping m_rect.

&gt; Source/WebCore/editing/SelectionRectGatherer.cpp:135
&gt; +    if (m_rects[1].x() &gt; m_rects[2].x())
&gt; +        m_rects[2].shiftXEdgeTo(m_rects[1].x());
&gt; +    else if (m_rects[1].x() &lt; m_rects[2].x())
&gt; +        m_rects[1].shiftXEdgeTo(m_rects[2].x());
&gt; +
&gt; +    LayoutUnit topRightEdge = m_rects[0].x() + m_rects[0].width();
&gt; +    LayoutUnit middleRightEdge = m_rects[1].x() + m_rects[1].width();
&gt; +    if (topRightEdge &gt; middleRightEdge)
&gt; +        m_rects[1].shiftMaxXEdgeTo(topRightEdge);
&gt; +    else if (topRightEdge &lt; middleRightEdge)
&gt; +        m_rects[0].shiftMaxXEdgeTo(middleRightEdge);

Again, I&apos;m not certain how this logic is going to work in RTL or vertical writing mode.

&gt; Source/WebCore/rendering/RenderObject.cpp:2521
&gt; +    rects.append(selectionRectForRepaint(repaintContainer, clipToVisibleContent));
&gt; +    return rects.last();

Always appending a vector like this for every selection rect is going to be VERY expensive.
We need to have an inline capacity to mitigate that.

&gt; Source/WebCore/rendering/RenderObject.h:802
&gt; +    // Form of selectionRectForRepaint that also preserves the individual rects.
&gt; +    virtual LayoutRect selectionRectsForRepaint(const RenderLayerModelObject* /*repaintContainer*/, bool /*clipToVisibleContent*/, Vector&lt;LayoutRect&gt;&amp; /*rects*/);

I don&apos;t think we should call this selectionRectsForRepaint and have a comment like that.
We should rename the function instead to have a more descriptive name.
e.g. collectSelectionRectsForLineBoxes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020163</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-02 20:25:29 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 234290 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234290&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/SelectionRectGatherer.cpp:84
&gt; &gt; +            switch (m_rects.size()) {
&gt; &gt; +            case 1:
&gt; &gt; +                m_rects[0].shiftXEdgeTo(rects.left().x());
&gt; &gt; +                break;
&gt; &gt; +            case 2:
&gt; &gt; +                m_rects[1].shiftXEdgeTo(rects.left().x());
&gt; &gt; +                break;
&gt; &gt; +            case 3:
&gt; &gt; +                m_rects[1].shiftXEdgeTo(rects.left().x());
&gt; &gt; +                m_rects[2].shiftXEdgeTo(rects.left().x());
&gt; &gt; +                break;
&gt; &gt; +            default:
&gt; &gt; +                ASSERT_NOT_REACHED();
&gt; &gt; +            }
&gt; 
&gt; I don&apos;t see how this code could be right in RTL or vertical writing mode.

Indisputably, the current code is broken in all cases.

I agree it should be fixed for RTL.  After making the enum change you suggest there will be an obvious place to fix in a much smaller followup patch.

I&apos;m not concerned about vertical text because the feature this patches in to doesn&apos;t correctly support vertical text.

&gt; Also, it&apos;s not great to communicate three different cases using the number of rects.
&gt; 
&gt; &gt; Source/WebCore/editing/SelectionRectGatherer.cpp:119
&gt; &gt; +void SelectionRectGatherer::unifyMiddleRects()
&gt; &gt; +{
&gt; &gt; +    ASSERT(m_rects.size() &gt; 3);
&gt; &gt; +
&gt; &gt; +    LayoutRect united;
&gt; &gt; +    for (unsigned i = 1; i &lt; m_rects.size() - 1; ++i)
&gt; &gt; +        united.unite(m_rects[i]);
&gt; &gt; +
&gt; &gt; +    Vector&lt;LayoutRect&gt; newRects;
&gt; &gt; +    newRects.resize(3);
&gt; &gt; +    newRects[0] = m_rects[0];
&gt; &gt; +    newRects[1] = united;
&gt; &gt; +    newRects[2] = m_rects.last();
&gt; &gt; +
&gt; &gt; +    swap(m_rects, newRects);
&gt; &gt; +}
&gt; 
&gt; I think it&apos;s better we didn&apos;t split this logic into a separate function, and instead allocated some enum indicating the type
&gt; and then three different variables indicating the semantics of each rect instead of swapping m_rect.

I thought it read better to split into named functions that are explicit about what&apos;s being done, but I can also see the case for tighter binding with it all inline.  I will change that.

&gt; 
&gt; &gt; Source/WebCore/editing/SelectionRectGatherer.cpp:135
&gt; &gt; +    if (m_rects[1].x() &gt; m_rects[2].x())
&gt; &gt; +        m_rects[2].shiftXEdgeTo(m_rects[1].x());
&gt; &gt; +    else if (m_rects[1].x() &lt; m_rects[2].x())
&gt; &gt; +        m_rects[1].shiftXEdgeTo(m_rects[2].x());
&gt; &gt; +
&gt; &gt; +    LayoutUnit topRightEdge = m_rects[0].x() + m_rects[0].width();
&gt; &gt; +    LayoutUnit middleRightEdge = m_rects[1].x() + m_rects[1].width();
&gt; &gt; +    if (topRightEdge &gt; middleRightEdge)
&gt; &gt; +        m_rects[1].shiftMaxXEdgeTo(topRightEdge);
&gt; &gt; +    else if (topRightEdge &lt; middleRightEdge)
&gt; &gt; +        m_rects[0].shiftMaxXEdgeTo(middleRightEdge);
&gt; 
&gt; Again, I&apos;m not certain how this logic is going to work in RTL or vertical writing mode.

Same reply as above re: RTL and vertical.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderObject.h:802
&gt; &gt; +    // Form of selectionRectForRepaint that also preserves the individual rects.
&gt; &gt; +    virtual LayoutRect selectionRectsForRepaint(const RenderLayerModelObject* /*repaintContainer*/, bool /*clipToVisibleContent*/, Vector&lt;LayoutRect&gt;&amp; /*rects*/);
&gt; 
&gt; I don&apos;t think we should call this selectionRectsForRepaint and have a comment like that.
&gt; We should rename the function instead to have a more descriptive name.
&gt; e.g. collectSelectionRectsForLineBoxes.

If this has to go on RenderObject, I&apos;m not sure the name should be so tightly bound to RenderText concepts.

Alternately the one place where it&apos;s used in RenderSelectionInfo can do an &quot;isText()&quot; check on the object and call collectSelectionRectsForLineBoxes from there.

That way...

&gt; &gt; Source/WebCore/rendering/RenderObject.cpp:2521
&gt; &gt; +    rects.append(selectionRectForRepaint(repaintContainer, clipToVisibleContent));
&gt; &gt; +    return rects.last();
&gt; 
&gt; Always appending a vector like this for every selection rect is going to be VERY expensive.
&gt; We need to have an inline capacity to mitigate that.

... we don&apos;t need this at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020164</commentid>
    <comment_count>5</comment_count>
      <attachid>234290</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-07-02 20:29:47 -0700</bug_when>
    <thetext>Comment on attachment 234290
Patch v1

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderObject.h:802
&gt;&gt;&gt; +    virtual LayoutRect selectionRectsForRepaint(const RenderLayerModelObject* /*repaintContainer*/, bool /*clipToVisibleContent*/, Vector&lt;LayoutRect&gt;&amp; /*rects*/);
&gt;&gt; 
&gt;&gt; I don&apos;t think we should call this selectionRectsForRepaint and have a comment like that.
&gt;&gt; We should rename the function instead to have a more descriptive name.
&gt;&gt; e.g. collectSelectionRectsForLineBoxes.
&gt; 
&gt; If this has to go on RenderObject, I&apos;m not sure the name should be so tightly bound to RenderText concepts.
&gt; 
&gt; Alternately the one place where it&apos;s used in RenderSelectionInfo can do an &quot;isText()&quot; check on the object and call collectSelectionRectsForLineBoxes from there.
&gt; 
&gt; That way...

I like that approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020165</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-07-02 20:30:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 234290 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234290&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/editing/SelectionRectGatherer.cpp:84
&gt; &gt; &gt; +            switch (m_rects.size()) {
&gt; &gt; &gt; +            case 1:
&gt; &gt; &gt; +                m_rects[0].shiftXEdgeTo(rects.left().x());
&gt; &gt; &gt; +                break;
&gt; &gt; &gt; +            case 2:
&gt; &gt; &gt; +                m_rects[1].shiftXEdgeTo(rects.left().x());
&gt; &gt; &gt; +                break;
&gt; &gt; &gt; +            case 3:
&gt; &gt; &gt; +                m_rects[1].shiftXEdgeTo(rects.left().x());
&gt; &gt; &gt; +                m_rects[2].shiftXEdgeTo(rects.left().x());
&gt; &gt; &gt; +                break;
&gt; &gt; &gt; +            default:
&gt; &gt; &gt; +                ASSERT_NOT_REACHED();
&gt; &gt; &gt; +            }
&gt; &gt; 
&gt; &gt; I don&apos;t see how this code could be right in RTL or vertical writing mode.
&gt; 
&gt; Indisputably, the current code is broken in all cases.
&gt; 
&gt; I agree it should be fixed for RTL.  After making the enum change you suggest there will be an obvious place to fix in a much smaller followup patch.
&gt; 
&gt; I&apos;m not concerned about vertical text because the feature this patches in to doesn&apos;t correctly support vertical text.

That would be (more) fine if this code weren&apos;t super generic WebCore code that someone else might come along and use. But since it is, the fact that it&apos;s broken for an non-default writing modes is probably not great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020182</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-02 21:37:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 234290 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234290&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/editing/SelectionRectGatherer.cpp:84
&gt; &gt; &gt; &gt; +            switch (m_rects.size()) {
&gt; &gt; &gt; &gt; +            case 1:
&gt; &gt; &gt; &gt; +                m_rects[0].shiftXEdgeTo(rects.left().x());
&gt; &gt; &gt; &gt; +                break;
&gt; &gt; &gt; &gt; +            case 2:
&gt; &gt; &gt; &gt; +                m_rects[1].shiftXEdgeTo(rects.left().x());
&gt; &gt; &gt; &gt; +                break;
&gt; &gt; &gt; &gt; +            case 3:
&gt; &gt; &gt; &gt; +                m_rects[1].shiftXEdgeTo(rects.left().x());
&gt; &gt; &gt; &gt; +                m_rects[2].shiftXEdgeTo(rects.left().x());
&gt; &gt; &gt; &gt; +                break;
&gt; &gt; &gt; &gt; +            default:
&gt; &gt; &gt; &gt; +                ASSERT_NOT_REACHED();
&gt; &gt; &gt; &gt; +            }
&gt; &gt; &gt; 
&gt; &gt; &gt; I don&apos;t see how this code could be right in RTL or vertical writing mode.
&gt; &gt; 
&gt; &gt; Indisputably, the current code is broken in all cases.
&gt; &gt; 
&gt; &gt; I agree it should be fixed for RTL.  After making the enum change you suggest there will be an obvious place to fix in a much smaller followup patch.
&gt; &gt; 
&gt; &gt; I&apos;m not concerned about vertical text because the feature this patches in to doesn&apos;t correctly support vertical text.
&gt; 
&gt; That would be (more) fine if this code weren&apos;t super generic WebCore code that someone else might come along and use. But since it is, the fact that it&apos;s broken for an non-default writing modes is probably not great.

If you feel strongly about this concern, then the super generic WebCore code could be moved to WK2 close to the feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020185</commentid>
    <comment_count>8</comment_count>
      <attachid>234317</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-02 22:35:36 -0700</bug_when>
    <thetext>Created attachment 234317
Patch v2 - Addressing both Ryosuke&apos;s and Tim&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020296</commentid>
    <comment_count>9</comment_count>
      <attachid>234317</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-03 10:33:16 -0700</bug_when>
    <thetext>Comment on attachment 234317
Patch v2 - Addressing both Ryosuke&apos;s and Tim&apos;s feedback

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

&gt; Source/WebCore/rendering/RenderTextLineBoxes.cpp:500
&gt; +    for (auto box = m_first; box; box = box-&gt;nextTextBox()) {

I like to use auto* in cases like this to emphasize the fact that it’s a pointer. But auto is also OK.

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:139
&gt; +    LayoutUnit leftEdge, rightEdge;
&gt; +    bool hasLeftEdge = false, hasRightEdge = false;

Separate lines please. Also not sure we need these booleans. Could just nest the code a bit and we wouldn’t need the locals.

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:147
&gt; +        rightEdge = gap.right().x() + gap.right().width();

Should be:

    rightEdge = gap.right().maxX();

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:178
&gt; +        rects.resize(3);

Can use shrink here instead of resize; slightly more efficient.

&gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:204
&gt; +        LayoutRect left, right;

Separate lines please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020297</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-03 10:34:08 -0700</bug_when>
    <thetext>Does seem important to fix RTL later; probably not all that hard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020302</commentid>
    <comment_count>11</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-03 10:45:23 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 234317 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=234317&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTextLineBoxes.cpp:500
&gt; &gt; +    for (auto box = m_first; box; box = box-&gt;nextTextBox()) {
&gt; 
&gt; I like to use auto* in cases like this to emphasize the fact that it’s a pointer. But auto is also OK.

I&apos;m kinda with you on this, but this file has 15 occurrences of &quot;for (auto box = m_first; box; box = box-&gt;nextTextBox())&quot; and the OCD in me won&apos;t let me change just this one.  =/

&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:139
&gt; &gt; +    LayoutUnit leftEdge, rightEdge;
&gt; &gt; +    bool hasLeftEdge = false, hasRightEdge = false;
&gt; 
&gt; Separate lines please. Also not sure we need these booleans. Could just nest the code a bit and we wouldn’t need the locals.

Okay!

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:147
&gt; &gt; +        rightEdge = gap.right().x() + gap.right().width();
&gt; 
&gt; Should be:
&gt; 
&gt;     rightEdge = gap.right().maxX();

Damn, that&apos;s much better!

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:178
&gt; &gt; +        rects.resize(3);
&gt; 
&gt; Can use shrink here instead of resize; slightly more efficient.

Just looked at Vector.h to find out what you mean.  Sounds good!

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/mac/ServicesOverlayController.mm:204
&gt; &gt; +        LayoutRect left, right;
&gt; 
&gt; Separate lines please.

Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020310</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-03 10:57:22 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/170758</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020315</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-03 11:00:56 -0700</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=134604 to followup on RTL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020332</commentid>
    <comment_count>14</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2014-07-03 12:17:00 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/170760 followup</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234290</attachid>
            <date>2014-07-02 15:52:27 -0700</date>
            <delta_ts>2014-07-02 22:35:36 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>21604</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3OWEyNWVhLi5kYTQ4MDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIg
QEAKKzIwMTQtMDctMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIFNlbGVjdGlvbiByZWN0cyBzZW50IHRvIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgYXJl
IHdyb25nLgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTY3Mjc3OTY+IGFuZCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NTY4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKworICAgICAg
ICBUaGUgU2VsZWN0aW9uUmVjdEdhdGhlcmVyIHNob3VsZCBrZWVwIEdhcFJlY3RzIHNlcGFyYXRl
IGZyb20gdGhlIExheW91dFJlY3RzLgorICAgICAgICBXaGVuIGl0cyB0aW1lIHRvIHNoaXAgdGhl
IExheW91dFJlY3RzIG9mZiB0byB0aGUgY2xpZW50IGl0IHNob3VsZCBjb25zb2xpZGF0ZSB0aGUK
KyAgICAgICAgTGF5b3V0UmVjdCB2ZWN0b3IgYW5kIGFwcGx5IHRoZSBHYXBSZWN0cyBhcyBhcHBy
b3ByaWF0ZToKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmFkZFJlY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvblJlY3RHYXRoZXJlcjo6Y29tcGFjdFJlY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvblJlY3RHYXRoZXJlcjo6dW5pZnlNaWRkbGVSZWN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmFsaWduUmVjdEVkZ2VzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblJlY3RHYXRoZXJlcjo6Tm90aWZpZXI6On5Ob3Rp
Zmllcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmNsZWFyQW5k
Q3JlYXRlTm90aWZpZXIpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVy
Lmg6CisKKyAgICAgICAgQ2hhbmdlIFJlbmRlclNlbGVjdGlvbkluZm8gdG8gYWxzbyBoYW5nIG9u
IHRvIHRoZSBpbmRpdmlkdWFsIHJlY3RzIHRoYXQgZm9ybWVkIHRoZSAKKyAgICAgICAgZmluYWwg
Ym91bmRpbmcgcmVjdDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5mby5o
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VsZWN0aW9uSW5mbzo6UmVuZGVyU2VsZWN0aW9u
SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0cyk6CisK
KyAgICAgICAgQWRkIGEgZm9ybSBvZiBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludCB0aGF0IGFsc28g
cHJlc2VydmVzIHRoZSBpbmRpdmlkdWFsIHJlY3RzIHRoYXQgCisgICAgICAgIGZvcm1lZCB0aGUg
ZmluYWwgYm91bmRpbmcgcmVjdDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2VsZWN0aW9uUmVjdHNGb3JSZXBh
aW50KTogRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBqdXN0IHJlbGllcworICAgICAgICAgIG9uIHNl
bGVjdGlvblJlY3RGb3JSZXBhaW50LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aDoKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3RzRm9yUmVwYWludCk6IFRoaXMgaXMgdGhlIGlu
dGVyZXN0aW5nIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgdGhhdCBwcmVzZXJ2ZXMgdGhlIGxp
c3Qgb2YgcmVjdHMgZnJvbSB0aGUgbGluZSBib3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oOgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2VsZWN0aW9uUmVjdHNG
b3JSYW5nZSk6IEFkZGVkLiBMaWtlIHNlbGVjdGlvblJlY3RGb3JSYW5nZQorICAgICAgICAgIGJ1
dCBwcmVzZXJ2ZXMgdGhlIGluZGl2aWR1YWwgcmVjdHMgdGhhdCBmb3JtIHRoZSBmaW5hbCBib3Vu
ZGluZyByZWN0LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmg6CisK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJWaWV3OjpzZXRTdWJ0cmVlU2VsZWN0aW9uKTogQWRkIHRoZSBsaXN0IG9mIHJlY3RzIHRv
IHRoZSBnYXRoZXJlciBpbnN0ZWFkCisgICAgICAgICAgb2YgdGhlIGJvdW5kaW5nIHJlY3QuCisK
IDIwMTQtMDctMDIgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICA8aHR0
cHM6Ly93ZWJraXQub3JnL2IvMTM0NTIxPiBpT1Mgc2hvdWxkIHVzZSBzaGFyZWQgY29kZSB0byBk
ZXRlcm1pbmUgdGhlIHN5c3RlbSBtYXJrZXRpbmcgdmVyc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpp
bmRleCBkMDdkMjgxLi5lNmFlNTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgpAQCAtNzgsNiArNzgs
NyBAQCBfX1pON1dlYkNvcmUxMEZsb2F0UG9pbnRDMUVSS05TXzhJbnRQb2ludEUKIF9fWk43V2Vi
Q29yZTEwRm9udEdseXBoczE1cmVsZWFzZUZvbnREYXRhRXYKIF9fWk43V2ViQ29yZTEwSlNEb2N1
bWVudDZzX2luZm9FCiBfX1pON1dlYkNvcmUxMExheW91dFJlY3Q1c2NhbGVFZgorX19aTjdXZWJD
b3JlMTBMYXlvdXRSZWN0NXVuaXRlRVJLUzBfCiBfX1pON1dlYkNvcmUxMExheW91dFJlY3RDMUVS
S05TXzlGbG9hdFJlY3RFCiBfX1pON1dlYkNvcmUxME1vdXNlRXZlbnQ2Y3JlYXRlRVJLTjNXVEYx
MkF0b21pY1N0cmluZ0VOUzFfMTBQYXNzUmVmUHRySU5TXzlET01XaW5kb3dFRUVSS05TXzE4UGxh
dGZvcm1Nb3VzZUV2ZW50RWlOUzVfSU5TXzROb2RlRUVFCiBfX1pON1dlYkNvcmUxMFBhc3RlYm9h
cmQxNHdyaXRlUGxhaW5UZXh0RVJLTjNXVEY2U3RyaW5nRU5TMF8xOFNtYXJ0UmVwbGFjZU9wdGlv
bkUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhl
cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNw
cAppbmRleCBjNDg4NmRhLi5kMWRmNjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZWxlY3Rpb25SZWN0R2F0aGVyZXIuY3BwCkBAIC00OCwxMiArNDgsOTEgQEAgdm9pZCBTZWxl
Y3Rpb25SZWN0R2F0aGVyZXI6OmFkZFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkKIAogdm9p
ZCBTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmFkZFJlY3RzKGNvbnN0IEdhcFJlY3RzJiByZWN0cykK
IHsKLSAgICBpZiAoIXJlY3RzLmxlZnQoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1fcmVjdHMuYXBw
ZW5kKHJlY3RzLmxlZnQoKSk7Ci0gICAgaWYgKCFyZWN0cy5yaWdodCgpLmlzRW1wdHkoKSkKLSAg
ICAgICAgbV9yZWN0cy5hcHBlbmQocmVjdHMucmlnaHQoKSk7Ci0gICAgaWYgKCFyZWN0cy5jZW50
ZXIoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1fcmVjdHMuYXBwZW5kKHJlY3RzLmNlbnRlcigpKTsK
KyAgICBtX2dhcFJlY3RzLmFwcGVuZChyZWN0cyk7Cit9CisKK3ZvaWQgU2VsZWN0aW9uUmVjdEdh
dGhlcmVyOjpjb21wYWN0UmVjdHMoKQoreworICAgIGlmIChtX3JlY3RzLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKG1fcmVjdHMuc2l6ZSgpID4gMykKKyAgICAgICAgdW5p
ZnlNaWRkbGVSZWN0cygpOworCisgICAgaWYgKG1fcmVjdHMuc2l6ZSgpID09IDMpCisgICAgICAg
IGFsaWduUmVjdEVkZ2VzKCk7CisKKyAgICAvLyAxIHJlY3Qgc2VsZWN0aW9ucyBuZWVkIHRvIGJl
IGV4dGVuZGVkIGJ5IHRoZSBnYXAgcmVjdHMgaW4gYm90aCBkaXJlY3Rpb25zLgorICAgIC8vIDIg
cmVjdCBzZWxlY3Rpb25zIG5lZWQgdG8gaGF2ZSB0aGUgZmlyc3QgcmVjdCBleHRlbmRlZCByaWdo
dCBhbmQgdGhlIGxhc3QgZXh0ZW5kZWQgbGVmdC4KKyAgICAvLyAzIHJlY3Qgc2VsZWN0aW9ucyBu
ZWVkIHRvIGhhdmUgdGhlIGZpcnN0IHJlY3QgZXh0ZW5kZWQgcmlnaHQsIHRoZSBsYXN0IGV4dGVu
ZGVkIGxlZnQsCisgICAgLy8gYW5kIHRoZSBtaWRkbGUgZXh0ZW5kZWQgaW4gYm90aCBkaXJlY3Rp
b25zLgorICAgIGZvciAoYXV0byYgcmVjdHMgOiBtX2dhcFJlY3RzKSB7CisgICAgICAgIGlmICgh
cmVjdHMubGVmdCgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgc3dpdGNoIChtX3JlY3RzLnNp
emUoKSkgeworICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG1fcmVjdHNbMF0u
c2hpZnRYRWRnZVRvKHJlY3RzLmxlZnQoKS54KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIG1fcmVjdHNbMV0uc2hpZnRYRWRn
ZVRvKHJlY3RzLmxlZnQoKS54KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIG1fcmVjdHNbMV0uc2hpZnRYRWRnZVRvKHJlY3Rz
LmxlZnQoKS54KCkpOworICAgICAgICAgICAgICAgIG1fcmVjdHNbMl0uc2hpZnRYRWRnZVRvKHJl
Y3RzLmxlZnQoKS54KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIXJlY3RzLnJpZ2h0KCkuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBMYXlvdXRVbml0IG1heFhFZGdlID0gcmVjdHMucmlnaHQoKS54KCkgKyByZWN0
cy5yaWdodCgpLndpZHRoKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1fcmVjdHMuc2l6ZSgpKSB7
CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAg
ICAgbV9yZWN0c1swXS5zaGlmdE1heFhFZGdlVG8obWF4WEVkZ2UpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgICAgIG1fcmVjdHNbMF0u
c2hpZnRNYXhYRWRnZVRvKG1heFhFZGdlKTsKKyAgICAgICAgICAgICAgICBtX3JlY3RzWzFdLnNo
aWZ0TWF4WEVkZ2VUbyhtYXhYRWRnZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFNlbGVjdGlvblJlY3RHYXRo
ZXJlcjo6dW5pZnlNaWRkbGVSZWN0cygpCit7CisgICAgQVNTRVJUKG1fcmVjdHMuc2l6ZSgpID4g
Myk7CisKKyAgICBMYXlvdXRSZWN0IHVuaXRlZDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgbV9yZWN0cy5zaXplKCkgLSAxOyArK2kpCisgICAgICAgIHVuaXRlZC51bml0ZShtX3JlY3Rz
W2ldKTsKKworICAgIFZlY3RvcjxMYXlvdXRSZWN0PiBuZXdSZWN0czsKKyAgICBuZXdSZWN0cy5y
ZXNpemUoMyk7CisgICAgbmV3UmVjdHNbMF0gPSBtX3JlY3RzWzBdOworICAgIG5ld1JlY3RzWzFd
ID0gdW5pdGVkOworICAgIG5ld1JlY3RzWzJdID0gbV9yZWN0cy5sYXN0KCk7CisKKyAgICBzd2Fw
KG1fcmVjdHMsIG5ld1JlY3RzKTsKK30KKwordm9pZCBTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmFs
aWduUmVjdEVkZ2VzKCkKK3sKKyAgICBBU1NFUlQobV9yZWN0cy5zaXplKCkgPT0gMyk7CisKKyAg
ICBpZiAobV9yZWN0c1sxXS54KCkgPiBtX3JlY3RzWzJdLngoKSkKKyAgICAgICAgbV9yZWN0c1sy
XS5zaGlmdFhFZGdlVG8obV9yZWN0c1sxXS54KCkpOworICAgIGVsc2UgaWYgKG1fcmVjdHNbMV0u
eCgpIDwgbV9yZWN0c1syXS54KCkpCisgICAgICAgIG1fcmVjdHNbMV0uc2hpZnRYRWRnZVRvKG1f
cmVjdHNbMl0ueCgpKTsKKworICAgIExheW91dFVuaXQgdG9wUmlnaHRFZGdlID0gbV9yZWN0c1sw
XS54KCkgKyBtX3JlY3RzWzBdLndpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBtaWRkbGVSaWdodEVk
Z2UgPSBtX3JlY3RzWzFdLngoKSArIG1fcmVjdHNbMV0ud2lkdGgoKTsKKyAgICBpZiAodG9wUmln
aHRFZGdlID4gbWlkZGxlUmlnaHRFZGdlKQorICAgICAgICBtX3JlY3RzWzFdLnNoaWZ0TWF4WEVk
Z2VUbyh0b3BSaWdodEVkZ2UpOworICAgIGVsc2UgaWYgKHRvcFJpZ2h0RWRnZSA8IG1pZGRsZVJp
Z2h0RWRnZSkKKyAgICAgICAgbV9yZWN0c1swXS5zaGlmdE1heFhFZGdlVG8obWlkZGxlUmlnaHRF
ZGdlKTsKIH0KIAogU2VsZWN0aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcjo6Tm90aWZpZXIoU2Vs
ZWN0aW9uUmVjdEdhdGhlcmVyJiBnYXRoZXJlcikKQEAgLTYzLDEzICsxNDIsMTYgQEAgU2VsZWN0
aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcjo6Tm90aWZpZXIoU2VsZWN0aW9uUmVjdEdhdGhlcmVy
JiBnYXRoZXJlcikKIAogU2VsZWN0aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcjo6fk5vdGlmaWVy
KCkKIHsKLSAgICBpZiAoRWRpdG9yQ2xpZW50KiBjbGllbnQgPSBtX2dhdGhlcmVyLm1fcmVuZGVy
Vmlldy52aWV3KCkuZnJhbWUoKS5lZGl0b3IoKS5jbGllbnQoKSkKKyAgICBpZiAoRWRpdG9yQ2xp
ZW50KiBjbGllbnQgPSBtX2dhdGhlcmVyLm1fcmVuZGVyVmlldy52aWV3KCkuZnJhbWUoKS5lZGl0
b3IoKS5jbGllbnQoKSkgeworICAgICAgICBtX2dhdGhlcmVyLmNvbXBhY3RSZWN0cygpOwogICAg
ICAgICBjbGllbnQtPnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKG1fZ2F0aGVyZXIubV9yZWN0cyk7
CisgICAgfQogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U2VsZWN0aW9uUmVjdEdhdGhlcmVyOjpOb3Rp
Zmllcj4gU2VsZWN0aW9uUmVjdEdhdGhlcmVyOjpjbGVhckFuZENyZWF0ZU5vdGlmaWVyKCkKIHsK
ICAgICBtX3JlY3RzLmNsZWFyKCk7CisgICAgbV9nYXBSZWN0cy5jbGVhcigpOwogCiAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Tm90aWZpZXI+KCp0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5oCmluZGV4IDkwODU3ZDUuLjdhNzgy
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhl
cmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25SZWN0R2F0aGVyZXIu
aApAQCAtNjAsOCArNjAsMTMgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxOb3RpZmll
cj4gY2xlYXJBbmRDcmVhdGVOb3RpZmllcigpOwogICAgIAogcHJpdmF0ZToKKyAgICB2b2lkIGNv
bXBhY3RSZWN0cygpOworICAgIHZvaWQgdW5pZnlNaWRkbGVSZWN0cygpOworICAgIHZvaWQgYWxp
Z25SZWN0RWRnZXMoKTsKKwogICAgIFJlbmRlclZpZXcmIG1fcmVuZGVyVmlldzsKICAgICBWZWN0
b3I8TGF5b3V0UmVjdD4gbV9yZWN0czsKKyAgICBWZWN0b3I8R2FwUmVjdHM+IG1fZ2FwUmVjdHM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCmluZGV4IDcyYmU0MWUuLjNhZWU0MmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0yNTE1LDYgKzI1MTUsMTIgQEAgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlck9iamVjdDo6Y3VycmVudFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50KCkgY29uc3QKICAgICByZXR1cm4gbmFtZWRGbG93RnJhZ21lbnQ7CiB9CiAKK0xheW91
dFJlY3QgUmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25SZWN0c0ZvclJlcGFpbnQoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29u
dGVudCwgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cykKK3sKKyAgICByZWN0cy5hcHBlbmQoc2Vs
ZWN0aW9uUmVjdEZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgY2xpcFRvVmlzaWJsZUNvbnRl
bnQpKTsKKyAgICByZXR1cm4gcmVjdHMubGFzdCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKaW5kZXggMGJjMGI1Ni4uYmI5MTI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaApAQCAtNzk4LDYgKzc5OCw5IEBAIHB1YmxpYzoKICAgICBMYXlvdXRSZWN0IHNl
bGVjdGlvblJlY3QoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIHsgcmV0dXJuIHNl
bGVjdGlvblJlY3RGb3JSZXBhaW50KDAsIGNsaXBUb1Zpc2libGVDb250ZW50KTsgfQogICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIqLywgYm9vbCAvKmNsaXBUb1Zpc2libGVD
b250ZW50Ki8gPSB0cnVlKSB7IHJldHVybiBMYXlvdXRSZWN0KCk7IH0KIAorICAgIC8vIEZvcm0g
b2Ygc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQgdGhhdCBhbHNvIHByZXNlcnZlcyB0aGUgaW5kaXZp
ZHVhbCByZWN0cy4KKyAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdHNGb3JSZXBh
aW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBi
b29sIC8qY2xpcFRvVmlzaWJsZUNvbnRlbnQqLywgVmVjdG9yPExheW91dFJlY3Q+JiAvKnJlY3Rz
Ki8pOworCiAgICAgdmlydHVhbCBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgYm9vbCBoYXNTZWxlY3RlZENoaWxkcmVuKCkgY29uc3QgeyByZXR1
cm4gc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lOyB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZvLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5mby5oCmluZGV4IDY3MzY1YzYuLjExZDYy
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25J
bmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8u
aApAQCAtNjIsNyArNjIsNyBAQCBjbGFzcyBSZW5kZXJTZWxlY3Rpb25JbmZvIDogcHVibGljIFJl
bmRlclNlbGVjdGlvbkluZm9CYXNlIHsKIHB1YmxpYzoKICAgICBSZW5kZXJTZWxlY3Rpb25JbmZv
KFJlbmRlck9iamVjdCogbywgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkKICAgICAgICAgOiBS
ZW5kZXJTZWxlY3Rpb25JbmZvQmFzZShvKQotICAgICAgICAsIG1fcmVjdChvLT5jYW5VcGRhdGVT
ZWxlY3Rpb25PblJvb3RMaW5lQm94ZXMoKSA/IG8tPnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KG1f
cmVwYWludENvbnRhaW5lciwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIDogTGF5b3V0UmVjdCgpKQor
ICAgICAgICAsIG1fcmVjdChvLT5jYW5VcGRhdGVTZWxlY3Rpb25PblJvb3RMaW5lQm94ZXMoKSA/
IG8tPnNlbGVjdGlvblJlY3RzRm9yUmVwYWludChtX3JlcGFpbnRDb250YWluZXIsIGNsaXBUb1Zp
c2libGVDb250ZW50LCBtX3JlY3RzKSA6IExheW91dFJlY3QoKSkKICAgICB7CiAgICAgfQogICAg
IApAQCAtNzEsOSArNzEsMTEgQEAgcHVibGljOgogICAgICAgICBtX29iamVjdC0+cmVwYWludFVz
aW5nQ29udGFpbmVyKG1fcmVwYWludENvbnRhaW5lciwgZW5jbG9zaW5nSW50UmVjdChtX3JlY3Qp
KTsKICAgICB9CiAKKyAgICBjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWN0czsgfQogICAgIExheW91dFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVjdDsgfQogCiBwcml2YXRlOgorICAgIFZlY3RvcjxMYXlvdXRSZWN0PiBtX3JlY3RzOwog
ICAgIExheW91dFJlY3QgbV9yZWN0OyAvLyByZWxhdGl2ZSB0byByZXBhaW50IGNvbnRhaW5lcgog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IGI1ODcxNmMu
LjFiODYxNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTEy
MzcsNyArMTIzNyw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6Y2xpcHBlZE92ZXJmbG93UmVj
dEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjCiAgICAgcmV0dXJuIHJlbmRl
cmVyVG9SZXBhaW50LT5jbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChyZXBhaW50Q29udGFp
bmVyKTsKIH0KIAotTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpzZWxlY3Rpb25SZWN0Rm9yUmVwYWlu
dChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNs
aXBUb1Zpc2libGVDb250ZW50KQorTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpzZWxlY3Rpb25SZWN0
c0ZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCwgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cykK
IHsKICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwogICAgIEFTU0VSVCghc2ltcGxlTGluZUxh
eW91dCgpKTsKQEAgLTEyNjYsMTQgKzEyNjYsMjYgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpz
ZWxlY3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXAK
ICAgICBpZiAoc3RhcnRQb3MgPT0gZW5kUG9zKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwog
Ci0gICAgTGF5b3V0UmVjdCByZWN0ID0gbV9saW5lQm94ZXMuc2VsZWN0aW9uUmVjdEZvclJhbmdl
KHN0YXJ0UG9zLCBlbmRQb3MpOworICAgIG1fbGluZUJveGVzLnNlbGVjdGlvblJlY3RzRm9yUmFu
Z2Uoc3RhcnRQb3MsIGVuZFBvcywgcmVjdHMpOworCisgICAgTGF5b3V0UmVjdCByZXN1bHRSZWN0
OworICAgIGZvciAoYXV0byYgcmVjdCA6IHJlY3RzKSB7CisgICAgICAgIHJlc3VsdFJlY3QudW5p
dGUocmVjdCk7CisgICAgICAgIHJlY3QgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3Qo
cmVjdCksIHJlcGFpbnRDb250YWluZXIpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgfQog
CiAgICAgaWYgKGNsaXBUb1Zpc2libGVDb250ZW50KQotICAgICAgICBjb21wdXRlUmVjdEZvclJl
cGFpbnQocmVwYWludENvbnRhaW5lciwgcmVjdCk7CisgICAgICAgIGNvbXB1dGVSZWN0Rm9yUmVw
YWludChyZXBhaW50Q29udGFpbmVyLCByZXN1bHRSZWN0KTsKICAgICBlbHNlCi0gICAgICAgIHJl
Y3QgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QocmVjdCksIHJlcGFpbnRDb250YWlu
ZXIpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgIHJlc3VsdFJlY3QgPSBsb2NhbFRv
Q29udGFpbmVyUXVhZChGbG9hdFJlY3QocmVzdWx0UmVjdCksIHJlcGFpbnRDb250YWluZXIpLmVu
Y2xvc2luZ0JvdW5kaW5nQm94KCk7CiAKLSAgICByZXR1cm4gcmVjdDsKKyAgICByZXR1cm4gcmVz
dWx0UmVjdDsKK30KKworTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpzZWxlY3Rpb25SZWN0Rm9yUmVw
YWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29s
IGNsaXBUb1Zpc2libGVDb250ZW50KQoreworICAgIFZlY3RvcjxMYXlvdXRSZWN0PiByZWN0czsK
KyAgICByZXR1cm4gc2VsZWN0aW9uUmVjdHNGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIGNs
aXBUb1Zpc2libGVDb250ZW50LCByZWN0cyk7CiB9CiAKIGludCBSZW5kZXJUZXh0OjpjYXJldE1p
bk9mZnNldCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAppbmRleCBi
MTA3OTg5Li43MDA1ZGQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKQEAg
LTEwNyw2ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNhbkJlU2VsZWN0aW9u
TGVhZigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50
ID0gdHJ1ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3Rz
Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50LCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKSBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94
KiwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSAw
KSBvdmVycmlkZTsKIAogICAgIExheW91dFVuaXQgbWFyZ2luTGVmdCgpIGNvbnN0IHsgcmV0dXJu
IG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZSgpLm1hcmdpbkxlZnQoKSwgMCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCAz
YWM2OGE0Li4yYjZlNTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRMaW5lQm94ZXMuY3BwCkBAIC00OTUsNiArNDk1LDE3IEBAIExheW91dFJlY3QgUmVuZGVy
VGV4dExpbmVCb3hlczo6c2VsZWN0aW9uUmVjdEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBlCiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKK3ZvaWQgUmVuZGVyVGV4dExpbmVCb3hlczo6
c2VsZWN0aW9uUmVjdHNGb3JSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBWZWN0
b3I8TGF5b3V0UmVjdD4mIHJlY3RzKQoreworICAgIGZvciAoYXV0byBib3ggPSBtX2ZpcnN0OyBi
b3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgeworICAgICAgICBMYXlvdXRSZWN0IHJlY3Q7
CisgICAgICAgIHJlY3QudW5pdGUoYm94LT5sb2NhbFNlbGVjdGlvblJlY3Qoc3RhcnQsIGVuZCkp
OworICAgICAgICByZWN0LnVuaXRlKGVsbGlwc2lzUmVjdEZvckJveCgqYm94LCBzdGFydCwgZW5k
KSk7CisgICAgICAgIGlmICghcmVjdC5zaXplKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmVj
dHMuYXBwZW5kKHJlY3QpOworICAgIH0KK30KKwogVmVjdG9yPEludFJlY3Q+IFJlbmRlclRleHRM
aW5lQm94ZXM6OmFic29sdXRlUmVjdHMoY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zm
c2V0KSBjb25zdAogewogICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCmluZGV4IGQ4N2M2YjEuLjhjYjFh
YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJv
eGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMu
aApAQCAtNjgsNiArNjgsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRl
KFJlbmRlclRleHQmLCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlKTsKICAgICBMYXlvdXRS
ZWN0IHNlbGVjdGlvblJlY3RGb3JSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsK
KyAgICB2b2lkIHNlbGVjdGlvblJlY3RzRm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCwgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cyk7CiAKICAgICBJbnRSZWN0IGJvdW5kaW5n
Qm94KGNvbnN0IFJlbmRlclRleHQmKSBjb25zdDsKICAgICBJbnRQb2ludCBmaXJzdFJ1bkxvY2F0
aW9uKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5kZXgg
MjZkNTJkMC4uZjdlNmU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cApAQCAtOTkyLDcgKzk5Miw4IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U3VidHJlZVNlbGVjdGlv
bihTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwgUmVuZGVyT2JqZWN0KiBzCiAgICAgICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4gc2VsZWN0aW9uSW5mbyA9IHN0
ZDo6bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4obywgdHJ1ZSk7CiAKICNpZiBFTkFC
TEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVy
LmFkZFJlY3Qoc2VsZWN0aW9uSW5mby0+cmVjdCgpKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
cmVjdCA6IHNlbGVjdGlvbkluZm8tPnJlY3RzKCkpCisgICAgICAgICAgICAgICAgbV9zZWxlY3Rp
b25SZWN0R2F0aGVyZXIuYWRkUmVjdChyZWN0KTsKICNlbmRpZgogCiAgICAgICAgICAgICBuZXdT
ZWxlY3RlZE9iamVjdHMuc2V0KG8sIHN0ZDo6bW92ZShzZWxlY3Rpb25JbmZvKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggMDhkODY5Ni4uNGZkZDNmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE0
LTA3LTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBTZWxl
Y3Rpb24gcmVjdHMgc2VudCB0byBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIGFyZSB3cm9uZy4K
KyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE2NzI3Nzk2PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDU2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyLm1tOgorICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpzZWxlY3Rpb25SZWN0c0RpZENoYW5nZSk6IFJldmVyc2UgdGhlIGxpc3Qgb2YgcmVj
dHMuCisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdTZWxl
Y3Rpb25IaWdobGlnaHQpOiBUZWxsIGRhdGEgZGV0ZWN0b3JzIHRvIGZsaXAgdGhpcy4KKyAgICAg
ICAgKFdlYktpdDo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1RlbGVwaG9uZU51bWJl
ckhpZ2hsaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpkcmF3Q3VycmVudEhpZ2hsaWdodCk6IE5vIG5lZWQgdG8gZmxpcCB0aGlzIGFueW1v
cmUuCisKIDIwMTQtMDctMDIgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAg
ICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM0NTIxPiBpT1Mgc2hvdWxkIHVzZSBzaGFyZWQgY29k
ZSB0byBkZXRlcm1pbmUgdGhlIHN5c3RlbSBtYXJrZXRpbmcgdmVyc2lvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IDZmYjI2ZDEuLjc4NjQwOWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Nl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAgLTQ5LDEwICs0OSwxMCBAQCB0eXBlZGVmIHZv
aWQqIERESGlnaGxpZ2h0UmVmOwogCiB0eXBlZGVmIE5TVUludGVnZXIgRERIaWdobGlnaHRTdHls
ZTsKIHN0YXRpYyBjb25zdCBEREhpZ2hsaWdodFN0eWxlIERESGlnaGxpZ2h0Tm9PdXRsaW5lV2l0
aEFycm93ID0gKDEgPDwgMTYpOworc3RhdGljIGNvbnN0IERESGlnaGxpZ2h0U3R5bGUgRERIaWdo
bGlnaHRPdXRsaW5lV2l0aEFycm93ID0gKDEgPDwgMTYpIHwgMTsKIAogU09GVF9MSU5LX1BSSVZB
VEVfRlJBTUVXT1JLX09QVElPTkFMKERhdGFEZXRlY3RvcnMpCi1TT0ZUX0xJTksoRGF0YURldGVj
dG9ycywgRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0LCBEREhpZ2hsaWdo
dFJlZiwgKENGQWxsb2NhdG9yUmVmIGFsbG9jYXRvciwgQ0dSZWN0ICogcmVjdHMsIENGSW5kZXgg
Y291bnQsIENHUmVjdCBnbG9iYWxWaXNpYmxlUmVjdCwgQm9vbGVhbiB3aXRoQXJyb3cpLCAoYWxs
b2NhdG9yLCByZWN0cywgY291bnQsIGdsb2JhbFZpc2libGVSZWN0LCB3aXRoQXJyb3cpKQotU09G
VF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxl
UmVjdFdpdGhTdHlsZSwgRERIaWdobGlnaHRSZWYsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3Is
IENHUmVjdCAqIHJlY3RzLCBDRkluZGV4IGNvdW50LCBDR1JlY3QgZ2xvYmFsVmlzaWJsZVJlY3Qs
IERESGlnaGxpZ2h0U3R5bGUgc3R5bGUsIEJvb2xlYW4gd2l0aEFycm93KSwgKGFsbG9jYXRvciwg
cmVjdHMsIGNvdW50LCBnbG9iYWxWaXNpYmxlUmVjdCwgc3R5bGUsIHdpdGhBcnJvdykpCitTT0ZU
X0xJTksoRGF0YURldGVjdG9ycywgRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVS
ZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uLCBEREhpZ2hsaWdodFJlZiwgKENGQWxsb2NhdG9yUmVm
IGFsbG9jYXRvciwgQ0dSZWN0ICogcmVjdHMsIENGSW5kZXggY291bnQsIENHUmVjdCBnbG9iYWxW
aXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZSBzdHlsZSwgQm9vbGVhbiB3aXRoQXJyb3csIE5T
V3JpdGluZ0RpcmVjdGlvbiB3cml0aW5nRGlyZWN0aW9uLCBCb29sZWFuIGVuZHNXaXRoRU9MLCBC
b29sZWFuIGZsaXBwZWQpLCAoYWxsb2NhdG9yLCByZWN0cywgY291bnQsIGdsb2JhbFZpc2libGVS
ZWN0LCBzdHlsZSwgd2l0aEFycm93LCB3cml0aW5nRGlyZWN0aW9uLCBlbmRzV2l0aEVPTCwgZmxp
cHBlZCkpCiBTT0ZUX0xJTksoRGF0YURldGVjdG9ycywgRERIaWdobGlnaHRHZXRMYXllcldpdGhD
b250ZXh0LCBDR0xheWVyUmVmLCAoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0LCBDR0NvbnRleHRS
ZWYgY29udGV4dCksIChoaWdobGlnaHQsIGNvbnRleHQpKQogU09GVF9MSU5LKERhdGFEZXRlY3Rv
cnMsIERESGlnaGxpZ2h0R2V0Qm91bmRpbmdSZWN0LCBDR1JlY3QsIChEREhpZ2hsaWdodFJlZiBo
aWdobGlnaHQpLCAoaGlnaGxpZ2h0KSkKIFNPRlRfTElOSyhEYXRhRGV0ZWN0b3JzLCBEREhpZ2hs
aWdodFBvaW50SXNPbkhpZ2hsaWdodCwgQm9vbGVhbiwgKERESGlnaGxpZ2h0UmVmIGhpZ2hsaWdo
dCwgQ0dQb2ludCBwb2ludCwgQm9vbGVhbiogb25CdXR0b24pLCAoaGlnaGxpZ2h0LCBwb2ludCwg
b25CdXR0b24pKQpAQCAtMTMwLDEwICsxMzAsMTQgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpjcmVhdGVPdmVybGF5SWZOZWVkZWQoKQogCiB2b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0IFZlY3RvcjxMYXlvdXRSZWN0
PiYgcmVjdHMpCiB7CisKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID4gMTA5
MAogICAgIG1fY3VycmVudEhpZ2hsaWdodElzRGlydHkgPSB0cnVlOwogICAgIG1fY3VycmVudFNl
bGVjdGlvblJlY3RzID0gcmVjdHM7CiAKKyAgICAvLyBEYXRhRGV0ZWN0b3JzIG5lZWRzIHRoZXNl
IGluIHRoZSByZXZlcnNlIG9yZGVyLgorICAgIG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnJldmVy
c2UoKTsKKwogICAgIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0ocmVjdHMpOwpAQCAtMjA1LDEyICsyMDksMTQgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpkcmF3U2VsZWN0aW9uSGlnaGxpZ2h0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCYKIAogICAgICAgICBpZiAoIWNnUmVjdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBDR1Jl
Y3QgYm91bmRzID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPmJv
dW5kc1JlY3QoKTsKLSAgICAgICAgICAgIG1fY3VycmVudEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERI
aWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlKG51bGxwdHIsIGNn
UmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIGJvdW5kcywgRERIaWdobGlnaHROb091dGxp
bmVXaXRoQXJyb3csIHRydWUpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEhpZ2hsaWdodCA9IGFk
b3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5k
RGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIGJvdW5k
cywgRERIaWdobGlnaHROb091dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9u
TmF0dXJhbCwgTk8sIFlFUykpOworCiAgICAgICAgICAgICBtX2N1cnJlbnRIaWdobGlnaHRJc0Rp
cnR5ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkcmF3Q3VycmVudEhpZ2hsaWdo
dChncmFwaGljc0NvbnRleHQpOworICAgIGlmIChtX2N1cnJlbnRIaWdobGlnaHQpCisgICAgICAg
IGRyYXdDdXJyZW50SGlnaGxpZ2h0KGdyYXBoaWNzQ29udGV4dCk7CiB9CiAKIHZvaWQgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd1RlbGVwaG9uZU51bWJlckhpZ2hsaWdodChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgZGlydHlSZWN0KQpAQCAtMjQxLDE1ICsyNDcsMTggQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpkcmF3VGVsZXBob25lTnVtYmVySGlnaGxpZ2h0KFdlYkNvcmU6OkdyYXBoaWNz
Q28KICAgICBpZiAoIW1fY3VycmVudEhpZ2hsaWdodCB8fCBtX2N1cnJlbnRIaWdobGlnaHRJc0Rp
cnR5KSB7CiAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSAoQ0dSZWN0KXJlY3Q7CiAKLSAgICAgICAg
bV9jdXJyZW50SGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0lu
VmlzaWJsZVJlY3QobnVsbHB0ciwgJmNnUmVjdCwgMSwgdmlld0ZvclJhbmdlLT5ib3VuZHNSZWN0
KCksIHRydWUpKTsKKyAgICAgICAgbV9jdXJyZW50SGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hs
aWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVs
bHB0ciwgJmNnUmVjdCwgMSwgdmlld0ZvclJhbmdlLT5ib3VuZHNSZWN0KCksIERESGlnaGxpZ2h0
T3V0bGluZVdpdGhBcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVT
KSk7CiAgICAgICAgIG1fY3VycmVudEhpZ2hsaWdodElzRGlydHkgPSBmYWxzZTsKICAgICB9CiAK
LSAgICBkcmF3Q3VycmVudEhpZ2hsaWdodChncmFwaGljc0NvbnRleHQpOworICAgIGlmIChtX2N1
cnJlbnRIaWdobGlnaHQpCisgICAgICAgIGRyYXdDdXJyZW50SGlnaGxpZ2h0KGdyYXBoaWNzQ29u
dGV4dCk7CiB9CiAKIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZHJhd0N1cnJlbnRI
aWdobGlnaHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQpCiB7Cisg
ICAgQVNTRVJUKG1fY3VycmVudEhpZ2hsaWdodCk7CisKICAgICBCb29sZWFuIG9uQnV0dG9uOwog
ICAgIG1fbW91c2VJc092ZXJIaWdobGlnaHQgPSBEREhpZ2hsaWdodFBvaW50SXNPbkhpZ2hsaWdo
dChtX2N1cnJlbnRIaWdobGlnaHQuZ2V0KCksIChDR1BvaW50KW1fbW91c2VQb3NpdGlvbiwgJm9u
QnV0dG9uKTsKIApAQCAtMjY1LDkgKzI3NCw3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6ZHJhd0N1cnJlbnRIaWdobGlnaHQoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBnCiAg
ICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7
CiAKICAgICBncmFwaGljc0NvbnRleHQudHJhbnNsYXRlKHRvRmxvYXRTaXplKGhpZ2hsaWdodEJv
dW5kaW5nUmVjdC5vcmlnaW4pKTsKLSAgICBncmFwaGljc0NvbnRleHQuc2NhbGUoRmxvYXRTaXpl
KDEsIC0xKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZShGbG9hdFNpemUoMCwgLWhp
Z2hsaWdodEJvdW5kaW5nUmVjdC5zaXplLmhlaWdodCkpOwotICAgIAorCiAgICAgQ0dSZWN0IGhp
Z2hsaWdodERyYXdSZWN0ID0gaGlnaGxpZ2h0Qm91bmRpbmdSZWN0OwogICAgIGhpZ2hsaWdodERy
YXdSZWN0Lm9yaWdpbi54ID0gMDsKICAgICBoaWdobGlnaHREcmF3UmVjdC5vcmlnaW4ueSA9IDA7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234317</attachid>
            <date>2014-07-02 22:35:36 -0700</date>
            <delta_ts>2014-07-03 10:33:16 -0700</delta_ts>
            <desc>Patch v2 - Addressing both Ryosuke&apos;s and Tim&apos;s feedback</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25076</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YTQ4MDkwLi5mNzc2ZDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTQtMDctMDIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIFNlbGVjdGlvbiByZWN0cyBzZW50IHRvIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIgYXJl
IHdyb25nLgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTY3Mjc3OTY+IGFuZCBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NTY4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKworICAgICAg
ICBVcGRhdGUgdGhlIGdhdGhlcmVyIHRvIGtlZXAgR2FwUmVjdHMgc2VwYXJhdGUgZnJvbSBMYXlv
dXRSZWN0czoKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmFkZFJlY3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdGlvblJlY3RHYXRoZXJlcjo6Tm90aWZpZXI6On5Ob3RpZmllcik6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25SZWN0R2F0aGVyZXI6OmNsZWFyQW5kQ3JlYXRl
Tm90aWZpZXIpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmg6CisK
KyAgICAgICAgKiBwYWdlL0VkaXRvckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Q2xpZW50OjpzZWxlY3Rpb25SZWN0c0RpZENoYW5nZSk6IFVwZGF0ZWQgdG8gdGFrZSBMYXlvdXRS
ZWN0cyBhbmQgR2FwUmVjdHMgc2VwYXJhdGVseS4KKworICAgICAgICBDaGFuZ2UgUmVuZGVyU2Vs
ZWN0aW9uSW5mbyB0byBhbHNvIGhhbmcgb24gdG8gdGhlIGluZGl2aWR1YWwgcmVjdHMgdGhhdCBm
b3JtZWQgdGhlIGZpbmFsIGJvdW5kaW5nIHJlY3Q6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clNlbGVjdGlvbkluZm8uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlbGVjdGlvbkluZm86
OlJlbmRlclNlbGVjdGlvbkluZm8pOiBJZiB0aGUgUmVuZGVyT2JqZWN0IGlzIGEgUmVuZGVyVGV4
dCwgdGhlbiBjYWxsCisgICAgICAgICAgY29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVz
IGluc3RlYWQgb2Ygc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0cyk6CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9u
UmVjdHNGb3JMaW5lQm94ZXMpOiBBZGRlZAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6
c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
Lmg6CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0TGluZUJveGVzOjpjb2xsZWN0U2VsZWN0aW9uUmVjdHNG
b3JSYW5nZSk6IEFkZGVkCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMu
aDoKKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclZpZXc6OnNldFN1YnRyZWVTZWxlY3Rpb24pOiBBZGQgdGhlIGxpc3Qgb2YgcmVj
dHMgdG8gdGhlIGdhdGhlcmVyIGluc3RlYWQgb2YganVzdCAKKyAgICAgICAgICB0aGUgYm91bmRp
bmcgcmVjdC4KKwogMjAxNC0wNy0wMSAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAg
ICAgICAgIEVuc3VyZSB0aGF0IHRoZSBXZWJLaXQgYnVuZGxlIHZlcnNpb24gaW4gdGhlIHVzZXIg
YWdlbnQgc3RyaW5nIGNvbnRpbnVlcyB0byBtYXRjaCB0aGUgY3VycmVudCBmb3JtYXQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCmluZGV4IGQwN2QyODEuLmU2YWU1NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CkBAIC03OCw2ICs3OCw3IEBAIF9fWk43V2ViQ29yZTEwRmxvYXRQb2ludEMxRVJLTlNfOEludFBv
aW50RQogX19aTjdXZWJDb3JlMTBGb250R2x5cGhzMTVyZWxlYXNlRm9udERhdGFFdgogX19aTjdX
ZWJDb3JlMTBKU0RvY3VtZW50NnNfaW5mb0UKIF9fWk43V2ViQ29yZTEwTGF5b3V0UmVjdDVzY2Fs
ZUVmCitfX1pON1dlYkNvcmUxMExheW91dFJlY3Q1dW5pdGVFUktTMF8KIF9fWk43V2ViQ29yZTEw
TGF5b3V0UmVjdEMxRVJLTlNfOUZsb2F0UmVjdEUKIF9fWk43V2ViQ29yZTEwTW91c2VFdmVudDZj
cmVhdGVFUktOM1dURjEyQXRvbWljU3RyaW5nRU5TMV8xMFBhc3NSZWZQdHJJTlNfOURPTVdpbmRv
d0VFRVJLTlNfMThQbGF0Zm9ybU1vdXNlRXZlbnRFaU5TNV9JTlNfNE5vZGVFRUUKIF9fWk43V2Vi
Q29yZTEwUGFzdGVib2FyZDE0d3JpdGVQbGFpblRleHRFUktOM1dURjZTdHJpbmdFTlMwXzE4U21h
cnRSZXBsYWNlT3B0aW9uRQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxl
Y3Rpb25SZWN0R2F0aGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25S
ZWN0R2F0aGVyZXIuY3BwCmluZGV4IGM0ODg2ZGEuLjVhN2RkYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvblJlY3RHYXRoZXJlci5jcHAKQEAgLTQ4LDEyICs0OCw3
IEBAIHZvaWQgU2VsZWN0aW9uUmVjdEdhdGhlcmVyOjphZGRSZWN0KGNvbnN0IExheW91dFJlY3Qm
IHJlY3QpCiAKIHZvaWQgU2VsZWN0aW9uUmVjdEdhdGhlcmVyOjphZGRSZWN0cyhjb25zdCBHYXBS
ZWN0cyYgcmVjdHMpCiB7Ci0gICAgaWYgKCFyZWN0cy5sZWZ0KCkuaXNFbXB0eSgpKQotICAgICAg
ICBtX3JlY3RzLmFwcGVuZChyZWN0cy5sZWZ0KCkpOwotICAgIGlmICghcmVjdHMucmlnaHQoKS5p
c0VtcHR5KCkpCi0gICAgICAgIG1fcmVjdHMuYXBwZW5kKHJlY3RzLnJpZ2h0KCkpOwotICAgIGlm
ICghcmVjdHMuY2VudGVyKCkuaXNFbXB0eSgpKQotICAgICAgICBtX3JlY3RzLmFwcGVuZChyZWN0
cy5jZW50ZXIoKSk7CisgICAgbV9nYXBSZWN0cy5hcHBlbmQocmVjdHMpOwogfQogCiBTZWxlY3Rp
b25SZWN0R2F0aGVyZXI6Ok5vdGlmaWVyOjpOb3RpZmllcihTZWxlY3Rpb25SZWN0R2F0aGVyZXIm
IGdhdGhlcmVyKQpAQCAtNjQsMTIgKzU5LDEzIEBAIFNlbGVjdGlvblJlY3RHYXRoZXJlcjo6Tm90
aWZpZXI6Ok5vdGlmaWVyKFNlbGVjdGlvblJlY3RHYXRoZXJlciYgZ2F0aGVyZXIpCiBTZWxlY3Rp
b25SZWN0R2F0aGVyZXI6Ok5vdGlmaWVyOjp+Tm90aWZpZXIoKQogewogICAgIGlmIChFZGl0b3JD
bGllbnQqIGNsaWVudCA9IG1fZ2F0aGVyZXIubV9yZW5kZXJWaWV3LnZpZXcoKS5mcmFtZSgpLmVk
aXRvcigpLmNsaWVudCgpKQotICAgICAgICBjbGllbnQtPnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdl
KG1fZ2F0aGVyZXIubV9yZWN0cyk7CisgICAgICAgIGNsaWVudC0+c2VsZWN0aW9uUmVjdHNEaWRD
aGFuZ2UobV9nYXRoZXJlci5tX3JlY3RzLCBtX2dhdGhlcmVyLm1fZ2FwUmVjdHMpOwogfQogCiBz
dGQ6OnVuaXF1ZV9wdHI8U2VsZWN0aW9uUmVjdEdhdGhlcmVyOjpOb3RpZmllcj4gU2VsZWN0aW9u
UmVjdEdhdGhlcmVyOjpjbGVhckFuZENyZWF0ZU5vdGlmaWVyKCkKIHsKICAgICBtX3JlY3RzLmNs
ZWFyKCk7CisgICAgbV9nYXBSZWN0cy5jbGVhcigpOwogCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8Tm90aWZpZXI+KCp0aGlzKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nl
bGVjdGlvblJlY3RHYXRoZXJlci5oCmluZGV4IDkwODU3ZDUuLmY4N2U1MmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25SZWN0R2F0aGVyZXIuaApAQCAtNjIsNiArNjIs
NyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFJlbmRlclZpZXcmIG1fcmVuZGVyVmlldzsKICAg
ICBWZWN0b3I8TGF5b3V0UmVjdD4gbV9yZWN0czsKKyAgICBWZWN0b3I8R2FwUmVjdHM+IG1fZ2Fw
UmVjdHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0VkaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FZGl0b3JD
bGllbnQuaAppbmRleCAxMTU5NjIxLi44ZjRkM2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0VkaXRvckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRWRpdG9yQ2xp
ZW50LmgKQEAgLTY0LDYgKzY0LDcgQEAgY2xhc3MgVGV4dENoZWNrZXJDbGllbnQ7CiBjbGFzcyBW
aXNpYmxlU2VsZWN0aW9uOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCitzdHJ1Y3QgR2FwUmVj
dHM7CiBzdHJ1Y3QgR3JhbW1hckRldGFpbDsKIAogY2xhc3MgRWRpdG9yQ2xpZW50IHsKQEAgLTE4
MSw3ICsxODIsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykgfHwg
RU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQogICAgIHZpcnR1YWwgdm9pZCBzZWxl
Y3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+JikgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0
IFZlY3RvcjxMYXlvdXRSZWN0PiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZWxlY3Rpb25SZWN0
c0RpZENoYW5nZShjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBWZWN0b3I8R2FwUmVj
dHM+JikgeyB9CiAjZW5kaWYKIAogICAgIC8vIFN1cHBvcnQgZm9yIGdsb2JhbCBzZWxlY3Rpb25z
LCB1c2VkIG9uIHBsYXRmb3JtcyBsaWtlIHRoZSBYIFdpbmRvdyBTeXN0ZW0gdGhhdCB0cmVhdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8u
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZvLmgKaW5kZXgg
NjczNjVjNi4uNDZlODg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclNlbGVjdGlvbkluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
U2VsZWN0aW9uSW5mby5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTYyLDggKzYzLDE0IEBAIGNsYXNzIFJlbmRlclNlbGVjdGlv
bkluZm8gOiBwdWJsaWMgUmVuZGVyU2VsZWN0aW9uSW5mb0Jhc2UgewogcHVibGljOgogICAgIFJl
bmRlclNlbGVjdGlvbkluZm8oUmVuZGVyT2JqZWN0KiBvLCBib29sIGNsaXBUb1Zpc2libGVDb250
ZW50KQogICAgICAgICA6IFJlbmRlclNlbGVjdGlvbkluZm9CYXNlKG8pCi0gICAgICAgICwgbV9y
ZWN0KG8tPmNhblVwZGF0ZVNlbGVjdGlvbk9uUm9vdExpbmVCb3hlcygpID8gby0+c2VsZWN0aW9u
UmVjdEZvclJlcGFpbnQobV9yZXBhaW50Q29udGFpbmVyLCBjbGlwVG9WaXNpYmxlQ29udGVudCkg
OiBMYXlvdXRSZWN0KCkpCiAgICAgeworICAgICAgICBBU1NFUlQobyk7CisgICAgICAgIGlmIChv
LT5jYW5VcGRhdGVTZWxlY3Rpb25PblJvb3RMaW5lQm94ZXMoKSkgeworICAgICAgICAgICAgaWYg
KG8tPmlzVGV4dCgpKQorICAgICAgICAgICAgICAgIG1fcmVjdCA9IHRvUmVuZGVyVGV4dCgqbyku
Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKG1fcmVwYWludENvbnRhaW5lciwgY2xp
cFRvVmlzaWJsZUNvbnRlbnQsIG1fcmVjdHMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fcmVjdCA9IG8tPnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KG1fcmVwYWludENvbnRh
aW5lciwgY2xpcFRvVmlzaWJsZUNvbnRlbnQpOworICAgICAgICB9CiAgICAgfQogICAgIAogICAg
IHZvaWQgcmVwYWludCgpCkBAIC03MSw5ICs3OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fb2Jq
ZWN0LT5yZXBhaW50VXNpbmdDb250YWluZXIobV9yZXBhaW50Q29udGFpbmVyLCBlbmNsb3NpbmdJ
bnRSZWN0KG1fcmVjdCkpOwogICAgIH0KIAorICAgIGNvbnN0IFZlY3RvcjxMYXlvdXRSZWN0PiYg
cmVjdHMoKSBjb25zdCB7IHJldHVybiBtX3JlY3RzOyB9CiAgICAgTGF5b3V0UmVjdCByZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZWN0OyB9CiAKIHByaXZhdGU6CisgICAgVmVjdG9yPExheW91dFJl
Y3Q+IG1fcmVjdHM7CiAgICAgTGF5b3V0UmVjdCBtX3JlY3Q7IC8vIHJlbGF0aXZlIHRvIHJlcGFp
bnQgY29udGFpbmVyCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAK
aW5kZXggYjU4NzE2Yy4uNDA5YWQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcApAQCAtMTIzNyw3ICsxMjM3LDcgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0OjpjbGlw
cGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWMKICAg
ICByZXR1cm4gcmVuZGVyZXJUb1JlcGFpbnQtPmNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50
KHJlcGFpbnRDb250YWluZXIpOwogfQogCi1MYXlvdXRSZWN0IFJlbmRlclRleHQ6OnNlbGVjdGlv
blJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250
YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCitMYXlvdXRSZWN0IFJlbmRlclRleHQ6
OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVCb3hlcyhjb25zdCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50LCBWZWN0
b3I8TGF5b3V0UmVjdD4qIHJlY3RzKQogewogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAg
ICAgQVNTRVJUKCFzaW1wbGVMaW5lTGF5b3V0KCkpOwpAQCAtMTI2NiwxNCArMTI2NiwzMyBAQCBM
YXlvdXRSZWN0IFJlbmRlclRleHQ6OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPYmplY3QqIHJlcAogICAgIGlmIChzdGFydFBvcyA9PSBlbmRQb3MpCiAgICAg
ICAgIHJldHVybiBJbnRSZWN0KCk7CiAKLSAgICBMYXlvdXRSZWN0IHJlY3QgPSBtX2xpbmVCb3hl
cy5zZWxlY3Rpb25SZWN0Rm9yUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgTGF5b3V0UmVj
dCByZXN1bHRSZWN0OworICAgIGlmICghcmVjdHMpCisgICAgICAgIHJlc3VsdFJlY3QgPSBtX2xp
bmVCb3hlcy5zZWxlY3Rpb25SZWN0Rm9yUmFuZ2Uoc3RhcnRQb3MsIGVuZFBvcyk7CisgICAgZWxz
ZSB7CisgICAgICAgIG1fbGluZUJveGVzLmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvclJhbmdlKHN0
YXJ0UG9zLCBlbmRQb3MsICpyZWN0cyk7CisgICAgICAgIGZvciAoYXV0byYgcmVjdCA6ICpyZWN0
cykgeworICAgICAgICAgICAgcmVzdWx0UmVjdC51bml0ZShyZWN0KTsKKyAgICAgICAgICAgIHJl
Y3QgPSBsb2NhbFRvQ29udGFpbmVyUXVhZChGbG9hdFJlY3QocmVjdCksIHJlcGFpbnRDb250YWlu
ZXIpLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAgIH0KKyAgICB9CiAKICAgICBpZiAo
Y2xpcFRvVmlzaWJsZUNvbnRlbnQpCi0gICAgICAgIGNvbXB1dGVSZWN0Rm9yUmVwYWludChyZXBh
aW50Q29udGFpbmVyLCByZWN0KTsKKyAgICAgICAgY29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlcGFp
bnRDb250YWluZXIsIHJlc3VsdFJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgcmVjdCA9IGxvY2Fs
VG9Db250YWluZXJRdWFkKEZsb2F0UmVjdChyZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9z
aW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgcmVzdWx0UmVjdCA9IGxvY2FsVG9Db250YWluZXJR
dWFkKEZsb2F0UmVjdChyZXN1bHRSZWN0KSwgcmVwYWludENvbnRhaW5lcikuZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKKworICAgIHJldHVybiByZXN1bHRSZWN0OworfQogCi0gICAgcmV0dXJuIHJl
Y3Q7CitMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVC
b3hlcyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBib29s
IGNsaXBUb1Zpc2libGVDb250ZW50LCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKQoreworICAg
IHJldHVybiBjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMocmVwYWludENvbnRhaW5l
ciwgY2xpcFRvVmlzaWJsZUNvbnRlbnQsICZyZWN0cyk7Cit9CisKK0xheW91dFJlY3QgUmVuZGVy
VGV4dDo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkKK3sKKyAgICBy
ZXR1cm4gY29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKHJlcGFpbnRDb250YWluZXIs
IGNsaXBUb1Zpc2libGVDb250ZW50LCBudWxscHRyKTsKIH0KIAogaW50IFJlbmRlclRleHQ6OmNh
cmV0TWluT2Zmc2V0KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmlu
ZGV4IGIxMDc5ODkuLmY2OTY2MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
aApAQCAtMTA5LDYgKzEwOSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIG92ZXJyaWRlOwog
ICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2Fy
ZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IDApIG92ZXJyaWRl
OwogCisgICAgTGF5b3V0UmVjdCBjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMoY29u
c3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9W
aXNpYmxlQ29udGVudCwgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cyk7CisKICAgICBMYXlvdXRV
bml0IG1hcmdpbkxlZnQoKSBjb25zdCB7IHJldHVybiBtaW5pbXVtVmFsdWVGb3JMZW5ndGgoc3R5
bGUoKS5tYXJnaW5MZWZ0KCksIDApOyB9CiAgICAgTGF5b3V0VW5pdCBtYXJnaW5SaWdodCgpIGNv
bnN0IHsgcmV0dXJuIG1pbmltdW1WYWx1ZUZvckxlbmd0aChzdHlsZSgpLm1hcmdpblJpZ2h0KCks
IDApOyB9CiAKQEAgLTE4NCw2ICsxODYsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZWN1cmVU
ZXh0KFVDaGFyIG1hc2spOwogCisgICAgTGF5b3V0UmVjdCBjb2xsZWN0U2VsZWN0aW9uUmVjdHNG
b3JMaW5lQm94ZXMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5l
ciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCwgVmVjdG9yPExheW91dFJlY3Q+Kik7CisKICAg
ICB2b2lkIG5vZGUoKSBjb25zdCA9IGRlbGV0ZTsKIAogICAgIC8vIFdlIHB1dCB0aGUgYml0Zmll
bGQgZmlyc3QgdG8gbWluaW1pemUgcGFkZGluZyBvbiA2NC1iaXQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKaW5kZXggM2FjNjhhNC4uYjgx
N2RhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5l
Qm94ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJv
eGVzLmNwcApAQCAtNDk1LDYgKzQ5NSwxNyBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHRMaW5lQm94
ZXM6OnNlbGVjdGlvblJlY3RGb3JSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZQogICAg
IHJldHVybiByZWN0OwogfQogCit2b2lkIFJlbmRlclRleHRMaW5lQm94ZXM6OmNvbGxlY3RTZWxl
Y3Rpb25SZWN0c0ZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIFZlY3RvcjxM
YXlvdXRSZWN0PiYgcmVjdHMpCit7CisgICAgZm9yIChhdXRvIGJveCA9IG1fZmlyc3Q7IGJveDsg
Ym94ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7CisgICAgICAgIExheW91dFJlY3QgcmVjdDsKKyAg
ICAgICAgcmVjdC51bml0ZShib3gtPmxvY2FsU2VsZWN0aW9uUmVjdChzdGFydCwgZW5kKSk7Cisg
ICAgICAgIHJlY3QudW5pdGUoZWxsaXBzaXNSZWN0Rm9yQm94KCpib3gsIHN0YXJ0LCBlbmQpKTsK
KyAgICAgICAgaWYgKCFyZWN0LnNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZWN0cy5h
cHBlbmQocmVjdCk7CisgICAgfQorfQorCiBWZWN0b3I8SW50UmVjdD4gUmVuZGVyVGV4dExpbmVC
b3hlczo6YWJzb2x1dGVSZWN0cyhjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQp
IGNvbnN0CiB7CiAgICAgVmVjdG9yPEludFJlY3Q+IHJlY3RzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgKaW5kZXggZDg3YzZiMS4uMjExZTRhMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCkBA
IC02OCw2ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVu
ZGVyVGV4dCYsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUpOwogICAgIExheW91dFJlY3Qg
c2VsZWN0aW9uUmVjdEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOworICAg
IHZvaWQgY29sbGVjdFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2ln
bmVkIGVuZCwgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cyk7CiAKICAgICBJbnRSZWN0IGJvdW5k
aW5nQm94KGNvbnN0IFJlbmRlclRleHQmKSBjb25zdDsKICAgICBJbnRQb2ludCBmaXJzdFJ1bkxv
Y2F0aW9uKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKaW5k
ZXggMjZkNTJkMC4uZjdlNmU0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3
LmNwcApAQCAtOTkyLDcgKzk5Miw4IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U3VidHJlZVNlbGVj
dGlvbihTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCwgUmVuZGVyT2JqZWN0KiBzCiAgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4gc2VsZWN0aW9uSW5mbyA9
IHN0ZDo6bWFrZV91bmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4obywgdHJ1ZSk7CiAKICNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhl
cmVyLmFkZFJlY3Qoc2VsZWN0aW9uSW5mby0+cmVjdCgpKTsKKyAgICAgICAgICAgIGZvciAoYXV0
byYgcmVjdCA6IHNlbGVjdGlvbkluZm8tPnJlY3RzKCkpCisgICAgICAgICAgICAgICAgbV9zZWxl
Y3Rpb25SZWN0R2F0aGVyZXIuYWRkUmVjdChyZWN0KTsKICNlbmRpZgogCiAgICAgICAgICAgICBu
ZXdTZWxlY3RlZE9iamVjdHMuc2V0KG8sIHN0ZDo6bW92ZShzZWxlY3Rpb25JbmZvKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VM
b2cKaW5kZXggZjQ5MDMzNy4uNGQ0MTU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisy
MDE0LTA3LTAyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBT
ZWxlY3Rpb24gcmVjdHMgc2VudCB0byBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyIGFyZSB3cm9u
Zy4KKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzE2NzI3Nzk2PiBhbmQgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDU2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJF
ZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnNlbGVj
dGlvblJlY3RzRGlkQ2hhbmdlKTogQWxzbyBwYXNzIHRoZSBHYXBSZWN0cyB0byB0aGUgU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5oOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJLaXQ6OmV4cGFuZEZv
ckdhcCk6CisgICAgICAgIChXZWJLaXQ6OmNvbXBhY3RSZWN0c1dpdGhHYXBSZWN0cyk6IENvbWJp
bmUgMysgcmVjdHMgZG93biB0byBleGFjdGx5IDMgcmVjdHMsIHRoZW4gZXhwYW5kIHRoZW0gYmFz
ZWQgb24gR2FwUmVjdHMuCisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKTogQ2FsbCBjb21wYWN0UmVjdHNXaXRoR2FwUmVj
dHMsIHRoZW4gcmV2ZXJzZSB0aGUgbGlzdC4KKyAgICAgICAgKFdlYktpdDo6U2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6ZHJhd1NlbGVjdGlvbkhpZ2hsaWdodCk6IFRlbGwgZGF0YSBkZXRlY3Rv
cnMgdG8gZmxpcCB0aGlzLgorICAgICAgICAoV2ViS2l0OjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpkcmF3VGVsZXBob25lTnVtYmVySGlnaGxpZ2h0KTogVGVsbCBkYXRhIGRldGVjdG9ycyB0
byBmbGlwIHRoaXMuCisgICAgICAgIChXZWJLaXQ6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmRyYXdDdXJyZW50SGlnaGxpZ2h0KTogTm8gbmVlZCB0byBmbGlwIHRoaXMgYW55bW9yZS4KKwog
MjAxNC0wNy0wMiAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUuY29tPgogCiAgICAgICAg
IFJFR1JFU1NJT04oV0syKTogVW5kbyBkb2VzIG5vdCB3b3JrIGluIHRleHQgZmllbGRzIGluIFNh
ZmFyaS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAppbmRleCBkN2Q2NDlkLi5iYjE0MjczIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJFZGl0b3JDbGllbnQuY3BwCkBAIC01MzEsMTEgKzUzMSwxMSBAQCB2b2lkIFdlYkVkaXRv
ckNsaWVudDo6c2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8UgogICAgIG1fcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVj
dGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZChyYW5nZXMpOwogI2VuZGlmCiB9Ci12b2lk
IFdlYkVkaXRvckNsaWVudDo6c2VsZWN0aW9uUmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVjdG9yPExh
eW91dFJlY3Q+JiByZWN0cykKK3ZvaWQgV2ViRWRpdG9yQ2xpZW50OjpzZWxlY3Rpb25SZWN0c0Rp
ZENoYW5nZShjb25zdCBWZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzLCBjb25zdCBWZWN0b3I8R2Fw
UmVjdHM+JiBnYXBSZWN0cykKIHsKICNpZiBQTEFURk9STShNQUMpCiAgICAgaWYgKG1fcGFnZS0+
c2VydmljZUNvbnRyb2xzRW5hYmxlZCgpKQotICAgICAgICBtX3BhZ2UtPnNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIoKS5zZWxlY3Rpb25SZWN0c0RpZENoYW5nZShyZWN0cyk7CisgICAgICAgIG1f
cGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGlvblJlY3RzRGlkQ2hhbmdl
KHJlY3RzLCBnYXBSZWN0cyk7CiAjZW5kaWYKIH0KICNlbmRpZiAvLyBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykgJiYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9y
Q2xpZW50LmgKaW5kZXggMDgzYjU5OS4uMTQ1ZDQ5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBA
IC0xNjksNyArMTY5LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikgfHwgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAgICAgdmlydHVhbCB2b2lk
IHNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8UmVmUHRy
PFdlYkNvcmU6OlJhbmdlPj4mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc2VsZWN0aW9u
UmVjdHNEaWRDaGFuZ2UoY29uc3QgVmVjdG9yPFdlYkNvcmU6OkxheW91dFJlY3Q+Jikgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHNlbGVjdGlvblJlY3RzRGlkQ2hhbmdlKGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpMYXlvdXRSZWN0PiYsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpHYXBSZWN0cz4m
KSBvdmVycmlkZTsKICNlbmRpZgogCiAgICAgV2ViUGFnZSogbV9wYWdlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLmgKaW5kZXggN2IyZGJmMy4uMDZmMjg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5oCkBAIC0zNCw2ICszNCw4IEBAIHR5cGVkZWYgdm9pZCogRERIaWdobGlnaHRSZWY7CiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBMYXlvdXRSZWN0OwogY2xhc3MgUmFuZ2U7CisKK3N0
cnVjdCBHYXBSZWN0czsKIH0KIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC00OCw3ICs1MCw3IEBA
IHB1YmxpYzoKICAgICB+U2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpOwogCiAgICAgdm9pZCBz
ZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4+Jik7Ci0gICAgdm9pZCBzZWxlY3Rpb25SZWN0c0RpZENoYW5nZShjb25z
dCBWZWN0b3I8V2ViQ29yZTo6TGF5b3V0UmVjdD4mKTsKKyAgICB2b2lkIHNlbGVjdGlvblJlY3Rz
RGlkQ2hhbmdlKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpMYXlvdXRSZWN0PiYsIGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpHYXBSZWN0cz4mKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGNyZWF0ZU92ZXJs
YXlJZk5lZWRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IDZm
YjI2ZDEuLjFiY2YwOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KQEAg
LTMzLDYgKzMzLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvRG9jdW1lbnQuaD4KICNpbXBvcnQgPFdl
YkNvcmUvRmxvYXRRdWFkLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0ZyYW1lVmlldy5oPgorI2ltcG9y
dCA8V2ViQ29yZS9HYXBSZWN0cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQu
aD4KICNpbXBvcnQgPFdlYkNvcmUvTWFpbkZyYW1lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NvZnRM
aW5raW5nLmg+CkBAIC00OSwxMCArNTAsMTAgQEAgdHlwZWRlZiB2b2lkKiBEREhpZ2hsaWdodFJl
ZjsKIAogdHlwZWRlZiBOU1VJbnRlZ2VyIERESGlnaGxpZ2h0U3R5bGU7CiBzdGF0aWMgY29uc3Qg
RERIaWdobGlnaHRTdHlsZSBEREhpZ2hsaWdodE5vT3V0bGluZVdpdGhBcnJvdyA9ICgxIDw8IDE2
KTsKK3N0YXRpYyBjb25zdCBEREhpZ2hsaWdodFN0eWxlIERESGlnaGxpZ2h0T3V0bGluZVdpdGhB
cnJvdyA9ICgxIDw8IDE2KSB8IDE7CiAKIFNPRlRfTElOS19QUklWQVRFX0ZSQU1FV09SS19PUFRJ
T05BTChEYXRhRGV0ZWN0b3JzKQotU09GVF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0
Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdCwgRERIaWdobGlnaHRSZWYsIChDRkFsbG9jYXRv
clJlZiBhbGxvY2F0b3IsIENHUmVjdCAqIHJlY3RzLCBDRkluZGV4IGNvdW50LCBDR1JlY3QgZ2xv
YmFsVmlzaWJsZVJlY3QsIEJvb2xlYW4gd2l0aEFycm93KSwgKGFsbG9jYXRvciwgcmVjdHMsIGNv
dW50LCBnbG9iYWxWaXNpYmxlUmVjdCwgd2l0aEFycm93KSkKLVNPRlRfTElOSyhEYXRhRGV0ZWN0
b3JzLCBEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGUsIERE
SGlnaGxpZ2h0UmVmLCAoQ0ZBbGxvY2F0b3JSZWYgYWxsb2NhdG9yLCBDR1JlY3QgKiByZWN0cywg
Q0ZJbmRleCBjb3VudCwgQ0dSZWN0IGdsb2JhbFZpc2libGVSZWN0LCBEREhpZ2hsaWdodFN0eWxl
IHN0eWxlLCBCb29sZWFuIHdpdGhBcnJvdyksIChhbGxvY2F0b3IsIHJlY3RzLCBjb3VudCwgZ2xv
YmFsVmlzaWJsZVJlY3QsIHN0eWxlLCB3aXRoQXJyb3cpKQorU09GVF9MSU5LKERhdGFEZXRlY3Rv
cnMsIERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERp
cmVjdGlvbiwgRERIaWdobGlnaHRSZWYsIChDRkFsbG9jYXRvclJlZiBhbGxvY2F0b3IsIENHUmVj
dCogcmVjdHMsIENGSW5kZXggY291bnQsIENHUmVjdCBnbG9iYWxWaXNpYmxlUmVjdCwgRERIaWdo
bGlnaHRTdHlsZSBzdHlsZSwgQm9vbGVhbiB3aXRoQXJyb3csIE5TV3JpdGluZ0RpcmVjdGlvbiB3
cml0aW5nRGlyZWN0aW9uLCBCb29sZWFuIGVuZHNXaXRoRU9MLCBCb29sZWFuIGZsaXBwZWQpLCAo
YWxsb2NhdG9yLCByZWN0cywgY291bnQsIGdsb2JhbFZpc2libGVSZWN0LCBzdHlsZSwgd2l0aEFy
cm93LCB3cml0aW5nRGlyZWN0aW9uLCBlbmRzV2l0aEVPTCwgZmxpcHBlZCkpCiBTT0ZUX0xJTkso
RGF0YURldGVjdG9ycywgRERIaWdobGlnaHRHZXRMYXllcldpdGhDb250ZXh0LCBDR0xheWVyUmVm
LCAoRERIaWdobGlnaHRSZWYgaGlnaGxpZ2h0LCBDR0NvbnRleHRSZWYgY29udGV4dCksIChoaWdo
bGlnaHQsIGNvbnRleHQpKQogU09GVF9MSU5LKERhdGFEZXRlY3RvcnMsIERESGlnaGxpZ2h0R2V0
Qm91bmRpbmdSZWN0LCBDR1JlY3QsIChEREhpZ2hsaWdodFJlZiBoaWdobGlnaHQpLCAoaGlnaGxp
Z2h0KSkKIFNPRlRfTElOSyhEYXRhRGV0ZWN0b3JzLCBEREhpZ2hsaWdodFBvaW50SXNPbkhpZ2hs
aWdodCwgQm9vbGVhbiwgKERESGlnaGxpZ2h0UmVmIGhpZ2hsaWdodCwgQ0dQb2ludCBwb2ludCwg
Qm9vbGVhbiogb25CdXR0b24pLCAoaGlnaGxpZ2h0LCBwb2ludCwgb25CdXR0b24pKQpAQCAtMTI4
LDEyICsxMjksMTE0IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6Y3JlYXRlT3Zl
cmxheUlmTmVlZGVkKCkKICAgICBtX3NlcnZpY2VzT3ZlcmxheS0+c2V0TmVlZHNEaXNwbGF5KCk7
CiB9CiAKLXZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6c2VsZWN0aW9uUmVjdHNEaWRD
aGFuZ2UoY29uc3QgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cykKK3N0YXRpYyBjb25zdCB1aW50
OF90IEFsaWdubWVudE5vbmUgPSAwOworc3RhdGljIGNvbnN0IHVpbnQ4X3QgQWxpZ25tZW50TGVm
dCA9IDEgPDwgMDsKK3N0YXRpYyBjb25zdCB1aW50OF90IEFsaWdubWVudFJpZ2h0ID0gMSA8PCAx
OworCitzdGF0aWMgdm9pZCBleHBhbmRGb3JHYXAoVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cywg
dWludDhfdCogYWxpZ25tZW50cywgY29uc3QgR2FwUmVjdHMmIGdhcCkKK3sKKyAgICBMYXlvdXRV
bml0IGxlZnRFZGdlLCByaWdodEVkZ2U7CisgICAgYm9vbCBoYXNMZWZ0RWRnZSA9IGZhbHNlLCBo
YXNSaWdodEVkZ2UgPSBmYWxzZTsKKworICAgIGlmICghZ2FwLmxlZnQoKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgbGVmdEVkZ2UgPSBnYXAubGVmdCgpLngoKTsKKyAgICAgICAgaGFzTGVmdEVkZ2Ug
PSB0cnVlOworICAgIH0KKworICAgIGlmICghZ2FwLnJpZ2h0KCkuaXNFbXB0eSgpKSB7CisgICAg
ICAgIHJpZ2h0RWRnZSA9IGdhcC5yaWdodCgpLngoKSArIGdhcC5yaWdodCgpLndpZHRoKCk7Cisg
ICAgICAgIGhhc1JpZ2h0RWRnZSA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGhhc0xlZnRFZGdl
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICAgICAg
ICAgIGlmIChhbGlnbm1lbnRzW2ldICYgQWxpZ25tZW50TGVmdCkKKyAgICAgICAgICAgICAgICBy
ZWN0c1tpXS5zaGlmdFhFZGdlVG8obGVmdEVkZ2UpOworICAgICAgICB9CisgICAgfQorICAgIGlm
IChoYXNSaWdodEVkZ2UpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsr
aSkgeworICAgICAgICAgICAgaWYgKGFsaWdubWVudHNbaV0gJiBBbGlnbm1lbnRSaWdodCkKKyAg
ICAgICAgICAgICAgICByZWN0c1tpXS5zaGlmdE1heFhFZGdlVG8obGVmdEVkZ2UpOworICAgICAg
ICB9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjb21wYWN0UmVjdHNXaXRoR2FwUmVjdHMoVmVj
dG9yPExheW91dFJlY3Q+JiByZWN0cywgY29uc3QgVmVjdG9yPEdhcFJlY3RzPiYgZ2FwUmVjdHMp
Cit7CisgICAgaWYgKHJlY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
QWxsIG9mIHRoZSBtaWRkbGUgcmVjdHMgLSBldmVyeXRoaW5nIGJ1dCB0aGUgZmlyc3QgYW5kIGxh
c3QgLSBjYW4gYmUgdW5pb25lZCB0b2dldGhlci4KKyAgICBpZiAocmVjdHMuc2l6ZSgpID4gMykg
eworICAgICAgICBMYXlvdXRSZWN0IHVuaXRlZDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IHJlY3RzLnNpemUoKSAtIDE7ICsraSkKKyAgICAgICAgICAgIHVuaXRlZC51bml0ZShy
ZWN0c1tpXSk7CisKKyAgICAgICAgcmVjdHNbMV0gPSB1bml0ZWQ7CisgICAgICAgIHJlY3RzWzJd
ID0gcmVjdHMubGFzdCgpOworICAgICAgICByZWN0cy5yZXNpemUoMyk7CisgICAgfQorCisgICAg
Ly8gRklYTUU6IFRoZSBmb2xsb3dpbmcgYWxpZ25tZW50cyBhcmUgY29ycmVjdCBmb3IgTFRSIHRl
eHQuCisgICAgLy8gV2Ugc2hvdWxkIGFsc28gYWNjb3VudCBmb3IgUlRMLgorICAgIHVpbnQ4X3Qg
YWxpZ25tZW50c1szXTsKKyAgICBpZiAocmVjdHMuc2l6ZSgpID09IDEpIHsKKyAgICAgICAgYWxp
Z25tZW50c1swXSA9IEFsaWdubWVudExlZnQgfCBBbGlnbm1lbnRSaWdodDsKKyAgICAgICAgYWxp
Z25tZW50c1sxXSA9IEFsaWdubWVudE5vbmU7CisgICAgICAgIGFsaWdubWVudHNbMl0gPSBBbGln
bm1lbnROb25lOworICAgIH0gZWxzZSBpZiAocmVjdHMuc2l6ZSgpID09IDIpIHsKKyAgICAgICAg
YWxpZ25tZW50c1swXSA9IEFsaWdubWVudFJpZ2h0OworICAgICAgICBhbGlnbm1lbnRzWzFdID0g
QWxpZ25tZW50TGVmdDsKKyAgICAgICAgYWxpZ25tZW50c1syXSA9IEFsaWdubWVudE5vbmU7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgYWxpZ25tZW50c1swXSA9IEFsaWdubWVudFJpZ2h0OworICAg
ICAgICBhbGlnbm1lbnRzWzFdID0gQWxpZ25tZW50TGVmdCB8IEFsaWdubWVudFJpZ2h0OworICAg
ICAgICBhbGlnbm1lbnRzWzJdID0gQWxpZ25tZW50TGVmdDsKKyAgICB9CisKKyAgICAvLyBBY2Nv
dW50IGZvciBlYWNoIEdhcFJlY3RzIGJ5IGV4dGVuZGluZyB0aGUgZWRnZSBvZiBjZXJ0YWluIExh
eW91dFJlY3RzIHRvIG1lZXQgdGhlIGdhcC4KKyAgICBmb3IgKGF1dG8mIGdhcCA6IGdhcFJlY3Rz
KQorICAgICAgICBleHBhbmRGb3JHYXAocmVjdHMsIGFsaWdubWVudHMsIGdhcCk7CisKKyAgICAv
LyBJZiB3ZSBoYXZlIDMgcmVjdHMgd2UgbWlnaHQgbmVlZCBvbmUgZmluYWwgR2FwUmVjdHMgdG8g
YWxpZ24gdGhlIGVkZ2VzLgorICAgIGlmIChyZWN0cy5zaXplKCkgPT0gMykgeworICAgICAgICBM
YXlvdXRSZWN0IGxlZnQsIHJpZ2h0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MzsgKytpKSB7CisgICAgICAgICAgICBpZiAoYWxpZ25tZW50c1tpXSAmIEFsaWdubWVudExlZnQp
IHsKKyAgICAgICAgICAgICAgICBpZiAobGVmdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
ICAgIGxlZnQgPSByZWN0c1tpXTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChyZWN0c1tpXS54
KCkgPCBsZWZ0LngoKSkKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IHJlY3RzW2ldOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFsaWdubWVudHNbaV0gJiBBbGlnbm1lbnRSaWdo
dCkgeworICAgICAgICAgICAgICAgIGlmIChyaWdodC5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gcmVjdHNbaV07CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHJlY3Rz
W2ldLngoKSArIHJlY3RzW2ldLndpZHRoKCkpID4gKHJpZ2h0LngoKSArIHJpZ2h0LndpZHRoKCkp
KQorICAgICAgICAgICAgICAgICAgICByaWdodCA9IHJlY3RzW2ldOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFsZWZ0LmlzRW1wdHkoKSB8fCAhcmlnaHQuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBHYXBSZWN0cyBnYXA7CisgICAgICAgICAgICBnYXAudW5pdGVM
ZWZ0KGxlZnQpOworICAgICAgICAgICAgZ2FwLnVuaXRlUmlnaHQocmlnaHQpOworICAgICAgICAg
ICAgZXhwYW5kRm9yR2FwKHJlY3RzLCBhbGlnbm1lbnRzLCBnYXApOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnNlbGVjdGlvblJlY3RzRGlk
Q2hhbmdlKGNvbnN0IFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IFZlY3RvcjxHYXBS
ZWN0cz4mIGdhcFJlY3RzKQogewogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQg
PiAxMDkwCiAgICAgbV9jdXJyZW50SGlnaGxpZ2h0SXNEaXJ0eSA9IHRydWU7CiAgICAgbV9jdXJy
ZW50U2VsZWN0aW9uUmVjdHMgPSByZWN0czsKIAorICAgIGNvbXBhY3RSZWN0c1dpdGhHYXBSZWN0
cyhtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cywgZ2FwUmVjdHMpOworCisgICAgLy8gRGF0YURldGVj
dG9ycyBuZWVkcyB0aGVzZSByZXZlcnNlZCBpbiBvcmRlciB0byBwbGFjZSB0aGUgYXJyb3cgaW4g
dGhlIHJpZ2h0IGxvY2F0aW9uLgorICAgIG1fY3VycmVudFNlbGVjdGlvblJlY3RzLnJldmVyc2Uo
KTsKKwogICAgIGNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0ocmVjdHMpOwpAQCAtMjA1LDEyICszMDgsMTMgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpkcmF3U2VsZWN0aW9uSGlnaGxpZ2h0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYK
IAogICAgICAgICBpZiAoIWNnUmVjdHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBDR1JlY3Qg
Ym91bmRzID0gbV93ZWJQYWdlLT5jb3JlUGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCktPmJvdW5k
c1JlY3QoKTsKLSAgICAgICAgICAgIG1fY3VycmVudEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdo
bGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlKG51bGxwdHIsIGNnUmVj
dHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIGJvdW5kcywgRERIaWdobGlnaHROb091dGxpbmVX
aXRoQXJyb3csIHRydWUpKTsKKyAgICAgICAgICAgIG1fY3VycmVudEhpZ2hsaWdodCA9IGFkb3B0
Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGly
ZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIGJvdW5kcywg
RERIaWdobGlnaHROb091dGxpbmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0
dXJhbCwgTk8sIFlFUykpOwogICAgICAgICAgICAgbV9jdXJyZW50SGlnaGxpZ2h0SXNEaXJ0eSA9
IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZHJhd0N1cnJlbnRIaWdobGlnaHQoZ3Jh
cGhpY3NDb250ZXh0KTsKKyAgICBpZiAobV9jdXJyZW50SGlnaGxpZ2h0KQorICAgICAgICBkcmF3
Q3VycmVudEhpZ2hsaWdodChncmFwaGljc0NvbnRleHQpOwogfQogCiB2b2lkIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OmRyYXdUZWxlcGhvbmVOdW1iZXJIaWdobGlnaHQoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGRp
cnR5UmVjdCkKQEAgLTI0MSwxNSArMzQ1LDE4IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6ZHJhd1RlbGVwaG9uZU51bWJlckhpZ2hsaWdodChXZWJDb3JlOjpHcmFwaGljc0NvCiAg
ICAgaWYgKCFtX2N1cnJlbnRIaWdobGlnaHQgfHwgbV9jdXJyZW50SGlnaGxpZ2h0SXNEaXJ0eSkg
ewogICAgICAgICBDR1JlY3QgY2dSZWN0ID0gKENHUmVjdClyZWN0OwogCi0gICAgICAgIG1fY3Vy
cmVudEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2li
bGVSZWN0KG51bGxwdHIsICZjZ1JlY3QsIDEsIHZpZXdGb3JSYW5nZS0+Ym91bmRzUmVjdCgpLCB0
cnVlKSk7CisgICAgICAgIG1fY3VycmVudEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRD
cmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIs
ICZjZ1JlY3QsIDEsIHZpZXdGb3JSYW5nZS0+Ym91bmRzUmVjdCgpLCBEREhpZ2hsaWdodE91dGxp
bmVXaXRoQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwog
ICAgICAgICBtX2N1cnJlbnRIaWdobGlnaHRJc0RpcnR5ID0gZmFsc2U7CiAgICAgfQogCi0gICAg
ZHJhd0N1cnJlbnRIaWdobGlnaHQoZ3JhcGhpY3NDb250ZXh0KTsKKyAgICBpZiAobV9jdXJyZW50
SGlnaGxpZ2h0KQorICAgICAgICBkcmF3Q3VycmVudEhpZ2hsaWdodChncmFwaGljc0NvbnRleHQp
OwogfQogCiB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRyYXdDdXJyZW50SGlnaGxp
Z2h0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0KQogeworICAgIEFT
U0VSVChtX2N1cnJlbnRIaWdobGlnaHQpOworCiAgICAgQm9vbGVhbiBvbkJ1dHRvbjsKICAgICBt
X21vdXNlSXNPdmVySGlnaGxpZ2h0ID0gRERIaWdobGlnaHRQb2ludElzT25IaWdobGlnaHQobV9j
dXJyZW50SGlnaGxpZ2h0LmdldCgpLCAoQ0dQb2ludCltX21vdXNlUG9zaXRpb24sICZvbkJ1dHRv
bik7CiAKQEAgLTI2NSw5ICszNzIsNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmRyYXdDdXJyZW50SGlnaGxpZ2h0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZwogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogCiAg
ICAgZ3JhcGhpY3NDb250ZXh0LnRyYW5zbGF0ZSh0b0Zsb2F0U2l6ZShoaWdobGlnaHRCb3VuZGlu
Z1JlY3Qub3JpZ2luKSk7Ci0gICAgZ3JhcGhpY3NDb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAt
MSkpOwotICAgIGdyYXBoaWNzQ29udGV4dC50cmFuc2xhdGUoRmxvYXRTaXplKDAsIC1oaWdobGln
aHRCb3VuZGluZ1JlY3Quc2l6ZS5oZWlnaHQpKTsKLSAgICAKKwogICAgIENHUmVjdCBoaWdobGln
aHREcmF3UmVjdCA9IGhpZ2hsaWdodEJvdW5kaW5nUmVjdDsKICAgICBoaWdobGlnaHREcmF3UmVj
dC5vcmlnaW4ueCA9IDA7CiAgICAgaGlnaGxpZ2h0RHJhd1JlY3Qub3JpZ2luLnkgPSAwOwo=
</data>
<flag name="review"
          id="258855"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>