<?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>38171</bug_id>
          
          <creation_ts>2010-04-26 22:33:57 -0700</creation_ts>
          <short_desc>WebSocket needs to suspend/resume as Active DOM object.</short_desc>
          <delta_ts>2010-05-10 18:51:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Fumitoshi Ukai">ukai</reporter>
          <assigned_to name="Fumitoshi Ukai">ukai</assigned_to>
          <cc>ap</cc>
    
    <cc>pfeldman</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>217514</commentid>
    <comment_count>0</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-26 22:33:57 -0700</bug_when>
    <thetext>WebSocket needs to suspend/resume as Active DOM object.
For example, javascript debugger would suspend Active DOM objects by PageGroupLoadDeferrer, and run message loops.
Message loop would pump up new events from platform network code and process message frames.
If debugger runs in onmessage event handler, reentrant WebSocketChannel::didReceiveMessage and cause trouble.
(see http://code.google.com/p/chromium/issues/detail?id=42533. and possibly http://code.google.com/p/chromium/issues/detail?id=28562)

WebSocket needs to suspend and queue event up until it is resumed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217555</commentid>
    <comment_count>1</comment_count>
      <attachid>54390</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-27 00:06:08 -0700</bug_when>
    <thetext>Created attachment 54390
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217583</commentid>
    <comment_count>2</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-04-27 01:45:20 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=54390) [details]
&gt; Patch

It seems like this patch is a non-solution; the bug is still reproducible with this patch applied. I can get almost identical stack trace.

Furthermore, I cannot reproduce the bug on Mac WebKit (ToT) either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217754</commentid>
    <comment_count>3</comment_count>
      <attachid>54390</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-27 10:10:42 -0700</bug_when>
    <thetext>Comment on attachment 54390
Patch

+    , m_suspend(false)

Probably should be m_suspended.

+bool WebSocket::canSuspend() const
+{
+    return true;
+}

There are currently three uses for suspend/resume that I know of:

1. Suspend behind modal dialogs and alerts, so that program state wouldn&apos;t change during an alert() call. WebSocket definitely needs that.

2. Suspend when a page goes into back/forward cache. One can&apos;t practically suspend a socket for that long, so open WebSocket objects should prevent a page from going to b/f cache. Fo this, canSuspend should return false - see how it&apos;s done for XMLHttpRequest.

3. Suspend during a pause in debugger. I don&apos;t know much about how that works.

So in short, canSuspend() should return !m_channel.

+void WebSocket::suspend()
+{
+    m_suspend = true;
+}

I don&apos;t think it&apos;s sufficient. We need to make sure that readyState and other properties don&apos;t change during an alert or modalDialog() calls.

-    dispatchEvent(Event::create(eventNames().openEvent, false, false));
+    enqueueEvent(Event::create(eventNames().openEvent, false, false));

The enqueueEvent() name makes it sound like some kind of deferred dispatch, like &quot;post a task to fire a simple event&quot; in HTML5 parlance. But that&apos;s not how it generally behaves.

+        Deque&lt;RefPtr&lt;Event&gt; &gt; m_pendingEvents;

Deque is not a great container to use here. We don&apos;t do random append/remove in normal case - we fill the whole container first, and then empty it. See similar patterns in Document and HTMLMediaElement.

Of these comments, the most difficult to address is of course insufficiency of a boolean flag. I don&apos;t know how to best fix that, perhaps one needs to rely of platform specific code in SocketStreamHandle, similarly to what we do for XMLHttpRequest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221605</commentid>
    <comment_count>4</comment_count>
      <attachid>55224</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-05-06 03:34:42 -0700</bug_when>
    <thetext>Created attachment 55224
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221616</commentid>
    <comment_count>5</comment_count>
    <who name="Yuta Kitamura">yutak</who>
    <bug_when>2010-05-06 05:04:18 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=55224) [details]
&gt; Patch

I confirmed this patch fixes the issue http://crbug.com/42533. I have not looked at the code in detail, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>222459</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-07 10:11:34 -0700</bug_when>
    <thetext>+        While WebSocketChannel is suspended, it only adds received data in
+        m_buffer or record the handle was closed, and report no event to
+        WebSocket.

One problem with this approach is that remote side will think that we&apos;re consuming the data, and TCP/IP throttling mechanisms will be ineffective. But it&apos;s probably the lesser evil.

+        Since suspend/resume would be called while processing JavaScript event
+        handler, WebSocketChannel methods that would fire an event need to be
+        reentrant

I fail to understand this scenario. Could you please explain it in more detail?

     , m_bufferSize(0)
+    , m_suspended(false)
+    , m_closed(false)
+    , m_unhandledBufferedAmount(0)

What is the difference between m_bufferSize and m_unhandledBufferedAmount?

+void WorkerThreadableWebSocketChannel::Bridge::suspend()
+{
+    ASSERT(m_peer);
+    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadSuspend, m_peer));
+}

Is there a window of opportunity between the suspend message is posted, and the loader thread receives it? The loader may be sending data to worker thread at this very moment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223158</commentid>
    <comment_count>7</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-05-09 23:18:47 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; +        While WebSocketChannel is suspended, it only adds received data in
&gt; +        m_buffer or record the handle was closed, and report no event to
&gt; +        WebSocket.
&gt; 
&gt; One problem with this approach is that remote side will think that we&apos;re consuming the data, and TCP/IP throttling mechanisms will be ineffective. But it&apos;s probably the lesser evil.

We might need to change SocketStream interface.  I&apos;ll address this in different bug.

&gt; 
&gt; +        Since suspend/resume would be called while processing JavaScript event
&gt; +        handler, WebSocketChannel methods that would fire an event need to be
&gt; +        reentrant
&gt; 
&gt; I fail to understand this scenario. Could you please explain it in more detail?

Suppose that alert() is called in onmessage event handler.  I think the following scenario.

 WebSocketChannel::didReceiveData is called.
 process buffer and extract a message in a websocket frame.
 WebSocket dispatch message event.
 JavaScript engine runs onmessage event handler.
 to run alert(), it suspends Active DOMs, so WebSocket is suspended.
   run message loop until alert() is finished.
   at this point, network event would be processed, so might reenter WebSocketChannel::didReceiveData()
 alert() finished. resumes Active DOMs, including WebSocket.

So, this patch changed WebSocketChannel::didReceiveData() to add data in buffer and not to process buffer when suspended.

&gt; 
&gt;      , m_bufferSize(0)
&gt; +    , m_suspended(false)
&gt; +    , m_closed(false)
&gt; +    , m_unhandledBufferedAmount(0)
&gt; 
&gt; What is the difference between m_bufferSize and m_unhandledBufferedAmount?

m_bufferSize is size of m_buffer.
m_unhandledBufferedAmount is amount of buffer that was pushed to SocketStream, but not sent before close.

&gt; +void WorkerThreadableWebSocketChannel::Bridge::suspend()
&gt; +{
&gt; +    ASSERT(m_peer);
&gt; +    m_loaderProxy.postTaskToLoader(createCallbackTask(&amp;WorkerThreadableWebSocketChannel::mainThreadSuspend, m_peer));
&gt; +}
&gt; 
&gt; Is there a window of opportunity between the suspend message is posted, and the loader thread receives it? The loader may be sending data to worker thread at this very moment.

Ah, yes.  I&apos;ll fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223166</commentid>
    <comment_count>8</comment_count>
      <attachid>55521</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-05-09 23:29:47 -0700</bug_when>
    <thetext>Created attachment 55521
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223575</commentid>
    <comment_count>9</comment_count>
      <attachid>55521</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-10 16:28:56 -0700</bug_when>
    <thetext>Comment on attachment 55521
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223655</commentid>
    <comment_count>10</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-05-10 18:51:00 -0700</bug_when>
    <thetext>Committed r59116: &lt;http://trac.webkit.org/changeset/59116&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54390</attachid>
            <date>2010-04-27 00:06:08 -0700</date>
            <delta_ts>2010-05-06 03:34:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38171-20100427160606.patch</filename>
            <type>text/plain</type>
            <size>6720</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTgzYzliY2EzNTcyZDNkY2NkYmYyODJlMjZhYzkzYzJlMjM4ZjdkMC4uMTI1MjRmYjRlN2ZjM2Vh
