<?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>142590</bug_id>
          
          <creation_ts>2015-03-11 12:51:55 -0700</creation_ts>
          <short_desc>Scroll snap logic should be triggered when resizing the WebView</short_desc>
          <delta_ts>2015-05-15 10:18:02 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=135964</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>145059</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jamesr</cc>
    
    <cc>jonlee</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1076407</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-03-11 12:51:55 -0700</bug_when>
    <thetext>If you have a document containing scroll snap points, you are ensured that the content will land on a defined point each time you scroll the content. However, when you resize a WebView with snap points, you can create a situation where the snap point is no longer positioned properly. For example, if an image is snapped to the top of the web view, and you resize the web browser window, the image may now be offset from the top of the view.

Instead, we should make sure that the content stays in its proper position as the page is resized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076408</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-03-11 12:52:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/20125088&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093367</commentid>
    <comment_count>2</comment_count>
      <attachid>252758</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-08 17:55:21 -0700</bug_when>
    <thetext>Created attachment 252758
Resizing example

The attached file is a manual test for scroll snapping on resizable regions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093378</commentid>
    <comment_count>3</comment_count>
      <attachid>252762</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-08 18:26:21 -0700</bug_when>
    <thetext>Created attachment 252762
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093575</commentid>
    <comment_count>4</comment_count>
      <attachid>252762</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-10 14:09:22 -0700</bug_when>
    <thetext>Comment on attachment 252762
Patch

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

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:570
&gt; +    if (!m_page)
&gt; +        return;

Surprised that check is here, and not in frameViewForScrollingNode.

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:576
&gt; +    FrameView* frameViewPtr = frameViewForScrollingNode(scrollingNodeID);
&gt; +    if (!frameViewPtr)
&gt; +        return;
&gt; +    
&gt; +    FrameView&amp; frameView = *frameViewPtr;

I admire your desire to use a reference rather than a pointer, but normally we just use pointers in cases like this.

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h:60
&gt; +    void updateScrollSnapOffsetIndices(ScrollingNodeID, size_t horizontalIndex, size_t verticalIndex);

Does this really need to be size_t? I’m concerned that we are using 64-bit without really knowing why when the engine normally uses 32-bit.

&gt; Source/WebCore/platform/ScrollView.cpp:1526
&gt; +    IntPoint currentPosition = scrollPosition();

No need to put this into a local variable just to use it once. In many cases it seems that setScrollPosition does an early exit if it’s not changing. Do we really need to do an additional early exit here?

&gt; Source/WebCore/platform/ScrollView.h:391
&gt; +    void scrollToNearestActiveSnapPoint() override;

Can we also mark this final?

