<?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>112103</bug_id>
          
          <creation_ts>2013-03-11 22:20:44 -0700</creation_ts>
          <short_desc>Loads are never canceled in the NetworkProcess</short_desc>
          <delta_ts>2013-03-11 23:18:18 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>levin+threading</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>853062</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-11 22:20:44 -0700</bug_when>
    <thetext>Loads are never canceled in the NetworkProcess

If a connection to a WebProcess goes away, then all of its scheduled loads should never be started, and all of its in-progress loads should be cancelled.

In radar as &lt;rdar://problem/12890500&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853076</commentid>
    <comment_count>1</comment_count>
      <attachid>192641</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-11 22:37:14 -0700</bug_when>
    <thetext>Created attachment 192641
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853080</commentid>
    <comment_count>2</comment_count>
      <attachid>192641</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-11 22:47:25 -0700</bug_when>
    <thetext>Comment on attachment 192641
Patch v1

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

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:110
&gt; +        callOnMainThread(NetworkResourceLoader::performCleanups, 0);

We now have a version of callOnMainThread in WebCore that is type safe, or (as helpful here) doesn&apos;t require passing an argument.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:157
&gt; +#ifndef NDEBUG

Should probably check ASSERTIONS_ENABLED, not NDEBUG.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:173
&gt; +template&lt;typename U&gt; void NetworkResourceLoader::sendAbortingOnFailure(const U&amp; message)
&gt; +{
&gt; +    if (!send(message))
&gt; +        abortInProgressLoad();

Maybe it&apos;s OK, but the name made me wonder if an actual abort() will be called.

Given that sendSync doesn&apos;t get this treatment, I&apos;d consider just doing this inline for consistency.

&gt; Source/WebKit2/NetworkProcess/SyncNetworkResourceLoader.h:45
&gt; +    virtual void connectionToWebProcessDidClose();

OVERRIDE

&gt; Source/WebKit2/NetworkProcess/SyncNetworkResourceLoader.h:47
&gt;      virtual bool isSynchronous() { return true; }

Yes, here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853088</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-11 22:58:09 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 192641 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=192641&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:110
&gt; &gt; +        callOnMainThread(NetworkResourceLoader::performCleanups, 0);
&gt; 
&gt; We now have a version of callOnMainThread in WebCore that is type safe, or (as helpful here) doesn&apos;t require passing an argument.

callOnMainThread is a WTF:: concept, and the only other form I see takes a Function object.  I could certainly use that here but it just uses the function ptr form behind the scenes...

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:157
&gt; &gt; +#ifndef NDEBUG
&gt; 
&gt; Should probably check ASSERTIONS_ENABLED, not NDEBUG.

ASSERTIONS_ENABLED doesn&apos;t match anything in any of the projects.  Do you mean something else?

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:173
&gt; &gt; +template&lt;typename U&gt; void NetworkResourceLoader::sendAbortingOnFailure(const U&amp; message)
&gt; &gt; +{
&gt; &gt; +    if (!send(message))
&gt; &gt; +        abortInProgressLoad();
&gt; 
&gt; Maybe it&apos;s OK, but the name made me wonder if an actual abort() will be called.
&gt; 
&gt; Given that sendSync doesn&apos;t get this treatment, I&apos;d consider just doing this inline for consistency.

abortInProgressLoad() originally had one more line than it does, and that level of code copying drove me nuts.

I like having the abort code encapsulated, so I&apos;ll take the alternate form of your suggestion and give sendSync the same treatment I gave send.

&gt; &gt; Source/WebKit2/NetworkProcess/SyncNetworkResourceLoader.h:45
&gt; &gt; +    virtual void connectionToWebProcessDidClose();
&gt; 
&gt; OVERRIDE
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/SyncNetworkResourceLoader.h:47
&gt; &gt;      virtual bool isSynchronous() { return true; }
&gt; 
&gt; Yes, here too.

Willdo on both of these!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853092</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-11 23:00:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)

&gt; &gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:157
&gt; &gt; &gt; +#ifndef NDEBUG
&gt; &gt; 
&gt; &gt; Should probably check ASSERTIONS_ENABLED, not NDEBUG.
&gt; 
&gt; ASSERTIONS_ENABLED doesn&apos;t match anything in any of the projects.  Do you mean something else?

You almost certainly meant #if !ASSERT_DISABLED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853099</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-03-11 23:11:26 -0700</bug_when>
    <thetext>&gt; callOnMainThread is a WTF:: concept, and the only other form I see takes a Function object.  I could certainly use that here but it just uses the function ptr form behind the scenes...

I&apos;m talking about the one in WebCore/platform/MainThreadTask.h. It certainly uses the WTF one behind the scenes, but doesn&apos;t force you to pass a fake void* argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853102</commentid>
    <comment_count>6</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-11 23:15:11 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/145485</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853106</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-11 23:17:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; callOnMainThread is a WTF:: concept, and the only other form I see takes a Function object.  I could certainly use that here but it just uses the function ptr form behind the scenes...
&gt; 
&gt; I&apos;m talking about the one in WebCore/platform/MainThreadTask.h. It certainly uses the WTF one behind the scenes, but doesn&apos;t force you to pass a fake void* argument.

I see!  I did Source/-wide search for all users of callOnMainThread and noticed that nobody called the argument-free version, so I passed on it...  but I&apos;ll keep this in mind next time!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>853107</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-03-11 23:18:18 -0700</bug_when>
    <thetext>It might be worth a global replace, as the fake void* argument idiom is pretty entrenched.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192641</attachid>
            <date>2013-03-11 22:37:14 -0700</date>
            <delta_ts>2013-03-11 22:47:25 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>15492</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmNjUzOWU2Li5lMzgxODg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQg
QEAKKzIwMTMtMDMtMTEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIExvYWRzIGFyZSBuZXZlciBjYW5jZWxlZCBpbiB0aGUgTmV0d29ya1Byb2Nlc3MKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzEyODkwNTAwPiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMjEwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIElmIGEgY29ubmVjdGlvbiB0byBhIFdlYlByb2Nlc3MgaXMgY2xvc2Vk
IChncmFjZWZ1bGx5IG9yIGJ5IGNyYXNoaW5nKSB0aGVuOgorICAgICAgICAtIEFsbCBzY2hlZHVs
ZWQgbG9hZHMgZm9yIHRoYXQgY29ubmVjdGlvbiBzaG91bGQgYmUgZm9yZ290dGVuLgorICAgICAg
ICAtIEFsbCBpbi1wcm9ncmVzcyBsb2FkcyBmb3IgdGhhdCBjb25uZWN0aW9uIHNob3VsZCBiZSBh
Ym9ydGVkIGFzYXAuCisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VM
b2FkZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpyZXF1ZXN0c1RvQ2xlYW51cE11dGV4KTogVGhl
ICJyZXF1ZXN0IHRvIHN0b3AiIG1lY2hhbmlzbSBpcyBub3cgY2FsbGVkICJyZXF1ZXN0IHRvIGNs
ZWFudXAiCisgICAgICAgIChXZWJLaXQ6OnJlcXVlc3RzVG9DbGVhbnVwKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzY2hlZHVsZUNsZWFudXBPbk1haW5UaHJlYWQp
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnBlcmZvcm1DbGVhbnVw
cyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6Y2xlYW51cCk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmFpbCk6CisKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjb25uZWN0aW9uVG9XZWJQcm9j
ZXNzRGlkQ2xvc2UpOiBJZiB0aGVyZSBpcyBhIHJlc291cmNlIGhhbmRsZSwgbGV0CisgICAgICAg
ICAgdGhlIGxvYWRpbmcgdGhyZWFkIG5vdGljZSB0aGUgY29ubmVjdGlvbiBpcyBpbnZhbGlkLiBP
dGhlcndpc2UgcmVxdWVzdCB0byBjbGVhbnVwIHRoZSBsb2FkZXIuCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydEluUHJvZ3Jlc3NMb2FkKTogQ2Fu
Y2VsIHRoZSByZXNvdXJjZSBoYW5kbGUgYW5kIHNjaGVkdWxlIG1haW4gdGhyZWFkIGNsZWFudXAu
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlKTogVXNlIHNlbmRBYm9ydGluZ09uRmFpbHVyZSBpbnN0ZWFkIG9mIHNlbmQuCisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0by4K
KworICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVz
dCk6IENhbGwgYWJvcnRJblByb2dyZXNzTG9hZCBpZiB0aGUgc3luYyBtZXNzYWdlIGZhaWxlZC4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpjYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKTogRGl0dG8uCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Jlc291cmNlTG9hZGVyLmg6CisKKyAgICAgICAgTWFrZSBjb25uZWN0aW9uVG9XZWJQ
cm9jZXNzRGlkQ2xvc2UoKSBwdXJlIHZpcnR1YWwsIG1vdmluZyBpdHMgaW1wbGVtZW50YXRpb24g
dG8gdGhlIHN1YmNsYXNzZXM6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvU2NoZWR1bGFibGVM
b2FkZXIuY3BwOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmg6
CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9TeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6U3luY05ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c3RhcnQpOiBD
YWxsIGNsZWFudXAoKS4KKyAgICAgICAgKFdlYktpdDo6U3luY05ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3NlKTogQ2FsbCBjbGVhbnVwKCkuCisgICAg
ICAgIChXZWJLaXQ6OlN5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNsZWFudXApOiBGYWN0b3Ig
b3V0IHRoZSBzeW5jIGxvYWRlciBjbGVhbnVwIGNvZGUuCisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorCiAyMDEzLTAzLTExICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFt3azJdIFdlYlByb2Nlc3Mg
YW5kIFdlYkNvbnRlbnRTZXJ2aWNlIGRvbid0IHJlc3BlY3Qgc3lzdGVtIGxvY2FsaXphdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNl
TG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5jcHAKaW5kZXggNDNiNGI5MS4uNTQ4ZGEzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC04
Niw2MiArODYsMTAxIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAgICAg
bV9oYW5kbGUgPSBSZXNvdXJjZUhhbmRsZTo6Y3JlYXRlKG1fbmV0d29ya2luZ0NvbnRleHQuZ2V0
KCksIHJlcXVlc3QoKSwgdGhpcywgZmFsc2UgLyogZGVmZXJzTG9hZGluZyAqLywgY29udGVudFNu
aWZmaW5nUG9saWN5KCkgPT0gU25pZmZDb250ZW50KTsKIH0KIAotc3RhdGljIGJvb2wgc3RvcFJl
cXVlc3RzQ2FsbGVkID0gZmFsc2U7CitzdGF0aWMgYm9vbCBwZXJmb3JtQ2xlYW51cHNDYWxsZWQg
PSBmYWxzZTsKIAotc3RhdGljIE11dGV4JiByZXF1ZXN0c1RvU3RvcE11dGV4KCkKK3N0YXRpYyBN
dXRleCYgcmVxdWVzdHNUb0NsZWFudXBNdXRleCgpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChNdXRleCwgbXV0ZXgsICgpKTsKICAgICByZXR1cm4gbXV0ZXg7CiB9CiAKLXN0YXRpYyBIYXNo
U2V0PE5ldHdvcmtSZXNvdXJjZUxvYWRlcio+JiByZXF1ZXN0c1RvU3RvcCgpCitzdGF0aWMgSGFz
aFNldDxOZXR3b3JrUmVzb3VyY2VMb2FkZXIqPiYgcmVxdWVzdHNUb0NsZWFudXAoKQogewogICAg
IERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxOZXR3b3JrUmVzb3VyY2VMb2FkZXIqPiwgcmVx
dWVzdHMsICgpKTsKICAgICByZXR1cm4gcmVxdWVzdHM7CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpzY2hlZHVsZVN0b3BPbk1haW5UaHJlYWQoKQordm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OnNjaGVkdWxlQ2xlYW51cE9uTWFpblRocmVhZCgpCiB7Ci0gICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKHJlcXVlc3RzVG9TdG9wTXV0ZXgoKSk7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KHJlcXVlc3RzVG9DbGVhbnVwTXV0ZXgoKSk7CiAKLSAgICByZXF1ZXN0c1RvU3RvcCgpLmFkZCh0
aGlzKTsKLSAgICBpZiAoIXN0b3BSZXF1ZXN0c0NhbGxlZCkgewotICAgICAgICBzdG9wUmVxdWVz
dHNDYWxsZWQgPSB0cnVlOwotICAgICAgICBjYWxsT25NYWluVGhyZWFkKE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6cGVyZm9ybVN0b3BzLCAwKTsKKyAgICByZXF1ZXN0c1RvQ2xlYW51cCgpLmFkZCh0
aGlzKTsKKyAgICBpZiAoIXBlcmZvcm1DbGVhbnVwc0NhbGxlZCkgeworICAgICAgICBwZXJmb3Jt
Q2xlYW51cHNDYWxsZWQgPSB0cnVlOworICAgICAgICBjYWxsT25NYWluVGhyZWFkKE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6cGVyZm9ybUNsZWFudXBzLCAwKTsKICAgICB9CiB9CiAKLXZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpwZXJmb3JtU3RvcHModm9pZCopCit2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6cGVyZm9ybUNsZWFudXBzKHZvaWQqKQogewotICAgIEFTU0VSVChzdG9wUmVx
dWVzdHNDYWxsZWQpOworICAgIEFTU0VSVChwZXJmb3JtQ2xlYW51cHNDYWxsZWQpOwogCiAgICAg
VmVjdG9yPE5ldHdvcmtSZXNvdXJjZUxvYWRlcio+IHJlcXVlc3RzOwogICAgIHsKLSAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKHJlcXVlc3RzVG9TdG9wTXV0ZXgoKSk7Ci0gICAgICAgIGNvcHlU
b1ZlY3RvcihyZXF1ZXN0c1RvU3RvcCgpLCByZXF1ZXN0cyk7Ci0gICAgICAgIHJlcXVlc3RzVG9T
dG9wKCkuY2xlYXIoKTsKLSAgICAgICAgc3RvcFJlcXVlc3RzQ2FsbGVkID0gZmFsc2U7CisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihyZXF1ZXN0c1RvQ2xlYW51cE11dGV4KCkpOworICAgICAg
ICBjb3B5VG9WZWN0b3IocmVxdWVzdHNUb0NsZWFudXAoKSwgcmVxdWVzdHMpOworICAgICAgICBy
ZXF1ZXN0c1RvQ2xlYW51cCgpLmNsZWFyKCk7CisgICAgICAgIHBlcmZvcm1DbGVhbnVwc0NhbGxl
ZCA9IGZhbHNlOwogICAgIH0KICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcXVl
c3RzLnNpemUoKTsgKytpKQotICAgICAgICByZXF1ZXN0c1tpXS0+cmVzb3VyY2VIYW5kbGVTdG9w
cGVkKCk7CisgICAgICAgIHJlcXVlc3RzW2ldLT5jbGVhbnVwKCk7CiB9CiAKLXZvaWQgTmV0d29y
a1Jlc291cmNlTG9hZGVyOjpyZXNvdXJjZUhhbmRsZVN0b3BwZWQoKQordm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmNsZWFudXAoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAK
ICAgICBpZiAoRm9ybURhdGEqIGZvcm1EYXRhID0gcmVxdWVzdCgpLmh0dHBCb2R5KCkpCiAgICAg
ICAgIGZvcm1EYXRhLT5yZW1vdmVHZW5lcmF0ZWRGaWxlc0lmTmVlZGVkKCk7CiAKLSAgICBtX2hh
bmRsZSA9IDA7Ci0KICAgICAvLyBUZWxsIHRoZSBzY2hlZHVsZXIgYWJvdXQgdGhpcyBmaW5pc2hl
ZCBsb2FkZXIgc29vbiBzbyBpdCBjYW4gc3RhcnQgbW9yZSBuZXR3b3JrIHJlcXVlc3RzLgogICAg
IE5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCku
c2NoZWR1bGVSZW1vdmVMb2FkZXIodGhpcyk7CiAKICAgICAvLyBFeHBsaWNpdCBkZXJlZigpIGJh
bGFuY2VkIGJ5IGEgcmVmKCkgaW4gTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzdGFydCgpCiAgICAg
Ly8gVGhpcyBtaWdodCBjYXVzZSB0aGUgTmV0d29ya1Jlc291cmNlTG9hZGVyIHRvIGJlIGRlc3Ry
b3llZCBhbmQgdGhlcmVmb3JlIHdlIGRvIGl0IGxhc3QuCi0gICAgZGVyZWYoKTsKKyAgICBpZiAo
bV9oYW5kbGUpIHsKKyAgICAgICAgbV9oYW5kbGUgPSAwOworICAgICAgICBkZXJlZigpOworICAg
IH0KK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3NEaWRDbG9zZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIC8vIElm
IHRoaXMgbG9hZGVyIGFscmVhZHkgaGFzIGEgcmVzb3VyY2UgaGFuZGxlIHRoZW4gaXQgaXMgYWxy
ZWFkeSBpbiBwcm9ncmVzcyBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgorICAgIC8vIE9uIHRoYXQg
dGhyZWFkIGl0IHdpbGwgbm90aWNlIHRoYXQgaXRzIGNvbm5lY3Rpb24gdG8gaXRzIFdlYlByb2Nl
c3MgaGFzIGJlZW4gaW52YWxpZGF0ZWQgYW5kIGl0IHdpbGwgImdyYWNlZnVsbHkiIGFib3J0Lgor
ICAgIGlmIChtX2hhbmRsZSkKKyAgICAgICAgcmV0dXJuOworCisjaWZuZGVmIE5ERUJVRworICAg
IC8vIFNpbmNlIHRoZXJlJ3Mgbm8gaGFuZGxlLCB0aGlzIGxvYWRlciBzaG91bGQgbmV2ZXIgaGF2
ZSBiZWVuIHN0YXJ0ZWQsIGFuZCB0aGVyZWZvcmUgaXQgc2hvdWxkIG5ldmVyIGJlIGluIHRoZQor
ICAgIC8vIHNldCBvZiBsb2FkZXJzIHRvIGNsZWFudXAgb24gdGhlIG1haW4gdGhyZWFkLgorICAg
IC8vIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgdHJ1ZS4KKyAgICB7CisgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihyZXF1ZXN0c1RvQ2xlYW51cE11dGV4KCkpOworICAgICAgICBBU1NFUlQoIXJl
cXVlc3RzVG9DbGVhbnVwKCkuY29udGFpbnModGhpcykpOworICAgIH0KKyNlbmRpZgorCisgICAg
Y2xlYW51cCgpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBVPiB2b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6c2VuZEFib3J0aW5nT25GYWlsdXJlKGNvbnN0IFUmIG1lc3NhZ2UpCit7CisgICAg
aWYgKCFzZW5kKG1lc3NhZ2UpKQorICAgICAgICBhYm9ydEluUHJvZ3Jlc3NMb2FkKCk7Cit9CisK
K3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydEluUHJvZ3Jlc3NMb2FkKCkKK3sKKyAg
ICBBU1NFUlQobV9oYW5kbGUpOworICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOworICAgIAor
ICAgIG1faGFuZGxlLT5jYW5jZWwoKTsKKworICAgIHNjaGVkdWxlQ2xlYW51cE9uTWFpblRocmVh
ZCgpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0x
NDksNyArMTg4LDcgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmUKICAgICAvLyBGSVhNRSAoTmV0
d29ya1Byb2Nlc3MpOiBDYWNoZSB0aGUgcmVzcG9uc2UuCiAgICAgaWYgKEZvcm1EYXRhKiBmb3Jt
RGF0YSA9IHJlcXVlc3QoKS5odHRwQm9keSgpKQogICAgICAgICBmb3JtRGF0YS0+cmVtb3ZlR2Vu
ZXJhdGVkRmlsZXNJZk5lZWRlZCgpOwotICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9h
ZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNlLCBQbGF0
Zm9ybUNlcnRpZmljYXRlSW5mbyhyZXNwb25zZSkpKTsKKyAgICBzZW5kQWJvcnRpbmdPbkZhaWx1
cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2Vy
dGlmaWNhdGVJbmZvKHJlc3BvbnNlLCBQbGF0Zm9ybUNlcnRpZmljYXRlSW5mbyhyZXNwb25zZSkp
KTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291
cmNlSGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgaW50IGVuY29kZWREYXRh
TGVuZ3RoKQpAQCAtMTU4LDcgKzE5Nyw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlRGF0YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGluCiAgICAg
Ly8gU3VjaCBidWZmZXJpbmcgd2lsbCBuZWVkIHRvIGJlIHRocmVhZCBzYWZlLCBhcyB0aGlzIGNh
bGxiYWNrIGlzIGhhcHBlbmluZyBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgogICAgIAogICAgIENv
cmVJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQ4X3QqPihkYXRhKSwgbGVuZ3RoKTsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJj
ZUxvYWRlcjo6RGlkUmVjZWl2ZURhdGEoZGF0YVJlZmVyZW5jZSwgZW5jb2RlZERhdGFMZW5ndGgs
IGZhbHNlKSk7CisgICAgc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJj
ZUxvYWRlcjo6RGlkUmVjZWl2ZURhdGEoZGF0YVJlZmVyZW5jZSwgZW5jb2RlZERhdGFMZW5ndGgs
IGZhbHNlKSk7CiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2Fk
aW5nKFJlc291cmNlSGFuZGxlKiwgZG91YmxlIGZpbmlzaFRpbWUpCkBAIC0xNjcsNyArMjA2LDcg
QEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VI
YW5kbGUqLCBkb3VibGUgZmluaXNoVGltZSkKICAgICAvLyBTdWNoIGJvb2trZWVwaW5nIHdpbGwg
bmVlZCB0byBiZSB0aHJlYWQgc2FmZSwgYXMgdGhpcyBjYWxsYmFjayBpcyBoYXBwZW5pbmcgb24g
YSBiYWNrZ3JvdW5kIHRocmVhZC4KICAgICBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmluaXNoUmVzb3VyY2VM
b2FkKGZpbmlzaFRpbWUpKTsKLSAgICBzY2hlZHVsZVN0b3BPbk1haW5UaHJlYWQoKTsKKyAgICBz
Y2hlZHVsZUNsZWFudXBPbk1haW5UaHJlYWQoKTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJv
cikKQEAgLTE3Niw3ICsyMTUsNyBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmFp
bChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogICAgIC8vIFN1
Y2ggYm9va2tlZXBpbmcgd2lsbCBuZWVkIHRvIGJlIHRocmVhZCBzYWZlLCBhcyB0aGlzIGNhbGxi
YWNrIGlzIGhhcHBlbmluZyBvbiBhIGJhY2tncm91bmQgdGhyZWFkLgogICAgIGludmFsaWRhdGVT
YW5kYm94RXh0ZW5zaW9ucygpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVy
OjpEaWRGYWlsUmVzb3VyY2VMb2FkKGVycm9yKSk7Ci0gICAgc2NoZWR1bGVTdG9wT25NYWluVGhy
ZWFkKCk7CisgICAgc2NoZWR1bGVDbGVhbnVwT25NYWluVGhyZWFkKCk7CiB9CiAKIHZvaWQgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3QoUmVzb3VyY2VIYW5kbGUqLCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVz
cG9uc2UpCkBAIC0xOTAsMTAgKzIyOSwxMiBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
d2lsbFNlbmRSZXF1ZXN0KFJlc291cmNlSGFuZGxlKiwgUmVzb3VyY2VSZXF1ZXN0JiByZQogICAg
IC8vIHRvIGNvbXBsZXRlIHdoaWxlIHRoZSBXZWJQcm9jZXNzIGlzIHdhaXRpbmcgZm9yIGEgN3Ro
IHRvIGNvbXBsZXRlLgogICAgIC8vIElmIHdlIGV2ZXIgY2hhbmdlIHRoaXMgbWVzc2FnZSB0byBi
ZSBhc3luY2hyb25vdXMgd2UgaGF2ZSB0byBpbmNsdWRlIHNhZmVndWFyZHMgdG8gbWFrZSBzdXJl
IHRoZSBuZXcgZGVzaWduIGludGVyYWN0cyB3ZWxsIHdpdGggc3luYyBYSFIuCiAgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJldHVybmVkUmVxdWVzdDsKLSAgICBpZiAoc2VuZFN5bmMoTWVzc2FnZXM6Oldl
YlJlc291cmNlTG9hZGVyOjpXaWxsU2VuZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25z
ZSksIE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6V2lsbFNlbmRSZXF1ZXN0OjpSZXBseShy
ZXR1cm5lZFJlcXVlc3QpKSkKLSAgICAgICAgcmVxdWVzdC51cGRhdGVGcm9tRGVsZWdhdGVQcmVz
ZXJ2aW5nT2xkSFRUUEJvZHkocmV0dXJuZWRSZXF1ZXN0Lm5zVVJMUmVxdWVzdChEb05vdFVwZGF0
ZUhUVFBCb2R5KSk7Ci0gICAgZWxzZQotICAgICAgICByZXF1ZXN0ID0gUmVzb3VyY2VSZXF1ZXN0
KCk7CisgICAgaWYgKCFzZW5kU3luYyhNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OldpbGxT
ZW5kUmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKSwgTWVzc2FnZXM6OldlYlJlc291
cmNlTG9hZGVyOjpXaWxsU2VuZFJlcXVlc3Q6OlJlcGx5KHJldHVybmVkUmVxdWVzdCkpKSB7Cisg
ICAgICAgIGFib3J0SW5Qcm9ncmVzc0xvYWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICByZXF1ZXN0LnVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRIVFRQQm9keShy
ZXR1cm5lZFJlcXVlc3QubnNVUkxSZXF1ZXN0KERvTm90VXBkYXRlSFRUUEJvZHkpKTsKIAogICAg
IFJ1bkxvb3A6Om1haW4oKS0+ZGlzcGF0Y2goYmluZCgmTmV0d29ya1Jlc291cmNlTG9hZFNjaGVk
dWxlcjo6cmVjZWl2ZWRSZWRpcmVjdCwgJk5ldHdvcmtQcm9jZXNzOjpzaGFyZWQoKS5uZXR3b3Jr
UmVzb3VyY2VMb2FkU2NoZWR1bGVyKCksIHRoaXMsIHJlcXVlc3QudXJsKCkpKTsKIH0KQEAgLTI0
OSw4ICsyOTAsMTAgQEAgYm9vbCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmNhbkF1dGhlbnRpY2F0
ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UoUmVzb3VyY2VIYW5kbGUKICAgICAvLyB0byBjb21wbGV0
ZSB3aGlsZSB0aGUgV2ViUHJvY2VzcyBpcyB3YWl0aW5nIGZvciBhIDd0aCB0byBjb21wbGV0ZS4K
ICAgICAvLyBJZiB3ZSBldmVyIGNoYW5nZSB0aGlzIG1lc3NhZ2UgdG8gYmUgYXN5bmNocm9ub3Vz
IHdlIGhhdmUgdG8gaW5jbHVkZSBzYWZlZ3VhcmRzIHRvIG1ha2Ugc3VyZSB0aGUgbmV3IGRlc2ln
biBpbnRlcmFjdHMgd2VsbCB3aXRoIHN5bmMgWEhSLgogICAgIGJvb2wgcmVzdWx0OwotICAgIGlm
ICghc2VuZFN5bmMoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpDYW5BdXRoZW50aWNhdGVB
Z2FpbnN0UHJvdGVjdGlvblNwYWNlKHByb3RlY3Rpb25TcGFjZSksIE1lc3NhZ2VzOjpXZWJSZXNv
dXJjZUxvYWRlcjo6Q2FuQXV0aGVudGljYXRlQWdhaW5zdFByb3RlY3Rpb25TcGFjZTo6UmVwbHko
cmVzdWx0KSkpCisgICAgaWYgKCFzZW5kU3luYyhNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6
OkNhbkF1dGhlbnRpY2F0ZUFnYWluc3RQcm90ZWN0aW9uU3BhY2UocHJvdGVjdGlvblNwYWNlKSwg
TWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpDYW5BdXRoZW50aWNhdGVBZ2FpbnN0UHJvdGVj
dGlvblNwYWNlOjpSZXBseShyZXN1bHQpKSkgeworICAgICAgICBhYm9ydEluUHJvZ3Jlc3NMb2Fk
KCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0Owog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291
cmNlTG9hZGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuaAppbmRleCBiNjA1MDJjLi5kYWIzNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaApAQCAtNTgsNiAr
NTgsNyBAQCBwdWJsaWM6CiAgICAgdWludDY0X3QgZGVzdGluYXRpb25JRCgpIGNvbnN0OwogICAg
IAogICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOworICAgIHZvaWQgY29ubmVjdGlvblRvV2ViUHJv
Y2Vzc0RpZENsb3NlKCk7CiAgICAgICAgIAogICAgIC8vIFJlc291cmNlSGFuZGxlQ2xpZW50IG1l
dGhvZHMKICAgICB2aXJ0dWFsIHZvaWQgd2lsbFNlbmRSZXF1ZXN0KFdlYkNvcmU6OlJlc291cmNl
SGFuZGxlKiwgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXNwb25zZSYgLypyZWRpcmVjdFJlc3BvbnNlKi8pIE9WRVJSSURFOwpAQCAtOTQsMTAgKzk1
LDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0
IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzJiwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MqKTsKIAotICAgIHZvaWQgc2NoZWR1bGVTdG9wT25NYWluVGhyZWFkKCk7Ci0gICAgc3Rh
dGljIHZvaWQgcGVyZm9ybVN0b3BzKHZvaWQqKTsKKyAgICB2b2lkIHNjaGVkdWxlQ2xlYW51cE9u
TWFpblRocmVhZCgpOworICAgIHN0YXRpYyB2b2lkIHBlcmZvcm1DbGVhbnVwcyh2b2lkKik7Cisg
ICAgdm9pZCBjbGVhbnVwKCk7CiAKLSAgICB2b2lkIHJlc291cmNlSGFuZGxlU3RvcHBlZCgpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHZvaWQgc2VuZEFib3J0aW5nT25GYWlsdXJlKGNvbnN0
IFUmIG1lc3NhZ2UpOworICAgIHZvaWQgYWJvcnRJblByb2dyZXNzTG9hZCgpOwogCiAgICAgUmVm
UHRyPFJlbW90ZU5ldHdvcmtpbmdDb250ZXh0PiBtX25ldHdvcmtpbmdDb250ZXh0OwogICAgIFJl
ZlB0cjxXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZT4gbV9oYW5kbGU7ICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU2NoZWR1bGFibGVMb2FkZXIuY3BwIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU2NoZWR1bGFibGVMb2FkZXIuY3BwCmluZGV4IDg1
YzViODIuLmJmY2ViNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L1NjaGVkdWxhYmxlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9TY2hlZHVsYWJsZUxvYWRlci5jcHAKQEAgLTc5LDExICs3OSw2IEBAIFNjaGVkdWxhYmxlTG9h
ZGVyOjp+U2NoZWR1bGFibGVMb2FkZXIoKQogICAgIEFTU0VSVCghbV9ob3N0UmVjb3JkKTsKIH0K
IAotdm9pZCBTY2hlZHVsYWJsZUxvYWRlcjo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3Nl
KCkKLXsKLSAgICAvLyBGSVhNRSAoTmV0d29ya1Byb2Nlc3MpOiA8cmRhcjovL3Byb2JsZW0vMTI4
OTA1MDA+OiBDYW5jZWwgdGhlIGxvYWQuIFRoZSByZXF1ZXN0IG1heSBiZSBsb25nLWxpdmluZywg
c28gd2UgZG9uJ3Qgd2FudCBpdCB0byBsaW5nZXIgYXJvdW5kIGFmdGVyIGFsbCBjbGllbnRzIGFy
ZSBnb25lLgotfQotCiB2b2lkIFNjaGVkdWxhYmxlTG9hZGVyOjpjb25zdW1lU2FuZGJveEV4dGVu
c2lvbnMoKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBjb3VudCA9IG1fcmVxdWVzdEJvZHlT
YW5kYm94RXh0ZW5zaW9ucy5zaXplKCk7IGkgPCBjb3VudDsgKytpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU2NoZWR1bGFibGVMb2FkZXIuaCBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL1NjaGVkdWxhYmxlTG9hZGVyLmgKaW5kZXggMDgzMDUxMy4u
ZWVmZjQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU2NoZWR1
bGFibGVMb2FkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9TY2hlZHVs
YWJsZUxvYWRlci5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBib29sIGluUHJpdmF0
ZUJyb3dzaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5Qcml2YXRlQnJvd3NpbmdNb2RlOyB9
CiAKICAgICBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyogY29ubmVjdGlvblRvV2ViUHJv
Y2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQotICAgIHZvaWQgY29u
bmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3NlKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NEaWRDbG9zZSgpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydCgp
ID0gMDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL1N5
bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nl
c3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggODA4YmU4Mi4uNTUxN2FjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY05ldHdvcmtSZXNv
dXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvU3luY05l
dHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKQEAgLTY2LDEzICs2NiwyNSBAQCB2b2lkIFN5bmNOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OnN0YXJ0KCkKIAogICAgIFJlc291cmNlSGFuZGxlOjpsb2FkUmVz
b3VyY2VTeW5jaHJvbm91c2x5KG5ldHdvcmtpbmdDb250ZXh0LmdldCgpLCByZXF1ZXN0KCksIGFs
bG93U3RvcmVkQ3JlZGVudGlhbHMoKSwgZXJyb3IsIHJlc3BvbnNlLCBkYXRhKTsKIAotICAgIGlu
dmFsaWRhdGVTYW5kYm94RXh0ZW5zaW9ucygpOworICAgIGNsZWFudXAoKTsKIAogICAgIG1fZGVs
YXllZFJlcGx5LT5zZW5kKGVycm9yLCByZXNwb25zZSwgQ29yZUlQQzo6RGF0YVJlZmVyZW5jZSgo
dWludDhfdCopZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7Cit9CisKK3ZvaWQgU3luY05ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6Y29ubmVjdGlvblRvV2ViUHJvY2Vzc0RpZENsb3NlKCkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIAotICAgIE5ldHdvcmtQcm9jZXNzOjpzaGFy
ZWQoKS5uZXR3b3JrUmVzb3VyY2VMb2FkU2NoZWR1bGVyKCkucmVtb3ZlTG9hZGVyKHRoaXMpOwor
ICAgIGNsZWFudXAoKTsKIH0KIAordm9pZCBTeW5jTmV0d29ya1Jlc291cmNlTG9hZGVyOjpjbGVh
bnVwKCkKK3sKKyAgICBpbnZhbGlkYXRlU2FuZGJveEV4dGVuc2lvbnMoKTsKKyAgICBOZXR3b3Jr
UHJvY2Vzczo6c2hhcmVkKCkubmV0d29ya1Jlc291cmNlTG9hZFNjaGVkdWxlcigpLnNjaGVkdWxl
UmVtb3ZlTG9hZGVyKHRoaXMpOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5k
aWYgLy8gRU5BQkxFKE5FVFdPUktfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL1N5bmNOZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAppbmRleCBkOTdh
MTU5Li5jNTcxZGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9T
eW5jTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvU3luY05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCkBAIC00MiwxMiArNDIsMTUgQEAgcHVi
bGljOgogICAgIH0KIAogICAgIHZpcnR1YWwgdm9pZCBzdGFydCgpOworICAgIHZpcnR1YWwgdm9p
ZCBjb25uZWN0aW9uVG9XZWJQcm9jZXNzRGlkQ2xvc2UoKTsKICAgICAKICAgICB2aXJ0dWFsIGJv
b2wgaXNTeW5jaHJvbm91cygpIHsgcmV0dXJuIHRydWU7IH0KIAogcHJpdmF0ZToKICAgICBTeW5j
TmV0d29ya1Jlc291cmNlTG9hZGVyKGNvbnN0IE5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJz
JiwgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MqLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9ub3VzTG9hZDo6RGVs
YXllZFJlcGx5Pik7CiAgICAgCisgICAgdm9pZCBjbGVhbnVwKCk7CisgICAgCiAgICAgUmVmUHRy
PE1lc3NhZ2VzOjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UGVyZm9ybVN5bmNocm9u
b3VzTG9hZDo6RGVsYXllZFJlcGx5PiBtX2RlbGF5ZWRSZXBseTsKIH07CiAK
</data>
<flag name="review"
          id="213928"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>