<?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>134398</bug_id>
          
          <creation_ts>2014-06-27 09:34:31 -0700</creation_ts>
          <short_desc>Flush throttling with remote layers</short_desc>
          <delta_ts>2014-06-27 14:59: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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1018977</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-06-27 09:34:31 -0700</bug_when>
    <thetext>The new remote layer code has largely defeated the existing flush throttling. We should bring it back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018978</commentid>
    <comment_count>1</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-06-27 09:34:53 -0700</bug_when>
    <thetext>&lt;rdar://problem/17455967&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018990</commentid>
    <comment_count>2</comment_count>
      <attachid>233991</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-06-27 09:59:36 -0700</bug_when>
    <thetext>Created attachment 233991
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019007</commentid>
    <comment_count>3</comment_count>
      <attachid>233997</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-06-27 10:49:25 -0700</bug_when>
    <thetext>Created attachment 233997
non-Cocoa build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019029</commentid>
    <comment_count>4</comment_count>
      <attachid>233997</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-06-27 11:16:19 -0700</bug_when>
    <thetext>Comment on attachment 233997
non-Cocoa build fix

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

&gt; Source/WebCore/page/FrameView.cpp:2257
&gt; +    if (frame().page()-&gt;chrome().client().usesRemoteLayerTree()) {
&gt; +        frame().page()-&gt;chrome().client().disableLayerFlushThrottlingTemporarilyForInteraction();

Icky knowledge of DrawingArea in FrameView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019030</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-06-27 11:16:29 -0700</bug_when>
    <thetext>FrameView::updateLayerFlushThrottlingInAllFrames() should call FrameView::frameLoadProgressingStatusChanged(Frame*)

FrameView::frameLoadProgressingStatusChanged() calls
    updateLayerFlushThrottlingInAllFrames();
    adjustTiledBackingCoverage();
    
FrameView::updateLayerFlushThrottlingInAllFrames()
{
    bool isMainLoadProgressing = frame().page()-&gt;progress().isMainLoadProgressing();
    if (frame().page()-&gt;chrome().client().adjustLayerFlushThrottling(isMainLoadProgressing))
        return; // client handled throttling
    ...
}

Maybe have:

enum ThottleState {
    MainLoadProgressing = 1 &lt;&lt; 0,
    UserIsInteracting = 1 &lt;&lt; 1
    ...
};

typedef unsigned ThottleStateFlags;

ChromeClient::adjustLayerFlushThrottling(ThottleStateFlags);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019090</commentid>
    <comment_count>6</comment_count>
      <attachid>234017</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-06-27 14:25:32 -0700</bug_when>
    <thetext>Created attachment 234017
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019094</commentid>
    <comment_count>7</comment_count>
      <attachid>234017</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-06-27 14:31:52 -0700</bug_when>
    <thetext>Comment on attachment 234017
updated patch

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

&gt; Source/WebCore/loader/FrameLoader.cpp:3413
&gt;  void FrameLoader::loadProgressingStatusChanged()
&gt;  {
&gt; -    FrameView* view = m_frame.mainFrame().view();
&gt; -    if (!view)
&gt; -        return;
&gt; -
&gt; -    view-&gt;updateLayerFlushThrottlingInAllFrames();
&gt; -    view-&gt;adjustTiledBackingCoverage();
&gt; +    if (auto* view = m_frame.mainFrame().view())
&gt; +        view-&gt;loadProgressingStatusChanged();
&gt;  }

Could the callers work directly on FrameView instead of calling through FrameLoader?

&gt; Source/WebCore/page/FrameView.cpp:2276
&gt; -    bool isMainLoadProgressing = frame().page()-&gt;progress().isMainLoadProgressing();
&gt; +    ASSERT(frame().isMainFrame());
&gt; +
&gt; +    bool mainLoadProgressing = frame().page()-&gt;progress().isMainLoadProgressing();

I think the old name with &quot;is&quot; is better.

&gt; Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:259
&gt; +    static const auto initialFlushDelay = 500_ms;
&gt; +    static const auto flushDelay = 1500_ms;

I don’t think the “static” here are helpful.

&gt; Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:284
&gt; +    // Re-schedule the flush if we stopped throttling.
&gt; +    if (!wasThrottlingLayerFlushes || m_isThrottlingLayerFlushes)
&gt; +        return true;
&gt; +    if (!m_layerFlushTimer.isActive())
&gt; +        return true;
&gt; +    m_layerFlushTimer.stop();
&gt; +
&gt; +    scheduleCompositingLayerFlush();

I think we could rewrite this to match the comment better:

    if (wasThrottlingLayerFlushes &amp;&amp; !m_isThrottlingLayerFlushes &amp;&amp; m_layerFlushTimer.isActive()) {
        m_layerFlushTimer.stop();
        scheduleCompositingLayerFlush();
    }

Seems clearer to me than the early return version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019100</commentid>
    <comment_count>8</comment_count>
      <attachid>234017</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-06-27 14:40:08 -0700</bug_when>
    <thetext>Comment on attachment 234017
updated patch

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

&gt; Source/WebCore/page/FrameView.cpp:2261
&gt; +    bool mainLoadProgressing = frame().page()-&gt;progress().isMainLoadProgressing();
&gt; +
&gt; +    LayerFlushThrottleState::Flags flags = LayerFlushThrottleState::UserIsInteracting | (mainLoadProgressing ? LayerFlushThrottleState::MainLoadProgressing : 0);
&gt; +    if (frame().page()-&gt;chrome().client().adjustLayerFlushThrottling(flags))
&gt; +        return;
&gt; +

Would be nice if this could just call updateLayerFlushThrottling(LayerFlushThrottleState::UserIsInteracting) at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019104</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-06-27 14:47:03 -0700</bug_when>
    <thetext>&gt; Could the callers work directly on FrameView instead of calling through FrameLoader?

I don&apos;t want to make ProgressTracker know about views.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1019108</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-06-27 14:59:02 -0700</bug_when>
    <thetext>https://trac.webkit.org/r170557</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233991</attachid>
            <date>2014-06-27 09:59:36 -0700</date>
            <delta_ts>2014-06-27 10:49:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>remote-layer-throttle-2.patch</filename>
            <type>text/plain</type>
            <size>15311</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDUzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE0LTA2LTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGbHVzaCB0aHJvdHRsaW5nIHdp
dGggcmVtb3RlIGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM0Mzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBXaXRoIHJlbW90ZSBsYXllciB0cmVlcyB0aGUgZmx1c2ggc2NoZWR1
bGluZyBsaXZlcyBpbiBXZWJLaXQyIGxheWVyLiBUaGUgdGhyb3R0bGluZyBjb2RlCisgICAgICAg
IG5lZWRzIHRvIGxpdmUgdGhlcmUgYXMgd2VsbC4KKyAgICAgICAgCisgICAgICAgIEFkZCB0aGUg
cmVxdWlyZWQgY2FsbGJhY2tzIGFuZCBkaXNhYmxlIHRoZSBleGlzdGluZyB0aHJvdHRsaW5nIGNv
ZGUgaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yCisgICAgICAgIHdoZW4gcmVtb3RlIGxheWVycyBh
cmUgaW4gdXNlLiBMYXRlciB3ZSBjYW4gZ2V0IHJpZCBvZiB0aGUgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yIHRocm90dGxpbmcgY29kZS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAg
ICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6
OnVzZXNSZW1vdGVMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojps
YXllckZsdXNoVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWVDbGllbnQ6OmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJh
Y3Rpb24pOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6ZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRl
cmFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNob3VsZFRocm90dGxlTGF5
ZXJGbHVzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJGbHVz
aFRocm90dGxpbmdJbkFsbEZyYW1lcyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0TGF5ZXJGbHVzaFRocm90
dGxpbmdFbmFibGVkKToKKwogMjAxNC0wNi0yNyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFNldCBjbGlwcmVjdCByYWRpdXMgdW5jb25kaXRpb25hbGx5IGluIFJl
bmRlckxheWVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3MDUzMikKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMDA5LDYg
KzIwMDksNyBAQCBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzIwaXNTb2Z0d2FyZVJlbmRlCiBfX1pO
SzdXZWJDb3JlOUZyYW1lVmlldzIxbWF4aW11bVNjcm9sbFBvc2l0aW9uRXYKIF9fWk5LN1dlYkNv
cmU5RnJhbWVWaWV3MjFtaW5pbXVtU2Nyb2xsUG9zaXRpb25FdgogX19aTks3V2ViQ29yZTlGcmFt
ZVZpZXcyM2RvY3VtZW50QmFja2dyb3VuZENvbG9yRXYKK19fWk5LN1dlYkNvcmU5RnJhbWVWaWV3
MjZzaG91bGRUaHJvdHRsZUxheWVyRmx1c2hlc0V2CiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzI3
d2luZG93Q2xpcFJlY3RGb3JGcmFtZU93bmVyRVBLTlNfMjFIVE1MRnJhbWVPd25lckVsZW1lbnRF
YgogX19aTks3V2ViQ29yZTlGcmFtZVZpZXcyOGlzRW5jbG9zZWRJbkNvbXBvc2l0aW5nTGF5ZXJF
dgogX19aTks3V2ViQ29yZTlJbmxpbmVCb3gxMGxpbmVIZWlnaHRFdgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiAxNzA1MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDkgQEAgcHVi
bGljOgogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBsYXllciB0cmVlIHVwZGF0ZXMgYXJl
IGRpc2FibGVkLgogICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVTdGF0ZUlzRnJvemVuKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXNlc1JlbW90ZUxheWVyVHJl
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGxheWVyRmx1c2hU
aHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGVMYXll
ckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24oKSB7IH0KIAogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gY3JlYXRlU2Nyb2xsaW5nQ29v
cmRpbmF0b3IoUGFnZSopIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUzLDE2ICsyMjUzLDMxIEBA
IHZvaWQgRnJhbWVWaWV3OjphZGRlZE9yUmVtb3ZlZFNjcm9sbGJhcigKIAogdm9pZCBGcmFtZVZp
ZXc6OmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24o
KQogeworICAgIGlmIChmcmFtZSgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkudXNlc1JlbW90
ZUxheWVyVHJlZSgpKSB7CisgICAgICAgIGZyYW1lKCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQo
KS5kaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSByZW5k
ZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPmNvbXBvc2l0b3IoKS5kaXNhYmxlTGF5ZXJGbHVzaFRo
cm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCk7CiB9CiAKK2Jvb2wgRnJhbWVWaWV3
OjpzaG91bGRUaHJvdHRsZUxheWVyRmx1c2hlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1l
KCkucGFnZSgpLT5wcm9ncmVzcygpLmlzTWFpbkxvYWRQcm9ncmVzc2luZygpOworfQorCiB2b2lk
IEZyYW1lVmlldzo6dXBkYXRlTGF5ZXJGbHVzaFRocm90dGxpbmdJbkFsbEZyYW1lcygpCiB7Ci0g
ICAgYm9vbCBpc01haW5Mb2FkUHJvZ3Jlc3NpbmcgPSBmcmFtZSgpLnBhZ2UoKS0+cHJvZ3Jlc3Mo
KS5pc01haW5Mb2FkUHJvZ3Jlc3NpbmcoKTsKKyAgICAvLyBGb3IgcmVtb3RlIGxheWVycyB0aHJv
dHRsaW5nIGlzIGRvbmUgb24gV2ViS2l0MiBsZXZlbC4KKyAgICBpZiAoZnJhbWUoKS5wYWdlKCkt
PmNocm9tZSgpLmNsaWVudCgpLnVzZXNSZW1vdGVMYXllclRyZWUoKSkgeworICAgICAgICBmcmFt
ZSgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubGF5ZXJGbHVzaFRocm90dGxpbmdTdGF0ZUNo
YW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgc2hvdWxkVGhyb3R0
bGUgPSBzaG91bGRUaHJvdHRsZUxheWVyRmx1c2hlcygpOwogICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQobV9mcmFtZS5nZXQoKSkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcg
PSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgICAgICByZW5kZXJWaWV3LT5jb21w
b3NpdG9yKCkuc2V0TGF5ZXJGbHVzaFRocm90dGxpbmdFbmFibGVkKGlzTWFpbkxvYWRQcm9ncmVz
c2luZyk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCkuc2V0TGF5ZXJGbHVz
aFRocm90dGxpbmdFbmFibGVkKHNob3VsZFRocm90dGxlKTsKICAgICB9CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBib29sIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSBj
b25zdDsKIAorICAgIGJvb2wgc2hvdWxkVGhyb3R0bGVMYXllckZsdXNoZXMoKSBjb25zdDsKICAg
ICB2b2lkIGRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rp
b24oKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyRmx1c2hUaHJvdHRsaW5nSW5BbGxGcmFtZXMoKTsK
ICAgICB2b2lkIGFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNp
b24gMTcwNTMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJNYWlu
RnJhbWUuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJGdWxsU2Ny
ZWVuLmgiCkBAIC0yODQsNyArMjgzLDcgQEAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpSZW5kZXJM
YXllckNvbXBvcwogICAgICwgbV9sYXllcnNXaXRoVGlsZWRCYWNraW5nQ291bnQoMCkKICAgICAs
IG1fcm9vdExheWVyQXR0YWNobWVudChSb290TGF5ZXJVbmF0dGFjaGVkKQogICAgICwgbV9sYXll
ckZsdXNoVGltZXIodGhpcywgJlJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpCi0gICAgLCBtX2xheWVyRmx1c2hUaHJvdHRsaW5nRW5hYmxlZChwYWdlKCkgJiYgcGFn
ZSgpLT5wcm9ncmVzcygpLmlzTWFpbkxvYWRQcm9ncmVzc2luZygpKQorICAgICwgbV9sYXllckZs
dXNoVGhyb3R0bGluZ0VuYWJsZWQocGFnZSgpICYmICFwYWdlKCktPmNocm9tZSgpLmNsaWVudCgp
LnVzZXNSZW1vdGVMYXllclRyZWUoKSAmJiBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2hvdWxk
VGhyb3R0bGVMYXllckZsdXNoZXMoKSkKICAgICAsIG1fbGF5ZXJGbHVzaFRocm90dGxpbmdUZW1w
b3JhcmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb24oZmFsc2UpCiAgICAgLCBtX2hhc1BlbmRpbmdM
YXllckZsdXNoKGZhbHNlKQogICAgICwgbV9wYWludFJlbGF0ZWRNaWxlc3RvbmVzVGltZXIodGhp
cywgJlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFpbnRSZWxhdGVkTWlsZXN0b25lc1RpbWVyRmly
ZWQpCkBAIC0zOTMxLDYgKzM5MzAsOSBAQCBQYWdlKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBh
Z2UoKSBjb25zCiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRMYXllckZsdXNoVGhy
b3R0bGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogeworICAgIEFTU0VSVChwYWdlKCkpOworICAg
IEFTU0VSVCghcGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS51c2VzUmVtb3RlTGF5ZXJUcmVlKCkp
OworCiAgICAgbV9sYXllckZsdXNoVGhyb3R0bGluZ0VuYWJsZWQgPSBlbmFibGVkOwogICAgIGlm
IChtX2xheWVyRmx1c2hUaHJvdHRsaW5nRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTQtMDYtMjcgIEFudHRpIEtvaXZpc3Rv
ICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIEZsdXNoIHRocm90dGxpbmcgd2l0aCByZW1v
dGUgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzQzOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojp1c2VzUmVtb3RlTGF5ZXJUcmVlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpsYXllckZsdXNoVGhyb3R0bGluZ1N0YXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6ZGlzYWJsZUxheWVyRmx1
c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbik6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW06CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhOjpsYXllckZsdXNoVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhOjpkaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseUZv
ckludGVyYWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKToKKyAgICAgICAgCisgICAgICAgICAgICBEZWxheSBsYXllciBmbHVzaGVzIGR1
cmluZyBwYWdlIGxvYWRpbmcuIFRoZSBmaXJzdCB2aXN1YWwgZmx1c2ggdXNlcyBzaG9ydGVyIGRl
bGF5LgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpsYXll
ckZsdXNoVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIAorICAgICAgICAgICAgRmx1
c2ggaW1tZWRpYXRlbHkgd2hlbiB3ZSBhcmUgbm8gbG9uZ2VyIHRocm90dGxpbmcuCisKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmRpc2FibGVMYXllckZsdXNo
VGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24pOgorICAgICAgICAKKyAgICAgICAg
ICAgIElmIHVzZSBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0aGUgbmV4dCBmbHVzaCBpbiB1bnRo
cm90dGxlZCBldmVuIGlmIGxvYWRpbmcgaXMgaW4gcHJvZ3Jlc3MuCisKIDIwMTQtMDYtMjYgIERh
bmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdW1dLMl0gRGlz
dGFudCBmb2N1c2FibGUgZWxlbWVudCBtYXkgbm90IGJlIHNjcm9sbGVkIGludG8gdmlldyB3aGVu
IGZvY3VzZWQgdXNpbmcga2V5Ym9hcmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJl
dmlzaW9uIDE3MDUzMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQzLDYgKzg0MywyMiBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVDb21wb3NpdGluCiAgICAgICAgIG1fcGFn
ZS0+ZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKIH0KIAor
Ym9vbCBXZWJDaHJvbWVDbGllbnQ6OnVzZXNSZW1vdGVMYXllclRyZWUoKSBjb25zdAoreworICAg
IHJldHVybiBtX3BhZ2UtPmRyYXdpbmdBcmVhKCkgJiYgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT50
eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJUcmVlOworfQorCit2b2lkIFdlYkNo
cm9tZUNsaWVudDo6bGF5ZXJGbHVzaFRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKQoreworICAgIGlm
IChtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCisgICAgICAgIG1fcGFnZS0+ZHJhd2luZ0FyZWEoKS0+
bGF5ZXJGbHVzaFRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKTsKK30KKwordm9pZCBXZWJDaHJvbWVD
bGllbnQ6OmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rp
b24oKQoreworICAgIGlmIChtX3BhZ2UtPmRyYXdpbmdBcmVhKCkpCisgICAgICAgIG1fcGFnZS0+
ZHJhd2luZ0FyZWEoKS0+ZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJ
bnRlcmFjdGlvbigpOworfQogCiBib29sIFdlYkNocm9tZUNsaWVudDo6bGF5ZXJUcmVlU3RhdGVJ
c0Zyb3plbigpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgJKHJldmlzaW9uIDE3
MDUzMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw2ICsyMTAsOSBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihXZWJDb3JlOjpGcmFtZSos
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgYm9vbCB1c2VzUmVtb3RlTGF5ZXJUcmVlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGxheWVyRmx1c2hUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCkgb3ZlcnJpZGU7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9y
SW50ZXJhY3Rpb24oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXIqIGRvY3VtZW50T3ZlcmxheUxheWVyRm9yRnJhbWUoV2ViQ29yZTo6RnJhbWUmKSBvdmVycmlk
ZTsKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJDaHJv
bWVDbGllbnRJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tCShyZXZpc2lvbiAxNzA1MzIp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJDaHJv
bWVDbGllbnRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDExICsyOCwxMiBAQAogCiAjaWYg
UExBVEZPUk0oSU9TKQogCi0jaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CisjaW1w
b3J0ICJEcmF3aW5nQXJlYS5oIgogI2ltcG9ydCAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAj
aW1wb3J0ICJXZWJGcmFtZS5oIgogI2ltcG9ydCAiV2ViUGFnZS5oIgogI2ltcG9ydCAiV2ViUGFn
ZVByb3h5TWVzc2FnZXMuaCIKKyNpbXBvcnQgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9EcmF3aW5nQXJlYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCShyZXZpc2lvbiAxNzA1MzIpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAkod29ya2luZyBjb3B5KQpAQCAt
MTE5LDYgKzExOSw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBtYXJrTGF5ZXJzVm9s
YXRpbGVJbW1lZGlhdGVseUlmUG9zc2libGUoKSB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2aXJ0
dWFsIHZvaWQgbGF5ZXJGbHVzaFRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFj
dGlvbigpIHsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgRHJhd2luZ0FyZWEoRHJhd2luZ0FyZWFUeXBl
LCBXZWJQYWdlJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgJ
KHJldmlzaW9uIDE3MDUzMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaAkod29ya2luZyBjb3B5KQpAQCAtOTksNiAr
OTksOSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHZpZXdTdGF0ZURpZENoYW5nZShX
ZWJDb3JlOjpWaWV3U3RhdGU6OkZsYWdzIGNoYW5nZWQsIGJvb2wgd2FudHNEaWRVcGRhdGVWaWV3
U3RhdGUpIG92ZXJyaWRlOwogCisgICAgdmlydHVhbCB2b2lkIGxheWVyRmx1c2hUaHJvdHRsaW5n
U3RhdGVDaGFuZ2VkKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGVMYXllckZs
dXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24oKSBvdmVycmlkZTsKKwogICAg
IC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9u
U3RhcnRlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpIG92ZXJy
aWRlIHsgfQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZSB7IH0KQEAgLTE0Myw2ICsxNDYsOCBAQCBwcml2
YXRlOgogICAgIFdlYkNvcmU6OlRpbWVyPFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhPiBtX2xh
eWVyRmx1c2hUaW1lcjsKICAgICBib29sIG1faXNGbHVzaGluZ1N1c3BlbmRlZDsKICAgICBib29s
IG1faGFzRGVmZXJyZWRGbHVzaDsKKyAgICBib29sIG1faXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVz
OworICAgIGJvb2wgbV9pc0xheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlEaXNhYmxlZEZv
ckludGVyYWN0aW9uOwogCiAgICAgYm9vbCBtX3dhaXRpbmdGb3JCYWNraW5nU3RvcmVTd2FwOwog
ICAgIGJvb2wgbV9oYWRGbHVzaERlZmVycmVkV2hpbGVXYWl0aW5nRm9yQmFja2luZ1N0b3JlU3dh
cDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWEubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQkocmV2aXNpb24g
MTcwNTMyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksOCBAQCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6UmVtb3RlTGF5ZXJUCiAgICAgLCBtX2xheWVyRmx1
c2hUaW1lcih0aGlzLCAmUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmxheWVyRmx1c2hUaW1l
ckZpcmVkKQogICAgICwgbV9pc0ZsdXNoaW5nU3VzcGVuZGVkKGZhbHNlKQogICAgICwgbV9oYXNE
ZWZlcnJlZEZsdXNoKGZhbHNlKQorICAgICwgbV9pc1Rocm90dGxpbmdMYXllckZsdXNoZXMoZmFs
c2UpCisgICAgLCBtX2lzTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseURpc2FibGVkRm9y
SW50ZXJhY3Rpb24oZmFsc2UpCiAgICAgLCBtX3dhaXRpbmdGb3JCYWNraW5nU3RvcmVTd2FwKGZh
bHNlKQogICAgICwgbV9oYWRGbHVzaERlZmVycmVkV2hpbGVXYWl0aW5nRm9yQmFja2luZ1N0b3Jl
U3dhcChmYWxzZSkKICAgICAsIG1fZGlzcGxheVJlZnJlc2hNb25pdG9yc1RvTm90aWZ5KG51bGxw
dHIpCkBAIC0yMzksMTAgKzI0MSw0NSBAQCBUaWxlZEJhY2tpbmcqIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhCiAKIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNjaGVkdWxlQ29t
cG9zaXRpbmdMYXllckZsdXNoKCkKIHsKLSAgICBpZiAobV9sYXllckZsdXNoVGltZXIuaXNBY3Rp
dmUoKSkKKyAgICBpZiAobV9pc0ZsdXNoaW5nU3VzcGVuZGVkKSB7CisgICAgICAgIG1faXNMYXll
ckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlzYWJsZWRGb3JJbnRlcmFjdGlvbiA9IGZhbHNl
OworICAgICAgICBtX2hhc0RlZmVycmVkRmx1c2ggPSB0cnVlOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYm9vbCB3YXNUaHJvdHRsaW5nRmx1c2hlcyA9IG1faXNUaHJvdHRsaW5nTGF5
ZXJGbHVzaGVzOworICAgIG1faXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzID0gbV93ZWJQYWdlLm1h
aW5GcmFtZVZpZXcoKSAmJiBtX3dlYlBhZ2UubWFpbkZyYW1lVmlldygpLT5zaG91bGRUaHJvdHRs
ZUxheWVyRmx1c2hlcygpOworCisgICAgYm9vbCB0aHJvdHRsZUZsdXNoZXMgPSBtX2lzVGhyb3R0
bGluZ0xheWVyRmx1c2hlcyAmJiAhbV9pc0xheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlE
aXNhYmxlZEZvckludGVyYWN0aW9uOworICAgIG1faXNMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBv
cmFyaWx5RGlzYWJsZWRGb3JJbnRlcmFjdGlvbiA9IGZhbHNlOworCisgICAgaWYgKG1fbGF5ZXJG
bHVzaFRpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgYm9vbCBpc0Rpc2FibGluZ1Rocm90dGxp
bmcgPSB3YXNUaHJvdHRsaW5nRmx1c2hlcyAmJiAhdGhyb3R0bGVGbHVzaGVzOworICAgICAgICBp
ZiAoIWlzRGlzYWJsaW5nVGhyb3R0bGluZykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBzdGF0aWMgY29uc3QgYXV0byBpbml0aWFsRmx1c2hEZWxheSA9IDUwMF9tczsKKyAgICBz
dGF0aWMgY29uc3QgYXV0byBmbHVzaERlbGF5ID0gMTUwMF9tczsKKyAgICBhdXRvIHRocm90dGxl
RGVsYXkgPSB0aHJvdHRsZUZsdXNoZXMgPyAod2FzVGhyb3R0bGluZ0ZsdXNoZXMgPyBmbHVzaERl
bGF5IDogaW5pdGlhbEZsdXNoRGVsYXkpIDogMF9tczsKKworICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnN0YXJ0T25lU2hvdCh0aHJvdHRsZURlbGF5KTsKK30KKwordm9pZCBSZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYTo6bGF5ZXJGbHVzaFRocm90dGxpbmdTdGF0ZUNoYW5nZWQoKQoreworICAgIGlm
ICghbV9pc1Rocm90dGxpbmdMYXllckZsdXNoZXMgfHwgbV93ZWJQYWdlLm1haW5GcmFtZVZpZXco
KS0+c2hvdWxkVGhyb3R0bGVMYXllckZsdXNoZXMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghbV9sYXllckZsdXNoVGltZXIuaXNBY3RpdmUoKSkKICAgICAgICAgcmV0dXJuOworICAgIG1f
bGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKIAotICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0YXJ0T25l
U2hvdCgwKTsKKyAgICBzY2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaCgpOworfQorCit2b2lk
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpkaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdU
ZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCkKK3sKKyAgICBtX2lzTGF5ZXJGbHVzaFRocm90dGxp
bmdUZW1wb3JhcmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb24gPSB0cnVlOwogfQogCiB2b2lkIFJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpsYXllckZsdXNoVGltZXJGaXJlZChXZWJDb3JlOjpU
aW1lcjxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYT4qKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233997</attachid>
            <date>2014-06-27 10:49:25 -0700</date>
            <delta_ts>2014-06-27 14:25:32 -0700</delta_ts>
            <desc>non-Cocoa build fix</desc>
            <filename>remote-layer-throttle-3.patch</filename>
            <type>text/plain</type>
            <size>15366</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDUzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE0LTA2LTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGbHVzaCB0aHJvdHRsaW5nIHdp
dGggcmVtb3RlIGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM0Mzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBXaXRoIHJlbW90ZSBsYXllciB0cmVlcyB0aGUgZmx1c2ggc2NoZWR1
bGluZyBsaXZlcyBpbiBXZWJLaXQyIGxheWVyLiBUaGUgdGhyb3R0bGluZyBjb2RlCisgICAgICAg
IG5lZWRzIHRvIGxpdmUgdGhlcmUgYXMgd2VsbC4KKyAgICAgICAgCisgICAgICAgIEFkZCB0aGUg
cmVxdWlyZWQgY2FsbGJhY2tzIGFuZCBkaXNhYmxlIHRoZSBleGlzdGluZyB0aHJvdHRsaW5nIGNv
ZGUgaW4gUmVuZGVyTGF5ZXJDb21wb3NpdG9yCisgICAgICAgIHdoZW4gcmVtb3RlIGxheWVycyBh
cmUgaW4gdXNlLiBMYXRlciB3ZSBjYW4gZ2V0IHJpZCBvZiB0aGUgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yIHRocm90dGxpbmcgY29kZS4KKworICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAg
ICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6
OnVzZXNSZW1vdGVMYXllclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50Ojps
YXllckZsdXNoVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDaHJv
bWVDbGllbnQ6OmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJh
Y3Rpb24pOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lVmlldzo6ZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRl
cmFjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNob3VsZFRocm90dGxlTGF5
ZXJGbHVzaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6dXBkYXRlTGF5ZXJGbHVz
aFRocm90dGxpbmdJbkFsbEZyYW1lcyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6c2V0TGF5ZXJGbHVzaFRocm90
dGxpbmdFbmFibGVkKToKKwogMjAxNC0wNi0yNyAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFNldCBjbGlwcmVjdCByYWRpdXMgdW5jb25kaXRpb25hbGx5IGluIFJl
bmRlckxheWVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3MDUzMikKKysr
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMDA5LDYg
KzIwMDksNyBAQCBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzIwaXNTb2Z0d2FyZVJlbmRlCiBfX1pO
SzdXZWJDb3JlOUZyYW1lVmlldzIxbWF4aW11bVNjcm9sbFBvc2l0aW9uRXYKIF9fWk5LN1dlYkNv
cmU5RnJhbWVWaWV3MjFtaW5pbXVtU2Nyb2xsUG9zaXRpb25FdgogX19aTks3V2ViQ29yZTlGcmFt
ZVZpZXcyM2RvY3VtZW50QmFja2dyb3VuZENvbG9yRXYKK19fWk5LN1dlYkNvcmU5RnJhbWVWaWV3
MjZzaG91bGRUaHJvdHRsZUxheWVyRmx1c2hlc0V2CiBfX1pOSzdXZWJDb3JlOUZyYW1lVmlldzI3
d2luZG93Q2xpcFJlY3RGb3JGcmFtZU93bmVyRVBLTlNfMjFIVE1MRnJhbWVPd25lckVsZW1lbnRF
YgogX19aTks3V2ViQ29yZTlGcmFtZVZpZXcyOGlzRW5jbG9zZWRJbkNvbXBvc2l0aW5nTGF5ZXJF
dgogX19aTks3V2ViQ29yZTlJbmxpbmVCb3gxMGxpbmVIZWlnaHRFdgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCShyZXZpc2lvbiAxNzA1MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDkgQEAgcHVi
bGljOgogICAgIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiBsYXllciB0cmVlIHVwZGF0ZXMgYXJl
IGRpc2FibGVkLgogICAgIHZpcnR1YWwgYm9vbCBsYXllclRyZWVTdGF0ZUlzRnJvemVuKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdXNlc1JlbW90ZUxheWVyVHJl
ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCB2b2lkIGxheWVyRmx1c2hU
aHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpc2FibGVMYXll
ckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24oKSB7IH0KIAogICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxTY3JvbGxpbmdDb29yZGluYXRvcj4gY3JlYXRlU2Nyb2xsaW5nQ29v
cmRpbmF0b3IoUGFnZSopIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUzLDE2ICsyMjUzLDMxIEBA
IHZvaWQgRnJhbWVWaWV3OjphZGRlZE9yUmVtb3ZlZFNjcm9sbGJhcigKIAogdm9pZCBGcmFtZVZp
ZXc6OmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24o
KQogeworICAgIGlmIChmcmFtZSgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkudXNlc1JlbW90
ZUxheWVyVHJlZSgpKSB7CisgICAgICAgIGZyYW1lKCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQo
KS5kaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSByZW5k
ZXJWaWV3KCkpCiAgICAgICAgIHZpZXctPmNvbXBvc2l0b3IoKS5kaXNhYmxlTGF5ZXJGbHVzaFRo
cm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCk7CiB9CiAKK2Jvb2wgRnJhbWVWaWV3
OjpzaG91bGRUaHJvdHRsZUxheWVyRmx1c2hlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZyYW1l
KCkucGFnZSgpLT5wcm9ncmVzcygpLmlzTWFpbkxvYWRQcm9ncmVzc2luZygpOworfQorCiB2b2lk
IEZyYW1lVmlldzo6dXBkYXRlTGF5ZXJGbHVzaFRocm90dGxpbmdJbkFsbEZyYW1lcygpCiB7Ci0g
ICAgYm9vbCBpc01haW5Mb2FkUHJvZ3Jlc3NpbmcgPSBmcmFtZSgpLnBhZ2UoKS0+cHJvZ3Jlc3Mo
KS5pc01haW5Mb2FkUHJvZ3Jlc3NpbmcoKTsKKyAgICAvLyBGb3IgcmVtb3RlIGxheWVycyB0aHJv
dHRsaW5nIGlzIGRvbmUgb24gV2ViS2l0MiBsZXZlbC4KKyAgICBpZiAoZnJhbWUoKS5wYWdlKCkt
PmNocm9tZSgpLmNsaWVudCgpLnVzZXNSZW1vdGVMYXllclRyZWUoKSkgeworICAgICAgICBmcmFt
ZSgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkubGF5ZXJGbHVzaFRocm90dGxpbmdTdGF0ZUNo
YW5nZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGJvb2wgc2hvdWxkVGhyb3R0
bGUgPSBzaG91bGRUaHJvdHRsZUxheWVyRmx1c2hlcygpOwogICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gbV9mcmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQobV9mcmFtZS5nZXQoKSkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcg
PSBmcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgICAgICByZW5kZXJWaWV3LT5jb21w
b3NpdG9yKCkuc2V0TGF5ZXJGbHVzaFRocm90dGxpbmdFbmFibGVkKGlzTWFpbkxvYWRQcm9ncmVz
c2luZyk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCkuc2V0TGF5ZXJGbHVz
aFRocm90dGxpbmdFbmFibGVkKHNob3VsZFRocm90dGxlKTsKICAgICB9CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw3IEBAIHB1Ymxp
YzoKICAgICAKICAgICBib29sIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSBj
b25zdDsKIAorICAgIGJvb2wgc2hvdWxkVGhyb3R0bGVMYXllckZsdXNoZXMoKSBjb25zdDsKICAg
ICB2b2lkIGRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rp
b24oKTsKICAgICB2b2lkIHVwZGF0ZUxheWVyRmx1c2hUaHJvdHRsaW5nSW5BbGxGcmFtZXMoKTsK
ICAgICB2b2lkIGFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNp
b24gMTcwNTMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJNYWlu
RnJhbWUuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNs
dWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJGdWxsU2Ny
ZWVuLmgiCkBAIC0yODQsNyArMjgzLDcgQEAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpSZW5kZXJM
YXllckNvbXBvcwogICAgICwgbV9sYXllcnNXaXRoVGlsZWRCYWNraW5nQ291bnQoMCkKICAgICAs
IG1fcm9vdExheWVyQXR0YWNobWVudChSb290TGF5ZXJVbmF0dGFjaGVkKQogICAgICwgbV9sYXll
ckZsdXNoVGltZXIodGhpcywgJlJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJGbHVzaFRpbWVy
RmlyZWQpCi0gICAgLCBtX2xheWVyRmx1c2hUaHJvdHRsaW5nRW5hYmxlZChwYWdlKCkgJiYgcGFn
ZSgpLT5wcm9ncmVzcygpLmlzTWFpbkxvYWRQcm9ncmVzc2luZygpKQorICAgICwgbV9sYXllckZs
dXNoVGhyb3R0bGluZ0VuYWJsZWQocGFnZSgpICYmICFwYWdlKCktPmNocm9tZSgpLmNsaWVudCgp
LnVzZXNSZW1vdGVMYXllclRyZWUoKSAmJiBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuc2hvdWxk
VGhyb3R0bGVMYXllckZsdXNoZXMoKSkKICAgICAsIG1fbGF5ZXJGbHVzaFRocm90dGxpbmdUZW1w
b3JhcmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb24oZmFsc2UpCiAgICAgLCBtX2hhc1BlbmRpbmdM
YXllckZsdXNoKGZhbHNlKQogICAgICwgbV9wYWludFJlbGF0ZWRNaWxlc3RvbmVzVGltZXIodGhp
cywgJlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cGFpbnRSZWxhdGVkTWlsZXN0b25lc1RpbWVyRmly
ZWQpCkBAIC0zOTMxLDYgKzM5MzAsOSBAQCBQYWdlKiBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBh
Z2UoKSBjb25zCiAKIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpzZXRMYXllckZsdXNoVGhy
b3R0bGluZ0VuYWJsZWQoYm9vbCBlbmFibGVkKQogeworICAgIEFTU0VSVChwYWdlKCkpOworICAg
IEFTU0VSVCghcGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS51c2VzUmVtb3RlTGF5ZXJUcmVlKCkp
OworCiAgICAgbV9sYXllckZsdXNoVGhyb3R0bGluZ0VuYWJsZWQgPSBlbmFibGVkOwogICAgIGlm
IChtX2xheWVyRmx1c2hUaHJvdHRsaW5nRW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTQtMDYtMjcgIEFudHRpIEtvaXZpc3Rv
ICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIEZsdXNoIHRocm90dGxpbmcgd2l0aCByZW1v
dGUgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzQzOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojp1c2VzUmVtb3RlTGF5ZXJUcmVlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpsYXllckZsdXNoVGhyb3R0bGluZ1N0YXRlQ2hh
bmdlZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6ZGlzYWJsZUxheWVyRmx1
c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbik6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW06CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdp
bmdBcmVhOjpsYXllckZsdXNoVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJL
aXQ6OkRyYXdpbmdBcmVhOjpkaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseUZv
ckludGVyYWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWE6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKToKKyAgICAgICAgCisgICAgICAgICAgICBEZWxheSBsYXllciBmbHVzaGVzIGR1
cmluZyBwYWdlIGxvYWRpbmcuIFRoZSBmaXJzdCB2aXN1YWwgZmx1c2ggdXNlcyBzaG9ydGVyIGRl
bGF5LgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpsYXll
ckZsdXNoVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgIAorICAgICAgICAgICAgRmx1
c2ggaW1tZWRpYXRlbHkgd2hlbiB3ZSBhcmUgbm8gbG9uZ2VyIHRocm90dGxpbmcuCisKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmRpc2FibGVMYXllckZsdXNo
VGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24pOgorICAgICAgICAKKyAgICAgICAg
ICAgIElmIHVzZSBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0aGUgbmV4dCBmbHVzaCBpbiB1bnRo
cm90dGxlZCBldmVuIGlmIGxvYWRpbmcgaXMgaW4gcHJvZ3Jlc3MuCisKIDIwMTQtMDYtMjYgIERh
bmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdW1dLMl0gRGlz
dGFudCBmb2N1c2FibGUgZWxlbWVudCBtYXkgbm90IGJlIHNjcm9sbGVkIGludG8gdmlldyB3aGVu
IGZvY3VzZWQgdXNpbmcga2V5Ym9hcmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHJl
dmlzaW9uIDE3MDUzMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQzLDYgKzg0MywyNiBA
QCB2b2lkIFdlYkNocm9tZUNsaWVudDo6c2NoZWR1bGVDb21wb3NpdGluCiAgICAgICAgIG1fcGFn
ZS0+ZHJhd2luZ0FyZWEoKS0+c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKIH0KIAor
Ym9vbCBXZWJDaHJvbWVDbGllbnQ6OnVzZXNSZW1vdGVMYXllclRyZWUoKSBjb25zdAoreworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVybiBtX3BhZ2UtPmRyYXdpbmdBcmVhKCkgJiYgbV9w
YWdlLT5kcmF3aW5nQXJlYSgpLT50eXBlKCkgPT0gRHJhd2luZ0FyZWFUeXBlUmVtb3RlTGF5ZXJU
cmVlOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBXZWJDaHJv
bWVDbGllbnQ6OmxheWVyRmx1c2hUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
bV9wYWdlLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICBtX3BhZ2UtPmRyYXdpbmdBcmVhKCktPmxh
eWVyRmx1c2hUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjpkaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9u
KCkKK3sKKyAgICBpZiAobV9wYWdlLT5kcmF3aW5nQXJlYSgpKQorICAgICAgICBtX3BhZ2UtPmRy
YXdpbmdBcmVhKCktPmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50
ZXJhY3Rpb24oKTsKK30KIAogYm9vbCBXZWJDaHJvbWVDbGllbnQ6OmxheWVyVHJlZVN0YXRlSXNG
cm96ZW4oKSBjb25zdAogewpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCShyZXZpc2lvbiAxNzA1
MzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNiArMjEwLDkgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoV2ViQ29yZTo6RnJhbWUqLCBX
ZWJDb3JlOjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNldE5l
ZWRzT25lU2hvdERyYXdpbmdTeW5jaHJvbml6YXRpb24oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIGJvb2wgdXNlc1JlbW90ZUxheWVyVHJlZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBsYXllckZsdXNoVGhyb3R0bGluZ1N0YXRlQ2hhbmdlZCgpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBkaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseUZvcklu
dGVyYWN0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
KiBkb2N1bWVudE92ZXJsYXlMYXllckZvckZyYW1lKFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7
CiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQpJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21l
Q2xpZW50SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbQkocmV2aXNpb24gMTcwNTMyKQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21l
Q2xpZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTIgQEAKIAogI2lmIFBM
QVRGT1JNKElPUykKIAotI2ltcG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2ltcG9y
dCAiRHJhd2luZ0FyZWEuaCIKICNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2lt
cG9ydCAiV2ViRnJhbWUuaCIKICNpbXBvcnQgIldlYlBhZ2UuaCIKICNpbXBvcnQgIldlYlBhZ2VQ
cm94eU1lc3NhZ2VzLmgiCisjaW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvRHJhd2luZ0FyZWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
OSw2ICsxMTksOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFya0xheWVyc1ZvbGF0
aWxlSW1tZWRpYXRlbHlJZlBvc3NpYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVh
bCB2b2lkIGxheWVyRmx1c2hUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCkgeyB9CisgICAgdmlydHVh
bCB2b2lkIGRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rp
b24oKSB7IH0KKwogcHJvdGVjdGVkOgogICAgIERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZSwg
V2ViUGFnZSYpOwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCShy
ZXZpc2lvbiAxNzA1MzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5
LDkgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCB2aWV3U3RhdGVEaWRDaGFuZ2UoV2Vi
Q29yZTo6Vmlld1N0YXRlOjpGbGFncyBjaGFuZ2VkLCBib29sIHdhbnRzRGlkVXBkYXRlVmlld1N0
YXRlKSBvdmVycmlkZTsKIAorICAgIHZpcnR1YWwgdm9pZCBsYXllckZsdXNoVGhyb3R0bGluZ1N0
YXRlQ2hhbmdlZCgpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlTGF5ZXJGbHVz
aFRocm90dGxpbmdUZW1wb3JhcmlseUZvckludGVyYWN0aW9uKCkgb3ZlcnJpZGU7CisKICAgICAv
LyBHcmFwaGljc0xheWVyQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0
YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciosIGRvdWJsZSB0aW1lKSBvdmVycmlk
ZSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgb3ZlcnJpZGUgeyB9CkBAIC0xNDMsNiArMTQ2LDggQEAgcHJpdmF0
ZToKICAgICBXZWJDb3JlOjpUaW1lcjxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYT4gbV9sYXll
ckZsdXNoVGltZXI7CiAgICAgYm9vbCBtX2lzRmx1c2hpbmdTdXNwZW5kZWQ7CiAgICAgYm9vbCBt
X2hhc0RlZmVycmVkRmx1c2g7CisgICAgYm9vbCBtX2lzVGhyb3R0bGluZ0xheWVyRmx1c2hlczsK
KyAgICBib29sIG1faXNMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlzYWJsZWRGb3JJ
bnRlcmFjdGlvbjsKIAogICAgIGJvb2wgbV93YWl0aW5nRm9yQmFja2luZ1N0b3JlU3dhcDsKICAg
ICBib29sIG1faGFkRmx1c2hEZWZlcnJlZFdoaWxlV2FpdGluZ0ZvckJhY2tpbmdTdG9yZVN3YXA7
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0JKHJldmlzaW9uIDE3
MDUzMikKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWEubW0JKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDggQEAgUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OlJlbW90ZUxheWVyVAogICAgICwgbV9sYXllckZsdXNo
VGltZXIodGhpcywgJlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpsYXllckZsdXNoVGltZXJG
aXJlZCkKICAgICAsIG1faXNGbHVzaGluZ1N1c3BlbmRlZChmYWxzZSkKICAgICAsIG1faGFzRGVm
ZXJyZWRGbHVzaChmYWxzZSkKKyAgICAsIG1faXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzKGZhbHNl
KQorICAgICwgbV9pc0xheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlEaXNhYmxlZEZvcklu
dGVyYWN0aW9uKGZhbHNlKQogICAgICwgbV93YWl0aW5nRm9yQmFja2luZ1N0b3JlU3dhcChmYWxz
ZSkKICAgICAsIG1faGFkRmx1c2hEZWZlcnJlZFdoaWxlV2FpdGluZ0ZvckJhY2tpbmdTdG9yZVN3
YXAoZmFsc2UpCiAgICAgLCBtX2Rpc3BsYXlSZWZyZXNoTW9uaXRvcnNUb05vdGlmeShudWxscHRy
KQpAQCAtMjM5LDEwICsyNDEsNDUgQEAgVGlsZWRCYWNraW5nKiBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYQogCiB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpzY2hlZHVsZUNvbXBv
c2l0aW5nTGF5ZXJGbHVzaCgpCiB7Ci0gICAgaWYgKG1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZl
KCkpCisgICAgaWYgKG1faXNGbHVzaGluZ1N1c3BlbmRlZCkgeworICAgICAgICBtX2lzTGF5ZXJG
bHVzaFRocm90dGxpbmdUZW1wb3JhcmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb24gPSBmYWxzZTsK
KyAgICAgICAgbV9oYXNEZWZlcnJlZEZsdXNoID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGJvb2wgd2FzVGhyb3R0bGluZ0ZsdXNoZXMgPSBtX2lzVGhyb3R0bGluZ0xheWVy
Rmx1c2hlczsKKyAgICBtX2lzVGhyb3R0bGluZ0xheWVyRmx1c2hlcyA9IG1fd2ViUGFnZS5tYWlu
RnJhbWVWaWV3KCkgJiYgbV93ZWJQYWdlLm1haW5GcmFtZVZpZXcoKS0+c2hvdWxkVGhyb3R0bGVM
YXllckZsdXNoZXMoKTsKKworICAgIGJvb2wgdGhyb3R0bGVGbHVzaGVzID0gbV9pc1Rocm90dGxp
bmdMYXllckZsdXNoZXMgJiYgIW1faXNMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlz
YWJsZWRGb3JJbnRlcmFjdGlvbjsKKyAgICBtX2lzTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3Jh
cmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb24gPSBmYWxzZTsKKworICAgIGlmIChtX2xheWVyRmx1
c2hUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGJvb2wgaXNEaXNhYmxpbmdUaHJvdHRsaW5n
ID0gd2FzVGhyb3R0bGluZ0ZsdXNoZXMgJiYgIXRocm90dGxlRmx1c2hlczsKKyAgICAgICAgaWYg
KCFpc0Rpc2FibGluZ1Rocm90dGxpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgc3RhdGljIGNvbnN0IGF1dG8gaW5pdGlhbEZsdXNoRGVsYXkgPSA1MDBfbXM7CisgICAgc3Rh
dGljIGNvbnN0IGF1dG8gZmx1c2hEZWxheSA9IDE1MDBfbXM7CisgICAgYXV0byB0aHJvdHRsZURl
bGF5ID0gdGhyb3R0bGVGbHVzaGVzID8gKHdhc1Rocm90dGxpbmdGbHVzaGVzID8gZmx1c2hEZWxh
eSA6IGluaXRpYWxGbHVzaERlbGF5KSA6IDBfbXM7CisKKyAgICBtX2xheWVyRmx1c2hUaW1lci5z
dGFydE9uZVNob3QodGhyb3R0bGVEZWxheSk7Cit9CisKK3ZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWE6OmxheWVyRmx1c2hUaHJvdHRsaW5nU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBpZiAo
IW1faXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzIHx8IG1fd2ViUGFnZS5tYWluRnJhbWVWaWV3KCkt
PnNob3VsZFRocm90dGxlTGF5ZXJGbHVzaGVzKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKKyAgICBtX2xh
eWVyRmx1c2hUaW1lci5zdG9wKCk7CiAKLSAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNo
b3QoMCk7CisgICAgc2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKTsKK30KKwordm9pZCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6ZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVt
cG9yYXJpbHlGb3JJbnRlcmFjdGlvbigpCit7CisgICAgbV9pc0xheWVyRmx1c2hUaHJvdHRsaW5n
VGVtcG9yYXJpbHlEaXNhYmxlZEZvckludGVyYWN0aW9uID0gdHJ1ZTsKIH0KIAogdm9pZCBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6VGlt
ZXI8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+KikK
</data>
<flag name="review"
          id="258529"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234017</attachid>
            <date>2014-06-27 14:25:32 -0700</date>
            <delta_ts>2014-06-27 14:40:08 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>remote-layer-throttle-4.patch</filename>
            <type>text/plain</type>
            <size>23006</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDU0NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE0LTA2LTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBGbHVzaCB0aHJvdHRsaW5nIHdp
dGggcmVtb3RlIGxheWVycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM0Mzk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2l0aCByZW1vdGUgbGF5ZXIgdHJlZXMgdGhlIGZsdXNoIHNjaGVkdWxpbmcgbGl2
ZXMgaW4gV2ViS2l0MiBsYXllci4gVGhlIHRocm90dGxpbmcgY29kZQorICAgICAgICBuZWVkcyB0
byBsaXZlIHRoZXJlIGFzIHdlbGwuCisgICAgICAgIAorICAgICAgICBBZGQgdGhlIHJlcXVpcmVk
IGNhbGxiYWNrcyBhbmQgZGlzYWJsZSB0aGUgZXhpc3RpbmcgdGhyb3R0bGluZyBjb2RlIGluIFJl
bmRlckxheWVyQ29tcG9zaXRvcgorICAgICAgICB3aGVuIHJlbW90ZSBsYXllcnMgYXJlIGluIHVz
ZS4gTGF0ZXIgd2UgY2FuIGdldCByaWQgb2YgdGhlIFJlbmRlckxheWVyQ29tcG9zaXRvciB0aHJv
dHRsaW5nIGNvZGUuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lTG9hZGVyOjpsb2FkUHJvZ3Jlc3NpbmdTdGF0dXNDaGFuZ2VkKToKKyAgICAgICAgKiBw
YWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjphZGp1
c3RMYXllckZsdXNoVGhyb3R0bGluZyk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpkaXNhYmxlTGF5ZXJGbHVzaFRocm90dGxpbmdU
ZW1wb3JhcmlseUZvckludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
bG9hZFByb2dyZXNzaW5nU3RhdHVzQ2hhbmdlZCk6CisgICAgICAgIAorICAgICAgICAgICAgRmFj
dG9yIHRoZSBwcm9ncmVzcyBzdGF0dXMgY2hhbmdlIGFjdGl2aXRpZXMgdG8gYSBmdW5jdGlvbi4K
KworICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3Ojp1cGRhdGVMYXllckZsdXNoVGhyb3R0bGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNldEV4cG9zZWRSZWN0KToKKyAgICAg
ICAgCisgICAgICAgICAgICBNb3ZlIHRoZSBjYWxsIHRvIGFkanVzdFRpbGVkQmFja2luZ0NvdmVy
YWdlIGZyb20gV2ViS2l0IHRvIGhlcmUuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
dXBkYXRlTGF5ZXJGbHVzaFRocm90dGxpbmdJbkFsbEZyYW1lcyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKiBwYWdlL0xheWVyRmx1c2hUaHJvdHRsZVN0
YXRlLmg6IEFkZGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpSZW5kZXJMYXll
ckNvbXBvc2l0b3IpOgorCiAyMDE0LTA2LTI3ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNv
bT4KIAogICAgICAgICBDdXN0b20gc2Nyb2xsYmFycyBzaG91bGQgbm90IGNyZWF0ZSBTY3JvbGxi
YXJQYWludGVycyBvbiBNYWMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3MDUzMikKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NjE1MCw2ICs2MTUwLDcgQEAKIAkJRTQ3RTI3NjgxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVT
aGVldENvbGxlY3Rpb24uY3BwICovOyB9OwogCQlFNDg5NDRBMjE4MEI1N0Q4MDBGMTY1RDggLyog
U2ltcGxlTGluZUxheW91dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5j
cHAgKi87IH07CiAJCUU0ODk0NEEzMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDg5NDRB
MTE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUU0OTE2RkY3MTk1REY2QTAwMDVBQjM0
OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5MTZGRjYxOTVERjZBMDAwNUFCMzQ5IC8qIExheWVyRmx1
c2hUaHJvdHRsZVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJRTQ5NDZFQUUxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDk0NkVB
QzE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1wb3J0LmNwcCAqLzsgfTsKIAkJRTQ5NDZF
QUYxNTZFNjRERDAwRDMyOTdGIC8qIFN0eWxlUnVsZUltcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ5NDZFQUQxNTZFNjRERDAwRDMyOTdGIC8q
IFN0eWxlUnVsZUltcG9ydC5oICovOyB9OwogCQlFNDlCRDlGQTEzMUZEMkVEMDAzQzU2RjAgLyog
Q1NTVmFsdWVQb29sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNDlCRDlGOTEzMUZEMkVEMDAzQzU2RjAgLyogQ1NTVmFsdWVQb29sLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEzNjQzLDYgKzEzNjQ0
LDcgQEAKIAkJRTQ3RTI3NjcxNjAzNkVEQzAwRUUyQUZCIC8qIERvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUU0ODk0NEEwMTgwQjU3RDgwMEYxNjVEOCAvKiBTaW1wbGVMaW5lTGF5b3V0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDg5NDRBMTE4MEI1N0Q4MDBGMTY1RDggLyogU2lt
cGxlTGluZUxheW91dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW1wbGVM
aW5lTGF5b3V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0OTE2RkY2MTk1REY2
QTAwMDVBQjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFNDk0NkVBQzE1NkU2NEREMDBEMzI5N0YgLyogU3R5bGVSdWxlSW1w
b3J0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN0eWxlUnVsZUlt
cG9ydC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0OTQ2RUFEMTU2RTY0REQw
MEQzMjk3RiAvKiBTdHlsZVJ1bGVJbXBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU3R5bGVSdWxlSW1wb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
OUJEOUY5MTMxRkQyRUQwMDNDNTZGMCAvKiBDU1NWYWx1ZVBvb2wuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ1NTVmFsdWVQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjU2NCw2ICsxNjU2Niw3IEBACiAJCQkJQkM5NEQxNTAwQzI3NUM4QjAwNkJDNjE3
IC8qIEhpc3RvcnkuY3BwICovLAogCQkJCUJDOTREMTUxMEMyNzVDOEIwMDZCQzYxNyAvKiBIaXN0
b3J5LmggKi8sCiAJCQkJQkM5NEQxNTIwQzI3NUM4QjAwNkJDNjE3IC8qIEhpc3RvcnkuaWRsICov
LAorCQkJCUU0OTE2RkY2MTk1REY2QTAwMDVBQjM0OSAvKiBMYXllckZsdXNoVGhyb3R0bGVTdGF0
ZS5oICovLAogCQkJCTkzMUQ3MkY1MTVGRTY5NTMwMEM0QzA3RSAvKiBMYXlvdXRNaWxlc3RvbmVz
LmggKi8sCiAJCQkJQkNFMUM0MUEwRDk4Mjk4MDAwM0IwMkYyIC8qIExvY2F0aW9uLmNwcCAqLywK
IAkJCQlCQ0UxQzQxOTBEOTgyOTgwMDAzQjAyRjIgLyogTG9jYXRpb24uaCAqLywKQEAgLTI0MzUw
LDYgKzI0MzUzLDcgQEAKIAkJCQk5NzdCMzcyNDEyMjg3MjE3MDBCODFGRjggLyogSFRNTEVsZW1l
bnRTdGFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU2MkRCNjAxN0QzQ0Q2MzAwMTBBRjk2IC8q
IEhUTUxFbGVtZW50VHlwZUhlbHBlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4NzFENDVDMEEx
MjdDQkMwMEIxMkE2OCAvKiBIVE1MRW1iZWRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQlF
NDkxNkZGNzE5NURGNkEwMDA1QUIzNDkgLyogTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk3N0IzODZBMTIyODgzRTkwMEI4MUZGOCAvKiBIVE1MRW50aXR5UGFy
c2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2QzEyMjg4M0U5MDBCODFGRjggLyogSFRN
TEVudGl0eVNlYXJjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NkQxMjI4ODNFOTAwQjgx
RkY4IC8qIEhUTUxFbnRpdHlUYWJsZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDE3MDUzMikKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0MDgsMTIgKzM0
MDgsOCBAQCBOZXR3b3JraW5nQ29udGV4dCogRnJhbWVMb2FkZXI6Om5ldHdvcmtpCiAKIHZvaWQg
RnJhbWVMb2FkZXI6OmxvYWRQcm9ncmVzc2luZ1N0YXR1c0NoYW5nZWQoKQogewotICAgIEZyYW1l
VmlldyogdmlldyA9IG1fZnJhbWUubWFpbkZyYW1lKCkudmlldygpOwotICAgIGlmICghdmlldykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdmlldy0+dXBkYXRlTGF5ZXJGbHVzaFRocm90dGxpbmdJ
bkFsbEZyYW1lcygpOwotICAgIHZpZXctPmFkanVzdFRpbGVkQmFja2luZ0NvdmVyYWdlKCk7Cisg
ICAgaWYgKGF1dG8qIHZpZXcgPSBtX2ZyYW1lLm1haW5GcmFtZSgpLnZpZXcoKSkKKyAgICAgICAg
dmlldy0+bG9hZFByb2dyZXNzaW5nU3RhdHVzQ2hhbmdlZCgpOwogfQogCiB2b2lkIEZyYW1lTG9h
ZGVyOjpmb3JjZVBhZ2VUcmFuc2l0aW9uSWZOZWVkZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oCShyZXZpc2lvbiAxNzA1MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZUNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJI
b3N0V2luZG93LmgiCisjaW5jbHVkZSAiTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUuaCIKICNpbmNs
dWRlICJQb3B1cE1lbnUuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRl
ICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgpAQCAtMzI3LDYgKzMyOCw4IEBAIHB1YmxpYzoKICAg
ICAvLyBSZXR1cm5zIHRydWUgaWYgbGF5ZXIgdHJlZSB1cGRhdGVzIGFyZSBkaXNhYmxlZC4KICAg
ICB2aXJ0dWFsIGJvb2wgbGF5ZXJUcmVlU3RhdGVJc0Zyb3plbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcoTGF5
ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSB7IHJldHVybiBmYWxzZTsgfQorCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBjcmVhdGVTY3JvbGxpbmdDb29y
ZGluYXRvcihQYWdlKikgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogCiAjaWYgUExBVEZPUk0o
V0lOKSAmJiBVU0UoQVZGT1VOREFUSU9OKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjUzLDE2ICsyMjUzLDM2IEBAIHZvaWQgRnJhbWVWaWV3Ojph
ZGRlZE9yUmVtb3ZlZFNjcm9sbGJhcigKIAogdm9pZCBGcmFtZVZpZXc6OmRpc2FibGVMYXllckZs
dXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24oKQogeworICAgIGJvb2wgbWFp
bkxvYWRQcm9ncmVzc2luZyA9IGZyYW1lKCkucGFnZSgpLT5wcm9ncmVzcygpLmlzTWFpbkxvYWRQ
cm9ncmVzc2luZygpOworCisgICAgTGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzIGZsYWdz
ID0gTGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OlVzZXJJc0ludGVyYWN0aW5nIHwgKG1haW5Mb2Fk
UHJvZ3Jlc3NpbmcgPyBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6TWFpbkxvYWRQcm9ncmVzc2lu
ZyA6IDApOworICAgIGlmIChmcmFtZSgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xpZW50KCkuYWRqdXN0
TGF5ZXJGbHVzaFRocm90dGxpbmcoZmxhZ3MpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAo
UmVuZGVyVmlldyogdmlldyA9IHJlbmRlclZpZXcoKSkKICAgICAgICAgdmlldy0+Y29tcG9zaXRv
cigpLmRpc2FibGVMYXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5Rm9ySW50ZXJhY3Rpb24o
KTsKIH0KIAotdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyRmx1c2hUaHJvdHRsaW5nSW5BbGxG
cmFtZXMoKQordm9pZCBGcmFtZVZpZXc6OmxvYWRQcm9ncmVzc2luZ1N0YXR1c0NoYW5nZWQoKQor
eworICAgIHVwZGF0ZUxheWVyRmx1c2hUaHJvdHRsaW5nKCk7CisgICAgYWRqdXN0VGlsZWRCYWNr
aW5nQ292ZXJhZ2UoKTsKK30KKwordm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheWVyRmx1c2hUaHJv
dHRsaW5nKCkKIHsKLSAgICBib29sIGlzTWFpbkxvYWRQcm9ncmVzc2luZyA9IGZyYW1lKCkucGFn
ZSgpLT5wcm9ncmVzcygpLmlzTWFpbkxvYWRQcm9ncmVzc2luZygpOworICAgIEFTU0VSVChmcmFt
ZSgpLmlzTWFpbkZyYW1lKCkpOworCisgICAgYm9vbCBtYWluTG9hZFByb2dyZXNzaW5nID0gZnJh
bWUoKS5wYWdlKCktPnByb2dyZXNzKCkuaXNNYWluTG9hZFByb2dyZXNzaW5nKCk7CisKKyAgICAv
LyBTZWUgaWYgdGhlIGNsaWVudCBpcyBoYW5kbGluZyB0aHJvdHRsaW5nLgorICAgIExheWVyRmx1
c2hUaHJvdHRsZVN0YXRlOjpGbGFncyBmbGFncyA9IG1haW5Mb2FkUHJvZ3Jlc3NpbmcgPyBMYXll
ckZsdXNoVGhyb3R0bGVTdGF0ZTo6TWFpbkxvYWRQcm9ncmVzc2luZyA6IDA7CisgICAgaWYgKGZy
YW1lKCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5hZGp1c3RMYXllckZsdXNoVGhyb3R0bGlu
ZyhmbGFncykpCisgICAgICAgIHJldHVybjsKKwogICAgIGZvciAoRnJhbWUqIGZyYW1lID0gbV9m
cmFtZS5nZXQoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQobV9m
cmFtZS5nZXQoKSkpIHsKICAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFt
ZS0+Y29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgICAgICByZW5kZXJWaWV3LT5jb21wb3NpdG9y
KCkuc2V0TGF5ZXJGbHVzaFRocm90dGxpbmdFbmFibGVkKGlzTWFpbkxvYWRQcm9ncmVzc2luZyk7
CisgICAgICAgICAgICByZW5kZXJWaWV3LT5jb21wb3NpdG9yKCkuc2V0TGF5ZXJGbHVzaFRocm90
dGxpbmdFbmFibGVkKG1haW5Mb2FkUHJvZ3Jlc3NpbmcpOwogICAgIH0KIH0KIApAQCAtNDQyMCw4
ICs0NDQwLDEwIEBAIHZvaWQgRnJhbWVWaWV3OjpzZXRFeHBvc2VkUmVjdChGbG9hdFJlY3QKICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgY2xpcHBpbmcgdG8gdGhlIGV4cG9zZWQgcmVj
dCBmb3Igc3ViZnJhbWVzIGFzIHdlbGwuCiAgICAgaWYgKCFtX2ZyYW1lLT5pc01haW5GcmFtZSgp
KQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nID0g
dGhpcy0+dGlsZWRCYWNraW5nKCkpCisgICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5n
ID0gdGhpcy0+dGlsZWRCYWNraW5nKCkpIHsKKyAgICAgICAgYWRqdXN0VGlsZWRCYWNraW5nQ292
ZXJhZ2UoKTsKICAgICAgICAgdGlsZWRCYWNraW5nLT5zZXRUaWxlZFNjcm9sbGluZ0luZGljYXRv
clBvc2l0aW9uKGV4cG9zZWRSZWN0LmxvY2F0aW9uKCkpOworICAgIH0KIAogICAgIGlmIChhdXRv
KiB2aWV3ID0gcmVuZGVyVmlldygpKQogICAgICAgICB2aWV3LT5jb21wb3NpdG9yKCkuc2NoZWR1
bGVMYXllckZsdXNoKGZhbHNlIC8qIGNhblRocm90dGxlICovKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuaAkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDkgKzI5MCw4IEBAIHB1YmxpYzoKICAgICBi
b29sIGZpeGVkRWxlbWVudHNMYXlvdXRSZWxhdGl2ZVRvRnJhbWUoKSBjb25zdDsKIAogICAgIHZv
aWQgZGlzYWJsZUxheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJpbHlGb3JJbnRlcmFjdGlvbigp
OwotICAgIHZvaWQgdXBkYXRlTGF5ZXJGbHVzaFRocm90dGxpbmdJbkFsbEZyYW1lcygpOwotICAg
IHZvaWQgYWRqdXN0VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsKICAgICBib29sIHNwZWN1bGF0aXZl
VGlsaW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY3VsYXRpdmVUaWxpbmdFbmFibGVk
OyB9CisgICAgdm9pZCBsb2FkUHJvZ3Jlc3NpbmdTdGF0dXNDaGFuZ2VkKCk7CiAKICNpZiBFTkFC
TEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgdm9pZCB1cGRhdGVBbm5vdGF0ZWRSZWdpb25zKCk7
CkBAIC01NDQsNiArNTQzLDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBlcmZvcm1Qb3N0TGF5b3V0
VGFza3MoKTsKICAgICB2b2lkIGF1dG9TaXplSWZFbmFibGVkKCk7CiAKKyAgICB2b2lkIHVwZGF0
ZUxheWVyRmx1c2hUaHJvdHRsaW5nKCk7CisgICAgdm9pZCBhZGp1c3RUaWxlZEJhY2tpbmdDb3Zl
cmFnZSgpOworCiAgICAgdmlydHVhbCB2b2lkIHJlcGFpbnRDb250ZW50UmVjdGFuZ2xlKGNvbnN0
IEludFJlY3QmKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNSZXNpemVkKCkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHZpc2libGVDb250ZW50c1Jlc2l6ZWQoKSBvdmVy
cmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvTGF5ZXJGbHVzaFRocm90dGxlU3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0xheWVyRmx1c2hUaHJvdHRsZVN0
YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0xheWVyRmx1c2hUaHJv
dHRsZVN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgTGF5ZXJGbHVzaFRocm90dGxlU3RhdGVfaAorI2RlZmluZSBMYXllckZsdXNoVGhy
b3R0bGVTdGF0ZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IExheWVyRmx1c2hU
aHJvdHRsZVN0YXRlIHsKKyAgICBlbnVtIHsKKyAgICAgICAgTWFpbkxvYWRQcm9ncmVzc2luZyA9
IDEgPDwgMCwKKyAgICAgICAgVXNlcklzSW50ZXJhY3RpbmcgPSAxIDw8IDEKKyAgICB9OworICAg
IHR5cGVkZWYgdW5zaWduZWQgRmxhZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBMYXllckZsdXNoVGhyb3R0bGVTdGF0ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24g
MTcwNTMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYgQEAKICNpbmNsdWRlICJNYWluRnJh
bWUuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRl
ICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgog
I2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJGdWxsU2NyZWVu
LmgiCkBAIC0yODQsNyArMjgzLDcgQEAgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpSZW5kZXJMYXll
ckNvbXBvcwogICAgICwgbV9sYXllcnNXaXRoVGlsZWRCYWNraW5nQ291bnQoMCkKICAgICAsIG1f
cm9vdExheWVyQXR0YWNobWVudChSb290TGF5ZXJVbmF0dGFjaGVkKQogICAgICwgbV9sYXllckZs
dXNoVGltZXIodGhpcywgJlJlbmRlckxheWVyQ29tcG9zaXRvcjo6bGF5ZXJGbHVzaFRpbWVyRmly
ZWQpCi0gICAgLCBtX2xheWVyRmx1c2hUaHJvdHRsaW5nRW5hYmxlZChwYWdlKCkgJiYgcGFnZSgp
LT5wcm9ncmVzcygpLmlzTWFpbkxvYWRQcm9ncmVzc2luZygpKQorICAgICwgbV9sYXllckZsdXNo
VGhyb3R0bGluZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2xheWVyRmx1c2hUaHJvdHRsaW5nVGVt
cG9yYXJpbHlEaXNhYmxlZEZvckludGVyYWN0aW9uKGZhbHNlKQogICAgICwgbV9oYXNQZW5kaW5n
TGF5ZXJGbHVzaChmYWxzZSkKICAgICAsIG1fcGFpbnRSZWxhdGVkTWlsZXN0b25lc1RpbWVyKHRo
aXMsICZSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhaW50UmVsYXRlZE1pbGVzdG9uZXNUaW1lckZp
cmVkKQpJbmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwNTQ3KQorKysgU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTQtMDYtMjcgIEFu
dHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIEZsdXNoIHRocm90dGxp
bmcgd2l0aCByZW1vdGUgbGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMzQzOTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjphZGp1c3RMYXllckZsdXNo
VGhyb3R0bGluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJD
aHJvbWVDbGllbnRJT1MubW06CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLmg6CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhOjphZGp1c3RMYXllckZsdXNoVGhy
b3R0bGluZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhOjpSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjp1cGRhdGVTY3JvbGxlZEV4cG9zZWRSZWN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OnNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllckZsdXNoKToKKworICAgICAgICAgICAgRGVsYXkgbGF5ZXIgZmx1c2hl
cyBkdXJpbmcgcGFnZSBsb2FkaW5nLgorICAgICAgICAgICAgSWYgdXNlIGludGVyYWN0cyB3aXRo
IHRoZSBwYWdlIHRoZSBuZXh0IGZsdXNoIGluIHVudGhyb3R0bGVkIGV2ZW4gaWYgbG9hZGluZyBp
cyBpbiBwcm9ncmVzcy4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYTo6YWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmcpOgorICAgICAgICAKKyAgICAgICAgICAg
IENvbXB1dGUgdGhlIG5ldyBkZWxheS4gVGhlIGZpcnN0IHZpc3VhbCBmbHVzaCB1c2VzIGEgc2hv
cnRlciBkZWxheS4KKyAgICAgICAgICAgIEZsdXNoIGltbWVkaWF0ZWx5IHdoZW4gd2UgYXJlIG5v
IGxvbmdlciB0aHJvdHRsaW5nLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9U
aWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbToKKyAgICAgICAgKFdlYktpdDo6VGlsZWRD
b3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGF0ZVNjcm9sbGVkRXhwb3NlZFJlY3QpOgorCiAy
MDE0LTA2LTI2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtpT1MgV0syXSBGaXggdG91Y2gtc2Nyb2xsYWJsZSBlbGVtZW50cyB3aXRoIG92ZXJmbG93
OnNjcm9sbCBvbiBqdXN0IG9uZSBheGlzLCBhbmQgUlRMIHNjcm9sbGluZwpJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NDMsNiArODQzLDEwIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzY2hlZHVsZUNvbXBv
c2l0aW4KICAgICAgICAgbV9wYWdlLT5kcmF3aW5nQXJlYSgpLT5zY2hlZHVsZUNvbXBvc2l0aW5n
TGF5ZXJGbHVzaCgpOwogfQogCitib29sIFdlYkNocm9tZUNsaWVudDo6YWRqdXN0TGF5ZXJGbHVz
aFRocm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzIGZsYWdz
KQoreworICAgIHJldHVybiBtX3BhZ2UtPmRyYXdpbmdBcmVhKCkgJiYgbV9wYWdlLT5kcmF3aW5n
QXJlYSgpLT5hZGp1c3RMYXllckZsdXNoVGhyb3R0bGluZyhmbGFncyk7Cit9CiAKIGJvb2wgV2Vi
Q2hyb21lQ2xpZW50OjpsYXllclRyZWVTdGF0ZUlzRnJvemVuKCkgY29uc3QKIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjEwLDYgKzIxMCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RH
cmFwaGljc0xheWVyKFdlYkNvcmU6OkZyYW1lKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25p
emF0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRpbmdM
YXllckZsdXNoKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGFkanVzdExheWVyRmx1c2hU
aHJvdHRsaW5nKFdlYkNvcmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiBkb2N1bWVudE92ZXJsYXlM
YXllckZvckZyYW1lKFdlYkNvcmU6OkZyYW1lJikgb3ZlcnJpZGU7CiAKICNpZiBVU0UoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dl
YkNocm9tZUNsaWVudElPUy5tbQkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTIgQEAKIAogI2lmIFBMQVRGT1JNKElPUykKIAotI2lt
cG9ydCA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRlZC5oPgorI2ltcG9ydCAiRHJhd2luZ0FyZWEuaCIK
ICNpbXBvcnQgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgogI2ltcG9ydCAiV2ViRnJhbWUuaCIK
ICNpbXBvcnQgIldlYlBhZ2UuaCIKICNpbXBvcnQgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisj
aW1wb3J0IDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuaAkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0RyYXdpbmdBcmVhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlICJMYXllclRyZWVDb250ZXh0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFJlY3QuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL0ludFJlY3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0xheWVyRmx1
c2hUaHJvdHRsZVN0YXRlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVNjcmVlbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvVmlld1N0YXRlLmg+CiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KQEAg
LTExOSw2ICsxMjAsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgbWFya0xheWVyc1Zv
bGF0aWxlSW1tZWRpYXRlbHlJZlBvc3NpYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQogCisgICAgdmly
dHVhbCBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5nKFdlYkNvcmU6OkxheWVyRmx1c2hU
aHJvdHRsZVN0YXRlOjpGbGFncykgeyByZXR1cm4gZmFsc2U7IH0KKwogcHJvdGVjdGVkOgogICAg
IERyYXdpbmdBcmVhKERyYXdpbmdBcmVhVHlwZSwgV2ViUGFnZSYpOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCShyZXZpc2lvbiAxNzA1MzIpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgdm9pZCB2aWV3U3RhdGVEaWRDaGFuZ2UoV2ViQ29yZTo6Vmlld1N0YXRlOjpGbGFncyBjaGFu
Z2VkLCBib29sIHdhbnRzRGlkVXBkYXRlVmlld1N0YXRlKSBvdmVycmlkZTsKIAorICAgIHZpcnR1
YWwgYm9vbCBhZGp1c3RMYXllckZsdXNoVGhyb3R0bGluZyhXZWJDb3JlOjpMYXllckZsdXNoVGhy
b3R0bGVTdGF0ZTo6RmxhZ3MpIG92ZXJyaWRlOworCiAgICAgLy8gR3JhcGhpY3NMYXllckNsaWVu
dAogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkgb3ZlcnJpZGUgeyB9CiAgICAgdmlydHVhbCB2
b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIG92
ZXJyaWRlIHsgfQpAQCAtMTQzLDYgKzE0NSw5IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6VGlt
ZXI8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+IG1fbGF5ZXJGbHVzaFRpbWVyOwogICAgIGJv
b2wgbV9pc0ZsdXNoaW5nU3VzcGVuZGVkOwogICAgIGJvb2wgbV9oYXNEZWZlcnJlZEZsdXNoOwor
ICAgIGJvb2wgbV9pc1Rocm90dGxpbmdMYXllckZsdXNoZXM7CisgICAgYm9vbCBtX2lzTGF5ZXJG
bHVzaFRocm90dGxpbmdUZW1wb3JhcmlseURpc2FibGVkRm9ySW50ZXJhY3Rpb247CisgICAgYm9v
bCBtX2lzSW5pdGlhbFRocm90dGxlZExheWVyRmx1c2g7CiAKICAgICBib29sIG1fd2FpdGluZ0Zv
ckJhY2tpbmdTdG9yZVN3YXA7CiAgICAgYm9vbCBtX2hhZEZsdXNoRGVmZXJyZWRXaGlsZVdhaXRp
bmdGb3JCYWNraW5nU3RvcmVTd2FwOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhLm1tCShyZXZpc2lvbiAxNzA1MzIpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC01OSw2ICs1OSw5IEBAIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpSZW1vdGVMYXll
clQKICAgICAsIG1fbGF5ZXJGbHVzaFRpbWVyKHRoaXMsICZSZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYTo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQpCiAgICAgLCBtX2lzRmx1c2hpbmdTdXNwZW5kZWQo
ZmFsc2UpCiAgICAgLCBtX2hhc0RlZmVycmVkRmx1c2goZmFsc2UpCisgICAgLCBtX2lzVGhyb3R0
bGluZ0xheWVyRmx1c2hlcyhmYWxzZSkKKyAgICAsIG1faXNMYXllckZsdXNoVGhyb3R0bGluZ1Rl
bXBvcmFyaWx5RGlzYWJsZWRGb3JJbnRlcmFjdGlvbihmYWxzZSkKKyAgICAsIG1faXNJbml0aWFs
VGhyb3R0bGVkTGF5ZXJGbHVzaChmYWxzZSkKICAgICAsIG1fd2FpdGluZ0ZvckJhY2tpbmdTdG9y
ZVN3YXAoZmFsc2UpCiAgICAgLCBtX2hhZEZsdXNoRGVmZXJyZWRXaGlsZVdhaXRpbmdGb3JCYWNr
aW5nU3RvcmVTd2FwKGZhbHNlKQogICAgICwgbV9kaXNwbGF5UmVmcmVzaE1vbml0b3JzVG9Ob3Rp
ZnkobnVsbHB0cikKQEAgLTIyNiw3ICsyMjksNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhOjp1cGRhdGVTCiAjZW5kaWYKIAogICAgIGZyYW1lVmlldy0+c2V0RXhwb3NlZFJlY3Qo
bV9zY3JvbGxlZEV4cG9zZWRSZWN0KTsKLSAgICBmcmFtZVZpZXctPmFkanVzdFRpbGVkQmFja2lu
Z0NvdmVyYWdlKCk7CiAKICAgICBtX3dlYlBhZ2UucGFnZU92ZXJsYXlDb250cm9sbGVyKCkuZGlk
Q2hhbmdlRXhwb3NlZFJlY3QoKTsKIH0KQEAgLTIzOSwxMCArMjQxLDQ5IEBAIFRpbGVkQmFja2lu
ZyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEKIAogdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYTo6c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2goKQogeworICAgIGlmIChtX2lz
Rmx1c2hpbmdTdXNwZW5kZWQpIHsKKyAgICAgICAgbV9pc0xheWVyRmx1c2hUaHJvdHRsaW5nVGVt
cG9yYXJpbHlEaXNhYmxlZEZvckludGVyYWN0aW9uID0gZmFsc2U7CisgICAgICAgIG1faGFzRGVm
ZXJyZWRGbHVzaCA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1faXNM
YXllckZsdXNoVGhyb3R0bGluZ1RlbXBvcmFyaWx5RGlzYWJsZWRGb3JJbnRlcmFjdGlvbikgewor
ICAgICAgICBtX2lzTGF5ZXJGbHVzaFRocm90dGxpbmdUZW1wb3JhcmlseURpc2FibGVkRm9ySW50
ZXJhY3Rpb24gPSBmYWxzZTsKKyAgICAgICAgbV9sYXllckZsdXNoVGltZXIuc3RhcnRPbmVTaG90
KDBfbXMpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fbGF5ZXJGbHVzaFRp
bWVyLmlzQWN0aXZlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbGF5ZXJGbHVzaFRpbWVy
LnN0YXJ0T25lU2hvdCgwKTsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBpbml0aWFsRmx1c2hEZWxh
eSA9IDUwMF9tczsKKyAgICBzdGF0aWMgY29uc3QgYXV0byBmbHVzaERlbGF5ID0gMTUwMF9tczsK
KyAgICBhdXRvIHRocm90dGxlRGVsYXkgPSBtX2lzVGhyb3R0bGluZ0xheWVyRmx1c2hlcyA/ICht
X2lzSW5pdGlhbFRocm90dGxlZExheWVyRmx1c2ggPyBpbml0aWFsRmx1c2hEZWxheSA6IGZsdXNo
RGVsYXkpIDogMF9tczsKKyAgICBtX2xheWVyRmx1c2hUaW1lci5zdGFydE9uZVNob3QodGhyb3R0
bGVEZWxheSk7CisKKyAgICBtX2lzSW5pdGlhbFRocm90dGxlZExheWVyRmx1c2ggPSBmYWxzZTsK
K30KKworYm9vbCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6YWRqdXN0TGF5ZXJGbHVzaFRo
cm90dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzIGZsYWdzKQor
eworICAgIGlmIChmbGFncyAmIFdlYkNvcmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpVc2Vy
SXNJbnRlcmFjdGluZykKKyAgICAgICAgbV9pc0xheWVyRmx1c2hUaHJvdHRsaW5nVGVtcG9yYXJp
bHlEaXNhYmxlZEZvckludGVyYWN0aW9uID0gdHJ1ZTsKKworICAgIGJvb2wgd2FzVGhyb3R0bGlu
Z0xheWVyRmx1c2hlcyA9IG1faXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzOworICAgIG1faXNUaHJv
dHRsaW5nTGF5ZXJGbHVzaGVzID0gZmxhZ3MgJiBXZWJDb3JlOjpMYXllckZsdXNoVGhyb3R0bGVT
dGF0ZTo6TWFpbkxvYWRQcm9ncmVzc2luZzsKKworICAgIGlmICghd2FzVGhyb3R0bGluZ0xheWVy
Rmx1c2hlcyAmJiBtX2lzVGhyb3R0bGluZ0xheWVyRmx1c2hlcykKKyAgICAgICAgbV9pc0luaXRp
YWxUaHJvdHRsZWRMYXllckZsdXNoID0gdHJ1ZTsKKworICAgIC8vIFJlLXNjaGVkdWxlIHRoZSBm
bHVzaCBpZiB3ZSBzdG9wcGVkIHRocm90dGxpbmcuCisgICAgaWYgKCF3YXNUaHJvdHRsaW5nTGF5
ZXJGbHVzaGVzIHx8IG1faXNUaHJvdHRsaW5nTGF5ZXJGbHVzaGVzKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBpZiAoIW1fbGF5ZXJGbHVzaFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIG1fbGF5ZXJGbHVzaFRpbWVyLnN0b3AoKTsKKworICAgIHNjaGVkdWxl
Q29tcG9zaXRpbmdMYXllckZsdXNoKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6bGF5ZXJGbHVzaFRpbWVyRmlyZWQoV2ViQ29yZTo6
VGltZXI8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+KikKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxl
ZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQkocmV2aXNpb24gMTcwNTMyKQorKysgU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzU4LDcgKzM1OCw2IEBAIHZvaWQgVGlsZWRDb3Jl
QW5pbWF0aW9uRHJhd2luZ0FyZWE6OnVwZGEKICNlbmRpZgogCiAgICAgZnJhbWVWaWV3LT5zZXRF
eHBvc2VkUmVjdChtX3Njcm9sbGVkRXhwb3NlZFJlY3QpOwotICAgIGZyYW1lVmlldy0+YWRqdXN0
VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsKIAogICAgIG1fd2ViUGFnZS5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5kaWRDaGFuZ2VFeHBvc2VkUmVjdCgpOwogfQo=
</data>
<flag name="review"
          id="258548"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>