OTY5OTdlODI5MGY2YWQ1ZjgxMzU2MGJmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0wNC0yNyAgRnVt
aXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJTb2NrZXQgbmVlZHMgdG8gc3VzcGVuZC9yZXN1
bWUgYXMgQWN0aXZlIERPTSBvYmplY3QuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODE3MQorCisgICAgICAgIEltcGxlbWVudCBzdXNwZW5kKCkvcmVz
dW1lKCkgaW4gV2ViU29ja2V0LgorICAgICAgICBXaGlsZSBXZWJTb2NrZXQgaXMgc3VzcGVuZGVk
LCBldmVudHMgd291bGQgYmUgcXVldWVkLCB3aGljaCB3b3VsZCBiZQorICAgICAgICBmaXJlZCB3
aGVuIHJlc3VtZWQuCisKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OldlYlNvY2tldCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6OnNlbmQpOiBjaGVjayBub3Qgc3VzcGVuZGVkCisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6OmNsb3NlKTogY2hlY2sgbm90IHN1c3BlbmRlZAorICAgICAgICAoV2ViQ29yZTo6
V2ViU29ja2V0OjpjYW5TdXNwZW5kKTogV2ViU29ja2V0IGNhbiBzdXNwZW5kCisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXQ6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0
OjpyZXN1bWUpOiB3aGVuIHJlc3VtZWQsIHRyeSBmaXJlIHBlbmRpbmcgZXZlbnRzLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRDb25uZWN0KTogZW5xdWV1ZSBldmVudCwgcmF0aGVy
IHRoYW4gZGlzcGF0Y2gKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkUmVjZWl2ZU1l
c3NhZ2UpOiBlbnF1ZXVlIGV2ZW50LCByYXRoZXIgdGhhbiBkaXNwYXRjaAorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0OjpkaWRSZWNlaXZlTWVzc2FnZUVycm9yKTogZW5xdWV1ZSBldmVudCwg
cmF0aGVyIHRoYW4gZGlzcGF0Y2gKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkQ2xv
c2UpOiBlbnF1ZXVlIGV2ZW50LCByYXRoZXIgdGhhbiBkaXNwYXRjaAorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0OjplbnF1ZXVlRXZlbnQpOiBpZiBub3Qgc3VzcGVuZGVkLCBmaXJlIGV2ZW50
LiBvdGhlcndpc2UgcHV0IGl0IGluIHBlbmRpbmcgcXVldWUuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXQ6OmZpcmVFdmVudCk6IGRpc3BhY2ggZXZlbnQuIGlmIGNsb3NlIGV2ZW50LCBjbGVh
biB1cHMuCisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuaDoKKwogMjAxMC0wNC0yNiAg
QWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBV
cGRhdGUgY29tbWVudCB0byBiZXR0ZXIgcmVmbGVjdCByZWFsaXR5LgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29j
a2V0LmNwcAppbmRleCBhODIwYzJhNjM4NjU1MjIzZWQxNWUxZDA2OGU2NTE1ZGE4MjFiNjVjLi44
MWY5MDkyNTYxOWJlM2E2YzFkODdkY2RjNGFmZmFmMzA0YmVlMDI2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2Vi
U29ja2V0LmNwcApAQCAtOTgsNiArOTgsNyBAQCBXZWJTb2NrZXQ6OldlYlNvY2tldChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KGNvbnRleHQs
IHRoaXMpCiAgICAgLCBtX3N0YXRlKENPTk5FQ1RJTkcpCiAgICAgLCBtX2J1ZmZlcmVkQW1vdW50
QWZ0ZXJDbG9zZSgwKQorICAgICwgbV9zdXNwZW5kKGZhbHNlKQogewogfQogCkBAIC0xNTcsNiAr
MTU4LDcgQEAgdm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sLCBFeGNlcHRpb25Db2RlJgogCiBib29sIFdlYlNvY2tldDo6c2VuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIEFTU0VSVCgh
bV9zdXNwZW5kKTsKICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldCAlcCBzZW5kICVzIiwgdGhp
cywgbWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9zdGF0ZSA9PSBDT05ORUNUSU5H
KSB7CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CkBAIC0xNzQsNiArMTc2LDcgQEAg
Ym9vbCBXZWJTb2NrZXQ6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25Db2Rl
JiBlYykKIAogdm9pZCBXZWJTb2NrZXQ6OmNsb3NlKCkKIHsKKyAgICBBU1NFUlQoIW1fc3VzcGVu
ZCk7CiAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXQgJXAgY2xvc2UiLCB0aGlzKTsKICAgICBp
ZiAobV9zdGF0ZSA9PSBDTE9TRUQpCiAgICAgICAgIHJldHVybjsKQEAgLTIxMiw2ICsyMTUsMjYg
QEAgdm9pZCBXZWJTb2NrZXQ6OmNvbnRleHREZXN0cm95ZWQoKQogICAgIEFjdGl2ZURPTU9iamVj
dDo6Y29udGV4dERlc3Ryb3llZCgpOwogfQogCitib29sIFdlYlNvY2tldDo6Y2FuU3VzcGVuZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpzdXNwZW5k
KCkKK3sKKyAgICBtX3N1c3BlbmQgPSB0cnVlOworfQorCit2b2lkIFdlYlNvY2tldDo6cmVzdW1l
KCkKK3sKKyAgICBtX3N1c3BlbmQgPSBmYWxzZTsKKyAgICB3aGlsZSAoIW1fc3VzcGVuZCAmJiAh
bV9wZW5kaW5nRXZlbnRzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8RXZlbnQ+IGV2ZW50
ID0gbV9wZW5kaW5nRXZlbnRzLmZpcnN0KCk7CisgICAgICAgIG1fcGVuZGluZ0V2ZW50cy5yZW1v
dmVGaXJzdCgpOworICAgICAgICBmaXJlRXZlbnQoZXZlbnQpOworICAgIH0KK30KKwogdm9pZCBX
ZWJTb2NrZXQ6OnN0b3AoKQogewogICAgIGJvb2wgcGVuZGluZyA9IGhhc1BlbmRpbmdBY3Rpdml0
eSgpOwpAQCAtMjMzLDcgKzI1Niw3IEBAIHZvaWQgV2ViU29ja2V0OjpkaWRDb25uZWN0KCkKICAg
ICB9CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgbV9zdGF0ZSA9
IE9QRU47Ci0gICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5vcGVu
RXZlbnQsIGZhbHNlLCBmYWxzZSkpOworICAgIGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2
ZW50TmFtZXMoKS5vcGVuRXZlbnQsIGZhbHNlLCBmYWxzZSkpOwogfQogCiB2b2lkIFdlYlNvY2tl
dDo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtc2cpCkBAIC0yNDQsNyArMjY3LDcg
QEAgdm9pZCBXZWJTb2NrZXQ6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbXNnKQog
ICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogICAgIFJlZlB0cjxNZXNzYWdl
RXZlbnQ+IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKCk7CiAgICAgZXZ0LT5pbml0TWVzc2Fn
ZUV2ZW50KGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQsIGZhbHNlLCBmYWxzZSwgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpjcmVhdGUobXNnKSwgIiIsICIiLCAwLCAwKTsKLSAgICBkaXNwYXRjaEV2
ZW50KGV2dCk7CisgICAgZW5xdWV1ZUV2ZW50KGV2dCk7CiB9CiAKIHZvaWQgV2ViU29ja2V0Ojpk
aWRSZWNlaXZlTWVzc2FnZUVycm9yKCkKQEAgLTI1MywxOSArMjc2LDQwIEBAIHZvaWQgV2ViU29j
a2V0OjpkaWRSZWNlaXZlTWVzc2FnZUVycm9yKCkKICAgICBpZiAobV9zdGF0ZSAhPSBPUEVOKQog
ICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0g
ICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCBm
YWxzZSwgZmFsc2UpKTsKKyAgICBlbnF1ZXVlRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuZXJyb3JFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiB9CiAKIHZvaWQgV2ViU29ja2V0OjpkaWRD
bG9zZSh1bnNpZ25lZCBsb25nIHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50KQogewogICAgIExPRyhO
ZXR3b3JrLCAiV2ViU29ja2V0ICVwIGRpZENsb3NlIiwgdGhpcyk7CisgICAgaWYgKCFtX2NoYW5u
ZWwpCisgICAgICAgIHJldHVybjsKICAgICBtX3N0YXRlID0gQ0xPU0VEOwogICAgIG1fYnVmZmVy
ZWRBbW91bnRBZnRlckNsb3NlICs9IHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50OwogICAgIEFTU0VS
VChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuY2xvc2VFdmVudCwgZmFsc2UsIGZhbHNlKSk7Ci0gICAgbV9jaGFu
bmVsID0gMDsKLSAgICBpZiAoaGFzUGVuZGluZ0FjdGl2aXR5KCkpCi0gICAgICAgIEFjdGl2ZURP
TU9iamVjdDo6dW5zZXRQZW5kaW5nQWN0aXZpdHkodGhpcyk7CisgICAgZW5xdWV1ZUV2ZW50KEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmNsb3NlRXZlbnQsIGZhbHNlLCBmYWxzZSkpOworfQor
Cit2b2lkIFdlYlNvY2tldDo6ZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQor
eworICAgIGlmICghbV9zdXNwZW5kKSB7CisgICAgICAgIGZpcmVFdmVudChldmVudCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wZW5kaW5nRXZlbnRzLmFwcGVuZChldmVudCk7Cit9
CisKK3ZvaWQgV2ViU29ja2V0OjpmaXJlRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit7
CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgYm9vbCBpc0Nsb3Nl
RXZlbnQgPSBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbG9zZUV2ZW50OworICAgIGRp
c3BhdGNoRXZlbnQoZXZlbnQpOworICAgIGlmIChpc0Nsb3NlRXZlbnQpIHsKKyAgICAgICAgQVNT
RVJUKG1fcGVuZGluZ0V2ZW50cy5pc0VtcHR5KCkpOworICAgICAgICBtX2NoYW5uZWwgPSAwOwor
ICAgICAgICBpZiAoaGFzUGVuZGluZ0FjdGl2aXR5KCkpCisgICAgICAgICAgICBBY3RpdmVET01P
YmplY3Q6OnVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOworICAgIH0KIH0KIAogRXZlbnRUYXJn
ZXREYXRhKiBXZWJTb2NrZXQ6OmV2ZW50VGFyZ2V0RGF0YSgpCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0LmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgK
aW5kZXggZTkxNzk2ZjE0NTNkNTY0Y2E2M2MwMTE1OTU5ZjE2MDc4NDhmMjA5Zi4uYTljYzBiZjZl
MmQ3Y2RkY2ZmYjI5ZjQxYzdlZTdmMTQwNDBkNDRlZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldC5oCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaApA
QCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAiS1VS
TC5oIgogI2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWxDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KIApAQCAtODQsNiArODUsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBz
dXNwZW5kKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIHN0b3AoKTsKIAogICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldD46OnJl
ZjsKQEAgLTk4LDYgKzEwMiw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRlOgog
ICAgICAgICBXZWJTb2NrZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCisgICAgICAgIHZv
aWQgZW5xdWV1ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICAgICAgdm9pZCBmaXJlRXZl
bnQoUGFzc1JlZlB0cjxFdmVudD4pOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmRXZlbnRUYXJn
ZXQoKSB7IHJlZigpOyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0KCkg
eyBkZXJlZigpOyB9CiAgICAgICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBldmVudFRhcmdl
dERhdGEoKTsKQEAgLTExMCw2ICsxMTYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IFN0cmluZyBtX3Byb3RvY29sOwogICAgICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdl
dERhdGE7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgbV9idWZmZXJlZEFtb3VudEFmdGVyQ2xvc2U7
CisgICAgICAgIGJvb2wgbV9zdXNwZW5kOworICAgICAgICBEZXF1ZTxSZWZQdHI8RXZlbnQ+ID4g
bV9wZW5kaW5nRXZlbnRzOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55224</attachid>
            <date>2010-05-06 03:34:42 -0700</date>
            <delta_ts>2010-05-09 23:29:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38171-20100506193439.patch</filename>
            <type>text/plain</type>
            <size>20608</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmRlZjQ5NmU5MDYwZTMxYTU1ODcwYWRjNjQxNDZjOGZkNTE4ZTFiNS4uZDEyM2JkYWU2YmQ3NTBj