&gt; Source/WebCore/platform/ScrollableArea.cpp:196
&gt; +    if (scrollAnimator().activeScrollSnapOffsetIndexDidChange()) {
&gt; +        setCurrentHorizontalSnapPointIndex(scrollAnimator().activeScrollSnapOffsetIndexForAxis(ScrollEventAxis::Horizontal));
&gt; +        setCurrentVerticalSnapPointIndex(scrollAnimator().activeScrollSnapOffsetIndexForAxis(ScrollEventAxis::Vertical));

iOS build failures:

ScrollableArea.cpp:194:26: error: no member named &apos;activeScrollSnapOffsetIndexDidChange&apos; in &apos;WebCore::ScrollAnimator&apos;
ScrollableArea.cpp:195:61: error: no member named &apos;activeScrollSnapOffsetIndexForAxis&apos; in &apos;WebCore::ScrollAnimator&apos;
ScrollableArea.cpp:196:59: error: no member named &apos;activeScrollSnapOffsetIndexForAxis&apos; in &apos;WebCore::ScrollAnimator&apos;

&gt; Source/WebCore/platform/ScrollableArea.cpp:435
&gt; +    ScrollAnimator* scrollAnimator = existingScrollAnimator();
&gt; +    if (!scrollAnimator)

No need for a local variable for the scrollAnimator, which is never used below.

&gt; Source/WebCore/rendering/RenderLayer.cpp:3214
&gt; +        scrollToOffset(IntSize(correctedPosition.x(), correctedPosition.y()));

Why on earth does scrollToOffset take an IntSize rather than an IntPoint given that scrollPosition returns an IntPoint? Please use toIntSize instead of writing out the x()/y() thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093790</commentid>
    <comment_count>5</comment_count>
      <attachid>252864</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 10:32:12 -0700</bug_when>
    <thetext>Created attachment 252864
Patch v2 (Updated with Darin&apos;s comments)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093791</commentid>
    <comment_count>6</comment_count>
      <attachid>252864</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 10:32:47 -0700</bug_when>
    <thetext>Comment on attachment 252864
Patch v2 (Updated with Darin&apos;s comments)

Uploading a new patch to confirm iOS builds properly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093812</commentid>
    <comment_count>7</comment_count>
      <attachid>252870</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 11:10:52 -0700</bug_when>
    <thetext>Created attachment 252870
Patch v3 (Forgot to include &lt;wtf/MathExtras.h&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093814</commentid>
    <comment_count>8</comment_count>
      <attachid>252870</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 11:11:19 -0700</bug_when>
    <thetext>Comment on attachment 252870
Patch v3 (Forgot to include &lt;wtf/MathExtras.h&gt;

Build fix due to missing header.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093825</commentid>
    <comment_count>9</comment_count>
      <attachid>252873</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 11:29:17 -0700</bug_when>
    <thetext>Created attachment 252873
Patch v4 (Correct iOS build failure)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093833</commentid>
    <comment_count>10</comment_count>
      <attachid>252873</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-05-11 11:45:24 -0700</bug_when>
    <thetext>Comment on attachment 252873
Patch v4 (Correct iOS build failure)

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

&gt; Source/WebCore/page/FrameView.cpp:3005
&gt; +    if (ScrollAnimator* scrollAnimator = existingScrollAnimator())
&gt; +        scrollAnimator-&gt;updateScrollAnimatorsAndTimers();

Not this patch, but updateScrollAnimatorsAndTimers is a bad name for a public member function. Why is it the business of the caller to know that scrollAnimator is maintaining timers?

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:565
&gt; +void AsyncScrollingCoordinator::updateScrollSnapOffsetIndices(ScrollingNodeID scrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex)

How do you express &quot;one active snap point, at 0&quot;? Or is that not allowed?

&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h:60
&gt; +    void updateScrollSnapOffsetIndices(ScrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex);

&quot;update&quot; is a bit vague here. Does it mean &quot;scroll to these indices&quot;, or &quot;these are the currently active indices&quot;?

&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:77
&gt; +        activeSnapIndex = (velocity &lt; 0) ? clampTo&lt;unsigned&gt;(lowerIndex) : clampTo&lt;unsigned&gt;(upperIndex);

Why the clampTo&lt;unsigned&gt;(lowerIndex)? All this clamping seems to imply that you&apos;re uneasy with the unsigned math.

&gt; Source/WebCore/page/scrolling/ThreadedScrollingTree.h:65
&gt; +    void updateScrollSnapOffsetIndices(ScrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex) override;

&quot;update&quot; again.

&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:190
&gt; +        m_scrollController.setScrollSnapOffsetIndexDidChange(false);

This is a bit confusing. Why do you have to set that it didn&apos;t change?

&gt; Source/WebCore/platform/ScrollAnimator.h:134
&gt; +    bool activeScrollSnapOffsetIndexDidChange() const;
&gt; +    unsigned activeScrollSnapOffsetIndexForAxis(ScrollEventAxis) const;

&quot;offset index&quot;: need both? Just scrollSnapIndex?

&gt; Source/WebCore/platform/ScrollView.cpp:1531
&gt; +void ScrollView::scrollToNearestActiveSnapPoint()
&gt; +{
&gt; +    IntPoint currentPosition = scrollPosition();
&gt; +    IntPoint correctedPosition = nearestActiveSnapPoint(currentPosition);
&gt; +    
&gt; +    if (correctedPosition != currentPosition)
&gt; +        setScrollPosition(correctedPosition);
&gt; +}

Can this go down to ScrollableArea?

&gt; Source/WebCore/platform/ScrollableArea.cpp:194
&gt; +    if (scrollAnimator().activeScrollSnapOffsetIndexDidChange()) {

A &quot;didChange&quot; is usually a callback-type thing. Here&apos;s querying state, but from when?

&gt; Source/WebCore/platform/ScrollableArea.h:74
&gt; +    IntPoint nearestActiveSnapPoint(const IntPoint&amp;);
&gt; +    virtual void scrollToNearestActiveSnapPoint() { }

How do you tell the difference between an index not being set, and there being a single valid index?

&gt; Source/WebCore/rendering/RenderLayer.cpp:3215
&gt; +void RenderLayer::scrollToNearestActiveSnapPoint()
&gt; +{
&gt; +    IntPoint currentPosition = scrollPosition();
&gt; +    IntPoint correctedPosition = nearestActiveSnapPoint(currentPosition);
&gt; +    
&gt; +    if (correctedPosition != currentPosition)
&gt; +        scrollToOffset(toIntSize(correctedPosition));
&gt; +}

Hopefully moving that ScrollVIew code into ScrollableArea would obviate this code.

&gt; Source/WebCore/rendering/RenderLayer.cpp:3507
&gt;      if (ScrollAnimator* scrollAnimator = existingScrollAnimator())
&gt; -        return scrollAnimator-&gt;updateScrollAnimatorsAndTimers();
&gt; +        scrollAnimator-&gt;updateScrollAnimatorsAndTimers();
&gt; +    scrollToNearestActiveSnapPoint();

Perhaps this chunk can move down to ScrollableArea too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093910</commentid>
    <comment_count>11</comment_count>
      <attachid>252873</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 15:27:19 -0700</bug_when>
    <thetext>Comment on attachment 252873
Patch v4 (Correct iOS build failure)

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

&gt;&gt; Source/WebCore/page/FrameView.cpp:3005
&gt;&gt; +        scrollAnimator-&gt;updateScrollAnimatorsAndTimers();
&gt; 
&gt; Not this patch, but updateScrollAnimatorsAndTimers is a bad name for a public member function. Why is it the business of the caller to know that scrollAnimator is maintaining timers?

I&apos;ll make a note for future correction. Maybe something like &apos;updateScrollSnapState&apos;...

&gt;&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp:565
&gt;&gt; +void AsyncScrollingCoordinator::updateScrollSnapOffsetIndices(ScrollingNodeID scrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex)
&gt; 
&gt; How do you express &quot;one active snap point, at 0&quot;? Or is that not allowed?

This interface is just to let the scrolling thread notify the main thread about which snap offset index is currently active. I didn&apos;t include the concept of &quot;none&quot; because the state of &apos;no active scroll snap offsets&apos; is the case where we have no offsets at all.

&gt;&gt; Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h:60
&gt;&gt; +    void updateScrollSnapOffsetIndices(ScrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex);
&gt; 
&gt; &quot;update&quot; is a bit vague here. Does it mean &quot;scroll to these indices&quot;, or &quot;these are the currently active indices&quot;?

It means &quot;we have new currently active indices&quot;. So maybe call it &quot;setActiveScrollSnapOffsetIndices&quot;?

&gt;&gt; Source/WebCore/page/scrolling/AxisScrollSnapOffsets.h:77
&gt;&gt; +        activeSnapIndex = (velocity &lt; 0) ? clampTo&lt;unsigned&gt;(lowerIndex) : clampTo&lt;unsigned&gt;(upperIndex);
&gt; 
&gt; Why the clampTo&lt;unsigned&gt;(lowerIndex)? All this clamping seems to imply that you&apos;re uneasy with the unsigned math.

I thought clang would complain about assigning from size_t to unsigned, so I added some preemptive clamping. But it actually looks like things work fine without it, so I&apos;ll get rid of this (and the &lt;wtf/MathExtras.h&gt; include.)

&gt;&gt; Source/WebCore/page/scrolling/ThreadedScrollingTree.h:65
&gt;&gt; +    void updateScrollSnapOffsetIndices(ScrollingNodeID, unsigned horizontalIndex, unsigned verticalIndex) override;
&gt; 
&gt; &quot;update&quot; again.

Fixed.

&gt;&gt; Source/WebCore/page/scrolling/mac/ScrollingTreeFrameScrollingNodeMac.mm:190
&gt;&gt; +        m_scrollController.setScrollSnapOffsetIndexDidChange(false);
&gt; 
&gt; This is a bit confusing. Why do you have to set that it didn&apos;t change?

I thought I might save a cross-thread message send if multiple &apos;handleWheelEvents&apos; were processed before the ScrollController updated its state. But it&apos;s probably not worth worry about. I&apos;ll get rid of it.n

&gt;&gt; Source/WebCore/platform/ScrollAnimator.h:134
&gt;&gt; +    unsigned activeScrollSnapOffsetIndexForAxis(ScrollEventAxis) const;
&gt; 
&gt; &quot;offset index&quot;: need both? Just scrollSnapIndex?

Sure. &apos;scrollSnapIndex&apos; reads better.

&gt;&gt; Source/WebCore/platform/ScrollView.cpp:1531
&gt;&gt; +}
&gt; 
&gt; Can this go down to ScrollableArea?

No, because &apos;setScrollPosition&apos; is not part of ScrollableArea&apos;s API. We use &apos;setScrollPosition&apos; in ScrollView, and &apos;scrollToOffset&apos; in RenderLayer. It seems like ScrollableArea should have some unified concept for this, but the current design doesn&apos;t support it.

&gt;&gt; Source/WebCore/platform/ScrollableArea.cpp:194
&gt;&gt; +    if (scrollAnimator().activeScrollSnapOffsetIndexDidChange()) {
&gt; 
&gt; A &quot;didChange&quot; is usually a callback-type thing. Here&apos;s querying state, but from when?

It&apos;s checking state after the wheel event handling code. I could pass a boolean into &apos;handleWheelEvent&apos; to track this state, if that would be cleaner?

&gt;&gt; Source/WebCore/platform/ScrollableArea.h:74
&gt;&gt; +    virtual void scrollToNearestActiveSnapPoint() { }
&gt; 
&gt; How do you tell the difference between an index not being set, and there being a single valid index?

When we have scroll snap points, there is always a current active snap point offset. The only time we don&apos;t have a valid index set is when there is no set of snap points (the vector of snap point offsets is empty).

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:3215
&gt;&gt; +}
&gt; 
&gt; Hopefully moving that ScrollVIew code into ScrollableArea would obviate this code.

I can&apos;t do that easily in this patch, because RenderLayer and ScrollView have different API for setting scroll position. It seems like ScrollalbeArea should provide a unified concept for this, but I think that&apos;s a larger change than I should do as part of this patch.

&gt;&gt; Source/WebCore/rendering/RenderLayer.cpp:3507
&gt;&gt; +    scrollToNearestActiveSnapPoint();
&gt; 
&gt; Perhaps this chunk can move down to ScrollableArea too.

I think so. Let me try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093915</commentid>
    <comment_count>12</comment_count>
      <attachid>252873</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-05-11 15:39:00 -0700</bug_when>
    <thetext>Comment on attachment 252873
Patch v4 (Correct iOS build failure)

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

&gt;&gt;&gt; Source/WebCore/platform/ScrollView.cpp:1531
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; Can this go down to ScrollableArea?
&gt; 
&gt; No, because &apos;setScrollPosition&apos; is not part of ScrollableArea&apos;s API. We use &apos;setScrollPosition&apos; in ScrollView, and &apos;scrollToOffset&apos; in RenderLayer. It seems like ScrollableArea should have some unified concept for this, but the current design doesn&apos;t support it.

Does scrollToOffsetWithoutAnimation() work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093964</commentid>
    <comment_count>13</comment_count>
      <attachid>252912</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 17:26:14 -0700</bug_when>
    <thetext>Created attachment 252912
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093974</commentid>
    <comment_count>14</comment_count>
      <attachid>252873</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 17:39:37 -0700</bug_when>
    <thetext>Comment on attachment 252873
Patch v4 (Correct iOS build failure)

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/ScrollView.cpp:1531
&gt;&gt;&gt;&gt; +}
&gt;&gt;&gt; 
&gt;&gt;&gt; Can this go down to ScrollableArea?
&gt;&gt; 
&gt;&gt; No, because &apos;setScrollPosition&apos; is not part of ScrollableArea&apos;s API. We use &apos;setScrollPosition&apos; in ScrollView, and &apos;scrollToOffset&apos; in RenderLayer. It seems like ScrollableArea should have some unified concept for this, but the current design doesn&apos;t support it.
&gt; 
&gt; Does scrollToOffsetWithoutAnimation() work?

Oh! Let me try right now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093981</commentid>
    <comment_count>15</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 17:55:48 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 252873 [details]
&gt; &gt; 
&gt; &gt; Does scrollToOffsetWithoutAnimation() work?
&gt; 
&gt; Oh! Let me try right now...

Yes -- that worked very well. I&apos;ve revised things to match.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093987</commentid>
    <comment_count>16</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 18:13:24 -0700</bug_when>
    <thetext>Committed r184139: &lt;http://trac.webkit.org/changeset/184139&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1093988</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-05-11 18:14:18 -0700</bug_when>
    <thetext>Revised patch approved by Simon Fraser in person.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1094082</commentid>
    <comment_count>18</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2015-05-11 22:58:17 -0700</bug_when>
    <thetext>Removing r? from patch</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>252758</attachid>
            <date>2015-05-08 17:55:21 -0700</date>
            <delta_ts>2015-05-08 17:55:21 -0700</delta_ts>
            <desc>Resizing example</desc>
            <filename>scroll-snap-mandatory-resizeable.html</filename>
            <type>text/html</type>
            <size>2549</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgogICAgPGhlYWQ+CiAgICAgICAgPHN0eWxlPgogICAgICAg
ICAgICAuaG9yaXpvbnRhbEdhbGxlcnkgewogICAgICAgICAgICAgICAgd2lkdGg6IDMwMHB4Owog
ICAgICAgICAgICAgICAgaGVpZ2h0OiAzMDBweDsKICAgICAgICAgICAgICAgIG92ZXJmbG93LXk6
IGhpZGRlbjsKICAgICAgICAgICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgICAgICAg
ICByZXNpemU6IGJvdGg7CiAgICAgICAgICAgICAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGlu
ZzogdG91Y2g7CiAgICAgICAgICAgICAgICAtd2Via2l0LXNjcm9sbC1zbmFwLXBvaW50cy14OiBy
ZXBlYXQoMTAwJSk7CiAgICAgICAgICAgICAgICAtd2Via2l0LXNjcm9sbC1zbmFwLXR5cGU6IG1h
bmRhdG9yeTsKICAgICAgICAgICAgICAgIG1hcmdpbjogMTBweDsKICAgICAgICAgICAgfQoKICAg
ICAgICAgICAgLmhvcml6b250YWxHYWxsZXJ5RHJhd2VyIHsKICAgICAgICAgICAgICAgIHdpZHRo
OiA1MDAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICB9CgogICAg
ICAgICAgICAudmVydGljYWxHYWxsZXJ5IHsKICAgICAgICAgICAgICAgIHdpZHRoOiAzMDBweDsK
ICAgICAgICAgICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgICAgICAgICBvdmVyZmxvdy14
OiBoaWRkZW47CiAgICAgICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICAg
ICAgcmVzaXplOiBib3RoOwogICAgICAgICAgICAgICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxp
bmc6IHRvdWNoOwogICAgICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25hcC1wb2ludHMteTog
cmVwZWF0KDEwMCUpOwogICAgICAgICAgICAgICAgLXdlYmtpdC1zY3JvbGwtc25hcC10eXBlOiBt
YW5kYXRvcnk7CiAgICAgICAgICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAudmVydGljYWxHYWxsZXJ5RHJhd2VyIHsKICAgICAgICAgICAgICAgIHdpZHRo
OiAxMDAlOwogICAgICAgICAgICAgICAgaGVpZ2h0OiA1MDAlOwogICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgLmNvbG9yQm94IHsKICAgICAgICAgICAgICAgIGhlaWdodDogMjAlOwogICAgICAg
ICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgICAgICBmbG9hdDogbGVmdDsKICAgICAg
ICAgICAgfQogICAgICAgICAgICAuaG9yaXpDb2xvckJveCB7CiAgICAgICAgICAgICAgICBoZWln
aHQ6IDEwMCU7CiAgICAgICAgICAgICAgICB3aWR0aDogMjAlOwogICAgICAgICAgICAgICAgZGlz
cGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICNpdGVtMCB7IGJh
Y2tncm91bmQtY29sb3I6IHJlZDsgfQogICAgICAgICAgICAjaXRlbTEgeyBiYWNrZ3JvdW5kLWNv
bG9yOiBncmVlbjsgfQogICAgICAgICAgICAjaXRlbTIgeyBiYWNrZ3JvdW5kLWNvbG9yOiBibHVl
OyB9CiAgICAgICAgICAgICNpdGVtMyB7IGJhY2tncm91bmQtY29sb3I6IGFxdWE7IH0KICAgICAg
ICAgICAgI2l0ZW00IHsgYmFja2dyb3VuZC1jb2xvcjogeWVsbG93OyB9CiAgICAgICAgICAgICNp
dGVtNSB7IGJhY2tncm91bmQtY29sb3I6IGZ1Y2hzaWE7IH0KICAgICAgICA8L3N0eWxlPgogICAg
PC9oZWFkPgogICAgPGJvZHk+CiAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZl
OyBoZWlnaHQ6IDMwMHB4OyB3aWR0aDogMzAwcHgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJo
b3Jpem9udGFsR2FsbGVyeSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFs
R2FsbGVyeURyYXdlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iaXRlbTAiIGNsYXNz
PSJob3JpekNvbG9yQm94Ij48L2Rpdj48ZGl2IGlkPSJpdGVtMSIgY2xhc3M9Imhvcml6Q29sb3JC
b3giPjwvZGl2PjxkaXYgaWQ9Iml0ZW0yIiBjbGFzcz0iaG9yaXpDb2xvckJveCI+PC9kaXY+PGRp
diBpZD0iaXRlbTMiIGNsYXNzPSJob3JpekNvbG9yQm94Ij48L2Rpdj48ZGl2IGlkPSJpdGVtNCIg
Y2xhc3M9Imhvcml6Q29sb3JCb3giPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAg
ICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2ZXJ0aWNhbEdhbGxlcnkiPgog
ICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmVydGljYWxHYWxsZXJ5RHJhd2VyIj4KICAgICAg
ICAgICAgICAgICAgICA8ZGl2IGlkPSJpdGVtMCIgY2xhc3M9ImNvbG9yQm94Ij48L2Rpdj48ZGl2
IGlkPSJpdGVtMSIgY2xhc3M9ImNvbG9yQm94Ij48L2Rpdj48ZGl2IGlkPSJpdGVtMiIgY2xhc3M9
ImNvbG9yQm94Ij48L2Rpdj48ZGl2IGlkPSJpdGVtMyIgY2xhc3M9ImNvbG9yQm94Ij48L2Rpdj48
ZGl2IGlkPSJpdGVtNCIgY2xhc3M9ImNvbG9yQm94Ij48L2Rpdj48ZGl2IGlkPSJpdGVtNSIgY2xh
c3M9ImNvbG9yQm94Ij48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8
L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvYm9keT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252762</attachid>
            <date>2015-05-08 18:26:21 -0700</date>
            <delta_ts>2015-05-11 10:32:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142590-20150508182503.patch</filename>
            <type>text/plain</type>
            <size>33231</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDAzMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxNS0wNS0wOCAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGwgc25hcCBsb2dp
YyBzaG91bGQgYmUgdHJpZ2dlcmVkIHdoZW4gcmVzaXppbmcgdGhlIFdlYlZpZXcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5MAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjAxMjUwODg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGVzdHMgY29taW5nIGluIGEgc2Vjb25kIHBhdGNoLgorCisgICAg
ICAgIFJlc2l6aW5nIG9mIHRoZSBtYWluIGZyYW1lIG9yIG92ZXJmbG93IHJlZ2lvbnMgd2FzIHBy
b3Blcmx5IHJlY2FsY3VsYXRpbmcgdGhlIHNjcm9sbCBzbmFwIHBvaW50cywKKyAgICAgICAgYnV0
IHRoZXJlIHdhcyBubyBjb2RlIHRvIGhvbm9yIHRoZXNlIHZhbHVlcyB3aGVuIHdpbmRvdyByZXNp
emluZyB3YXMgb2NjdXJyaW5nLiBUaGUgY29ycmVjdGlvbiB3YXMKKyAgICAgICAgaGFuZGxlZCBp
biB0d28gd2F5czoKKyAgICAgICAgMS4gU2Nyb2xsaW5nIHRocmVhZCBvcGVyYXRpb25zIHRoYXQg
bW92ZWQgdG8gbmV3IHNuYXAgcG9pbnRzIG5lZWRlZCB0byBub3RpZnkgdGhlIG1haW4gdGhyZWFk
IHRoYXQKKyAgICAgICAgICAgaXQgaGFkIHNoaWZ0ZWQgdG8gYSBuZXcgc25hcCBwb2ludCwgc28g
dGhhdCB0aGUgcmVzaXplIGNvZGUgKHdoaWNoIGhhcHBlbnMgb24gdGhlIG1haW4gdGhyZWFkKQor
ICAgICAgICAgICBjb3VsZCBlbnN1cmUgdGhhdCB3ZSBzdGF5ZWQgY2xhbXBlZCB0byB0aGUgY29y
cmVjdCAndGlsZScgaW4gdGhlIHNuYXAgcmVnaW9uLgorICAgICAgICAyLiBNYWluIHRocmVhZCAo
b3ZlcmZsb3cpIHJlc2l6ZXMgd2VyZSBsaWtld2lzZSBtaXNzaW5nIGNvZGUgdG8gaG9ub3IgdGhl
IGN1cnJlbnQgc25hcCBwb3NpdGlvbgorICAgICAgICAgICBhZnRlciByZXNpemluZyBjYWxjdWxh
dGlvbnMgd2VyZSBjb21wbGV0ZS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIHJlcXVpcmVk
IHRoZSBhZGRpdGlvbiBvZiB0d28gaW5kaWNlcyB0byB0aGUgc2Nyb2xsYWJsZSBhcmVhIHRvIHRy
YWNrIHdoaWNoIHNjcm9sbAorICAgICAgICBzbmFwIHBvaW50IHdhcyBjdXJyZW50bHkgYmVpbmcg
dXNlZC4gV2UgZG9uJ3QgYm90aGVyIHdpdGggYSAnbm9uZScgY2FzZSBiZWNhdXNlIHlvdSBjYW5u
b3QgaGF2ZSBhCisgICAgICAgICdub25lJyBzdGF0ZSB3aGVuIHlvdSBoYXZlIGFuIGFjdGl2ZSBz
ZXQgb2Ygc2Nyb2xsIHNuYXAgcG9pbnRzLCBhbmQgd2UgZG8gbm90IGV4ZWN1dGUgdGhpcyBjb2Rl
CisgICAgICAgIGlmIHRoZSBzY3JvbGwgc25hcCBwb2ludHMgYXJlIG51bGwuCisKKyAgICAgICAg
VGhlIEZyYW1lVmlldyBjb2RlIHdhcyBjb21wdXRpbmcgdXBkYXRlZCBzbmFwIG9mZnNldHMgYWZ0
ZXIgaXQgaGFkIGRpc3BhdGNoZWQgZnJhbWUgdmlldyBsYXlvdXQKKyAgICAgICAgaW5mb3JtYXRp
b24gdG8gdGhlIHNjcm9sbGluZyB0aHJlYWQsIHdoaWNoIHdhcyB3cm9uZy4gVGhpcyB3YXMgYWxz
byBjb3JyZWN0ZWQuCisKKyAgICAgICAgSSB0aGluayBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byB0
cmFjayBhbGwgb2YgdGhpcyBzdGF0ZSBpbnNpZGUgdGhlIFNjcm9sbENvbnRyb2xsZXIsIGJ1dCB0
aGUgY3VycmVudAorICAgICAgICBzY3JvbGwgc25hcCBhcmNoaXRlY3R1cmUgZGVzdHJveXMgYW5k
IHJlY3JlYXRlcyB0aGUgc3RhdGUgZWFjaCB0aW1lIGEgbmV3IHNldCBvZiBpbnRlcmFjdGlvbnMg
c3RhcnRzLgorICAgICAgICBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiB0aGUgZnV0dXJlLCB3aGlj
aCB3b3VsZCBhbGxvdyB1cyB0byByZW1vdmUgc29tZSBvZiB0aGlzIGxvY2FsIHN0YXRlLgorCisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKTogTWFrZSBzdXJlICd1cGRhdGVTbmFwT2Zmc2V0cycg
aXMgY2FsbGVkIHByaW9yIHRvCisgICAgICAgIGNhbGxpbmcgJ2ZyYW1lVmlld0xheW91dFVwZGF0
ZWQnIHNvIHRoZSBzY3JvbGxpbmcgdGhyZWFkIGdldHMgY29ycmVjdCB1cGRhdGVkIHBvaW50cy4g
QWRkIGEgbmV3CisgICAgICAgIGNhbGwgdG8gJ3Njcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2lu
dCcsIHdoaWNoIHdpbGwga2VlcCB1cyBvbiBvdXIgY3VycmVudCBzbmFwIHBvaW50IGR1cmluZwor
ICAgICAgICByZXNpemUgKGlmIGFwcHJvcHJpYXRlKS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKTogQWRk
ZWQuIFRoaXMgZmluZHMgYW5kIG5vdGlmaWVzCisgICAgICAgIHRoZSBjb3JyZWN0IHNjcm9sbCBy
ZWdpb24gd2hlbiBhIG5ldyBzbmFwIHBvc2l0aW9uIChpbmRleCkgaGFzIGJlZW4gc2VsZWN0ZWQg
YnkgdXNlciBpbnRlcmFjdGlvbiBvbgorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRlZmVyVGVzdHNGb3JS
ZWFzb24pOiBBZGRlZCBhbiBhc3NlcnRpb24gZm9yICdpc01haW5UaHJlYWQnLgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGVzdERlZmVycmFsRm9y
UmVhc29uKTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvci5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zm
c2V0cy5oOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXQpOiBNb2RpZmllZCB0
byBhbHNvIHJldHVybiB0aGUgc2VsZWN0ZWQgc25hcCBwb2ludCBpbmRleCBzbyB3ZSBjYW4gdHJh
Y2sKKyAgICAgICAgaXQgdG8gaGFuZGxlIHJlc2l6ZSBvcGVyYXRpb25zLgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWU6OnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhy
ZWFkZWRTY3JvbGxpbmdUcmVlOjp1cGRhdGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyk6IEFkZGVk
IG1ldGhvZCB0byBkaXNwYXRjaCB0aGUgYWN0aXZlCisgICAgICAgIGhvcml6b250YWwgYW5kIHZl
cnRpY2FsIHNjcm9sbCBzbmFwIGluZGljZXMgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQuCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmg6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpo
YW5kbGVXaGVlbEV2ZW50KTogQWZ0ZXIgdGhlIHNjcm9sbCBjb250cm9sbGVyIHByb2Nlc3Nlcwor
ICAgICAgICB0aGUgY3VycmVudCBldmVudCwgbm90aWZ5IHRoZSBtYWluIHRocmVhZCBvZiBhbnkg
Y2hhbmdlIGluIHRoZSBhY3RpdmUgc2Nyb2xsIHNuYXAgaW5kZXguCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
OmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5nZSk6IEFkZGVkIG1ldGhvZCB0byBh
bGxvdyBTY3JvbGxBbmltYXRvcgorICAgICAgICBjbGllbnRzIHRvIGZpbmQgb3V0IGFib3V0IHRo
ZSBjdXJyZW50IHNjcm9sbCBzbmFwIHN0YXRlLCB3aGljaCBpcyBvbmx5IGtub3duIGJ5IHRoZSBT
Y3JvbGxDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmFjdGl2
ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBv
aW50KTogQWRkZWQgbWV0aG9kIHRoYXQgYWxsb3dzIHVzIHRvIHNldCBzY3JvbGwgcG9zaXRpb24K
KyAgICAgICAgdG8gb25lIG9mIG91ciBhY3RpdmUgc2Nyb2xsIHNuYXAgb2Zmc2V0cy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVs
RXZlbnQpOiBJZiB0aGUgYWN0aXZlIHNjcm9sbCBzbmFwIG9mZnNldCBoYXMgY2hhbmdlZCwgbWFr
ZSBzdXJlIHdlCisgICAgICAgIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyB2YWx1ZXMgZm9yIHBvdGVu
dGlhbCByZXNpemUgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
OjpjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cyk6IE1ha2Ugc3VyZSB0byBhbHNvIGNsZWFyIG91
dCB0aGUgY3VycmVudCBzbmFwIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFy
ZWE6OmNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYWJsZUFyZWE6Om5lYXJlc3RBY3RpdmVTbmFwUG9pbnQpOiBOZXcgbWV0aG9kIHRoYXQg
cmV0dXJucyBhbiB1cGRhdGVkIEludFBvaW50IHJlZmxlY3RpbmcKKyAgICAgICAgdGhlIHByb3Bl
ciBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIGFjdGl2ZSBzY3JvbGwgc25hcCBvZmZzZXQu
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGFibGVBcmVhOjpjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudEhvcml6b250YWxT
bmFwUG9pbnRJbmRleCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6
OmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb05lYXJlc3RBY3Rp
dmVTbmFwUG9pbnQpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250
cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyQ2xpZW50OjphY3Rp
dmVTY3JvbGxPZmZzZXRJbmRleCk6IEFkZGVkIG5ldyBtZXRob2QgZm9yIGNsaWVudHMgdG8gaW1w
bGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xs
U25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxDb250cm9sbGVyOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UpOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9y
QXhpcyk6IEhlbHBlciBtZXRob2QgdG8gcmV0dXJuIGN1cnJlbnQgYWN0aXZlCisgICAgICAgIGlu
ZGV4IChpZiBhcHBsaWNhYmxlKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6
OnNldEFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMpOiBIZWxwZXIgZnVuY3Rpb24g
dG8gc2FmZWx5IHNldAorICAgICAgICB0aGUgY3VycmVudCBhY3RpdmUgaW5kZXguCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24pOiBV
cGRhdGVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyBhY3RpdmUgc2Nyb2xsIHNuYXAKKyAgICAg
ICAgaW5kZXgsIGFzIHdlbGwgYXMgd2hldGhlciB0aGUgY3VycmVudCBhbmltYXRpb24gYWN0dWFs
bHkgY2hhbmdlZCB0aGUgYWN0aXZlIHNuYXAgcG9pbnQgb2Zmc2V0LgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6IFJldmlzZSB0byB1c2UgbW9kZXJu
IEMrKyBpbml0aWFsaXplcnMsIGFuZCB0byB0cmFjayBhIG5ldyBpbmRleAorICAgICAgICB0aGF0
IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc2Nyb2xsIHNuYXAgb2Zmc2V0LgorICAgICAgICAqIHBs
YXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlKTogVXBk
YXRlIGZvciBtb2Rlcm4gQysrIHN5bnRheC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvTmVhcmVzdEFj
dGl2ZVNuYXBQb2ludCk6IE5ldyBtZXRob2QgdG8gc2V0IHNjcm9sbCBwb3NpdGlvbiB0byBiZSBv
bmUgb2Ygb3VyCisgICAgICAgIGFjdGl2ZSBzY3JvbGwgc25hcCBwb2ludHMuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KTogQWRkIGEg
bmV3IGNhbGwgdG8gJ3Njcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2ludCcgc28gdGhhdAorICAg
ICAgICB3ZSBzdGF5IG9uIHRoZSBjdXJyZW50IHNjcm9sbCBzbmFwIG9mZnNldCBkdXJpbmcgcmVz
aXppbmcuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisKIDIwMTUtMDUtMDgg
IE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFuemFyb0BpZ2FsaWEuY29tPiwgTWFydGluIFJvYmlu
c29uIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBDaGVja3MgZm9yIERF
VkVMT1BNRU5UX0JVSUxEIGFyZSBhbGwgd3JvbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5jcHAJKHJldmlzaW9uIDE4NDAwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjk3NCw3ICsyOTc0LDExIEBAIHZvaWQgRnJhbWVWaWV3
OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKCkKICAgICBmcmFtZSgpLmxvYWRlcigpLmNsaWVudCgp
LmRpc3BhdGNoRGlkTGF5b3V0KCk7CiAKICAgICB1cGRhdGVXaWRnZXRQb3NpdGlvbnMoKTsKLSAg
ICAKKworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgdXBkYXRlU25hcE9mZnNldHMo
KTsKKyNlbmRpZgorCiAgICAgLy8gbGF5b3V0KCkgcHJvdGVjdHMgRnJhbWVWaWV3LCBidXQgaXQg
c3RpbGwgY2FuIGdldCBkZXN0cm95ZWQgd2hlbiB1cGRhdGVFbWJlZGRlZE9iamVjdHMoKQogICAg
IC8vIGlzIGNhbGxlZCB0aHJvdWdoIHRoZSBwb3N0IGxheW91dCB0aW1lci4KICAgICBSZWY8RnJh
bWVWaWV3PiBwcm90ZWN0KCp0aGlzKTsKQEAgLTI5OTYsMTQgKzMwMDAsMTAgQEAgdm9pZCBGcmFt
ZVZpZXc6OnBlcmZvcm1Qb3N0TGF5b3V0VGFza3MoKQogICAgIHNlbmRSZXNpemVFdmVudElmTmVl
ZGVkKCk7CiAgICAgdmlld3BvcnRDb250ZW50c0NoYW5nZWQoKTsKIAotI2lmIEVOQUJMRShDU1Nf
U0NST0xMX1NOQVApCi0gICAgaWYgKCFmcmFtZSgpLmlzTWFpbkZyYW1lKCkpIHsKLSAgICAgICAg
dXBkYXRlU25hcE9mZnNldHMoKTsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIGlmIChTY3Jv
bGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0g
ICAgICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0Fu
ZFRpbWVycygpOwotI2VuZGlmCi0gICAgfQorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYm
IFBMQVRGT1JNKE1BQykKKyAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0g
ZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQorICAgICAgICBzY3JvbGxBbmltYXRvci0+dXBkYXRl
U2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCk7CisgICAgc2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25h
cFBvaW50KCk7CiAjZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHJldmlz
aW9uIDE4NDAwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjIsOCArNTYyLDM1IEBAIFN0
cmluZyBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGwKIH0KIAogI2lmIFBMQVRGT1JN
KENPQ09BKQordm9pZCBBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVTY3JvbGxTbmFw
T2Zmc2V0SW5kaWNlcyhTY3JvbGxpbmdOb2RlSUQgc2Nyb2xsaW5nTm9kZUlELCBzaXplX3QgaG9y
aXpvbnRhbEluZGV4LCBzaXplX3QgdmVydGljYWxJbmRleCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIAorICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXdQdHIgPSBmcmFtZVZpZXdGb3JTY3JvbGxpbmdOb2Rl
KHNjcm9sbGluZ05vZGVJRCk7CisgICAgaWYgKCFmcmFtZVZpZXdQdHIpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBGcmFtZVZpZXcmIGZyYW1lVmlldyA9ICpmcmFtZVZpZXdQdHI7CisgICAg
CisgICAgaWYgKHNjcm9sbGluZ05vZGVJRCA9PSBmcmFtZVZpZXcuc2Nyb2xsTGF5ZXJJRCgpKSB7
CisgICAgICAgIGZyYW1lVmlldy5zZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGhv
cml6b250YWxJbmRleCk7CisgICAgICAgIGZyYW1lVmlldy5zZXRDdXJyZW50VmVydGljYWxTbmFw
UG9pbnRJbmRleCh2ZXJ0aWNhbEluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICAvLyBPdmVyZmxvdy1zY3JvbGwgYXJlYS4KKyAgICBpZiAoU2Nyb2xsYWJsZUFyZWEqIHNj
cm9sbGFibGVBcmVhID0gZnJhbWVWaWV3LnNjcm9sbGFibGVBcmVhRm9yU2Nyb2xsTGF5ZXJJRChz
Y3JvbGxpbmdOb2RlSUQpKSB7CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5zZXRDdXJyZW50SG9y
aXpvbnRhbFNuYXBQb2ludEluZGV4KGhvcml6b250YWxJbmRleCk7CisgICAgICAgIHNjcm9sbGFi
bGVBcmVhLT5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCh2ZXJ0aWNhbEluZGV4KTsK
KyAgICB9Cit9CisKIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGVmZXJUZXN0c0Zv
clJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24g
cmVhc29uKSBjb25zdAogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgaWYgKCFt
X3BhZ2UgfHwgIW1fcGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2VycygpKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTU3NSw2ICs2MDIsNyBAQCB2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmRlZmVyVGVzCiAKIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGVz
dERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJ
ZGVudGlmaWVyIGlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJp
Z2dlclJlYXNvbiByZWFzb24pIGNvbnN0CiB7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
ICAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdlLT5leHBlY3RzV2hlZWxFdmVudFRyaWdnZXJzKCkp
CiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMTg0
MDA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29y
ZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHNjaGVkdWxlVXBkYXRlU2Nyb2xsUG9zaXRpb25BZnRlckFzeW5j
U2Nyb2xsKFNjcm9sbGluZ05vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcHJvZ3JhbW1h
dGljU2Nyb2xsLCBTZXRPclN5bmNTY3JvbGxpbmdMYXllclBvc2l0aW9uKTsKIAogI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcE9mZnNldEluZGljZXMoU2Nyb2xs
aW5nTm9kZUlELCBzaXplX3QgaG9yaXpvbnRhbEluZGV4LCBzaXplX3QgdmVydGljYWxJbmRleCk7
CiAgICAgdm9pZCBkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Ny
b2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRy
aWdnZXJSZWFzb24pIGNvbnN0OwogICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29u
KFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2
ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0OwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xs
U25hcE9mZnNldHMuaAkocmV2aXNpb24gMTg0MDA4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDEy
ICs0NCwxNCBAQCB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJsZUFyZWEoCiAvLyBh
cyB3ZWxsIGFzIGEgVmVsb2NpdHlUeXBlIGluZGljYXRpbmcgdGhlIHZlbG9jaXR5IChlLmcuIGZs
b2F0LCBDR0Zsb2F0LCBldGMuKSBUaGlzIGZ1bmN0aW9uIGlzIHRlbXBsYXRlZCBiZWNhdXNlIHRo
ZSBVSSBwcm9jZXNzIHdpbGwgbm93CiAvLyB1c2UgcGl4ZWwgc25hcHBlZCBmbG9hdHMgdG8gcmVw
cmVzZW50IHNuYXAgb2Zmc2V0cyByYXRoZXIgdGhhbiBMYXlvdXRVbml0cy4KIHRlbXBsYXRlIDx0
eXBlbmFtZSBMYXlvdXRUeXBlLCB0eXBlbmFtZSBWZWxvY2l0eVR5cGU+Ci1MYXlvdXRUeXBlIGNs
b3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRUeXBlPiYgc25hcE9mZnNldHMsIExh
eW91dFR5cGUgc2Nyb2xsRGVzdGluYXRpb24sIFZlbG9jaXR5VHlwZSB2ZWxvY2l0eSkKK0xheW91
dFR5cGUgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFR5cGU+JiBzbmFwT2Zm
c2V0cywgTGF5b3V0VHlwZSBzY3JvbGxEZXN0aW5hdGlvbiwgVmVsb2NpdHlUeXBlIHZlbG9jaXR5
LCBzaXplX3QmIGFjdGl2ZVNuYXBJbmRleCkKIHsKICAgICBBU1NFUlQoc25hcE9mZnNldHMuc2l6
ZSgpKTsKKyAgICBhY3RpdmVTbmFwSW5kZXggPSAwOwogICAgIGlmIChzY3JvbGxEZXN0aW5hdGlv
biA8PSBzbmFwT2Zmc2V0cy5maXJzdCgpKQogICAgICAgICByZXR1cm4gc25hcE9mZnNldHMuZmly
c3QoKTsKIAorICAgIGFjdGl2ZVNuYXBJbmRleCA9IHNuYXBPZmZzZXRzLnNpemUoKSAtIDE7CiAg
ICAgaWYgKHNjcm9sbERlc3RpbmF0aW9uID49IHNuYXBPZmZzZXRzLmxhc3QoKSkKICAgICAgICAg
cmV0dXJuIHNuYXBPZmZzZXRzLmxhc3QoKTsKIApAQCAtNzAsMTAgKzcyLDEzIEBAIExheW91dFR5
cGUgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG8KICAgICBMYXlvdXRUeXBlIGxvd2VyU25h
cFBvc2l0aW9uID0gc25hcE9mZnNldHNbbG93ZXJJbmRleF07CiAgICAgTGF5b3V0VHlwZSB1cHBl
clNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW3VwcGVySW5kZXhdOwogICAgIC8vIE5vbnplcm8g
dmVsb2NpdHkgaW5kaWNhdGVzIGEgZmxpY2sgZ2VzdHVyZS4gRXZlbiBpZiBhbm90aGVyIHNuYXAg
cG9pbnQgaXMgY2xvc2VyLCBzbmFwIHRvIHRoZSBvbmUgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUg
ZmxpY2sgZ2VzdHVyZS4KLSAgICBpZiAodmVsb2NpdHkpCisgICAgaWYgKHZlbG9jaXR5KSB7Cisg
ICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9ICh2ZWxvY2l0eSA8IDApID8gbG93ZXJJbmRleCA6IHVw
cGVySW5kZXg7CiAgICAgICAgIHJldHVybiB2ZWxvY2l0eSA8IDAgPyBsb3dlclNuYXBQb3NpdGlv
biA6IHVwcGVyU25hcFBvc2l0aW9uOworICAgIH0KIAogICAgIGJvb2wgaXNDbG9zZXJUb0xvd2Vy
U25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLSBsb3dlclNuYXBQb3NpdGlvbiA8PSB1
cHBlclNuYXBQb3NpdGlvbiAtIHNjcm9sbERlc3RpbmF0aW9uOworICAgIGFjdGl2ZVNuYXBJbmRl
eCA9IGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IGxvd2VySW5kZXggOiB1cHBlckluZGV4
OwogICAgIHJldHVybiBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24gPyBsb3dlclNuYXBQb3Np
dGlvbiA6IHVwcGVyU25hcFBvc2l0aW9uOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCShyZXZpc2lvbiAxODQwMDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMCw2ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgCiAjaWYgUExBVEZPUk0oTUFDKQogICAg
IHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhh
c2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Nyb2xsU25hcE9mZnNldEluZGljZXMo
U2Nyb2xsaW5nTm9kZUlELCBzaXplX3QgLypob3Jpem9udGFsSW5kZXgqLywgc2l6ZV90IC8qdmVy
dGljYWxJbmRleCovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVmZXJUZXN0c0ZvclJlYXNvbihX
aGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVu
dFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Ny
b2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRy
aWdnZXJSZWFzb24pIHsgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAJKHJldmlzaW9uIDE4
NDAwOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5n
VHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsMTcgQEAgdm9pZCBUaHJlYWRl
ZFNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRQogICAgIH0pOwogfQogCit2b2lkIFRocmVhZGVk
U2Nyb2xsaW5nVHJlZTo6dXBkYXRlU2Nyb2xsU25hcE9mZnNldEluZGljZXMoU2Nyb2xsaW5nTm9k
ZUlEIG5vZGVJRCwgc2l6ZV90IGhvcml6b250YWxJbmRleCwgc2l6ZV90IHZlcnRpY2FsSW5kZXgp
Cit7CisgICAgaWYgKCFtX3Njcm9sbGluZ0Nvb3JkaW5hdG9yKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgUmVmUHRyPEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I+IHNjcm9sbGluZ0Nvb3Jk
aW5hdG9yID0gbV9zY3JvbGxpbmdDb29yZGluYXRvcjsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW3Njcm9sbGluZ0Nvb3JkaW5hdG9yLCBub2RlSUQsIGhvcml6b250YWxJbmRleCwgdmVy
dGljYWxJbmRleF0geworICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+dXBkYXRlU2Nyb2xs
U25hcE9mZnNldEluZGljZXMobm9kZUlELCBob3Jpem9udGFsSW5kZXgsIHZlcnRpY2FsSW5kZXgp
OworICAgIH0pOworfQorCiB2b2lkIFRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6ZGVmZXJUZXN0c0Zv
clJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciBp
ZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24g
cmVhc29uKQogewogICAgIGlmICghbV9zY3JvbGxpbmdDb29yZGluYXRvcikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJl
ZS5oCShyZXZpc2lvbiAxODQwMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9U
aHJlYWRlZFNjcm9sbGluZ1RyZWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9sbGluZ1RyZWVOb2RlRGlkU2Nyb2xsKFNj
cm9sbGluZ05vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYgc2Nyb2xsUG9zaXRpb24sIFNldE9yU3lu
Y1Njcm9sbGluZ0xheWVyUG9zaXRpb24gPSBTeW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbikgb3Zl
cnJpZGU7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgaGFuZGxlV2hlZWxFdmVudFBoYXNl
KFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlKSBvdmVycmlkZTsKKyAgICB2b2lkIHVwZGF0ZVNjcm9s
bFNuYXBPZmZzZXRJbmRpY2VzKFNjcm9sbGluZ05vZGVJRCwgc2l6ZV90IGhvcml6b250YWxJbmRl
eCwgc2l6ZV90IHZlcnRpY2FsSW5kZXgpIG92ZXJyaWRlOwogICAgIHZvaWQgZGVmZXJUZXN0c0Zv
clJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwg
V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSBvdmVycmlkZTsK
ICAgICB2b2lkIHJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZl
clRlc3RUcmlnZ2VyUmVhc29uKSBvdmVycmlkZTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0JKHJldmlzaW9uIDE4NDAwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxp
bmdOb2RlTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODQsNiArMTg0LDEyIEBAIHZvaWQgU2Ny
b2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYzoKICNlbmRpZgogCiAgICAgbV9zY3JvbGxD
b250cm9sbGVyLmhhbmRsZVdoZWVsRXZlbnQod2hlZWxFdmVudCk7CisjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKKyAgICBpZiAobV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBP
ZmZzZXRJbmRleERpZENoYW5nZSgpKSB7CisgICAgICAgIHNjcm9sbGluZ1RyZWUoKS51cGRhdGVT
Y3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyhzY3JvbGxpbmdOb2RlSUQoKSwgbV9zY3JvbGxDb250cm9s
bGVyLmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpI
b3Jpem9udGFsKSwgbV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRl
eEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkpOworICAgICAgICBtX3Njcm9sbENv
bnRyb2xsZXIuc2V0U2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKGZhbHNlKTsKKyAgICB9
CisjZW5kaWYKICAgICBzY3JvbGxpbmdUcmVlKCkuc2V0T3JDbGVhckxhdGNoZWROb2RlKHdoZWVs
RXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsKICAgICBzY3JvbGxpbmdUcmVlKCkuaGFuZGxlV2hl
ZWxFdmVudFBoYXNlKHdoZWVsRXZlbnQucGhhc2UoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuY3BwCShyZXZpc2lvbiAxODQwMDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDYgKzg3LDE2IEBAIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OnByb2Nlc3NXaGVlbEV2ZW50Rm8K
IHsKICAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Ny
b2xsU25hcCh3aGVlbEV2ZW50KTsKIH0KKworYm9vbCBTY3JvbGxBbmltYXRvcjo6YWN0aXZlU2Ny
b2xsU25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3Jv
bGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5nZSgpOworfQor
CitzaXplX3QgU2Nyb2xsQW5pbWF0b3I6OmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2Nyb2xsQ29u
dHJvbGxlci5hY3RpdmVTY3JvbGxTbmFwT2Zmc2V0SW5kZXhGb3JBeGlzKGF4aXMpOworfQogI2Vu
ZGlmCiAKIGJvb2wgU2Nyb2xsQW5pbWF0b3I6OmhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5p
bWF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmlt
YXRvci5oCShyZXZpc2lvbiAxODQwMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxBbmltYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMwLDggQEAgcHVibGljOgog
ICAgIHZvaWQgdXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCk7CiAgICAgTGF5b3V0VW5p
dCBzY3JvbGxPZmZzZXRPbkF4aXMoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2b2lkIGltbWVkaWF0ZVNjcm9sbE9uQXhpcyhTY3JvbGxFdmVudEF4aXMsIGZsb2F0IGRlbHRh
KSBvdmVycmlkZTsKKyAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5n
ZSgpIGNvbnN0OworICAgIHNpemVfdCBhY3RpdmVTY3JvbGxTbmFwT2Zmc2V0SW5kZXhGb3JBeGlz
KFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7CiAjZW5kaWYKIAogcHJvdGVjdGVkOgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9uIDE4NDAwOCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTIwLDYgKzE1MjAsMTggQEAgdm9pZCBTY3JvbGxWaWV3OjpzdHlsZURpZENoYW5nZSgpCiAgICAg
ICAgIG1fdmVydGljYWxTY3JvbGxiYXItPnN0eWxlQ2hhbmdlZCgpOwogfQogCisjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsVG9OZWFyZXN0QWN0aXZl
U25hcFBvaW50KCkKK3sKKyAgICBJbnRQb2ludCBjdXJyZW50UG9zaXRpb24gPSBzY3JvbGxQb3Np
dGlvbigpOworICAgIEludFBvaW50IGNvcnJlY3RlZFBvc2l0aW9uID0gbmVhcmVzdEFjdGl2ZVNu
YXBQb2ludChjdXJyZW50UG9zaXRpb24pOworICAgIAorICAgIGlmIChjb3JyZWN0ZWRQb3NpdGlv
biAhPSBjdXJyZW50UG9zaXRpb24pCisgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKGNvcnJlY3Rl
ZFBvc2l0aW9uKTsKK30KKyNlbmRpZgorICAgIAorCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogCiB2
b2lkIFNjcm9sbFZpZXc6OnBsYXRmb3JtQWRkQ2hpbGQoV2lkZ2V0KikKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDE4NDAwOCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMzg3LDYgKzM4Nywx
MCBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjcm9sbFBvc2l0aW9uQ2hh
bmdlZFZpYVBsYXRmb3JtV2lkZ2V0KGNvbnN0IEludFBvaW50JiBvbGRQb3NpdGlvbiwgY29uc3Qg
SW50UG9pbnQmIG5ld1Bvc2l0aW9uKTsKIAorI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisg
ICAgdm9pZCBzY3JvbGxUb05lYXJlc3RBY3RpdmVTbmFwUG9pbnQoKSBvdmVycmlkZTsKKyNlbmRp
ZgorCiBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xsVmlldygpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCShyZXZpc2lvbiAxODQwMDgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDYgKzQ2LDcgQEAgc3RydWN0IFNhbWVTaXplQXNTY3JvbGxhYmxlQXJlYSB7CiAgICAgdmly
dHVhbCB+U2FtZVNpemVBc1Njcm9sbGFibGVBcmVhKCk7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKICAgICB2b2lkKiBwb2ludGVyc1szXTsKKyAgICBzaXplX3QgY3VycmVudEluZGljZXNb
Ml07CiAjZWxzZQogICAgIHZvaWQqIHBvaW50ZXI7CiAjZW5kaWYKQEAgLTE4OCw3ICsxODksMTQg
QEAgYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjbwogICAgIGlmICghaXNT
Y3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOwor
ICAgIGJvb2wgaGFuZGxlZEV2ZW50ID0gc2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50
KHdoZWVsRXZlbnQpOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgaWYgKHNjcm9s
bEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKCkpIHsKKyAg
ICAgICAgc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChzY3JvbGxBbmltYXRvcigp
LmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jp
em9udGFsKSk7CisgICAgICAgIHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHNjcm9s
bEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXM6OlZlcnRpY2FsKSk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGhhbmRsZWRFdmVu
dDsKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC00MDksMTEgKzQxNyw0MyBAQCB2
b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNuYXBPZmZzCiB2b2lkIFNjcm9sbGFibGVB
cmVhOjpjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygpCiB7CiAgICAgbV9ob3Jpem9udGFsU25h
cE9mZnNldHMgPSBudWxscHRyOworICAgIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eCA9IDA7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNsZWFyVmVydGljYWxTbmFwT2Zmc2V0
cygpCiB7CiAgICAgbV92ZXJ0aWNhbFNuYXBPZmZzZXRzID0gbnVsbHB0cjsKKyAgICBtX2N1cnJl
bnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ID0gMDsKK30KKworSW50UG9pbnQgU2Nyb2xsYWJsZUFy
ZWE6Om5lYXJlc3RBY3RpdmVTbmFwUG9pbnQoY29uc3QgSW50UG9pbnQmIGN1cnJlbnRQb3NpdGlv
bikKK3sKKyAgICBpZiAoIWhvcml6b250YWxTbmFwT2Zmc2V0cygpICYmICF2ZXJ0aWNhbFNuYXBP
ZmZzZXRzKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CisgICAgCisgICAgU2Ny
b2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpOwor
ICAgIGlmICghc2Nyb2xsQW5pbWF0b3IpCisgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247
CisgICAgCisgICAgSW50UG9pbnQgY29ycmVjdGVkUG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247
CisgICAgCisgICAgaWYgKGhvcml6b250YWxTbmFwT2Zmc2V0cygpKSB7CisgICAgICAgIGNvbnN0
IGF1dG8mIGhvcml6b250YWwgPSAqaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCk7CisgICAgICAgIAor
ICAgICAgICBzaXplX3QgYWN0aXZlSW5kZXggPSBjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludElu
ZGV4KCk7CisgICAgICAgIGlmIChhY3RpdmVJbmRleCA8IGhvcml6b250YWwuc2l6ZSgpKQorICAg
ICAgICAgICAgY29ycmVjdGVkUG9zaXRpb24uc2V0WChob3Jpem9udGFsW2FjdGl2ZUluZGV4XS50
b0ludCgpKTsKKyAgICB9CisgICAgCisgICAgaWYgKHZlcnRpY2FsU25hcE9mZnNldHMoKSkgewor
ICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0aWNhbCA9ICp2ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7Cisg
ICAgICAgIAorICAgICAgICBzaXplX3QgYWN0aXZlSW5kZXggPSBjdXJyZW50VmVydGljYWxTbmFw
UG9pbnRJbmRleCgpOworICAgICAgICBpZiAoYWN0aXZlSW5kZXggPCB2ZXJ0aWNhbC5zaXplKCkp
CisgICAgICAgICAgICBjb3JyZWN0ZWRQb3NpdGlvbi5zZXRZKHZlcnRpY2FsW2FjdGl2ZUluZGV4
XS50b0ludCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29ycmVjdGVkUG9zaXRpb247CiB9CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShy
ZXZpc2lvbiAxODQwMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDYgKzY2LDEyIEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFZlcnRpY2FsU25hcE9mZnNldHMoc3RkOjp1bmlxdWVfcHRy
PFZlY3RvcjxMYXlvdXRVbml0Pj4pOwogICAgIHZvaWQgY2xlYXJIb3Jpem9udGFsU25hcE9mZnNl
dHMoKTsKICAgICB2b2lkIGNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cygpOworICAgIHNpemVfdCBj
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50
SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4OyB9CisgICAgdm9pZCBzZXRDdXJyZW50SG9yaXpvbnRh
bFNuYXBQb2ludEluZGV4KHNpemVfdCBpbmRleCkgeyBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBv
aW50SW5kZXggPSBpbmRleDsgfQorICAgIHNpemVfdCBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXg7IH0K
KyAgICB2b2lkIHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHNpemVfdCBpbmRleCkg
eyBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ID0gaW5kZXg7IH0KKyAgICBJbnRQb2lu
dCBuZWFyZXN0QWN0aXZlU25hcFBvaW50KGNvbnN0IEludFBvaW50Jik7CisgICAgdmlydHVhbCB2
b2lkIHNjcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2ludCgpIHsgfQogI2VuZGlmCiAKICNpZiBF
TkFCTEUoVE9VQ0hfRVZFTlRTKQpAQCAtMzA1LDYgKzMxMSw4IEBAIHByaXZhdGU6CiAjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPExheW91dFVu
aXQ+PiBtX2hvcml6b250YWxTbmFwT2Zmc2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PExheW91dFVuaXQ+PiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7CisgICAgc2l6ZV90IG1fY3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleCB7IDAgfTsKKyAgICBzaXplX3QgbV9jdXJyZW50VmVy
dGljYWxTbmFwUG9pbnRJbmRleCB7IDAgfTsKICNlbmRpZgogCiAgICAgLy8gVGhlcmUgYXJlIDgg
cG9zc2libGUgY29tYmluYXRpb25zIG9mIHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0aW9uLiBTY3Jv
bGwgb3JpZ2luIHdpbGwgYmUgbm9uLXplcm8gaW4gdGhlIHggb3IgeSBheGlzCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5oCShyZXZp
c2lvbiAxODQwMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250
cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDExIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiAxLjBmOwogICAgIH0KKworICAgIHZpcnR1YWwgaW50IGFjdGl2ZVNj
cm9sbE9mZnNldEluZGV4KFNjcm9sbEV2ZW50QXhpcykgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KICNlbmRpZgogfTsKIApAQCAtMTE0LDYgKzExOSwxMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBwcm9jZXNzV2hlZWxFdmVudEZvclNjcm9sbFNuYXAoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50Jik7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoY29u
c3QgU2Nyb2xsYWJsZUFyZWEmKTsKICAgICB2b2lkIHVwZGF0ZVNjcm9sbFNuYXBQb2ludHMoU2Ny
b2xsRXZlbnRBeGlzLCBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4mKTsKKyAgICBzaXplX3QgYWN0
aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0Owor
ICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXMsIGxvbmcpOworICAgIGJvb2wgYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hh
bmdlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2U7IH0K
KyAgICB2b2lkIHNldFNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5nZShib29sIHN0YXRlKSB7
IG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlID0gc3RhdGU7IH0KICNlbmRpZgogCiBw
cml2YXRlOgpAQCAtMTcyLDYgKzE4MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX21vbWVudHVt
U2Nyb2xsSW5Qcm9ncmVzcyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lnbm9yZU1vbWVudHVtU2Ny
b2xscyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3NuYXBSdWJiZXJiYW5kVGltZXJJc0FjdGl2ZSB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSB7IGZh
bHNlIH07CiB9OwogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tCShyZXZpc2lv
biAxODQwMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9s
bGVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02ODUsNiArNjg1LDI2IEBAIHZvaWQgU2Nyb2xsQ29u
dHJvbGxlcjo6aW5pdGlhbGl6ZUdsaWRlUGEKICAgICBzbmFwU3RhdGUubV9nbGlkZVBoYXNlU2hp
ZnQgPSBhY29zKChzbmFwU3RhdGUubV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIC0gdGFyZ2V0Rmlu
YWxXaGVlbERlbHRhKSAvIChzbmFwU3RhdGUubV9nbGlkZUluaXRpYWxXaGVlbERlbHRhICsgdGFy
Z2V0RmluYWxXaGVlbERlbHRhKSk7CiB9CiAKK3NpemVfdCBTY3JvbGxDb250cm9sbGVyOjphY3Rp
dmVTY3JvbGxTbmFwT2Zmc2V0SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25z
dAoreworICAgIGlmICgoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpICYmICFt
X2hvcml6b250YWxTY3JvbGxTbmFwU3RhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICgo
YXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSAmJiAhbV92ZXJ0aWNhbFNjcm9sbFNu
YXBTdGF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgY29uc3QgU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUmIHNuYXBTdGF0ZSA9IHNjcm9sbFNuYXBQb2ludFN0YXRlKGF4aXMpOworICAg
IHJldHVybiBzbmFwU3RhdGUubV9hY3RpdmVTbmFwSW5kZXg7Cit9CisKK3ZvaWQgU2Nyb2xsQ29u
dHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXMgYXhpcywgbG9uZyBpbmRleCkKK3sKKyAgICBhdXRvKiBzbmFwU3RhdGUgPSAoYXhpcyA9
PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpID8gbV9ob3Jpem9udGFsU2Nyb2xsU25hcFN0
YXRlLmdldCgpIDogbV92ZXJ0aWNhbFNjcm9sbFNuYXBTdGF0ZS5nZXQoKTsKKyAgICBpZiAoIXNu
YXBTdGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc25hcFN0YXRlLT5tX2FjdGl2ZVNuYXBJ
bmRleCA9IGluZGV4OworfQorCiB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OmJlZ2luU2Nyb2xsU25h
cEFuaW1hdGlvbihTY3JvbGxFdmVudEF4aXMgYXhpcywgU2Nyb2xsU25hcFN0YXRlIG5ld1N0YXRl
KQogewogICAgIEFTU0VSVChuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcgfHwg
bmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpTbmFwcGluZyk7CkBAIC03MDEsMTAgKzcyMSwx
MiBAQCB2b2lkIFNjcm9sbENvbnRyb2xsZXI6OmJlZ2luU2Nyb2xsU25hcEFuCiAgICAgCiAgICAg
cHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gPSBzdGQ6Om1pbihzdGQ6Om1heChMYXlvdXRVbml0
KHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uIC8gc2NhbGVGYWN0b3IpLCBzbmFwU3RhdGUubV9z
bmFwT2Zmc2V0cy5maXJzdCgpKSwgc25hcFN0YXRlLm1fc25hcE9mZnNldHMubGFzdCgpKTsKICAg
ICBzbmFwU3RhdGUubV9pbml0aWFsT2Zmc2V0ID0gb2Zmc2V0OwotICAgIHNuYXBTdGF0ZS5tX3Rh
cmdldE9mZnNldCA9IHNjYWxlRmFjdG9yICogY2xvc2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdCwg
ZmxvYXQ+KHNuYXBTdGF0ZS5tX3NuYXBPZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlv
biwgaW5pdGlhbFdoZWVsRGVsdGEpOworICAgIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hh
bmdlID0gZmFsc2U7CisgICAgc25hcFN0YXRlLm1fdGFyZ2V0T2Zmc2V0ID0gc2NhbGVGYWN0b3Ig
KiBjbG9zZXN0U25hcE9mZnNldDxMYXlvdXRVbml0LCBmbG9hdD4oc25hcFN0YXRlLm1fc25hcE9m
ZnNldHMsIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uLCBpbml0aWFsV2hlZWxEZWx0YSwgc25h
cFN0YXRlLm1fYWN0aXZlU25hcEluZGV4KTsKICAgICBpZiAoc25hcFN0YXRlLm1faW5pdGlhbE9m
ZnNldCA9PSBzbmFwU3RhdGUubV90YXJnZXRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKICAgICAK
KyAgICBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSA9IHRydWU7CiAgICAgc25hcFN0
YXRlLm1fY3VycmVudFN0YXRlID0gbmV3U3RhdGU7CiAgICAgaWYgKG5ld1N0YXRlID09IFNjcm9s
bFNuYXBTdGF0ZTo6R2xpZGluZykgewogICAgICAgICBzbmFwU3RhdGUubV9zaG91bGRPdmVycmlk
ZVdoZWVsRXZlbnQgPSB0cnVlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCShyZXZpc2lvbiAxODQwMDgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMiArNTksMTMgQEAgc3RydWN0IFNjcm9sbFNuYXBB
bmltYXRvclN0YXRlIHsKICAgICBMYXlvdXRVbml0IG1fdGFyZ2V0T2Zmc2V0OwogICAgIC8vIFVz
ZWQgdG8gdHJhY2sgZ2xpZGluZyBiZWhhdmlvci4KICAgICBMYXlvdXRVbml0IG1fYmVnaW5UcmFj
a2luZ1doZWVsRGVsdGFPZmZzZXQ7Ci0gICAgaW50IG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkOwor
ICAgIGludCBtX251bVdoZWVsRGVsdGFzVHJhY2tlZCB7IDAgfTsKKyAgICBzaXplX3QgbV9hY3Rp
dmVTbmFwSW5kZXggeyAwIH07CiAgICAgZmxvYXQgbV93aGVlbERlbHRhV2luZG93W3doZWVsRGVs
dGFXaW5kb3dTaXplXTsKLSAgICBmbG9hdCBtX2dsaWRlTWFnbml0dWRlOwotICAgIGZsb2F0IG1f
Z2xpZGVQaGFzZVNoaWZ0OwotICAgIGZsb2F0IG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YTsKLSAg
ICBib29sIG1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50OworICAgIGZsb2F0IG1fZ2xpZGVNYWdu
aXR1ZGUgeyAwIH07CisgICAgZmxvYXQgbV9nbGlkZVBoYXNlU2hpZnQgeyAwIH07CisgICAgZmxv
YXQgbV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIHsgMCB9OworICAgIGJvb2wgbV9zaG91bGRPdmVy
cmlkZVdoZWVsRXZlbnQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xs
U25hcEFuaW1hdG9yU3RhdGUubW0JKHJldmlzaW9uIDE4NDAwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zNywxMSArMzcsNiBAQCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6U2Nyb2xsU25hcEFu
aW1hCiAgICAgLCBtX2luaXRpYWxPZmZzZXQoMCkKICAgICAsIG1fdGFyZ2V0T2Zmc2V0KDApCiAg
ICAgLCBtX2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0KDApCi0gICAgLCBtX251bVdoZWVs
RGVsdGFzVHJhY2tlZCgwKQotICAgICwgbV9nbGlkZU1hZ25pdHVkZSgwKQotICAgICwgbV9nbGlk
ZVBoYXNlU2hpZnQoMCkKLSAgICAsIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSgwKQotICAgICwg
bV9zaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoZmFsc2UpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTg0MDA4KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIwNCw2ICszMjA0LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKCkK
ICAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CiAg
ICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25jYXN0PEhU
TUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkpOwogfQor
Cit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb05lYXJlc3RBY3RpdmVTbmFwUG9pbnQoKQorewor
ICAgIEludFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7CisgICAgSW50
UG9pbnQgY29ycmVjdGVkUG9zaXRpb24gPSBuZWFyZXN0QWN0aXZlU25hcFBvaW50KGN1cnJlbnRQ
b3NpdGlvbik7CisgICAgCisgICAgaWYgKGNvcnJlY3RlZFBvc2l0aW9uICE9IGN1cnJlbnRQb3Np
dGlvbikKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQoSW50U2l6ZShjb3JyZWN0ZWRQb3NpdGlvbi54
KCksIGNvcnJlY3RlZFBvc2l0aW9uLnkoKSkpOworfQogI2VuZGlmCiAKIGludCBSZW5kZXJMYXll
cjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBy
ZWxldmFuY3kpIGNvbnN0CkBAIC0zNDk0LDcgKzM1MDMsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMCiAgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0
aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT51cGRh
dGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPnVw
ZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOworICAgIHNjcm9sbFRvTmVhcmVzdEFjdGl2
ZVNuYXBQb2ludCgpOwogI2VuZGlmCiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiAxODQwMDgpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDYgKzIyNCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVB
bmNlc3RvcigpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzY3JvbGxU
b05lYXJlc3RBY3RpdmVTbmFwUG9pbnQoKSBvdmVycmlkZTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oSU9TKQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0MDMzKQorKysgU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDUtMDgg
IEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2Nyb2xsIHNu
YXAgbG9naWMgc2hvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHJlc2l6aW5nIHRoZSBXZWJWaWV3Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTAKKyAg
ICAgICAgPHJkYXI6Ly9wcm9ibGVtLzIwMTI1MDg4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xs
aW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbToKKyAgICAgICAgKC1bV0tPdmVyZmxv
d1Njcm9sbFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0
eTp0YXJnZXRDb250ZW50T2Zmc2V0Ol0pOiBNb2RpZnkgdXNlIG9mICdjbG9zZXN0U25hcE9mZnNl
dCcgdG8gc2F0aXNmeSB0aGUgYWRkaXRpb25hbAorICAgICAgICBhcmd1bWVudCBJIGFkZGVkLiBU
aGlzIGlzIGN1cnJlbnRseSBub3QgdXNlZCBmb3IgYW55dGhpbmcgb24gaU9TLgorCiAyMDE1LTA1
LTA4ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBTaHVmZmxlIHRv
dWNoLXJlbGF0ZWQgY29kZSB0byBrZWVwIHRoZSBpbnRlcm5hbCBidWlsZHMgd29ya2luZwpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92
ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2Rl
SU9TLm1tCShyZXZpc2lvbiAxODQwMDgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Ny
b2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCwxMCArODAsMTEgQEAgLSAodm9pZClzY3JvbGxWaWV3V2lsbEJlZ2lu
RHJhZ2dpbmc6KFVJUwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAtICh2b2lkKXNjcm9s
bFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAqKXNjcm9sbFZpZXcgd2l0aFZlbG9j
aXR5OihDR1BvaW50KXZlbG9jaXR5IHRhcmdldENvbnRlbnRPZmZzZXQ6KGlub3V0IENHUG9pbnQg
Kil0YXJnZXRDb250ZW50T2Zmc2V0CiB7CisgICAgc2l6ZV90IGlnbm9yZTsKICAgICBpZiAoIV9z
Y3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKQotICAg
ICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gY2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQsIENH
RmxvYXQ+KF9zY3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIHRhcmdl
dENvbnRlbnRPZmZzZXQtPngsIHZlbG9jaXR5LngpOworICAgICAgICB0YXJnZXRDb250ZW50T2Zm
c2V0LT54ID0gY2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQsIENHRmxvYXQ+KF9zY3JvbGxpbmdUcmVl
Tm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZl
bG9jaXR5LngsIGlnbm9yZSk7CiAgICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2Fs
U25hcE9mZnNldHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkg
PSBjbG9zZXN0U25hcE9mZnNldDxmbG9hdCwgQ0dGbG9hdD4oX3Njcm9sbGluZ1RyZWVOb2RlLT52
ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5Lnkp
OworICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gY2xvc2VzdFNuYXBPZmZzZXQ8Zmxv
YXQsIENHRmxvYXQ+KF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0cygpLCB0
YXJnZXRDb250ZW50T2Zmc2V0LT55LCB2ZWxvY2l0eS55LCBpZ25vcmUpOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252864</attachid>
            <date>2015-05-11 10:32:12 -0700</date>
            <delta_ts>2015-05-11 11:10:49 -0700</delta_ts>
            <desc>Patch v2 (Updated with Darin&apos;s comments)</desc>
            <filename>bug-142590-20150511103051.patch</filename>
            <type>text/plain</type>
            <size>34661</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxNS0wNS0xMSAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGwgc25hcCBsb2dp
YyBzaG91bGQgYmUgdHJpZ2dlcmVkIHdoZW4gcmVzaXppbmcgdGhlIFdlYlZpZXcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5MAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjAxMjUwODg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGVzdHMgY29taW5nIGluIGEgc2Vjb25kIHBhdGNoLgorCisgICAg
ICAgIFJlc2l6aW5nIG9mIHRoZSBtYWluIGZyYW1lIG9yIG92ZXJmbG93IHJlZ2lvbnMgd2FzIHBy
b3Blcmx5IHJlY2FsY3VsYXRpbmcgdGhlIHNjcm9sbCBzbmFwIHBvaW50cywKKyAgICAgICAgYnV0
IHRoZXJlIHdhcyBubyBjb2RlIHRvIGhvbm9yIHRoZXNlIHZhbHVlcyB3aGVuIHdpbmRvdyByZXNp
emluZyB3YXMgb2NjdXJyaW5nLiBUaGUgY29ycmVjdGlvbiB3YXMKKyAgICAgICAgaGFuZGxlZCBp
biB0d28gd2F5czoKKyAgICAgICAgMS4gU2Nyb2xsaW5nIHRocmVhZCBvcGVyYXRpb25zIHRoYXQg
bW92ZWQgdG8gbmV3IHNuYXAgcG9pbnRzIG5lZWRlZCB0byBub3RpZnkgdGhlIG1haW4gdGhyZWFk
IHRoYXQKKyAgICAgICAgICAgaXQgaGFkIHNoaWZ0ZWQgdG8gYSBuZXcgc25hcCBwb2ludCwgc28g
dGhhdCB0aGUgcmVzaXplIGNvZGUgKHdoaWNoIGhhcHBlbnMgb24gdGhlIG1haW4gdGhyZWFkKQor
ICAgICAgICAgICBjb3VsZCBlbnN1cmUgdGhhdCB3ZSBzdGF5ZWQgY2xhbXBlZCB0byB0aGUgY29y
cmVjdCAndGlsZScgaW4gdGhlIHNuYXAgcmVnaW9uLgorICAgICAgICAyLiBNYWluIHRocmVhZCAo
b3ZlcmZsb3cpIHJlc2l6ZXMgd2VyZSBsaWtld2lzZSBtaXNzaW5nIGNvZGUgdG8gaG9ub3IgdGhl
IGN1cnJlbnQgc25hcCBwb3NpdGlvbgorICAgICAgICAgICBhZnRlciByZXNpemluZyBjYWxjdWxh
dGlvbnMgd2VyZSBjb21wbGV0ZS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIHJlcXVpcmVk
IHRoZSBhZGRpdGlvbiBvZiB0d28gaW5kaWNlcyB0byB0aGUgc2Nyb2xsYWJsZSBhcmVhIHRvIHRy
YWNrIHdoaWNoIHNjcm9sbAorICAgICAgICBzbmFwIHBvaW50IHdhcyBjdXJyZW50bHkgYmVpbmcg
dXNlZC4gV2UgZG9uJ3QgYm90aGVyIHdpdGggYSAnbm9uZScgY2FzZSBiZWNhdXNlIHlvdSBjYW5u
b3QgaGF2ZSBhCisgICAgICAgICdub25lJyBzdGF0ZSB3aGVuIHlvdSBoYXZlIGFuIGFjdGl2ZSBz
ZXQgb2Ygc2Nyb2xsIHNuYXAgcG9pbnRzLCBhbmQgd2UgZG8gbm90IGV4ZWN1dGUgdGhpcyBjb2Rl
CisgICAgICAgIGlmIHRoZSBzY3JvbGwgc25hcCBwb2ludHMgYXJlIG51bGwuCisKKyAgICAgICAg
VGhlIEZyYW1lVmlldyBjb2RlIHdhcyBjb21wdXRpbmcgdXBkYXRlZCBzbmFwIG9mZnNldHMgYWZ0
ZXIgaXQgaGFkIGRpc3BhdGNoZWQgZnJhbWUgdmlldyBsYXlvdXQKKyAgICAgICAgaW5mb3JtYXRp
b24gdG8gdGhlIHNjcm9sbGluZyB0aHJlYWQsIHdoaWNoIHdhcyB3cm9uZy4gVGhpcyB3YXMgYWxz
byBjb3JyZWN0ZWQuCisKKyAgICAgICAgSSB0aGluayBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byB0
cmFjayBhbGwgb2YgdGhpcyBzdGF0ZSBpbnNpZGUgdGhlIFNjcm9sbENvbnRyb2xsZXIsIGJ1dCB0
aGUgY3VycmVudAorICAgICAgICBzY3JvbGwgc25hcCBhcmNoaXRlY3R1cmUgZGVzdHJveXMgYW5k
IHJlY3JlYXRlcyB0aGUgc3RhdGUgZWFjaCB0aW1lIGEgbmV3IHNldCBvZiBpbnRlcmFjdGlvbnMg
c3RhcnRzLgorICAgICAgICBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiB0aGUgZnV0dXJlLCB3aGlj
aCB3b3VsZCBhbGxvdyB1cyB0byByZW1vdmUgc29tZSBvZiB0aGlzIGxvY2FsIHN0YXRlLgorCisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKTogTWFrZSBzdXJlICd1cGRhdGVTbmFwT2Zmc2V0cycg
aXMgY2FsbGVkIHByaW9yIHRvCisgICAgICAgIGNhbGxpbmcgJ2ZyYW1lVmlld0xheW91dFVwZGF0
ZWQnIHNvIHRoZSBzY3JvbGxpbmcgdGhyZWFkIGdldHMgY29ycmVjdCB1cGRhdGVkIHBvaW50cy4g
QWRkIGEgbmV3CisgICAgICAgIGNhbGwgdG8gJ3Njcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2lu
dCcsIHdoaWNoIHdpbGwga2VlcCB1cyBvbiBvdXIgY3VycmVudCBzbmFwIHBvaW50IGR1cmluZwor
ICAgICAgICByZXNpemUgKGlmIGFwcHJvcHJpYXRlKS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKTogQWRk
ZWQuIFRoaXMgZmluZHMgYW5kIG5vdGlmaWVzCisgICAgICAgIHRoZSBjb3JyZWN0IHNjcm9sbCBy
ZWdpb24gd2hlbiBhIG5ldyBzbmFwIHBvc2l0aW9uIChpbmRleCkgaGFzIGJlZW4gc2VsZWN0ZWQg
YnkgdXNlciBpbnRlcmFjdGlvbiBvbgorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRlZmVyVGVzdHNGb3JS
ZWFzb24pOiBBZGRlZCBhbiBhc3NlcnRpb24gZm9yICdpc01haW5UaHJlYWQnLgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGVzdERlZmVycmFsRm9y
UmVhc29uKTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvci5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zm
c2V0cy5oOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXQpOiBNb2RpZmllZCB0
byBhbHNvIHJldHVybiB0aGUgc2VsZWN0ZWQgc25hcCBwb2ludCBpbmRleCBzbyB3ZSBjYW4gdHJh
Y2sKKyAgICAgICAgaXQgdG8gaGFuZGxlIHJlc2l6ZSBvcGVyYXRpb25zLgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWU6OnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhy
ZWFkZWRTY3JvbGxpbmdUcmVlOjp1cGRhdGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyk6IEFkZGVk
IG1ldGhvZCB0byBkaXNwYXRjaCB0aGUgYWN0aXZlCisgICAgICAgIGhvcml6b250YWwgYW5kIHZl
cnRpY2FsIHNjcm9sbCBzbmFwIGluZGljZXMgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQuCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmg6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpo
YW5kbGVXaGVlbEV2ZW50KTogQWZ0ZXIgdGhlIHNjcm9sbCBjb250cm9sbGVyIHByb2Nlc3Nlcwor
ICAgICAgICB0aGUgY3VycmVudCBldmVudCwgbm90aWZ5IHRoZSBtYWluIHRocmVhZCBvZiBhbnkg
Y2hhbmdlIGluIHRoZSBhY3RpdmUgc2Nyb2xsIHNuYXAgaW5kZXguCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
OmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5nZSk6IEFkZGVkIG1ldGhvZCB0byBh
bGxvdyBTY3JvbGxBbmltYXRvcgorICAgICAgICBjbGllbnRzIHRvIGZpbmQgb3V0IGFib3V0IHRo
ZSBjdXJyZW50IHNjcm9sbCBzbmFwIHN0YXRlLCB3aGljaCBpcyBvbmx5IGtub3duIGJ5IHRoZSBT
Y3JvbGxDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmFjdGl2
ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBv
aW50KTogQWRkZWQgbWV0aG9kIHRoYXQgYWxsb3dzIHVzIHRvIHNldCBzY3JvbGwgcG9zaXRpb24K
KyAgICAgICAgdG8gb25lIG9mIG91ciBhY3RpdmUgc2Nyb2xsIHNuYXAgb2Zmc2V0cy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVs
RXZlbnQpOiBJZiB0aGUgYWN0aXZlIHNjcm9sbCBzbmFwIG9mZnNldCBoYXMgY2hhbmdlZCwgbWFr
ZSBzdXJlIHdlCisgICAgICAgIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyB2YWx1ZXMgZm9yIHBvdGVu
dGlhbCByZXNpemUgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
OjpjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cyk6IE1ha2Ugc3VyZSB0byBhbHNvIGNsZWFyIG91
dCB0aGUgY3VycmVudCBzbmFwIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFy
ZWE6OmNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYWJsZUFyZWE6Om5lYXJlc3RBY3RpdmVTbmFwUG9pbnQpOiBOZXcgbWV0aG9kIHRoYXQg
cmV0dXJucyBhbiB1cGRhdGVkIEludFBvaW50IHJlZmxlY3RpbmcKKyAgICAgICAgdGhlIHByb3Bl
ciBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIGFjdGl2ZSBzY3JvbGwgc25hcCBvZmZzZXQu
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGFibGVBcmVhOjpjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudEhvcml6b250YWxT
bmFwUG9pbnRJbmRleCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6
OmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb05lYXJlc3RBY3Rp
dmVTbmFwUG9pbnQpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250
cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyQ2xpZW50OjphY3Rp
dmVTY3JvbGxPZmZzZXRJbmRleCk6IEFkZGVkIG5ldyBtZXRob2QgZm9yIGNsaWVudHMgdG8gaW1w
bGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xs
U25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxDb250cm9sbGVyOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UpOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9y
QXhpcyk6IEhlbHBlciBtZXRob2QgdG8gcmV0dXJuIGN1cnJlbnQgYWN0aXZlCisgICAgICAgIGlu
ZGV4IChpZiBhcHBsaWNhYmxlKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6
OnNldEFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMpOiBIZWxwZXIgZnVuY3Rpb24g
dG8gc2FmZWx5IHNldAorICAgICAgICB0aGUgY3VycmVudCBhY3RpdmUgaW5kZXguCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24pOiBV
cGRhdGVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyBhY3RpdmUgc2Nyb2xsIHNuYXAKKyAgICAg
ICAgaW5kZXgsIGFzIHdlbGwgYXMgd2hldGhlciB0aGUgY3VycmVudCBhbmltYXRpb24gYWN0dWFs
bHkgY2hhbmdlZCB0aGUgYWN0aXZlIHNuYXAgcG9pbnQgb2Zmc2V0LgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6IFJldmlzZSB0byB1c2UgbW9kZXJu
IEMrKyBpbml0aWFsaXplcnMsIGFuZCB0byB0cmFjayBhIG5ldyBpbmRleAorICAgICAgICB0aGF0
IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc2Nyb2xsIHNuYXAgb2Zmc2V0LgorICAgICAgICAqIHBs
YXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlKTogVXBk
YXRlIGZvciBtb2Rlcm4gQysrIHN5bnRheC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvTmVhcmVzdEFj
dGl2ZVNuYXBQb2ludCk6IE5ldyBtZXRob2QgdG8gc2V0IHNjcm9sbCBwb3NpdGlvbiB0byBiZSBv
bmUgb2Ygb3VyCisgICAgICAgIGFjdGl2ZSBzY3JvbGwgc25hcCBwb2ludHMuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KTogQWRkIGEg
bmV3IGNhbGwgdG8gJ3Njcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2ludCcgc28gdGhhdAorICAg
ICAgICB3ZSBzdGF5IG9uIHRoZSBjdXJyZW50IHNjcm9sbCBzbmFwIG9mZnNldCBkdXJpbmcgcmVz
aXppbmcuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisKIDIwMTUtMDUtMTEg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkNvbnRlbnQg
Y3Jhc2ggdW5kZXIgY29tLmFwcGxlLldlYkNvcmU6IFdlYkNvcmU6OldlYktpdENTU1Jlc291cmNl
VmFsdWU6OmlzQ1NTVmFsdWVOb25lIGNvbnN0ICsgNgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAkocmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTc0LDcgKzI5NzQsMTEgQEAgdm9pZCBGcmFtZVZp
ZXc6OnBlcmZvcm1Qb3N0TGF5b3V0VGFza3MoKQogICAgIGZyYW1lKCkubG9hZGVyKCkuY2xpZW50
KCkuZGlzcGF0Y2hEaWRMYXlvdXQoKTsKIAogICAgIHVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwot
ICAgIAorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB1cGRhdGVTbmFwT2Zmc2V0
cygpOworI2VuZGlmCisKICAgICAvLyBsYXlvdXQoKSBwcm90ZWN0cyBGcmFtZVZpZXcsIGJ1dCBp
dCBzdGlsbCBjYW4gZ2V0IGRlc3Ryb3llZCB3aGVuIHVwZGF0ZUVtYmVkZGVkT2JqZWN0cygpCiAg
ICAgLy8gaXMgY2FsbGVkIHRocm91Z2ggdGhlIHBvc3QgbGF5b3V0IHRpbWVyLgogICAgIFJlZjxG
cmFtZVZpZXc+IHByb3RlY3QoKnRoaXMpOwpAQCAtMjk5NiwxNCArMzAwMCwxMCBAQCB2b2lkIEZy
YW1lVmlldzo6cGVyZm9ybVBvc3RMYXlvdXRUYXNrcygpCiAgICAgc2VuZFJlc2l6ZUV2ZW50SWZO
ZWVkZWQoKTsKICAgICB2aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwogCi0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICBpZiAoIWZyYW1lKCkuaXNNYWluRnJhbWUoKSkgewotICAgICAg
ICB1cGRhdGVTbmFwT2Zmc2V0cygpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaWYgKFNj
cm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
LSAgICAgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+dXBkYXRlU2Nyb2xsQW5pbWF0b3Jz
QW5kVGltZXJzKCk7Ci0jZW5kaWYKLSAgICB9CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkg
JiYgUExBVEZPUk0oTUFDKQorICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3Ig
PSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHNjcm9sbEFuaW1hdG9yLT51cGRh
dGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsKKyAgICBzY3JvbGxUb05lYXJlc3RBY3RpdmVT
bmFwUG9pbnQoKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2
aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2Miw4ICs1NjIsMzMgQEAg
U3RyaW5nIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbAogfQogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCit2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFNu
YXBPZmZzZXRJbmRpY2VzKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVk
IGhvcml6b250YWxJbmRleCwgdW5zaWduZWQgdmVydGljYWxJbmRleCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIAorICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZVZpZXdGb3JTY3JvbGxpbmdO
b2RlKHNjcm9sbGluZ05vZGVJRCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoc2Nyb2xsaW5nTm9kZUlEID09IGZyYW1lVmlldy0+c2Nyb2xsTGF5
ZXJJRCgpKSB7CisgICAgICAgIGZyYW1lVmlldy0+c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9p
bnRJbmRleChob3Jpem9udGFsSW5kZXgpOworICAgICAgICBmcmFtZVZpZXctPnNldEN1cnJlbnRW
ZXJ0aWNhbFNuYXBQb2ludEluZGV4KHZlcnRpY2FsSW5kZXgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIC8vIE92ZXJmbG93LXNjcm9sbCBhcmVhLgorICAgIGlmIChTY3JvbGxh
YmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSBmcmFtZVZpZXctPnNjcm9sbGFibGVBcmVhRm9yU2Ny
b2xsTGF5ZXJJRChzY3JvbGxpbmdOb2RlSUQpKSB7CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5z
ZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGhvcml6b250YWxJbmRleCk7CisgICAg
ICAgIHNjcm9sbGFibGVBcmVhLT5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCh2ZXJ0
aWNhbEluZGV4KTsKKyAgICB9Cit9CisKIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVh
SWRlbnRpZmllciBpZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRy
aWdnZXJSZWFzb24gcmVhc29uKSBjb25zdAogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgaWYgKCFtX3BhZ2UgfHwgIW1fcGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2Vycygp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTU3NSw2ICs2MDAsNyBAQCB2b2lkIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmRlZmVyVGVzCiAKIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
cjo6cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Ny
b2xsYWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6
RGVmZXJUZXN0VHJpZ2dlclJlYXNvbiByZWFzb24pIGNvbnN0CiB7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdlLT5leHBlY3RzV2hlZWxFdmVu
dFRyaWdnZXJzKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAko
cmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjaGVkdWxlVXBkYXRlU2Nyb2xsUG9zaXRp
b25BZnRlckFzeW5jU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYsIGJv
b2wgcHJvZ3JhbW1hdGljU2Nyb2xsLCBTZXRPclN5bmNTY3JvbGxpbmdMYXllclBvc2l0aW9uKTsK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcE9mZnNldElu
ZGljZXMoU2Nyb2xsaW5nTm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsSW5kZXgsIHVuc2lnbmVk
IHZlcnRpY2FsSW5kZXgpOwogICAgIHZvaWQgZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50
VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmln
Z2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZVRlc3RE
ZWZlcnJhbEZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRl
bnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSBj
b25zdDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Nj
cm9sbFNuYXBPZmZzZXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQ0LDE3ICs0NCwxOSBAQCB2b2lkIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJs
ZUFyZWEoCiAvLyBhcyB3ZWxsIGFzIGEgVmVsb2NpdHlUeXBlIGluZGljYXRpbmcgdGhlIHZlbG9j
aXR5IChlLmcuIGZsb2F0LCBDR0Zsb2F0LCBldGMuKSBUaGlzIGZ1bmN0aW9uIGlzIHRlbXBsYXRl
ZCBiZWNhdXNlIHRoZSBVSSBwcm9jZXNzIHdpbGwgbm93CiAvLyB1c2UgcGl4ZWwgc25hcHBlZCBm
bG9hdHMgdG8gcmVwcmVzZW50IHNuYXAgb2Zmc2V0cyByYXRoZXIgdGhhbiBMYXlvdXRVbml0cy4K
IHRlbXBsYXRlIDx0eXBlbmFtZSBMYXlvdXRUeXBlLCB0eXBlbmFtZSBWZWxvY2l0eVR5cGU+Ci1M
YXlvdXRUeXBlIGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3RvcjxMYXlvdXRUeXBlPiYgc25h
cE9mZnNldHMsIExheW91dFR5cGUgc2Nyb2xsRGVzdGluYXRpb24sIFZlbG9jaXR5VHlwZSB2ZWxv
Y2l0eSkKK0xheW91dFR5cGUgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFR5
cGU+JiBzbmFwT2Zmc2V0cywgTGF5b3V0VHlwZSBzY3JvbGxEZXN0aW5hdGlvbiwgVmVsb2NpdHlU
eXBlIHZlbG9jaXR5LCB1bnNpZ25lZCYgYWN0aXZlU25hcEluZGV4KQogewogICAgIEFTU0VSVChz
bmFwT2Zmc2V0cy5zaXplKCkpOworICAgIGFjdGl2ZVNuYXBJbmRleCA9IDA7CiAgICAgaWYgKHNj
cm9sbERlc3RpbmF0aW9uIDw9IHNuYXBPZmZzZXRzLmZpcnN0KCkpCiAgICAgICAgIHJldHVybiBz
bmFwT2Zmc2V0cy5maXJzdCgpOwogCisgICAgYWN0aXZlU25hcEluZGV4ID0gc25hcE9mZnNldHMu
c2l6ZSgpIC0gMTsKICAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPj0gc25hcE9mZnNldHMubGFz
dCgpKQogICAgICAgICByZXR1cm4gc25hcE9mZnNldHMubGFzdCgpOwogCiAgICAgc2l6ZV90IGxv
d2VySW5kZXggPSAwOwotICAgIHNpemVfdCB1cHBlckluZGV4ID0gc25hcE9mZnNldHMuc2l6ZSgp
IC0gMTsKKyAgICBzaXplX3QgdXBwZXJJbmRleCA9IGNsYW1wVG88dW5zaWduZWQ+KHNuYXBPZmZz
ZXRzLnNpemUoKSkgLSAxOwogICAgIHdoaWxlIChsb3dlckluZGV4IDwgdXBwZXJJbmRleCAtIDEp
IHsKICAgICAgICAgc2l6ZV90IG1pZGRsZUluZGV4ID0gKGxvd2VySW5kZXggKyB1cHBlckluZGV4
KSAvIDI7CiAgICAgICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA8IHNuYXBPZmZzZXRzW21pZGRs
ZUluZGV4XSkKQEAgLTcwLDEwICs3MiwxMyBAQCBMYXlvdXRUeXBlIGNsb3Nlc3RTbmFwT2Zmc2V0
KGNvbnN0IFZlY3RvCiAgICAgTGF5b3V0VHlwZSBsb3dlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZz
ZXRzW2xvd2VySW5kZXhdOwogICAgIExheW91dFR5cGUgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFw
T2Zmc2V0c1t1cHBlckluZGV4XTsKICAgICAvLyBOb256ZXJvIHZlbG9jaXR5IGluZGljYXRlcyBh
IGZsaWNrIGdlc3R1cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgc25h
cCB0byB0aGUgb25lIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZsaWNrIGdlc3R1cmUuCi0gICAg
aWYgKHZlbG9jaXR5KQorICAgIGlmICh2ZWxvY2l0eSkgeworICAgICAgICBhY3RpdmVTbmFwSW5k
ZXggPSAodmVsb2NpdHkgPCAwKSA/IGNsYW1wVG88dW5zaWduZWQ+KGxvd2VySW5kZXgpIDogY2xh
bXBUbzx1bnNpZ25lZD4odXBwZXJJbmRleCk7CiAgICAgICAgIHJldHVybiB2ZWxvY2l0eSA8IDAg
PyBsb3dlclNuYXBQb3NpdGlvbiA6IHVwcGVyU25hcFBvc2l0aW9uOworICAgIH0KIAogICAgIGJv
b2wgaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID0gc2Nyb2xsRGVzdGluYXRpb24gLSBsb3dl
clNuYXBQb3NpdGlvbiA8PSB1cHBlclNuYXBQb3NpdGlvbiAtIHNjcm9sbERlc3RpbmF0aW9uOwor
ICAgIGFjdGl2ZVNuYXBJbmRleCA9IGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IGxvd2Vy
SW5kZXggOiB1cHBlckluZGV4OwogICAgIHJldHVybiBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRp
b24gPyBsb3dlclNuYXBQb3NpdGlvbiA6IHVwcGVyU25hcFBvc2l0aW9uOwogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCShyZXZpc2lv
biAxODQxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgCiAjaWYg
UExBVEZPUk0oTUFDKQogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxh
dGZvcm1XaGVlbEV2ZW50UGhhc2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlU2Nyb2xs
U25hcE9mZnNldEluZGljZXMoU2Nyb2xsaW5nTm9kZUlELCB1bnNpZ25lZCAvKmhvcml6b250YWxJ
bmRleCovLCB1bnNpZ25lZCAvKnZlcnRpY2FsSW5kZXgqLykgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGRlZmVyVGVzdHNGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJl
YUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNv
bikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZVRlc3REZWZlcnJhbEZvclJlYXNvbihXaGVl
bEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRl
c3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSB7IH0KICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGlu
Z1RyZWUuY3BwCShyZXZpc2lvbiAxODQxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNiAr
MTIzLDE3IEBAIHZvaWQgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpoYW5kbGVXaGVlbEUKICAgICB9
KTsKIH0KIAordm9pZCBUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OnVwZGF0ZVNjcm9sbFNuYXBPZmZz
ZXRJbmRpY2VzKFNjcm9sbGluZ05vZGVJRCBub2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWxJbmRl
eCwgdW5zaWduZWQgdmVydGljYWxJbmRleCkKK3sKKyAgICBpZiAoIW1fc2Nyb2xsaW5nQ29vcmRp
bmF0b3IpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8QXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvcj4gc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBtX3Njcm9sbGluZ0Nvb3JkaW5hdG9y
OworICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbc2Nyb2xsaW5nQ29vcmRpbmF0b3IsIG5v
ZGVJRCwgaG9yaXpvbnRhbEluZGV4LCB2ZXJ0aWNhbEluZGV4XSB7CisgICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT51cGRhdGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyhub2RlSUQsIGhvcml6
b250YWxJbmRleCwgdmVydGljYWxJbmRleCk7CisgICAgfSk7Cit9CisKIHZvaWQgVGhyZWFkZWRT
Y3JvbGxpbmdUcmVlOjpkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6
U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dl
cjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbiByZWFzb24pCiB7CiAgICAgaWYgKCFtX3Njcm9sbGlu
Z0Nvb3JkaW5hdG9yKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFk
ZWRTY3JvbGxpbmdUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC02Miw2ICs2Miw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc2Ny
b2xsaW5nVHJlZU5vZGVEaWRTY3JvbGwoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBGbG9hdFBvaW50
JiBzY3JvbGxQb3NpdGlvbiwgU2V0T3JTeW5jU2Nyb2xsaW5nTGF5ZXJQb3NpdGlvbiA9IFN5bmNT
Y3JvbGxpbmdMYXllclBvc2l0aW9uKSBvdmVycmlkZTsKICNpZiBQTEFURk9STShNQUMpCiAgICAg
dm9pZCBoYW5kbGVXaGVlbEV2ZW50UGhhc2UoUGxhdGZvcm1XaGVlbEV2ZW50UGhhc2UpIG92ZXJy
aWRlOworICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcE9mZnNldEluZGljZXMoU2Nyb2xsaW5nTm9k
ZUlELCB1bnNpZ25lZCBob3Jpem9udGFsSW5kZXgsIHVuc2lnbmVkIHZlcnRpY2FsSW5kZXgpIG92
ZXJyaWRlOwogICAgIHZvaWQgZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdn
ZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZl
clRlc3RUcmlnZ2VyUmVhc29uKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZVRlc3REZWZlcnJh
bEZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmll
ciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSBvdmVycmlk
ZTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9s
bGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVN
YWMubW0JKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0xODQsNiArMTg0LDEyIEBAIHZvaWQgU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9k
ZU1hYzoKICNlbmRpZgogCiAgICAgbV9zY3JvbGxDb250cm9sbGVyLmhhbmRsZVdoZWVsRXZlbnQo
d2hlZWxFdmVudCk7CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICBpZiAobV9zY3Jv
bGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5nZSgpKSB7Cisg
ICAgICAgIHNjcm9sbGluZ1RyZWUoKS51cGRhdGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyhzY3Jv
bGxpbmdOb2RlSUQoKSwgbV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJ
bmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSwgbV9zY3JvbGxDb250cm9s
bGVyLmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpW
ZXJ0aWNhbCkpOworICAgICAgICBtX3Njcm9sbENvbnRyb2xsZXIuc2V0U2Nyb2xsU25hcE9mZnNl
dEluZGV4RGlkQ2hhbmdlKGZhbHNlKTsKKyAgICB9CisjZW5kaWYKICAgICBzY3JvbGxpbmdUcmVl
KCkuc2V0T3JDbGVhckxhdGNoZWROb2RlKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05vZGVJRCgpKTsK
ICAgICBzY3JvbGxpbmdUcmVlKCkuaGFuZGxlV2hlZWxFdmVudFBoYXNlKHdoZWVsRXZlbnQucGhh
c2UoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3Iu
Y3BwCShyZXZpc2lvbiAxODQxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDE2IEBAIGJvb2wgU2Nyb2xs
QW5pbWF0b3I6OnByb2Nlc3NXaGVlbEV2ZW50Rm8KIHsKICAgICByZXR1cm4gbV9zY3JvbGxDb250
cm9sbGVyLnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCh3aGVlbEV2ZW50KTsKIH0KKwor
Ym9vbCBTY3JvbGxBbmltYXRvcjo6YWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hhbmdl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNu
YXBPZmZzZXRJbmRleERpZENoYW5nZSgpOworfQorCit1bnNpZ25lZCBTY3JvbGxBbmltYXRvcjo6
YWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBP
ZmZzZXRJbmRleEZvckF4aXMoYXhpcyk7Cit9CiAjZW5kaWYKIAogYm9vbCBTY3JvbGxBbmltYXRv
cjo6aGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4NDEwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCw2ICsxMzAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxBbmlt
YXRvcnNBbmRUaW1lcnMoKTsKICAgICBMYXlvdXRVbml0IHNjcm9sbE9mZnNldE9uQXhpcyhTY3Jv
bGxFdmVudEF4aXMpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsT25B
eGlzKFNjcm9sbEV2ZW50QXhpcywgZmxvYXQgZGVsdGEpIG92ZXJyaWRlOworICAgIGJvb2wgYWN0
aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKCkgY29uc3Q7CisgICAgdW5zaWduZWQg
YWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0
OwogI2VuZGlmCiAKIHByb3RlY3RlZDoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Nj
cm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9s
bFZpZXcuY3BwCShyZXZpc2lvbiAxODQxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOCwgMjAxNC0yMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTUyMCw2ICsxNTIwLDE4IEBAIHZvaWQgU2Nyb2xsVmlldzo6c3R5bGVEaWRDaGFuZ2Uo
KQogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zdHlsZUNoYW5nZWQoKTsKIH0KIAorI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbFRvTmVhcmVz
dEFjdGl2ZVNuYXBQb2ludCgpCit7CisgICAgSW50UG9pbnQgY3VycmVudFBvc2l0aW9uID0gc2Ny
b2xsUG9zaXRpb24oKTsKKyAgICBJbnRQb2ludCBjb3JyZWN0ZWRQb3NpdGlvbiA9IG5lYXJlc3RB
Y3RpdmVTbmFwUG9pbnQoY3VycmVudFBvc2l0aW9uKTsKKyAgICAKKyAgICBpZiAoY29ycmVjdGVk
UG9zaXRpb24gIT0gY3VycmVudFBvc2l0aW9uKQorICAgICAgICBzZXRTY3JvbGxQb3NpdGlvbihj
b3JyZWN0ZWRQb3NpdGlvbik7Cit9CisjZW5kaWYKKyAgICAKKwogI2lmICFQTEFURk9STShDT0NP
QSkKIAogdm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENoaWxkKFdpZGdldCopCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lvbiAxODQxMDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNi0yMDA4LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0zODcsNiArMzg3LDEwIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkVmlhUGxhdGZvcm1XaWRnZXQoY29uc3Qg
SW50UG9pbnQmIG9sZFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgbmV3UG9zaXRpb24pOwogCisj
aWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2b2lkIHNjcm9sbFRvTmVhcmVzdEFjdGl2
ZVNuYXBQb2ludCgpIG92ZXJyaWRlOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBTY3JvbGxW
aWV3KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5j
cHAJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFi
bGVBcmVhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBzdHJ1Y3QgU2FtZVNp
emVBc1Njcm9sbGFibGVBcmVhIHsKICAgICB2aXJ0dWFsIH5TYW1lU2l6ZUFzU2Nyb2xsYWJsZUFy
ZWEoKTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIHZvaWQqIHBvaW50ZXJzWzNd
OworICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRpY2VzWzJdOwogI2Vsc2UKICAgICB2b2lkKiBwb2lu
dGVyOwogI2VuZGlmCkBAIC0xODgsNyArMTg5LDE0IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6Omhh
bmRsZVdoZWVsRXZlbnQoY28KICAgICBpZiAoIWlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCku
aGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICBib29sIGhhbmRsZWRFdmVudCA9IHNj
cm9sbEFuaW1hdG9yKCkuaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyNpZiBFTkFCTEUo
Q1NTX1NDUk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCisgICAgaWYgKHNjcm9sbEFuaW1hdG9y
KCkuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKCkpIHsKKyAgICAgICAgc2V0
Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleChzY3JvbGxBbmltYXRvcigpLmFjdGl2ZVNj
cm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7
CisgICAgICAgIHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHNjcm9sbEFuaW1hdG9y
KCkuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZl
cnRpY2FsKSk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGhhbmRsZWRFdmVudDsKIH0KIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC00MDksMTEgKzQxNyw0MiBAQCB2b2lkIFNjcm9s
bGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNuYXBPZmZzCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVh
ckhvcml6b250YWxTbmFwT2Zmc2V0cygpCiB7CiAgICAgbV9ob3Jpem9udGFsU25hcE9mZnNldHMg
PSBudWxscHRyOworICAgIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCA9IDA7CiB9
CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cygpCiB7CiAg
ICAgbV92ZXJ0aWNhbFNuYXBPZmZzZXRzID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRWZXJ0aWNh
bFNuYXBQb2ludEluZGV4ID0gMDsKK30KKworSW50UG9pbnQgU2Nyb2xsYWJsZUFyZWE6Om5lYXJl
c3RBY3RpdmVTbmFwUG9pbnQoY29uc3QgSW50UG9pbnQmIGN1cnJlbnRQb3NpdGlvbikKK3sKKyAg
ICBpZiAoIWhvcml6b250YWxTbmFwT2Zmc2V0cygpICYmICF2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkp
CisgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CisgICAgCisgICAgaWYgKCFleGlzdGlu
Z1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CisgICAg
CisgICAgSW50UG9pbnQgY29ycmVjdGVkUG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247CisgICAg
CisgICAgaWYgKGhvcml6b250YWxTbmFwT2Zmc2V0cygpKSB7CisgICAgICAgIGNvbnN0IGF1dG8m
IGhvcml6b250YWwgPSAqaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCk7CisgICAgICAgIAorICAgICAg
ICBzaXplX3QgYWN0aXZlSW5kZXggPSBjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7
CisgICAgICAgIGlmIChhY3RpdmVJbmRleCA8IGhvcml6b250YWwuc2l6ZSgpKQorICAgICAgICAg
ICAgY29ycmVjdGVkUG9zaXRpb24uc2V0WChob3Jpem9udGFsW2FjdGl2ZUluZGV4XS50b0ludCgp
KTsKKyAgICB9CisgICAgCisgICAgaWYgKHZlcnRpY2FsU25hcE9mZnNldHMoKSkgeworICAgICAg
ICBjb25zdCBhdXRvJiB2ZXJ0aWNhbCA9ICp2ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgICAg
IAorICAgICAgICBzaXplX3QgYWN0aXZlSW5kZXggPSBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJ
bmRleCgpOworICAgICAgICBpZiAoYWN0aXZlSW5kZXggPCB2ZXJ0aWNhbC5zaXplKCkpCisgICAg
ICAgICAgICBjb3JyZWN0ZWRQb3NpdGlvbi5zZXRZKHZlcnRpY2FsW2FjdGl2ZUluZGV4XS50b0lu
dCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29ycmVjdGVkUG9zaXRpb247CiB9CiAjZW5kaWYK
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lv
biAxODQxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAxMSwgMjAxNCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTEsIDIwMTQtMjAxNSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY2LDYgKzY2LDEyIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFZlcnRpY2FsU25hcE9mZnNldHMoc3RkOjp1bmlxdWVfcHRyPFZlY3Rv
cjxMYXlvdXRVbml0Pj4pOwogICAgIHZvaWQgY2xlYXJIb3Jpem9udGFsU25hcE9mZnNldHMoKTsK
ICAgICB2b2lkIGNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cygpOworICAgIHVuc2lnbmVkIGN1cnJl
bnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRIb3Jp
em9udGFsU25hcFBvaW50SW5kZXg7IH0KKyAgICB2b2lkIHNldEN1cnJlbnRIb3Jpem9udGFsU25h
cFBvaW50SW5kZXgodW5zaWduZWQgaW5kZXgpIHsgbV9jdXJyZW50SG9yaXpvbnRhbFNuYXBQb2lu
dEluZGV4ID0gaW5kZXg7IH0KKyAgICB1bnNpZ25lZCBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJ
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXg7IH0K
KyAgICB2b2lkIHNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHVuc2lnbmVkIGluZGV4
KSB7IG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggPSBpbmRleDsgfQorICAgIEludFBv
aW50IG5lYXJlc3RBY3RpdmVTbmFwUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKKyAgICB2aXJ0dWFs
IHZvaWQgc2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBvaW50KCkgeyB9CiAjZW5kaWYKIAogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC0zMDUsNiArMzExLDggQEAgcHJpdmF0ZToKICNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8TGF5b3V0
VW5pdD4+IG1faG9yaXpvbnRhbFNuYXBPZmZzZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0
b3I8TGF5b3V0VW5pdD4+IG1fdmVydGljYWxTbmFwT2Zmc2V0czsKKyAgICB1bnNpZ25lZCBtX2N1
cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggeyAwIH07CisgICAgdW5zaWduZWQgbV9jdXJy
ZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCB7IDAgfTsKICNlbmRpZgogCiAgICAgLy8gVGhlcmUg
YXJlIDggcG9zc2libGUgY29tYmluYXRpb25zIG9mIHdyaXRpbmcgbW9kZSBhbmQgZGlyZWN0aW9u
LiBTY3JvbGwgb3JpZ2luIHdpbGwgYmUgbm9uLXplcm8gaW4gdGhlIHggb3IgeSBheGlzCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5o
CShyZXZpc2lvbiAxODQxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3Jv
bGxDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDYgKzk3LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiAxLjBmOwogICAgIH0KKworICAgIHZpcnR1YWwgdW5zaWdu
ZWQgYWN0aXZlU2Nyb2xsT2Zmc2V0SW5kZXgoU2Nyb2xsRXZlbnRBeGlzKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogI2VuZGlmCiB9OwogCkBAIC0xMTQsNiArMTE5LDEw
IEBAIHB1YmxpYzoKICAgICBib29sIHByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEFuaW1hdG9yc0Fu
ZFRpbWVycyhjb25zdCBTY3JvbGxhYmxlQXJlYSYpOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25h
cFBvaW50cyhTY3JvbGxFdmVudEF4aXMsIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0PiYpOworICAg
IHVuc2lnbmVkIGFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMoU2Nyb2xsRXZlbnRB
eGlzKSBjb25zdDsKKyAgICB2b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4
aXMoU2Nyb2xsRXZlbnRBeGlzLCB1bnNpZ25lZCk7CisgICAgYm9vbCBhY3RpdmVTY3JvbGxTbmFw
T2Zmc2V0SW5kZXhEaWRDaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVNjcm9sbFNuYXBJ
bmRleERpZENoYW5nZTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hh
bmdlKGJvb2wgc3RhdGUpIHsgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgPSBzdGF0
ZTsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xNzIsNiArMTgxLDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1fbW9tZW50dW1TY3JvbGxJblByb2dyZXNzIHsgZmFsc2UgfTsKICAgICBib29sIG1f
aWdub3JlTW9tZW50dW1TY3JvbGxzIHsgZmFsc2UgfTsKICAgICBib29sIG1fc25hcFJ1YmJlcmJh
bmRUaW1lcklzQWN0aXZlIHsgZmFsc2UgfTsKKyAgICBib29sIG1fYWN0aXZlU2Nyb2xsU25hcElu
ZGV4RGlkQ2hhbmdlIHsgZmFsc2UgfTsKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRy
b2xsZXIubW0JKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1Njcm9sbENvbnRyb2xsZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTY4NSw2ICs2ODUsMjYg
QEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjppbml0aWFsaXplR2xpZGVQYQogICAgIHNuYXBTdGF0
ZS5tX2dsaWRlUGhhc2VTaGlmdCA9IGFjb3MoKHNuYXBTdGF0ZS5tX2dsaWRlSW5pdGlhbFdoZWVs
RGVsdGEgLSB0YXJnZXRGaW5hbFdoZWVsRGVsdGEpIC8gKHNuYXBTdGF0ZS5tX2dsaWRlSW5pdGlh
bFdoZWVsRGVsdGEgKyB0YXJnZXRGaW5hbFdoZWVsRGVsdGEpKTsKIH0KIAordW5zaWduZWQgU2Ny
b2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxF
dmVudEF4aXMgYXhpcykgY29uc3QKK3sKKyAgICBpZiAoKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlz
OjpIb3Jpem9udGFsKSAmJiAhbV9ob3Jpem9udGFsU2Nyb2xsU25hcFN0YXRlKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAoKGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpWZXJ0aWNhbCkgJiYg
IW1fdmVydGljYWxTY3JvbGxTbmFwU3RhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAg
IGNvbnN0IFNjcm9sbFNuYXBBbmltYXRvclN0YXRlJiBzbmFwU3RhdGUgPSBzY3JvbGxTbmFwUG9p
bnRTdGF0ZShheGlzKTsKKyAgICByZXR1cm4gc25hcFN0YXRlLm1fYWN0aXZlU25hcEluZGV4Owor
fQorCit2b2lkIFNjcm9sbENvbnRyb2xsZXI6OnNldEFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRl
eEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIHVuc2lnbmVkIGluZGV4KQoreworICAgIGF1
dG8qIHNuYXBTdGF0ZSA9IChheGlzID09IFNjcm9sbEV2ZW50QXhpczo6SG9yaXpvbnRhbCkgPyBt
X2hvcml6b250YWxTY3JvbGxTbmFwU3RhdGUuZ2V0KCkgOiBtX3ZlcnRpY2FsU2Nyb2xsU25hcFN0
YXRlLmdldCgpOworICAgIGlmICghc25hcFN0YXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBz
bmFwU3RhdGUtPm1fYWN0aXZlU25hcEluZGV4ID0gaW5kZXg7Cit9CisKIHZvaWQgU2Nyb2xsQ29u
dHJvbGxlcjo6YmVnaW5TY3JvbGxTbmFwQW5pbWF0aW9uKFNjcm9sbEV2ZW50QXhpcyBheGlzLCBT
Y3JvbGxTbmFwU3RhdGUgbmV3U3RhdGUpCiB7CiAgICAgQVNTRVJUKG5ld1N0YXRlID09IFNjcm9s
bFNuYXBTdGF0ZTo6R2xpZGluZyB8fCBuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6OlNuYXBw
aW5nKTsKQEAgLTcwMSwxMCArNzIxLDEyIEBAIHZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6YmVnaW5T
Y3JvbGxTbmFwQW4KICAgICAKICAgICBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiA9IHN0ZDo6
bWluKHN0ZDo6bWF4KExheW91dFVuaXQocHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24gLyBzY2Fs
ZUZhY3RvciksIHNuYXBTdGF0ZS5tX3NuYXBPZmZzZXRzLmZpcnN0KCkpLCBzbmFwU3RhdGUubV9z
bmFwT2Zmc2V0cy5sYXN0KCkpOwogICAgIHNuYXBTdGF0ZS5tX2luaXRpYWxPZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgc25hcFN0YXRlLm1fdGFyZ2V0T2Zmc2V0ID0gc2NhbGVGYWN0b3IgKiBjbG9zZXN0
U25hcE9mZnNldDxMYXlvdXRVbml0LCBmbG9hdD4oc25hcFN0YXRlLm1fc25hcE9mZnNldHMsIHBy
b2plY3RlZFNjcm9sbERlc3RpbmF0aW9uLCBpbml0aWFsV2hlZWxEZWx0YSk7CisgICAgbV9hY3Rp
dmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgPSBmYWxzZTsKKyAgICBzbmFwU3RhdGUubV90YXJn
ZXRPZmZzZXQgPSBzY2FsZUZhY3RvciAqIGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVuaXQsIGZs
b2F0PihzbmFwU3RhdGUubV9zbmFwT2Zmc2V0cywgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24s
IGluaXRpYWxXaGVlbERlbHRhLCBzbmFwU3RhdGUubV9hY3RpdmVTbmFwSW5kZXgpOwogICAgIGlm
IChzbmFwU3RhdGUubV9pbml0aWFsT2Zmc2V0ID09IHNuYXBTdGF0ZS5tX3RhcmdldE9mZnNldCkK
ICAgICAgICAgcmV0dXJuOwogICAgIAorICAgIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hh
bmdlID0gdHJ1ZTsKICAgICBzbmFwU3RhdGUubV9jdXJyZW50U3RhdGUgPSBuZXdTdGF0ZTsKICAg
ICBpZiAobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nKSB7CiAgICAgICAgIHNu
YXBTdGF0ZS5tX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVudCA9IHRydWU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0
YXRlLmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29h
L1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDEyICs1OSwx
MyBAQCBzdHJ1Y3QgU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUgewogICAgIExheW91dFVuaXQgbV90
YXJnZXRPZmZzZXQ7CiAgICAgLy8gVXNlZCB0byB0cmFjayBnbGlkaW5nIGJlaGF2aW9yLgogICAg
IExheW91dFVuaXQgbV9iZWdpblRyYWNraW5nV2hlZWxEZWx0YU9mZnNldDsKLSAgICBpbnQgbV9u
dW1XaGVlbERlbHRhc1RyYWNrZWQ7CisgICAgaW50IG1fbnVtV2hlZWxEZWx0YXNUcmFja2VkIHsg
MCB9OworICAgIHVuc2lnbmVkIG1fYWN0aXZlU25hcEluZGV4IHsgMCB9OwogICAgIGZsb2F0IG1f
d2hlZWxEZWx0YVdpbmRvd1t3aGVlbERlbHRhV2luZG93U2l6ZV07Ci0gICAgZmxvYXQgbV9nbGlk
ZU1hZ25pdHVkZTsKLSAgICBmbG9hdCBtX2dsaWRlUGhhc2VTaGlmdDsKLSAgICBmbG9hdCBtX2ds
aWRlSW5pdGlhbFdoZWVsRGVsdGE7Ci0gICAgYm9vbCBtX3Nob3VsZE92ZXJyaWRlV2hlZWxFdmVu
dDsKKyAgICBmbG9hdCBtX2dsaWRlTWFnbml0dWRlIHsgMCB9OworICAgIGZsb2F0IG1fZ2xpZGVQ
aGFzZVNoaWZ0IHsgMCB9OworICAgIGZsb2F0IG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSB7IDAg
fTsKKyAgICBib29sIG1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50IHsgZmFsc2UgfTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tCShyZXZpc2lvbiAx
ODQxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxTbmFwQW5pbWF0
b3JTdGF0ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDYgQEAgU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGU6OlNjcm9sbFNuYXBBbmltYQogICAgICwgbV9pbml0aWFsT2Zmc2V0KDApCiAg
ICAgLCBtX3RhcmdldE9mZnNldCgwKQogICAgICwgbV9iZWdpblRyYWNraW5nV2hlZWxEZWx0YU9m
ZnNldCgwKQotICAgICwgbV9udW1XaGVlbERlbHRhc1RyYWNrZWQoMCkKLSAgICAsIG1fZ2xpZGVN
YWduaXR1ZGUoMCkKLSAgICAsIG1fZ2xpZGVQaGFzZVNoaWZ0KDApCi0gICAgLCBtX2dsaWRlSW5p
dGlhbFdoZWVsRGVsdGEoMCkKLSAgICAsIG1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50KGZhbHNl
KQogewogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJ
KHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMDQsNiArMzIwNCwxNSBAQCB2b2lkIFJlbmRlckxh
eWVyOjp1cGRhdGVTbmFwT2Zmc2V0cygpCiAgICAgUmVuZGVyQm94KiBib3ggPSBlbmNsb3NpbmdF
bGVtZW50KCktPnJlbmRlckJveCgpOwogICAgIHVwZGF0ZVNuYXBPZmZzZXRzRm9yU2Nyb2xsYWJs
ZUFyZWEoKnRoaXMsICpkb3duY2FzdDxIVE1MRWxlbWVudD4oZW5jbG9zaW5nRWxlbWVudCgpKSwg
KmJveCwgYm94LT5zdHlsZSgpKTsKIH0KKwordm9pZCBSZW5kZXJMYXllcjo6c2Nyb2xsVG9OZWFy
ZXN0QWN0aXZlU25hcFBvaW50KCkKK3sKKyAgICBJbnRQb2ludCBjdXJyZW50UG9zaXRpb24gPSBz
Y3JvbGxQb3NpdGlvbigpOworICAgIEludFBvaW50IGNvcnJlY3RlZFBvc2l0aW9uID0gbmVhcmVz
dEFjdGl2ZVNuYXBQb2ludChjdXJyZW50UG9zaXRpb24pOworICAgIAorICAgIGlmIChjb3JyZWN0
ZWRQb3NpdGlvbiAhPSBjdXJyZW50UG9zaXRpb24pCisgICAgICAgIHNjcm9sbFRvT2Zmc2V0KHRv
SW50U2l6ZShjb3JyZWN0ZWRQb3NpdGlvbikpOworfQogI2VuZGlmCiAKIGludCBSZW5kZXJMYXll
cjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aChPdmVybGF5U2Nyb2xsYmFyU2l6ZVJlbGV2YW5jeSBy
ZWxldmFuY3kpIGNvbnN0CkBAIC0zNDk0LDcgKzM1MDMsOCBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMCiAgICAgdXBkYXRlU25hcE9mZnNldHMoKTsKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgaWYgKFNjcm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0
aW5nU2Nyb2xsQW5pbWF0b3IoKSkKLSAgICAgICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yLT51cGRh
dGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsKKyAgICAgICAgc2Nyb2xsQW5pbWF0b3ItPnVw
ZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOworICAgIHNjcm9sbFRvTmVhcmVzdEFjdGl2
ZVNuYXBQb2ludCgpOwogI2VuZGlmCiAjZW5kaWYKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lvbiAxODQxMDQpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA5LCAyMDEyLCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29weXJpZ2h0
IChDKSAxOTk4IE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uLgogICoKQEAgLTIy
NCw2ICsyMjQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGhhc1Njcm9sbGFibGVPclJ1
YmJlcmJhbmRhYmxlQW5jZXN0b3IoKSBvdmVycmlkZTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTbmFwT2Zmc2V0cygpIG92ZXJyaWRlOworICAg
IHZvaWQgc2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBvaW50KCkgb3ZlcnJpZGU7CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDEwNCkKKysr
IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDE1LTA1LTExICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAg
ICAgIFNjcm9sbCBzbmFwIGxvZ2ljIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiByZXNpemluZyB0
aGUgV2ViVmlldworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQyNTkwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yMDEyNTA4OD4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9TY3JvbGxp
bmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW06CisgICAgICAg
ICgtW1dLT3ZlcmZsb3dTY3JvbGxWaWV3RGVsZWdhdGUgc2Nyb2xsVmlld1dpbGxFbmREcmFnZ2lu
Zzp3aXRoVmVsb2NpdHk6dGFyZ2V0Q29udGVudE9mZnNldDpdKTogTW9kaWZ5IHVzZSBvZiAnY2xv
c2VzdFNuYXBPZmZzZXQnIHRvIHNhdGlzZnkgdGhlIGFkZGl0aW9uYWwKKyAgICAgICAgYXJndW1l
bnQgSSBhZGRlZC4gVGhpcyBpcyBjdXJyZW50bHkgbm90IHVzZWQgZm9yIGFueXRoaW5nIG9uIGlP
Uy4KKwogMjAxNS0wNS0xMCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVXNlIFJlZiBpbnN0ZWFkIG9mIFBhc3NSZWZQdHIgaW4gV2ViQ29yZS9wYWdl
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdU
cmVlT3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1MubW0JKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGluZ05vZGVJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTgwLDEwICs4MCwxMSBAQCAtICh2b2lkKXNjcm9sbFZpZXdXaWxs
QmVnaW5EcmFnZ2luZzooVUlTCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKIC0gKHZvaWQp
c2Nyb2xsVmlld1dpbGxFbmREcmFnZ2luZzooVUlTY3JvbGxWaWV3ICopc2Nyb2xsVmlldyB3aXRo
VmVsb2NpdHk6KENHUG9pbnQpdmVsb2NpdHkgdGFyZ2V0Q29udGVudE9mZnNldDooaW5vdXQgQ0dQ
b2ludCAqKXRhcmdldENvbnRlbnRPZmZzZXQKIHsKKyAgICBzaXplX3QgaWdub3JlOwogICAgIGlm
ICghX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKS5pc0VtcHR5KCkp
Ci0gICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBjbG9zZXN0U25hcE9mZnNldDxmbG9h
dCwgQ0dGbG9hdD4oX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKSwg
dGFyZ2V0Q29udGVudE9mZnNldC0+eCwgdmVsb2NpdHkueCk7CisgICAgICAgIHRhcmdldENvbnRl
bnRPZmZzZXQtPnggPSBjbG9zZXN0U25hcE9mZnNldDxmbG9hdCwgQ0dGbG9hdD4oX3Njcm9sbGlu
Z1RyZWVOb2RlLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKSwgdGFyZ2V0Q29udGVudE9mZnNldC0+
eCwgdmVsb2NpdHkueCwgaWdub3JlKTsKICAgICBpZiAoIV9zY3JvbGxpbmdUcmVlTm9kZS0+dmVy
dGljYWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkKLSAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNl
dC0+eSA9IGNsb3Nlc3RTbmFwT2Zmc2V0PGZsb2F0LCBDR0Zsb2F0Pihfc2Nyb2xsaW5nVHJlZU5v
ZGUtPnZlcnRpY2FsU25hcE9mZnNldHMoKSwgdGFyZ2V0Q29udGVudE9mZnNldC0+eSwgdmVsb2Np
dHkueSk7CisgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBjbG9zZXN0U25hcE9mZnNl
dDxmbG9hdCwgQ0dGbG9hdD4oX3Njcm9sbGluZ1RyZWVOb2RlLT52ZXJ0aWNhbFNuYXBPZmZzZXRz
KCksIHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnksIGlnbm9yZSk7CiB9CiAjZW5k
aWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252870</attachid>
            <date>2015-05-11 11:10:52 -0700</date>
            <delta_ts>2015-05-11 11:29:13 -0700</delta_ts>
            <desc>Patch v3 (Forgot to include &lt;wtf/MathExtras.h&gt;</desc>
            <filename>bug-142590-20150511110932.patch</filename>
            <type>text/plain</type>
            <size>34813</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxNS0wNS0xMSAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGwgc25hcCBsb2dp
YyBzaG91bGQgYmUgdHJpZ2dlcmVkIHdoZW4gcmVzaXppbmcgdGhlIFdlYlZpZXcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5MAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjAxMjUwODg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGVzdHMgY29taW5nIGluIGEgc2Vjb25kIHBhdGNoLgorCisgICAg
ICAgIFJlc2l6aW5nIG9mIHRoZSBtYWluIGZyYW1lIG9yIG92ZXJmbG93IHJlZ2lvbnMgd2FzIHBy
b3Blcmx5IHJlY2FsY3VsYXRpbmcgdGhlIHNjcm9sbCBzbmFwIHBvaW50cywKKyAgICAgICAgYnV0
IHRoZXJlIHdhcyBubyBjb2RlIHRvIGhvbm9yIHRoZXNlIHZhbHVlcyB3aGVuIHdpbmRvdyByZXNp
emluZyB3YXMgb2NjdXJyaW5nLiBUaGUgY29ycmVjdGlvbiB3YXMKKyAgICAgICAgaGFuZGxlZCBp
biB0d28gd2F5czoKKyAgICAgICAgMS4gU2Nyb2xsaW5nIHRocmVhZCBvcGVyYXRpb25zIHRoYXQg
bW92ZWQgdG8gbmV3IHNuYXAgcG9pbnRzIG5lZWRlZCB0byBub3RpZnkgdGhlIG1haW4gdGhyZWFk
IHRoYXQKKyAgICAgICAgICAgaXQgaGFkIHNoaWZ0ZWQgdG8gYSBuZXcgc25hcCBwb2ludCwgc28g
dGhhdCB0aGUgcmVzaXplIGNvZGUgKHdoaWNoIGhhcHBlbnMgb24gdGhlIG1haW4gdGhyZWFkKQor
ICAgICAgICAgICBjb3VsZCBlbnN1cmUgdGhhdCB3ZSBzdGF5ZWQgY2xhbXBlZCB0byB0aGUgY29y
cmVjdCAndGlsZScgaW4gdGhlIHNuYXAgcmVnaW9uLgorICAgICAgICAyLiBNYWluIHRocmVhZCAo
b3ZlcmZsb3cpIHJlc2l6ZXMgd2VyZSBsaWtld2lzZSBtaXNzaW5nIGNvZGUgdG8gaG9ub3IgdGhl
IGN1cnJlbnQgc25hcCBwb3NpdGlvbgorICAgICAgICAgICBhZnRlciByZXNpemluZyBjYWxjdWxh
dGlvbnMgd2VyZSBjb21wbGV0ZS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIHJlcXVpcmVk
IHRoZSBhZGRpdGlvbiBvZiB0d28gaW5kaWNlcyB0byB0aGUgc2Nyb2xsYWJsZSBhcmVhIHRvIHRy
YWNrIHdoaWNoIHNjcm9sbAorICAgICAgICBzbmFwIHBvaW50IHdhcyBjdXJyZW50bHkgYmVpbmcg
dXNlZC4gV2UgZG9uJ3QgYm90aGVyIHdpdGggYSAnbm9uZScgY2FzZSBiZWNhdXNlIHlvdSBjYW5u
b3QgaGF2ZSBhCisgICAgICAgICdub25lJyBzdGF0ZSB3aGVuIHlvdSBoYXZlIGFuIGFjdGl2ZSBz
ZXQgb2Ygc2Nyb2xsIHNuYXAgcG9pbnRzLCBhbmQgd2UgZG8gbm90IGV4ZWN1dGUgdGhpcyBjb2Rl
CisgICAgICAgIGlmIHRoZSBzY3JvbGwgc25hcCBwb2ludHMgYXJlIG51bGwuCisKKyAgICAgICAg
VGhlIEZyYW1lVmlldyBjb2RlIHdhcyBjb21wdXRpbmcgdXBkYXRlZCBzbmFwIG9mZnNldHMgYWZ0
ZXIgaXQgaGFkIGRpc3BhdGNoZWQgZnJhbWUgdmlldyBsYXlvdXQKKyAgICAgICAgaW5mb3JtYXRp
b24gdG8gdGhlIHNjcm9sbGluZyB0aHJlYWQsIHdoaWNoIHdhcyB3cm9uZy4gVGhpcyB3YXMgYWxz
byBjb3JyZWN0ZWQuCisKKyAgICAgICAgSSB0aGluayBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byB0
cmFjayBhbGwgb2YgdGhpcyBzdGF0ZSBpbnNpZGUgdGhlIFNjcm9sbENvbnRyb2xsZXIsIGJ1dCB0
aGUgY3VycmVudAorICAgICAgICBzY3JvbGwgc25hcCBhcmNoaXRlY3R1cmUgZGVzdHJveXMgYW5k
IHJlY3JlYXRlcyB0aGUgc3RhdGUgZWFjaCB0aW1lIGEgbmV3IHNldCBvZiBpbnRlcmFjdGlvbnMg
c3RhcnRzLgorICAgICAgICBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiB0aGUgZnV0dXJlLCB3aGlj
aCB3b3VsZCBhbGxvdyB1cyB0byByZW1vdmUgc29tZSBvZiB0aGlzIGxvY2FsIHN0YXRlLgorCisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKTogTWFrZSBzdXJlICd1cGRhdGVTbmFwT2Zmc2V0cycg
aXMgY2FsbGVkIHByaW9yIHRvCisgICAgICAgIGNhbGxpbmcgJ2ZyYW1lVmlld0xheW91dFVwZGF0
ZWQnIHNvIHRoZSBzY3JvbGxpbmcgdGhyZWFkIGdldHMgY29ycmVjdCB1cGRhdGVkIHBvaW50cy4g
QWRkIGEgbmV3CisgICAgICAgIGNhbGwgdG8gJ3Njcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2lu
dCcsIHdoaWNoIHdpbGwga2VlcCB1cyBvbiBvdXIgY3VycmVudCBzbmFwIHBvaW50IGR1cmluZwor
ICAgICAgICByZXNpemUgKGlmIGFwcHJvcHJpYXRlKS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKTogQWRk
ZWQuIFRoaXMgZmluZHMgYW5kIG5vdGlmaWVzCisgICAgICAgIHRoZSBjb3JyZWN0IHNjcm9sbCBy
ZWdpb24gd2hlbiBhIG5ldyBzbmFwIHBvc2l0aW9uIChpbmRleCkgaGFzIGJlZW4gc2VsZWN0ZWQg
YnkgdXNlciBpbnRlcmFjdGlvbiBvbgorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRlZmVyVGVzdHNGb3JS
ZWFzb24pOiBBZGRlZCBhbiBhc3NlcnRpb24gZm9yICdpc01haW5UaHJlYWQnLgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGVzdERlZmVycmFsRm9y
UmVhc29uKTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvci5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zm
c2V0cy5oOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXQpOiBNb2RpZmllZCB0
byBhbHNvIHJldHVybiB0aGUgc2VsZWN0ZWQgc25hcCBwb2ludCBpbmRleCBzbyB3ZSBjYW4gdHJh
Y2sKKyAgICAgICAgaXQgdG8gaGFuZGxlIHJlc2l6ZSBvcGVyYXRpb25zLgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWU6OnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhy
ZWFkZWRTY3JvbGxpbmdUcmVlOjp1cGRhdGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyk6IEFkZGVk
IG1ldGhvZCB0byBkaXNwYXRjaCB0aGUgYWN0aXZlCisgICAgICAgIGhvcml6b250YWwgYW5kIHZl
cnRpY2FsIHNjcm9sbCBzbmFwIGluZGljZXMgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQuCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmg6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpo
YW5kbGVXaGVlbEV2ZW50KTogQWZ0ZXIgdGhlIHNjcm9sbCBjb250cm9sbGVyIHByb2Nlc3Nlcwor
ICAgICAgICB0aGUgY3VycmVudCBldmVudCwgbm90aWZ5IHRoZSBtYWluIHRocmVhZCBvZiBhbnkg
Y2hhbmdlIGluIHRoZSBhY3RpdmUgc2Nyb2xsIHNuYXAgaW5kZXguCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
OmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5nZSk6IEFkZGVkIG1ldGhvZCB0byBh
bGxvdyBTY3JvbGxBbmltYXRvcgorICAgICAgICBjbGllbnRzIHRvIGZpbmQgb3V0IGFib3V0IHRo
ZSBjdXJyZW50IHNjcm9sbCBzbmFwIHN0YXRlLCB3aGljaCBpcyBvbmx5IGtub3duIGJ5IHRoZSBT
Y3JvbGxDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmFjdGl2
ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBv
aW50KTogQWRkZWQgbWV0aG9kIHRoYXQgYWxsb3dzIHVzIHRvIHNldCBzY3JvbGwgcG9zaXRpb24K
KyAgICAgICAgdG8gb25lIG9mIG91ciBhY3RpdmUgc2Nyb2xsIHNuYXAgb2Zmc2V0cy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVs
RXZlbnQpOiBJZiB0aGUgYWN0aXZlIHNjcm9sbCBzbmFwIG9mZnNldCBoYXMgY2hhbmdlZCwgbWFr
ZSBzdXJlIHdlCisgICAgICAgIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyB2YWx1ZXMgZm9yIHBvdGVu
dGlhbCByZXNpemUgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
OjpjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cyk6IE1ha2Ugc3VyZSB0byBhbHNvIGNsZWFyIG91
dCB0aGUgY3VycmVudCBzbmFwIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFy
ZWE6OmNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYWJsZUFyZWE6Om5lYXJlc3RBY3RpdmVTbmFwUG9pbnQpOiBOZXcgbWV0aG9kIHRoYXQg
cmV0dXJucyBhbiB1cGRhdGVkIEludFBvaW50IHJlZmxlY3RpbmcKKyAgICAgICAgdGhlIHByb3Bl
ciBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIGFjdGl2ZSBzY3JvbGwgc25hcCBvZmZzZXQu
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGFibGVBcmVhOjpjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudEhvcml6b250YWxT
bmFwUG9pbnRJbmRleCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6
OmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb05lYXJlc3RBY3Rp
dmVTbmFwUG9pbnQpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250
cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyQ2xpZW50OjphY3Rp
dmVTY3JvbGxPZmZzZXRJbmRleCk6IEFkZGVkIG5ldyBtZXRob2QgZm9yIGNsaWVudHMgdG8gaW1w
bGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xs
U25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxDb250cm9sbGVyOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UpOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9y
QXhpcyk6IEhlbHBlciBtZXRob2QgdG8gcmV0dXJuIGN1cnJlbnQgYWN0aXZlCisgICAgICAgIGlu
ZGV4IChpZiBhcHBsaWNhYmxlKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6
OnNldEFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMpOiBIZWxwZXIgZnVuY3Rpb24g
dG8gc2FmZWx5IHNldAorICAgICAgICB0aGUgY3VycmVudCBhY3RpdmUgaW5kZXguCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24pOiBV
cGRhdGVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyBhY3RpdmUgc2Nyb2xsIHNuYXAKKyAgICAg
ICAgaW5kZXgsIGFzIHdlbGwgYXMgd2hldGhlciB0aGUgY3VycmVudCBhbmltYXRpb24gYWN0dWFs
bHkgY2hhbmdlZCB0aGUgYWN0aXZlIHNuYXAgcG9pbnQgb2Zmc2V0LgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6IFJldmlzZSB0byB1c2UgbW9kZXJu
IEMrKyBpbml0aWFsaXplcnMsIGFuZCB0byB0cmFjayBhIG5ldyBpbmRleAorICAgICAgICB0aGF0
IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc2Nyb2xsIHNuYXAgb2Zmc2V0LgorICAgICAgICAqIHBs
YXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlKTogVXBk
YXRlIGZvciBtb2Rlcm4gQysrIHN5bnRheC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvTmVhcmVzdEFj
dGl2ZVNuYXBQb2ludCk6IE5ldyBtZXRob2QgdG8gc2V0IHNjcm9sbCBwb3NpdGlvbiB0byBiZSBv
bmUgb2Ygb3VyCisgICAgICAgIGFjdGl2ZSBzY3JvbGwgc25hcCBwb2ludHMuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KTogQWRkIGEg
bmV3IGNhbGwgdG8gJ3Njcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2ludCcgc28gdGhhdAorICAg
ICAgICB3ZSBzdGF5IG9uIHRoZSBjdXJyZW50IHNjcm9sbCBzbmFwIG9mZnNldCBkdXJpbmcgcmVz
aXppbmcuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisKIDIwMTUtMDUtMTEg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkNvbnRlbnQg
Y3Jhc2ggdW5kZXIgY29tLmFwcGxlLldlYkNvcmU6IFdlYkNvcmU6OldlYktpdENTU1Jlc291cmNl
VmFsdWU6OmlzQ1NTVmFsdWVOb25lIGNvbnN0ICsgNgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAkocmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTc0LDcgKzI5NzQsMTEgQEAgdm9pZCBGcmFtZVZp
ZXc6OnBlcmZvcm1Qb3N0TGF5b3V0VGFza3MoKQogICAgIGZyYW1lKCkubG9hZGVyKCkuY2xpZW50
KCkuZGlzcGF0Y2hEaWRMYXlvdXQoKTsKIAogICAgIHVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwot
ICAgIAorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB1cGRhdGVTbmFwT2Zmc2V0
cygpOworI2VuZGlmCisKICAgICAvLyBsYXlvdXQoKSBwcm90ZWN0cyBGcmFtZVZpZXcsIGJ1dCBp
dCBzdGlsbCBjYW4gZ2V0IGRlc3Ryb3llZCB3aGVuIHVwZGF0ZUVtYmVkZGVkT2JqZWN0cygpCiAg
ICAgLy8gaXMgY2FsbGVkIHRocm91Z2ggdGhlIHBvc3QgbGF5b3V0IHRpbWVyLgogICAgIFJlZjxG
cmFtZVZpZXc+IHByb3RlY3QoKnRoaXMpOwpAQCAtMjk5NiwxNCArMzAwMCwxMCBAQCB2b2lkIEZy
YW1lVmlldzo6cGVyZm9ybVBvc3RMYXlvdXRUYXNrcygpCiAgICAgc2VuZFJlc2l6ZUV2ZW50SWZO
ZWVkZWQoKTsKICAgICB2aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwogCi0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICBpZiAoIWZyYW1lKCkuaXNNYWluRnJhbWUoKSkgewotICAgICAg
ICB1cGRhdGVTbmFwT2Zmc2V0cygpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaWYgKFNj
cm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
LSAgICAgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+dXBkYXRlU2Nyb2xsQW5pbWF0b3Jz
QW5kVGltZXJzKCk7Ci0jZW5kaWYKLSAgICB9CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkg
JiYgUExBVEZPUk0oTUFDKQorICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3Ig
PSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHNjcm9sbEFuaW1hdG9yLT51cGRh
dGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsKKyAgICBzY3JvbGxUb05lYXJlc3RBY3RpdmVT
bmFwUG9pbnQoKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2
aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2Miw4ICs1NjIsMzMgQEAg
U3RyaW5nIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbAogfQogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCit2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFNu
YXBPZmZzZXRJbmRpY2VzKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVk
IGhvcml6b250YWxJbmRleCwgdW5zaWduZWQgdmVydGljYWxJbmRleCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIAorICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZVZpZXdGb3JTY3JvbGxpbmdO
b2RlKHNjcm9sbGluZ05vZGVJRCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoc2Nyb2xsaW5nTm9kZUlEID09IGZyYW1lVmlldy0+c2Nyb2xsTGF5
ZXJJRCgpKSB7CisgICAgICAgIGZyYW1lVmlldy0+c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9p
bnRJbmRleChob3Jpem9udGFsSW5kZXgpOworICAgICAgICBmcmFtZVZpZXctPnNldEN1cnJlbnRW
ZXJ0aWNhbFNuYXBQb2ludEluZGV4KHZlcnRpY2FsSW5kZXgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIC8vIE92ZXJmbG93LXNjcm9sbCBhcmVhLgorICAgIGlmIChTY3JvbGxh
YmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSBmcmFtZVZpZXctPnNjcm9sbGFibGVBcmVhRm9yU2Ny
b2xsTGF5ZXJJRChzY3JvbGxpbmdOb2RlSUQpKSB7CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5z
ZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGhvcml6b250YWxJbmRleCk7CisgICAg
ICAgIHNjcm9sbGFibGVBcmVhLT5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCh2ZXJ0
aWNhbEluZGV4KTsKKyAgICB9Cit9CisKIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVh
SWRlbnRpZmllciBpZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRy
aWdnZXJSZWFzb24gcmVhc29uKSBjb25zdAogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgaWYgKCFtX3BhZ2UgfHwgIW1fcGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2Vycygp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTU3NSw2ICs2MDAsNyBAQCB2b2lkIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmRlZmVyVGVzCiAKIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
cjo6cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Ny
b2xsYWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6
RGVmZXJUZXN0VHJpZ2dlclJlYXNvbiByZWFzb24pIGNvbnN0CiB7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdlLT5leHBlY3RzV2hlZWxFdmVu
dFRyaWdnZXJzKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAko
cmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjaGVkdWxlVXBkYXRlU2Nyb2xsUG9zaXRp
b25BZnRlckFzeW5jU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYsIGJv
b2wgcHJvZ3JhbW1hdGljU2Nyb2xsLCBTZXRPclN5bmNTY3JvbGxpbmdMYXllclBvc2l0aW9uKTsK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcE9mZnNldElu
ZGljZXMoU2Nyb2xsaW5nTm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsSW5kZXgsIHVuc2lnbmVk
IHZlcnRpY2FsSW5kZXgpOwogICAgIHZvaWQgZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50
VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmln
Z2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZVRlc3RE
ZWZlcnJhbEZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRl
bnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSBj
b25zdDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Nj
cm9sbFNuYXBPZmZzZXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogCiAjaW5j
bHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQsMTcgKzQ1LDE5
IEBAIHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgKIC8vIGFzIHdlbGwg
YXMgYSBWZWxvY2l0eVR5cGUgaW5kaWNhdGluZyB0aGUgdmVsb2NpdHkgKGUuZy4gZmxvYXQsIENH
RmxvYXQsIGV0Yy4pIFRoaXMgZnVuY3Rpb24gaXMgdGVtcGxhdGVkIGJlY2F1c2UgdGhlIFVJIHBy
b2Nlc3Mgd2lsbCBub3cKIC8vIHVzZSBwaXhlbCBzbmFwcGVkIGZsb2F0cyB0byByZXByZXNlbnQg
c25hcCBvZmZzZXRzIHJhdGhlciB0aGFuIExheW91dFVuaXRzLgogdGVtcGxhdGUgPHR5cGVuYW1l
IExheW91dFR5cGUsIHR5cGVuYW1lIFZlbG9jaXR5VHlwZT4KLUxheW91dFR5cGUgY2xvc2VzdFNu
YXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFR5cGU+JiBzbmFwT2Zmc2V0cywgTGF5b3V0VHlw
ZSBzY3JvbGxEZXN0aW5hdGlvbiwgVmVsb2NpdHlUeXBlIHZlbG9jaXR5KQorTGF5b3V0VHlwZSBj
bG9zZXN0U25hcE9mZnNldChjb25zdCBWZWN0b3I8TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzLCBM
YXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0aW9uLCBWZWxvY2l0eVR5cGUgdmVsb2NpdHksIHVuc2ln
bmVkJiBhY3RpdmVTbmFwSW5kZXgpCiB7CiAgICAgQVNTRVJUKHNuYXBPZmZzZXRzLnNpemUoKSk7
CisgICAgYWN0aXZlU25hcEluZGV4ID0gMDsKICAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPD0g
c25hcE9mZnNldHMuZmlyc3QoKSkKICAgICAgICAgcmV0dXJuIHNuYXBPZmZzZXRzLmZpcnN0KCk7
CiAKKyAgICBhY3RpdmVTbmFwSW5kZXggPSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOwogICAgIGlm
IChzY3JvbGxEZXN0aW5hdGlvbiA+PSBzbmFwT2Zmc2V0cy5sYXN0KCkpCiAgICAgICAgIHJldHVy
biBzbmFwT2Zmc2V0cy5sYXN0KCk7CiAKICAgICBzaXplX3QgbG93ZXJJbmRleCA9IDA7Ci0gICAg
c2l6ZV90IHVwcGVySW5kZXggPSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOworICAgIHNpemVfdCB1
cHBlckluZGV4ID0gY2xhbXBUbzx1bnNpZ25lZD4oc25hcE9mZnNldHMuc2l6ZSgpKSAtIDE7CiAg
ICAgd2hpbGUgKGxvd2VySW5kZXggPCB1cHBlckluZGV4IC0gMSkgewogICAgICAgICBzaXplX3Qg
bWlkZGxlSW5kZXggPSAobG93ZXJJbmRleCArIHVwcGVySW5kZXgpIC8gMjsKICAgICAgICAgaWYg
KHNjcm9sbERlc3RpbmF0aW9uIDwgc25hcE9mZnNldHNbbWlkZGxlSW5kZXhdKQpAQCAtNzAsMTAg
KzczLDEzIEBAIExheW91dFR5cGUgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG8KICAgICBM
YXlvdXRUeXBlIGxvd2VyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbbG93ZXJJbmRleF07CiAg
ICAgTGF5b3V0VHlwZSB1cHBlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW3VwcGVySW5kZXhd
OwogICAgIC8vIE5vbnplcm8gdmVsb2NpdHkgaW5kaWNhdGVzIGEgZmxpY2sgZ2VzdHVyZS4gRXZl
biBpZiBhbm90aGVyIHNuYXAgcG9pbnQgaXMgY2xvc2VyLCBzbmFwIHRvIHRoZSBvbmUgaW4gdGhl
IGRpcmVjdGlvbiBvZiB0aGUgZmxpY2sgZ2VzdHVyZS4KLSAgICBpZiAodmVsb2NpdHkpCisgICAg
aWYgKHZlbG9jaXR5KSB7CisgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9ICh2ZWxvY2l0eSA8IDAp
ID8gY2xhbXBUbzx1bnNpZ25lZD4obG93ZXJJbmRleCkgOiBjbGFtcFRvPHVuc2lnbmVkPih1cHBl
ckluZGV4KTsKICAgICAgICAgcmV0dXJuIHZlbG9jaXR5IDwgMCA/IGxvd2VyU25hcFBvc2l0aW9u
IDogdXBwZXJTbmFwUG9zaXRpb247CisgICAgfQogCiAgICAgYm9vbCBpc0Nsb3NlclRvTG93ZXJT
bmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVw
cGVyU25hcFBvc2l0aW9uIC0gc2Nyb2xsRGVzdGluYXRpb247CisgICAgYWN0aXZlU25hcEluZGV4
ID0gaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJJbmRleCA6IHVwcGVySW5kZXg7
CiAgICAgcmV0dXJuIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IGxvd2VyU25hcFBvc2l0
aW9uIDogdXBwZXJTbmFwUG9zaXRpb247CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDYgKzEwMCw3IEBAIHB1YmxpYzoKICAgICAKICNpZiBQTEFURk9STShNQUMpCiAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyhT
Y3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIC8qaG9yaXpvbnRhbEluZGV4Ki8sIHVuc2lnbmVkIC8q
dmVydGljYWxJbmRleCovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVmZXJUZXN0c0ZvclJlYXNv
bihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxF
dmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6
U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVz
dFRyaWdnZXJSZWFzb24pIHsgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAJKHJldmlzaW9u
IDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xs
aW5nVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsMTcgQEAgdm9pZCBUaHJl
YWRlZFNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRQogICAgIH0pOwogfQogCit2b2lkIFRocmVh
ZGVkU2Nyb2xsaW5nVHJlZTo6dXBkYXRlU2Nyb2xsU25hcE9mZnNldEluZGljZXMoU2Nyb2xsaW5n
Tm9kZUlEIG5vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbEluZGV4LCB1bnNpZ25lZCB2ZXJ0aWNh
bEluZGV4KQoreworICAgIGlmICghbV9zY3JvbGxpbmdDb29yZGluYXRvcikKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFJlZlB0cjxBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yPiBzY3JvbGxp
bmdDb29yZGluYXRvciA9IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3I7CisgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtzY3JvbGxpbmdDb29yZGluYXRvciwgbm9kZUlELCBob3Jpem9udGFsSW5k
ZXgsIHZlcnRpY2FsSW5kZXhdIHsKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0
ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKG5vZGVJRCwgaG9yaXpvbnRhbEluZGV4LCB2ZXJ0aWNh
bEluZGV4KTsKKyAgICB9KTsKK30KKwogdm9pZCBUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmRlZmVy
VGVzdHNGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50
aWZpZXIgaWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2Vy
UmVhc29uIHJlYXNvbikKIHsKICAgICBpZiAoIW1fc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9s
bGluZ1RyZWUuaAkocmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYy
LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZURpZFNj
cm9sbChTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBT
ZXRPclN5bmNTY3JvbGxpbmdMYXllclBvc2l0aW9uID0gU3luY1Njcm9sbGluZ0xheWVyUG9zaXRp
b24pIG92ZXJyaWRlOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIGhhbmRsZVdoZWVsRXZl
bnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRh
dGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyhTY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6
b250YWxJbmRleCwgdW5zaWduZWQgdmVydGljYWxJbmRleCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBk
ZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJ
ZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24p
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIG92ZXJyaWRlOwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbQkocmV2aXNpb24gMTg0
MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsMTIg
QEAgdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOgogI2VuZGlmCiAKICAg
ICBtX3Njcm9sbENvbnRyb2xsZXIuaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGlmIChtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZl
U2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKCkpIHsKKyAgICAgICAgc2Nyb2xsaW5nVHJl
ZSgpLnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKHNjcm9sbGluZ05vZGVJRCgpLCBtX3Nj
cm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxF
dmVudEF4aXM6Okhvcml6b250YWwpLCBtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25h
cE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CisgICAgICAg
IG1fc2Nyb2xsQ29udHJvbGxlci5zZXRTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UoZmFs
c2UpOworICAgIH0KKyNlbmRpZgogICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRPckNsZWFyTGF0Y2hl
ZE5vZGUod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCkpOwogICAgIHNjcm9sbGluZ1RyZWUo
KS5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uod2hlZWxFdmVudC5waGFzZSgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDE4NDEw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsNiArODcsMTYgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6cHJvY2Vzc1do
ZWVsRXZlbnRGbwogewogICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIucHJvY2Vzc1doZWVs
RXZlbnRGb3JTY3JvbGxTbmFwKHdoZWVsRXZlbnQpOwogfQorCitib29sIFNjcm9sbEFuaW1hdG9y
OjphY3RpdmVTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hh
bmdlKCk7Cit9CisKK3Vuc2lnbmVkIFNjcm9sbEFuaW1hdG9yOjphY3RpdmVTY3JvbGxTbmFwT2Zm
c2V0SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAoreworICAgIHJldHVy
biBtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhh
eGlzKTsKK30KICNlbmRpZgogCiBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOwog
ICAgIExheW91dFVuaXQgc2Nyb2xsT2Zmc2V0T25BeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlz
LCBmbG9hdCBkZWx0YSkgb3ZlcnJpZGU7CisgICAgYm9vbCBhY3RpdmVTY3JvbGxTbmFwT2Zmc2V0
SW5kZXhEaWRDaGFuZ2UoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBhY3RpdmVTY3JvbGxTbmFwT2Zm
c2V0SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7CiAjZW5kaWYKIAogcHJvdGVj
dGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9u
IDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDA4LCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTIwLDYgKzE1MjAs
MTggQEAgdm9pZCBTY3JvbGxWaWV3OjpzdHlsZURpZENoYW5nZSgpCiAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnN0eWxlQ2hhbmdlZCgpOwogfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBvaW50KCkK
K3sKKyAgICBJbnRQb2ludCBjdXJyZW50UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbigpOworICAg
IEludFBvaW50IGNvcnJlY3RlZFBvc2l0aW9uID0gbmVhcmVzdEFjdGl2ZVNuYXBQb2ludChjdXJy
ZW50UG9zaXRpb24pOworICAgIAorICAgIGlmIChjb3JyZWN0ZWRQb3NpdGlvbiAhPSBjdXJyZW50
UG9zaXRpb24pCisgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKGNvcnJlY3RlZFBvc2l0aW9uKTsK
K30KKyNlbmRpZgorICAgIAorCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogCiB2b2lkIFNjcm9sbFZp
ZXc6OnBsYXRmb3JtQWRkQ2hpbGQoV2lkZ2V0KikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LTIwMDgsIDIw
MTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM4
Nyw2ICszODcsMTAgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxQ
b3NpdGlvbkNoYW5nZWRWaWFQbGF0Zm9ybVdpZGdldChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRp
b24sIGNvbnN0IEludFBvaW50JiBuZXdQb3NpdGlvbik7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgIHZvaWQgc2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBvaW50KCkgb3ZlcnJp
ZGU7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFNjcm9sbFZpZXcoKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkocmV2aXNpb24gMTg0MTA0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIHN0cnVjdCBTYW1lU2l6ZUFzU2Nyb2xsYWJsZUFyZWEg
ewogICAgIHZpcnR1YWwgflNhbWVTaXplQXNTY3JvbGxhYmxlQXJlYSgpOwogI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCiAgICAgdm9pZCogcG9pbnRlcnNbM107CisgICAgdW5zaWduZWQgY3Vy
cmVudEluZGljZXNbMl07CiAjZWxzZQogICAgIHZvaWQqIHBvaW50ZXI7CiAjZW5kaWYKQEAgLTE4
OCw3ICsxODksMTQgQEAgYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjbwog
ICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50KHdo
ZWVsRXZlbnQpOworICAgIGJvb2wgaGFuZGxlZEV2ZW50ID0gc2Nyb2xsQW5pbWF0b3IoKS5oYW5k
bGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYm
IFBMQVRGT1JNKE1BQykKKyAgICBpZiAoc2Nyb2xsQW5pbWF0b3IoKS5hY3RpdmVTY3JvbGxTbmFw
T2Zmc2V0SW5kZXhEaWRDaGFuZ2UoKSkgeworICAgICAgICBzZXRDdXJyZW50SG9yaXpvbnRhbFNu
YXBQb2ludEluZGV4KHNjcm9sbEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4
Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKKyAgICAgICAgc2V0Q3VycmVu
dFZlcnRpY2FsU25hcFBvaW50SW5kZXgoc2Nyb2xsQW5pbWF0b3IoKS5hY3RpdmVTY3JvbGxTbmFw
T2Zmc2V0SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKKyAgICB9Cisj
ZW5kaWYKKyAgICByZXR1cm4gaGFuZGxlZEV2ZW50OwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKQEAgLTQwOSwxMSArNDE3LDQyIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRp
Y2FsU25hcE9mZnMKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNsZWFySG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCkKIHsKICAgICBtX2hvcml6b250YWxTbmFwT2Zmc2V0cyA9IG51bGxwdHI7CisgICAgbV9j
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4ID0gMDsKIH0KIAogdm9pZCBTY3JvbGxhYmxl
QXJlYTo6Y2xlYXJWZXJ0aWNhbFNuYXBPZmZzZXRzKCkKIHsKICAgICBtX3ZlcnRpY2FsU25hcE9m
ZnNldHMgPSBudWxscHRyOworICAgIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggPSAw
OworfQorCitJbnRQb2ludCBTY3JvbGxhYmxlQXJlYTo6bmVhcmVzdEFjdGl2ZVNuYXBQb2ludChj
b25zdCBJbnRQb2ludCYgY3VycmVudFBvc2l0aW9uKQoreworICAgIGlmICghaG9yaXpvbnRhbFNu
YXBPZmZzZXRzKCkgJiYgIXZlcnRpY2FsU25hcE9mZnNldHMoKSkKKyAgICAgICAgcmV0dXJuIGN1
cnJlbnRQb3NpdGlvbjsKKyAgICAKKyAgICBpZiAoIWV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
KyAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKKyAgICAKKyAgICBJbnRQb2ludCBjb3Jy
ZWN0ZWRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKKyAgICAKKyAgICBpZiAoaG9yaXpvbnRh
bFNuYXBPZmZzZXRzKCkpIHsKKyAgICAgICAgY29uc3QgYXV0byYgaG9yaXpvbnRhbCA9ICpob3Jp
em9udGFsU25hcE9mZnNldHMoKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBhY3RpdmVJbmRl
eCA9IGN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKTsKKyAgICAgICAgaWYgKGFjdGl2
ZUluZGV4IDwgaG9yaXpvbnRhbC5zaXplKCkpCisgICAgICAgICAgICBjb3JyZWN0ZWRQb3NpdGlv
bi5zZXRYKGhvcml6b250YWxbYWN0aXZlSW5kZXhdLnRvSW50KCkpOworICAgIH0KKyAgICAKKyAg
ICBpZiAodmVydGljYWxTbmFwT2Zmc2V0cygpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHZlcnRp
Y2FsID0gKnZlcnRpY2FsU25hcE9mZnNldHMoKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBh
Y3RpdmVJbmRleCA9IGN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCk7CisgICAgICAgIGlm
IChhY3RpdmVJbmRleCA8IHZlcnRpY2FsLnNpemUoKSkKKyAgICAgICAgICAgIGNvcnJlY3RlZFBv
c2l0aW9uLnNldFkodmVydGljYWxbYWN0aXZlSW5kZXhdLnRvSW50KCkpOworICAgIH0KKworICAg
IHJldHVybiBjb3JyZWN0ZWRQb3NpdGlvbjsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAx
NC0yMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjYsNiArNjYsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmVy
dGljYWxTbmFwT2Zmc2V0cyhzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPExheW91dFVuaXQ+Pik7CiAg
ICAgdm9pZCBjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygpOwogICAgIHZvaWQgY2xlYXJWZXJ0
aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgdW5zaWduZWQgY3VycmVudEhvcml6b250YWxTbmFwUG9p
bnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eDsgfQorICAgIHZvaWQgc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCh1bnNpZ25l
ZCBpbmRleCkgeyBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSBpbmRleDsgfQor
ICAgIHVuc2lnbmVkIGN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleDsgfQorICAgIHZvaWQgc2V0Q3VycmVu
dFZlcnRpY2FsU25hcFBvaW50SW5kZXgodW5zaWduZWQgaW5kZXgpIHsgbV9jdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCA9IGluZGV4OyB9CisgICAgSW50UG9pbnQgbmVhcmVzdEFjdGl2ZVNu
YXBQb2ludChjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb05lYXJl
c3RBY3RpdmVTbmFwUG9pbnQoKSB7IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKQEAgLTMwNSw2ICszMTEsOCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCiAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxMYXlvdXRVbml0Pj4gbV9ob3Jpem9udGFs
U25hcE9mZnNldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxMYXlvdXRVbml0Pj4gbV92
ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgIHVuc2lnbmVkIG1fY3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2lu
dEluZGV4IHsgMCB9OwogI2VuZGlmCiAKICAgICAvLyBUaGVyZSBhcmUgOCBwb3NzaWJsZSBjb21i
aW5hdGlvbnMgb2Ygd3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rpb24uIFNjcm9sbCBvcmlnaW4gd2ls
bCBiZSBub24temVybyBpbiB0aGUgeCBvciB5IGF4aXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4NDEwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIDEuMGY7CiAgICAgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBhY3RpdmVTY3JvbGxPZmZz
ZXRJbmRleChTY3JvbGxFdmVudEF4aXMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CiAjZW5kaWYKIH07CiAKQEAgLTExNCw2ICsxMTksMTAgQEAgcHVibGljOgogICAgIGJv
b2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYpOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKGNvbnN0IFNjcm9s
bGFibGVBcmVhJik7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50
QXhpcywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+Jik7CisgICAgdW5zaWduZWQgYWN0aXZlU2Ny
b2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0OworICAgIHZv
aWQgc2V0QWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMs
IHVuc2lnbmVkKTsKKyAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5n
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlOyB9Cisg
ICAgdm9pZCBzZXRTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UoYm9vbCBzdGF0ZSkgeyBt
X2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSA9IHN0YXRlOyB9CiAjZW5kaWYKIAogcHJp
dmF0ZToKQEAgLTE3Miw2ICsxODEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tb21lbnR1bVNj
cm9sbEluUHJvZ3Jlc3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9s
bHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgeyBmYWxz
ZSB9OwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQkocmV2aXNpb24g
MTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxl
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtNjg1LDYgKzY4NSwyNiBAQCB2b2lkIFNjcm9sbENvbnRy
b2xsZXI6OmluaXRpYWxpemVHbGlkZVBhCiAgICAgc25hcFN0YXRlLm1fZ2xpZGVQaGFzZVNoaWZ0
ID0gYWNvcygoc25hcFN0YXRlLm1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSAtIHRhcmdldEZpbmFs
V2hlZWxEZWx0YSkgLyAoc25hcFN0YXRlLm1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSArIHRhcmdl
dEZpbmFsV2hlZWxEZWx0YSkpOwogfQogCit1bnNpZ25lZCBTY3JvbGxDb250cm9sbGVyOjphY3Rp
dmVTY3JvbGxTbmFwT2Zmc2V0SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25z
dAoreworICAgIGlmICgoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpICYmICFt
X2hvcml6b250YWxTY3JvbGxTbmFwU3RhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICgo
YXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSAmJiAhbV92ZXJ0aWNhbFNjcm9sbFNu
YXBTdGF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgY29uc3QgU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUmIHNuYXBTdGF0ZSA9IHNjcm9sbFNuYXBQb2ludFN0YXRlKGF4aXMpOworICAg
IHJldHVybiBzbmFwU3RhdGUubV9hY3RpdmVTbmFwSW5kZXg7Cit9CisKK3ZvaWQgU2Nyb2xsQ29u
dHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXMgYXhpcywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgYXV0byogc25hcFN0YXRlID0gKGF4
aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSA/IG1faG9yaXpvbnRhbFNjcm9sbFNu
YXBTdGF0ZS5nZXQoKSA6IG1fdmVydGljYWxTY3JvbGxTbmFwU3RhdGUuZ2V0KCk7CisgICAgaWYg
KCFzbmFwU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIHNuYXBTdGF0ZS0+bV9hY3RpdmVT
bmFwSW5kZXggPSBpbmRleDsKK30KKwogdm9pZCBTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9s
bFNuYXBBbmltYXRpb24oU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIFNjcm9sbFNuYXBTdGF0ZSBuZXdT
dGF0ZSkKIHsKICAgICBBU1NFUlQobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5n
IHx8IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcpOwpAQCAtNzAxLDEwICs3
MjEsMTIgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbgogICAgIAog
ICAgIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uID0gc3RkOjptaW4oc3RkOjptYXgoTGF5b3V0
VW5pdChwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiAvIHNjYWxlRmFjdG9yKSwgc25hcFN0YXRl
Lm1fc25hcE9mZnNldHMuZmlyc3QoKSksIHNuYXBTdGF0ZS5tX3NuYXBPZmZzZXRzLmxhc3QoKSk7
CiAgICAgc25hcFN0YXRlLm1faW5pdGlhbE9mZnNldCA9IG9mZnNldDsKLSAgICBzbmFwU3RhdGUu
bV90YXJnZXRPZmZzZXQgPSBzY2FsZUZhY3RvciAqIGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVu
aXQsIGZsb2F0PihzbmFwU3RhdGUubV9zbmFwT2Zmc2V0cywgcHJvamVjdGVkU2Nyb2xsRGVzdGlu
YXRpb24sIGluaXRpYWxXaGVlbERlbHRhKTsKKyAgICBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERp
ZENoYW5nZSA9IGZhbHNlOworICAgIHNuYXBTdGF0ZS5tX3RhcmdldE9mZnNldCA9IHNjYWxlRmFj
dG9yICogY2xvc2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KHNuYXBTdGF0ZS5tX3Nu
YXBPZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEs
IHNuYXBTdGF0ZS5tX2FjdGl2ZVNuYXBJbmRleCk7CiAgICAgaWYgKHNuYXBTdGF0ZS5tX2luaXRp
YWxPZmZzZXQgPT0gc25hcFN0YXRlLm1fdGFyZ2V0T2Zmc2V0KQogICAgICAgICByZXR1cm47CiAg
ICAgCisgICAgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgPSB0cnVlOwogICAgIHNu
YXBTdGF0ZS5tX2N1cnJlbnRTdGF0ZSA9IG5ld1N0YXRlOwogICAgIGlmIChuZXdTdGF0ZSA9PSBT
Y3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpIHsKICAgICAgICAgc25hcFN0YXRlLm1fc2hvdWxkT3Zl
cnJpZGVXaGVlbEV2ZW50ID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAkocmV2aXNpb24gMTg0
MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9y
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTIgKzU5LDEzIEBAIHN0cnVjdCBTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZSB7CiAgICAgTGF5b3V0VW5pdCBtX3RhcmdldE9mZnNldDsKICAgICAv
LyBVc2VkIHRvIHRyYWNrIGdsaWRpbmcgYmVoYXZpb3IuCiAgICAgTGF5b3V0VW5pdCBtX2JlZ2lu
VHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0OwotICAgIGludCBtX251bVdoZWVsRGVsdGFzVHJhY2tl
ZDsKKyAgICBpbnQgbV9udW1XaGVlbERlbHRhc1RyYWNrZWQgeyAwIH07CisgICAgdW5zaWduZWQg
bV9hY3RpdmVTbmFwSW5kZXggeyAwIH07CiAgICAgZmxvYXQgbV93aGVlbERlbHRhV2luZG93W3do
ZWVsRGVsdGFXaW5kb3dTaXplXTsKLSAgICBmbG9hdCBtX2dsaWRlTWFnbml0dWRlOwotICAgIGZs
b2F0IG1fZ2xpZGVQaGFzZVNoaWZ0OwotICAgIGZsb2F0IG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0
YTsKLSAgICBib29sIG1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50OworICAgIGZsb2F0IG1fZ2xp
ZGVNYWduaXR1ZGUgeyAwIH07CisgICAgZmxvYXQgbV9nbGlkZVBoYXNlU2hpZnQgeyAwIH07Cisg
ICAgZmxvYXQgbV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIHsgMCB9OworICAgIGJvb2wgbV9zaG91
bGRPdmVycmlkZVdoZWVsRXZlbnQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0JKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNywxMSArMzcsNiBAQCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6U2Nyb2xs
U25hcEFuaW1hCiAgICAgLCBtX2luaXRpYWxPZmZzZXQoMCkKICAgICAsIG1fdGFyZ2V0T2Zmc2V0
KDApCiAgICAgLCBtX2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0KDApCi0gICAgLCBtX251
bVdoZWVsRGVsdGFzVHJhY2tlZCgwKQotICAgICwgbV9nbGlkZU1hZ25pdHVkZSgwKQotICAgICwg
bV9nbGlkZVBoYXNlU2hpZnQoMCkKLSAgICAsIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSgwKQot
ICAgICwgbV9zaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoZmFsc2UpCiB7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTg0MTA0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIwNCw2ICszMjA0LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZz
ZXRzKCkKICAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94
KCk7CiAgICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25j
YXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkp
OwogfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb05lYXJlc3RBY3RpdmVTbmFwUG9pbnQo
KQoreworICAgIEludFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7Cisg
ICAgSW50UG9pbnQgY29ycmVjdGVkUG9zaXRpb24gPSBuZWFyZXN0QWN0aXZlU25hcFBvaW50KGN1
cnJlbnRQb3NpdGlvbik7CisgICAgCisgICAgaWYgKGNvcnJlY3RlZFBvc2l0aW9uICE9IGN1cnJl
bnRQb3NpdGlvbikKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQodG9JbnRTaXplKGNvcnJlY3RlZFBv
c2l0aW9uKSk7Cit9CiAjZW5kaWYKIAogaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKQEAg
LTM0OTQsNyArMzUwMyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckwKICAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAo
U2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigp
KQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0Fu
ZFRpbWVycygpOworICAgICAgICBzY3JvbGxBbmltYXRvci0+dXBkYXRlU2Nyb2xsQW5pbWF0b3Jz
QW5kVGltZXJzKCk7CisgICAgc2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBvaW50KCk7CiAjZW5k
aWYKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJ
KHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUg
Q29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtMjI0LDYgKzIyNCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rv
cigpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzY3JvbGxUb05lYXJl
c3RBY3RpdmVTbmFwUG9pbnQoKSBvdmVycmlkZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9T
KQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDUtMTEgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2Nyb2xsIHNuYXAgbG9n
aWMgc2hvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHJlc2l6aW5nIHRoZSBXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzIwMTI1MDg4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbToKKyAgICAgICAgKC1bV0tPdmVyZmxvd1Njcm9s
bFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJn
ZXRDb250ZW50T2Zmc2V0Ol0pOiBNb2RpZnkgdXNlIG9mICdjbG9zZXN0U25hcE9mZnNldCcgdG8g
c2F0aXNmeSB0aGUgYWRkaXRpb25hbAorICAgICAgICBhcmd1bWVudCBJIGFkZGVkLiBUaGlzIGlz
IGN1cnJlbnRseSBub3QgdXNlZCBmb3IgYW55dGhpbmcgb24gaU9TLgorCiAyMDE1LTA1LTEwICBH
eXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVc2UgUmVm
IGluc3RlYWQgb2YgUGFzc1JlZlB0ciBpbiBXZWJDb3JlL3BhZ2UKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9s
bGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQkocmV2aXNp
b24gMTg0MTA0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
ODAsMTAgKzgwLDExIEBAIC0gKHZvaWQpc2Nyb2xsVmlld1dpbGxCZWdpbkRyYWdnaW5nOihVSVMK
ICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogLSAodm9pZClzY3JvbGxWaWV3V2lsbEVuZERy
YWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQb2ludCl2
ZWxvY2l0eSB0YXJnZXRDb250ZW50T2Zmc2V0Oihpbm91dCBDR1BvaW50ICopdGFyZ2V0Q29udGVu
dE9mZnNldAogeworICAgIHNpemVfdCBpZ25vcmU7CiAgICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5v
ZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkKLSAgICAgICAgdGFyZ2V0Q29u
dGVudE9mZnNldC0+eCA9IGNsb3Nlc3RTbmFwT2Zmc2V0PGZsb2F0LCBDR0Zsb2F0Pihfc2Nyb2xs
aW5nVHJlZU5vZGUtPmhvcml6b250YWxTbmFwT2Zmc2V0cygpLCB0YXJnZXRDb250ZW50T2Zmc2V0
LT54LCB2ZWxvY2l0eS54KTsKKyAgICAgICAgdGFyZ2V0Q29udGVudE9mZnNldC0+eCA9IGNsb3Nl
c3RTbmFwT2Zmc2V0PGZsb2F0LCBDR0Zsb2F0Pihfc2Nyb2xsaW5nVHJlZU5vZGUtPmhvcml6b250
YWxTbmFwT2Zmc2V0cygpLCB0YXJnZXRDb250ZW50T2Zmc2V0LT54LCB2ZWxvY2l0eS54LCBpZ25v
cmUpOwogICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlLT52ZXJ0aWNhbFNuYXBPZmZzZXRzKCku
aXNFbXB0eSgpKQotICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gY2xvc2VzdFNuYXBP
ZmZzZXQ8ZmxvYXQsIENHRmxvYXQ+KF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zm
c2V0cygpLCB0YXJnZXRDb250ZW50T2Zmc2V0LT55LCB2ZWxvY2l0eS55KTsKKyAgICAgICAgdGFy
Z2V0Q29udGVudE9mZnNldC0+eSA9IGNsb3Nlc3RTbmFwT2Zmc2V0PGZsb2F0LCBDR0Zsb2F0Pihf
c2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNldHMoKSwgdGFyZ2V0Q29udGVudE9m
ZnNldC0+eSwgdmVsb2NpdHkueSwgaWdub3JlKTsKIH0KICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252873</attachid>
            <date>2015-05-11 11:29:17 -0700</date>
            <delta_ts>2015-05-11 17:26:11 -0700</delta_ts>
            <desc>Patch v4 (Correct iOS build failure)</desc>
            <filename>bug-142590-20150511112756.patch</filename>
            <type>text/plain</type>
            <size>34815</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxNS0wNS0xMSAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGwgc25hcCBsb2dp
YyBzaG91bGQgYmUgdHJpZ2dlcmVkIHdoZW4gcmVzaXppbmcgdGhlIFdlYlZpZXcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5MAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjAxMjUwODg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGVzdHMgY29taW5nIGluIGEgc2Vjb25kIHBhdGNoLgorCisgICAg
ICAgIFJlc2l6aW5nIG9mIHRoZSBtYWluIGZyYW1lIG9yIG92ZXJmbG93IHJlZ2lvbnMgd2FzIHBy
b3Blcmx5IHJlY2FsY3VsYXRpbmcgdGhlIHNjcm9sbCBzbmFwIHBvaW50cywKKyAgICAgICAgYnV0
IHRoZXJlIHdhcyBubyBjb2RlIHRvIGhvbm9yIHRoZXNlIHZhbHVlcyB3aGVuIHdpbmRvdyByZXNp
emluZyB3YXMgb2NjdXJyaW5nLiBUaGUgY29ycmVjdGlvbiB3YXMKKyAgICAgICAgaGFuZGxlZCBp
biB0d28gd2F5czoKKyAgICAgICAgMS4gU2Nyb2xsaW5nIHRocmVhZCBvcGVyYXRpb25zIHRoYXQg
bW92ZWQgdG8gbmV3IHNuYXAgcG9pbnRzIG5lZWRlZCB0byBub3RpZnkgdGhlIG1haW4gdGhyZWFk
IHRoYXQKKyAgICAgICAgICAgaXQgaGFkIHNoaWZ0ZWQgdG8gYSBuZXcgc25hcCBwb2ludCwgc28g
dGhhdCB0aGUgcmVzaXplIGNvZGUgKHdoaWNoIGhhcHBlbnMgb24gdGhlIG1haW4gdGhyZWFkKQor
ICAgICAgICAgICBjb3VsZCBlbnN1cmUgdGhhdCB3ZSBzdGF5ZWQgY2xhbXBlZCB0byB0aGUgY29y
cmVjdCAndGlsZScgaW4gdGhlIHNuYXAgcmVnaW9uLgorICAgICAgICAyLiBNYWluIHRocmVhZCAo
b3ZlcmZsb3cpIHJlc2l6ZXMgd2VyZSBsaWtld2lzZSBtaXNzaW5nIGNvZGUgdG8gaG9ub3IgdGhl
IGN1cnJlbnQgc25hcCBwb3NpdGlvbgorICAgICAgICAgICBhZnRlciByZXNpemluZyBjYWxjdWxh
dGlvbnMgd2VyZSBjb21wbGV0ZS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIHJlcXVpcmVk
IHRoZSBhZGRpdGlvbiBvZiB0d28gaW5kaWNlcyB0byB0aGUgc2Nyb2xsYWJsZSBhcmVhIHRvIHRy
YWNrIHdoaWNoIHNjcm9sbAorICAgICAgICBzbmFwIHBvaW50IHdhcyBjdXJyZW50bHkgYmVpbmcg
dXNlZC4gV2UgZG9uJ3QgYm90aGVyIHdpdGggYSAnbm9uZScgY2FzZSBiZWNhdXNlIHlvdSBjYW5u
b3QgaGF2ZSBhCisgICAgICAgICdub25lJyBzdGF0ZSB3aGVuIHlvdSBoYXZlIGFuIGFjdGl2ZSBz
ZXQgb2Ygc2Nyb2xsIHNuYXAgcG9pbnRzLCBhbmQgd2UgZG8gbm90IGV4ZWN1dGUgdGhpcyBjb2Rl
CisgICAgICAgIGlmIHRoZSBzY3JvbGwgc25hcCBwb2ludHMgYXJlIG51bGwuCisKKyAgICAgICAg
VGhlIEZyYW1lVmlldyBjb2RlIHdhcyBjb21wdXRpbmcgdXBkYXRlZCBzbmFwIG9mZnNldHMgYWZ0
ZXIgaXQgaGFkIGRpc3BhdGNoZWQgZnJhbWUgdmlldyBsYXlvdXQKKyAgICAgICAgaW5mb3JtYXRp
b24gdG8gdGhlIHNjcm9sbGluZyB0aHJlYWQsIHdoaWNoIHdhcyB3cm9uZy4gVGhpcyB3YXMgYWxz
byBjb3JyZWN0ZWQuCisKKyAgICAgICAgSSB0aGluayBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byB0
cmFjayBhbGwgb2YgdGhpcyBzdGF0ZSBpbnNpZGUgdGhlIFNjcm9sbENvbnRyb2xsZXIsIGJ1dCB0
aGUgY3VycmVudAorICAgICAgICBzY3JvbGwgc25hcCBhcmNoaXRlY3R1cmUgZGVzdHJveXMgYW5k
IHJlY3JlYXRlcyB0aGUgc3RhdGUgZWFjaCB0aW1lIGEgbmV3IHNldCBvZiBpbnRlcmFjdGlvbnMg
c3RhcnRzLgorICAgICAgICBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiB0aGUgZnV0dXJlLCB3aGlj
aCB3b3VsZCBhbGxvdyB1cyB0byByZW1vdmUgc29tZSBvZiB0aGlzIGxvY2FsIHN0YXRlLgorCisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKTogTWFrZSBzdXJlICd1cGRhdGVTbmFwT2Zmc2V0cycg
aXMgY2FsbGVkIHByaW9yIHRvCisgICAgICAgIGNhbGxpbmcgJ2ZyYW1lVmlld0xheW91dFVwZGF0
ZWQnIHNvIHRoZSBzY3JvbGxpbmcgdGhyZWFkIGdldHMgY29ycmVjdCB1cGRhdGVkIHBvaW50cy4g
QWRkIGEgbmV3CisgICAgICAgIGNhbGwgdG8gJ3Njcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2lu
dCcsIHdoaWNoIHdpbGwga2VlcCB1cyBvbiBvdXIgY3VycmVudCBzbmFwIHBvaW50IGR1cmluZwor
ICAgICAgICByZXNpemUgKGlmIGFwcHJvcHJpYXRlKS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKTogQWRk
ZWQuIFRoaXMgZmluZHMgYW5kIG5vdGlmaWVzCisgICAgICAgIHRoZSBjb3JyZWN0IHNjcm9sbCBy
ZWdpb24gd2hlbiBhIG5ldyBzbmFwIHBvc2l0aW9uIChpbmRleCkgaGFzIGJlZW4gc2VsZWN0ZWQg
YnkgdXNlciBpbnRlcmFjdGlvbiBvbgorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRlZmVyVGVzdHNGb3JS
ZWFzb24pOiBBZGRlZCBhbiBhc3NlcnRpb24gZm9yICdpc01haW5UaHJlYWQnLgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGVzdERlZmVycmFsRm9y
UmVhc29uKTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvci5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zm
c2V0cy5oOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXQpOiBNb2RpZmllZCB0
byBhbHNvIHJldHVybiB0aGUgc2VsZWN0ZWQgc25hcCBwb2ludCBpbmRleCBzbyB3ZSBjYW4gdHJh
Y2sKKyAgICAgICAgaXQgdG8gaGFuZGxlIHJlc2l6ZSBvcGVyYXRpb25zLgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWU6OnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhy
ZWFkZWRTY3JvbGxpbmdUcmVlOjp1cGRhdGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyk6IEFkZGVk
IG1ldGhvZCB0byBkaXNwYXRjaCB0aGUgYWN0aXZlCisgICAgICAgIGhvcml6b250YWwgYW5kIHZl
cnRpY2FsIHNjcm9sbCBzbmFwIGluZGljZXMgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQuCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmg6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpo
YW5kbGVXaGVlbEV2ZW50KTogQWZ0ZXIgdGhlIHNjcm9sbCBjb250cm9sbGVyIHByb2Nlc3Nlcwor
ICAgICAgICB0aGUgY3VycmVudCBldmVudCwgbm90aWZ5IHRoZSBtYWluIHRocmVhZCBvZiBhbnkg
Y2hhbmdlIGluIHRoZSBhY3RpdmUgc2Nyb2xsIHNuYXAgaW5kZXguCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
OmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5nZSk6IEFkZGVkIG1ldGhvZCB0byBh
bGxvdyBTY3JvbGxBbmltYXRvcgorICAgICAgICBjbGllbnRzIHRvIGZpbmQgb3V0IGFib3V0IHRo
ZSBjdXJyZW50IHNjcm9sbCBzbmFwIHN0YXRlLCB3aGljaCBpcyBvbmx5IGtub3duIGJ5IHRoZSBT
Y3JvbGxDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmFjdGl2
ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBv
aW50KTogQWRkZWQgbWV0aG9kIHRoYXQgYWxsb3dzIHVzIHRvIHNldCBzY3JvbGwgcG9zaXRpb24K
KyAgICAgICAgdG8gb25lIG9mIG91ciBhY3RpdmUgc2Nyb2xsIHNuYXAgb2Zmc2V0cy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVs
RXZlbnQpOiBJZiB0aGUgYWN0aXZlIHNjcm9sbCBzbmFwIG9mZnNldCBoYXMgY2hhbmdlZCwgbWFr
ZSBzdXJlIHdlCisgICAgICAgIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyB2YWx1ZXMgZm9yIHBvdGVu
dGlhbCByZXNpemUgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
OjpjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cyk6IE1ha2Ugc3VyZSB0byBhbHNvIGNsZWFyIG91
dCB0aGUgY3VycmVudCBzbmFwIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFy
ZWE6OmNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYWJsZUFyZWE6Om5lYXJlc3RBY3RpdmVTbmFwUG9pbnQpOiBOZXcgbWV0aG9kIHRoYXQg
cmV0dXJucyBhbiB1cGRhdGVkIEludFBvaW50IHJlZmxlY3RpbmcKKyAgICAgICAgdGhlIHByb3Bl
ciBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIGFjdGl2ZSBzY3JvbGwgc25hcCBvZmZzZXQu
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGFibGVBcmVhOjpjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudEhvcml6b250YWxT
bmFwUG9pbnRJbmRleCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6
OmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb05lYXJlc3RBY3Rp
dmVTbmFwUG9pbnQpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250
cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyQ2xpZW50OjphY3Rp
dmVTY3JvbGxPZmZzZXRJbmRleCk6IEFkZGVkIG5ldyBtZXRob2QgZm9yIGNsaWVudHMgdG8gaW1w
bGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xs
U25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxDb250cm9sbGVyOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UpOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9y
QXhpcyk6IEhlbHBlciBtZXRob2QgdG8gcmV0dXJuIGN1cnJlbnQgYWN0aXZlCisgICAgICAgIGlu
ZGV4IChpZiBhcHBsaWNhYmxlKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6
OnNldEFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMpOiBIZWxwZXIgZnVuY3Rpb24g
dG8gc2FmZWx5IHNldAorICAgICAgICB0aGUgY3VycmVudCBhY3RpdmUgaW5kZXguCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24pOiBV
cGRhdGVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyBhY3RpdmUgc2Nyb2xsIHNuYXAKKyAgICAg
ICAgaW5kZXgsIGFzIHdlbGwgYXMgd2hldGhlciB0aGUgY3VycmVudCBhbmltYXRpb24gYWN0dWFs
bHkgY2hhbmdlZCB0aGUgYWN0aXZlIHNuYXAgcG9pbnQgb2Zmc2V0LgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6IFJldmlzZSB0byB1c2UgbW9kZXJu
IEMrKyBpbml0aWFsaXplcnMsIGFuZCB0byB0cmFjayBhIG5ldyBpbmRleAorICAgICAgICB0aGF0
IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc2Nyb2xsIHNuYXAgb2Zmc2V0LgorICAgICAgICAqIHBs
YXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlKTogVXBk
YXRlIGZvciBtb2Rlcm4gQysrIHN5bnRheC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvTmVhcmVzdEFj
dGl2ZVNuYXBQb2ludCk6IE5ldyBtZXRob2QgdG8gc2V0IHNjcm9sbCBwb3NpdGlvbiB0byBiZSBv
bmUgb2Ygb3VyCisgICAgICAgIGFjdGl2ZSBzY3JvbGwgc25hcCBwb2ludHMuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KTogQWRkIGEg
bmV3IGNhbGwgdG8gJ3Njcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2ludCcgc28gdGhhdAorICAg
ICAgICB3ZSBzdGF5IG9uIHRoZSBjdXJyZW50IHNjcm9sbCBzbmFwIG9mZnNldCBkdXJpbmcgcmVz
aXppbmcuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisKIDIwMTUtMDUtMTEg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkNvbnRlbnQg
Y3Jhc2ggdW5kZXIgY29tLmFwcGxlLldlYkNvcmU6IFdlYkNvcmU6OldlYktpdENTU1Jlc291cmNl
VmFsdWU6OmlzQ1NTVmFsdWVOb25lIGNvbnN0ICsgNgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAkocmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTc0LDcgKzI5NzQsMTEgQEAgdm9pZCBGcmFtZVZp
ZXc6OnBlcmZvcm1Qb3N0TGF5b3V0VGFza3MoKQogICAgIGZyYW1lKCkubG9hZGVyKCkuY2xpZW50
KCkuZGlzcGF0Y2hEaWRMYXlvdXQoKTsKIAogICAgIHVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwot
ICAgIAorCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB1cGRhdGVTbmFwT2Zmc2V0
cygpOworI2VuZGlmCisKICAgICAvLyBsYXlvdXQoKSBwcm90ZWN0cyBGcmFtZVZpZXcsIGJ1dCBp
dCBzdGlsbCBjYW4gZ2V0IGRlc3Ryb3llZCB3aGVuIHVwZGF0ZUVtYmVkZGVkT2JqZWN0cygpCiAg
ICAgLy8gaXMgY2FsbGVkIHRocm91Z2ggdGhlIHBvc3QgbGF5b3V0IHRpbWVyLgogICAgIFJlZjxG
cmFtZVZpZXc+IHByb3RlY3QoKnRoaXMpOwpAQCAtMjk5NiwxNCArMzAwMCwxMCBAQCB2b2lkIEZy
YW1lVmlldzo6cGVyZm9ybVBvc3RMYXlvdXRUYXNrcygpCiAgICAgc2VuZFJlc2l6ZUV2ZW50SWZO
ZWVkZWQoKTsKICAgICB2aWV3cG9ydENvbnRlbnRzQ2hhbmdlZCgpOwogCi0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICBpZiAoIWZyYW1lKCkuaXNNYWluRnJhbWUoKSkgewotICAgICAg
ICB1cGRhdGVTbmFwT2Zmc2V0cygpOwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgaWYgKFNj
cm9sbEFuaW1hdG9yKiBzY3JvbGxBbmltYXRvciA9IGV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
LSAgICAgICAgICAgIHJldHVybiBzY3JvbGxBbmltYXRvci0+dXBkYXRlU2Nyb2xsQW5pbWF0b3Jz
QW5kVGltZXJzKCk7Ci0jZW5kaWYKLSAgICB9CisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkg
JiYgUExBVEZPUk0oTUFDKQorICAgIGlmIChTY3JvbGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3Ig
PSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAgICAgIHNjcm9sbEFuaW1hdG9yLT51cGRh
dGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsKKyAgICBzY3JvbGxUb05lYXJlc3RBY3RpdmVT
bmFwUG9pbnQoKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2
aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3Jv
bGxpbmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2Miw4ICs1NjIsMzMgQEAg
U3RyaW5nIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbAogfQogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCit2b2lkIEFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFNu
YXBPZmZzZXRJbmRpY2VzKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVk
IGhvcml6b250YWxJbmRleCwgdW5zaWduZWQgdmVydGljYWxJbmRleCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIAorICAgIGlmICghbV9wYWdlKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBmcmFtZVZpZXdGb3JTY3JvbGxpbmdO
b2RlKHNjcm9sbGluZ05vZGVJRCk7CisgICAgaWYgKCFmcmFtZVZpZXcpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoc2Nyb2xsaW5nTm9kZUlEID09IGZyYW1lVmlldy0+c2Nyb2xsTGF5
ZXJJRCgpKSB7CisgICAgICAgIGZyYW1lVmlldy0+c2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9p
bnRJbmRleChob3Jpem9udGFsSW5kZXgpOworICAgICAgICBmcmFtZVZpZXctPnNldEN1cnJlbnRW
ZXJ0aWNhbFNuYXBQb2ludEluZGV4KHZlcnRpY2FsSW5kZXgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIC8vIE92ZXJmbG93LXNjcm9sbCBhcmVhLgorICAgIGlmIChTY3JvbGxh
YmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSBmcmFtZVZpZXctPnNjcm9sbGFibGVBcmVhRm9yU2Ny
b2xsTGF5ZXJJRChzY3JvbGxpbmdOb2RlSUQpKSB7CisgICAgICAgIHNjcm9sbGFibGVBcmVhLT5z
ZXRDdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KGhvcml6b250YWxJbmRleCk7CisgICAg
ICAgIHNjcm9sbGFibGVBcmVhLT5zZXRDdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCh2ZXJ0
aWNhbEluZGV4KTsKKyAgICB9Cit9CisKIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVh
SWRlbnRpZmllciBpZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRy
aWdnZXJSZWFzb24gcmVhc29uKSBjb25zdAogeworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CiAgICAgaWYgKCFtX3BhZ2UgfHwgIW1fcGFnZS0+ZXhwZWN0c1doZWVsRXZlbnRUcmlnZ2Vycygp
KQogICAgICAgICByZXR1cm47CiAKQEAgLTU3NSw2ICs2MDAsNyBAQCB2b2lkIEFzeW5jU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmRlZmVyVGVzCiAKIHZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
cjo6cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Ny
b2xsYWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6
RGVmZXJUZXN0VHJpZ2dlclJlYXNvbiByZWFzb24pIGNvbnN0CiB7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKICAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdlLT5leHBlY3RzV2hlZWxFdmVu
dFRyaWdnZXJzKCkpCiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAko
cmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNT
Y3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNjaGVkdWxlVXBkYXRlU2Nyb2xsUG9zaXRp
b25BZnRlckFzeW5jU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYsIGJv
b2wgcHJvZ3JhbW1hdGljU2Nyb2xsLCBTZXRPclN5bmNTY3JvbGxpbmdMYXllclBvc2l0aW9uKTsK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHZvaWQgdXBkYXRlU2Nyb2xsU25hcE9mZnNldElu
ZGljZXMoU2Nyb2xsaW5nTm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsSW5kZXgsIHVuc2lnbmVk
IHZlcnRpY2FsSW5kZXgpOwogICAgIHZvaWQgZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50
VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmln
Z2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSBjb25zdDsKICAgICB2b2lkIHJlbW92ZVRlc3RE
ZWZlcnJhbEZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRl
bnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSBj
b25zdDsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Nj
cm9sbFNuYXBPZmZzZXRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRzLmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zmc2V0cy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogCiAjaW5j
bHVkZSAiU2Nyb2xsVHlwZXMuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQsMTcgKzQ1LDE5
IEBAIHZvaWQgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgKIC8vIGFzIHdlbGwg
YXMgYSBWZWxvY2l0eVR5cGUgaW5kaWNhdGluZyB0aGUgdmVsb2NpdHkgKGUuZy4gZmxvYXQsIENH
RmxvYXQsIGV0Yy4pIFRoaXMgZnVuY3Rpb24gaXMgdGVtcGxhdGVkIGJlY2F1c2UgdGhlIFVJIHBy
b2Nlc3Mgd2lsbCBub3cKIC8vIHVzZSBwaXhlbCBzbmFwcGVkIGZsb2F0cyB0byByZXByZXNlbnQg
c25hcCBvZmZzZXRzIHJhdGhlciB0aGFuIExheW91dFVuaXRzLgogdGVtcGxhdGUgPHR5cGVuYW1l
IExheW91dFR5cGUsIHR5cGVuYW1lIFZlbG9jaXR5VHlwZT4KLUxheW91dFR5cGUgY2xvc2VzdFNu
YXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91dFR5cGU+JiBzbmFwT2Zmc2V0cywgTGF5b3V0VHlw
ZSBzY3JvbGxEZXN0aW5hdGlvbiwgVmVsb2NpdHlUeXBlIHZlbG9jaXR5KQorTGF5b3V0VHlwZSBj
bG9zZXN0U25hcE9mZnNldChjb25zdCBWZWN0b3I8TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzLCBM
YXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0aW9uLCBWZWxvY2l0eVR5cGUgdmVsb2NpdHksIHVuc2ln
bmVkJiBhY3RpdmVTbmFwSW5kZXgpCiB7CiAgICAgQVNTRVJUKHNuYXBPZmZzZXRzLnNpemUoKSk7
CisgICAgYWN0aXZlU25hcEluZGV4ID0gMDsKICAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPD0g
c25hcE9mZnNldHMuZmlyc3QoKSkKICAgICAgICAgcmV0dXJuIHNuYXBPZmZzZXRzLmZpcnN0KCk7
CiAKKyAgICBhY3RpdmVTbmFwSW5kZXggPSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOwogICAgIGlm
IChzY3JvbGxEZXN0aW5hdGlvbiA+PSBzbmFwT2Zmc2V0cy5sYXN0KCkpCiAgICAgICAgIHJldHVy
biBzbmFwT2Zmc2V0cy5sYXN0KCk7CiAKICAgICBzaXplX3QgbG93ZXJJbmRleCA9IDA7Ci0gICAg
c2l6ZV90IHVwcGVySW5kZXggPSBzbmFwT2Zmc2V0cy5zaXplKCkgLSAxOworICAgIHNpemVfdCB1
cHBlckluZGV4ID0gY2xhbXBUbzx1bnNpZ25lZD4oc25hcE9mZnNldHMuc2l6ZSgpKSAtIDE7CiAg
ICAgd2hpbGUgKGxvd2VySW5kZXggPCB1cHBlckluZGV4IC0gMSkgewogICAgICAgICBzaXplX3Qg
bWlkZGxlSW5kZXggPSAobG93ZXJJbmRleCArIHVwcGVySW5kZXgpIC8gMjsKICAgICAgICAgaWYg
KHNjcm9sbERlc3RpbmF0aW9uIDwgc25hcE9mZnNldHNbbWlkZGxlSW5kZXhdKQpAQCAtNzAsMTAg
KzczLDEzIEBAIExheW91dFR5cGUgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG8KICAgICBM
YXlvdXRUeXBlIGxvd2VyU25hcFBvc2l0aW9uID0gc25hcE9mZnNldHNbbG93ZXJJbmRleF07CiAg
ICAgTGF5b3V0VHlwZSB1cHBlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW3VwcGVySW5kZXhd
OwogICAgIC8vIE5vbnplcm8gdmVsb2NpdHkgaW5kaWNhdGVzIGEgZmxpY2sgZ2VzdHVyZS4gRXZl
biBpZiBhbm90aGVyIHNuYXAgcG9pbnQgaXMgY2xvc2VyLCBzbmFwIHRvIHRoZSBvbmUgaW4gdGhl
IGRpcmVjdGlvbiBvZiB0aGUgZmxpY2sgZ2VzdHVyZS4KLSAgICBpZiAodmVsb2NpdHkpCisgICAg
aWYgKHZlbG9jaXR5KSB7CisgICAgICAgIGFjdGl2ZVNuYXBJbmRleCA9ICh2ZWxvY2l0eSA8IDAp
ID8gY2xhbXBUbzx1bnNpZ25lZD4obG93ZXJJbmRleCkgOiBjbGFtcFRvPHVuc2lnbmVkPih1cHBl
ckluZGV4KTsKICAgICAgICAgcmV0dXJuIHZlbG9jaXR5IDwgMCA/IGxvd2VyU25hcFBvc2l0aW9u
IDogdXBwZXJTbmFwUG9zaXRpb247CisgICAgfQogCiAgICAgYm9vbCBpc0Nsb3NlclRvTG93ZXJT
bmFwUG9zaXRpb24gPSBzY3JvbGxEZXN0aW5hdGlvbiAtIGxvd2VyU25hcFBvc2l0aW9uIDw9IHVw
cGVyU25hcFBvc2l0aW9uIC0gc2Nyb2xsRGVzdGluYXRpb247CisgICAgYWN0aXZlU25hcEluZGV4
ID0gaXNDbG9zZXJUb0xvd2VyU25hcFBvc2l0aW9uID8gbG93ZXJJbmRleCA6IHVwcGVySW5kZXg7
CiAgICAgcmV0dXJuIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA/IGxvd2VyU25hcFBvc2l0
aW9uIDogdXBwZXJTbmFwUG9zaXRpb247CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlLmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMTAwLDYgKzEwMCw3IEBAIHB1YmxpYzoKICAgICAKICNpZiBQTEFURk9STShNQUMpCiAgICAg
dmlydHVhbCB2b2lkIGhhbmRsZVdoZWVsRXZlbnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFz
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyhT
Y3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIC8qaG9yaXpvbnRhbEluZGV4Ki8sIHVuc2lnbmVkIC8q
dmVydGljYWxJbmRleCovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVmZXJUZXN0c0ZvclJlYXNv
bihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNjcm9sbGFibGVBcmVhSWRlbnRpZmllciwgV2hlZWxF
dmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6
U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVz
dFRyaWdnZXJSZWFzb24pIHsgfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAJKHJldmlzaW9u
IDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xs
aW5nVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw2ICsxMjMsMTcgQEAgdm9pZCBUaHJl
YWRlZFNjcm9sbGluZ1RyZWU6OmhhbmRsZVdoZWVsRQogICAgIH0pOwogfQogCit2b2lkIFRocmVh
ZGVkU2Nyb2xsaW5nVHJlZTo6dXBkYXRlU2Nyb2xsU25hcE9mZnNldEluZGljZXMoU2Nyb2xsaW5n
Tm9kZUlEIG5vZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbEluZGV4LCB1bnNpZ25lZCB2ZXJ0aWNh
bEluZGV4KQoreworICAgIGlmICghbV9zY3JvbGxpbmdDb29yZGluYXRvcikKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFJlZlB0cjxBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yPiBzY3JvbGxp
bmdDb29yZGluYXRvciA9IG1fc2Nyb2xsaW5nQ29vcmRpbmF0b3I7CisgICAgUnVuTG9vcDo6bWFp
bigpLmRpc3BhdGNoKFtzY3JvbGxpbmdDb29yZGluYXRvciwgbm9kZUlELCBob3Jpem9udGFsSW5k
ZXgsIHZlcnRpY2FsSW5kZXhdIHsKKyAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPnVwZGF0
ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKG5vZGVJRCwgaG9yaXpvbnRhbEluZGV4LCB2ZXJ0aWNh
bEluZGV4KTsKKyAgICB9KTsKK30KKwogdm9pZCBUaHJlYWRlZFNjcm9sbGluZ1RyZWU6OmRlZmVy
VGVzdHNGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50
aWZpZXIgaWRlbnRpZmllciwgV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2Vy
UmVhc29uIHJlYXNvbikKIHsKICAgICBpZiAoIW1fc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9s
bGluZ1RyZWUuaAkocmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYy
LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxpbmdUcmVlTm9kZURpZFNj
cm9sbChTY3JvbGxpbmdOb2RlSUQsIGNvbnN0IEZsb2F0UG9pbnQmIHNjcm9sbFBvc2l0aW9uLCBT
ZXRPclN5bmNTY3JvbGxpbmdMYXllclBvc2l0aW9uID0gU3luY1Njcm9sbGluZ0xheWVyUG9zaXRp
b24pIG92ZXJyaWRlOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIGhhbmRsZVdoZWVsRXZl
bnRQaGFzZShQbGF0Zm9ybVdoZWVsRXZlbnRQaGFzZSkgb3ZlcnJpZGU7CisgICAgdm9pZCB1cGRh
dGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyhTY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6
b250YWxJbmRleCwgdW5zaWduZWQgdmVydGljYWxJbmRleCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBk
ZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJ
ZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24p
IG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRy
aWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIG92ZXJyaWRlOwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xs
aW5nTm9kZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbQkocmV2aXNpb24gMTg0
MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVG
cmFtZVNjcm9sbGluZ05vZGVNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE4NCw2ICsxODQsMTIg
QEAgdm9pZCBTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOgogI2VuZGlmCiAKICAg
ICBtX3Njcm9sbENvbnRyb2xsZXIuaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQorICAgIGlmIChtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZl
U2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKCkpIHsKKyAgICAgICAgc2Nyb2xsaW5nVHJl
ZSgpLnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKHNjcm9sbGluZ05vZGVJRCgpLCBtX3Nj
cm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxF
dmVudEF4aXM6Okhvcml6b250YWwpLCBtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25h
cE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CisgICAgICAg
IG1fc2Nyb2xsQ29udHJvbGxlci5zZXRTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UoZmFs
c2UpOworICAgIH0KKyNlbmRpZgogICAgIHNjcm9sbGluZ1RyZWUoKS5zZXRPckNsZWFyTGF0Y2hl
ZE5vZGUod2hlZWxFdmVudCwgc2Nyb2xsaW5nTm9kZUlEKCkpOwogICAgIHNjcm9sbGluZ1RyZWUo
KS5oYW5kbGVXaGVlbEV2ZW50UGhhc2Uod2hlZWxFdmVudC5waGFzZSgpKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxBbmltYXRvci5jcHAJKHJldmlzaW9uIDE4NDEw
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsNiArODcsMTYgQEAgYm9vbCBTY3JvbGxBbmltYXRvcjo6cHJvY2Vzc1do
ZWVsRXZlbnRGbwogewogICAgIHJldHVybiBtX3Njcm9sbENvbnRyb2xsZXIucHJvY2Vzc1doZWVs
RXZlbnRGb3JTY3JvbGxTbmFwKHdoZWVsRXZlbnQpOwogfQorCitib29sIFNjcm9sbEFuaW1hdG9y
OjphY3RpdmVTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4RGlkQ2hh
bmdlKCk7Cit9CisKK3Vuc2lnbmVkIFNjcm9sbEFuaW1hdG9yOjphY3RpdmVTY3JvbGxTbmFwT2Zm
c2V0SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAoreworICAgIHJldHVy
biBtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhh
eGlzKTsKK30KICNlbmRpZgogCiBib29sIFNjcm9sbEFuaW1hdG9yOjpoYW5kbGVXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbEFuaW1hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuaAkocmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsQW5pbWF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDYgKzEzMCw4
IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVNjcm9sbEFuaW1hdG9yc0FuZFRpbWVycygpOwog
ICAgIExheW91dFVuaXQgc2Nyb2xsT2Zmc2V0T25BeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdm9pZCBpbW1lZGlhdGVTY3JvbGxPbkF4aXMoU2Nyb2xsRXZlbnRBeGlz
LCBmbG9hdCBkZWx0YSkgb3ZlcnJpZGU7CisgICAgYm9vbCBhY3RpdmVTY3JvbGxTbmFwT2Zmc2V0
SW5kZXhEaWRDaGFuZ2UoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBhY3RpdmVTY3JvbGxTbmFwT2Zm
c2V0SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcykgY29uc3Q7CiAjZW5kaWYKIAogcHJvdGVj
dGVkOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5jcHAJKHJldmlzaW9u
IDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
NywgMjAwOCwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNi0yMDA4LCAyMDE0LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTIwLDYgKzE1MjAs
MTggQEAgdm9pZCBTY3JvbGxWaWV3OjpzdHlsZURpZENoYW5nZSgpCiAgICAgICAgIG1fdmVydGlj
YWxTY3JvbGxiYXItPnN0eWxlQ2hhbmdlZCgpOwogfQogCisjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBvaW50KCkK
K3sKKyAgICBJbnRQb2ludCBjdXJyZW50UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbigpOworICAg
IEludFBvaW50IGNvcnJlY3RlZFBvc2l0aW9uID0gbmVhcmVzdEFjdGl2ZVNuYXBQb2ludChjdXJy
ZW50UG9zaXRpb24pOworICAgIAorICAgIGlmIChjb3JyZWN0ZWRQb3NpdGlvbiAhPSBjdXJyZW50
UG9zaXRpb24pCisgICAgICAgIHNldFNjcm9sbFBvc2l0aW9uKGNvcnJlY3RlZFBvc2l0aW9uKTsK
K30KKyNlbmRpZgorICAgIAorCiAjaWYgIVBMQVRGT1JNKENPQ09BKQogCiB2b2lkIFNjcm9sbFZp
ZXc6OnBsYXRmb3JtQWRkQ2hpbGQoV2lkZ2V0KikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
Y3JvbGxWaWV3LmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1Njcm9sbFZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LTIwMDgsIDIw
MTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTM4
Nyw2ICszODcsMTAgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzY3JvbGxQ
b3NpdGlvbkNoYW5nZWRWaWFQbGF0Zm9ybVdpZGdldChjb25zdCBJbnRQb2ludCYgb2xkUG9zaXRp
b24sIGNvbnN0IEludFBvaW50JiBuZXdQb3NpdGlvbik7CiAKKyNpZiBFTkFCTEUoQ1NTX1NDUk9M
TF9TTkFQKQorICAgIHZvaWQgc2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBvaW50KCkgb3ZlcnJp
ZGU7CisjZW5kaWYKKwogcHJvdGVjdGVkOgogICAgIFNjcm9sbFZpZXcoKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkocmV2aXNpb24gMTg0MTA0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIHN0cnVjdCBTYW1lU2l6ZUFzU2Nyb2xsYWJsZUFyZWEg
ewogICAgIHZpcnR1YWwgflNhbWVTaXplQXNTY3JvbGxhYmxlQXJlYSgpOwogI2lmIEVOQUJMRShD
U1NfU0NST0xMX1NOQVApCiAgICAgdm9pZCogcG9pbnRlcnNbM107CisgICAgdW5zaWduZWQgY3Vy
cmVudEluZGljZXNbMl07CiAjZWxzZQogICAgIHZvaWQqIHBvaW50ZXI7CiAjZW5kaWYKQEAgLTE4
OCw3ICsxODksMTQgQEAgYm9vbCBTY3JvbGxhYmxlQXJlYTo6aGFuZGxlV2hlZWxFdmVudChjbwog
ICAgIGlmICghaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3IoKS5oYW5kbGVXaGVlbEV2ZW50KHdo
ZWVsRXZlbnQpOworICAgIGJvb2wgaGFuZGxlZEV2ZW50ID0gc2Nyb2xsQW5pbWF0b3IoKS5oYW5k
bGVXaGVlbEV2ZW50KHdoZWVsRXZlbnQpOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApICYm
IFBMQVRGT1JNKE1BQykKKyAgICBpZiAoc2Nyb2xsQW5pbWF0b3IoKS5hY3RpdmVTY3JvbGxTbmFw
T2Zmc2V0SW5kZXhEaWRDaGFuZ2UoKSkgeworICAgICAgICBzZXRDdXJyZW50SG9yaXpvbnRhbFNu
YXBQb2ludEluZGV4KHNjcm9sbEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4
Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpKTsKKyAgICAgICAgc2V0Q3VycmVu
dFZlcnRpY2FsU25hcFBvaW50SW5kZXgoc2Nyb2xsQW5pbWF0b3IoKS5hY3RpdmVTY3JvbGxTbmFw
T2Zmc2V0SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpczo6VmVydGljYWwpKTsKKyAgICB9Cisj
ZW5kaWYKKyAgICByZXR1cm4gaGFuZGxlZEV2ZW50OwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKQEAgLTQwOSwxMSArNDE3LDQyIEBAIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNldFZlcnRp
Y2FsU25hcE9mZnMKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6OmNsZWFySG9yaXpvbnRhbFNuYXBPZmZz
ZXRzKCkKIHsKICAgICBtX2hvcml6b250YWxTbmFwT2Zmc2V0cyA9IG51bGxwdHI7CisgICAgbV9j
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4ID0gMDsKIH0KIAogdm9pZCBTY3JvbGxhYmxl
QXJlYTo6Y2xlYXJWZXJ0aWNhbFNuYXBPZmZzZXRzKCkKIHsKICAgICBtX3ZlcnRpY2FsU25hcE9m
ZnNldHMgPSBudWxscHRyOworICAgIG1fY3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXggPSAw
OworfQorCitJbnRQb2ludCBTY3JvbGxhYmxlQXJlYTo6bmVhcmVzdEFjdGl2ZVNuYXBQb2ludChj
b25zdCBJbnRQb2ludCYgY3VycmVudFBvc2l0aW9uKQoreworICAgIGlmICghaG9yaXpvbnRhbFNu
YXBPZmZzZXRzKCkgJiYgIXZlcnRpY2FsU25hcE9mZnNldHMoKSkKKyAgICAgICAgcmV0dXJuIGN1
cnJlbnRQb3NpdGlvbjsKKyAgICAKKyAgICBpZiAoIWV4aXN0aW5nU2Nyb2xsQW5pbWF0b3IoKSkK
KyAgICAgICAgcmV0dXJuIGN1cnJlbnRQb3NpdGlvbjsKKyAgICAKKyAgICBJbnRQb2ludCBjb3Jy
ZWN0ZWRQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKKyAgICAKKyAgICBpZiAoaG9yaXpvbnRh
bFNuYXBPZmZzZXRzKCkpIHsKKyAgICAgICAgY29uc3QgYXV0byYgaG9yaXpvbnRhbCA9ICpob3Jp
em9udGFsU25hcE9mZnNldHMoKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBhY3RpdmVJbmRl
eCA9IGN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoKTsKKyAgICAgICAgaWYgKGFjdGl2
ZUluZGV4IDwgaG9yaXpvbnRhbC5zaXplKCkpCisgICAgICAgICAgICBjb3JyZWN0ZWRQb3NpdGlv
bi5zZXRYKGhvcml6b250YWxbYWN0aXZlSW5kZXhdLnRvSW50KCkpOworICAgIH0KKyAgICAKKyAg
ICBpZiAodmVydGljYWxTbmFwT2Zmc2V0cygpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIHZlcnRp
Y2FsID0gKnZlcnRpY2FsU25hcE9mZnNldHMoKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBh
Y3RpdmVJbmRleCA9IGN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCk7CisgICAgICAgIGlm
IChhY3RpdmVJbmRleCA8IHZlcnRpY2FsLnNpemUoKSkKKyAgICAgICAgICAgIGNvcnJlY3RlZFBv
c2l0aW9uLnNldFkodmVydGljYWxbYWN0aXZlSW5kZXhdLnRvSW50KCkpOworICAgIH0KKworICAg
IHJldHVybiBjb3JyZWN0ZWRQb3NpdGlvbjsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwgMjAx
NC0yMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjYsNiArNjYsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmVy
dGljYWxTbmFwT2Zmc2V0cyhzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPExheW91dFVuaXQ+Pik7CiAg
ICAgdm9pZCBjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygpOwogICAgIHZvaWQgY2xlYXJWZXJ0
aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgdW5zaWduZWQgY3VycmVudEhvcml6b250YWxTbmFwUG9p
bnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRl
eDsgfQorICAgIHZvaWQgc2V0Q3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCh1bnNpZ25l
ZCBpbmRleCkgeyBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXggPSBpbmRleDsgfQor
ICAgIHVuc2lnbmVkIGN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleDsgfQorICAgIHZvaWQgc2V0Q3VycmVu
dFZlcnRpY2FsU25hcFBvaW50SW5kZXgodW5zaWduZWQgaW5kZXgpIHsgbV9jdXJyZW50VmVydGlj
YWxTbmFwUG9pbnRJbmRleCA9IGluZGV4OyB9CisgICAgSW50UG9pbnQgbmVhcmVzdEFjdGl2ZVNu
YXBQb2ludChjb25zdCBJbnRQb2ludCYpOworICAgIHZpcnR1YWwgdm9pZCBzY3JvbGxUb05lYXJl
c3RBY3RpdmVTbmFwUG9pbnQoKSB7IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKQEAgLTMwNSw2ICszMTEsOCBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCiAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxMYXlvdXRVbml0Pj4gbV9ob3Jpem9udGFs
U25hcE9mZnNldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxMYXlvdXRVbml0Pj4gbV92
ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgIHVuc2lnbmVkIG1fY3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2lu
dEluZGV4IHsgMCB9OwogI2VuZGlmCiAKICAgICAvLyBUaGVyZSBhcmUgOCBwb3NzaWJsZSBjb21i
aW5hdGlvbnMgb2Ygd3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rpb24uIFNjcm9sbCBvcmlnaW4gd2ls
bCBiZSBub24temVybyBpbiB0aGUgeCBvciB5IGF4aXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLmgJKHJldmlzaW9uIDE4NDEwNCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0
dXJuIDEuMGY7CiAgICAgfQorCisgICAgdmlydHVhbCB1bnNpZ25lZCBhY3RpdmVTY3JvbGxPZmZz
ZXRJbmRleChTY3JvbGxFdmVudEF4aXMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CiAjZW5kaWYKIH07CiAKQEAgLTExNCw2ICsxMTksMTAgQEAgcHVibGljOgogICAgIGJv
b2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVu
dCYpOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKGNvbnN0IFNjcm9s
bGFibGVBcmVhJik7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwUG9pbnRzKFNjcm9sbEV2ZW50
QXhpcywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+Jik7CisgICAgdW5zaWduZWQgYWN0aXZlU2Ny
b2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0OworICAgIHZv
aWQgc2V0QWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMs
IHVuc2lnbmVkKTsKKyAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5n
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlOyB9Cisg
ICAgdm9pZCBzZXRTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UoYm9vbCBzdGF0ZSkgeyBt
X2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSA9IHN0YXRlOyB9CiAjZW5kaWYKIAogcHJp
dmF0ZToKQEAgLTE3Miw2ICsxODEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tb21lbnR1bVNj
cm9sbEluUHJvZ3Jlc3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9s
bHMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgeyBmYWxz
ZSB9OwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQkocmV2aXNpb24g
MTg0MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxl
ci5tbQkod29ya2luZyBjb3B5KQpAQCAtNjg1LDYgKzY4NSwyNiBAQCB2b2lkIFNjcm9sbENvbnRy
b2xsZXI6OmluaXRpYWxpemVHbGlkZVBhCiAgICAgc25hcFN0YXRlLm1fZ2xpZGVQaGFzZVNoaWZ0
ID0gYWNvcygoc25hcFN0YXRlLm1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSAtIHRhcmdldEZpbmFs
V2hlZWxEZWx0YSkgLyAoc25hcFN0YXRlLm1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSArIHRhcmdl
dEZpbmFsV2hlZWxEZWx0YSkpOwogfQogCit1bnNpZ25lZCBTY3JvbGxDb250cm9sbGVyOjphY3Rp
dmVTY3JvbGxTbmFwT2Zmc2V0SW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25z
dAoreworICAgIGlmICgoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpICYmICFt
X2hvcml6b250YWxTY3JvbGxTbmFwU3RhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICgo
YXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSAmJiAhbV92ZXJ0aWNhbFNjcm9sbFNu
YXBTdGF0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgY29uc3QgU2Nyb2xsU25hcEFu
aW1hdG9yU3RhdGUmIHNuYXBTdGF0ZSA9IHNjcm9sbFNuYXBQb2ludFN0YXRlKGF4aXMpOworICAg
IHJldHVybiBzbmFwU3RhdGUubV9hY3RpdmVTbmFwSW5kZXg7Cit9CisKK3ZvaWQgU2Nyb2xsQ29u
dHJvbGxlcjo6c2V0QWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXMgYXhpcywgdW5zaWduZWQgaW5kZXgpCit7CisgICAgYXV0byogc25hcFN0YXRlID0gKGF4
aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSA/IG1faG9yaXpvbnRhbFNjcm9sbFNu
YXBTdGF0ZS5nZXQoKSA6IG1fdmVydGljYWxTY3JvbGxTbmFwU3RhdGUuZ2V0KCk7CisgICAgaWYg
KCFzbmFwU3RhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIHNuYXBTdGF0ZS0+bV9hY3RpdmVT
bmFwSW5kZXggPSBpbmRleDsKK30KKwogdm9pZCBTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9s
bFNuYXBBbmltYXRpb24oU2Nyb2xsRXZlbnRBeGlzIGF4aXMsIFNjcm9sbFNuYXBTdGF0ZSBuZXdT
dGF0ZSkKIHsKICAgICBBU1NFUlQobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5n
IHx8IG5ld1N0YXRlID09IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcpOwpAQCAtNzAxLDEwICs3
MjEsMTIgQEAgdm9pZCBTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbgogICAgIAog
ICAgIHByb2plY3RlZFNjcm9sbERlc3RpbmF0aW9uID0gc3RkOjptaW4oc3RkOjptYXgoTGF5b3V0
VW5pdChwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiAvIHNjYWxlRmFjdG9yKSwgc25hcFN0YXRl
Lm1fc25hcE9mZnNldHMuZmlyc3QoKSksIHNuYXBTdGF0ZS5tX3NuYXBPZmZzZXRzLmxhc3QoKSk7
CiAgICAgc25hcFN0YXRlLm1faW5pdGlhbE9mZnNldCA9IG9mZnNldDsKLSAgICBzbmFwU3RhdGUu
bV90YXJnZXRPZmZzZXQgPSBzY2FsZUZhY3RvciAqIGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVu
aXQsIGZsb2F0PihzbmFwU3RhdGUubV9zbmFwT2Zmc2V0cywgcHJvamVjdGVkU2Nyb2xsRGVzdGlu
YXRpb24sIGluaXRpYWxXaGVlbERlbHRhKTsKKyAgICBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERp
ZENoYW5nZSA9IGZhbHNlOworICAgIHNuYXBTdGF0ZS5tX3RhcmdldE9mZnNldCA9IHNjYWxlRmFj
dG9yICogY2xvc2VzdFNuYXBPZmZzZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KHNuYXBTdGF0ZS5tX3Nu
YXBPZmZzZXRzLCBwcm9qZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEs
IHNuYXBTdGF0ZS5tX2FjdGl2ZVNuYXBJbmRleCk7CiAgICAgaWYgKHNuYXBTdGF0ZS5tX2luaXRp
YWxPZmZzZXQgPT0gc25hcFN0YXRlLm1fdGFyZ2V0T2Zmc2V0KQogICAgICAgICByZXR1cm47CiAg
ICAgCisgICAgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgPSB0cnVlOwogICAgIHNu
YXBTdGF0ZS5tX2N1cnJlbnRTdGF0ZSA9IG5ld1N0YXRlOwogICAgIGlmIChuZXdTdGF0ZSA9PSBT
Y3JvbGxTbmFwU3RhdGU6OkdsaWRpbmcpIHsKICAgICAgICAgc25hcFN0YXRlLm1fc2hvdWxkT3Zl
cnJpZGVXaGVlbEV2ZW50ID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nv
Y29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAkocmV2aXNpb24gMTg0
MTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9y
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTIgKzU5LDEzIEBAIHN0cnVjdCBTY3JvbGxT
bmFwQW5pbWF0b3JTdGF0ZSB7CiAgICAgTGF5b3V0VW5pdCBtX3RhcmdldE9mZnNldDsKICAgICAv
LyBVc2VkIHRvIHRyYWNrIGdsaWRpbmcgYmVoYXZpb3IuCiAgICAgTGF5b3V0VW5pdCBtX2JlZ2lu
VHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0OwotICAgIGludCBtX251bVdoZWVsRGVsdGFzVHJhY2tl
ZDsKKyAgICBpbnQgbV9udW1XaGVlbERlbHRhc1RyYWNrZWQgeyAwIH07CisgICAgdW5zaWduZWQg
bV9hY3RpdmVTbmFwSW5kZXggeyAwIH07CiAgICAgZmxvYXQgbV93aGVlbERlbHRhV2luZG93W3do
ZWVsRGVsdGFXaW5kb3dTaXplXTsKLSAgICBmbG9hdCBtX2dsaWRlTWFnbml0dWRlOwotICAgIGZs
b2F0IG1fZ2xpZGVQaGFzZVNoaWZ0OwotICAgIGZsb2F0IG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0
YTsKLSAgICBib29sIG1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50OworICAgIGZsb2F0IG1fZ2xp
ZGVNYWduaXR1ZGUgeyAwIH07CisgICAgZmxvYXQgbV9nbGlkZVBoYXNlU2hpZnQgeyAwIH07Cisg
ICAgZmxvYXQgbV9nbGlkZUluaXRpYWxXaGVlbERlbHRhIHsgMCB9OworICAgIGJvb2wgbV9zaG91
bGRPdmVycmlkZVdoZWVsRXZlbnQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2Ev
U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0JKHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0zNywxMSArMzcsNiBAQCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6U2Nyb2xs
U25hcEFuaW1hCiAgICAgLCBtX2luaXRpYWxPZmZzZXQoMCkKICAgICAsIG1fdGFyZ2V0T2Zmc2V0
KDApCiAgICAgLCBtX2JlZ2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0KDApCi0gICAgLCBtX251
bVdoZWVsRGVsdGFzVHJhY2tlZCgwKQotICAgICwgbV9nbGlkZU1hZ25pdHVkZSgwKQotICAgICwg
bV9nbGlkZVBoYXNlU2hpZnQoMCkKLSAgICAsIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSgwKQot
ICAgICwgbV9zaG91bGRPdmVycmlkZVdoZWVsRXZlbnQoZmFsc2UpCiB7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTg0MTA0KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIwNCw2ICszMjA0LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZz
ZXRzKCkKICAgICBSZW5kZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94
KCk7CiAgICAgdXBkYXRlU25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25j
YXN0PEhUTUxFbGVtZW50PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkp
OwogfQorCit2b2lkIFJlbmRlckxheWVyOjpzY3JvbGxUb05lYXJlc3RBY3RpdmVTbmFwUG9pbnQo
KQoreworICAgIEludFBvaW50IGN1cnJlbnRQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7Cisg
ICAgSW50UG9pbnQgY29ycmVjdGVkUG9zaXRpb24gPSBuZWFyZXN0QWN0aXZlU25hcFBvaW50KGN1
cnJlbnRQb3NpdGlvbik7CisgICAgCisgICAgaWYgKGNvcnJlY3RlZFBvc2l0aW9uICE9IGN1cnJl
bnRQb3NpdGlvbikKKyAgICAgICAgc2Nyb2xsVG9PZmZzZXQodG9JbnRTaXplKGNvcnJlY3RlZFBv
c2l0aW9uKSk7Cit9CiAjZW5kaWYKIAogaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJh
cldpZHRoKE92ZXJsYXlTY3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKQEAg
LTM0OTQsNyArMzUwMyw4IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNjcm9sbEluZm9BZnRl
ckwKICAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICBpZiAo
U2Nyb2xsQW5pbWF0b3IqIHNjcm9sbEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigp
KQotICAgICAgICByZXR1cm4gc2Nyb2xsQW5pbWF0b3ItPnVwZGF0ZVNjcm9sbEFuaW1hdG9yc0Fu
ZFRpbWVycygpOworICAgICAgICBzY3JvbGxBbmltYXRvci0+dXBkYXRlU2Nyb2xsQW5pbWF0b3Jz
QW5kVGltZXJzKCk7CisgICAgc2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBvaW50KCk7CiAjZW5k
aWYKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmgJ
KHJldmlzaW9uIDE4NDEwNCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDksIDIwMTIsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFBvcnRpb25zIGFyZSBDb3B5cmlnaHQgKEMpIDE5OTggTmV0c2NhcGUg
Q29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uCiAgKgpAQCAtMjI0LDYgKzIyNCw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaGFzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGVBbmNlc3Rv
cigpIG92ZXJyaWRlOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVNuYXBPZmZzZXRzKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBzY3JvbGxUb05lYXJl
c3RBY3RpdmVTbmFwUG9pbnQoKSBvdmVycmlkZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9T
KQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTg0MTA0KQorKysgU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTUtMDUtMTEgIEJyZW50
IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5jb20+CisKKyAgICAgICAgU2Nyb2xsIHNuYXAgbG9n
aWMgc2hvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHJlc2l6aW5nIHRoZSBXZWJWaWV3CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI1OTAKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzIwMTI1MDg4PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbToKKyAgICAgICAgKC1bV0tPdmVyZmxvd1Njcm9s
bFZpZXdEZWxlZ2F0ZSBzY3JvbGxWaWV3V2lsbEVuZERyYWdnaW5nOndpdGhWZWxvY2l0eTp0YXJn
ZXRDb250ZW50T2Zmc2V0Ol0pOiBNb2RpZnkgdXNlIG9mICdjbG9zZXN0U25hcE9mZnNldCcgdG8g
c2F0aXNmeSB0aGUgYWRkaXRpb25hbAorICAgICAgICBhcmd1bWVudCBJIGFkZGVkLiBUaGlzIGlz
IGN1cnJlbnRseSBub3QgdXNlZCBmb3IgYW55dGhpbmcgb24gaU9TLgorCiAyMDE1LTA1LTEwICBH
eXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVc2UgUmVm
IGluc3RlYWQgb2YgUGFzc1JlZlB0ciBpbiBXZWJDb3JlL3BhZ2UKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9TY3JvbGxpbmcvaW9zL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm9sbGlu
Z05vZGVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9s
bGluZy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQkocmV2aXNp
b24gMTg0MTA0KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGluZy9pb3MvU2Ny
b2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
ODAsMTAgKzgwLDExIEBAIC0gKHZvaWQpc2Nyb2xsVmlld1dpbGxCZWdpbkRyYWdnaW5nOihVSVMK
ICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogLSAodm9pZClzY3JvbGxWaWV3V2lsbEVuZERy
YWdnaW5nOihVSVNjcm9sbFZpZXcgKilzY3JvbGxWaWV3IHdpdGhWZWxvY2l0eTooQ0dQb2ludCl2
ZWxvY2l0eSB0YXJnZXRDb250ZW50T2Zmc2V0Oihpbm91dCBDR1BvaW50ICopdGFyZ2V0Q29udGVu
dE9mZnNldAogeworICAgIHVuc2lnbmVkIGlnbm9yZTsKICAgICBpZiAoIV9zY3JvbGxpbmdUcmVl
Tm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkuaXNFbXB0eSgpKQotICAgICAgICB0YXJnZXRD
b250ZW50T2Zmc2V0LT54ID0gY2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQsIENHRmxvYXQ+KF9zY3Jv
bGxpbmdUcmVlTm9kZS0+aG9yaXpvbnRhbFNuYXBPZmZzZXRzKCksIHRhcmdldENvbnRlbnRPZmZz
ZXQtPngsIHZlbG9jaXR5LngpOworICAgICAgICB0YXJnZXRDb250ZW50T2Zmc2V0LT54ID0gY2xv
c2VzdFNuYXBPZmZzZXQ8ZmxvYXQsIENHRmxvYXQ+KF9zY3JvbGxpbmdUcmVlTm9kZS0+aG9yaXpv
bnRhbFNuYXBPZmZzZXRzKCksIHRhcmdldENvbnRlbnRPZmZzZXQtPngsIHZlbG9jaXR5LngsIGln
bm9yZSk7CiAgICAgaWYgKCFfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNldHMo
KS5pc0VtcHR5KCkpCi0gICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkgPSBjbG9zZXN0U25h
cE9mZnNldDxmbG9hdCwgQ0dGbG9hdD4oX3Njcm9sbGluZ1RyZWVOb2RlLT52ZXJ0aWNhbFNuYXBP
ZmZzZXRzKCksIHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5LnkpOworICAgICAgICB0
YXJnZXRDb250ZW50T2Zmc2V0LT55ID0gY2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQsIENHRmxvYXQ+
KF9zY3JvbGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0cygpLCB0YXJnZXRDb250ZW50
T2Zmc2V0LT55LCB2ZWxvY2l0eS55LCBpZ25vcmUpOwogfQogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>252912</attachid>
            <date>2015-05-11 17:26:14 -0700</date>
            <delta_ts>2015-05-11 22:57:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-142590-20150511172453.patch</filename>
            <type>text/plain</type>
            <size>37183</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDEyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxNS0wNS0xMSAgQnJlbnQg
RnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBTY3JvbGwgc25hcCBsb2dp
YyBzaG91bGQgYmUgdHJpZ2dlcmVkIHdoZW4gcmVzaXppbmcgdGhlIFdlYlZpZXcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjU5MAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjAxMjUwODg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGVzdHMgY29taW5nIGluIGEgc2Vjb25kIHBhdGNoLgorCisgICAg
ICAgIFJlc2l6aW5nIG9mIHRoZSBtYWluIGZyYW1lIG9yIG92ZXJmbG93IHJlZ2lvbnMgd2FzIHBy
b3Blcmx5IHJlY2FsY3VsYXRpbmcgdGhlIHNjcm9sbCBzbmFwIHBvaW50cywKKyAgICAgICAgYnV0
IHRoZXJlIHdhcyBubyBjb2RlIHRvIGhvbm9yIHRoZXNlIHZhbHVlcyB3aGVuIHdpbmRvdyByZXNp
emluZyB3YXMgb2NjdXJyaW5nLiBUaGUgY29ycmVjdGlvbiB3YXMKKyAgICAgICAgaGFuZGxlZCBp
biB0d28gd2F5czoKKyAgICAgICAgMS4gU2Nyb2xsaW5nIHRocmVhZCBvcGVyYXRpb25zIHRoYXQg
bW92ZWQgdG8gbmV3IHNuYXAgcG9pbnRzIG5lZWRlZCB0byBub3RpZnkgdGhlIG1haW4gdGhyZWFk
IHRoYXQKKyAgICAgICAgICAgaXQgaGFkIHNoaWZ0ZWQgdG8gYSBuZXcgc25hcCBwb2ludCwgc28g
dGhhdCB0aGUgcmVzaXplIGNvZGUgKHdoaWNoIGhhcHBlbnMgb24gdGhlIG1haW4gdGhyZWFkKQor
ICAgICAgICAgICBjb3VsZCBlbnN1cmUgdGhhdCB3ZSBzdGF5ZWQgY2xhbXBlZCB0byB0aGUgY29y
cmVjdCAndGlsZScgaW4gdGhlIHNuYXAgcmVnaW9uLgorICAgICAgICAyLiBNYWluIHRocmVhZCAo
b3ZlcmZsb3cpIHJlc2l6ZXMgd2VyZSBsaWtld2lzZSBtaXNzaW5nIGNvZGUgdG8gaG9ub3IgdGhl
IGN1cnJlbnQgc25hcCBwb3NpdGlvbgorICAgICAgICAgICBhZnRlciByZXNpemluZyBjYWxjdWxh
dGlvbnMgd2VyZSBjb21wbGV0ZS4KKworICAgICAgICBUaGlzIGNoYW5nZSBhbHNvIHJlcXVpcmVk
IHRoZSBhZGRpdGlvbiBvZiB0d28gaW5kaWNlcyB0byB0aGUgc2Nyb2xsYWJsZSBhcmVhIHRvIHRy
YWNrIHdoaWNoIHNjcm9sbAorICAgICAgICBzbmFwIHBvaW50IHdhcyBjdXJyZW50bHkgYmVpbmcg
dXNlZC4gV2UgZG9uJ3QgYm90aGVyIHdpdGggYSAnbm9uZScgY2FzZSBiZWNhdXNlIHlvdSBjYW5u
b3QgaGF2ZSBhCisgICAgICAgICdub25lJyBzdGF0ZSB3aGVuIHlvdSBoYXZlIGFuIGFjdGl2ZSBz
ZXQgb2Ygc2Nyb2xsIHNuYXAgcG9pbnRzLCBhbmQgd2UgZG8gbm90IGV4ZWN1dGUgdGhpcyBjb2Rl
CisgICAgICAgIGlmIHRoZSBzY3JvbGwgc25hcCBwb2ludHMgYXJlIG51bGwuCisKKyAgICAgICAg
VGhlIEZyYW1lVmlldyBjb2RlIHdhcyBjb21wdXRpbmcgdXBkYXRlZCBzbmFwIG9mZnNldHMgYWZ0
ZXIgaXQgaGFkIGRpc3BhdGNoZWQgZnJhbWUgdmlldyBsYXlvdXQKKyAgICAgICAgaW5mb3JtYXRp
b24gdG8gdGhlIHNjcm9sbGluZyB0aHJlYWQsIHdoaWNoIHdhcyB3cm9uZy4gVGhpcyB3YXMgYWxz
byBjb3JyZWN0ZWQuCisKKyAgICAgICAgSSB0aGluayBpdCBtaWdodCBiZSBwb3NzaWJsZSB0byB0
cmFjayBhbGwgb2YgdGhpcyBzdGF0ZSBpbnNpZGUgdGhlIFNjcm9sbENvbnRyb2xsZXIsIGJ1dCB0
aGUgY3VycmVudAorICAgICAgICBzY3JvbGwgc25hcCBhcmNoaXRlY3R1cmUgZGVzdHJveXMgYW5k
IHJlY3JlYXRlcyB0aGUgc3RhdGUgZWFjaCB0aW1lIGEgbmV3IHNldCBvZiBpbnRlcmFjdGlvbnMg
c3RhcnRzLgorICAgICAgICBUaGlzIHNob3VsZCBiZSBmaXhlZCBpbiB0aGUgZnV0dXJlLCB3aGlj
aCB3b3VsZCBhbGxvdyB1cyB0byByZW1vdmUgc29tZSBvZiB0aGlzIGxvY2FsIHN0YXRlLgorCisg
ICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3
OjpwZXJmb3JtUG9zdExheW91dFRhc2tzKTogTWFrZSBzdXJlICd1cGRhdGVTbmFwT2Zmc2V0cycg
aXMgY2FsbGVkIHByaW9yIHRvCisgICAgICAgIGNhbGxpbmcgJ2ZyYW1lVmlld0xheW91dFVwZGF0
ZWQnIHNvIHRoZSBzY3JvbGxpbmcgdGhyZWFkIGdldHMgY29ycmVjdCB1cGRhdGVkIHBvaW50cy4g
QWRkIGEgbmV3CisgICAgICAgIGNhbGwgdG8gJ3Njcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2lu
dCcsIHdoaWNoIHdpbGwga2VlcCB1cyBvbiBvdXIgY3VycmVudCBzbmFwIHBvaW50IGR1cmluZwor
ICAgICAgICByZXNpemUgKGlmIGFwcHJvcHJpYXRlKS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFzeW5j
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKTogQWRk
ZWQuIFRoaXMgZmluZHMgYW5kIG5vdGlmaWVzCisgICAgICAgIHRoZSBjb3JyZWN0IHNjcm9sbCBy
ZWdpb24gd2hlbiBhIG5ldyBzbmFwIHBvc2l0aW9uIChpbmRleCkgaGFzIGJlZW4gc2VsZWN0ZWQg
YnkgdXNlciBpbnRlcmFjdGlvbiBvbgorICAgICAgICB0aGUgc2Nyb2xsaW5nIHRocmVhZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRlZmVyVGVzdHNGb3JS
ZWFzb24pOiBBZGRlZCBhbiBhc3NlcnRpb24gZm9yICdpc01haW5UaHJlYWQnLgorICAgICAgICAo
V2ViQ29yZTo6QXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVtb3ZlVGVzdERlZmVycmFsRm9y
UmVhc29uKTogRGl0dG8uCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvci5oOgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL0F4aXNTY3JvbGxTbmFwT2Zm
c2V0cy5oOgorICAgICAgICAoV2ViQ29yZTo6Y2xvc2VzdFNuYXBPZmZzZXQpOiBNb2RpZmllZCB0
byBhbHNvIHJldHVybiB0aGUgc2VsZWN0ZWQgc25hcCBwb2ludCBpbmRleCBzbyB3ZSBjYW4gdHJh
Y2sKKyAgICAgICAgaXQgdG8gaGFuZGxlIHJlc2l6ZSBvcGVyYXRpb25zLgorICAgICAgICAqIHBh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1RyZWU6OnVwZGF0ZVNjcm9sbFNuYXBPZmZzZXRJbmRpY2VzKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGhy
ZWFkZWRTY3JvbGxpbmdUcmVlOjp1cGRhdGVTY3JvbGxTbmFwT2Zmc2V0SW5kaWNlcyk6IEFkZGVk
IG1ldGhvZCB0byBkaXNwYXRjaCB0aGUgYWN0aXZlCisgICAgICAgIGhvcml6b250YWwgYW5kIHZl
cnRpY2FsIHNjcm9sbCBzbmFwIGluZGljZXMgYmFjayB0byB0aGUgbWFpbiB0aHJlYWQuCisgICAg
ICAgICogcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmg6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWMubW06
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjOjpo
YW5kbGVXaGVlbEV2ZW50KTogQWZ0ZXIgdGhlIHNjcm9sbCBjb250cm9sbGVyIHByb2Nlc3Nlcwor
ICAgICAgICB0aGUgY3VycmVudCBldmVudCwgbm90aWZ5IHRoZSBtYWluIHRocmVhZCBvZiBhbnkg
Y2hhbmdlIGluIHRoZSBhY3RpdmUgc2Nyb2xsIHNuYXAgaW5kZXguCisgICAgICAgICogcGxhdGZv
cm0vU2Nyb2xsQW5pbWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6
OmFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleERpZENoYW5nZSk6IEFkZGVkIG1ldGhvZCB0byBh
bGxvdyBTY3JvbGxBbmltYXRvcgorICAgICAgICBjbGllbnRzIHRvIGZpbmQgb3V0IGFib3V0IHRo
ZSBjdXJyZW50IHNjcm9sbCBzbmFwIHN0YXRlLCB3aGljaCBpcyBvbmx5IGtub3duIGJ5IHRoZSBT
Y3JvbGxDb250cm9sbGVyLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQW5pbWF0b3I6OmFjdGl2
ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5oOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsVG9OZWFyZXN0QWN0aXZlU25hcFBv
aW50KTogQWRkZWQgbWV0aG9kIHRoYXQgYWxsb3dzIHVzIHRvIHNldCBzY3JvbGwgcG9zaXRpb24K
KyAgICAgICAgdG8gb25lIG9mIG91ciBhY3RpdmUgc2Nyb2xsIHNuYXAgb2Zmc2V0cy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9TY3JvbGxWaWV3Lmg6CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJs
ZUFyZWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdoZWVs
RXZlbnQpOiBJZiB0aGUgYWN0aXZlIHNjcm9sbCBzbmFwIG9mZnNldCBoYXMgY2hhbmdlZCwgbWFr
ZSBzdXJlIHdlCisgICAgICAgIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyB2YWx1ZXMgZm9yIHBvdGVu
dGlhbCByZXNpemUgb3BlcmF0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVh
OjpjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cyk6IE1ha2Ugc3VyZSB0byBhbHNvIGNsZWFyIG91
dCB0aGUgY3VycmVudCBzbmFwIGluZGV4LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFy
ZWE6OmNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsYWJsZUFyZWE6Om5lYXJlc3RBY3RpdmVTbmFwUG9pbnQpOiBOZXcgbWV0aG9kIHRoYXQg
cmV0dXJucyBhbiB1cGRhdGVkIEludFBvaW50IHJlZmxlY3RpbmcKKyAgICAgICAgdGhlIHByb3Bl
ciBzY3JvbGwgcG9zaXRpb24gYmFzZWQgb24gdGhlIGFjdGl2ZSBzY3JvbGwgc25hcCBvZmZzZXQu
CisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGFibGVBcmVhOjpjdXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudEhvcml6b250YWxT
bmFwUG9pbnRJbmRleCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6
OmN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KTogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxhYmxlQXJlYTo6c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgpOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGFibGVBcmVhOjpzY3JvbGxUb05lYXJlc3RBY3Rp
dmVTbmFwUG9pbnQpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250
cm9sbGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyQ2xpZW50OjphY3Rp
dmVTY3JvbGxPZmZzZXRJbmRleCk6IEFkZGVkIG5ldyBtZXRob2QgZm9yIGNsaWVudHMgdG8gaW1w
bGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xs
U25hcE9mZnNldEluZGV4RGlkQ2hhbmdlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxDb250cm9sbGVyOjpzZXRTY3JvbGxTbmFwT2Zmc2V0SW5kZXhEaWRDaGFuZ2UpOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVyLm1tOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsQ29udHJvbGxlcjo6YWN0aXZlU2Nyb2xsU25hcE9mZnNldEluZGV4Rm9y
QXhpcyk6IEhlbHBlciBtZXRob2QgdG8gcmV0dXJuIGN1cnJlbnQgYWN0aXZlCisgICAgICAgIGlu
ZGV4IChpZiBhcHBsaWNhYmxlKS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbENvbnRyb2xsZXI6
OnNldEFjdGl2ZVNjcm9sbFNuYXBPZmZzZXRJbmRleEZvckF4aXMpOiBIZWxwZXIgZnVuY3Rpb24g
dG8gc2FmZWx5IHNldAorICAgICAgICB0aGUgY3VycmVudCBhY3RpdmUgaW5kZXguCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24pOiBV
cGRhdGVkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIG5ldyBhY3RpdmUgc2Nyb2xsIHNuYXAKKyAgICAg
ICAgaW5kZXgsIGFzIHdlbGwgYXMgd2hldGhlciB0aGUgY3VycmVudCBhbmltYXRpb24gYWN0dWFs
bHkgY2hhbmdlZCB0aGUgYWN0aXZlIHNuYXAgcG9pbnQgb2Zmc2V0LgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLmg6IFJldmlzZSB0byB1c2UgbW9kZXJu
IEMrKyBpbml0aWFsaXplcnMsIGFuZCB0byB0cmFjayBhIG5ldyBpbmRleAorICAgICAgICB0aGF0
IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc2Nyb2xsIHNuYXAgb2Zmc2V0LgorICAgICAgICAqIHBs
YXRmb3JtL2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsU25hcEFuaW1hdG9yU3RhdGU6OlNjcm9sbFNuYXBBbmltYXRvclN0YXRlKTogVXBk
YXRlIGZvciBtb2Rlcm4gQysrIHN5bnRheC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnNjcm9sbFRvTmVhcmVzdEFj
dGl2ZVNuYXBQb2ludCk6IE5ldyBtZXRob2QgdG8gc2V0IHNjcm9sbCBwb3NpdGlvbiB0byBiZSBv
bmUgb2Ygb3VyCisgICAgICAgIGFjdGl2ZSBzY3JvbGwgc25hcCBwb2ludHMuCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlU2Nyb2xsSW5mb0FmdGVyTGF5b3V0KTogQWRkIGEg
bmV3IGNhbGwgdG8gJ3Njcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2ludCcgc28gdGhhdAorICAg
ICAgICB3ZSBzdGF5IG9uIHRoZSBjdXJyZW50IHNjcm9sbCBzbmFwIG9mZnNldCBkdXJpbmcgcmVz
aXppbmcuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisKIDIwMTUtMDUtMTEg
IE1hdHQgQmFrZXIgIDxtYXR0YmFrZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFJFR1JFU1NJT04gKHIxNzUyMDMpOiBObyBwcm9maWxlIGluZm9ybWF0aW9uIGlzIHNob3du
IGluIEluc3BlY3RvcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24g
MTg0MTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTc0LDcgKzI5NzQsMTEgQEAgdm9pZCBGcmFtZVZpZXc6OnBlcmZvcm1Qb3N0TGF5
b3V0VGFza3MoKQogICAgIGZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkuZGlzcGF0Y2hEaWRMYXlv
dXQoKTsKIAogICAgIHVwZGF0ZVdpZGdldFBvc2l0aW9ucygpOwotICAgIAorCisjaWYgRU5BQkxF
KENTU19TQ1JPTExfU05BUCkKKyAgICB1cGRhdGVTbmFwT2Zmc2V0cygpOworI2VuZGlmCisKICAg
ICAvLyBsYXlvdXQoKSBwcm90ZWN0cyBGcmFtZVZpZXcsIGJ1dCBpdCBzdGlsbCBjYW4gZ2V0IGRl
c3Ryb3llZCB3aGVuIHVwZGF0ZUVtYmVkZGVkT2JqZWN0cygpCiAgICAgLy8gaXMgY2FsbGVkIHRo
cm91Z2ggdGhlIHBvc3QgbGF5b3V0IHRpbWVyLgogICAgIFJlZjxGcmFtZVZpZXc+IHByb3RlY3Qo
KnRoaXMpOwpAQCAtMjk5NiwxNSArMzAwMCw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwZXJmb3JtUG9z
dExheW91dFRhc2tzKCkKICAgICBzZW5kUmVzaXplRXZlbnRJZk5lZWRlZCgpOwogICAgIHZpZXdw
b3J0Q29udGVudHNDaGFuZ2VkKCk7CiAKLSNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAg
IGlmICghZnJhbWUoKS5pc01haW5GcmFtZSgpKSB7Ci0gICAgICAgIHVwZGF0ZVNuYXBPZmZzZXRz
KCk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBpZiAoU2Nyb2xsQW5pbWF0b3IqIHNjcm9s
bEFuaW1hdG9yID0gZXhpc3RpbmdTY3JvbGxBbmltYXRvcigpKQotICAgICAgICAgICAgcmV0dXJu
IHNjcm9sbEFuaW1hdG9yLT51cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsKLSNlbmRp
ZgotICAgIH0KLSNlbmRpZgorICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwogfQogCiBJbnRT
aXplIEZyYW1lVmlldzo6c2l6ZUZvclJlc2l6ZUV2ZW50KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL0FzeW5jU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxODQxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTYyLDggKzU2MiwzMyBAQCBTdHJpbmcgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xs
CiB9CiAKICNpZiBQTEFURk9STShDT0NPQSkKK3ZvaWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXMoU2Nyb2xsaW5nTm9kZUlEIHNjcm9sbGluZ05v
ZGVJRCwgdW5zaWduZWQgaG9yaXpvbnRhbEluZGV4LCB1bnNpZ25lZCB2ZXJ0aWNhbEluZGV4KQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgCisgICAgaWYgKCFtX3BhZ2UpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IGZyYW1lVmll
d0ZvclNjcm9sbGluZ05vZGUoc2Nyb2xsaW5nTm9kZUlEKTsKKyAgICBpZiAoIWZyYW1lVmlldykK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChzY3JvbGxpbmdOb2RlSUQgPT0gZnJhbWVW
aWV3LT5zY3JvbGxMYXllcklEKCkpIHsKKyAgICAgICAgZnJhbWVWaWV3LT5zZXRDdXJyZW50SG9y
aXpvbnRhbFNuYXBQb2ludEluZGV4KGhvcml6b250YWxJbmRleCk7CisgICAgICAgIGZyYW1lVmll
dy0+c2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgodmVydGljYWxJbmRleCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gT3ZlcmZsb3ctc2Nyb2xsIGFyZWEuCisg
ICAgaWYgKFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9IGZyYW1lVmlldy0+c2Nyb2xs
YWJsZUFyZWFGb3JTY3JvbGxMYXllcklEKHNjcm9sbGluZ05vZGVJRCkpIHsKKyAgICAgICAgc2Ny
b2xsYWJsZUFyZWEtPnNldEN1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50SW5kZXgoaG9yaXpvbnRh
bEluZGV4KTsKKyAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldEN1cnJlbnRWZXJ0aWNhbFNuYXBQ
b2ludEluZGV4KHZlcnRpY2FsSW5kZXgpOworICAgIH0KK30KKwogdm9pZCBBc3luY1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6
U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyIGlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dl
cjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbiByZWFzb24pIGNvbnN0CiB7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBpZiAoIW1fcGFnZSB8fCAhbV9wYWdlLT5leHBlY3RzV2hlZWxF
dmVudFRyaWdnZXJzKCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTc1LDYgKzYwMCw3IEBAIHZv
aWQgQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGVmZXJUZXMKIAogdm9pZCBBc3luY1Njcm9s
bGluZ0Nvb3JkaW5hdG9yOjpyZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24oV2hlZWxFdmVudFRl
c3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIgaWRlbnRpZmllciwgV2hlZWxFdmVu
dFRlc3RUcmlnZ2VyOjpEZWZlclRlc3RUcmlnZ2VyUmVhc29uIHJlYXNvbikgY29uc3QKIHsKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIGlmICghbV9wYWdlIHx8ICFtX3BhZ2UtPmV4
cGVjdHNXaGVlbEV2ZW50VHJpZ2dlcnMoKSkKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXN5bmNTY3JvbGxpbmdD
b29yZGluYXRvci5oCShyZXZpc2lvbiAxODQxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9Bc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3
LDYgKzU3LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2NoZWR1bGVVcGRh
dGVTY3JvbGxQb3NpdGlvbkFmdGVyQXN5bmNTY3JvbGwoU2Nyb2xsaW5nTm9kZUlELCBjb25zdCBG
bG9hdFBvaW50JiwgYm9vbCBwcm9ncmFtbWF0aWNTY3JvbGwsIFNldE9yU3luY1Njcm9sbGluZ0xh
eWVyUG9zaXRpb24pOwogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgdm9pZCBzZXRBY3RpdmVT
Y3JvbGxTbmFwSW5kaWNlcyhTY3JvbGxpbmdOb2RlSUQsIHVuc2lnbmVkIGhvcml6b250YWxJbmRl
eCwgdW5zaWduZWQgdmVydGljYWxJbmRleCk7CiAgICAgdm9pZCBkZWZlclRlc3RzRm9yUmVhc29u
KFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2
ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24pIGNvbnN0OwogICAgIHZvaWQg
cmVtb3ZlVGVzdERlZmVycmFsRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xs
YWJsZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdn
ZXJSZWFzb24pIGNvbnN0OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9BeGlzU2Nyb2xsU25hcE9mZnNldHMuaAkocmV2aXNpb24gMTg0MTI5
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvQXhpc1Njcm9sbFNuYXBPZmZzZXRz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDQsMTIgKzQ0LDE0IEBAIHZvaWQgdXBkYXRlU25hcE9mZnNldHNG
b3JTY3JvbGxhYmxlQXJlYSgKIC8vIGFzIHdlbGwgYXMgYSBWZWxvY2l0eVR5cGUgaW5kaWNhdGlu
ZyB0aGUgdmVsb2NpdHkgKGUuZy4gZmxvYXQsIENHRmxvYXQsIGV0Yy4pIFRoaXMgZnVuY3Rpb24g
aXMgdGVtcGxhdGVkIGJlY2F1c2UgdGhlIFVJIHByb2Nlc3Mgd2lsbCBub3cKIC8vIHVzZSBwaXhl
bCBzbmFwcGVkIGZsb2F0cyB0byByZXByZXNlbnQgc25hcCBvZmZzZXRzIHJhdGhlciB0aGFuIExh
eW91dFVuaXRzLgogdGVtcGxhdGUgPHR5cGVuYW1lIExheW91dFR5cGUsIHR5cGVuYW1lIFZlbG9j
aXR5VHlwZT4KLUxheW91dFR5cGUgY2xvc2VzdFNuYXBPZmZzZXQoY29uc3QgVmVjdG9yPExheW91
dFR5cGU+JiBzbmFwT2Zmc2V0cywgTGF5b3V0VHlwZSBzY3JvbGxEZXN0aW5hdGlvbiwgVmVsb2Np
dHlUeXBlIHZlbG9jaXR5KQorTGF5b3V0VHlwZSBjbG9zZXN0U25hcE9mZnNldChjb25zdCBWZWN0
b3I8TGF5b3V0VHlwZT4mIHNuYXBPZmZzZXRzLCBMYXlvdXRUeXBlIHNjcm9sbERlc3RpbmF0aW9u
LCBWZWxvY2l0eVR5cGUgdmVsb2NpdHksIHVuc2lnbmVkJiBhY3RpdmVTbmFwSW5kZXgpCiB7CiAg
ICAgQVNTRVJUKHNuYXBPZmZzZXRzLnNpemUoKSk7CisgICAgYWN0aXZlU25hcEluZGV4ID0gMDsK
ICAgICBpZiAoc2Nyb2xsRGVzdGluYXRpb24gPD0gc25hcE9mZnNldHMuZmlyc3QoKSkKICAgICAg
ICAgcmV0dXJuIHNuYXBPZmZzZXRzLmZpcnN0KCk7CiAKKyAgICBhY3RpdmVTbmFwSW5kZXggPSBz
bmFwT2Zmc2V0cy5zaXplKCkgLSAxOwogICAgIGlmIChzY3JvbGxEZXN0aW5hdGlvbiA+PSBzbmFw
T2Zmc2V0cy5sYXN0KCkpCiAgICAgICAgIHJldHVybiBzbmFwT2Zmc2V0cy5sYXN0KCk7CiAKQEAg
LTcwLDEwICs3MiwxMyBAQCBMYXlvdXRUeXBlIGNsb3Nlc3RTbmFwT2Zmc2V0KGNvbnN0IFZlY3Rv
CiAgICAgTGF5b3V0VHlwZSBsb3dlclNuYXBQb3NpdGlvbiA9IHNuYXBPZmZzZXRzW2xvd2VySW5k
ZXhdOwogICAgIExheW91dFR5cGUgdXBwZXJTbmFwUG9zaXRpb24gPSBzbmFwT2Zmc2V0c1t1cHBl
ckluZGV4XTsKICAgICAvLyBOb256ZXJvIHZlbG9jaXR5IGluZGljYXRlcyBhIGZsaWNrIGdlc3R1
cmUuIEV2ZW4gaWYgYW5vdGhlciBzbmFwIHBvaW50IGlzIGNsb3Nlciwgc25hcCB0byB0aGUgb25l
IGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIGZsaWNrIGdlc3R1cmUuCi0gICAgaWYgKHZlbG9jaXR5
KQorICAgIGlmICh2ZWxvY2l0eSkgeworICAgICAgICBhY3RpdmVTbmFwSW5kZXggPSAodmVsb2Np
dHkgPCAwKSA/IGxvd2VySW5kZXggOiB1cHBlckluZGV4OwogICAgICAgICByZXR1cm4gdmVsb2Np
dHkgPCAwID8gbG93ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsKKyAgICB9CiAK
ICAgICBib29sIGlzQ2xvc2VyVG9Mb3dlclNuYXBQb3NpdGlvbiA9IHNjcm9sbERlc3RpbmF0aW9u
IC0gbG93ZXJTbmFwUG9zaXRpb24gPD0gdXBwZXJTbmFwUG9zaXRpb24gLSBzY3JvbGxEZXN0aW5h
dGlvbjsKKyAgICBhY3RpdmVTbmFwSW5kZXggPSBpc0Nsb3NlclRvTG93ZXJTbmFwUG9zaXRpb24g
PyBsb3dlckluZGV4IDogdXBwZXJJbmRleDsKICAgICByZXR1cm4gaXNDbG9zZXJUb0xvd2VyU25h
cFBvc2l0aW9uID8gbG93ZXJTbmFwUG9zaXRpb24gOiB1cHBlclNuYXBQb3NpdGlvbjsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWUuaAko
cmV2aXNpb24gMTg0MTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNiArMTAwLDcgQEAgcHVibGljOgogICAg
IAogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlV2hlZWxFdmVudFBo
YXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEFj
dGl2ZVNjcm9sbFNuYXBJbmRpY2VzKFNjcm9sbGluZ05vZGVJRCwgdW5zaWduZWQgLypob3Jpem9u
dGFsSW5kZXgqLywgdW5zaWduZWQgLyp2ZXJ0aWNhbEluZGV4Ki8pIHsgfQogICAgIHZpcnR1YWwg
dm9pZCBkZWZlclRlc3RzRm9yUmVhc29uKFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6U2Nyb2xsYWJs
ZUFyZWFJZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OkRlZmVyVGVzdFRyaWdnZXJS
ZWFzb24pIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVUZXN0RGVmZXJyYWxGb3JSZWFzb24o
V2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZl
bnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbikgeyB9CiAjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3Jv
bGxpbmdUcmVlLmNwcAkocmV2aXNpb24gMTg0MTI5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIz
LDYgKzEyMywxNyBAQCB2b2lkIFRocmVhZGVkU2Nyb2xsaW5nVHJlZTo6aGFuZGxlV2hlZWxFCiAg
ICAgfSk7CiB9CiAKK3ZvaWQgVGhyZWFkZWRTY3JvbGxpbmdUcmVlOjpzZXRBY3RpdmVTY3JvbGxT
bmFwSW5kaWNlcyhTY3JvbGxpbmdOb2RlSUQgbm9kZUlELCB1bnNpZ25lZCBob3Jpem9udGFsSW5k
ZXgsIHVuc2lnbmVkIHZlcnRpY2FsSW5kZXgpCit7CisgICAgaWYgKCFtX3Njcm9sbGluZ0Nvb3Jk
aW5hdG9yKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPEFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3I+IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gbV9zY3JvbGxpbmdDb29yZGluYXRv
cjsKKyAgICBSdW5Mb29wOjptYWluKCkuZGlzcGF0Y2goW3Njcm9sbGluZ0Nvb3JkaW5hdG9yLCBu
b2RlSUQsIGhvcml6b250YWxJbmRleCwgdmVydGljYWxJbmRleF0geworICAgICAgICBzY3JvbGxp
bmdDb29yZGluYXRvci0+c2V0QWN0aXZlU2Nyb2xsU25hcEluZGljZXMobm9kZUlELCBob3Jpem9u
dGFsSW5kZXgsIHZlcnRpY2FsSW5kZXgpOworICAgIH0pOworfQorCiB2b2lkIFRocmVhZGVkU2Ny
b2xsaW5nVHJlZTo6ZGVmZXJUZXN0c0ZvclJlYXNvbihXaGVlbEV2ZW50VGVzdFRyaWdnZXI6OlNj
cm9sbGFibGVBcmVhSWRlbnRpZmllciBpZGVudGlmaWVyLCBXaGVlbEV2ZW50VGVzdFRyaWdnZXI6
OkRlZmVyVGVzdFRyaWdnZXJSZWFzb24gcmVhc29uKQogewogICAgIGlmICghbV9zY3JvbGxpbmdD
b29yZGluYXRvcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVk
U2Nyb2xsaW5nVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1RocmVhZGVkU2Nyb2xsaW5nVHJlZS5oCShyZXZpc2lvbiAxODQxMjkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuaAkod29ya2luZyBj
b3B5KQpAQCAtNjIsNiArNjIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHNjcm9s
bGluZ1RyZWVOb2RlRGlkU2Nyb2xsKFNjcm9sbGluZ05vZGVJRCwgY29uc3QgRmxvYXRQb2ludCYg
c2Nyb2xsUG9zaXRpb24sIFNldE9yU3luY1Njcm9sbGluZ0xheWVyUG9zaXRpb24gPSBTeW5jU2Ny
b2xsaW5nTGF5ZXJQb3NpdGlvbikgb3ZlcnJpZGU7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHZv
aWQgaGFuZGxlV2hlZWxFdmVudFBoYXNlKFBsYXRmb3JtV2hlZWxFdmVudFBoYXNlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2VzKFNjcm9sbGluZ05vZGVJRCwg
dW5zaWduZWQgaG9yaXpvbnRhbEluZGV4LCB1bnNpZ25lZCB2ZXJ0aWNhbEluZGV4KSBvdmVycmlk
ZTsKICAgICB2b2lkIGRlZmVyVGVzdHNGb3JSZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpT
Y3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdoZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0
VHJpZ2dlclJlYXNvbikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVUZXN0RGVmZXJyYWxGb3JS
ZWFzb24oV2hlZWxFdmVudFRlc3RUcmlnZ2VyOjpTY3JvbGxhYmxlQXJlYUlkZW50aWZpZXIsIFdo
ZWVsRXZlbnRUZXN0VHJpZ2dlcjo6RGVmZXJUZXN0VHJpZ2dlclJlYXNvbikgb3ZlcnJpZGU7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdU
cmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlRnJhbWVTY3JvbGxpbmdOb2RlTWFjLm1t
CShyZXZpc2lvbiAxODQxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9tYWMv
U2Nyb2xsaW5nVHJlZUZyYW1lU2Nyb2xsaW5nTm9kZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MTg0LDYgKzE4NCwxMCBAQCB2b2lkIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGVNYWM6
CiAjZW5kaWYKIAogICAgIG1fc2Nyb2xsQ29udHJvbGxlci5oYW5kbGVXaGVlbEV2ZW50KHdoZWVs
RXZlbnQpOworI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCisgICAgaWYgKG1fc2Nyb2xsQ29u
dHJvbGxlci5hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoKSkKKyAgICAgICAgc2Nyb2xs
aW5nVHJlZSgpLnNldEFjdGl2ZVNjcm9sbFNuYXBJbmRpY2VzKHNjcm9sbGluZ05vZGVJRCgpLCBt
X3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVu
dEF4aXM6Okhvcml6b250YWwpLCBtX3Njcm9sbENvbnRyb2xsZXIuYWN0aXZlU2Nyb2xsU25hcElu
ZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CisjZW5kaWYKICAgICBzY3Jv
bGxpbmdUcmVlKCkuc2V0T3JDbGVhckxhdGNoZWROb2RlKHdoZWVsRXZlbnQsIHNjcm9sbGluZ05v
ZGVJRCgpKTsKICAgICBzY3JvbGxpbmdUcmVlKCkuaGFuZGxlV2hlZWxFdmVudFBoYXNlKHdoZWVs
RXZlbnQucGhhc2UoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxB
bmltYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xs
QW5pbWF0b3IuY3BwCShyZXZpc2lvbiAxODQxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxBbmltYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDE2IEBAIGJv
b2wgU2Nyb2xsQW5pbWF0b3I6OnByb2Nlc3NXaGVlbEV2ZW50Rm8KIHsKICAgICByZXR1cm4gbV9z
Y3JvbGxDb250cm9sbGVyLnByb2Nlc3NXaGVlbEV2ZW50Rm9yU2Nyb2xsU25hcCh3aGVlbEV2ZW50
KTsKIH0KKworYm9vbCBTY3JvbGxBbmltYXRvcjo6YWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hh
bmdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9s
bFNuYXBJbmRleERpZENoYW5nZSgpOworfQorCit1bnNpZ25lZCBTY3JvbGxBbmltYXRvcjo6YWN0
aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcykgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zY3JvbGxDb250cm9sbGVyLmFjdGl2ZVNjcm9sbFNuYXBJbmRleEZvckF4
aXMoYXhpcyk7Cit9CiAjZW5kaWYKIAogYm9vbCBTY3JvbGxBbmltYXRvcjo6aGFuZGxlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TY3JvbGxBbmltYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHJldmlzaW9uIDE4NDEyOSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Njcm9sbEFuaW1hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw2ICsx
MzAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMo
KTsKICAgICBMYXlvdXRVbml0IHNjcm9sbE9mZnNldE9uQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZvaWQgaW1tZWRpYXRlU2Nyb2xsT25BeGlzKFNjcm9sbEV2ZW50
QXhpcywgZmxvYXQgZGVsdGEpIG92ZXJyaWRlOworICAgIGJvb2wgYWN0aXZlU2Nyb2xsU25hcElu
ZGV4RGlkQ2hhbmdlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYWN0aXZlU2Nyb2xsU25hcEluZGV4
Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMpIGNvbnN0OwogI2VuZGlmCiAKIHByb3RlY3RlZDoKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbFZpZXcuY3BwCShyZXZpc2lvbiAxODQxMjkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTUyMCw2ICsxNTIwLDE3IEBAIHZvaWQgU2Nyb2xsVmlldzo6c3R5bGVEaWRDaGFuZ2Uo
KQogICAgICAgICBtX3ZlcnRpY2FsU2Nyb2xsYmFyLT5zdHlsZUNoYW5nZWQoKTsKIH0KIAorI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbFRvTmVhcmVz
dEFjdGl2ZVNuYXBQb2ludCgpCit7CisgICAgSW50UG9pbnQgY3VycmVudFBvc2l0aW9uID0gc2Ny
b2xsUG9zaXRpb24oKTsKKyAgICBJbnRQb2ludCBjb3JyZWN0ZWRQb3NpdGlvbiA9IG5lYXJlc3RB
Y3RpdmVTbmFwUG9pbnQoY3VycmVudFBvc2l0aW9uKTsKKyAgICAKKyAgICBpZiAoY29ycmVjdGVk
UG9zaXRpb24gIT0gY3VycmVudFBvc2l0aW9uKQorICAgICAgICBzZXRTY3JvbGxQb3NpdGlvbihj
b3JyZWN0ZWRQb3NpdGlvbik7Cit9CisjZW5kaWYKKwogI2lmICFQTEFURk9STShDT0NPQSkKIAog
dm9pZCBTY3JvbGxWaWV3OjpwbGF0Zm9ybUFkZENoaWxkKFdpZGdldCopCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCShyZXZpc2lvbiAxODQxMjkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNi0yMDA4LCAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA5IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0zODcsNiArMzg3LDEwIEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2Nyb2xsUG9zaXRpb25DaGFuZ2VkVmlhUGxhdGZvcm1XaWRnZXQoY29uc3QgSW50UG9p
bnQmIG9sZFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgbmV3UG9zaXRpb24pOwogCisjaWYgRU5B
QkxFKENTU19TQ1JPTExfU05BUCkKKyAgICB2b2lkIHNjcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQ
b2ludCgpIG92ZXJyaWRlOworI2VuZGlmCisKIHByb3RlY3RlZDoKICAgICBTY3JvbGxWaWV3KCk7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHJl
dmlzaW9uIDE4NDEyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsNyBAQCBzdHJ1Y3QgU2FtZVNpemVBc1Nj
cm9sbGFibGVBcmVhIHsKICAgICB2aXJ0dWFsIH5TYW1lU2l6ZUFzU2Nyb2xsYWJsZUFyZWEoKTsK
ICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIHZvaWQqIHBvaW50ZXJzWzNdOworICAg
IHVuc2lnbmVkIGN1cnJlbnRJbmRpY2VzWzJdOwogI2Vsc2UKICAgICB2b2lkKiBwb2ludGVyOwog
I2VuZGlmCkBAIC0xODgsNyArMTg5LDE0IEBAIGJvb2wgU2Nyb2xsYWJsZUFyZWE6OmhhbmRsZVdo
ZWVsRXZlbnQoY28KICAgICBpZiAoIWlzU2Nyb2xsYWJsZU9yUnViYmVyYmFuZGFibGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNjcm9sbEFuaW1hdG9yKCkuaGFuZGxl
V2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICBib29sIGhhbmRsZWRFdmVudCA9IHNjcm9sbEFu
aW1hdG9yKCkuaGFuZGxlV2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyNpZiBFTkFCTEUoQ1NTX1ND
Uk9MTF9TTkFQKSAmJiBQTEFURk9STShNQUMpCisgICAgaWYgKHNjcm9sbEFuaW1hdG9yKCkuYWN0
aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlKCkpIHsKKyAgICAgICAgc2V0Q3VycmVudEhvcml6
b250YWxTbmFwUG9pbnRJbmRleChzY3JvbGxBbmltYXRvcigpLmFjdGl2ZVNjcm9sbFNuYXBJbmRl
eEZvckF4aXMoU2Nyb2xsRXZlbnRBeGlzOjpIb3Jpem9udGFsKSk7CisgICAgICAgIHNldEN1cnJl
bnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4KHNjcm9sbEFuaW1hdG9yKCkuYWN0aXZlU2Nyb2xsU25h
cEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSk7CisgICAgfQorI2VuZGlm
CisgICAgcmV0dXJuIGhhbmRsZWRFdmVudDsKIH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMp
CkBAIC00MDksMTMgKzQxNyw2MiBAQCB2b2lkIFNjcm9sbGFibGVBcmVhOjpzZXRWZXJ0aWNhbFNu
YXBPZmZzCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygp
CiB7CiAgICAgbV9ob3Jpem9udGFsU25hcE9mZnNldHMgPSBudWxscHRyOworICAgIG1fY3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleCA9IDA7CiB9CiAKIHZvaWQgU2Nyb2xsYWJsZUFyZWE6
OmNsZWFyVmVydGljYWxTbmFwT2Zmc2V0cygpCiB7CiAgICAgbV92ZXJ0aWNhbFNuYXBPZmZzZXRz
ID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4ID0gMDsKK30K
KworSW50UG9pbnQgU2Nyb2xsYWJsZUFyZWE6Om5lYXJlc3RBY3RpdmVTbmFwUG9pbnQoY29uc3Qg
SW50UG9pbnQmIGN1cnJlbnRQb3NpdGlvbikKK3sKKyAgICBpZiAoIWhvcml6b250YWxTbmFwT2Zm
c2V0cygpICYmICF2ZXJ0aWNhbFNuYXBPZmZzZXRzKCkpCisgICAgICAgIHJldHVybiBjdXJyZW50
UG9zaXRpb247CisgICAgCisgICAgaWYgKCFleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisgICAg
ICAgIHJldHVybiBjdXJyZW50UG9zaXRpb247CisgICAgCisgICAgSW50UG9pbnQgY29ycmVjdGVk
UG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247CisgICAgCisgICAgaWYgKGhvcml6b250YWxTbmFw
T2Zmc2V0cygpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIGhvcml6b250YWwgPSAqaG9yaXpvbnRh
bFNuYXBPZmZzZXRzKCk7CisgICAgICAgIAorICAgICAgICBzaXplX3QgYWN0aXZlSW5kZXggPSBj
dXJyZW50SG9yaXpvbnRhbFNuYXBQb2ludEluZGV4KCk7CisgICAgICAgIGlmIChhY3RpdmVJbmRl
eCA8IGhvcml6b250YWwuc2l6ZSgpKQorICAgICAgICAgICAgY29ycmVjdGVkUG9zaXRpb24uc2V0
WChob3Jpem9udGFsW2FjdGl2ZUluZGV4XS50b0ludCgpKTsKKyAgICB9CisgICAgCisgICAgaWYg
KHZlcnRpY2FsU25hcE9mZnNldHMoKSkgeworICAgICAgICBjb25zdCBhdXRvJiB2ZXJ0aWNhbCA9
ICp2ZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgICAgIAorICAgICAgICBzaXplX3QgYWN0aXZl
SW5kZXggPSBjdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCgpOworICAgICAgICBpZiAoYWN0
aXZlSW5kZXggPCB2ZXJ0aWNhbC5zaXplKCkpCisgICAgICAgICAgICBjb3JyZWN0ZWRQb3NpdGlv
bi5zZXRZKHZlcnRpY2FsW2FjdGl2ZUluZGV4XS50b0ludCgpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gY29ycmVjdGVkUG9zaXRpb247CiB9CisKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFRv
TmVhcmVzdEFjdGl2ZVNuYXBQb2ludCgpCit7Cit9CisKK3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVw
ZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGlmIChTY3Jv
bGxBbmltYXRvciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCisg
ICAgICAgIHNjcm9sbEFuaW1hdG9yLT51cGRhdGVTY3JvbGxBbmltYXRvcnNBbmRUaW1lcnMoKTsK
ICNlbmRpZgorICAgIHNjcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2ludCgpOworfQorI2Vsc2UK
K3ZvaWQgU2Nyb2xsYWJsZUFyZWE6OnVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpCit7Cit9CisjZW5k
aWYKKwogCiB2b2lkIFNjcm9sbGFibGVBcmVhOjpzZXJ2aWNlU2Nyb2xsQW5pbWF0aW9ucygpCiB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9u
IDE4NDEyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDExLCAyMDE0IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjYsOCArNjYsMTYgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VmVydGljYWxTbmFwT2Zmc2V0cyhzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PExheW91dFVuaXQ+Pik7CiAgICAgdm9pZCBjbGVhckhvcml6b250YWxTbmFwT2Zmc2V0cygpOwog
ICAgIHZvaWQgY2xlYXJWZXJ0aWNhbFNuYXBPZmZzZXRzKCk7CisgICAgdW5zaWduZWQgY3VycmVu
dEhvcml6b250YWxTbmFwUG9pbnRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudEhvcml6
b250YWxTbmFwUG9pbnRJbmRleDsgfQorICAgIHZvaWQgc2V0Q3VycmVudEhvcml6b250YWxTbmFw
UG9pbnRJbmRleCh1bnNpZ25lZCBpbmRleCkgeyBtX2N1cnJlbnRIb3Jpem9udGFsU25hcFBvaW50
SW5kZXggPSBpbmRleDsgfQorICAgIHVuc2lnbmVkIGN1cnJlbnRWZXJ0aWNhbFNuYXBQb2ludElu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleDsgfQor
ICAgIHZvaWQgc2V0Q3VycmVudFZlcnRpY2FsU25hcFBvaW50SW5kZXgodW5zaWduZWQgaW5kZXgp
IHsgbV9jdXJyZW50VmVydGljYWxTbmFwUG9pbnRJbmRleCA9IGluZGV4OyB9CisgICAgSW50UG9p
bnQgbmVhcmVzdEFjdGl2ZVNuYXBQb2ludChjb25zdCBJbnRQb2ludCYpOworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgdm9pZCBzY3JvbGxUb05lYXJlc3RBY3RpdmVTbmFwUG9pbnQoKTsKICNl
bmRpZgogCisgICAgdm9pZCB1cGRhdGVTY3JvbGxTbmFwU3RhdGUoKTsKKwogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCiAgICAgdmlydHVhbCBib29sIGlzVG91Y2hTY3JvbGxhYmxlKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFuZGxlVG91Y2hFdmVudChjb25z
dCBQbGF0Zm9ybVRvdWNoRXZlbnQmKTsKQEAgLTMwNSw2ICszMTMsOCBAQCBwcml2YXRlOgogI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxMYXlv
dXRVbml0Pj4gbV9ob3Jpem9udGFsU25hcE9mZnNldHM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFZl
Y3RvcjxMYXlvdXRVbml0Pj4gbV92ZXJ0aWNhbFNuYXBPZmZzZXRzOworICAgIHVuc2lnbmVkIG1f
Y3VycmVudEhvcml6b250YWxTbmFwUG9pbnRJbmRleCB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2N1
cnJlbnRWZXJ0aWNhbFNuYXBQb2ludEluZGV4IHsgMCB9OwogI2VuZGlmCiAKICAgICAvLyBUaGVy
ZSBhcmUgOCBwb3NzaWJsZSBjb21iaW5hdGlvbnMgb2Ygd3JpdGluZyBtb2RlIGFuZCBkaXJlY3Rp
b24uIFNjcm9sbCBvcmlnaW4gd2lsbCBiZSBub24temVybyBpbiB0aGUgeCBvciB5IGF4aXMKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9TY3JvbGxDb250cm9sbGVy
LmgJKHJldmlzaW9uIDE4NDEyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Nj
cm9sbENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsMTEgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIDEuMGY7CiAgICAgfQorCisgICAgdmlydHVhbCB1bnNp
Z25lZCBhY3RpdmVTY3JvbGxPZmZzZXRJbmRleChTY3JvbGxFdmVudEF4aXMpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAjZW5kaWYKIH07CiAKQEAgLTExNCw2ICsxMTks
MTAgQEAgcHVibGljOgogICAgIGJvb2wgcHJvY2Vzc1doZWVsRXZlbnRGb3JTY3JvbGxTbmFwKGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYpOwogICAgIHZvaWQgdXBkYXRlU2Nyb2xsQW5pbWF0b3Jz
QW5kVGltZXJzKGNvbnN0IFNjcm9sbGFibGVBcmVhJik7CiAgICAgdm9pZCB1cGRhdGVTY3JvbGxT
bmFwUG9pbnRzKFNjcm9sbEV2ZW50QXhpcywgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+Jik7Cisg
ICAgdW5zaWduZWQgYWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMp
IGNvbnN0OworICAgIHZvaWQgc2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxF
dmVudEF4aXMsIHVuc2lnbmVkKTsKKyAgICBib29sIGFjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENo
YW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2Nyb2xsU25hcEluZGV4RGlkQ2hhbmdlOyB9
CisgICAgdm9pZCBzZXRTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UoYm9vbCBzdGF0ZSkgeyBtX2Fj
dGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSA9IHN0YXRlOyB9CiAjZW5kaWYKIAogcHJpdmF0
ZToKQEAgLTE3Miw2ICsxODEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9tb21lbnR1bVNjcm9s
bEluUHJvZ3Jlc3MgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pZ25vcmVNb21lbnR1bVNjcm9sbHMg
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9zbmFwUnViYmVyYmFuZFRpbWVySXNBY3RpdmUgeyBmYWxz
ZSB9OworICAgIGJvb2wgbV9hY3RpdmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgeyBmYWxzZSB9
OwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NvY29hL1Njcm9sbENvbnRyb2xsZXIubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5tbQkocmV2aXNpb24gMTg0
MTI5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsQ29udHJvbGxlci5t
bQkod29ya2luZyBjb3B5KQpAQCAtNjg1LDYgKzY4NSwyNiBAQCB2b2lkIFNjcm9sbENvbnRyb2xs
ZXI6OmluaXRpYWxpemVHbGlkZVBhCiAgICAgc25hcFN0YXRlLm1fZ2xpZGVQaGFzZVNoaWZ0ID0g
YWNvcygoc25hcFN0YXRlLm1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSAtIHRhcmdldEZpbmFsV2hl
ZWxEZWx0YSkgLyAoc25hcFN0YXRlLm1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSArIHRhcmdldEZp
bmFsV2hlZWxEZWx0YSkpOwogfQogCit1bnNpZ25lZCBTY3JvbGxDb250cm9sbGVyOjphY3RpdmVT
Y3JvbGxTbmFwSW5kZXhGb3JBeGlzKFNjcm9sbEV2ZW50QXhpcyBheGlzKSBjb25zdAoreworICAg
IGlmICgoYXhpcyA9PSBTY3JvbGxFdmVudEF4aXM6Okhvcml6b250YWwpICYmICFtX2hvcml6b250
YWxTY3JvbGxTbmFwU3RhdGUpCisgICAgICAgIHJldHVybiAwOworICAgIGlmICgoYXhpcyA9PSBT
Y3JvbGxFdmVudEF4aXM6OlZlcnRpY2FsKSAmJiAhbV92ZXJ0aWNhbFNjcm9sbFNuYXBTdGF0ZSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgY29uc3QgU2Nyb2xsU25hcEFuaW1hdG9yU3Rh
dGUmIHNuYXBTdGF0ZSA9IHNjcm9sbFNuYXBQb2ludFN0YXRlKGF4aXMpOworICAgIHJldHVybiBz
bmFwU3RhdGUubV9hY3RpdmVTbmFwSW5kZXg7Cit9CisKK3ZvaWQgU2Nyb2xsQ29udHJvbGxlcjo6
c2V0QWN0aXZlU2Nyb2xsU25hcEluZGV4Rm9yQXhpcyhTY3JvbGxFdmVudEF4aXMgYXhpcywgdW5z
aWduZWQgaW5kZXgpCit7CisgICAgYXV0byogc25hcFN0YXRlID0gKGF4aXMgPT0gU2Nyb2xsRXZl
bnRBeGlzOjpIb3Jpem9udGFsKSA/IG1faG9yaXpvbnRhbFNjcm9sbFNuYXBTdGF0ZS5nZXQoKSA6
IG1fdmVydGljYWxTY3JvbGxTbmFwU3RhdGUuZ2V0KCk7CisgICAgaWYgKCFzbmFwU3RhdGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIHNuYXBTdGF0ZS0+bV9hY3RpdmVTbmFwSW5kZXggPSBpbmRl
eDsKK30KKwogdm9pZCBTY3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbmltYXRpb24o
U2Nyb2xsRXZlbnRBeGlzIGF4aXMsIFNjcm9sbFNuYXBTdGF0ZSBuZXdTdGF0ZSkKIHsKICAgICBB
U1NFUlQobmV3U3RhdGUgPT0gU2Nyb2xsU25hcFN0YXRlOjpHbGlkaW5nIHx8IG5ld1N0YXRlID09
IFNjcm9sbFNuYXBTdGF0ZTo6U25hcHBpbmcpOwpAQCAtNzAxLDEwICs3MjEsMTIgQEAgdm9pZCBT
Y3JvbGxDb250cm9sbGVyOjpiZWdpblNjcm9sbFNuYXBBbgogICAgIAogICAgIHByb2plY3RlZFNj
cm9sbERlc3RpbmF0aW9uID0gc3RkOjptaW4oc3RkOjptYXgoTGF5b3V0VW5pdChwcm9qZWN0ZWRT
Y3JvbGxEZXN0aW5hdGlvbiAvIHNjYWxlRmFjdG9yKSwgc25hcFN0YXRlLm1fc25hcE9mZnNldHMu
Zmlyc3QoKSksIHNuYXBTdGF0ZS5tX3NuYXBPZmZzZXRzLmxhc3QoKSk7CiAgICAgc25hcFN0YXRl
Lm1faW5pdGlhbE9mZnNldCA9IG9mZnNldDsKLSAgICBzbmFwU3RhdGUubV90YXJnZXRPZmZzZXQg
PSBzY2FsZUZhY3RvciAqIGNsb3Nlc3RTbmFwT2Zmc2V0PExheW91dFVuaXQsIGZsb2F0PihzbmFw
U3RhdGUubV9zbmFwT2Zmc2V0cywgcHJvamVjdGVkU2Nyb2xsRGVzdGluYXRpb24sIGluaXRpYWxX
aGVlbERlbHRhKTsKKyAgICBtX2FjdGl2ZVNjcm9sbFNuYXBJbmRleERpZENoYW5nZSA9IGZhbHNl
OworICAgIHNuYXBTdGF0ZS5tX3RhcmdldE9mZnNldCA9IHNjYWxlRmFjdG9yICogY2xvc2VzdFNu
YXBPZmZzZXQ8TGF5b3V0VW5pdCwgZmxvYXQ+KHNuYXBTdGF0ZS5tX3NuYXBPZmZzZXRzLCBwcm9q
ZWN0ZWRTY3JvbGxEZXN0aW5hdGlvbiwgaW5pdGlhbFdoZWVsRGVsdGEsIHNuYXBTdGF0ZS5tX2Fj
dGl2ZVNuYXBJbmRleCk7CiAgICAgaWYgKHNuYXBTdGF0ZS5tX2luaXRpYWxPZmZzZXQgPT0gc25h
cFN0YXRlLm1fdGFyZ2V0T2Zmc2V0KQogICAgICAgICByZXR1cm47CiAgICAgCisgICAgbV9hY3Rp
dmVTY3JvbGxTbmFwSW5kZXhEaWRDaGFuZ2UgPSB0cnVlOwogICAgIHNuYXBTdGF0ZS5tX2N1cnJl
bnRTdGF0ZSA9IG5ld1N0YXRlOwogICAgIGlmIChuZXdTdGF0ZSA9PSBTY3JvbGxTbmFwU3RhdGU6
OkdsaWRpbmcpIHsKICAgICAgICAgc25hcFN0YXRlLm1fc2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50
ID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Njcm9sbFNuYXBB
bmltYXRvclN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29j
b2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAkocmV2aXNpb24gMTg0MTI5KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksMTIgKzU5LDEzIEBAIHN0cnVjdCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0
ZSB7CiAgICAgTGF5b3V0VW5pdCBtX3RhcmdldE9mZnNldDsKICAgICAvLyBVc2VkIHRvIHRyYWNr
IGdsaWRpbmcgYmVoYXZpb3IuCiAgICAgTGF5b3V0VW5pdCBtX2JlZ2luVHJhY2tpbmdXaGVlbERl
bHRhT2Zmc2V0OwotICAgIGludCBtX251bVdoZWVsRGVsdGFzVHJhY2tlZDsKKyAgICBpbnQgbV9u
dW1XaGVlbERlbHRhc1RyYWNrZWQgeyAwIH07CisgICAgdW5zaWduZWQgbV9hY3RpdmVTbmFwSW5k
ZXggeyAwIH07CiAgICAgZmxvYXQgbV93aGVlbERlbHRhV2luZG93W3doZWVsRGVsdGFXaW5kb3dT
aXplXTsKLSAgICBmbG9hdCBtX2dsaWRlTWFnbml0dWRlOwotICAgIGZsb2F0IG1fZ2xpZGVQaGFz
ZVNoaWZ0OwotICAgIGZsb2F0IG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YTsKLSAgICBib29sIG1f
c2hvdWxkT3ZlcnJpZGVXaGVlbEV2ZW50OworICAgIGZsb2F0IG1fZ2xpZGVNYWduaXR1ZGUgeyAw
IH07CisgICAgZmxvYXQgbV9nbGlkZVBoYXNlU2hpZnQgeyAwIH07CisgICAgZmxvYXQgbV9nbGlk
ZUluaXRpYWxXaGVlbERlbHRhIHsgMCB9OworICAgIGJvb2wgbV9zaG91bGRPdmVycmlkZVdoZWVs
RXZlbnQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1hdG9yU3RhdGUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvU2Nyb2xsU25hcEFuaW1h
dG9yU3RhdGUubW0JKHJldmlzaW9uIDE4NDEyOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NvY29hL1Njcm9sbFNuYXBBbmltYXRvclN0YXRlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNywx
MSArMzcsNiBAQCBTY3JvbGxTbmFwQW5pbWF0b3JTdGF0ZTo6U2Nyb2xsU25hcEFuaW1hCiAgICAg
LCBtX2luaXRpYWxPZmZzZXQoMCkKICAgICAsIG1fdGFyZ2V0T2Zmc2V0KDApCiAgICAgLCBtX2Jl
Z2luVHJhY2tpbmdXaGVlbERlbHRhT2Zmc2V0KDApCi0gICAgLCBtX251bVdoZWVsRGVsdGFzVHJh
Y2tlZCgwKQotICAgICwgbV9nbGlkZU1hZ25pdHVkZSgwKQotICAgICwgbV9nbGlkZVBoYXNlU2hp
ZnQoMCkKLSAgICAsIG1fZ2xpZGVJbml0aWFsV2hlZWxEZWx0YSgwKQotICAgICwgbV9zaG91bGRP
dmVycmlkZVdoZWVsRXZlbnQoZmFsc2UpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMTg0MTI5KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIwNCw2ICsz
MjA0LDE1IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZVNuYXBPZmZzZXRzKCkKICAgICBSZW5k
ZXJCb3gqIGJveCA9IGVuY2xvc2luZ0VsZW1lbnQoKS0+cmVuZGVyQm94KCk7CiAgICAgdXBkYXRl
U25hcE9mZnNldHNGb3JTY3JvbGxhYmxlQXJlYSgqdGhpcywgKmRvd25jYXN0PEhUTUxFbGVtZW50
PihlbmNsb3NpbmdFbGVtZW50KCkpLCAqYm94LCBib3gtPnN0eWxlKCkpOwogfQorCit2b2lkIFJl
bmRlckxheWVyOjpzY3JvbGxUb05lYXJlc3RBY3RpdmVTbmFwUG9pbnQoKQoreworICAgIEludFBv
aW50IGN1cnJlbnRQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uKCk7CisgICAgSW50UG9pbnQgY29y
cmVjdGVkUG9zaXRpb24gPSBuZWFyZXN0QWN0aXZlU25hcFBvaW50KGN1cnJlbnRQb3NpdGlvbik7
CisgICAgCisgICAgaWYgKGNvcnJlY3RlZFBvc2l0aW9uICE9IGN1cnJlbnRQb3NpdGlvbikKKyAg
ICAgICAgc2Nyb2xsVG9PZmZzZXQodG9JbnRTaXplKGNvcnJlY3RlZFBvc2l0aW9uKSk7Cit9CiAj
ZW5kaWYKIAogaW50IFJlbmRlckxheWVyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKE92ZXJsYXlT
Y3JvbGxiYXJTaXplUmVsZXZhbmN5IHJlbGV2YW5jeSkgY29uc3QKQEAgLTM0NjEsNiArMzQ3MCwx
MiBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMCiAKICAgICBjb21w
dXRlU2Nyb2xsRGltZW5zaW9ucygpOwogCisjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKKyAg
ICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBhcmUgYWxzbyB1cGRhdGVkIGluIGNhc2Ug
b2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNoYW5nZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAorICAgIHVwZGF0ZVNuYXBPZmZzZXRzKCk7Cisj
ZW5kaWYKKwogICAgIGlmIChib3gtPnN0eWxlKCkub3ZlcmZsb3dYKCkgIT0gT01BUlFVRUUgJiYg
IWlzUnViYmVyQmFuZEluUHJvZ3Jlc3MoKSkgewogICAgICAgICAvLyBMYXlvdXQgbWF5IGNhdXNl
IHVzIHRvIGJlIGF0IGFuIGludmFsaWQgc2Nyb2xsIHBvc2l0aW9uLiBJbiB0aGlzIGNhc2Ugd2Ug
bmVlZAogICAgICAgICAvLyB0byBwdWxsIG91ciBzY3JvbGwgb2Zmc2V0cyBiYWNrIHRvIHRoZSBt
YXggKG9yIHB1c2ggdGhlbSB1cCB0byB0aGUgbWluKS4KQEAgLTM0ODgsMTUgKzM1MDMsNyBAQCB2
b2lkIFJlbmRlckxheWVyOjp1cGRhdGVTY3JvbGxJbmZvQWZ0ZXJMCiAgICAgaWYgKGNvbXBvc2l0
b3IoKS51cGRhdGVMYXllckNvbXBvc2l0aW5nU3RhdGUoKnRoaXMpKQogICAgICAgICBjb21wb3Np
dG9yKCkuc2V0Q29tcG9zaXRpbmdMYXllcnNOZWVkUmVidWlsZCgpOwogCi0jaWYgRU5BQkxFKENT
U19TQ1JPTExfU05BUCkKLSAgICAvLyBGSVhNRTogRW5zdXJlIHRoYXQgb2Zmc2V0cyBhcmUgYWxz
byB1cGRhdGVkIGluIGNhc2Ugb2YgcHJvZ3JhbW1hdGljIHN0eWxlIGNoYW5nZXMuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTk2NAotICAgIHVwZGF0
ZVNuYXBPZmZzZXRzKCk7Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIGlmIChTY3JvbGxBbmltYXRv
ciogc2Nyb2xsQW5pbWF0b3IgPSBleGlzdGluZ1Njcm9sbEFuaW1hdG9yKCkpCi0gICAgICAgIHJl
dHVybiBzY3JvbGxBbmltYXRvci0+dXBkYXRlU2Nyb2xsQW5pbWF0b3JzQW5kVGltZXJzKCk7Ci0j
ZW5kaWYKLSNlbmRpZgorICAgIHVwZGF0ZVNjcm9sbFNuYXBTdGF0ZSgpOwogfQogCiBib29sIFJl
bmRlckxheWVyOjpvdmVyZmxvd0NvbnRyb2xzSW50ZXJzZWN0UmVjdChjb25zdCBJbnRSZWN0JiBs
b2NhbFJlY3QpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAkocmV2aXNpb24gMTg0MTI5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDAzLCAyMDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwMywgMjAwOSwgMjAxMiwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMTk5OCBOZXRzY2Fw
ZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4KICAqCkBAIC0yMjQsNiArMjI0LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBoYXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUFuY2Vz
dG9yKCkgb3ZlcnJpZGU7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICB2aXJ0dWFs
IHZvaWQgdXBkYXRlU25hcE9mZnNldHMoKSBvdmVycmlkZTsKKyAgICB2b2lkIHNjcm9sbFRvTmVh
cmVzdEFjdGl2ZVNuYXBQb2ludCgpIG92ZXJyaWRlOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJ
T1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShy
ZXZpc2lvbiAxODQxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5Miw0ICs4OTIsMTAgQEAgYm9vbCBSZW5kZXJMaXN0
Qm94OjpzY3JvbGxlZFRvUmlnaHQoKSBjbwogICAgIHJldHVybiB0cnVlOwogfQogICAgIAorI2lm
IEVOQUJMRShDU1NfU0NST0xMX1NOQVApCit2b2lkIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvTmVh
cmVzdEFjdGl2ZVNuYXBQb2ludCgpCit7Cit9CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZp
c2lvbiAxODQxMjkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIHNjcm9sbGVkVG9MZWZ0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHNj
cm9sbGVkVG9SaWdodCgpIGNvbnN0IG92ZXJyaWRlOwogCisjaWYgRU5BQkxFKENTU19TQ1JPTExf
U05BUCkKKyAgICB2b2lkIHNjcm9sbFRvTmVhcmVzdEFjdGl2ZVNuYXBQb2ludCgpIG92ZXJyaWRl
OworI2VuZGlmCisKIHByaXZhdGU6CiAgICAgdm9pZCBlbGVtZW50KCkgY29uc3QgPSBkZWxldGU7
CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NDEyOSkKKysrIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE1LTA1LTExICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFNjcm9sbCBzbmFwIGxv
Z2ljIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiByZXNpemluZyB0aGUgV2ViVmlldworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyNTkwCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS8yMDEyNTA4OD4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JQcm94eUlPUy5tbToKKyAgICAgICAgKFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJv
eHk6OmNsb3Nlc3RTbmFwT2Zmc2V0Rm9yTWFpbkZyYW1lU2Nyb2xsaW5nKTogTW9kaWZ5IHVzZSBv
ZiAnY2xvc2VzdFNuYXBPZmZzZXQnIHRvIHNhdGlzZnkgdGhlIGFkZGl0aW9uYWwKKyAgICAgICAg
YXJndW1lbnQgSSBhZGRlZC4gVGhpcyBpcyBjdXJyZW50bHkgbm90IHVzZWQgZm9yIGFueXRoaW5n
IG9uIGlPUy4KKyAgICAgICAgKiBVSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tOiBEaXR0by4KKwogMjAxNS0wNS0xMSAgQW5kZXJz
IENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFNpbXBsaWZ5IHNoaW0g
cGF0aCBjb21wdXRhdGlvbgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Njcm9sbGlu
Zy9pb3MvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2Nyb2xsaW5nTm9kZUlPUy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVl
T3ZlcmZsb3dTY3JvbGxpbmdOb2RlSU9TLm1tCShyZXZpc2lvbiAxODQxMjkpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvU2Nyb2xsaW5nL2lvcy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3Jv
bGxpbmdOb2RlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MCwxMCArODAsMTEgQEAgLSAodm9p
ZClzY3JvbGxWaWV3V2lsbEJlZ2luRHJhZ2dpbmc6KFVJUwogI2lmIEVOQUJMRShDU1NfU0NST0xM
X1NOQVApCiAtICh2b2lkKXNjcm9sbFZpZXdXaWxsRW5kRHJhZ2dpbmc6KFVJU2Nyb2xsVmlldyAq
KXNjcm9sbFZpZXcgd2l0aFZlbG9jaXR5OihDR1BvaW50KXZlbG9jaXR5IHRhcmdldENvbnRlbnRP
ZmZzZXQ6KGlub3V0IENHUG9pbnQgKil0YXJnZXRDb250ZW50T2Zmc2V0CiB7CisgICAgdW5zaWdu
ZWQgaWdub3JlOwogICAgIGlmICghX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFsU25hcE9m
ZnNldHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBjbG9z
ZXN0U25hcE9mZnNldDxmbG9hdCwgQ0dGbG9hdD4oX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9u
dGFsU25hcE9mZnNldHMoKSwgdGFyZ2V0Q29udGVudE9mZnNldC0+eCwgdmVsb2NpdHkueCk7Cisg
ICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnggPSBjbG9zZXN0U25hcE9mZnNldDxmbG9hdCwg
Q0dGbG9hdD4oX3Njcm9sbGluZ1RyZWVOb2RlLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKSwgdGFy
Z2V0Q29udGVudE9mZnNldC0+eCwgdmVsb2NpdHkueCwgaWdub3JlKTsKICAgICBpZiAoIV9zY3Jv
bGxpbmdUcmVlTm9kZS0+dmVydGljYWxTbmFwT2Zmc2V0cygpLmlzRW1wdHkoKSkKLSAgICAgICAg
dGFyZ2V0Q29udGVudE9mZnNldC0+eSA9IGNsb3Nlc3RTbmFwT2Zmc2V0PGZsb2F0LCBDR0Zsb2F0
Pihfc2Nyb2xsaW5nVHJlZU5vZGUtPnZlcnRpY2FsU25hcE9mZnNldHMoKSwgdGFyZ2V0Q29udGVu
dE9mZnNldC0+eSwgdmVsb2NpdHkueSk7CisgICAgICAgIHRhcmdldENvbnRlbnRPZmZzZXQtPnkg
PSBjbG9zZXN0U25hcE9mZnNldDxmbG9hdCwgQ0dGbG9hdD4oX3Njcm9sbGluZ1RyZWVOb2RlLT52
ZXJ0aWNhbFNuYXBPZmZzZXRzKCksIHRhcmdldENvbnRlbnRPZmZzZXQtPnksIHZlbG9jaXR5Lnks
IGlnbm9yZSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94
eUlPUy5tbQkocmV2aXNpb24gMTg0MTI5KQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTAsOCArMTUwLDkgQEAgZmxvYXQgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcm94eTo6
YwogICAgIFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqIHJvb3RGcmFtZSA9IHN0YXRp
Y19jYXN0PFNjcm9sbGluZ1RyZWVGcmFtZVNjcm9sbGluZ05vZGUqPihyb290KTsKICAgICBjb25z
dCBWZWN0b3I8ZmxvYXQ+JiBzbmFwT2Zmc2V0cyA9IGF4aXMgPT0gU2Nyb2xsRXZlbnRBeGlzOjpI
b3Jpem9udGFsID8gcm9vdEZyYW1lLT5ob3Jpem9udGFsU25hcE9mZnNldHMoKSA6IHJvb3RGcmFt
ZS0+dmVydGljYWxTbmFwT2Zmc2V0cygpOwogCisgICAgdW5zaWduZWQgaWdub3JlID0gMDsKICAg
ICBmbG9hdCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiA9IHNjcm9sbERlc3RpbmF0aW9uIC8gbV93
ZWJQYWdlUHJveHkuZGlzcGxheWVkQ29udGVudFNjYWxlKCk7Ci0gICAgZmxvYXQgcmF3Q2xvc2Vz
dFNuYXBPZmZzZXQgPSBjbG9zZXN0U25hcE9mZnNldDxmbG9hdCwgZmxvYXQ+KHNuYXBPZmZzZXRz
LCBzY2FsZWRTY3JvbGxEZXN0aW5hdGlvbiwgdmVsb2NpdHkpOworICAgIGZsb2F0IHJhd0Nsb3Nl
c3RTbmFwT2Zmc2V0ID0gY2xvc2VzdFNuYXBPZmZzZXQ8ZmxvYXQsIGZsb2F0PihzbmFwT2Zmc2V0
cywgc2NhbGVkU2Nyb2xsRGVzdGluYXRpb24sIHZlbG9jaXR5LCBpZ25vcmUpOwogICAgIHJldHVy
biByYXdDbG9zZXN0U25hcE9mZnNldCAqIG1fd2ViUGFnZVByb3h5LmRpc3BsYXllZENvbnRlbnRT
Y2FsZSgpOwogfQogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>