<?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>145797</bug_id>
          
          <creation_ts>2015-06-09 05:42:57 -0700</creation_ts>
          <short_desc>[SOUP] Network Cache: run the IO completion handler in the given queue instead of the whole operation</short_desc>
          <delta_ts>2015-06-09 10:08:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>Gtk, Soup</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>svillar</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1100631</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-09 05:42:57 -0700</bug_when>
    <thetext>I misunderstood what the WorkQueue parameter meant in the IO channel operations. It&apos;s the queue where the completion handler should be run, not the whole operation. Since our operations are already non-blocking, we can just run the read/writes in the main thread, and schedule the completion handler in the given work queue when the operation finishes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100632</commentid>
    <comment_count>1</comment_count>
      <attachid>254561</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-09 05:44:54 -0700</bug_when>
    <thetext>Created attachment 254561
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100633</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-09 05:46:17 -0700</bug_when>
    <thetext>Attachment 254561 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:156:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:178:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:265:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100637</commentid>
    <comment_count>3</comment_count>
      <attachid>254561</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-06-09 06:09:29 -0700</bug_when>
    <thetext>Comment on attachment 254561
Patch

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

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:119
&gt; +            auto asyncData = std::unique_ptr&lt;ReadAsyncData&gt;(asyncDataPtr);

This can be just

    std::unique_ptr&lt;ReadAsyncData&gt; asyncData(asyncDataPtr);

Same for the rest of such statements.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:188
&gt; +            Data data;
&gt; +            completionHandler(data, -1);

You could probably just construct the Data object in the completionHandler call:

    completionHandler(Data(), -1);

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:191
&gt; +        g_cond_wait(&amp;condition, &amp;mutex);

Can this function be called on the main thread, with a null queue?

That would schedule the callback in the main context and continue to block the main thread in g_cond_wait(), with the callback never invoked.

&gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:223
&gt;      g_cond_wait(&amp;condition, &amp;mutex);

Same problem here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100656</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-09 08:24:22 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 254561 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=254561&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:119
&gt; &gt; +            auto asyncData = std::unique_ptr&lt;ReadAsyncData&gt;(asyncDataPtr);
&gt; 
&gt; This can be just
&gt; 
&gt;     std::unique_ptr&lt;ReadAsyncData&gt; asyncData(asyncDataPtr);
&gt; 
&gt; Same for the rest of such statements.

Ok, no much difference anyway.

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:188
&gt; &gt; +            Data data;
&gt; &gt; +            completionHandler(data, -1);
&gt; 
&gt; You could probably just construct the Data object in the completionHandler
&gt; call:
&gt; 
&gt;     completionHandler(Data(), -1);

No, that doesn&apos;t build.

no known conversion for argument 1 from ‘WebKit::NetworkCache::Data’ to ‘WebKit::NetworkCache::Data&amp;’

&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:191
&gt; &gt; +        g_cond_wait(&amp;condition, &amp;mutex);
&gt; 
&gt; Can this function be called on the main thread, with a null queue?

No this, is always called from a thread. I&apos;ll add an assert to ensure it.

&gt; That would schedule the callback in the main context and continue to block
&gt; the main thread in g_cond_wait(), with the callback never invoked.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:223
&gt; &gt;      g_cond_wait(&amp;condition, &amp;mutex);
&gt; 
&gt; Same problem here.

Yes, we definitely don&apos;t want to block the main thread ever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100657</commentid>
    <comment_count>5</comment_count>
      <attachid>254570</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-09 08:31:17 -0700</bug_when>
    <thetext>Created attachment 254570
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100659</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-09 08:34:19 -0700</bug_when>
    <thetext>Attachment 254570 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:157:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:179:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/cache/NetworkCacheIOChannelSoup.cpp:268:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100663</commentid>
    <comment_count>7</comment_count>
      <attachid>254570</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2015-06-09 08:47:57 -0700</bug_when>
    <thetext>Comment on attachment 254570
Updated patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100687</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-09 10:08:17 -0700</bug_when>
    <thetext>Committed r185365: &lt;http://trac.webkit.org/changeset/185365&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254561</attachid>
            <date>2015-06-09 05:44:54 -0700</date>
            <delta_ts>2015-06-09 08:31:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-disk-cache-io-queues.diff</filename>
            <type>text/plain</type>
            <size>11121</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZWZiYzQ2Li5jY2RmMjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTUtMDYtMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBOZXR3b3JrIENhY2hlOiBydW4gdGhlIElPIGNvbXBsZXRpb24g