ZjNhMDJkYzZmNjAwZmJmZWZmMjcwZmJhYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0wNS0wNiAgRnVt
aXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJTb2NrZXQgbmVlZHMgdG8gc3VzcGVuZC9yZXN1
bWUgYXMgQWN0aXZlIERPTSBvYmplY3QuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODE3MQorCisgICAgICAgIEltcGxlbWVudCBzdXNwZW5kKCkvcmVz
dW1lKCkgaW4gV2ViU29ja2V0IGFuZCBXZWJTb2NrZXRDaGFubmVsLgorICAgICAgICBXaGlsZSBX
ZWJTb2NrZXRDaGFubmVsIGlzIHN1c3BlbmRlZCwgaXQgb25seSBhZGRzIHJlY2VpdmVkIGRhdGEg
aW4KKyAgICAgICAgbV9idWZmZXIgb3IgcmVjb3JkIHRoZSBoYW5kbGUgd2FzIGNsb3NlZCwgYW5k
IHJlcG9ydCBubyBldmVudCB0bworICAgICAgICBXZWJTb2NrZXQuCisgICAgICAgIFdoZW4gcmVz
dW1lZCwgaXQgd2lsbCBwcm9jZXNzIGJ1ZmZlciBvciBoYW5kbGUgY2xvc2luZy4KKyAgICAgICAg
U2luY2Ugc3VzcGVuZC9yZXN1bWUgd291bGQgYmUgY2FsbGVkIHdoaWxlIHByb2Nlc3NpbmcgSmF2
YVNjcmlwdCBldmVudAorICAgICAgICBoYW5kbGVyLCBXZWJTb2NrZXRDaGFubmVsIG1ldGhvZHMg
dGhhdCB3b3VsZCBmaXJlIGFuIGV2ZW50IG5lZWQgdG8gYmUKKyAgICAgICAgcmVlbnRyYW50LiAg
U28sIFdlYlNvY2tldENoYW5uZWw6OnByb2Nlc3NCdWZmZXIoKSBjYWxsIFdlYlNvY2tldCB0bwor
ICAgICAgICBmaXJlIGFuIGV2ZW50IGF0IG1vc3Qgb25lIHRpbWUgYW5kIHNraXBzIGJ1ZmZlciBi
ZWZvcmUgdGhlIGNhbGxpbmcsIHNvCisgICAgICAgIHRoYXQgbmV4dCBjYWxsIG9mIHByb2Nlc3NC
dWZmZXIoKSB3b3VsZCBwcm9jZXNzIHRoZSBuZXh0IGZyYW1lLgorCisgICAgICAgICogd2Vic29j
a2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oOgorICAgICAgICAqIHdlYnNvY2tldHMv
V2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6Y2FuU3VzcGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0OjpyZXN1bWUpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Lmg6
CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYlNvY2tldENoYW5uZWw6OldlYlNvY2tldENoYW5uZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6Y29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJT
b2NrZXRDaGFubmVsOjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6
OmJ1ZmZlcmVkQW1vdW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OmNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OnN1c3BlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6cmVzdW1lKToKKyAgICAgICAgIFdoZW4g
cmVzdW1lZCwgaXQgd2lsbCBwcm9jZXNzIGJ1ZmZlciBhbmQgaGFuZGxlIGNsb3NpbmcgaWYgaGFu
ZGxlCisgICAgICAgICB3YXMgYWxyZWFkeSBjbG9zZWQgd2hpbGUgc3VzcGVuZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6ZGlkQ2xvc2UpOgorICAgICAgICAgSWYgc3Vz
cGVuZGVkLCByZWNvcmQgdW5oYW5kbGVkIGJ1ZmZlcmVkQW1vdW50IGFuZCBzZXQgbV9jbG9zZWQg
dHJ1ZSwKKyAgICAgICAgIHNvIHRoYXQgY2xvc2luZyB3aWxsIGJlIHByb2Nlc3NlZCB3aGVuIHJl
c3VtZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpkaWRSZWNlaXZlRGF0
YSk6CisgICAgICAgICBBZGQgcmVjZWl2ZWQgZGF0YSBpbiBidWZmZXIgYW5kIHByb2Nlc3MgYnVm
ZmVyIHdoaWxlIGl0IGlzIG5vdCBzdXNwZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2Nr
ZXRDaGFubmVsOjpwcm9jZXNzQnVmZmVyKToKKyAgICAgICAgIFByb2Nlc3MgaGFuZHNoYWtlIGhl
YWRlciBvciBvbmUgZnJhbWUgbWVzc2FnZS4KKyAgICAgICAgIFJldHVybiB0cnVlIGlmIHRoZXJl
IGFyZSBtb3JlIGRhdGEgdG8gYmUgcHJvY2Vzc2VkLiBmYWxzZSBvdGhlcndpc2UgKGluY29tcGxl
dGUgaGFuZHNoYWtlIGhlYWRlciBvciBpbmNvbXBsZXRlIGZyYW1lKS4KKyAgICAgICAgKiB3ZWJz
b2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaDoKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OnN1c3BlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OnJl
c3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6bWFpblRocmVhZFN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFJlc3VtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpy
ZXN1bWUpOgorICAgICAgICAqIHdlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwuaDoKKwogMjAxMC0wNS0wNSAgSm9zZXBoIFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIGIvV2ViQ29y
ZS93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKaW5kZXggNzRlYTRiNGI5
YTYyMzY0NzMxMDM1Y2QzM2IzNmExZmU2NmY3ODNmMS4uY2JlNmUxNDU4MDM0ZTBkOGNhNzBmMTgz
NDYzYjhkYjRlYWJiYTExZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmgKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsLmgKQEAgLTUzLDYgKzUzLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjbG9zZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCgpID0gMDsgLy8g
V2lsbCBzdXBwcmVzcyBkaWRDbG9zZSgpLgogCisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpID0gMDsKKwogICAgIHZvaWQgcmVmKCkgeyBy
ZWZUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsgZGVy
ZWZUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
d2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5j
cHAKaW5kZXggYTgyMGMyYTYzODY1NTIyM2VkMTVlMWQwNjhlNjUxNWRhODIxYjY1Yy4uMzgyMzdm
ZWI5ODEyMTI5Y2QyOGQwMjFlYjFlNTJlMmM2MDdiNTcwMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5jcHAKQEAgLTIxMiw2ICsyMTIsMjMgQEAgdm9pZCBXZWJTb2NrZXQ6OmNvbnRleHREZXN0cm95
ZWQoKQogICAgIEFjdGl2ZURPTU9iamVjdDo6Y29udGV4dERlc3Ryb3llZCgpOwogfQogCitib29s
IFdlYlNvY2tldDo6Y2FuU3VzcGVuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2NoYW5uZWw7
Cit9CisKK3ZvaWQgV2ViU29ja2V0OjpzdXNwZW5kKCkKK3sKKyAgICBpZiAobV9jaGFubmVsKQor
ICAgICAgICBtX2NoYW5uZWwtPnN1c3BlbmQoKTsKK30KKwordm9pZCBXZWJTb2NrZXQ6OnJlc3Vt
ZSgpCit7CisgICAgaWYgKG1fY2hhbm5lbCkKKyAgICAgICAgbV9jaGFubmVsLT5yZXN1bWUoKTsK
K30KKwogdm9pZCBXZWJTb2NrZXQ6OnN0b3AoKQogewogICAgIGJvb2wgcGVuZGluZyA9IGhhc1Bl
bmRpbmdBY3Rpdml0eSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCmluZGV4IGU5MTc5NmYxNDUzZDU2
NGNhNjNjMDExNTk1OWYxNjA3ODQ4ZjIwOWYuLmIyMTAyZDE0YThjMzE0MzE1OTBjZWE3ODBlNmU4
MmRlNGE3M2ZlNWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaAor
KysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKQEAgLTg0LDYgKzg0LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQg
Y29udGV4dERlc3Ryb3llZCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVzdW1lKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7CiAKICAgICAgICAgdXNp
bmcgUmVmQ291bnRlZDxXZWJTb2NrZXQ+OjpyZWY7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0
Q2hhbm5lbC5jcHAKaW5kZXggMDg4MGU0NTU0NWVhMTE2NDUyNDhlMGEyNjFlYjgwNTkxOTQyYTc1
MS4uOWNhMmIyMDM2OTZmNmQzNzk1MWFkMzFmN2MyMDg2MzU2OTY0OWY0NiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCisrKyBiL1dlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtNTgsNiArNTgsOSBAQCBXZWJTb2NrZXRD
aGFubmVsOjpXZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFdlYlNvY2tldENoYQogICAgICwgbV9oYW5kc2hha2UodXJsLCBwcm90b2NvbCwgY29udGV4dCkK
ICAgICAsIG1fYnVmZmVyKDApCiAgICAgLCBtX2J1ZmZlclNpemUoMCkKKyAgICAsIG1fc3VzcGVu
ZGVkKGZhbHNlKQorICAgICwgbV9jbG9zZWQoZmFsc2UpCisgICAgLCBtX3VuaGFuZGxlZEJ1ZmZl
cmVkQW1vdW50KDApCiB7CiB9CiAKQEAgLTcwLDYgKzczLDcgQEAgdm9pZCBXZWJTb2NrZXRDaGFu
bmVsOjpjb25uZWN0KCkKIHsKICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAg
Y29ubmVjdCIsIHRoaXMpOwogICAgIEFTU0VSVCghbV9oYW5kbGUpOworICAgIEFTU0VSVCghbV9z
dXNwZW5kZWQpOwogICAgIG1faGFuZHNoYWtlLnJlc2V0KCk7CiAgICAgcmVmKCk7CiAgICAgbV9o
YW5kbGUgPSBTb2NrZXRTdHJlYW1IYW5kbGU6OmNyZWF0ZShtX2hhbmRzaGFrZS51cmwoKSwgdGhp
cyk7CkBAIC03OSw2ICs4Myw3IEBAIGJvb2wgV2ViU29ja2V0Q2hhbm5lbDo6c2VuZChjb25zdCBT
dHJpbmcmIG1zZykKIHsKICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAgc2Vu
ZCAlcyIsIHRoaXMsIG1zZy51dGY4KCkuZGF0YSgpKTsKICAgICBBU1NFUlQobV9oYW5kbGUpOwor
ICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOwogICAgIFZlY3RvcjxjaGFyPiBidWY7CiAgICAgYnVm
LmFwcGVuZCgnXDAnKTsgIC8vIGZyYW1lIHR5cGUKICAgICBidWYuYXBwZW5kKG1zZy51dGY4KCku
ZGF0YSgpLCBtc2cudXRmOCgpLmxlbmd0aCgpKTsKQEAgLTkwLDEyICs5NSwxNCBAQCB1bnNpZ25l
ZCBsb25nIFdlYlNvY2tldENoYW5uZWw6OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKIHsKICAgICBM
T0coTmV0d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAgYnVmZmVyZWRBbW91bnQiLCB0aGlzKTsK
ICAgICBBU1NFUlQobV9oYW5kbGUpOworICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOwogICAgIHJl
dHVybiBtX2hhbmRsZS0+YnVmZmVyZWRBbW91bnQoKTsKIH0KIAogdm9pZCBXZWJTb2NrZXRDaGFu
bmVsOjpjbG9zZSgpCiB7CiAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXRDaGFubmVsICVwIGNs
b3NlIiwgdGhpcyk7CisgICAgQVNTRVJUKCFtX3N1c3BlbmRlZCk7CiAgICAgaWYgKG1faGFuZGxl
KQogICAgICAgICBtX2hhbmRsZS0+Y2xvc2UoKTsgIC8vIHdpbGwgY2FsbCBkaWRDbG9zZSgpCiB9
CkBAIC0xMTAsNiArMTE3LDIyIEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCgp
CiAgICAgICAgIG1faGFuZGxlLT5jbG9zZSgpOwogfQogCit2b2lkIFdlYlNvY2tldENoYW5uZWw6
OnN1c3BlbmQoKQoreworICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKK30KKwordm9pZCBXZWJTb2Nr
ZXRDaGFubmVsOjpyZXN1bWUoKQoreworICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7CisgICAgUmVm
UHRyPFdlYlNvY2tldENoYW5uZWw+IHByb3RlY3QodGhpcyk7IC8vIFRoZSBjbGllbnQgY2FuIGNs
b3NlIHRoZSBjaGFubmVsLCBwb3RlbnRpYWxseSByZW1vdmluZyB0aGUgbGFzdCByZWZlcmVuY2Uu
CisgICAgd2hpbGUgKCFtX3N1c3BlbmRlZCAmJiBtX2NsaWVudCAmJiBtX2J1ZmZlcikKKyAgICAg
ICAgaWYgKCFwcm9jZXNzQnVmZmVyKCkpCisgICAgICAgICAgICBicmVhazsKKyAgICBpZiAoIW1f
c3VzcGVuZGVkICYmIG1fY2xpZW50ICYmIG1fY2xvc2VkICYmIG1faGFuZGxlKQorICAgICAgICBk
aWRDbG9zZShtX2hhbmRsZS5nZXQoKSk7Cit9CisKIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZGlk
T3BlbihTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRsZSkKIHsKICAgICBMT0coTmV0d29yaywgIldl
YlNvY2tldENoYW5uZWwgJXAgZGlkT3BlbiIsIHRoaXMpOwpAQCAtMTI3LDE0ICsxNTAsMTcgQEAg
dm9pZCBXZWJTb2NrZXRDaGFubmVsOjpkaWRDbG9zZShTb2NrZXRTdHJlYW1IYW5kbGUqIGhhbmRs
ZSkKIHsKICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAgZGlkQ2xvc2UiLCB0
aGlzKTsKICAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlIHx8ICFt
X2hhbmRsZSk7CisgICAgbV9jbG9zZWQgPSB0cnVlOwogICAgIGlmIChtX2hhbmRsZSkgewotICAg
ICAgICB1bnNpZ25lZCBsb25nIHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50ID0gbV9oYW5kbGUtPmJ1
ZmZlcmVkQW1vdW50KCk7CisgICAgICAgIG1fdW5oYW5kbGVkQnVmZmVyZWRBbW91bnQgPSBtX2hh
bmRsZS0+YnVmZmVyZWRBbW91bnQoKTsKKyAgICAgICAgaWYgKG1fc3VzcGVuZGVkKQorICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiBjbGllbnQgPSBt
X2NsaWVudDsKICAgICAgICAgbV9jbGllbnQgPSAwOwogICAgICAgICBtX2NvbnRleHQgPSAwOwog
ICAgICAgICBtX2hhbmRsZSA9IDA7CiAgICAgICAgIGlmIChjbGllbnQpCi0gICAgICAgICAgICBj
bGllbnQtPmRpZENsb3NlKHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50KTsKKyAgICAgICAgICAgIGNs
aWVudC0+ZGlkQ2xvc2UobV91bmhhbmRsZWRCdWZmZXJlZEFtb3VudCk7CiAgICAgfQogICAgIGRl
cmVmKCk7CiB9CkBAIC0xNTUsODcgKzE4MSw5IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6ZGlk
UmVjZWl2ZURhdGEoU29ja2V0U3RyZWFtSGFuZGxlKiBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhCiAg
ICAgICAgIGhhbmRsZS0+Y2xvc2UoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
bV9oYW5kc2hha2UubW9kZSgpID09IFdlYlNvY2tldEhhbmRzaGFrZTo6SW5jb21wbGV0ZSkgewot
ICAgICAgICBpbnQgaGVhZGVyTGVuZ3RoID0gbV9oYW5kc2hha2UucmVhZFNlcnZlckhhbmRzaGFr
ZShtX2J1ZmZlciwgbV9idWZmZXJTaXplKTsKLSAgICAgICAgaWYgKGhlYWRlckxlbmd0aCA8PSAw
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzd2l0Y2ggKG1faGFuZHNoYWtlLm1vZGUo
KSkgewotICAgICAgICBjYXNlIFdlYlNvY2tldEhhbmRzaGFrZTo6Q29ubmVjdGVkOgotICAgICAg
ICAgICAgaWYgKCFtX2hhbmRzaGFrZS5zZXJ2ZXJTZXRDb29raWUoKS5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9jb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2Nv
bnRleHQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY29va2llc0VuYWJsZWQoZG9jdW1lbnQp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjOyAvLyBFeGNlcHRp
b24gKGZvciBzYW5kYm94ZWQgZG9jdW1lbnRzKSBpZ25vcmVkLgotICAgICAgICAgICAgICAgICAg
ICAgICAgZG9jdW1lbnQtPnNldENvb2tpZShtX2hhbmRzaGFrZS5zZXJ2ZXJTZXRDb29raWUoKSwg
ZWMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgLy8gRklYTUU6IGhhbmRsZSBzZXQtY29va2llMi4KLSAgICAgICAg
ICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAlcCBjb25uZWN0ZWQiLCB0aGlzKTsK
LSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRDb25uZWN0KCk7Ci0gICAgICAgICAgICBpZiAoIW1f
Y2xpZW50KQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICB3aGlsZSAoIW1fc3VzcGVuZGVk
ICYmIG1fY2xpZW50ICYmIG1fYnVmZmVyKQorICAgICAgICBpZiAoIXByb2Nlc3NCdWZmZXIoKSkK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgTE9HKE5l
dHdvcmssICJXZWJTb2NrZXRDaGFubmVsICVwIGNvbm5lY3Rpb24gZmFpbGVkIiwgdGhpcyk7Ci0g
ICAgICAgICAgICBoYW5kbGUtPmNsb3NlKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgc2tpcEJ1ZmZlcihoZWFkZXJMZW5ndGgpOwotICAgICAgICBpZiAoIW1fYnVm
ZmVyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBMT0coTmV0d29yaywgInJlbWFpbmlu
ZyBpbiByZWFkIGJ1ZiAldWwiLCBtX2J1ZmZlclNpemUpOwotICAgIH0KLSAgICBpZiAobV9oYW5k
c2hha2UubW9kZSgpICE9IFdlYlNvY2tldEhhbmRzaGFrZTo6Q29ubmVjdGVkKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBjb25zdCBjaGFyKiBuZXh0RnJhbWUgPSBtX2J1ZmZlcjsKLSAgICBjb25z
dCBjaGFyKiBwID0gbV9idWZmZXI7Ci0gICAgY29uc3QgY2hhciogZW5kID0gcCArIG1fYnVmZmVy
U2l6ZTsKLSAgICB3aGlsZSAocCA8IGVuZCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGZyYW1l
Qnl0ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpwKyspOwotICAgICAgICBpZiAoKGZy
YW1lQnl0ZSAmIDB4ODApID09IDB4ODApIHsKLSAgICAgICAgICAgIGludCBsZW5ndGggPSAwOwot
ICAgICAgICAgICAgd2hpbGUgKHAgPCBlbmQpIHsKLSAgICAgICAgICAgICAgICBpZiAobGVuZ3Ro
ID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSAvIDEyOCkgewotICAgICAgICAgICAg
ICAgICAgICBMT0coTmV0d29yaywgImZyYW1lIGxlbmd0aCBvdmVyZmxvdyAlZCIsIGxlbmd0aCk7
Ci0gICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZUVycm9yKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIGhhbmRsZS0+Y2xvc2UoKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBjaGFyIG1zZ0J5dGUgPSAqcDsKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggKiAx
MjggKyAobXNnQnl0ZSAmIDB4N2YpOwotICAgICAgICAgICAgICAgICsrcDsKLSAgICAgICAgICAg
ICAgICBpZiAoIShtc2dCeXRlICYgMHg4MCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHAgKyBsZW5ndGggPCBlbmQpIHsKLSAgICAg
ICAgICAgICAgICBwICs9IGxlbmd0aDsKLSAgICAgICAgICAgICAgICBuZXh0RnJhbWUgPSBwOwot
ICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZUVycm9yKCk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBjb25zdCBjaGFyKiBtc2dTdGFydCA9IHA7Ci0gICAgICAgICAgICB3
aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHhmZicpCi0gICAgICAgICAgICAgICAgKytwOwotICAg
ICAgICAgICAgaWYgKHAgPCBlbmQgJiYgKnAgPT0gJ1x4ZmYnKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGZyYW1lQnl0ZSA9PSAweDAwKQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlk
UmVjZWl2ZU1lc3NhZ2UoU3RyaW5nOjpmcm9tVVRGOChtc2dTdGFydCwgcCAtIG1zZ1N0YXJ0KSk7
Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlk
UmVjZWl2ZU1lc3NhZ2VFcnJvcigpOwotICAgICAgICAgICAgICAgIGlmICghbV9jbGllbnQpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICArK3A7Ci0gICAgICAg
ICAgICAgICAgbmV4dEZyYW1lID0gcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LSAgICBza2lwQnVmZmVyKG5leHRGcmFtZSAtIG1fYnVmZmVyKTsKIH0KIAogdm9pZCBXZWJTb2Nr
ZXRDaGFubmVsOjpkaWRGYWlsKFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlLCBjb25zdCBTb2Nr
ZXRTdHJlYW1FcnJvciYpCkBAIC0yODEsNiArMjI5LDk1IEBAIHZvaWQgV2ViU29ja2V0Q2hhbm5l
bDo6c2tpcEJ1ZmZlcihpbnQgbGVuKQogICAgIG1lbW1vdmUobV9idWZmZXIsIG1fYnVmZmVyICsg
bGVuLCBtX2J1ZmZlclNpemUpOwogfQogCitib29sIFdlYlNvY2tldENoYW5uZWw6OnByb2Nlc3NC
dWZmZXIoKQoreworICAgIEFTU0VSVCghbV9zdXNwZW5kZWQpOworICAgIEFTU0VSVChtX2NsaWVu
dCk7CisgICAgQVNTRVJUKG1fYnVmZmVyKTsKKyAgICBpZiAobV9oYW5kc2hha2UubW9kZSgpID09
IFdlYlNvY2tldEhhbmRzaGFrZTo6SW5jb21wbGV0ZSkgeworICAgICAgICBpbnQgaGVhZGVyTGVu
Z3RoID0gbV9oYW5kc2hha2UucmVhZFNlcnZlckhhbmRzaGFrZShtX2J1ZmZlciwgbV9idWZmZXJT
aXplKTsKKyAgICAgICAgaWYgKGhlYWRlckxlbmd0aCA8PSAwKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAobV9oYW5kc2hha2UubW9kZSgpID09IFdlYlNvY2tldEhhbmRz
aGFrZTo6Q29ubmVjdGVkKSB7CisgICAgICAgICAgICBpZiAoIW1faGFuZHNoYWtlLnNlcnZlclNl
dENvb2tpZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBz
dGF0aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChjb29raWVzRW5hYmxlZChkb2N1bWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWM7IC8vIEV4Y2VwdGlvbiAoZm9yIHNhbmRib3hlZCBkb2N1bWVudHMpIGln
bm9yZWQuCisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC0+c2V0Q29va2llKG1faGFu
ZHNoYWtlLnNlcnZlclNldENvb2tpZSgpLCBlYyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTogaGFu
ZGxlIHNldC1jb29raWUyLgorICAgICAgICAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXRDaGFu
bmVsICVwIGNvbm5lY3RlZCIsIHRoaXMpOworICAgICAgICAgICAgc2tpcEJ1ZmZlcihoZWFkZXJM
ZW5ndGgpOworICAgICAgICAgICAgbV9jbGllbnQtPmRpZENvbm5lY3QoKTsKKyAgICAgICAgICAg
IExPRyhOZXR3b3JrLCAicmVtYWluaW5nIGluIHJlYWQgYnVmICV1bCIsIG1fYnVmZmVyU2l6ZSk7
CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgTE9HKE5l
dHdvcmssICJXZWJTb2NrZXRDaGFubmVsICVwIGNvbm5lY3Rpb24gZmFpbGVkIiwgdGhpcyk7Cisg
ICAgICAgIHNraXBCdWZmZXIoaGVhZGVyTGVuZ3RoKTsKKyAgICAgICAgaWYgKCFtX2Nsb3NlZCkK
KyAgICAgICAgICAgIG1faGFuZGxlLT5jbG9zZSgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmIChtX2hhbmRzaGFrZS5tb2RlKCkgIT0gV2ViU29ja2V0SGFuZHNoYWtlOjpD
b25uZWN0ZWQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGNoYXIqIG5leHRG
cmFtZSA9IG1fYnVmZmVyOworICAgIGNvbnN0IGNoYXIqIHAgPSBtX2J1ZmZlcjsKKyAgICBjb25z
dCBjaGFyKiBlbmQgPSBwICsgbV9idWZmZXJTaXplOworCisgICAgdW5zaWduZWQgY2hhciBmcmFt
ZUJ5dGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqcCsrKTsKKyAgICBpZiAoKGZyYW1l
Qnl0ZSAmIDB4ODApID09IDB4ODApIHsKKyAgICAgICAgaW50IGxlbmd0aCA9IDA7CisgICAgICAg
IHdoaWxlIChwIDwgZW5kKSB7CisgICAgICAgICAgICBpZiAobGVuZ3RoID4gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSAvIDEyOCkgeworICAgICAgICAgICAgICAgIExPRyhOZXR3b3Jr
LCAiZnJhbWUgbGVuZ3RoIG92ZXJmbG93ICVkIiwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBz
a2lwQnVmZmVyKHAgKyBsZW5ndGggLSBtX2J1ZmZlcik7CisgICAgICAgICAgICAgICAgbV9jbGll
bnQtPmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IoKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fY2xp
ZW50KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAg
aWYgKCFtX2Nsb3NlZCkKKyAgICAgICAgICAgICAgICAgICAgbV9oYW5kbGUtPmNsb3NlKCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y2hhciBtc2dCeXRlID0gKnA7CisgICAgICAgICAgICBsZW5ndGggPSBsZW5ndGggKiAxMjggKyAo
bXNnQnl0ZSAmIDB4N2YpOworICAgICAgICAgICAgKytwOworICAgICAgICAgICAgaWYgKCEobXNn
Qnl0ZSAmIDB4ODApKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGlmIChwICsgbGVuZ3RoIDwgZW5kKSB7CisgICAgICAgICAgICBwICs9IGxlbmd0aDsKKyAgICAg
ICAgICAgIG5leHRGcmFtZSA9IHA7CisgICAgICAgICAgICBza2lwQnVmZmVyKG5leHRGcmFtZSAt
IG1fYnVmZmVyKTsKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZUVycm9y
KCk7CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXI7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIG1zZ1N0YXJ0ID0gcDsKKyAgICB3
aGlsZSAocCA8IGVuZCAmJiAqcCAhPSAnXHhmZicpCisgICAgICAgICsrcDsKKyAgICBpZiAocCA8
IGVuZCAmJiAqcCA9PSAnXHhmZicpIHsKKyAgICAgICAgaW50IG1zZ0xlbmd0aCA9IHAgLSBtc2dT
dGFydDsKKyAgICAgICAgKytwOworICAgICAgICBuZXh0RnJhbWUgPSBwOworICAgICAgICBpZiAo
ZnJhbWVCeXRlID09IDB4MDApIHsKKyAgICAgICAgICAgIFN0cmluZyBtc2cgPSBTdHJpbmc6OmZy
b21VVEY4KG1zZ1N0YXJ0LCBtc2dMZW5ndGgpOworICAgICAgICAgICAgc2tpcEJ1ZmZlcihuZXh0
RnJhbWUgLSBtX2J1ZmZlcik7CisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3Nh
Z2UobXNnKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNraXBCdWZmZXIobmV4dEZy
YW1lIC0gbV9idWZmZXIpOworICAgICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVNZXNzYWdl
RXJyb3IoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9idWZmZXI7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKwogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmICAv
LyBFTkFCTEUoV0VCX1NPQ0tFVFMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV2Vi
U29ja2V0Q2hhbm5lbC5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaApp
bmRleCA0MWEwM2FiZGE1Mzk3ZjU2YjE4MmEzYTI3YjcxMTM5YTg0Y2U1YWFjLi4wY2I0MTFkOWUy
ODczMmMxYWQzNDEzYzkwM2MwNGUwNmQxMjU0NTRlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRDaGFubmVsLmgKQEAgLTM1LDggKzM1LDEwIEBACiAKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0SGFuZHNoYWtlLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNTcsNiArNTksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzY29u
bmVjdCgpOyAvLyBXaWxsIHN1cHByZXNzIGRpZENsb3NlKCkuCiAKKyAgICAgICAgdmlydHVhbCB2
b2lkIHN1c3BlbmQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOworCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRPcGVuKFNvY2tldFN0cmVhbUhhbmRsZSopOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2xvc2UoU29ja2V0U3RyZWFtSGFuZGxlKik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlRGF0YShTb2NrZXRTdHJlYW1IYW5kbGUqLCBjb25zdCBjaGFyKiwgaW50
KTsKQEAgLTc2LDYgKzgxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIGJvb2wg
YXBwZW5kVG9CdWZmZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbik7CiAgICAgICAgIHZvaWQg
c2tpcEJ1ZmZlcihpbnQgbGVuKTsKKyAgICAgICAgYm9vbCBwcm9jZXNzQnVmZmVyKCk7CiAKICAg
ICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0OwogICAgICAgICBXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50KiBtX2NsaWVudDsKQEAgLTgzLDYgKzg5LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gbV9oYW5kbGU7CiAg
ICAgICAgIGNoYXIqIG1fYnVmZmVyOwogICAgICAgICBpbnQgbV9idWZmZXJTaXplOworCisgICAg
ICAgIGJvb2wgbV9zdXNwZW5kZWQ7CisgICAgICAgIGJvb2wgbV9jbG9zZWQ7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgbV91bmhhbmRsZWRCdWZmZXJlZEFtb3VudDsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAppbmRleCAxZWU1ZjE4NDExNzA1NGJlZWI4MmM3
MTllNzc0NTRjMDVjY2U4MGQ2Li5hZDJmZDY1MGNiN2IyYTViMmJkNDc5NmYwZGZiMzhmOTlhZTQ4
Nzc0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuY3BwCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTk0LDYgKzk0LDE4IEBAIHZvaWQgV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OmRpc2Nvbm5lY3QoKQogICAgIG1fYnJpZGdlLmNsZWFyKCk7
CiB9CiAKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OnN1c3BlbmQoKQor
eworICAgIGlmIChtX2JyaWRnZSkKKyAgICAgICAgbV9icmlkZ2UtPnN1c3BlbmQoKTsKK30KKwor
dm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6cmVzdW1lKCkKK3sKKyAgICBp
ZiAobV9icmlkZ2UpCisgICAgICAgIG1fYnJpZGdlLT5yZXN1bWUoKTsKK30KKwogV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OlBlZXIoUmVmUHRyPFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gY2xpZW50V3JhcHBlciwgV29ya2VyTG9hZGVyUHJv
eHkmIGxvYWRlclByb3h5LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIHRhc2tNb2RlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wp
CiAgICAgOiBtX3dvcmtlckNsaWVudFdyYXBwZXIoY2xpZW50V3JhcHBlcikKICAgICAsIG1fbG9h
ZGVyUHJveHkobG9hZGVyUHJveHkpCkBAIC0xNjYsNiArMTc4LDIyIEBAIHZvaWQgV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpc2Nvbm5lY3QoKQogICAgIG1fbWFpbldl
YlNvY2tldENoYW5uZWwgPSAwOwogfQogCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpQZWVyOjpzdXNwZW5kKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
bWFpbldlYlNvY2tldENoYW5uZWwtPnN1c3BlbmQoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6cmVzdW1lKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fbWFpbldlYlNvY2tldENoYW5uZWwtPnJlc3VtZSgpOworfQorCiBzdGF0aWMg
dm9pZCB3b3JrZXJDb250ZXh0RGlkQ29ubmVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3Jr
ZXJDbGllbnRXcmFwcGVyKQogewogICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+
aXNXb3JrZXJDb250ZXh0KCkpOwpAQCAtMzMzLDYgKzM2MSwzNiBAQCB2b2lkIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OmRpc2Nvbm5lY3QoKQogICAgIG1fd29ya2Vy
Q29udGV4dCA9IDA7CiB9CiAKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6
Om1haW5UaHJlYWRTdXNwZW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBlZXIq
IHBlZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VE
KGNvbnRleHQsIGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgQVNTRVJUKHBlZXIpOworCisg
ICAgcGVlci0+c3VzcGVuZCgpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpCcmlkZ2U6OnN1c3BlbmQoKQoreworICAgIEFTU0VSVChtX3BlZXIpOworICAgIG1f
bG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJldvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkU3VzcGVuZCwgbV9wZWVyKSk7Cit9
CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRSZXN1
bWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGVlciogcGVlcikKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4
dC0+aXNEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQocGVlcik7CisKKyAgICBwZWVyLT5yZXN1bWUo
KTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpy
ZXN1bWUoKQoreworICAgIEFTU0VSVChtX3BlZXIpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRh
c2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjptYWluVGhyZWFkUmVzdW1lLCBtX3BlZXIpKTsKK30KKwogdm9pZCBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpjbGVhckNsaWVudFdyYXBwZXIoKQogewog
ICAgIG1fd29ya2VyQ2xpZW50V3JhcHBlci0+Y2xlYXJDbGllbnQoKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIGIvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKaW5kZXgg
NzZkMGI4YzA5YzhlN2U0MTU1MTgwNWVhNzYyOTc3ZmE3NDUxNzM5MC4uMzY2ZTRmYTdjMGQ1ZjJh
ZTRiMzhmYTAxODNhNzdlNjg2MjZhMzJlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJzb2NrZXRz
L1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKKysrIGIvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKQEAgLTY0LDYgKzY0LDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0
KCk7IC8vIFdpbGwgc3VwcHJlc3MgZGlkQ2xvc2UoKS4KKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVu
ZCgpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291
bnRlZDxXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD46OmRlcmVmOwpAQCAtODgsNiAr
OTAsOCBAQCBwcml2YXRlOgogICAgICAgICB2b2lkIGJ1ZmZlcmVkQW1vdW50KCk7CiAgICAgICAg
IHZvaWQgY2xvc2UoKTsKICAgICAgICAgdm9pZCBkaXNjb25uZWN0KCk7CisgICAgICAgIHZvaWQg
c3VzcGVuZCgpOworICAgICAgICB2b2lkIHJlc3VtZSgpOwogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRDb25uZWN0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpOwpAQCAtMTE1LDYgKzExOSw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKTsKICAgICAgICAgdm9pZCBjbG9zZSgp
OwogICAgICAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKKyAgICAgICAgdm9pZCBzdXNwZW5kKCk7Cisg
ICAgICAgIHZvaWQgcmVzdW1lKCk7CiAKICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxCcmlkZ2U+
OjpyZWY7CiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8QnJpZGdlPjo6ZGVyZWY7CkBAIC0xNDcs
NiArMTUzLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQnVmZmVyZWRB
bW91bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBlZXIqKTsKICAgICBzdGF0aWMgdm9pZCBt
YWluVGhyZWFkQ2xvc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBlZXIqKTsKICAgICBzdGF0
aWMgdm9pZCBtYWluVGhyZWFkRGVzdHJveShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGVlciop
OworICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRTdXNwZW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQZWVyKik7CisgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZFJlc3VtZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGVlciopOwogCiAgICAgUmVmUHRyPFdvcmtlckNvbnRleHQ+IG1fd29y
a2VyQ29udGV4dDsKICAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmFwcGVyPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55521</attachid>
            <date>2010-05-09 23:29:47 -0700</date>
            <delta_ts>2010-05-10 16:28:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-38171-20100509232945.patch</filename>
            <type>text/plain</type>
            <size>24755</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTRiNzdiYWIzMzZmMjcxOGMxNmNhZTM5NDA4N2E5ZmZkNGI2ZWMzZC4uYWU0YzQ3NDg1MGU2YWQ1
ZmExMjQwZmFkZjMxOTRiYmEyZTQ3NjI3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2OCBAQAorMjAxMC0wNS0wOSAgRnVt
aXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJTb2NrZXQgbmVlZHMgdG8gc3VzcGVuZC9yZXN1
bWUgYXMgQWN0aXZlIERPTSBvYmplY3QuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zODE3MQorCisgICAgICAgIEltcGxlbWVudCBzdXNwZW5kKCkvcmVz
dW1lKCkgaW4gV2ViU29ja2V0IGFuZCBXZWJTb2NrZXRDaGFubmVsLgorICAgICAgICBXaGlsZSBX
ZWJTb2NrZXRDaGFubmVsIGlzIHN1c3BlbmRlZCwgaXQgb25seSBhZGRzIHJlY2VpdmVkIGRhdGEg
aW4gbV9idWZmZXIKKyAgICAgICAgb3IgcmVjb3JkIHRoZSBoYW5kbGUgd2FzIGNsb3NlZCwgYW5k
IHJlcG9ydCBubyBldmVudCB0byBXZWJTb2NrZXQuCisgICAgICAgIFdoZW4gcmVzdW1lZCwgaXQg
d2lsbCBwcm9jZXNzIGJ1ZmZlciBvciBoYW5kbGUgY2xvc2luZy4KKyAgICAgICAgU2luY2Ugc3Vz
cGVuZC9yZXN1bWUgd291bGQgYmUgY2FsbGVkIHdoaWxlIHByb2Nlc3NpbmcgSmF2YVNjcmlwdCBl
dmVudCBoYW5kbGVyIChlLmcuIGJlZm9yZS9hZnRlciBhbGVydCgpKSwgV2ViU29ja2V0Q2hhbm5l
bCBtZXRob2QgdGhhdCB3b3VsZCBmaXJlIGFuIGV2ZW50IG5lZWQgdG8gYmUgcmVlbnRyYW50Lgor
ICAgICAgICBTbywgV2ViU29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1ZmZlcigpIGNhbGwgV2ViU29j
a2V0IHRvIGZpcmUgYW4gZXZlbnQgYXQgbW9zdCBvbmNlIGFuZCBza2lwcyBidWZmZXIgYmVmb3Jl
IHRoZSBjYWxsaW5nLAorICAgICAgICBzbyB0aGF0IG5leHQgY2FsbCBvZiBwcm9jZXNzQnVmZmVy
KCkgd291bGQgcHJvY2VzcyB0aGUgbmV4dCBmcmFtZS4KKworICAgICAgICAqIHdlYnNvY2tldHMv
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDoKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1RocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oOgorICAgICAgICAoV2ViQ29yZTo6
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRDb25uZWN0KToKKyAg
ICAgICAgICBNYXJrIGNoYW5uZWwgaXMgb3BlbmVkLCBhbmQgcHJvY2VzcyBwZW5kaW5nIGV2ZW50
cyBpZiBub3Qgc3VzcGVuZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICAgUHVz
aCBtZXNzYWdlIGJhY2sgaW4gcGVuZGluZyBxdWV1ZSwgYW5kIHByb2Nlc3MgcGVuZGluZyBldmVu
dHMgaWYgbm90IHN1c3BlbmRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6ZGlkQ2xvc2UpOgorICAgICAgICAgIE1hcmsgY2hhbm5l
bCBpcyBjbG9zZWQsIGFuZCBwcm9jZXNzIHBlbmRpbmcgZXZlbnRzIGlmIG5vdCBzdXNwZW5kZWQu
CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXI6OnN1c3BlbmQpOgorICAgICAgICAgIE1hcmsgc3VzcGVuZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpyZXN1bWUpOgorICAg
ICAgICAgIFVubWFyayBzdXNwZW5kZWQsIGFuZCBwcm9jZXNzIHBlbmRpbmcgZXZlbnRzLgorICAg
ICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpwcm9jZXNzUGVuZGlu
Z0V2ZW50cyk6CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViU29ja2V0OjpjYW5TdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnJlc3VtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpZENsb3NlKToKKyAgICAgICAgKiB3ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5oOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpXZWJTb2NrZXRDaGFubmVs
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OmNvbm5lY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXRDaGFubmVsOjpidWZmZXJlZEFtb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJT
b2NrZXRDaGFubmVsOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVs
OjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OnJlc3VtZSk6
CisgICAgICAgICBXaGVuIHJlc3VtZWQsIGl0IHdpbGwgcHJvY2VzcyBidWZmZXIgYW5kCisgICAg
ICAgICBoYW5kbGUgY2xvc2luZyBpZiBoYW5kbGUgd2FzIGFscmVhZHkgY2xvc2VkIHdoaWxlIHN1
c3BlbmRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OmRpZENsb3NlKToK
KyAgICAgICAgIElmIHN1c3BlbmRlZCwgcmVjb3JkIHVuaGFuZGxlZCBidWZmZXJlZEFtb3VudCBh
bmQgc2V0IG1fY2xvc2VkIHRydWUsIHNvIHRoYXQgY2xvc2luZyB3aWxsIGJlIHByb2Nlc3NlZCB3
aGVuIHJlc3VtZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpkaWRSZWNl
aXZlRGF0YSk6CisgICAgICAgICBBZGQgcmVjZWl2ZWQgZGF0YSBpbiBidWZmZXIgYW5kIHByb2Nl
c3MgYnVmZmVyIHdoaWxlIGl0IGlzIG5vdCBzdXNwZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJTb2NrZXRDaGFubmVsOjpwcm9jZXNzQnVmZmVyKToKKyAgICAgICAgIFByb2Nlc3MgaGFuZHNo
YWtlIGhlYWRlciBvciBvbmUgZnJhbWUgbWVzc2FnZS4KKyAgICAgICAgIFJldHVybiB0cnVlIGlm
IHRoZXJlIGFyZSBtb3JlIGRhdGEgdG8gYmUgcHJvY2Vzc2VkLgorICAgICAgICAgUmV0dXJuIGZh
bHNlIG90aGVyd2lzZSAoZS5nLiBpbmNvbXBsZXRlIGhhbmRzaGFrZSBoZWFkZXIgb3IgaW5jb21w
bGV0ZSBmcmFtZSkuCisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmg6Cisg
ICAgICAgICogd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6c3Vz
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpQZWVyOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6V29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRTdXNwZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnN1
c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6Om1haW5UaHJlYWRSZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6cmVzdW1lKToKKyAgICAgICAgKiB3ZWJzb2NrZXRz
L1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmg6CisKIDIwMTAtMDUtMTAgIElseWEg
VGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE5vdCByZXZpZXdl
ZDogcm9sbGJhY2sgdGhlIGNvbW1pdCByNTkwNjIKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29j
a2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1Ro
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKaW5kZXggNzRlYTRiNGI5YTYyMzY0NzMxMDM1Y2Qz
M2IzNmExZmU2NmY3ODNmMS4uY2JlNmUxNDU4MDM0ZTBkOGNhNzBmMTgzNDYzYjhkYjRlYWJiYTEx
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsLmgKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
LmgKQEAgLTUzLDYgKzUzLDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCgpID0gMDsgLy8gV2lsbCBzdXBwcmVzcyBk
aWRDbG9zZSgpLgogCisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHJlc3VtZSgpID0gMDsKKwogICAgIHZvaWQgcmVmKCkgeyByZWZUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbCgpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsgZGVyZWZUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbCgpOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9UaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaCBiL1dlYkNvcmUvd2Vic29ja2V0
cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaAppbmRleCAyOGQ2MTI5
NGQwYWViODBhZGU3ZjgwMDE0YTdmNzc4YmNjZDQ1NGE3Li5iYzM2YzFiYTVlYjU1NzkxYTkyNzhm
ZDkxODdhNjNjZWQ1MTU3MzI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgKKysrIGIvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oCkBAIC0zMyw5ICsz
MywxMSBAQAogCiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQogCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKICNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsQ2xpZW50LmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg5LDIwICs5MSwzNSBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGRpZENvbm5lY3QoKQogICAgIHsKLSAgICAgICAgaWYgKG1f
Y2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPmRpZENvbm5lY3QoKTsKKyAgICAgICAgbV9w
ZW5kaW5nQ29ubmVjdGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKCFtX3N1c3BlbmRlZCkKKyAgICAg
ICAgICAgIHByb2Nlc3NQZW5kaW5nRXZlbnRzKCk7CiAgICAgfQogCiAgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZykKICAgICB7Ci0gICAgICAgIGlmIChtX2NsaWVu
dCkKLSAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZShtc2cpOworICAgICAg
ICBtX3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQobXNnKTsKKyAgICAgICAgaWYgKCFtX3N1c3BlbmRl
ZCkKKyAgICAgICAgICAgIHByb2Nlc3NQZW5kaW5nRXZlbnRzKCk7CiAgICAgfQogCiAgICAgdm9p
ZCBkaWRDbG9zZSh1bnNpZ25lZCBsb25nIHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50KQogICAgIHsK
LSAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgbV9jbGllbnQtPmRpZENsb3NlKHVu
aGFuZGxlZEJ1ZmZlcmVkQW1vdW50KTsKKyAgICAgICAgbV9wZW5kaW5nQ2xvc2VkID0gdHJ1ZTsK
KyAgICAgICAgbV9idWZmZXJlZEFtb3VudCA9IHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50OworICAg
ICAgICBpZiAoIW1fc3VzcGVuZGVkKQorICAgICAgICAgICAgcHJvY2Vzc1BlbmRpbmdFdmVudHMo
KTsKKyAgICB9CisKKyAgICB2b2lkIHN1c3BlbmQoKQorICAgIHsKKyAgICAgICAgbV9zdXNwZW5k
ZWQgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVzdW1lKCkKKyAgICB7CisgICAgICAgIG1f
c3VzcGVuZGVkID0gZmFsc2U7CisgICAgICAgIHByb2Nlc3NQZW5kaW5nRXZlbnRzKCk7CiAgICAg
fQogCiBwcm90ZWN0ZWQ6CkBAIC0xMTEsMTMgKzEyOCw0MyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
ICwgbV9zeW5jTWV0aG9kRG9uZShmYWxzZSkKICAgICAgICAgLCBtX3NlbnQoZmFsc2UpCiAgICAg
ICAgICwgbV9idWZmZXJlZEFtb3VudCgwKQorICAgICAgICAsIG1fc3VzcGVuZGVkKGZhbHNlKQor
ICAgICAgICAsIG1fcGVuZGluZ0Nvbm5lY3RlZChmYWxzZSkKKyAgICAgICAgLCBtX3BlbmRpbmdD
bG9zZWQoZmFsc2UpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcHJvY2Vzc1BlbmRpbmdFdmVu
dHMoKQogICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3N1c3BlbmRlZCk7CisgICAgICAgIGlmICht
X3BlbmRpbmdDb25uZWN0ZWQpIHsKKyAgICAgICAgICAgIG1fcGVuZGluZ0Nvbm5lY3RlZCA9IGZh
bHNlOworICAgICAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAgICAgIG1fY2xpZW50
LT5kaWRDb25uZWN0KCk7CisgICAgICAgIH0KKworICAgICAgICBWZWN0b3I8U3RyaW5nPiBtZXNz
YWdlczsKKyAgICAgICAgbWVzc2FnZXMuc3dhcChtX3BlbmRpbmdNZXNzYWdlcyk7CisgICAgICAg
IGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtZXNzYWdlcy5iZWdp
bigpOyBpdGVyICE9IG1lc3NhZ2VzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGlmICht
X2NsaWVudCkKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2UoKml0
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fcGVuZGluZ0Nsb3NlZCkgeworICAgICAg
ICAgICAgbV9wZW5kaW5nQ2xvc2VkID0gZmFsc2U7CisgICAgICAgICAgICBpZiAobV9jbGllbnQp
CisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZENsb3NlKG1fYnVmZmVyZWRBbW91bnQpOwor
ICAgICAgICB9CiAgICAgfQogCiAgICAgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogbV9jbGllbnQ7
CiAgICAgYm9vbCBtX3N5bmNNZXRob2REb25lOwogICAgIGJvb2wgbV9zZW50OwogICAgIHVuc2ln
bmVkIGxvbmcgbV9idWZmZXJlZEFtb3VudDsKKyAgICBib29sIG1fc3VzcGVuZGVkOworICAgIGJv
b2wgbV9wZW5kaW5nQ29ubmVjdGVkOworICAgIFZlY3RvcjxTdHJpbmc+IG1fcGVuZGluZ01lc3Nh
Z2VzOworICAgIGJvb2wgbV9wZW5kaW5nQ2xvc2VkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCBhODIwYzJhNjM4NjU1MjIzZWQxNWUx
ZDA2OGU2NTE1ZGE4MjFiNjVjLi41NjFiODIxODA4MTJmMWYwZThkZDJhMmM4NjdmYjVmMzgzM2E4
ODc0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9X
ZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtMjEyLDYgKzIxMiwyMyBAQCB2b2lk
IFdlYlNvY2tldDo6Y29udGV4dERlc3Ryb3llZCgpCiAgICAgQWN0aXZlRE9NT2JqZWN0Ojpjb250
ZXh0RGVzdHJveWVkKCk7CiB9CiAKK2Jvb2wgV2ViU29ja2V0OjpjYW5TdXNwZW5kKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gIW1fY2hhbm5lbDsKK30KKwordm9pZCBXZWJTb2NrZXQ6OnN1c3BlbmQo
KQoreworICAgIGlmIChtX2NoYW5uZWwpCisgICAgICAgIG1fY2hhbm5lbC0+c3VzcGVuZCgpOwor
fQorCit2b2lkIFdlYlNvY2tldDo6cmVzdW1lKCkKK3sKKyAgICBpZiAobV9jaGFubmVsKQorICAg
ICAgICBtX2NoYW5uZWwtPnJlc3VtZSgpOworfQorCiB2b2lkIFdlYlNvY2tldDo6c3RvcCgpCiB7
CiAgICAgYm9vbCBwZW5kaW5nID0gaGFzUGVuZGluZ0FjdGl2aXR5KCk7CkBAIC0yNTksNiArMjc2
LDggQEAgdm9pZCBXZWJTb2NrZXQ6OmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IoKQogdm9pZCBXZWJT
b2NrZXQ6OmRpZENsb3NlKHVuc2lnbmVkIGxvbmcgdW5oYW5kbGVkQnVmZmVyZWRBbW91bnQpCiB7
CiAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXQgJXAgZGlkQ2xvc2UiLCB0aGlzKTsKKyAgICBp
ZiAoIW1fY2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOwogICAgIG1fc3RhdGUgPSBDTE9TRUQ7CiAg
ICAgbV9idWZmZXJlZEFtb3VudEFmdGVyQ2xvc2UgKz0gdW5oYW5kbGVkQnVmZmVyZWRBbW91bnQ7
CiAgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0
LmgKaW5kZXggZTkxNzk2ZjE0NTNkNTY0Y2E2M2MwMTE1OTU5ZjE2MDc4NDhmMjA5Zi4uYjIxMDJk
MTRhOGMzMTQzMTU5MGNlYTc4MGU2ZTgyZGU0YTczZmU1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldC5oCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQu
aApAQCAtODQsNiArODQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CisgICAgICAgIHZpcnR1
YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5k
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IHN0b3AoKTsKIAogICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldD46OnJlZjsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcCBiL1dlYkNv
cmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcAppbmRleCAwODgwZTQ1NTQ1ZWExMTY0
NTI0OGUwYTI2MWViODA1OTE5NDJhNzUxLi45Y2EyYjIwMzY5NmY2ZDM3OTUxYWQzMWY3YzIwODYz
NTY5NjQ5ZjQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5l
bC5jcHAKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwCkBAIC01
OCw2ICs1OCw5IEBAIFdlYlNvY2tldENoYW5uZWw6OldlYlNvY2tldENoYW5uZWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgV2ViU29ja2V0Q2hhCiAgICAgLCBtX2hhbmRzaGFrZSh1
cmwsIHByb3RvY29sLCBjb250ZXh0KQogICAgICwgbV9idWZmZXIoMCkKICAgICAsIG1fYnVmZmVy
U2l6ZSgwKQorICAgICwgbV9zdXNwZW5kZWQoZmFsc2UpCisgICAgLCBtX2Nsb3NlZChmYWxzZSkK
KyAgICAsIG1fdW5oYW5kbGVkQnVmZmVyZWRBbW91bnQoMCkKIHsKIH0KIApAQCAtNzAsNiArNzMs
NyBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmNvbm5lY3QoKQogewogICAgIExPRyhOZXR3b3Jr
LCAiV2ViU29ja2V0Q2hhbm5lbCAlcCBjb25uZWN0IiwgdGhpcyk7CiAgICAgQVNTRVJUKCFtX2hh
bmRsZSk7CisgICAgQVNTRVJUKCFtX3N1c3BlbmRlZCk7CiAgICAgbV9oYW5kc2hha2UucmVzZXQo
KTsKICAgICByZWYoKTsKICAgICBtX2hhbmRsZSA9IFNvY2tldFN0cmVhbUhhbmRsZTo6Y3JlYXRl
KG1faGFuZHNoYWtlLnVybCgpLCB0aGlzKTsKQEAgLTc5LDYgKzgzLDcgQEAgYm9vbCBXZWJTb2Nr
ZXRDaGFubmVsOjpzZW5kKGNvbnN0IFN0cmluZyYgbXNnKQogewogICAgIExPRyhOZXR3b3JrLCAi
V2ViU29ja2V0Q2hhbm5lbCAlcCBzZW5kICVzIiwgdGhpcywgbXNnLnV0ZjgoKS5kYXRhKCkpOwog
ICAgIEFTU0VSVChtX2hhbmRsZSk7CisgICAgQVNTRVJUKCFtX3N1c3BlbmRlZCk7CiAgICAgVmVj
dG9yPGNoYXI+IGJ1ZjsKICAgICBidWYuYXBwZW5kKCdcMCcpOyAgLy8gZnJhbWUgdHlwZQogICAg
IGJ1Zi5hcHBlbmQobXNnLnV0ZjgoKS5kYXRhKCksIG1zZy51dGY4KCkubGVuZ3RoKCkpOwpAQCAt
OTAsMTIgKzk1LDE0IEBAIHVuc2lnbmVkIGxvbmcgV2ViU29ja2V0Q2hhbm5lbDo6YnVmZmVyZWRB
bW91bnQoKSBjb25zdAogewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAlcCBi
dWZmZXJlZEFtb3VudCIsIHRoaXMpOwogICAgIEFTU0VSVChtX2hhbmRsZSk7CisgICAgQVNTRVJU
KCFtX3N1c3BlbmRlZCk7CiAgICAgcmV0dXJuIG1faGFuZGxlLT5idWZmZXJlZEFtb3VudCgpOwog
fQogCiB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmNsb3NlKCkKIHsKICAgICBMT0coTmV0d29yaywg
IldlYlNvY2tldENoYW5uZWwgJXAgY2xvc2UiLCB0aGlzKTsKKyAgICBBU1NFUlQoIW1fc3VzcGVu
ZGVkKTsKICAgICBpZiAobV9oYW5kbGUpCiAgICAgICAgIG1faGFuZGxlLT5jbG9zZSgpOyAgLy8g
d2lsbCBjYWxsIGRpZENsb3NlKCkKIH0KQEAgLTExMCw2ICsxMTcsMjIgQEAgdm9pZCBXZWJTb2Nr
ZXRDaGFubmVsOjpkaXNjb25uZWN0KCkKICAgICAgICAgbV9oYW5kbGUtPmNsb3NlKCk7CiB9CiAK
K3ZvaWQgV2ViU29ja2V0Q2hhbm5lbDo6c3VzcGVuZCgpCit7CisgICAgbV9zdXNwZW5kZWQgPSB0
cnVlOworfQorCit2b2lkIFdlYlNvY2tldENoYW5uZWw6OnJlc3VtZSgpCit7CisgICAgbV9zdXNw
ZW5kZWQgPSBmYWxzZTsKKyAgICBSZWZQdHI8V2ViU29ja2V0Q2hhbm5lbD4gcHJvdGVjdCh0aGlz
KTsgLy8gVGhlIGNsaWVudCBjYW4gY2xvc2UgdGhlIGNoYW5uZWwsIHBvdGVudGlhbGx5IHJlbW92
aW5nIHRoZSBsYXN0IHJlZmVyZW5jZS4KKyAgICB3aGlsZSAoIW1fc3VzcGVuZGVkICYmIG1fY2xp
ZW50ICYmIG1fYnVmZmVyKQorICAgICAgICBpZiAoIXByb2Nlc3NCdWZmZXIoKSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIGlmICghbV9zdXNwZW5kZWQgJiYgbV9jbGllbnQgJiYgbV9jbG9zZWQg
JiYgbV9oYW5kbGUpCisgICAgICAgIGRpZENsb3NlKG1faGFuZGxlLmdldCgpKTsKK30KKwogdm9p
ZCBXZWJTb2NrZXRDaGFubmVsOjpkaWRPcGVuKFNvY2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQog
ewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0Q2hhbm5lbCAlcCBkaWRPcGVuIiwgdGhpcyk7
CkBAIC0xMjcsMTQgKzE1MCwxNyBAQCB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmRpZENsb3NlKFNv
Y2tldFN0cmVhbUhhbmRsZSogaGFuZGxlKQogewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0
Q2hhbm5lbCAlcCBkaWRDbG9zZSIsIHRoaXMpOwogICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBo
YW5kbGUgPT0gbV9oYW5kbGUgfHwgIW1faGFuZGxlKTsKKyAgICBtX2Nsb3NlZCA9IHRydWU7CiAg
ICAgaWYgKG1faGFuZGxlKSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdW5oYW5kbGVkQnVmZmVy
ZWRBbW91bnQgPSBtX2hhbmRsZS0+YnVmZmVyZWRBbW91bnQoKTsKKyAgICAgICAgbV91bmhhbmRs
ZWRCdWZmZXJlZEFtb3VudCA9IG1faGFuZGxlLT5idWZmZXJlZEFtb3VudCgpOworICAgICAgICBp
ZiAobV9zdXNwZW5kZWQpCisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIFdlYlNvY2tldENo
YW5uZWxDbGllbnQqIGNsaWVudCA9IG1fY2xpZW50OwogICAgICAgICBtX2NsaWVudCA9IDA7CiAg
ICAgICAgIG1fY29udGV4dCA9IDA7CiAgICAgICAgIG1faGFuZGxlID0gMDsKICAgICAgICAgaWYg
KGNsaWVudCkKLSAgICAgICAgICAgIGNsaWVudC0+ZGlkQ2xvc2UodW5oYW5kbGVkQnVmZmVyZWRB
bW91bnQpOworICAgICAgICAgICAgY2xpZW50LT5kaWRDbG9zZShtX3VuaGFuZGxlZEJ1ZmZlcmVk
QW1vdW50KTsKICAgICB9CiAgICAgZGVyZWYoKTsKIH0KQEAgLTE1NSw4NyArMTgxLDkgQEAgdm9p
ZCBXZWJTb2NrZXRDaGFubmVsOjpkaWRSZWNlaXZlRGF0YShTb2NrZXRTdHJlYW1IYW5kbGUqIGhh
bmRsZSwgY29uc3QgY2hhciogZGEKICAgICAgICAgaGFuZGxlLT5jbG9zZSgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmIChtX2hhbmRzaGFrZS5tb2RlKCkgPT0gV2ViU29ja2V0SGFu
ZHNoYWtlOjpJbmNvbXBsZXRlKSB7Ci0gICAgICAgIGludCBoZWFkZXJMZW5ndGggPSBtX2hhbmRz
aGFrZS5yZWFkU2VydmVySGFuZHNoYWtlKG1fYnVmZmVyLCBtX2J1ZmZlclNpemUpOwotICAgICAg
ICBpZiAoaGVhZGVyTGVuZ3RoIDw9IDApCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHN3
aXRjaCAobV9oYW5kc2hha2UubW9kZSgpKSB7Ci0gICAgICAgIGNhc2UgV2ViU29ja2V0SGFuZHNo
YWtlOjpDb25uZWN0ZWQ6Ci0gICAgICAgICAgICBpZiAoIW1faGFuZHNoYWtlLnNlcnZlclNldENv
b2tpZSgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQtPmlzRG9j
dW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0
aWNfY2FzdDxEb2N1bWVudCo+KG1fY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChj
b29raWVzRW5hYmxlZChkb2N1bWVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWM7IC8vIEV4Y2VwdGlvbiAoZm9yIHNhbmRib3hlZCBkb2N1bWVudHMpIGlnbm9y
ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC0+c2V0Q29va2llKG1faGFuZHNo
YWtlLnNlcnZlclNldENvb2tpZSgpLCBlYyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBGSVhNRTogaGFuZGxl
IHNldC1jb29raWUyLgotICAgICAgICAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXRDaGFubmVs
ICVwIGNvbm5lY3RlZCIsIHRoaXMpOwotICAgICAgICAgICAgbV9jbGllbnQtPmRpZENvbm5lY3Qo
KTsKLSAgICAgICAgICAgIGlmICghbV9jbGllbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgIHdoaWxlICghbV9zdXNwZW5kZWQgJiYgbV9jbGllbnQgJiYgbV9idWZmZXIpCisgICAgICAg
IGlmICghcHJvY2Vzc0J1ZmZlcigpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAgY29ubmVj
dGlvbiBmYWlsZWQiLCB0aGlzKTsKLSAgICAgICAgICAgIGhhbmRsZS0+Y2xvc2UoKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBza2lwQnVmZmVyKGhlYWRlckxlbmd0
aCk7Ci0gICAgICAgIGlmICghbV9idWZmZXIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IExPRyhOZXR3b3JrLCAicmVtYWluaW5nIGluIHJlYWQgYnVmICV1bCIsIG1fYnVmZmVyU2l6ZSk7
Ci0gICAgfQotICAgIGlmIChtX2hhbmRzaGFrZS5tb2RlKCkgIT0gV2ViU29ja2V0SGFuZHNoYWtl
OjpDb25uZWN0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IGNoYXIqIG5leHRGcmFt
ZSA9IG1fYnVmZmVyOwotICAgIGNvbnN0IGNoYXIqIHAgPSBtX2J1ZmZlcjsKLSAgICBjb25zdCBj
aGFyKiBlbmQgPSBwICsgbV9idWZmZXJTaXplOwotICAgIHdoaWxlIChwIDwgZW5kKSB7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgZnJhbWVCeXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
KnArKyk7Ci0gICAgICAgIGlmICgoZnJhbWVCeXRlICYgMHg4MCkgPT0gMHg4MCkgewotICAgICAg
ICAgICAgaW50IGxlbmd0aCA9IDA7Ci0gICAgICAgICAgICB3aGlsZSAocCA8IGVuZCkgewotICAg
ICAgICAgICAgICAgIGlmIChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
IC8gMTI4KSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiZnJhbWUgbGVuZ3Ro
IG92ZXJmbG93ICVkIiwgbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRp
ZFJlY2VpdmVNZXNzYWdlRXJyb3IoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NsaWVu
dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAg
aGFuZGxlLT5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIGNoYXIgbXNnQnl0ZSA9ICpwOwotICAgICAgICAgICAg
ICAgIGxlbmd0aCA9IGxlbmd0aCAqIDEyOCArIChtc2dCeXRlICYgMHg3Zik7Ci0gICAgICAgICAg
ICAgICAgKytwOwotICAgICAgICAgICAgICAgIGlmICghKG1zZ0J5dGUgJiAweDgwKSkKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocCAr
IGxlbmd0aCA8IGVuZCkgewotICAgICAgICAgICAgICAgIHAgKz0gbGVuZ3RoOwotICAgICAgICAg
ICAgICAgIG5leHRGcmFtZSA9IHA7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2Vp
dmVNZXNzYWdlRXJyb3IoKTsKLSAgICAgICAgICAgICAgICBpZiAoIW1fY2xpZW50KQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIG1zZ1N0
YXJ0ID0gcDsKLSAgICAgICAgICAgIHdoaWxlIChwIDwgZW5kICYmICpwICE9ICdceGZmJykKLSAg
ICAgICAgICAgICAgICArK3A7Ci0gICAgICAgICAgICBpZiAocCA8IGVuZCAmJiAqcCA9PSAnXHhm
ZicpIHsKLSAgICAgICAgICAgICAgICBpZiAoZnJhbWVCeXRlID09IDB4MDApCi0gICAgICAgICAg
ICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZShTdHJpbmc6OmZyb21VVEY4KG1z
Z1N0YXJ0LCBwIC0gbXNnU3RhcnQpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZUVycm9yKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgICsrcDsKLSAgICAgICAgICAgICAgICBuZXh0RnJhbWUgPSBwOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHNraXBCdWZmZXIobmV4dEZyYW1lIC0gbV9idWZm
ZXIpOwogfQogCiB2b2lkIFdlYlNvY2tldENoYW5uZWw6OmRpZEZhaWwoU29ja2V0U3RyZWFtSGFu
ZGxlKiBoYW5kbGUsIGNvbnN0IFNvY2tldFN0cmVhbUVycm9yJikKQEAgLTI4MSw2ICsyMjksOTUg
QEAgdm9pZCBXZWJTb2NrZXRDaGFubmVsOjpza2lwQnVmZmVyKGludCBsZW4pCiAgICAgbWVtbW92
ZShtX2J1ZmZlciwgbV9idWZmZXIgKyBsZW4sIG1fYnVmZmVyU2l6ZSk7CiB9CiAKK2Jvb2wgV2Vi
U29ja2V0Q2hhbm5lbDo6cHJvY2Vzc0J1ZmZlcigpCit7CisgICAgQVNTRVJUKCFtX3N1c3BlbmRl
ZCk7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBBU1NFUlQobV9idWZmZXIpOworICAgIGlm
IChtX2hhbmRzaGFrZS5tb2RlKCkgPT0gV2ViU29ja2V0SGFuZHNoYWtlOjpJbmNvbXBsZXRlKSB7
CisgICAgICAgIGludCBoZWFkZXJMZW5ndGggPSBtX2hhbmRzaGFrZS5yZWFkU2VydmVySGFuZHNo
YWtlKG1fYnVmZmVyLCBtX2J1ZmZlclNpemUpOworICAgICAgICBpZiAoaGVhZGVyTGVuZ3RoIDw9
IDApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2hhbmRzaGFrZS5t
b2RlKCkgPT0gV2ViU29ja2V0SGFuZHNoYWtlOjpDb25uZWN0ZWQpIHsKKyAgICAgICAgICAgIGlm
ICghbV9oYW5kc2hha2Uuc2VydmVyU2V0Q29va2llKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fY29udGV4dC0+aXNEb2N1bWVudCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IERvY3VtZW50KiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PERvY3VtZW50Kj4obV9jb250ZXh0KTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGNvb2tpZXNFbmFibGVkKGRvY3VtZW50KSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYzsgLy8gRXhjZXB0aW9uIChmb3Ig
c2FuZGJveGVkIGRvY3VtZW50cykgaWdub3JlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGRv
Y3VtZW50LT5zZXRDb29raWUobV9oYW5kc2hha2Uuc2VydmVyU2V0Q29va2llKCksIGVjKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBoYW5kbGUgc2V0LWNvb2tpZTIuCisgICAgICAgICAgICBMT0co
TmV0d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAgY29ubmVjdGVkIiwgdGhpcyk7CisgICAgICAg
ICAgICBza2lwQnVmZmVyKGhlYWRlckxlbmd0aCk7CisgICAgICAgICAgICBtX2NsaWVudC0+ZGlk
Q29ubmVjdCgpOworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJyZW1haW5pbmcgaW4gcmVhZCBi
dWYgJXVsIiwgbV9idWZmZXJTaXplKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlcjsKKyAg
ICAgICAgfQorICAgICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldENoYW5uZWwgJXAgY29ubmVj
dGlvbiBmYWlsZWQiLCB0aGlzKTsKKyAgICAgICAgc2tpcEJ1ZmZlcihoZWFkZXJMZW5ndGgpOwor
ICAgICAgICBpZiAoIW1fY2xvc2VkKQorICAgICAgICAgICAgbV9oYW5kbGUtPmNsb3NlKCk7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG1faGFuZHNoYWtlLm1vZGUoKSAh
PSBXZWJTb2NrZXRIYW5kc2hha2U6OkNvbm5lY3RlZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uc3QgY2hhciogbmV4dEZyYW1lID0gbV9idWZmZXI7CisgICAgY29uc3QgY2hhciog
cCA9IG1fYnVmZmVyOworICAgIGNvbnN0IGNoYXIqIGVuZCA9IHAgKyBtX2J1ZmZlclNpemU7CisK
KyAgICB1bnNpZ25lZCBjaGFyIGZyYW1lQnl0ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KCpwKyspOworICAgIGlmICgoZnJhbWVCeXRlICYgMHg4MCkgPT0gMHg4MCkgeworICAgICAgICBp
bnQgbGVuZ3RoID0gMDsKKyAgICAgICAgd2hpbGUgKHAgPCBlbmQpIHsKKyAgICAgICAgICAgIGlm
IChsZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpIC8gMTI4KSB7CisgICAg
ICAgICAgICAgICAgTE9HKE5ldHdvcmssICJmcmFtZSBsZW5ndGggb3ZlcmZsb3cgJWQiLCBsZW5n
dGgpOworICAgICAgICAgICAgICAgIHNraXBCdWZmZXIocCArIGxlbmd0aCAtIG1fYnVmZmVyKTsK
KyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigpOworICAg
ICAgICAgICAgICAgIGlmICghbV9jbGllbnQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBpZiAoIW1fY2xvc2VkKQorICAgICAgICAgICAgICAgICAg
ICBtX2hhbmRsZS0+Y2xvc2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBjaGFyIG1zZ0J5dGUgPSAqcDsKKyAgICAgICAgICAgIGxl
bmd0aCA9IGxlbmd0aCAqIDEyOCArIChtc2dCeXRlICYgMHg3Zik7CisgICAgICAgICAgICArK3A7
CisgICAgICAgICAgICBpZiAoIShtc2dCeXRlICYgMHg4MCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHAgKyBsZW5ndGggPCBlbmQpIHsKKyAgICAgICAg
ICAgIHAgKz0gbGVuZ3RoOworICAgICAgICAgICAgbmV4dEZyYW1lID0gcDsKKyAgICAgICAgICAg
IHNraXBCdWZmZXIobmV4dEZyYW1lIC0gbV9idWZmZXIpOworICAgICAgICAgICAgbV9jbGllbnQt
PmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlcjsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3QgY2hh
ciogbXNnU3RhcnQgPSBwOworICAgIHdoaWxlIChwIDwgZW5kICYmICpwICE9ICdceGZmJykKKyAg
ICAgICAgKytwOworICAgIGlmIChwIDwgZW5kICYmICpwID09ICdceGZmJykgeworICAgICAgICBp
bnQgbXNnTGVuZ3RoID0gcCAtIG1zZ1N0YXJ0OworICAgICAgICArK3A7CisgICAgICAgIG5leHRG
cmFtZSA9IHA7CisgICAgICAgIGlmIChmcmFtZUJ5dGUgPT0gMHgwMCkgeworICAgICAgICAgICAg
U3RyaW5nIG1zZyA9IFN0cmluZzo6ZnJvbVVURjgobXNnU3RhcnQsIG1zZ0xlbmd0aCk7CisgICAg
ICAgICAgICBza2lwQnVmZmVyKG5leHRGcmFtZSAtIG1fYnVmZmVyKTsKKyAgICAgICAgICAgIG1f
Y2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZShtc2cpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgc2tpcEJ1ZmZlcihuZXh0RnJhbWUgLSBtX2J1ZmZlcik7CisgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcigpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBtX2J1ZmZlcjsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9ICAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYgIC8vIEVOQUJMRShXRUJfU09DS0VUUykKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmggYi9XZWJDb3JlL3dlYnNvY2tl
dHMvV2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4IDQxYTAzYWJkYTUzOTdmNTZiMTgyYTNhMjdiNzEx
MzlhODRjZTVhYWMuLjBjYjQxMWQ5ZTI4NzMyYzFhZDM0MTNjOTAzYzA0ZTA2ZDEyNTQ1NGUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmgKKysrIGIvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaApAQCAtMzUsOCArMzUsMTAgQEAKIAog
I2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgogI2luY2x1ZGUgIlRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJXZWJT
b2NrZXRIYW5kc2hha2UuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Nyw2ICs1OSw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCk7IC8vIFdpbGwgc3VwcHJlc3MgZGlkQ2xvc2Uo
KS4KIAorICAgICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOworICAgICAgICB2aXJ0dWFsIHZv
aWQgcmVzdW1lKCk7CisKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZE9wZW4oU29ja2V0U3RyZWFt
SGFuZGxlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShTb2NrZXRTdHJlYW1IYW5k
bGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFNvY2tldFN0cmVhbUhh
bmRsZSosIGNvbnN0IGNoYXIqLCBpbnQpOwpAQCAtNzYsNiArODEsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgYm9vbCBhcHBlbmRUb0J1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuKTsKICAgICAgICAgdm9pZCBza2lwQnVmZmVyKGludCBsZW4pOworICAgICAgICBib29s
IHByb2Nlc3NCdWZmZXIoKTsKIAogICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2Nv
bnRleHQ7CiAgICAgICAgIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIG1fY2xpZW50OwpAQCAtODMs
NiArODksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8U29ja2V0U3Ry
ZWFtSGFuZGxlPiBtX2hhbmRsZTsKICAgICAgICAgY2hhciogbV9idWZmZXI7CiAgICAgICAgIGlu
dCBtX2J1ZmZlclNpemU7CisKKyAgICAgICAgYm9vbCBtX3N1c3BlbmRlZDsKKyAgICAgICAgYm9v
bCBtX2Nsb3NlZDsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtX3VuaGFuZGxlZEJ1ZmZlcmVkQW1v
dW50OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9XZWJD
b3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCmluZGV4
IDFlZTVmMTg0MTE3MDU0YmVlYjgyYzcxOWU3NzQ1NGMwNWNjZTgwZDYuLmZkODY2MDQwZjEyYzZh
OGNjMjlhNjhiMjY2OGJmN2ZlNTM3YTIyMDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0
cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKKysrIGIvV2ViQ29yZS93ZWJz
b2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtOTQsNiArOTQs
MjAgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCgp
CiAgICAgbV9icmlkZ2UuY2xlYXIoKTsKIH0KIAordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6c3VzcGVuZCgpCit7CisgICAgbV93b3JrZXJDbGllbnRXcmFwcGVyLT5zdXNw
ZW5kKCk7CisgICAgaWYgKG1fYnJpZGdlKQorICAgICAgICBtX2JyaWRnZS0+c3VzcGVuZCgpOwor
fQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpyZXN1bWUoKQorewor
ICAgIG1fd29ya2VyQ2xpZW50V3JhcHBlci0+cmVzdW1lKCk7CisgICAgaWYgKG1fYnJpZGdlKQor
ICAgICAgICBtX2JyaWRnZS0+cmVzdW1lKCk7Cit9CisKIFdvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsOjpQZWVyOjpQZWVyKFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXI+IGNsaWVudFdyYXBwZXIsIFdvcmtlckxvYWRlclByb3h5JiBsb2FkZXJQcm94
eSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0YXNrTW9k
ZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQogICAgIDogbV93b3Jr
ZXJDbGllbnRXcmFwcGVyKGNsaWVudFdyYXBwZXIpCiAgICAgLCBtX2xvYWRlclByb3h5KGxvYWRl
clByb3h5KQpAQCAtMTY2LDYgKzE4MCwyMiBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsOjpQZWVyOjpkaXNjb25uZWN0KCkKICAgICBtX21haW5XZWJTb2NrZXRDaGFubmVs
ID0gMDsKIH0KIAordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6
c3VzcGVuZCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbWFp
bldlYlNvY2tldENoYW5uZWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX21haW5XZWJTb2NrZXRD
aGFubmVsLT5zdXNwZW5kKCk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OlBlZXI6OnJlc3VtZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICBpZiAoIW1fbWFpbldlYlNvY2tldENoYW5uZWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX21h
aW5XZWJTb2NrZXRDaGFubmVsLT5yZXN1bWUoKTsKK30KKwogc3RhdGljIHZvaWQgd29ya2VyQ29u
dGV4dERpZENvbm5lY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBl
cikKIHsKICAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKTsKQEAgLTMzMyw2ICszNjMsMzYgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6QnJpZGdlOjpkaXNjb25uZWN0KCkKICAgICBtX3dvcmtlckNvbnRleHQgPSAwOwog
fQogCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkU3Vz
cGVuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQZWVyKiBwZWVyKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250
ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIEFTU0VSVChwZWVyKTsKKworICAgIHBlZXItPnN1c3Bl
bmQoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdl
OjpzdXNwZW5kKCkKK3sKKyAgICBBU1NFUlQobV9wZWVyKTsKKyAgICBtX2xvYWRlclByb3h5LnBv
c3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6bWFpblRocmVhZFN1c3BlbmQsIG1fcGVlcikpOworfQorCit2b2lkIFdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkUmVzdW1lKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBlZXIqIHBlZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzRG9jdW1lbnQo
KSk7CisgICAgQVNTRVJUKHBlZXIpOworCisgICAgcGVlci0+cmVzdW1lKCk7Cit9CisKK3ZvaWQg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6cmVzdW1lKCkKK3sKKyAg
ICBBU1NFUlQobV9wZWVyKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRo
cmVhZFJlc3VtZSwgbV9wZWVyKSk7Cit9CisKIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OkJyaWRnZTo6Y2xlYXJDbGllbnRXcmFwcGVyKCkKIHsKICAgICBtX3dvcmtlckNs
aWVudFdyYXBwZXItPmNsZWFyQ2xpZW50KCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tl
dHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBiL1dlYkNvcmUvd2Vic29ja2V0
cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4IDc2ZDBiOGMwOWM4ZTdl
NDE1NTE4MDVlYTc2Mjk3N2ZhNzQ1MTczOTAuLjM2NmU0ZmE3YzBkNWYyYWU0YjM4ZmEwMTgzYTc3
ZTY4NjI2YTMyZTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbC5oCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgY2xvc2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCgpOyAvLyBXaWxsIHN1
cHByZXNzIGRpZENsb3NlKCkuCisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzdW1lKCk7CiAKICAgICB1c2luZyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsPjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8V29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+OjpkZXJlZjsKQEAgLTg4LDYgKzkwLDggQEAgcHJpdmF0
ZToKICAgICAgICAgdm9pZCBidWZmZXJlZEFtb3VudCgpOwogICAgICAgICB2b2lkIGNsb3NlKCk7
CiAgICAgICAgIHZvaWQgZGlzY29ubmVjdCgpOworICAgICAgICB2b2lkIHN1c3BlbmQoKTsKKyAg
ICAgICAgdm9pZCByZXN1bWUoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29ubmVjdCgp
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKQEAgLTExNSw2ICsxMTksOCBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBs
b25nIGJ1ZmZlcmVkQW1vdW50KCk7CiAgICAgICAgIHZvaWQgY2xvc2UoKTsKICAgICAgICAgdm9p
ZCBkaXNjb25uZWN0KCk7CisgICAgICAgIHZvaWQgc3VzcGVuZCgpOworICAgICAgICB2b2lkIHJl
c3VtZSgpOwogCiAgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8QnJpZGdlPjo6cmVmOwogICAgICAg
ICB1c2luZyBSZWZDb3VudGVkPEJyaWRnZT46OmRlcmVmOwpAQCAtMTQ3LDYgKzE1Myw4IEBAIHBy
aXZhdGU6CiAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZEJ1ZmZlcmVkQW1vdW50KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQZWVyKik7CiAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENsb3Nl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKik7CiAgICAgc3RhdGljIHZvaWQgbWFpblRo
cmVhZERlc3Ryb3koU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBlZXIqKTsKKyAgICBzdGF0aWMg
dm9pZCBtYWluVGhyZWFkU3VzcGVuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGVlciopOwor
ICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRSZXN1bWUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBlZXIqKTsKIAogICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiBtX3dvcmtlckNvbnRleHQ7CiAg
ICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gbV93b3Jr
ZXJDbGllbnRXcmFwcGVyOwo=
</data>
<flag name="review"
          id="39724"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>