aGFuZGxlciBpbiB0aGUgZ2l2ZW4gcXVldWUgaW5zdGVhZCBvZiB0aGUgd2hvbGUgb3BlcmF0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU3OTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIG1pc3Vu
ZGVyc3Rvb2Qgd2hhdCB0aGUgV29ya1F1ZXVlIHBhcmFtZXRlciBtZWFudCBpbiB0aGUgSU8KKyAg
ICAgICAgY2hhbm5lbCBvcGVyYXRpb25zLiBJdCdzIHRoZSBxdWV1ZSB3aGVyZSB0aGUgY29tcGxl
dGlvbiBoYW5kbGVyCisgICAgICAgIHNob3VsZCBiZSBydW4sIG5vdCB0aGUgd2hvbGUgb3BlcmF0
aW9uLiBTaW5jZSBvdXIgb3BlcmF0aW9ucyBhcmUKKyAgICAgICAgYWxyZWFkeSBub24tYmxvY2tp
bmcsIHdlIGNhbiBqdXN0IHJ1biB0aGUgcmVhZC93cml0ZXMgaW4gdGhlIG1haW4KKyAgICAgICAg
dGhyZWFkLCBhbmQgc2NoZWR1bGUgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBpbiB0aGUgZ2l2ZW4g
d29yaworICAgICAgICBxdWV1ZSB3aGVuIHRoZSBvcGVyYXRpb24gZmluaXNoZXMuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaDoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjppbnB1dFN0cmVhbVJlYWRSZWFkeUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6OnJlYWQpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6cmVhZFN5bmMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om91dHB1dFN0cmVhbVdyaXRlUmVhZHlDYWxsYmFj
ayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjp3cml0ZSk6CisK
IDIwMTUtMDYtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04ocjE4NTI1MSk6IFtHVEtdIHdlYmtpdF93ZWJfY29udGV4dF9z
ZXRfZGlza19jYWNoZV9kaXJlY3RvcnkoKSBkb2Vzbid0IHdvcmsgd2hlbiB1c2luZyBzaGFyZWQg
c2Vjb25kYXJ5IHByb2Nlc3MgbW9kZWwgYWZ0ZXIgcjE4NTI1MQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsLmggYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwu
aAppbmRleCBiODhhMjM4Li43YzA0MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaApAQCAtNjAs
MTIgKzYwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJT0NoYW5uZWwoY29uc3QgU3RyaW5n
JiBmaWxlUGF0aCwgSU9DaGFubmVsOjpUeXBlKTsKIAotI2lmIFVTRShTT1VQKQotICAgIHZvaWQg
cmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0YSYsIGlu
dCBlcnJvcik+KTsKLSAgICB2b2lkIHJlYWRTeW5jKHNpemVfdCBvZmZzZXQsIHNpemVfdCwgc3Rk
OjpmdW5jdGlvbjx2b2lkIChEYXRhJiwgaW50IGVycm9yKT4pOwotICAgIHZvaWQgd3JpdGUoc2l6
ZV90IG9mZnNldCwgY29uc3QgRGF0YSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVycm9yKT4p
OwotI2VuZGlmCi0KICAgICBTdHJpbmcgbV9wYXRoOwogICAgIFR5cGUgbV90eXBlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJ
T0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCmluZGV4IDgwNWJjNzQuLjExMThiODIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlP
Q2hhbm5lbFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCkBAIC0xMDIsNiArMTAyLDcgQEAgc3RhdGlj
IHZvaWQgZmlsbERhdGFGcm9tUmVhZEJ1ZmZlcihTb3VwQnVmZmVyKiByZWFkQnVmZmVyLCBzaXpl
X3Qgc2l6ZSwgRGF0YSYgZGEKIHN0cnVjdCBSZWFkQXN5bmNEYXRhIHsKICAgICBSZWZQdHI8SU9D
aGFubmVsPiBjaGFubmVsOwogICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyOworICAgIFJl
ZlB0cjxXb3JrUXVldWU+IHF1ZXVlOwogICAgIHNpemVfdCBieXRlc1RvUmVhZDsKICAgICBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcjsKICAg
ICBEYXRhIGRhdGE7CkBAIC0xMTIsMTIgKzExMywyMiBAQCBzdGF0aWMgdm9pZCBpbnB1dFN0cmVh
bVJlYWRSZWFkeUNhbGxiYWNrKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJl
cwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWFkQXN5bmNEYXRhPiBhc3luY0RhdGEoc3RhdGljX2Nh
c3Q8UmVhZEFzeW5jRGF0YSo+KHVzZXJEYXRhKSk7CiAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdf
aW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKHN0cmVhbSwgcmVzdWx0LCBudWxscHRyKTsKICAgICBp
ZiAoYnl0ZXNSZWFkID09IC0xKSB7Ci0gICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlvbkhhbmRs
ZXIoYXN5bmNEYXRhLT5kYXRhLCAtMSk7CisgICAgICAgIFdvcmtRdWV1ZSogcXVldWUgPSBhc3lu
Y0RhdGEtPnF1ZXVlLmdldCgpOworICAgICAgICBhdXRvKiBhc3luY0RhdGFQdHIgPSBhc3luY0Rh
dGEucmVsZWFzZSgpOworICAgICAgICBydW5UYXNrSW5RdWV1ZShbYXN5bmNEYXRhUHRyXSB7Cisg
ICAgICAgICAgICBhdXRvIGFzeW5jRGF0YSA9IHN0ZDo6dW5pcXVlX3B0cjxSZWFkQXN5bmNEYXRh
Pihhc3luY0RhdGFQdHIpOworICAgICAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxl
cihhc3luY0RhdGEtPmRhdGEsIC0xKTsKKyAgICAgICAgfSwgcXVldWUpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWYgKCFieXRlc1JlYWQpIHsKLSAgICAgICAgYXN5bmNEYXRhLT5j
b21wbGV0aW9uSGFuZGxlcihhc3luY0RhdGEtPmRhdGEsIDApOworICAgICAgICBXb3JrUXVldWUq
IHF1ZXVlID0gYXN5bmNEYXRhLT5xdWV1ZS5nZXQoKTsKKyAgICAgICAgYXV0byogYXN5bmNEYXRh
UHRyID0gYXN5bmNEYXRhLnJlbGVhc2UoKTsKKyAgICAgICAgcnVuVGFza0luUXVldWUoW2FzeW5j
RGF0YVB0cl0geworICAgICAgICAgICAgYXV0byBhc3luY0RhdGEgPSBzdGQ6OnVuaXF1ZV9wdHI8
UmVhZEFzeW5jRGF0YT4oYXN5bmNEYXRhUHRyKTsKKyAgICAgICAgICAgIGFzeW5jRGF0YS0+Y29t
cGxldGlvbkhhbmRsZXIoYXN5bmNEYXRhLT5kYXRhLCAwKTsKKyAgICAgICAgfSwgcXVldWUpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMjYsNyArMTM3LDEyIEBAIHN0YXRpYyB2b2lk
IGlucHV0U3RyZWFtUmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3lu
Y1Jlc3VsdCogcmVzCiAKICAgICBzaXplX3QgcGVuZGluZ0J5dGVzVG9SZWFkID0gYXN5bmNEYXRh
LT5ieXRlc1RvUmVhZCAtIGFzeW5jRGF0YS0+ZGF0YS5zaXplKCk7CiAgICAgaWYgKCFwZW5kaW5n
Qnl0ZXNUb1JlYWQpIHsKLSAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcihhc3lu
Y0RhdGEtPmRhdGEsIDApOworICAgICAgICBXb3JrUXVldWUqIHF1ZXVlID0gYXN5bmNEYXRhLT5x
dWV1ZS5nZXQoKTsKKyAgICAgICAgYXV0byogYXN5bmNEYXRhUHRyID0gYXN5bmNEYXRhLnJlbGVh
c2UoKTsKKyAgICAgICAgcnVuVGFza0luUXVldWUoW2FzeW5jRGF0YVB0cl0geworICAgICAgICAg
ICAgYXV0byBhc3luY0RhdGEgPSBzdGQ6OnVuaXF1ZV9wdHI8UmVhZEFzeW5jRGF0YT4oYXN5bmNE
YXRhUHRyKTsKKyAgICAgICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlvbkhhbmRsZXIoYXN5bmNE
YXRhLT5kYXRhLCAwKTsKKyAgICAgICAgfSwgcXVldWUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xMzcsMzggKzE1Myw0MiBAQCBzdGF0aWMgdm9pZCBpbnB1dFN0cmVhbVJlYWRSZWFk
eUNhbGxiYWNrKEdJbnB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqIHJlcwogICAgICAg
ICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGlucHV0U3RyZWFtUmVhZFJl
YWR5Q2FsbGJhY2spLCBhc3luY0RhdGEucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBJT0NoYW5uZWw6
OnJlYWQoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0
YSYsIGludCBlcnJvcik+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBJT0NoYW5uZWw6OnJlYWQo
c2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoRGF0YSYsIGludCBlcnJvcik+IGNvbXBsZXRpb25IYW5kbGVyKQogeworICAgIFJl
ZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWwodGhpcyk7CiAgICAgaWYgKCFtX2lucHV0U3RyZWFtKSB7
Ci0gICAgICAgIERhdGEgZGF0YTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgLTEp
OworICAgICAgICBydW5UYXNrSW5RdWV1ZShbY2hhbm5lbCwgY29tcGxldGlvbkhhbmRsZXJdIHsK
KyAgICAgICAgICAgIERhdGEgZGF0YTsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKGRh
dGEsIC0xKTsKKyAgICAgICAgfSwgcXVldWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgc2l6ZV90IGJ1ZmZlclNpemUgPSBzdGQ6Om1pbihzaXplLCBnRGVmYXVsdFJlYWRCdWZmZXJT
aXplKTsKICAgICB1aW50OF90KiBidWZmZXJEYXRhID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGZh
c3RNYWxsb2MoYnVmZmVyU2l6ZSkpOwogICAgIEdSZWZQdHI8U291cEJ1ZmZlcj4gYnVmZmVyID0g
YWRvcHRHUmVmKHNvdXBfYnVmZmVyX25ld193aXRoX293bmVyKGJ1ZmZlckRhdGEsIGJ1ZmZlclNp
emUsIGJ1ZmZlckRhdGEsIGZhc3RGcmVlKSk7Ci0gICAgUmVhZEFzeW5jRGF0YSogYXN5bmNEYXRh
ID0gbmV3IFJlYWRBc3luY0RhdGEgeyB0aGlzLCBidWZmZXIuZ2V0KCksIHNpemUsIGNvbXBsZXRp
b25IYW5kbGVyLCB7IH0gfTsKKyAgICBSZWFkQXN5bmNEYXRhKiBhc3luY0RhdGEgPSBuZXcgUmVh
ZEFzeW5jRGF0YSB7IHRoaXMsIGJ1ZmZlci5nZXQoKSwgcXVldWUsIHNpemUsIGNvbXBsZXRpb25I
YW5kbGVyLCB7IH0gfTsKIAogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgb2Zmc2V0LgogICAgIGdf
aW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMobV9pbnB1dFN0cmVhbS5nZXQoKSwgY29uc3RfY2FzdDxj
aGFyKj4oYnVmZmVyLT5kYXRhKSwgYnVmZmVyU2l6ZSwgR19QUklPUklUWV9ERUZBVUxULCBudWxs
cHRyLAogICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KGlucHV0
U3RyZWFtUmVhZFJlYWR5Q2FsbGJhY2spLCBhc3luY0RhdGEpOwogfQogCi12b2lkIElPQ2hhbm5l
bDo6cmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1ZSwgc3Rk
OjpmdW5jdGlvbjx2b2lkIChEYXRhJiwgaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCisv
LyBGSVhNRTogSXQgd291bGQgYmUgYmV0dGVyIHRvIGRvIHdpdGhvdXQgdGhpcy4KK3ZvaWQgSU9D
aGFubmVsOjpyZWFkU3luYyhzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBx
dWV1ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChEYXRhJiwgaW50IGVycm9yKT4gY29tcGxldGlvbkhh
bmRsZXIpCiB7CisgICAgc3RhdGljIEdNdXRleCBtdXRleDsKKyAgICBzdGF0aWMgR0NvbmQgY29u
ZGl0aW9uOworICAgIFdURjo6R011dGV4TG9ja2VyPEdNdXRleD4gbG9jayhtdXRleCk7CiAgICAg
UmVmUHRyPElPQ2hhbm5lbD4gY2hhbm5lbCh0aGlzKTsKLSAgICBydW5UYXNrSW5RdWV1ZShbY2hh
bm5lbCwgb2Zmc2V0LCBzaXplLCBjb21wbGV0aW9uSGFuZGxlcl0gewotICAgICAgICBjaGFubmVs
LT5yZWFkKG9mZnNldCwgc2l6ZSwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIH0sIHF1ZXVlKTsK
LX0KIAotLy8gRklYTUU6IEl0IHdvdWxkIGJlIGJldHRlciB0byBkbyB3aXRob3V0IHRoaXMuCi12
b2lkIElPQ2hhbm5lbDo6cmVhZFN5bmMoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsIHN0ZDo6
ZnVuY3Rpb248dm9pZCAoRGF0YSYsIGludCBlcnJvcik+IGNvbXBsZXRpb25IYW5kbGVyKQotewog
ICAgIGlmICghbV9pbnB1dFN0cmVhbSkgewotICAgICAgICBEYXRhIGRhdGE7Ci0gICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKGRhdGEsIC0xKTsKKyAgICAgICAgcnVuVGFza0luUXVldWUoW2NoYW5u
ZWwsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgICAgICBEYXRhIGRhdGE7CisgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihkYXRhLCAtMSk7CisgICAgICAgICAgICBnX2NvbmRfc2ln
bmFsKCZjb25kaXRpb24pOworICAgICAgICB9LCBxdWV1ZSk7CisgICAgICAgIGdfY29uZF93YWl0
KCZjb25kaXRpb24sICZtdXRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE5Niwx
OCArMjE2LDggQEAgdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jKHNpemVfdCBvZmZzZXQsIHNpemVf
dCBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLAogICAgICAgICBieXRlc1RvUmVhZCA9
IHN0ZDo6bWluKHBlbmRpbmdCeXRlc1RvUmVhZCwgcmVhZEJ1ZmZlci0+bGVuZ3RoKTsKICAgICB9
IHdoaWxlIChwZW5kaW5nQnl0ZXNUb1JlYWQpOwogCi0gICAgY29tcGxldGlvbkhhbmRsZXIoZGF0
YSwgMCk7Ci19Ci0KLXZvaWQgSU9DaGFubmVsOjpyZWFkU3luYyhzaXplX3Qgb2Zmc2V0LCBzaXpl
X3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChEYXRhJiwgaW50
IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgc3RhdGljIEdNdXRleCBtdXRleDsK
LSAgICBzdGF0aWMgR0NvbmQgY29uZGl0aW9uOwotCi0gICAgV1RGOjpHTXV0ZXhMb2NrZXI8R011
dGV4PiBsb2NrKG11dGV4KTsKLSAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsKHRoaXMpOwot
ICAgIHJ1blRhc2tJblF1ZXVlKFtjaGFubmVsLCBvZmZzZXQsIHNpemUsIGNvbXBsZXRpb25IYW5k
bGVyXSB7Ci0gICAgICAgIGNoYW5uZWwtPnJlYWRTeW5jKG9mZnNldCwgc2l6ZSwgY29tcGxldGlv
bkhhbmRsZXIpOworICAgIHJ1blRhc2tJblF1ZXVlKFtjaGFubmVsLCAmZGF0YSwgY29tcGxldGlv
bkhhbmRsZXJdIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgMCk7CiAgICAgICAg
IGdfY29uZF9zaWduYWwoJmNvbmRpdGlvbik7CiAgICAgfSwgcXVldWUpOwogICAgIGdfY29uZF93
YWl0KCZjb25kaXRpb24sICZtdXRleCk7CkBAIC0yMTYsNiArMjI2LDcgQEAgdm9pZCBJT0NoYW5u
ZWw6OnJlYWRTeW5jKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVl
LCBzdGQ6OmZ1bmMKIHN0cnVjdCBXcml0ZUFzeW5jRGF0YSB7CiAgICAgUmVmUHRyPElPQ2hhbm5l
bD4gY2hhbm5lbDsKICAgICBHUmVmUHRyPFNvdXBCdWZmZXI+IGJ1ZmZlcjsKKyAgICBSZWZQdHI8
V29ya1F1ZXVlPiBxdWV1ZTsKICAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGludCBlcnJvcik+IGNv
bXBsZXRpb25IYW5kbGVyOwogfTsKIApAQCAtMjI0LDEzICsyMzUsMjMgQEAgc3RhdGljIHZvaWQg
b3V0cHV0U3RyZWFtV3JpdGVSZWFkeUNhbGxiYWNrKEdPdXRwdXRTdHJlYW0qIHN0cmVhbSwgR0Fz
eW5jUmVzdWx0KgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXcml0ZUFzeW5jRGF0YT4gYXN5bmNEYXRh
KHN0YXRpY19jYXN0PFdyaXRlQXN5bmNEYXRhKj4odXNlckRhdGEpKTsKICAgICBnc3NpemUgYnl0
ZXNXcml0dGVuID0gZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2ZpbmlzaChzdHJlYW0sIHJlc3VsdCwg
bnVsbHB0cik7CiAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSAtMSkgewotICAgICAgICBhc3luY0Rh
dGEtPmNvbXBsZXRpb25IYW5kbGVyKC0xKTsKKyAgICAgICAgV29ya1F1ZXVlKiBxdWV1ZSA9IGFz
eW5jRGF0YS0+cXVldWUuZ2V0KCk7CisgICAgICAgIGF1dG8qIGFzeW5jRGF0YVB0ciA9IGFzeW5j
RGF0YS5yZWxlYXNlKCk7CisgICAgICAgIHJ1blRhc2tJblF1ZXVlKFthc3luY0RhdGFQdHJdIHsK
KyAgICAgICAgICAgIGF1dG8gYXN5bmNEYXRhID0gc3RkOjp1bmlxdWVfcHRyPFdyaXRlQXN5bmNE
YXRhPihhc3luY0RhdGFQdHIpOworICAgICAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFu
ZGxlcigtMSk7CisgICAgICAgIH0sIHF1ZXVlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGdzc2l6ZSBwZW5kaW5nQnl0ZXNUb1dyaXRlID0gYXN5bmNEYXRhLT5idWZmZXItPmxlbmd0
aCAtIGJ5dGVzV3JpdHRlbjsKICAgICBpZiAoIXBlbmRpbmdCeXRlc1RvV3JpdGUpIHsKLSAgICAg
ICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcigwKTsKKyAgICAgICAgV29ya1F1ZXVlKiBx
dWV1ZSA9IGFzeW5jRGF0YS0+cXVldWUuZ2V0KCk7CisgICAgICAgIGF1dG8qIGFzeW5jRGF0YVB0
ciA9IGFzeW5jRGF0YS5yZWxlYXNlKCk7CisgICAgICAgIHJ1blRhc2tJblF1ZXVlKFthc3luY0Rh
dGFQdHJdIHsKKyAgICAgICAgICAgIGF1dG8gYXN5bmNEYXRhID0gc3RkOjp1bmlxdWVfcHRyPFdy
aXRlQXN5bmNEYXRhPihhc3luY0RhdGFQdHIpOworICAgICAgICAgICAgYXN5bmNEYXRhLT5jb21w
bGV0aW9uSGFuZGxlcigwKTsKKyAgICAgICAgfSwgcXVldWUpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0yNDEsMzMgKzI2MiwzMCBAQCBzdGF0aWMgdm9pZCBvdXRwdXRTdHJlYW1Xcml0
ZVJlYWR5Q2FsbGJhY2soR091dHB1dFN0cmVhbSogc3RyZWFtLCBHQXN5bmNSZXN1bHQqCiAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob3V0cHV0U3RyZWFtV3Jp
dGVSZWFkeUNhbGxiYWNrKSwgYXN5bmNEYXRhLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgSU9DaGFu
bmVsOjp3cml0ZShzaXplX3Qgb2Zmc2V0LCBjb25zdCBEYXRhJiBkYXRhLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQgKGludCBlcnJvcik+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBJT0NoYW5uZWw6Ondy
aXRlKHNpemVfdCBvZmZzZXQsIGNvbnN0IERhdGEmIGRhdGEsIFdvcmtRdWV1ZSogcXVldWUsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAg
UmVmUHRyPElPQ2hhbm5lbD4gY2hhbm5lbCh0aGlzKTsKICAgICBpZiAoIW1fb3V0cHV0U3RyZWFt
ICYmICFtX2lvU3RyZWFtKSB7Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKC0xKTsKKyAgICAg
ICAgcnVuVGFza0luUXVldWUoW2NoYW5uZWwsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcigtMSk7CisgICAgICAgIH0sIHF1ZXVlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIEdPdXRwdXRTdHJlYW0qIHN0cmVhbSA9IG1fb3V0cHV0U3Ry
ZWFtID8gbV9vdXRwdXRTdHJlYW0uZ2V0KCkgOiBnX2lvX3N0cmVhbV9nZXRfb3V0cHV0X3N0cmVh
bShHX0lPX1NUUkVBTShtX2lvU3RyZWFtLmdldCgpKSk7CiAgICAgaWYgKCFzdHJlYW0pIHsKLSAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoLTEpOworICAgICAgICBydW5UYXNrSW5RdWV1ZShbY2hh
bm5lbCwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KC0xKTsKKyAgICAgICAgfSwgcXVldWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
V3JpdGVBc3luY0RhdGEqIGFzeW5jRGF0YSA9IG5ldyBXcml0ZUFzeW5jRGF0YSB7IHRoaXMsIGRh
dGEuc291cEJ1ZmZlcigpLCBjb21wbGV0aW9uSGFuZGxlciB9OworICAgIFdyaXRlQXN5bmNEYXRh
KiBhc3luY0RhdGEgPSBuZXcgV3JpdGVBc3luY0RhdGEgeyB0aGlzLCBkYXRhLnNvdXBCdWZmZXIo
KSwgcXVldWUsIGNvbXBsZXRpb25IYW5kbGVyIH07CiAgICAgLy8gRklYTUU6IGltcGxlbWVudCBv
ZmZzZXQuCiAgICAgZ19vdXRwdXRfc3RyZWFtX3dyaXRlX2FzeW5jKHN0cmVhbSwgYXN5bmNEYXRh
LT5idWZmZXItPmRhdGEsIGRhdGEuc2l6ZSgpLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIs
CiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4ob3V0cHV0U3Ry
ZWFtV3JpdGVSZWFkeUNhbGxiYWNrKSwgYXN5bmNEYXRhKTsKIH0KIAotdm9pZCBJT0NoYW5uZWw6
OndyaXRlKHNpemVfdCBvZmZzZXQsIGNvbnN0IERhdGEmIGRhdGEsIFdvcmtRdWV1ZSogcXVldWUs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgUmVmUHRyPElPQ2hhbm5lbD4gY2hhbm5lbCh0aGlzKTsKLSAgICBydW5UYXNrSW5RdWV1ZShb
Y2hhbm5lbCwgb2Zmc2V0LCBkYXRhLCBjb21wbGV0aW9uSGFuZGxlcl0gewotICAgICAgICBjaGFu
bmVsLT53cml0ZShvZmZzZXQsIGRhdGEsIGNvbXBsZXRpb25IYW5kbGVyKTsKLSAgICB9LCBxdWV1
ZSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIE5ldHdvcmtDYWNoZQogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254570</attachid>
            <date>2015-06-09 08:31:17 -0700</date>
            <delta_ts>2015-06-09 08:47:57 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-disk-cache-io-queues.diff</filename>
            <type>text/plain</type>
            <size>11354</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZWZiYzQ2Li5jY2RmMjJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUg
QEAKKzIwMTUtMDYtMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtTT1VQXSBOZXR3b3JrIENhY2hlOiBydW4gdGhlIElPIGNvbXBsZXRpb24g
aGFuZGxlciBpbiB0aGUgZ2l2ZW4gcXVldWUgaW5zdGVhZCBvZiB0aGUgd2hvbGUgb3BlcmF0aW9u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU3OTcK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIG1pc3Vu
ZGVyc3Rvb2Qgd2hhdCB0aGUgV29ya1F1ZXVlIHBhcmFtZXRlciBtZWFudCBpbiB0aGUgSU8KKyAg
ICAgICAgY2hhbm5lbCBvcGVyYXRpb25zLiBJdCdzIHRoZSBxdWV1ZSB3aGVyZSB0aGUgY29tcGxl
dGlvbiBoYW5kbGVyCisgICAgICAgIHNob3VsZCBiZSBydW4sIG5vdCB0aGUgd2hvbGUgb3BlcmF0
aW9uLiBTaW5jZSBvdXIgb3BlcmF0aW9ucyBhcmUKKyAgICAgICAgYWxyZWFkeSBub24tYmxvY2tp
bmcsIHdlIGNhbiBqdXN0IHJ1biB0aGUgcmVhZC93cml0ZXMgaW4gdGhlIG1haW4KKyAgICAgICAg
dGhyZWFkLCBhbmQgc2NoZWR1bGUgdGhlIGNvbXBsZXRpb24gaGFuZGxlciBpbiB0aGUgZ2l2ZW4g
d29yaworICAgICAgICBxdWV1ZSB3aGVuIHRoZSBvcGVyYXRpb24gZmluaXNoZXMuCisKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaDoKKyAgICAg
ICAgKiBOZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWxTb3VwLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjppbnB1dFN0cmVhbVJlYWRSZWFkeUNhbGxi
YWNrKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpJT0NoYW5uZWw6OnJlYWQpOgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6OklPQ2hhbm5lbDo6cmVhZFN5bmMpOgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Om91dHB1dFN0cmVhbVdyaXRlUmVhZHlDYWxsYmFj
ayk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6SU9DaGFubmVsOjp3cml0ZSk6CisK
IDIwMTUtMDYtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFJFR1JFU1NJT04ocjE4NTI1MSk6IFtHVEtdIHdlYmtpdF93ZWJfY29udGV4dF9z
ZXRfZGlza19jYWNoZV9kaXJlY3RvcnkoKSBkb2Vzbid0IHdvcmsgd2hlbiB1c2luZyBzaGFyZWQg
c2Vjb25kYXJ5IHByb2Nlc3MgbW9kZWwgYWZ0ZXIgcjE4NTI1MQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlSU9DaGFubmVsLmggYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwu
aAppbmRleCBiODhhMjM4Li43YzA0MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJT0NoYW5uZWwuaApAQCAtNjAs
MTIgKzYwLDYgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBJT0NoYW5uZWwoY29uc3QgU3RyaW5n
JiBmaWxlUGF0aCwgSU9DaGFubmVsOjpUeXBlKTsKIAotI2lmIFVTRShTT1VQKQotICAgIHZvaWQg
cmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0YSYsIGlu
dCBlcnJvcik+KTsKLSAgICB2b2lkIHJlYWRTeW5jKHNpemVfdCBvZmZzZXQsIHNpemVfdCwgc3Rk
OjpmdW5jdGlvbjx2b2lkIChEYXRhJiwgaW50IGVycm9yKT4pOwotICAgIHZvaWQgd3JpdGUoc2l6
ZV90IG9mZnNldCwgY29uc3QgRGF0YSYsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoaW50IGVycm9yKT4p
OwotI2VuZGlmCi0KICAgICBTdHJpbmcgbV9wYXRoOwogICAgIFR5cGUgbV90eXBlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGVJ
T0NoYW5uZWxTb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05l
dHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCmluZGV4IDgwNWJjNzQuLjFmNTZhYzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZUlP
Q2hhbm5lbFNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL2NhY2hl
L05ldHdvcmtDYWNoZUlPQ2hhbm5lbFNvdXAuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCiAKICNpbmNsdWRlICJOZXR3b3JrQ2FjaGVGaWxlU3lzdGVtUG9z
aXguaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dNYWluTG9vcFNvdXJjZS5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dNdXRleExvY2tlci5o
PgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dVbmlxdWVQdHIuaD4KQEAgLTEwMiw2ICsxMDMsNyBA
QCBzdGF0aWMgdm9pZCBmaWxsRGF0YUZyb21SZWFkQnVmZmVyKFNvdXBCdWZmZXIqIHJlYWRCdWZm
ZXIsIHNpemVfdCBzaXplLCBEYXRhJiBkYQogc3RydWN0IFJlYWRBc3luY0RhdGEgewogICAgIFJl
ZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWw7CiAgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXI7
CisgICAgUmVmUHRyPFdvcmtRdWV1ZT4gcXVldWU7CiAgICAgc2l6ZV90IGJ5dGVzVG9SZWFkOwog
ICAgIHN0ZDo6ZnVuY3Rpb248dm9pZCAoRGF0YSYsIGludCBlcnJvcik+IGNvbXBsZXRpb25IYW5k
bGVyOwogICAgIERhdGEgZGF0YTsKQEAgLTExMiwxMiArMTE0LDIyIEBAIHN0YXRpYyB2b2lkIGlu
cHV0U3RyZWFtUmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jl
c3VsdCogcmVzCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlYWRBc3luY0RhdGE+IGFzeW5jRGF0YShz
dGF0aWNfY2FzdDxSZWFkQXN5bmNEYXRhKj4odXNlckRhdGEpKTsKICAgICBnc3NpemUgYnl0ZXNS
ZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goc3RyZWFtLCByZXN1bHQsIG51bGxwdHIp
OwogICAgIGlmIChieXRlc1JlYWQgPT0gLTEpIHsKLSAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0
aW9uSGFuZGxlcihhc3luY0RhdGEtPmRhdGEsIC0xKTsKKyAgICAgICAgV29ya1F1ZXVlKiBxdWV1
ZSA9IGFzeW5jRGF0YS0+cXVldWUuZ2V0KCk7CisgICAgICAgIGF1dG8qIGFzeW5jRGF0YVB0ciA9
IGFzeW5jRGF0YS5yZWxlYXNlKCk7CisgICAgICAgIHJ1blRhc2tJblF1ZXVlKFthc3luY0RhdGFQ
dHJdIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWFkQXN5bmNEYXRhPiBhc3luY0Rh
dGEoYXN5bmNEYXRhUHRyKTsKKyAgICAgICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlvbkhhbmRs
ZXIoYXN5bmNEYXRhLT5kYXRhLCAtMSk7CisgICAgICAgIH0sIHF1ZXVlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlmICghYnl0ZXNSZWFkKSB7Ci0gICAgICAgIGFzeW5jRGF0YS0+
Y29tcGxldGlvbkhhbmRsZXIoYXN5bmNEYXRhLT5kYXRhLCAwKTsKKyAgICAgICAgV29ya1F1ZXVl
KiBxdWV1ZSA9IGFzeW5jRGF0YS0+cXVldWUuZ2V0KCk7CisgICAgICAgIGF1dG8qIGFzeW5jRGF0
YVB0ciA9IGFzeW5jRGF0YS5yZWxlYXNlKCk7CisgICAgICAgIHJ1blRhc2tJblF1ZXVlKFthc3lu
Y0RhdGFQdHJdIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWFkQXN5bmNEYXRhPiBh
c3luY0RhdGEoYXN5bmNEYXRhUHRyKTsKKyAgICAgICAgICAgIGFzeW5jRGF0YS0+Y29tcGxldGlv
bkhhbmRsZXIoYXN5bmNEYXRhLT5kYXRhLCAwKTsKKyAgICAgICAgfSwgcXVldWUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCkBAIC0xMjYsNyArMTM4LDEyIEBAIHN0YXRpYyB2b2lkIGlucHV0
U3RyZWFtUmVhZFJlYWR5Q2FsbGJhY2soR0lucHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3Vs
dCogcmVzCiAKICAgICBzaXplX3QgcGVuZGluZ0J5dGVzVG9SZWFkID0gYXN5bmNEYXRhLT5ieXRl
c1RvUmVhZCAtIGFzeW5jRGF0YS0+ZGF0YS5zaXplKCk7CiAgICAgaWYgKCFwZW5kaW5nQnl0ZXNU
b1JlYWQpIHsKLSAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcihhc3luY0RhdGEt
PmRhdGEsIDApOworICAgICAgICBXb3JrUXVldWUqIHF1ZXVlID0gYXN5bmNEYXRhLT5xdWV1ZS5n
ZXQoKTsKKyAgICAgICAgYXV0byogYXN5bmNEYXRhUHRyID0gYXN5bmNEYXRhLnJlbGVhc2UoKTsK
KyAgICAgICAgcnVuVGFza0luUXVldWUoW2FzeW5jRGF0YVB0cl0geworICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlYWRBc3luY0RhdGE+IGFzeW5jRGF0YShhc3luY0RhdGFQdHIpOworICAg
ICAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcihhc3luY0RhdGEtPmRhdGEsIDAp
OworICAgICAgICB9LCBxdWV1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzNywz
OCArMTU0LDQ0IEBAIHN0YXRpYyB2b2lkIGlucHV0U3RyZWFtUmVhZFJlYWR5Q2FsbGJhY2soR0lu
cHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVzCiAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oaW5wdXRTdHJlYW1SZWFkUmVhZHlDYWxsYmFjayks
IGFzeW5jRGF0YS5yZWxlYXNlKCkpOwogfQogCi12b2lkIElPQ2hhbm5lbDo6cmVhZChzaXplX3Qg
b2Zmc2V0LCBzaXplX3Qgc2l6ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChEYXRhJiwgaW50IGVycm9y
KT4gY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIElPQ2hhbm5lbDo6cmVhZChzaXplX3Qgb2Zmc2V0
LCBzaXplX3Qgc2l6ZSwgV29ya1F1ZXVlKiBxdWV1ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChEYXRh
JiwgaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CisgICAgUmVmUHRyPElPQ2hhbm5l
bD4gY2hhbm5lbCh0aGlzKTsKICAgICBpZiAoIW1faW5wdXRTdHJlYW0pIHsKLSAgICAgICAgRGF0
YSBkYXRhOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkYXRhLCAtMSk7CisgICAgICAgIHJ1
blRhc2tJblF1ZXVlKFtjaGFubmVsLCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICAgICAg
RGF0YSBkYXRhOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgLTEpOworICAg
ICAgICB9LCBxdWV1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBzaXplX3QgYnVm
ZmVyU2l6ZSA9IHN0ZDo6bWluKHNpemUsIGdEZWZhdWx0UmVhZEJ1ZmZlclNpemUpOwogICAgIHVp
bnQ4X3QqIGJ1ZmZlckRhdGEgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZmFzdE1hbGxvYyhidWZm
ZXJTaXplKSk7CiAgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBidWZmZXIgPSBhZG9wdEdSZWYoc291
cF9idWZmZXJfbmV3X3dpdGhfb3duZXIoYnVmZmVyRGF0YSwgYnVmZmVyU2l6ZSwgYnVmZmVyRGF0
YSwgZmFzdEZyZWUpKTsKLSAgICBSZWFkQXN5bmNEYXRhKiBhc3luY0RhdGEgPSBuZXcgUmVhZEFz
eW5jRGF0YSB7IHRoaXMsIGJ1ZmZlci5nZXQoKSwgc2l6ZSwgY29tcGxldGlvbkhhbmRsZXIsIHsg
fSB9OworICAgIFJlYWRBc3luY0RhdGEqIGFzeW5jRGF0YSA9IG5ldyBSZWFkQXN5bmNEYXRhIHsg
dGhpcywgYnVmZmVyLmdldCgpLCBxdWV1ZSwgc2l6ZSwgY29tcGxldGlvbkhhbmRsZXIsIHsgfSB9
OwogCiAgICAgLy8gRklYTUU6IGltcGxlbWVudCBvZmZzZXQuCiAgICAgZ19pbnB1dF9zdHJlYW1f
cmVhZF9hc3luYyhtX2lucHV0U3RyZWFtLmdldCgpLCBjb25zdF9jYXN0PGNoYXIqPihidWZmZXIt
PmRhdGEpLCBidWZmZXJTaXplLCBHX1BSSU9SSVRZX0RFRkFVTFQsIG51bGxwdHIsCiAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oaW5wdXRTdHJlYW1SZWFkUmVh
ZHlDYWxsYmFjayksIGFzeW5jRGF0YSk7CiB9CiAKLXZvaWQgSU9DaGFubmVsOjpyZWFkKHNpemVf
dCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVlLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikKKy8vIEZJWE1FOiBJdCB3
b3VsZCBiZSBiZXR0ZXIgdG8gZG8gd2l0aG91dCB0aGlzLgordm9pZCBJT0NoYW5uZWw6OnJlYWRT
eW5jKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLCBXb3JrUXVldWUqIHF1ZXVlLCBzdGQ6OmZ1
bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKKyAg
ICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKKworICAgIHN0YXRpYyBHTXV0ZXggbXV0ZXg7Cisg
ICAgc3RhdGljIEdDb25kIGNvbmRpdGlvbjsKKyAgICBXVEY6OkdNdXRleExvY2tlcjxHTXV0ZXg+
IGxvY2sobXV0ZXgpOwogICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWwodGhpcyk7Ci0gICAg
cnVuVGFza0luUXVldWUoW2NoYW5uZWwsIG9mZnNldCwgc2l6ZSwgY29tcGxldGlvbkhhbmRsZXJd
IHsKLSAgICAgICAgY2hhbm5lbC0+cmVhZChvZmZzZXQsIHNpemUsIGNvbXBsZXRpb25IYW5kbGVy
KTsKLSAgICB9LCBxdWV1ZSk7Ci19CiAKLS8vIEZJWE1FOiBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8g
ZG8gd2l0aG91dCB0aGlzLgotdm9pZCBJT0NoYW5uZWw6OnJlYWRTeW5jKHNpemVfdCBvZmZzZXQs
IHNpemVfdCBzaXplLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKERhdGEmLCBpbnQgZXJyb3IpPiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKICAgICBpZiAoIW1faW5wdXRTdHJlYW0pIHsKLSAgICAgICAgRGF0
YSBkYXRhOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihkYXRhLCAtMSk7CisgICAgICAgIHJ1
blRhc2tJblF1ZXVlKFtjaGFubmVsLCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICAgICAg
RGF0YSBkYXRhOworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoZGF0YSwgLTEpOworICAg
ICAgICAgICAgZ19jb25kX3NpZ25hbCgmY29uZGl0aW9uKTsKKyAgICAgICAgfSwgcXVldWUpOwor
ICAgICAgICBnX2NvbmRfd2FpdCgmY29uZGl0aW9uLCAmbXV0ZXgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCkBAIC0xOTYsMTggKzIxOSw4IEBAIHZvaWQgSU9DaGFubmVsOjpyZWFkU3luYyhz
aXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChEYXRhJiwKICAg
ICAgICAgYnl0ZXNUb1JlYWQgPSBzdGQ6Om1pbihwZW5kaW5nQnl0ZXNUb1JlYWQsIHJlYWRCdWZm
ZXItPmxlbmd0aCk7CiAgICAgfSB3aGlsZSAocGVuZGluZ0J5dGVzVG9SZWFkKTsKIAotICAgIGNv
bXBsZXRpb25IYW5kbGVyKGRhdGEsIDApOwotfQotCi12b2lkIElPQ2hhbm5lbDo6cmVhZFN5bmMo
c2l6ZV90IG9mZnNldCwgc2l6ZV90IHNpemUsIFdvcmtRdWV1ZSogcXVldWUsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoRGF0YSYsIGludCBlcnJvcik+IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIHN0
YXRpYyBHTXV0ZXggbXV0ZXg7Ci0gICAgc3RhdGljIEdDb25kIGNvbmRpdGlvbjsKLQotICAgIFdU
Rjo6R011dGV4TG9ja2VyPEdNdXRleD4gbG9jayhtdXRleCk7Ci0gICAgUmVmUHRyPElPQ2hhbm5l
bD4gY2hhbm5lbCh0aGlzKTsKLSAgICBydW5UYXNrSW5RdWV1ZShbY2hhbm5lbCwgb2Zmc2V0LCBz
aXplLCBjb21wbGV0aW9uSGFuZGxlcl0gewotICAgICAgICBjaGFubmVsLT5yZWFkU3luYyhvZmZz
ZXQsIHNpemUsIGNvbXBsZXRpb25IYW5kbGVyKTsKKyAgICBydW5UYXNrSW5RdWV1ZShbY2hhbm5l
bCwgJmRhdGEsIGNvbXBsZXRpb25IYW5kbGVyXSB7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KGRhdGEsIDApOwogICAgICAgICBnX2NvbmRfc2lnbmFsKCZjb25kaXRpb24pOwogICAgIH0sIHF1
ZXVlKTsKICAgICBnX2NvbmRfd2FpdCgmY29uZGl0aW9uLCAmbXV0ZXgpOwpAQCAtMjE2LDYgKzIy
OSw3IEBAIHZvaWQgSU9DaGFubmVsOjpyZWFkU3luYyhzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6
ZSwgV29ya1F1ZXVlKiBxdWV1ZSwgc3RkOjpmdW5jCiBzdHJ1Y3QgV3JpdGVBc3luY0RhdGEgewog
ICAgIFJlZlB0cjxJT0NoYW5uZWw+IGNoYW5uZWw7CiAgICAgR1JlZlB0cjxTb3VwQnVmZmVyPiBi
dWZmZXI7CisgICAgUmVmUHRyPFdvcmtRdWV1ZT4gcXVldWU7CiAgICAgc3RkOjpmdW5jdGlvbjx2
b2lkIChpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcjsKIH07CiAKQEAgLTIyNCwxMyArMjM4
LDIzIEBAIHN0YXRpYyB2b2lkIG91dHB1dFN0cmVhbVdyaXRlUmVhZHlDYWxsYmFjayhHT3V0cHV0
U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3VsdCoKICAgICBzdGQ6OnVuaXF1ZV9wdHI8V3JpdGVB
c3luY0RhdGE+IGFzeW5jRGF0YShzdGF0aWNfY2FzdDxXcml0ZUFzeW5jRGF0YSo+KHVzZXJEYXRh
KSk7CiAgICAgZ3NzaXplIGJ5dGVzV3JpdHRlbiA9IGdfb3V0cHV0X3N0cmVhbV93cml0ZV9maW5p
c2goc3RyZWFtLCByZXN1bHQsIG51bGxwdHIpOwogICAgIGlmIChieXRlc1dyaXR0ZW4gPT0gLTEp
IHsKLSAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcigtMSk7CisgICAgICAgIFdv
cmtRdWV1ZSogcXVldWUgPSBhc3luY0RhdGEtPnF1ZXVlLmdldCgpOworICAgICAgICBhdXRvKiBh
c3luY0RhdGFQdHIgPSBhc3luY0RhdGEucmVsZWFzZSgpOworICAgICAgICBydW5UYXNrSW5RdWV1
ZShbYXN5bmNEYXRhUHRyXSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V3JpdGVBc3lu
Y0RhdGE+IGFzeW5jRGF0YShhc3luY0RhdGFQdHIpOworICAgICAgICAgICAgYXN5bmNEYXRhLT5j
b21wbGV0aW9uSGFuZGxlcigtMSk7CisgICAgICAgIH0sIHF1ZXVlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGdzc2l6ZSBwZW5kaW5nQnl0ZXNUb1dyaXRlID0gYXN5bmNEYXRhLT5i
dWZmZXItPmxlbmd0aCAtIGJ5dGVzV3JpdHRlbjsKICAgICBpZiAoIXBlbmRpbmdCeXRlc1RvV3Jp
dGUpIHsKLSAgICAgICAgYXN5bmNEYXRhLT5jb21wbGV0aW9uSGFuZGxlcigwKTsKKyAgICAgICAg
V29ya1F1ZXVlKiBxdWV1ZSA9IGFzeW5jRGF0YS0+cXVldWUuZ2V0KCk7CisgICAgICAgIGF1dG8q
IGFzeW5jRGF0YVB0ciA9IGFzeW5jRGF0YS5yZWxlYXNlKCk7CisgICAgICAgIHJ1blRhc2tJblF1
ZXVlKFthc3luY0RhdGFQdHJdIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXcml0ZUFz
eW5jRGF0YT4gYXN5bmNEYXRhKGFzeW5jRGF0YVB0cik7CisgICAgICAgICAgICBhc3luY0RhdGEt
PmNvbXBsZXRpb25IYW5kbGVyKDApOworICAgICAgICB9LCBxdWV1ZSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTI0MSwzMyArMjY1LDMwIEBAIHN0YXRpYyB2b2lkIG91dHB1dFN0cmVh
bVdyaXRlUmVhZHlDYWxsYmFjayhHT3V0cHV0U3RyZWFtKiBzdHJlYW0sIEdBc3luY1Jlc3VsdCoK
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihvdXRwdXRTdHJl
YW1Xcml0ZVJlYWR5Q2FsbGJhY2spLCBhc3luY0RhdGEucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBJ
T0NoYW5uZWw6OndyaXRlKHNpemVfdCBvZmZzZXQsIGNvbnN0IERhdGEmIGRhdGEsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoaW50IGVycm9yKT4gY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIElPQ2hhbm5l
bDo6d3JpdGUoc2l6ZV90IG9mZnNldCwgY29uc3QgRGF0YSYgZGF0YSwgV29ya1F1ZXVlKiBxdWV1
ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
KyAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsKHRoaXMpOwogICAgIGlmICghbV9vdXRwdXRT
dHJlYW0gJiYgIW1faW9TdHJlYW0pIHsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoLTEpOwor
ICAgICAgICBydW5UYXNrSW5RdWV1ZShbY2hhbm5lbCwgY29tcGxldGlvbkhhbmRsZXJdIHsKKyAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKC0xKTsKKyAgICAgICAgfSwgcXVldWUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgR091dHB1dFN0cmVhbSogc3RyZWFtID0gbV9vdXRw
dXRTdHJlYW0gPyBtX291dHB1dFN0cmVhbS5nZXQoKSA6IGdfaW9fc3RyZWFtX2dldF9vdXRwdXRf
c3RyZWFtKEdfSU9fU1RSRUFNKG1faW9TdHJlYW0uZ2V0KCkpKTsKICAgICBpZiAoIXN0cmVhbSkg
ewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigtMSk7CisgICAgICAgIHJ1blRhc2tJblF1ZXVl
KFtjaGFubmVsLCBjb21wbGV0aW9uSGFuZGxlcl0geworICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoLTEpOworICAgICAgICB9LCBxdWV1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBXcml0ZUFzeW5jRGF0YSogYXN5bmNEYXRhID0gbmV3IFdyaXRlQXN5bmNEYXRhIHsgdGhp
cywgZGF0YS5zb3VwQnVmZmVyKCksIGNvbXBsZXRpb25IYW5kbGVyIH07CisgICAgV3JpdGVBc3lu
Y0RhdGEqIGFzeW5jRGF0YSA9IG5ldyBXcml0ZUFzeW5jRGF0YSB7IHRoaXMsIGRhdGEuc291cEJ1
ZmZlcigpLCBxdWV1ZSwgY29tcGxldGlvbkhhbmRsZXIgfTsKICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IG9mZnNldC4KICAgICBnX291dHB1dF9zdHJlYW1fd3JpdGVfYXN5bmMoc3RyZWFtLCBhc3lu
Y0RhdGEtPmJ1ZmZlci0+ZGF0YSwgZGF0YS5zaXplKCksIEdfUFJJT1JJVFlfREVGQVVMVCwgbnVs
bHB0ciwKICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPihvdXRw
dXRTdHJlYW1Xcml0ZVJlYWR5Q2FsbGJhY2spLCBhc3luY0RhdGEpOwogfQogCi12b2lkIElPQ2hh
bm5lbDo6d3JpdGUoc2l6ZV90IG9mZnNldCwgY29uc3QgRGF0YSYgZGF0YSwgV29ya1F1ZXVlKiBx
dWV1ZSwgc3RkOjpmdW5jdGlvbjx2b2lkIChpbnQgZXJyb3IpPiBjb21wbGV0aW9uSGFuZGxlcikK
LXsKLSAgICBSZWZQdHI8SU9DaGFubmVsPiBjaGFubmVsKHRoaXMpOwotICAgIHJ1blRhc2tJblF1
ZXVlKFtjaGFubmVsLCBvZmZzZXQsIGRhdGEsIGNvbXBsZXRpb25IYW5kbGVyXSB7Ci0gICAgICAg
IGNoYW5uZWwtPndyaXRlKG9mZnNldCwgZGF0YSwgY29tcGxldGlvbkhhbmRsZXIpOwotICAgIH0s
IHF1ZXVlKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgTmV0d29ya0NhY2hlCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAo=
</data>
<flag name="review"
          id="279561"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>