<?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>150742</bug_id>
          
          <creation_ts>2015-10-30 16:55:52 -0700</creation_ts>
          <short_desc>Share more code between NETWORK_SESSION and non-NETWORK_SESSION NetworkResourceLoaders</short_desc>
          <delta_ts>2015-11-02 21:59:28 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit 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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150834</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1138048</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-30 16:55:52 -0700</bug_when>
    <thetext>Share more code between NETWORK_SESSION and non-NETWORK_SESSION WebResourceLoaders</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138050</commentid>
    <comment_count>1</comment_count>
      <attachid>264443</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-30 17:00:54 -0700</bug_when>
    <thetext>Created attachment 264443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138057</commentid>
    <comment_count>2</comment_count>
      <attachid>264446</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-30 17:14:23 -0700</bug_when>
    <thetext>Created attachment 264446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138065</commentid>
    <comment_count>3</comment_count>
      <attachid>264449</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-30 17:49:00 -0700</bug_when>
    <thetext>Created attachment 264449
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138184</commentid>
    <comment_count>4</comment_count>
      <attachid>264482</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-31 12:07:30 -0700</bug_when>
    <thetext>Created attachment 264482
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138199</commentid>
    <comment_count>5</comment_count>
      <attachid>264482</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-31 14:36:29 -0700</bug_when>
    <thetext>Comment on attachment 264482
Patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:497
&gt; +    // The NetworkProcess should never get a didReceiveData callback.
&gt; +    // We should always be using didReceiveBuffer.
&gt; +    ASSERT_NOT_REACHED();

This kind of thing usually indicates a C++ object design mistake.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:522
&gt; +    ASSERT_UNUSED(handle, handle == m_handle);
&gt; +
&gt; +    sharedWillSendRedirectedRequest(request, redirectResponse);

Strange that there’s a blank line here, but not in all the other functions.

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:142
&gt; +    void sharedDidReceiveBuffer(PassRefPtr&lt;WebCore::SharedBuffer&gt;, int reportedEncodedDataLength);

New code should not use PassRefPtr. It should use SharedBuffer&amp;, or SharedBuffer*, or Ref&lt;SharedBuffer&gt;&amp;&amp;, or RefPtr&lt;SharedBuffer&gt;&amp;&amp; depending on whether the buffer can be null and whether ownership is being transferred or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138246</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-31 17:12:48 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 264482 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264482&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:497
&gt; &gt; +    // The NetworkProcess should never get a didReceiveData callback.
&gt; &gt; +    // We should always be using didReceiveBuffer.
&gt; &gt; +    ASSERT_NOT_REACHED();
&gt; 
&gt; This kind of thing usually indicates a C++ object design mistake.
I agree.  Cleaning this up is outside of the scope of this patch, though.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:522
&gt; &gt; +    ASSERT_UNUSED(handle, handle == m_handle);
&gt; &gt; +
&gt; &gt; +    sharedWillSendRedirectedRequest(request, redirectResponse);
&gt; 
&gt; Strange that there’s a blank line here, but not in all the other functions.
&gt; 
&gt; &gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.h:142
&gt; &gt; +    void sharedDidReceiveBuffer(PassRefPtr&lt;WebCore::SharedBuffer&gt;, int reportedEncodedDataLength);
&gt; 
&gt; New code should not use PassRefPtr. It should use SharedBuffer&amp;, or
&gt; SharedBuffer*, or Ref&lt;SharedBuffer&gt;&amp;&amp;, or RefPtr&lt;SharedBuffer&gt;&amp;&amp; depending
&gt; on whether the buffer can be null and whether ownership is being transferred
&gt; or not.
RefPtr&lt;SharedBuffer&gt;&amp;&amp; it is, then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138247</commentid>
    <comment_count>7</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-10-31 17:15:56 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/191848</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138249</commentid>
    <comment_count>8</comment_count>
      <attachid>264482</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-31 17:50:53 -0700</bug_when>
    <thetext>Comment on attachment 264482
Patch

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

&gt; Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp:473
&gt; +    sharedDidReceiveBuffer(buffer, buffer-&gt;size());

The patch that was landed changed this to:

    sharedDidReceiveBuffer(WTF::move(buffer), buffer-&gt;size());

That’s wrong, because passing the first argument can modify buffer, changing it to be null, and the passing the second argument evaluates buffer. There is no guarantee of the order of evaluation of arguments, so this needs to be written out as two lines:

    auto size = buffer-&gt;size();
    sharedDidReceiveBuffer(WTF::move(buffer), size);

Please fix that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1138791</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-11-02 17:51:22 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Please fix that.
Followup in https://bugs.webkit.org/show_bug.cgi?id=150829</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264443</attachid>
            <date>2015-10-30 17:00:54 -0700</date>
            <delta_ts>2015-10-30 17:14:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150742-20151030170002.patch</filename>
            <type>text/plain</type>
            <size>19477</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTgyNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE1LTEwLTMwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU2hhcmUgbW9y
ZSBjb2RlIGJldHdlZW4gTkVUV09SS19TRVNTSU9OIGFuZCBub24tTkVUV09SS19TRVNTSU9OIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDc0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIHIxOTE0NTcgYWRkZWQgZW5vdWdoIGNvZGUgdG8gTmV0d29ya1Jlc291cmNl
TG9hZGVyIHRvIGxvYWQgbW9zdCByZXNvdXJjZXMgc3VjY2Vzc2Z1bGx5IGlmIHRoZXJlIGFyZSBu
byBlcnJvcnMuCisgICAgICAgIEl0IHBhc3NlZCBhYm91dCA4MCUgb2YgTGF5b3V0VGVzdHMvaHR0
cCBhbmQgY3Jhc2hlZCBzb21ldGltZXMuCisgICAgICAgIFRoaXMgcGFzc2VzIGFib3V0IDkzJSBv
ZiBMYXlvdXRUZXN0cy9odHRwIGFuZCBkb2VzIG5vdCBjcmFzaCBvbiBhbnkgb2YgdGhlIExheW91
dFRlc3RzL2h0dHAuCisgICAgICAgIEl0IHNob3VsZCBub3QgY2hhbmdlIGJlaGF2aW9yIG9mIHRo
ZSBub24tTkVUV09SS19TRVNTSU9OIGNvZGUgd2hpY2ggaXMgY3VycmVudGx5IHRoZSBkZWZhdWx0
IGluIHRydW5rLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkRmFpbCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkRmluaXNo
TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVk
RGlkUmVjZWl2ZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jl
c291cmNlTG9hZGVyOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNoYWxsZW5nZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29tcGxldGVXaXRoRXJy
b3IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZUFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3
aWxsU2VuZFJlcXVlc3RBc3luYyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZGVyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24u
aDoKKwogMjAxNS0xMC0zMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
IAogICAgICAgICBXS1ZpZXcgYmVpbmcgaW5zaWRlIFdLV2ViVmlldyBsZWFkcyB0byB3ZWlyZCBB
UEkgaXNzdWVzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5MTc2MCkKKysrIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3MSw1MSArMjcxLDEwOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6YWJvcnQoKQogICAgIGNsZWFudXAoKTsKIH0KIAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04p
Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlv
bihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Jik+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OnNoYXJlZERpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3Ip
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0
KTsKLX0KKyAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsKIAotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4gY29tcGxl
dGlvbkhhbmRsZXIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhh
bmRsaW5nLCBXZWJDb3JlOjpDcmVkZW50aWFsKCkpOworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
KQorICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOworI2VuZGlmCisgICAg
CisgICAgaWYgKGlzU3luY2hyb25vdXMoKSkgeworICAgICAgICBtX3N5bmNocm9ub3VzTG9hZERh
dGEtPmVycm9yID0gZXJyb3I7CisgICAgICAgIHNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXN0
KCptX3N5bmNocm9ub3VzTG9hZERhdGEsIG51bGxwdHIpOworICAgIH0gZWxzZQorICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmFpbFJlc291cmNlTG9hZChlcnJv
cikpOworICAgIAorICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9uSGFu
ZGxlcikKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRGaW5pc2hMb2FkaW5n
KGRvdWJsZSBmaW5pc2hUaW1lKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
bV9yZXNwb25zZSA9IHJlc3BvbnNlOwotICAgIG1fcmVzcG9uc2Uuc2V0U291cmNlKFJlc291cmNl
UmVzcG9uc2U6OlNvdXJjZTo6TmV0d29yayk7Ci0gICAgaWYgKG1fcGFyYW1ldGVycy5uZWVkc0Nl
cnRpZmljYXRlSW5mbykKLSAgICAgICAgbV9yZXNwb25zZS5pbmNsdWRlQ2VydGlmaWNhdGVJbmZv
KCk7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkuaXNFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKG1fY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24pIHsKKyAgICAgICAgICAgIC8vIDMwNCBOb3QgTW9kaWZpZWQKKyAgICAgICAgICAgIEFT
U0VSVChtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0KTsKKyAgICAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldmFsaWRhdGVkIik7CisgICAgICAg
ICAgICBkaWRSZXRyaWV2ZUNhY2hlRW50cnkoV1RGOjptb3ZlKG1fY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBib29sIGFs
bG93U3RhbGUgPSBvcmlnaW5hbFJlcXVlc3QoKS5jYWNoZVBvbGljeSgpID49IFJldHVybkNhY2hl
RGF0YUVsc2VMb2FkOworICAgICAgICBib29sIGhhc0NhY2hlYWJsZVJlZGlyZWN0ID0gbV9yZXNw
b25zZS5pc0hUVFAoKSAmJiBXZWJDb3JlOjpyZWRpcmVjdENoYWluQWxsb3dzUmV1c2UobV9yZWRp
cmVjdENoYWluQ2FjaGVTdGF0dXMsIGFsbG93U3RhbGUgPyBXZWJDb3JlOjpSZXVzZUV4cGlyZWRS
ZWRpcmVjdGlvbiA6IFdlYkNvcmU6OkRvTm90UmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24pOworICAg
ICAgICBpZiAoaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgbV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0
dXMuc3RhdHVzID09IFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1czo6Q2FjaGVkUmVkaXJlY3Rpb24p
IHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIHNob3VsZCBjYWNoZSB0aGUgYWN0dWFsIHJlZGly
ZWN0cyBpbnN0ZWFkIG9mIHRoZSBlbmQgcmVzdWx0PworICAgICAgICAgICAgYXV0byBub3cgPSBz
dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKKyAgICAgICAgICAgIGF1dG8gcmVzcG9u
c2VFbmRPZlZhbGlkaXR5ID0gbm93ICsgV2ViQ29yZTo6Y29tcHV0ZUZyZXNobmVzc0xpZmV0aW1l
Rm9ySFRUUEZhbWlseShtX3Jlc3BvbnNlLCBub3cpIC0gV2ViQ29yZTo6Y29tcHV0ZUN1cnJlbnRB
Z2UobV9yZXNwb25zZSwgbm93KTsKKyAgICAgICAgICAgIGhhc0NhY2hlYWJsZVJlZGlyZWN0ID0g
cmVzcG9uc2VFbmRPZlZhbGlkaXR5IDw9IG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLmVuZE9m
VmFsaWRpdHk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNQcml2YXRlID0g
c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKTsKKyAgICAgICAgaWYgKG1fYnVmZmVyZWREYXRhRm9y
Q2FjaGUgJiYgaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgIWlzUHJpdmF0ZSkgeworICAgICAgICAg
ICAgLy8gS2VlcCB0aGUgY29ubmVjdGlvbiBhbGl2ZS4KKyAgICAgICAgICAgIFJlZlB0cjxOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY29ubmVjdGlvbihjb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKCkpOworICAgICAgICAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVy
KHRoaXMpOworICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZShvcmln
aW5hbFJlcXVlc3QoKSwgbV9yZXNwb25zZSwgV1RGOjptb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2Fj
aGUpLCBbbG9hZGVyLCBjb25uZWN0aW9uXShOZXR3b3JrQ2FjaGU6Ok1hcHBlZEJvZHkmIG1hcHBl
ZEJvZHkpIHsKKyNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQorICAgICAgICAgICAgICAg
IGlmIChtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlSGFuZGxlLmlzTnVsbCgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwg
IihOZXR3b3JrUHJvY2Vzcykgc2VuZGluZyBEaWRDYWNoZVJlc291cmNlIik7CisgICAgICAgICAg
ICAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRp
ZENhY2hlUmVzb3VyY2UobG9hZGVyLT5vcmlnaW5hbFJlcXVlc3QoKSwgbWFwcGVkQm9keS5zaGFy
ZWFibGVSZXNvdXJjZUhhbmRsZSwgbG9hZGVyLT5zZXNzaW9uSUQoKSkpOworI2VuZGlmCisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmICghaGFzQ2FjaGVhYmxlUmVkaXJlY3QpIHsK
KyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBrZWVwIGEgc3RhbGUgZW50cnkgaW4g
dGhlIGNhY2hlLgorICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUo
b3JpZ2luYWxSZXF1ZXN0KCkpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCiAgICAgCi0gICAg
Ym9vbCBzaG91bGRXYWl0Q29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgPSBvcmlnaW5hbFJlcXVl
c3QoKS5yZXF1ZXN0ZXIoKSA9PSBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKLSAg
ICBpZiAoIXNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6
OkRpZFJlY2VpdmVSZXNwb25zZShtX3Jlc3BvbnNlLCBzaG91bGRXYWl0Q29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKFJl
c3BvbnNlRGlzcG9zaXRpb246OkFsbG93KTsKKyAgICBpZiAoaXNTeW5jaHJvbm91cygpKQorICAg
ICAgICBzZW5kUmVwbHlUb1N5bmNocm9ub3VzUmVxdWVzdCgqbV9zeW5jaHJvbm91c0xvYWREYXRh
LCBtX2J1ZmZlcmVkRGF0YS5nZXQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChtX2J1ZmZl
cmVkRGF0YSAmJiBtX2J1ZmZlcmVkRGF0YS0+c2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogUGFzcyBhIHJlYWwgdmFsdWUgb3IgcmVtb3ZlIHRoZSBlbmNvZGVkIGRhdGEgc2l6ZSBmZWF0
dXJlLgorICAgICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHNlbmRCdWZmZXJNYXliZUFi
b3J0aW5nKCptX2J1ZmZlcmVkRGF0YSwgLTEpOworICAgICAgICAgICAgaWYgKCFzaG91bGRDb250
aW51ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNlTG9hZChmaW5pc2hU
aW1lKSk7CisgICAgfQorICAgIAorICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
IGJ1ZmZlcikKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRSZWNlaXZlQnVm
ZmVyKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIsIGludCByZXBvcnRl
ZEVuY29kZWREYXRhTGVuZ3RoKQogewotICAgIEFTU0VSVChidWZmZXIpOwotICAgIHNlbmRCdWZm
ZXJNYXliZUFib3J0aW5nKCpidWZmZXIsIGJ1ZmZlci0+c2l6ZSgpKTsKLX0KKyNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKKyAgICBBU1NFUlQoIW1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24pOwor
ICAgIAorICAgIGlmIChtX2J1ZmZlcmVkRGF0YUZvckNhY2hlKSB7CisgICAgICAgIC8vIFByZXZl
bnQgbWVtb3J5IGdyb3d0aCBpbiBjYXNlIG9mIHN0cmVhbWluZyBkYXRhLgorICAgICAgICBjb25z
dCBzaXplX3QgbWF4aW11bUNhY2hlQnVmZmVyU2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7CisgICAg
ICAgIGlmIChtX2J1ZmZlcmVkRGF0YUZvckNhY2hlLT5zaXplKCkgKyBidWZmZXItPnNpemUoKSA8
PSBtYXhpbXVtQ2FjaGVCdWZmZXJTaXplKQorICAgICAgICAgICAgbV9idWZmZXJlZERhdGFGb3JD
YWNoZS0+YXBwZW5kKGJ1ZmZlci5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
YnVmZmVyZWREYXRhRm9yQ2FjaGUgPSBudWxscHRyOworICAgIH0KKyNlbmRpZgorICAgIC8vIEZJ
WE1FOiBBdCBsZWFzdCBvbiBPUyBYIFlvc2VtaXRlIHdlIGFsd2F5cyBnZXQgLTEgZnJvbSB0aGUg
cmVzb3VyY2UgaGFuZGxlLgorICAgIHVuc2lnbmVkIGVuY29kZWREYXRhTGVuZ3RoID0gcmVwb3J0
ZWRFbmNvZGVkRGF0YUxlbmd0aCA+PSAwID8gcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCA6IGJ1
ZmZlci0+c2l6ZSgpOworICAgIAorICAgIG1fYnl0ZXNSZWNlaXZlZCArPSBidWZmZXItPnNpemUo
KTsKKyAgICBpZiAobV9idWZmZXJlZERhdGEpIHsKKyAgICAgICAgbV9idWZmZXJlZERhdGEtPmFw
cGVuZChidWZmZXIuZ2V0KCkpOworICAgICAgICBtX2J1ZmZlcmVkRGF0YUVuY29kZWREYXRhTGVu
Z3RoICs9IGVuY29kZWREYXRhTGVuZ3RoOworICAgICAgICBzdGFydEJ1ZmZlcmluZ1RpbWVySWZO
ZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZW5kQnVmZmVyTWF5YmVBYm9y
dGluZygqYnVmZmVyLCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAKLXZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmluaXNoUmVz
b3VyY2VMb2FkKFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpKTsKIH0KLQotI2Vs
c2UKLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5j
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVk
UmVzcG9uc2UpCisgICAgCitTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OnNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQogewotICAgIEFTU0VSVF9VTlVTRUQo
aGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCiAgICAgbV9yZXNwb25zZSA9IHJlY2VpdmVk
UmVzcG9uc2U7CiAKICAgICBtX3Jlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpT
b3VyY2U6Ok5ldHdvcmspOwpAQCAtMzUwLDcgKzQwNyw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlUmUKICAgICAgICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+
cmVzcG9uc2UgPSBtX3Jlc3BvbnNlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmICgh
c2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVj
ZWl2ZVJlc3BvbnNlKG1fcmVzcG9uc2UsIHNob3VsZFdhaXRDb250aW51ZURpZFJlY2VpdmVSZXNw
b25zZSkpKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4g
U2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2U6Ok5vOwogICAgICAgICB9CiAgICAgfQog
CkBAIC0zNjAsOSArNDE3LDUzIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlUmUKICAgICBzaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSA9IHNob3VsZENvbnRp
bnVlRGlkUmVjZWl2ZVJlc3BvbnNlIHx8IG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb247CiAjZW5k
aWYKICAgICBpZiAoIXNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6
Tm87CisgICAgcmV0dXJuIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXM7Cit9
CisgICAgCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKIAotICAgIG1faGFuZGxlLT5jb250aW51
ZURpZFJlY2VpdmVSZXNwb25zZSgpOwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxQ
ZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIHN0ZDo6ZnVuY3Rpb248dm9p
ZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKT4gY29tcGxldGlvbkhhbmRsZXIpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0KTsK
K30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29u
c3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgc3RkOjpmdW5j
dGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNv
cmU6OkNyZWRlbnRpYWwmKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bv
c2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhhbmRsaW5nLCBXZWJDb3JlOjpDcmVkZW50aWFsKCkpOwor
fQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
UmVzcG9uc2VEaXNwb3NpdGlvbik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CisgICAgc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKHJlc3BvbnNlKTsK
KyAgICAvLyBBbnR0aTogU2hvdWxkIHdlIGV2ZXIgY29udGludWUgZGlkIHJlY2VpdmUgcmVzcG9u
c2U/IEkgdGhpbmsgbm90LCBidXQgSSdtIG5vdCBzdXJlLgorICAgIGNvbXBsZXRpb25IYW5kbGVy
KFJlc3BvbnNlRGlzcG9zaXRpb246OkFsbG93KTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGJ1ZmZl
cikKK3sKKyAgICBBU1NFUlQoYnVmZmVyKTsKKyAgICBzaGFyZWREaWRSZWNlaXZlQnVmZmVyKGJ1
ZmZlciwgYnVmZmVyLT5zaXplKCkpOworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3Ip
Cit7CisgICAgaWYgKGVycm9yLmlzTnVsbCgpKQorICAgICAgICBzaGFyZWREaWRGaW5pc2hMb2Fk
aW5nKFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworICAgIGVsc2UKKyAgICAg
ICAgc2hhcmVkRGlkRmFpbChlcnJvcik7Cit9CisKKyNlbHNlCisKK3ZvaWQgTmV0d29ya1Jlc291
cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxl
LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQoreworICAgIEFTU0VS
VF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIGlmIChzaGFyZWREaWRS
ZWNlaXZlUmVzcG9uc2UocmVjZWl2ZWRSZXNwb25zZSkgPT0gU2hvdWxkQ29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2U6OlllcykKKyAgICAgICAgbV9oYW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJl
c3BvbnNlKCk7CiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0
YShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IGNoYXIqIC8qIGRhdGEgKi8sIHVuc2lnbmVkIC8qIGxl
bmd0aCAqLywgaW50IC8qIGVuY29kZWREYXRhTGVuZ3RoICovKQpAQCAtMzcyLDEwNiArNDczLDIy
IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGEKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVCdWZmZXIoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IGJ1ZmZlciwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpCit2b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJ1ZmZlcihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBQYXNz
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBpbnQgcmVwb3J0ZWRFbmNvZGVk
RGF0YUxlbmd0aCkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFu
ZGxlKTsKLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAgICBBU1NFUlQoIW1fY2FjaGVFbnRy
eUZvclZhbGlkYXRpb24pOwotCi0gICAgaWYgKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUpIHsKLSAg
ICAgICAgLy8gUHJldmVudCBtZW1vcnkgZ3Jvd3RoIGluIGNhc2Ugb2Ygc3RyZWFtaW5nIGRhdGEu
Ci0gICAgICAgIGNvbnN0IHNpemVfdCBtYXhpbXVtQ2FjaGVCdWZmZXJTaXplID0gMTAgKiAxMDI0
ICogMTAyNDsKLSAgICAgICAgaWYgKG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUtPnNpemUoKSArIGJ1
ZmZlci0+c2l6ZSgpIDw9IG1heGltdW1DYWNoZUJ1ZmZlclNpemUpCi0gICAgICAgICAgICBtX2J1
ZmZlcmVkRGF0YUZvckNhY2hlLT5hcHBlbmQoYnVmZmVyLmdldCgpKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9idWZmZXJlZERhdGFGb3JDYWNoZSA9IG51bGxwdHI7Ci0gICAgfQotI2Vu
ZGlmCi0gICAgLy8gRklYTUU6IEF0IGxlYXN0IG9uIE9TIFggWW9zZW1pdGUgd2UgYWx3YXlzIGdl
dCAtMSBmcm9tIHRoZSByZXNvdXJjZSBoYW5kbGUuCi0gICAgdW5zaWduZWQgZW5jb2RlZERhdGFM
ZW5ndGggPSByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoID49IDAgPyByZXBvcnRlZEVuY29kZWRE
YXRhTGVuZ3RoIDogYnVmZmVyLT5zaXplKCk7Ci0KLSAgICBtX2J5dGVzUmVjZWl2ZWQgKz0gYnVm
ZmVyLT5zaXplKCk7Ci0gICAgaWYgKG1fYnVmZmVyZWREYXRhKSB7Ci0gICAgICAgIG1fYnVmZmVy
ZWREYXRhLT5hcHBlbmQoYnVmZmVyLmdldCgpKTsKLSAgICAgICAgbV9idWZmZXJlZERhdGFFbmNv
ZGVkRGF0YUxlbmd0aCArPSBlbmNvZGVkRGF0YUxlbmd0aDsKLSAgICAgICAgc3RhcnRCdWZmZXJp
bmdUaW1lcklmTmVlZGVkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2VuZEJ1ZmZl
ck1heWJlQWJvcnRpbmcoKmJ1ZmZlciwgZW5jb2RlZERhdGFMZW5ndGgpOworICAgIHNoYXJlZERp
ZFJlY2VpdmVCdWZmZXIoYnVmZmVyLCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKTsKIH0KIAog
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgZG91YmxlIGZpbmlzaFRpbWUpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChoYW5k
bGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKLSAg
ICBpZiAoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5pc0VuYWJsZWQoKSkgewotICAgICAgICBp
ZiAobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewotICAgICAgICAgICAgLy8gMzA0IE5vdCBN
b2RpZmllZAotICAgICAgICAgICAgQVNTRVJUKG1fcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9
PSAzMDQpOwotICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykg
cmV2YWxpZGF0ZWQiKTsKLSAgICAgICAgICAgIGRpZFJldHJpZXZlQ2FjaGVFbnRyeShXVEY6Om1v
dmUobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGJvb2wgYWxsb3dTdGFsZSA9IG9yaWdpbmFsUmVxdWVzdCgpLmNhY2hl
UG9saWN5KCkgPj0gUmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQ7Ci0gICAgICAgIGJvb2wgaGFzQ2Fj
aGVhYmxlUmVkaXJlY3QgPSBtX3Jlc3BvbnNlLmlzSFRUUCgpICYmIFdlYkNvcmU6OnJlZGlyZWN0
Q2hhaW5BbGxvd3NSZXVzZShtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cywgYWxsb3dTdGFsZSA/
IFdlYkNvcmU6OlJldXNlRXhwaXJlZFJlZGlyZWN0aW9uIDogV2ViQ29yZTo6RG9Ob3RSZXVzZUV4
cGlyZWRSZWRpcmVjdGlvbik7Ci0gICAgICAgIGlmIChoYXNDYWNoZWFibGVSZWRpcmVjdCAmJiBt
X3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cy5zdGF0dXMgPT0gUmVkaXJlY3RDaGFpbkNhY2hlU3Rh
dHVzOjpDYWNoZWRSZWRpcmVjdGlvbikgewotICAgICAgICAgICAgLy8gTWF5YmUgd2Ugc2hvdWxk
IGNhY2hlIHRoZSBhY3R1YWwgcmVkaXJlY3RzIGluc3RlYWQgb2YgdGhlIGVuZCByZXN1bHQ/Ci0g
ICAgICAgICAgICBhdXRvIG5vdyA9IHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6Om5vdygpOwot
ICAgICAgICAgICAgYXV0byByZXNwb25zZUVuZE9mVmFsaWRpdHkgPSBub3cgKyBXZWJDb3JlOjpj
b21wdXRlRnJlc2huZXNzTGlmZXRpbWVGb3JIVFRQRmFtaWx5KG1fcmVzcG9uc2UsIG5vdykgLSBX
ZWJDb3JlOjpjb21wdXRlQ3VycmVudEFnZShtX3Jlc3BvbnNlLCBub3cpOwotICAgICAgICAgICAg
aGFzQ2FjaGVhYmxlUmVkaXJlY3QgPSByZXNwb25zZUVuZE9mVmFsaWRpdHkgPD0gbV9yZWRpcmVj
dENoYWluQ2FjaGVTdGF0dXMuZW5kT2ZWYWxpZGl0eTsKLSAgICAgICAgfQotCi0gICAgICAgIGJv
b2wgaXNQcml2YXRlID0gc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKTsKLSAgICAgICAgaWYgKG1f
YnVmZmVyZWREYXRhRm9yQ2FjaGUgJiYgaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgIWlzUHJpdmF0
ZSkgewotICAgICAgICAgICAgLy8gS2VlcCB0aGUgY29ubmVjdGlvbiBhbGl2ZS4KLSAgICAgICAg
ICAgIFJlZlB0cjxOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY29ubmVjdGlvbihjb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKCkpOwotICAgICAgICAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcj4gbG9hZGVyKHRoaXMpOwotICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0
b24oKS5zdG9yZShvcmlnaW5hbFJlcXVlc3QoKSwgbV9yZXNwb25zZSwgV1RGOjptb3ZlKG1fYnVm
ZmVyZWREYXRhRm9yQ2FjaGUpLCBbbG9hZGVyLCBjb25uZWN0aW9uXShOZXR3b3JrQ2FjaGU6Ok1h
cHBlZEJvZHkmIG1hcHBlZEJvZHkpIHsKLSNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQot
ICAgICAgICAgICAgICAgIGlmIChtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlSGFuZGxlLmlz
TnVsbCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgTE9H
KE5ldHdvcmtDYWNoZSwgIihOZXR3b3JrUHJvY2Vzcykgc2VuZGluZyBEaWRDYWNoZVJlc291cmNl
Iik7Ci0gICAgICAgICAgICAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
c0Nvbm5lY3Rpb246OkRpZENhY2hlUmVzb3VyY2UobG9hZGVyLT5vcmlnaW5hbFJlcXVlc3QoKSwg
bWFwcGVkQm9keS5zaGFyZWFibGVSZXNvdXJjZUhhbmRsZSwgbG9hZGVyLT5zZXNzaW9uSUQoKSkp
OwotI2VuZGlmCi0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIGlmICghaGFzQ2FjaGVh
YmxlUmVkaXJlY3QpIHsKLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBrZWVwIGEg
c3RhbGUgZW50cnkgaW4gdGhlIGNhY2hlLgotICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5n
bGV0b24oKS5yZW1vdmUob3JpZ2luYWxSZXF1ZXN0KCkpOwotICAgICAgICB9Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBpZiAoaXNTeW5jaHJvbm91cygpKQotICAgICAgICBzZW5kUmVwbHlUb1N5bmNo
cm9ub3VzUmVxdWVzdCgqbV9zeW5jaHJvbm91c0xvYWREYXRhLCBtX2J1ZmZlcmVkRGF0YS5nZXQo
KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2J1ZmZlcmVkRGF0YSAmJiBtX2J1ZmZlcmVk
RGF0YS0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogUGFzcyBhIHJlYWwgdmFsdWUg
b3IgcmVtb3ZlIHRoZSBlbmNvZGVkIGRhdGEgc2l6ZSBmZWF0dXJlLgotICAgICAgICAgICAgYm9v
bCBzaG91bGRDb250aW51ZSA9IHNlbmRCdWZmZXJNYXliZUFib3J0aW5nKCptX2J1ZmZlcmVkRGF0
YSwgLTEpOwotICAgICAgICAgICAgaWYgKCFzaG91bGRDb250aW51ZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VM
b2FkZXI6OkRpZEZpbmlzaFJlc291cmNlTG9hZChmaW5pc2hUaW1lKSk7Ci0gICAgfQotCi0gICAg
Y2xlYW51cCgpOworICAgIHNoYXJlZERpZEZpbmlzaExvYWRpbmcoZmluaXNoVGltZSk7CiB9CiAK
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGYWlsKFJlc291cmNlSGFuZGxlKiBoYW5k
bGUsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewogICAgIEFTU0VSVF9VTlVTRUQoaGFu
ZGxlLCAhaGFuZGxlIHx8IGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0KLSNpZiBFTkFCTEUoTkVUV09S
S19DQUNIRSkKLSAgICBtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uID0gbnVsbHB0cjsKLSNlbmRp
ZgotCi0gICAgaWYgKGlzU3luY2hyb25vdXMoKSkgewotICAgICAgICBtX3N5bmNocm9ub3VzTG9h
ZERhdGEtPmVycm9yID0gZXJyb3I7Ci0gICAgICAgIHNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1
ZXN0KCptX3N5bmNocm9ub3VzTG9hZERhdGEsIG51bGxwdHIpOwotICAgIH0gZWxzZQotICAgICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmFpbFJlc291cmNlTG9hZChl
cnJvcikpOwotCi0gICAgY2xlYW51cCgpOworICAgIHNoYXJlZERpZEZhaWwoZXJyb3IpOwogfQog
CiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0QXN5bmMoUmVzb3Vy
Y2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQpJbmRleDogU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHJldmlz
aW9uIDE5MTc2MCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNv
dXJjZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTEgKzEzMywyMCBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigp
IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9u
SUQoKSBvdmVycmlkZSB7IHJldHVybiBtX3BhcmFtZXRlcnMuaWRlbnRpZmllcjsgfQogCisgICAg
ZW51bSBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSB7CisgICAgICAgIFllcywKKyAg
ICAgICAgTm8KKyAgICB9OworICAgIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIHNo
YXJlZERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7
CisgICAgdm9pZCBzaGFyZWREaWRSZWNlaXZlQnVmZmVyKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPiwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpOworICAgIHZvaWQgc2hh
cmVkRGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisgICAgdm9pZCBzaGFy
ZWREaWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKTsKKwogI2lmIFVTRShORVRXT1JL
X1NFU1NJT04pCiAgICAgLy8gTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50LgogICAgIHZpcnR1YWwg
dm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
c3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2
b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpPikgZmluYWwgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgZmluYWwgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikg
ZmluYWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNl
RGlzcG9zaXRpb24pPikgZmluYWwgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+KSBmaW5hbCBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VFcnJvciYpIGZpbmFsIG92ZXJyaWRlOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAkocmV2aXNpb24gMTkxNzYwKQorKysg
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNyArNjcsNyBAQCBjbGFzcyBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQgewog
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNv
cmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4p
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291
cmNlUmVzcG9uc2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlc3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24p
PikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWZQdHI8V2ViQ29yZTo6
U2hhcmVkQnVmZmVyPikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVdpdGhFcnJv
cihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgPSAwOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264446</attachid>
            <date>2015-10-30 17:14:23 -0700</date>
            <delta_ts>2015-10-30 17:48:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150742-20151030171331.patch</filename>
            <type>text/plain</type>
            <size>19500</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTgyNykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE1LTEwLTMwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU2hhcmUgbW9y
ZSBjb2RlIGJldHdlZW4gTkVUV09SS19TRVNTSU9OIGFuZCBub24tTkVUV09SS19TRVNTSU9OIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDc0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIHIxOTE0NTcgYWRkZWQgZW5vdWdoIGNvZGUgdG8gTmV0d29ya1Jlc291cmNl
TG9hZGVyIHRvIGxvYWQgbW9zdCByZXNvdXJjZXMgc3VjY2Vzc2Z1bGx5IGlmIHRoZXJlIGFyZSBu
byBlcnJvcnMuCisgICAgICAgIEl0IHBhc3NlZCBhYm91dCA4MCUgb2YgTGF5b3V0VGVzdHMvaHR0
cCBhbmQgY3Jhc2hlZCBzb21ldGltZXMuCisgICAgICAgIFRoaXMgcGFzc2VzIGFib3V0IDkzJSBv
ZiBMYXlvdXRUZXN0cy9odHRwIGFuZCBkb2VzIG5vdCBjcmFzaCBvbiBhbnkgb2YgdGhlIExheW91
dFRlc3RzL2h0dHAuCisgICAgICAgIEl0IHNob3VsZCBub3QgY2hhbmdlIGJlaGF2aW9yIG9mIHRo
ZSBub24tTkVUV09SS19TRVNTSU9OIGNvZGUgd2hpY2ggaXMgY3VycmVudGx5IHRoZSBkZWZhdWx0
IGluIHRydW5rLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkRmFpbCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkRmluaXNo
TG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVk
RGlkUmVjZWl2ZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jl
c291cmNlTG9hZGVyOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbik6CisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNoYWxsZW5nZSk6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSk6Cisg
ICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkQ29tcGxldGVXaXRoRXJy
b3IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZUFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3
aWxsU2VuZFJlcXVlc3RBc3luYyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jl
c291cmNlTG9hZGVyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24u
aDoKKwogMjAxNS0xMC0zMCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4K
IAogICAgICAgICBXS1ZpZXcgYmVpbmcgaW5zaWRlIFdLV2ViVmlldyBsZWFkcyB0byB3ZWlyZCBB
UEkgaXNzdWVzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5MTc2MCkKKysrIFNvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3MSw1MSArMjcxLDEwOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6YWJvcnQoKQogICAgIGNsZWFudXAoKTsKIH0KIAotI2lmIFVTRShORVRXT1JLX1NFU1NJT04p
Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlv
bihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0LCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0Jik+IGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OnNoYXJlZERpZEZhaWwoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYgZXJyb3Ip
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0
KTsKLX0KKyAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsKIAotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmIGNoYWxsZW5nZSwgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4gY29tcGxl
dGlvbkhhbmRsZXIpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFu
ZGxlcihBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpQZXJmb3JtRGVmYXVsdEhh
bmRsaW5nLCBXZWJDb3JlOjpDcmVkZW50aWFsKCkpOworI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
KQorICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOworI2VuZGlmCisgICAg
CisgICAgaWYgKGlzU3luY2hyb25vdXMoKSkgeworICAgICAgICBtX3N5bmNocm9ub3VzTG9hZERh
dGEtPmVycm9yID0gZXJyb3I7CisgICAgICAgIHNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXN0
KCptX3N5bmNocm9ub3VzTG9hZERhdGEsIG51bGxwdHIpOworICAgIH0gZWxzZQorICAgICAgICBz
ZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmFpbFJlc291cmNlTG9hZChlcnJv
cikpOworICAgIAorICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9uSGFu
ZGxlcikKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRGaW5pc2hMb2FkaW5n
KGRvdWJsZSBmaW5pc2hUaW1lKQogewotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAg
bV9yZXNwb25zZSA9IHJlc3BvbnNlOwotICAgIG1fcmVzcG9uc2Uuc2V0U291cmNlKFJlc291cmNl
UmVzcG9uc2U6OlNvdXJjZTo6TmV0d29yayk7Ci0gICAgaWYgKG1fcGFyYW1ldGVycy5uZWVkc0Nl
cnRpZmljYXRlSW5mbykKLSAgICAgICAgbV9yZXNwb25zZS5pbmNsdWRlQ2VydGlmaWNhdGVJbmZv
KCk7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgaWYgKE5ldHdvcmtDYWNoZTo6c2lu
Z2xldG9uKCkuaXNFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKG1fY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24pIHsKKyAgICAgICAgICAgIC8vIDMwNCBOb3QgTW9kaWZpZWQKKyAgICAgICAgICAgIEFT
U0VSVChtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0KTsKKyAgICAgICAgICAgIExP
RyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldmFsaWRhdGVkIik7CisgICAgICAg
ICAgICBkaWRSZXRyaWV2ZUNhY2hlRW50cnkoV1RGOjptb3ZlKG1fY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBib29sIGFs
bG93U3RhbGUgPSBvcmlnaW5hbFJlcXVlc3QoKS5jYWNoZVBvbGljeSgpID49IFJldHVybkNhY2hl
RGF0YUVsc2VMb2FkOworICAgICAgICBib29sIGhhc0NhY2hlYWJsZVJlZGlyZWN0ID0gbV9yZXNw
b25zZS5pc0hUVFAoKSAmJiBXZWJDb3JlOjpyZWRpcmVjdENoYWluQWxsb3dzUmV1c2UobV9yZWRp
cmVjdENoYWluQ2FjaGVTdGF0dXMsIGFsbG93U3RhbGUgPyBXZWJDb3JlOjpSZXVzZUV4cGlyZWRS
ZWRpcmVjdGlvbiA6IFdlYkNvcmU6OkRvTm90UmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24pOworICAg
ICAgICBpZiAoaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgbV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0
dXMuc3RhdHVzID09IFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1czo6Q2FjaGVkUmVkaXJlY3Rpb24p
IHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIHNob3VsZCBjYWNoZSB0aGUgYWN0dWFsIHJlZGly
ZWN0cyBpbnN0ZWFkIG9mIHRoZSBlbmQgcmVzdWx0PworICAgICAgICAgICAgYXV0byBub3cgPSBz
dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKKyAgICAgICAgICAgIGF1dG8gcmVzcG9u
c2VFbmRPZlZhbGlkaXR5ID0gbm93ICsgV2ViQ29yZTo6Y29tcHV0ZUZyZXNobmVzc0xpZmV0aW1l
Rm9ySFRUUEZhbWlseShtX3Jlc3BvbnNlLCBub3cpIC0gV2ViQ29yZTo6Y29tcHV0ZUN1cnJlbnRB
Z2UobV9yZXNwb25zZSwgbm93KTsKKyAgICAgICAgICAgIGhhc0NhY2hlYWJsZVJlZGlyZWN0ID0g
cmVzcG9uc2VFbmRPZlZhbGlkaXR5IDw9IG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLmVuZE9m
VmFsaWRpdHk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNQcml2YXRlID0g
c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKTsKKyAgICAgICAgaWYgKG1fYnVmZmVyZWREYXRhRm9y
Q2FjaGUgJiYgaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgIWlzUHJpdmF0ZSkgeworICAgICAgICAg
ICAgLy8gS2VlcCB0aGUgY29ubmVjdGlvbiBhbGl2ZS4KKyAgICAgICAgICAgIFJlZlB0cjxOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY29ubmVjdGlvbihjb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKCkpOworICAgICAgICAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9hZGVy
KHRoaXMpOworICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZShvcmln
aW5hbFJlcXVlc3QoKSwgbV9yZXNwb25zZSwgV1RGOjptb3ZlKG1fYnVmZmVyZWREYXRhRm9yQ2Fj
aGUpLCBbbG9hZGVyLCBjb25uZWN0aW9uXShOZXR3b3JrQ2FjaGU6Ok1hcHBlZEJvZHkmIG1hcHBl
ZEJvZHkpIHsKKyNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQorICAgICAgICAgICAgICAg
IGlmIChtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlSGFuZGxlLmlzTnVsbCgpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNoZSwg
IihOZXR3b3JrUHJvY2Vzcykgc2VuZGluZyBEaWRDYWNoZVJlc291cmNlIik7CisgICAgICAgICAg
ICAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRp
ZENhY2hlUmVzb3VyY2UobG9hZGVyLT5vcmlnaW5hbFJlcXVlc3QoKSwgbWFwcGVkQm9keS5zaGFy
ZWFibGVSZXNvdXJjZUhhbmRsZSwgbG9hZGVyLT5zZXNzaW9uSUQoKSkpOworI2VuZGlmCisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmICghaGFzQ2FjaGVhYmxlUmVkaXJlY3QpIHsK
KyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBrZWVwIGEgc3RhbGUgZW50cnkgaW4g
dGhlIGNhY2hlLgorICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1vdmUo
b3JpZ2luYWxSZXF1ZXN0KCkpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCiAgICAgCi0gICAg
Ym9vbCBzaG91bGRXYWl0Q29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgPSBvcmlnaW5hbFJlcXVl
c3QoKS5yZXF1ZXN0ZXIoKSA9PSBSZXNvdXJjZVJlcXVlc3Q6OlJlcXVlc3Rlcjo6TWFpbjsKLSAg
ICBpZiAoIXNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6
OkRpZFJlY2VpdmVSZXNwb25zZShtX3Jlc3BvbnNlLCBzaG91bGRXYWl0Q29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNvbXBsZXRpb25IYW5kbGVyKFJl
c3BvbnNlRGlzcG9zaXRpb246OkFsbG93KTsKKyAgICBpZiAoaXNTeW5jaHJvbm91cygpKQorICAg
ICAgICBzZW5kUmVwbHlUb1N5bmNocm9ub3VzUmVxdWVzdCgqbV9zeW5jaHJvbm91c0xvYWREYXRh
LCBtX2J1ZmZlcmVkRGF0YS5nZXQoKSk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChtX2J1ZmZl
cmVkRGF0YSAmJiBtX2J1ZmZlcmVkRGF0YS0+c2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogUGFzcyBhIHJlYWwgdmFsdWUgb3IgcmVtb3ZlIHRoZSBlbmNvZGVkIGRhdGEgc2l6ZSBmZWF0
dXJlLgorICAgICAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHNlbmRCdWZmZXJNYXliZUFi
b3J0aW5nKCptX2J1ZmZlcmVkRGF0YSwgLTEpOworICAgICAgICAgICAgaWYgKCFzaG91bGRDb250
aW51ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZpbmlzaFJlc291cmNlTG9hZChmaW5pc2hU
aW1lKSk7CisgICAgfQorICAgIAorICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
IGJ1ZmZlcikKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRSZWNlaXZlQnVm
ZmVyKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIsIGludCByZXBvcnRl
ZEVuY29kZWREYXRhTGVuZ3RoKQogewotICAgIEFTU0VSVChidWZmZXIpOwotICAgIHNlbmRCdWZm
ZXJNYXliZUFib3J0aW5nKCpidWZmZXIsIGJ1ZmZlci0+c2l6ZSgpKTsKLX0KKyNpZiBFTkFCTEUo
TkVUV09SS19DQUNIRSkKKyAgICBBU1NFUlQoIW1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24pOwor
ICAgIAorICAgIGlmIChtX2J1ZmZlcmVkRGF0YUZvckNhY2hlKSB7CisgICAgICAgIC8vIFByZXZl
bnQgbWVtb3J5IGdyb3d0aCBpbiBjYXNlIG9mIHN0cmVhbWluZyBkYXRhLgorICAgICAgICBjb25z
dCBzaXplX3QgbWF4aW11bUNhY2hlQnVmZmVyU2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7CisgICAg
ICAgIGlmIChtX2J1ZmZlcmVkRGF0YUZvckNhY2hlLT5zaXplKCkgKyBidWZmZXItPnNpemUoKSA8
PSBtYXhpbXVtQ2FjaGVCdWZmZXJTaXplKQorICAgICAgICAgICAgbV9idWZmZXJlZERhdGFGb3JD
YWNoZS0+YXBwZW5kKGJ1ZmZlci5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
YnVmZmVyZWREYXRhRm9yQ2FjaGUgPSBudWxscHRyOworICAgIH0KKyNlbmRpZgorICAgIC8vIEZJ
WE1FOiBBdCBsZWFzdCBvbiBPUyBYIFlvc2VtaXRlIHdlIGFsd2F5cyBnZXQgLTEgZnJvbSB0aGUg
cmVzb3VyY2UgaGFuZGxlLgorICAgIHVuc2lnbmVkIGVuY29kZWREYXRhTGVuZ3RoID0gcmVwb3J0
ZWRFbmNvZGVkRGF0YUxlbmd0aCA+PSAwID8gcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCA6IGJ1
ZmZlci0+c2l6ZSgpOworICAgIAorICAgIG1fYnl0ZXNSZWNlaXZlZCArPSBidWZmZXItPnNpemUo
KTsKKyAgICBpZiAobV9idWZmZXJlZERhdGEpIHsKKyAgICAgICAgbV9idWZmZXJlZERhdGEtPmFw
cGVuZChidWZmZXIuZ2V0KCkpOworICAgICAgICBtX2J1ZmZlcmVkRGF0YUVuY29kZWREYXRhTGVu
Z3RoICs9IGVuY29kZWREYXRhTGVuZ3RoOworICAgICAgICBzdGFydEJ1ZmZlcmluZ1RpbWVySWZO
ZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZW5kQnVmZmVyTWF5YmVBYm9y
dGluZygqYnVmZmVyLCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAKLXZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9y
JikKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmluaXNoUmVz
b3VyY2VMb2FkKFdURjo6bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpKTsKIH0KLQotI2Vs
c2UKLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5j
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVk
UmVzcG9uc2UpCisgICAgCitOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OlNob3VsZENvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVkUmVzcG9uc2Up
CiB7Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0KICAg
ICBtX3Jlc3BvbnNlID0gcmVjZWl2ZWRSZXNwb25zZTsKIAogICAgIG1fcmVzcG9uc2Uuc2V0U291
cmNlKFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TmV0d29yayk7CkBAIC0zNTAsNyArNDA3LDcg
QEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZQogICAgICAgICAgICAg
bV9zeW5jaHJvbm91c0xvYWREYXRhLT5yZXNwb25zZSA9IG1fcmVzcG9uc2U7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgaWYgKCFzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6Oldl
YlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNwb25zZSwgc2hvdWxkV2Fp
dENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIHJldHVybiBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6
Tm87CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM2MCw5ICs0MTcsNTMgQEAgdm9pZCBOZXR3b3Jr
UmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZQogICAgIHNob3VsZENvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlID0gc2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgfHwgbV9jYWNoZUVu
dHJ5Rm9yVmFsaWRhdGlvbjsKICNlbmRpZgogICAgIGlmICghc2hvdWxkQ29udGludWVEaWRSZWNl
aXZlUmVzcG9uc2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIFNob3VsZENvbnRp
bnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpObzsKKyAgICByZXR1cm4gU2hvdWxkQ29udGludWVEaWRS
ZWNlaXZlUmVzcG9uc2U6OlllczsKK30KKyAgICAKKyNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQog
Ci0gICAgbV9oYW5kbGUtPmNvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCk7Cit2b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oY29uc3QgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVx
dWVzdCwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYp
PiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHJlcXVlc3QpOworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZSYgY2hhbGxlbmdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VE
aXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiBjb21wbGV0aW9uSGFuZGxl
cikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbXBsZXRpb25IYW5kbGVyKEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFuZGxpbmcsIFdl
YkNvcmU6OkNyZWRlbnRpYWwoKSk7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9u
c2UsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNwb25zZURpc3Bvc2l0aW9uKT4gY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBzaGFyZWREaWRSZWNl
aXZlUmVzcG9uc2UocmVzcG9uc2UpOworICAgIC8vIEFudHRpOiBTaG91bGQgd2UgZXZlciBjb250
aW51ZSBkaWQgcmVjZWl2ZSByZXNwb25zZT8gSSB0aGluayBub3QsIGJ1dCBJJ20gbm90IHN1cmUu
CisgICAgY29tcGxldGlvbkhhbmRsZXIoUmVzcG9uc2VEaXNwb3NpdGlvbjo6QWxsb3cpOworfQor
Cit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQoreworICAgIEFTU0VSVChidWZmZXIpOworICAgIHNo
YXJlZERpZFJlY2VpdmVCdWZmZXIoYnVmZmVyLCBidWZmZXItPnNpemUoKSk7Cit9CisKK3ZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAoZXJyb3IuaXNOdWxsKCkpCisgICAg
ICAgIHNoYXJlZERpZEZpbmlzaExvYWRpbmcoV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1Rp
bWUoKSk7CisgICAgZWxzZQorICAgICAgICBzaGFyZWREaWRGYWlsKGVycm9yKTsKK30KKworI2Vs
c2UKKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5j
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlY2VpdmVk
UmVzcG9uc2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRs
ZSk7CisgICAgaWYgKHNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShyZWNlaXZlZFJlc3BvbnNlKSA9
PSBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzKQorICAgICAgICBtX2hhbmRs
ZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29uc3QgY2hhciogLyog
ZGF0YSAqLywgdW5zaWduZWQgLyogbGVuZ3RoICovLCBpbnQgLyogZW5jb2RlZERhdGFMZW5ndGgg
Ki8pCkBAIC0zNzIsMTA2ICs0NzMsMjIgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRp
ZFJlY2VpdmVEYQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUJ1ZmZlcihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVmZmVyLCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxl
bmd0aCkKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQnVmZmVyKFJlc291
cmNlSGFuZGxlKiBoYW5kbGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZm
ZXIsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKQogewogICAgIEFTU0VSVF9VTlVTRUQo
aGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQot
ICAgIEFTU0VSVCghbV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbik7Ci0KLSAgICBpZiAobV9idWZm
ZXJlZERhdGFGb3JDYWNoZSkgewotICAgICAgICAvLyBQcmV2ZW50IG1lbW9yeSBncm93dGggaW4g
Y2FzZSBvZiBzdHJlYW1pbmcgZGF0YS4KLSAgICAgICAgY29uc3Qgc2l6ZV90IG1heGltdW1DYWNo
ZUJ1ZmZlclNpemUgPSAxMCAqIDEwMjQgKiAxMDI0OwotICAgICAgICBpZiAobV9idWZmZXJlZERh
dGFGb3JDYWNoZS0+c2l6ZSgpICsgYnVmZmVyLT5zaXplKCkgPD0gbWF4aW11bUNhY2hlQnVmZmVy
U2l6ZSkKLSAgICAgICAgICAgIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUtPmFwcGVuZChidWZmZXIu
Z2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2J1ZmZlcmVkRGF0YUZvckNhY2hl
ID0gbnVsbHB0cjsKLSAgICB9Ci0jZW5kaWYKLSAgICAvLyBGSVhNRTogQXQgbGVhc3Qgb24gT1Mg
WCBZb3NlbWl0ZSB3ZSBhbHdheXMgZ2V0IC0xIGZyb20gdGhlIHJlc291cmNlIGhhbmRsZS4KLSAg
ICB1bnNpZ25lZCBlbmNvZGVkRGF0YUxlbmd0aCA9IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgg
Pj0gMCA/IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGggOiBidWZmZXItPnNpemUoKTsKLQotICAg
IG1fYnl0ZXNSZWNlaXZlZCArPSBidWZmZXItPnNpemUoKTsKLSAgICBpZiAobV9idWZmZXJlZERh
dGEpIHsKLSAgICAgICAgbV9idWZmZXJlZERhdGEtPmFwcGVuZChidWZmZXIuZ2V0KCkpOwotICAg
ICAgICBtX2J1ZmZlcmVkRGF0YUVuY29kZWREYXRhTGVuZ3RoICs9IGVuY29kZWREYXRhTGVuZ3Ro
OwotICAgICAgICBzdGFydEJ1ZmZlcmluZ1RpbWVySWZOZWVkZWQoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBzZW5kQnVmZmVyTWF5YmVBYm9ydGluZygqYnVmZmVyLCBlbmNvZGVkRGF0
YUxlbmd0aCk7CisgICAgc2hhcmVkRGlkUmVjZWl2ZUJ1ZmZlcihidWZmZXIsIHJlcG9ydGVkRW5j
b2RlZERhdGFMZW5ndGgpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkRmlu
aXNoTG9hZGluZyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBkb3VibGUgZmluaXNoVGltZSkKIHsK
ICAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQotI2lmIEVO
QUJMRShORVRXT1JLX0NBQ0hFKQotICAgIGlmIChOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLmlz
RW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKSB7Ci0g
ICAgICAgICAgICAvLyAzMDQgTm90IE1vZGlmaWVkCi0gICAgICAgICAgICBBU1NFUlQobV9yZXNw
b25zZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNCk7Ci0gICAgICAgICAgICBMT0coTmV0d29ya0Nh
Y2hlLCAiKE5ldHdvcmtQcm9jZXNzKSByZXZhbGlkYXRlZCIpOwotICAgICAgICAgICAgZGlkUmV0
cmlldmVDYWNoZUVudHJ5KFdURjo6bW92ZShtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYm9vbCBhbGxvd1N0YWxlID0g
b3JpZ2luYWxSZXF1ZXN0KCkuY2FjaGVQb2xpY3koKSA+PSBSZXR1cm5DYWNoZURhdGFFbHNlTG9h
ZDsKLSAgICAgICAgYm9vbCBoYXNDYWNoZWFibGVSZWRpcmVjdCA9IG1fcmVzcG9uc2UuaXNIVFRQ
KCkgJiYgV2ViQ29yZTo6cmVkaXJlY3RDaGFpbkFsbG93c1JldXNlKG1fcmVkaXJlY3RDaGFpbkNh
Y2hlU3RhdHVzLCBhbGxvd1N0YWxlID8gV2ViQ29yZTo6UmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24g
OiBXZWJDb3JlOjpEb05vdFJldXNlRXhwaXJlZFJlZGlyZWN0aW9uKTsKLSAgICAgICAgaWYgKGhh
c0NhY2hlYWJsZVJlZGlyZWN0ICYmIG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLnN0YXR1cyA9
PSBSZWRpcmVjdENoYWluQ2FjaGVTdGF0dXM6OkNhY2hlZFJlZGlyZWN0aW9uKSB7Ci0gICAgICAg
ICAgICAvLyBNYXliZSB3ZSBzaG91bGQgY2FjaGUgdGhlIGFjdHVhbCByZWRpcmVjdHMgaW5zdGVh
ZCBvZiB0aGUgZW5kIHJlc3VsdD8KLSAgICAgICAgICAgIGF1dG8gbm93ID0gc3RkOjpjaHJvbm86
OnN5c3RlbV9jbG9jazo6bm93KCk7Ci0gICAgICAgICAgICBhdXRvIHJlc3BvbnNlRW5kT2ZWYWxp
ZGl0eSA9IG5vdyArIFdlYkNvcmU6OmNvbXB1dGVGcmVzaG5lc3NMaWZldGltZUZvckhUVFBGYW1p
bHkobV9yZXNwb25zZSwgbm93KSAtIFdlYkNvcmU6OmNvbXB1dGVDdXJyZW50QWdlKG1fcmVzcG9u
c2UsIG5vdyk7Ci0gICAgICAgICAgICBoYXNDYWNoZWFibGVSZWRpcmVjdCA9IHJlc3BvbnNlRW5k
T2ZWYWxpZGl0eSA8PSBtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cy5lbmRPZlZhbGlkaXR5Owot
ICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc1ByaXZhdGUgPSBzZXNzaW9uSUQoKS5pc0VwaGVt
ZXJhbCgpOwotICAgICAgICBpZiAobV9idWZmZXJlZERhdGFGb3JDYWNoZSAmJiBoYXNDYWNoZWFi
bGVSZWRpcmVjdCAmJiAhaXNQcml2YXRlKSB7Ci0gICAgICAgICAgICAvLyBLZWVwIHRoZSBjb25u
ZWN0aW9uIGFsaXZlLgotICAgICAgICAgICAgUmVmUHRyPE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzPiBjb25uZWN0aW9uKGNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKSk7Ci0gICAgICAgICAg
ICBSZWZQdHI8TmV0d29ya1Jlc291cmNlTG9hZGVyPiBsb2FkZXIodGhpcyk7Ci0gICAgICAgICAg
ICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnN0b3JlKG9yaWdpbmFsUmVxdWVzdCgpLCBtX3Jl
c3BvbnNlLCBXVEY6Om1vdmUobV9idWZmZXJlZERhdGFGb3JDYWNoZSksIFtsb2FkZXIsIGNvbm5l
Y3Rpb25dKE5ldHdvcmtDYWNoZTo6TWFwcGVkQm9keSYgbWFwcGVkQm9keSkgewotI2lmIEVOQUJM
RShTSEFSRUFCTEVfUkVTT1VSQ0UpCi0gICAgICAgICAgICAgICAgaWYgKG1hcHBlZEJvZHkuc2hh
cmVhYmxlUmVzb3VyY2VIYW5kbGUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICBMT0coTmV0d29ya0NhY2hlLCAiKE5ldHdvcmtQcm9jZXNzKSBz
ZW5kaW5nIERpZENhY2hlUmVzb3VyY2UiKTsKLSAgICAgICAgICAgICAgICBsb2FkZXItPnNlbmQo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGlkQ2FjaGVSZXNvdXJjZShsb2Fk
ZXItPm9yaWdpbmFsUmVxdWVzdCgpLCBtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlSGFuZGxl
LCBsb2FkZXItPnNlc3Npb25JRCgpKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9IGVsc2UgaWYgKCFoYXNDYWNoZWFibGVSZWRpcmVjdCkgewotICAgICAgICAgICAgLy8gTWFr
ZSBzdXJlIHdlIGRvbid0IGtlZXAgYSBzdGFsZSBlbnRyeSBpbiB0aGUgY2FjaGUuCi0gICAgICAg
ICAgICBOZXR3b3JrQ2FjaGU6OnNpbmdsZXRvbigpLnJlbW92ZShvcmlnaW5hbFJlcXVlc3QoKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChpc1N5bmNocm9ub3VzKCkpCi0g
ICAgICAgIHNlbmRSZXBseVRvU3luY2hyb25vdXNSZXF1ZXN0KCptX3N5bmNocm9ub3VzTG9hZERh
dGEsIG1fYnVmZmVyZWREYXRhLmdldCgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKG1fYnVm
ZmVyZWREYXRhICYmIG1fYnVmZmVyZWREYXRhLT5zaXplKCkpIHsKLSAgICAgICAgICAgIC8vIEZJ
WE1FOiBQYXNzIGEgcmVhbCB2YWx1ZSBvciByZW1vdmUgdGhlIGVuY29kZWQgZGF0YSBzaXplIGZl
YXR1cmUuCi0gICAgICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gc2VuZEJ1ZmZlck1heWJl
QWJvcnRpbmcoKm1fYnVmZmVyZWREYXRhLCAtMSk7Ci0gICAgICAgICAgICBpZiAoIXNob3VsZENv
bnRpbnVlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmluaXNoUmVzb3VyY2VMb2FkKGZpbmlz
aFRpbWUpKTsKLSAgICB9Ci0KLSAgICBjbGVhbnVwKCk7CisgICAgc2hhcmVkRGlkRmluaXNoTG9h
ZGluZyhmaW5pc2hUaW1lKTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZh
aWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7
CiAgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsICFoYW5kbGUgfHwgaGFuZGxlID09IG1faGFuZGxl
KTsKLQotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgIG1fY2FjaGVFbnRyeUZvclZhbGlk
YXRpb24gPSBudWxscHRyOwotI2VuZGlmCi0KLSAgICBpZiAoaXNTeW5jaHJvbm91cygpKSB7Ci0g
ICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZXJyb3IgPSBlcnJvcjsKLSAgICAgICAgc2Vu
ZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlc3QoKm1fc3luY2hyb25vdXNMb2FkRGF0YSwgbnVsbHB0
cik7Ci0gICAgfSBlbHNlCi0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVy
OjpEaWRGYWlsUmVzb3VyY2VMb2FkKGVycm9yKSk7Ci0KLSAgICBjbGVhbnVwKCk7CisgICAgc2hh
cmVkRGlkRmFpbChlcnJvcik7CiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxs
U2VuZFJlcXVlc3RBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2Up
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMTkxNzYwKQorKysgU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MywxMSArMTMzLDIwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJUEM6OkNvbm5lY3Rpb24qIG1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB1aW50NjRfdCBt
ZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcGFyYW1ldGVy
cy5pZGVudGlmaWVyOyB9CiAKKyAgICBlbnVtIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3Bv
bnNlIHsKKyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH07CisgICAgU2hvdWxkQ29udGlu
dWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIHNoYXJlZERpZFJlY2VpdmVCdWZmZXIo
UGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0
YUxlbmd0aCk7CisgICAgdm9pZCBzaGFyZWREaWRGYWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKTsKKyAgICB2b2lkIHNoYXJlZERpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRp
bWUpOworCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICAvLyBOZXR3b3JrU2Vzc2lvblRh
c2tDbGllbnQuCiAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNv
bnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJl
cXVlc3QmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Jik+KSBmaW5hbCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUNoYWxsZW5n
ZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYsIHN0ZDo6ZnVuY3Rpb248
dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpD
cmVkZW50aWFsJik+KSBmaW5hbCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2
ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQo
UmVzcG9uc2VEaXNwb3NpdGlvbik+KSBmaW5hbCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSBmaW5hbCBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZl
cj4pIGZpbmFsIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVdpdGhFcnJv
cihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgZmluYWwgb3ZlcnJpZGU7CiAjZWxzZQpJ
bmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5o
CShyZXZpc2lvbiAxOTE3NjApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIGNsYXNzIE5ldHdv
cmtTZXNzaW9uVGFza0NsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJm
b3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3Qg
V2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIHN0ZDo6ZnVuY3Rpb248dm9pZChS
ZXNwb25zZURpc3Bvc2l0aW9uKT4pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBzdGQ6OmZ1bmN0aW9uPHZv
aWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+KSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSA9
IDA7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264449</attachid>
            <date>2015-10-30 17:49:00 -0700</date>
            <delta_ts>2015-10-31 12:07:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150742-20151030174807.patch</filename>
            <type>text/plain</type>
            <size>22251</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTgzMikKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE1LTEwLTMwICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU2hhcmUgbW9y
ZSBjb2RlIGJldHdlZW4gTkVUV09SS19TRVNTSU9OIGFuZCBub24tTkVUV09SS19TRVNTSU9OIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDc0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIHIxOTE0NTcgYWRkZWQgZW5vdWdoIGNvZGUgdG8gTmV0d29ya1Jlc291cmNl
TG9hZGVyIHRvIGxvYWQgbW9zdCByZXNvdXJjZXMgc3VjY2Vzc2Z1bGx5IGlmIHRoZXJlIGFyZSBu
byBlcnJvcnMuCisgICAgICAgIEl0IHBhc3NlZCBhYm91dCA4MCUgb2YgTGF5b3V0VGVzdHMvaHR0
cCBhbmQgY3Jhc2hlZCBzb21ldGltZXMuCisgICAgICAgIFRoaXMgcGFzc2VzIGFib3V0IDk1JSBv
ZiBMYXlvdXRUZXN0cy9odHRwIGFuZCBkb2VzIG5vdCBjcmFzaCBvbiBhbnkgb2YgdGhlIExheW91
dFRlc3RzL2h0dHAuCisgICAgICAgIEl0IHNob3VsZCBub3QgY2hhbmdlIGJlaGF2aW9yIG9mIHRo
ZSBub24tTkVUV09SS19TRVNTSU9OIGNvZGUgd2hpY2ggaXMgY3VycmVudGx5IHRoZSBkZWZhdWx0
IGluIHRydW5rLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkV2lsbFNlbmRS
ZWRpcmVjdGVkUmVxdWVzdCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c2hhcmVkRGlkRmFpbCk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6c2hhcmVkRGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6c2hhcmVkRGlkUmVjZWl2ZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNo
YWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlkQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RBc3luYyk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Nlc3Npb24uaDoKKwogMjAxNS0xMC0zMCAgQW5kZXJzIENhcmxzc29uICA8YW5k
ZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIEJlZ2luIHdvcmsgb24gc3VwcG9ydGluZyByZXBs
eSBibG9ja3MgaW4gX1dLUmVtb3RlT2JqZWN0UmVnaXN0cnkKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcAko
cmV2aXNpb24gMTkxNzYwKQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Jlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDUxICsyNzEsMTMzIEBA
IHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCgpCiAgICAgY2xlYW51cCgpOwogfQog
Ci0jaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6
OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9u
c2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIHN0ZDo6ZnVuY3Rp
b248dm9pZChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKT4gY29tcGxldGlvbkhhbmRs
ZXIpCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVk
UmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihyZXF1ZXN0KTsKLX0KKyAgICAvLyBX
ZSBvbmx5IGV4cGVjdCB0byBnZXQgdGhlIHdpbGxTZW5kUmVxdWVzdCBjYWxsYmFjayBmcm9tIFJl
c291cmNlSGFuZGxlIGFzIHRoZSByZXN1bHQgb2YgYSByZWRpcmVjdC4KKyAgICBBU1NFUlQoIXJl
ZGlyZWN0UmVzcG9uc2UuaXNOdWxsKCkpOworICAgIEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7
CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0
IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVuZ2UsIHN0ZDo6ZnVuY3Rp
b248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3Jl
OjpDcmVkZW50aWFsJik+IGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3Np
dGlvbjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgV2ViQ29yZTo6Q3JlZGVudGlhbCgpKTsKLX0K
KyAgICBtX2N1cnJlbnRSZXF1ZXN0ID0gcmVxdWVzdDsKIAotdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9u
SGFuZGxlcikKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fcmVzcG9uc2Ug
PSByZXNwb25zZTsKLSAgICBtX3Jlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpT
b3VyY2U6Ok5ldHdvcmspOwotICAgIGlmIChtX3BhcmFtZXRlcnMubmVlZHNDZXJ0aWZpY2F0ZUlu
Zm8pCi0gICAgICAgIG1fcmVzcG9uc2UuaW5jbHVkZUNlcnRpZmljYXRlSW5mbygpOwotICAgIAot
ICAgIGJvb2wgc2hvdWxkV2FpdENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlID0gb3JpZ2luYWxS
ZXF1ZXN0KCkucmVxdWVzdGVyKCkgPT0gUmVzb3VyY2VSZXF1ZXN0OjpSZXF1ZXN0ZXI6Ok1haW47
Ci0gICAgaWYgKCFzZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9h
ZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2UobV9yZXNwb25zZSwgc2hvdWxkV2FpdENvbnRpbnVlRGlk
UmVjZWl2ZVJlc3BvbnNlKSkpCisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgV2ViQ29y
ZTo6dXBkYXRlUmVkaXJlY3RDaGFpblN0YXR1cyhtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cywg
cmVkaXJlY3RSZXNwb25zZSk7CisjZW5kaWYKKyAgICBpZiAoaXNTeW5jaHJvbm91cygpKSB7Cisg
ICAgICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIHRvIGZvbGxvdyB0aGUgcmVk
aXJlY3QgY29ycmVjdGx5IGV2ZW4gZm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cy4KKyAgICAgICAg
Ly8gVGhpcyBpbmNsdWRlcyBhdCBsZWFzdCB1cGRhdGluZyBob3N0IHJlY29yZHMsIGFuZCBjb21w
YXJpbmcgdGhlIGN1cnJlbnQgcmVxdWVzdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCByZXF1ZXN0
IGhlcmUuCisgICAgICAgIGlmICghcHJvdG9jb2xIb3N0QW5kUG9ydEFyZUVxdWFsKG9yaWdpbmFs
UmVxdWVzdCgpLnVybCgpLCBtX2N1cnJlbnRSZXF1ZXN0LnVybCgpKSkgeworICAgICAgICAgICAg
QVNTRVJUKG1fc3luY2hyb25vdXNMb2FkRGF0YS0+ZXJyb3IuaXNOdWxsKCkpOworICAgICAgICAg
ICAgbV9zeW5jaHJvbm91c0xvYWREYXRhLT5lcnJvciA9IFN5bmNocm9ub3VzTG9hZGVyQ2xpZW50
OjpwbGF0Zm9ybUJhZFJlc3BvbnNlRXJyb3IoKTsKKyAgICAgICAgICAgIG1fY3VycmVudFJlcXVl
c3QgPSBSZXNvdXJjZVJlcXVlc3QoKTsKKyAgICAgICAgfQorICAgICAgICBjb250aW51ZVdpbGxT
ZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0KTsKICAgICAgICAgcmV0dXJuOwotICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFJlc3BvbnNlRGlzcG9zaXRpb246OkFsbG93KTsKKyAgICB9CisgICAgc2Vu
ZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6V2lsbFNlbmRS
ZXF1ZXN0KG1fY3VycmVudFJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpKTsKIH0KIAotdm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFy
ZWRCdWZmZXI+IGJ1ZmZlcikKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFyZWREaWRG
YWlsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIEFTU0VSVChi
dWZmZXIpOwotICAgIHNlbmRCdWZmZXJNYXliZUFib3J0aW5nKCpidWZmZXIsIGJ1ZmZlci0+c2l6
ZSgpKTsKKyAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsKKworI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQorICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24gPSBudWxscHRyOworI2VuZGlm
CisgICAgCisgICAgaWYgKGlzU3luY2hyb25vdXMoKSkgeworICAgICAgICBtX3N5bmNocm9ub3Vz
TG9hZERhdGEtPmVycm9yID0gZXJyb3I7CisgICAgICAgIHNlbmRSZXBseVRvU3luY2hyb25vdXNS
ZXF1ZXN0KCptX3N5bmNocm9ub3VzTG9hZERhdGEsIG51bGxwdHIpOworICAgIH0gZWxzZQorICAg
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmFpbFJlc291cmNlTG9h
ZChlcnJvcikpOworICAgIAorICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJy
b3ImKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZERpZEZpbmlzaExvYWRpbmco
ZG91YmxlIGZpbmlzaFRpbWUpCiB7Ci0gICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2Fk
ZXI6OkRpZEZpbmlzaFJlc291cmNlTG9hZChXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGlt
ZSgpKSk7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCisgICAgaWYgKE5ldHdvcmtDYWNoZTo6
c2luZ2xldG9uKCkuaXNFbmFibGVkKCkpIHsKKyAgICAgICAgaWYgKG1fY2FjaGVFbnRyeUZvclZh
bGlkYXRpb24pIHsKKyAgICAgICAgICAgIC8vIDMwNCBOb3QgTW9kaWZpZWQKKyAgICAgICAgICAg
IEFTU0VSVChtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0KTsKKyAgICAgICAgICAg
IExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldmFsaWRhdGVkIik7CisgICAg
ICAgICAgICBkaWRSZXRyaWV2ZUNhY2hlRW50cnkoV1RGOjptb3ZlKG1fY2FjaGVFbnRyeUZvclZh
bGlkYXRpb24pKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBib29s
IGFsbG93U3RhbGUgPSBvcmlnaW5hbFJlcXVlc3QoKS5jYWNoZVBvbGljeSgpID49IFJldHVybkNh
Y2hlRGF0YUVsc2VMb2FkOworICAgICAgICBib29sIGhhc0NhY2hlYWJsZVJlZGlyZWN0ID0gbV9y
ZXNwb25zZS5pc0hUVFAoKSAmJiBXZWJDb3JlOjpyZWRpcmVjdENoYWluQWxsb3dzUmV1c2UobV9y
ZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMsIGFsbG93U3RhbGUgPyBXZWJDb3JlOjpSZXVzZUV4cGly
ZWRSZWRpcmVjdGlvbiA6IFdlYkNvcmU6OkRvTm90UmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24pOwor
ICAgICAgICBpZiAoaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgbV9yZWRpcmVjdENoYWluQ2FjaGVT
dGF0dXMuc3RhdHVzID09IFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1czo6Q2FjaGVkUmVkaXJlY3Rp
b24pIHsKKyAgICAgICAgICAgIC8vIE1heWJlIHdlIHNob3VsZCBjYWNoZSB0aGUgYWN0dWFsIHJl
ZGlyZWN0cyBpbnN0ZWFkIG9mIHRoZSBlbmQgcmVzdWx0PworICAgICAgICAgICAgYXV0byBub3cg
PSBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKKyAgICAgICAgICAgIGF1dG8gcmVz
cG9uc2VFbmRPZlZhbGlkaXR5ID0gbm93ICsgV2ViQ29yZTo6Y29tcHV0ZUZyZXNobmVzc0xpZmV0
aW1lRm9ySFRUUEZhbWlseShtX3Jlc3BvbnNlLCBub3cpIC0gV2ViQ29yZTo6Y29tcHV0ZUN1cnJl
bnRBZ2UobV9yZXNwb25zZSwgbm93KTsKKyAgICAgICAgICAgIGhhc0NhY2hlYWJsZVJlZGlyZWN0
ID0gcmVzcG9uc2VFbmRPZlZhbGlkaXR5IDw9IG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLmVu
ZE9mVmFsaWRpdHk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNQcml2YXRl
ID0gc2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKTsKKyAgICAgICAgaWYgKG1fYnVmZmVyZWREYXRh
Rm9yQ2FjaGUgJiYgaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgIWlzUHJpdmF0ZSkgeworICAgICAg
ICAgICAgLy8gS2VlcCB0aGUgY29ubmVjdGlvbiBhbGl2ZS4KKyAgICAgICAgICAgIFJlZlB0cjxO
ZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY29ubmVjdGlvbihjb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKCkpOworICAgICAgICAgICAgUmVmUHRyPE5ldHdvcmtSZXNvdXJjZUxvYWRlcj4gbG9h
ZGVyKHRoaXMpOworICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5zdG9yZShv
cmlnaW5hbFJlcXVlc3QoKSwgbV9yZXNwb25zZSwgV1RGOjptb3ZlKG1fYnVmZmVyZWREYXRhRm9y
Q2FjaGUpLCBbbG9hZGVyLCBjb25uZWN0aW9uXShOZXR3b3JrQ2FjaGU6Ok1hcHBlZEJvZHkmIG1h
cHBlZEJvZHkpIHsKKyNpZiBFTkFCTEUoU0hBUkVBQkxFX1JFU09VUkNFKQorICAgICAgICAgICAg
ICAgIGlmIChtYXBwZWRCb2R5LnNoYXJlYWJsZVJlc291cmNlSGFuZGxlLmlzTnVsbCgpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgTE9HKE5ldHdvcmtDYWNo
ZSwgIihOZXR3b3JrUHJvY2Vzcykgc2VuZGluZyBEaWRDYWNoZVJlc291cmNlIik7CisgICAgICAg
ICAgICAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246
OkRpZENhY2hlUmVzb3VyY2UobG9hZGVyLT5vcmlnaW5hbFJlcXVlc3QoKSwgbWFwcGVkQm9keS5z
aGFyZWFibGVSZXNvdXJjZUhhbmRsZSwgbG9hZGVyLT5zZXNzaW9uSUQoKSkpOworI2VuZGlmCisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSBlbHNlIGlmICghaGFzQ2FjaGVhYmxlUmVkaXJlY3Qp
IHsKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBrZWVwIGEgc3RhbGUgZW50cnkg
aW4gdGhlIGNhY2hlLgorICAgICAgICAgICAgTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5yZW1v
dmUob3JpZ2luYWxSZXF1ZXN0KCkpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgCisg
ICAgaWYgKGlzU3luY2hyb25vdXMoKSkKKyAgICAgICAgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1Jl
cXVlc3QoKm1fc3luY2hyb25vdXNMb2FkRGF0YSwgbV9idWZmZXJlZERhdGEuZ2V0KCkpOworICAg
IGVsc2UgeworICAgICAgICBpZiAobV9idWZmZXJlZERhdGEgJiYgbV9idWZmZXJlZERhdGEtPnNp
emUoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFBhc3MgYSByZWFsIHZhbHVlIG9yIHJlbW92
ZSB0aGUgZW5jb2RlZCBkYXRhIHNpemUgZmVhdHVyZS4KKyAgICAgICAgICAgIGJvb2wgc2hvdWxk
Q29udGludWUgPSBzZW5kQnVmZmVyTWF5YmVBYm9ydGluZygqbV9idWZmZXJlZERhdGEsIC0xKTsK
KyAgICAgICAgICAgIGlmICghc2hvdWxkQ29udGludWUpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpE
aWRGaW5pc2hSZXNvdXJjZUxvYWQoZmluaXNoVGltZSkpOworICAgIH0KKyAgICAKKyAgICBjbGVh
bnVwKCk7CiB9CiAKLSNlbHNlCi0KLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNl
aXZlUmVzcG9uc2VBc3luYyhSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNo
YXJlZERpZFJlY2VpdmVCdWZmZXIoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGJ1
ZmZlciwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpCiB7Ci0gICAgQVNTRVJUX1VOVVNF
RChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7CisjaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUp
CisgICAgQVNTRVJUKCFtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKTsKKyAgICAKKyAgICBpZiAo
bV9idWZmZXJlZERhdGFGb3JDYWNoZSkgeworICAgICAgICAvLyBQcmV2ZW50IG1lbW9yeSBncm93
dGggaW4gY2FzZSBvZiBzdHJlYW1pbmcgZGF0YS4KKyAgICAgICAgY29uc3Qgc2l6ZV90IG1heGlt
dW1DYWNoZUJ1ZmZlclNpemUgPSAxMCAqIDEwMjQgKiAxMDI0OworICAgICAgICBpZiAobV9idWZm
ZXJlZERhdGFGb3JDYWNoZS0+c2l6ZSgpICsgYnVmZmVyLT5zaXplKCkgPD0gbWF4aW11bUNhY2hl
QnVmZmVyU2l6ZSkKKyAgICAgICAgICAgIG1fYnVmZmVyZWREYXRhRm9yQ2FjaGUtPmFwcGVuZChi
dWZmZXIuZ2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2J1ZmZlcmVkRGF0YUZv
ckNhY2hlID0gbnVsbHB0cjsKKyAgICB9CisjZW5kaWYKKyAgICAvLyBGSVhNRTogQXQgbGVhc3Qg
b24gT1MgWCBZb3NlbWl0ZSB3ZSBhbHdheXMgZ2V0IC0xIGZyb20gdGhlIHJlc291cmNlIGhhbmRs
ZS4KKyAgICB1bnNpZ25lZCBlbmNvZGVkRGF0YUxlbmd0aCA9IHJlcG9ydGVkRW5jb2RlZERhdGFM
ZW5ndGggPj0gMCA/IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGggOiBidWZmZXItPnNpemUoKTsK
KyAgICAKKyAgICBtX2J5dGVzUmVjZWl2ZWQgKz0gYnVmZmVyLT5zaXplKCk7CisgICAgaWYgKG1f
YnVmZmVyZWREYXRhKSB7CisgICAgICAgIG1fYnVmZmVyZWREYXRhLT5hcHBlbmQoYnVmZmVyLmdl
dCgpKTsKKyAgICAgICAgbV9idWZmZXJlZERhdGFFbmNvZGVkRGF0YUxlbmd0aCArPSBlbmNvZGVk
RGF0YUxlbmd0aDsKKyAgICAgICAgc3RhcnRCdWZmZXJpbmdUaW1lcklmTmVlZGVkKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgc2VuZEJ1ZmZlck1heWJlQWJvcnRpbmcoKmJ1ZmZlciwg
ZW5jb2RlZERhdGFMZW5ndGgpOwogCit9CisgICAgCitOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OlNo
b3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hh
cmVkRGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJl
Y2VpdmVkUmVzcG9uc2UpCit7CiAgICAgbV9yZXNwb25zZSA9IHJlY2VpdmVkUmVzcG9uc2U7CiAK
ICAgICBtX3Jlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdv
cmspOwpAQCAtMzUwLDcgKzQzMiw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRS
ZWNlaXZlUmUKICAgICAgICAgICAgIG1fc3luY2hyb25vdXNMb2FkRGF0YS0+cmVzcG9uc2UgPSBt
X3Jlc3BvbnNlOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmICghc2VuZEFib3J0aW5n
T25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZVJlc3BvbnNl
KG1fcmVzcG9uc2UsIHNob3VsZFdhaXRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSkpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gU2hvdWxkQ29udGlu
dWVEaWRSZWNlaXZlUmVzcG9uc2U6Ok5vOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNjAsOSAr
NDQyLDUzIEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlUmUKICAgICBz
aG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSA9IHNob3VsZENvbnRpbnVlRGlkUmVjZWl2
ZVJlc3BvbnNlIHx8IG1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb247CiAjZW5kaWYKICAgICBpZiAo
IXNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6Tm87CisgICAgcmV0
dXJuIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXM7Cit9CisgICAgCisjaWYg
VVNFKE5FVFdPUktfU0VTU0lPTikKIAotICAgIG1faGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpOwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxQZXJmb3JtSFRUUFJl
ZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25z
dCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIHN0ZDo6ZnVuY3Rpb248dm9pZChj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKT4gY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgc2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIocmVxdWVzdCk7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlJiBjaGFsbGVuZ2UsIHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZURpc3Bvc2l0aW9uLCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+IGNvbXBsZXRp
b25IYW5kbGVyKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNwb3NpdGlvbjo6UGVyZm9ybURlZmF1bHRIYW5k
bGluZywgV2ViQ29yZTo6Q3JlZGVudGlhbCgpKTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNl
JiByZXNwb25zZSwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNoYXJl
ZERpZFJlY2VpdmVSZXNwb25zZShyZXNwb25zZSk7CisgICAgLy8gQW50dGk6IFNob3VsZCB3ZSBl
dmVyIGNvbnRpbnVlIGRpZCByZWNlaXZlIHJlc3BvbnNlPyBJIHRoaW5rIG5vdCwgYnV0IEknbSBu
b3Qgc3VyZS4KKyAgICBjb21wbGV0aW9uSGFuZGxlcihSZXNwb25zZURpc3Bvc2l0aW9uOjpBbGxv
dyk7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShSZWZQ
dHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIpCit7CisgICAgQVNTRVJUKGJ1ZmZlcik7
CisgICAgc2hhcmVkRGlkUmVjZWl2ZUJ1ZmZlcihidWZmZXIsIGJ1ZmZlci0+c2l6ZSgpKTsKK30K
Kwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0
IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQoreworICAgIGlmIChlcnJvci5pc051bGwo
KSkKKyAgICAgICAgc2hhcmVkRGlkRmluaXNoTG9hZGluZyhXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpKTsKKyAgICBlbHNlCisgICAgICAgIHNoYXJlZERpZEZhaWwoZXJyb3IpOwor
fQorCisjZWxzZQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3Bv
bnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVjZWl2ZWRSZXNwb25zZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09
IG1faGFuZGxlKTsKKyAgICBpZiAoc2hhcmVkRGlkUmVjZWl2ZVJlc3BvbnNlKHJlY2VpdmVkUmVz
cG9uc2UpID09IFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpZZXMpCisgICAgICAg
IG1faGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpOwogfQogCiB2b2lkIE5ldHdv
cmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBj
aGFyKiAvKiBkYXRhICovLCB1bnNpZ25lZCAvKiBsZW5ndGggKi8sIGludCAvKiBlbmNvZGVkRGF0
YUxlbmd0aCAqLykKQEAgLTM3MiwxMzQgKzQ5OCwyOSBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6ZGlkUmVjZWl2ZURhCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQg
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQnVmZmVyKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXIsIGludCByZXBvcnRlZEVuY29k
ZWREYXRhTGVuZ3RoKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVCdWZm
ZXIoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpCiB7CiAgICAgQVNTRVJU
X1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0jaWYgRU5BQkxFKE5FVFdPUktf
Q0FDSEUpCi0gICAgQVNTRVJUKCFtX2NhY2hlRW50cnlGb3JWYWxpZGF0aW9uKTsKLQotICAgIGlm
IChtX2J1ZmZlcmVkRGF0YUZvckNhY2hlKSB7Ci0gICAgICAgIC8vIFByZXZlbnQgbWVtb3J5IGdy
b3d0aCBpbiBjYXNlIG9mIHN0cmVhbWluZyBkYXRhLgotICAgICAgICBjb25zdCBzaXplX3QgbWF4
aW11bUNhY2hlQnVmZmVyU2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7Ci0gICAgICAgIGlmIChtX2J1
ZmZlcmVkRGF0YUZvckNhY2hlLT5zaXplKCkgKyBidWZmZXItPnNpemUoKSA8PSBtYXhpbXVtQ2Fj
aGVCdWZmZXJTaXplKQotICAgICAgICAgICAgbV9idWZmZXJlZERhdGFGb3JDYWNoZS0+YXBwZW5k
KGJ1ZmZlci5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fYnVmZmVyZWREYXRh
Rm9yQ2FjaGUgPSBudWxscHRyOwotICAgIH0KLSNlbmRpZgotICAgIC8vIEZJWE1FOiBBdCBsZWFz
dCBvbiBPUyBYIFlvc2VtaXRlIHdlIGFsd2F5cyBnZXQgLTEgZnJvbSB0aGUgcmVzb3VyY2UgaGFu
ZGxlLgotICAgIHVuc2lnbmVkIGVuY29kZWREYXRhTGVuZ3RoID0gcmVwb3J0ZWRFbmNvZGVkRGF0
YUxlbmd0aCA+PSAwID8gcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCA6IGJ1ZmZlci0+c2l6ZSgp
OwotCi0gICAgbV9ieXRlc1JlY2VpdmVkICs9IGJ1ZmZlci0+c2l6ZSgpOwotICAgIGlmIChtX2J1
ZmZlcmVkRGF0YSkgewotICAgICAgICBtX2J1ZmZlcmVkRGF0YS0+YXBwZW5kKGJ1ZmZlci5nZXQo
KSk7Ci0gICAgICAgIG1fYnVmZmVyZWREYXRhRW5jb2RlZERhdGFMZW5ndGggKz0gZW5jb2RlZERh
dGFMZW5ndGg7Ci0gICAgICAgIHN0YXJ0QnVmZmVyaW5nVGltZXJJZk5lZWRlZCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIHNlbmRCdWZmZXJNYXliZUFib3J0aW5nKCpidWZmZXIsIGVu
Y29kZWREYXRhTGVuZ3RoKTsKKyAgICBzaGFyZWREaWRSZWNlaXZlQnVmZmVyKGJ1ZmZlciwgcmVw
b3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCk7CiB9CiAKIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpkaWRGaW5pc2hMb2FkaW5nKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGRvdWJsZSBmaW5pc2hU
aW1lKQogewogICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwot
Ci0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgaWYgKE5ldHdvcmtDYWNoZTo6c2luZ2xl
dG9uKCkuaXNFbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKG1fY2FjaGVFbnRyeUZvclZhbGlkYXRp
b24pIHsKLSAgICAgICAgICAgIC8vIDMwNCBOb3QgTW9kaWZpZWQKLSAgICAgICAgICAgIEFTU0VS
VChtX3Jlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkgPT0gMzA0KTsKLSAgICAgICAgICAgIExPRyhO
ZXR3b3JrQ2FjaGUsICIoTmV0d29ya1Byb2Nlc3MpIHJldmFsaWRhdGVkIik7Ci0gICAgICAgICAg
ICBkaWRSZXRyaWV2ZUNhY2hlRW50cnkoV1RGOjptb3ZlKG1fY2FjaGVFbnRyeUZvclZhbGlkYXRp
b24pKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBib29sIGFsbG93
U3RhbGUgPSBvcmlnaW5hbFJlcXVlc3QoKS5jYWNoZVBvbGljeSgpID49IFJldHVybkNhY2hlRGF0
YUVsc2VMb2FkOwotICAgICAgICBib29sIGhhc0NhY2hlYWJsZVJlZGlyZWN0ID0gbV9yZXNwb25z
ZS5pc0hUVFAoKSAmJiBXZWJDb3JlOjpyZWRpcmVjdENoYWluQWxsb3dzUmV1c2UobV9yZWRpcmVj
dENoYWluQ2FjaGVTdGF0dXMsIGFsbG93U3RhbGUgPyBXZWJDb3JlOjpSZXVzZUV4cGlyZWRSZWRp
cmVjdGlvbiA6IFdlYkNvcmU6OkRvTm90UmV1c2VFeHBpcmVkUmVkaXJlY3Rpb24pOwotICAgICAg
ICBpZiAoaGFzQ2FjaGVhYmxlUmVkaXJlY3QgJiYgbV9yZWRpcmVjdENoYWluQ2FjaGVTdGF0dXMu
c3RhdHVzID09IFJlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1czo6Q2FjaGVkUmVkaXJlY3Rpb24pIHsK
LSAgICAgICAgICAgIC8vIE1heWJlIHdlIHNob3VsZCBjYWNoZSB0aGUgYWN0dWFsIHJlZGlyZWN0
cyBpbnN0ZWFkIG9mIHRoZSBlbmQgcmVzdWx0PwotICAgICAgICAgICAgYXV0byBub3cgPSBzdGQ6
OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpub3coKTsKLSAgICAgICAgICAgIGF1dG8gcmVzcG9uc2VF
bmRPZlZhbGlkaXR5ID0gbm93ICsgV2ViQ29yZTo6Y29tcHV0ZUZyZXNobmVzc0xpZmV0aW1lRm9y
SFRUUEZhbWlseShtX3Jlc3BvbnNlLCBub3cpIC0gV2ViQ29yZTo6Y29tcHV0ZUN1cnJlbnRBZ2Uo
bV9yZXNwb25zZSwgbm93KTsKLSAgICAgICAgICAgIGhhc0NhY2hlYWJsZVJlZGlyZWN0ID0gcmVz
cG9uc2VFbmRPZlZhbGlkaXR5IDw9IG1fcmVkaXJlY3RDaGFpbkNhY2hlU3RhdHVzLmVuZE9mVmFs
aWRpdHk7Ci0gICAgICAgIH0KLQotICAgICAgICBib29sIGlzUHJpdmF0ZSA9IHNlc3Npb25JRCgp
LmlzRXBoZW1lcmFsKCk7Ci0gICAgICAgIGlmIChtX2J1ZmZlcmVkRGF0YUZvckNhY2hlICYmIGhh
c0NhY2hlYWJsZVJlZGlyZWN0ICYmICFpc1ByaXZhdGUpIHsKLSAgICAgICAgICAgIC8vIEtlZXAg
dGhlIGNvbm5lY3Rpb24gYWxpdmUuCi0gICAgICAgICAgICBSZWZQdHI8TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M+IGNvbm5lY3Rpb24oY29ubmVjdGlvblRvV2ViUHJvY2VzcygpKTsKLSAg
ICAgICAgICAgIFJlZlB0cjxOZXR3b3JrUmVzb3VyY2VMb2FkZXI+IGxvYWRlcih0aGlzKTsKLSAg
ICAgICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkuc3RvcmUob3JpZ2luYWxSZXF1ZXN0
KCksIG1fcmVzcG9uc2UsIFdURjo6bW92ZShtX2J1ZmZlcmVkRGF0YUZvckNhY2hlKSwgW2xvYWRl
ciwgY29ubmVjdGlvbl0oTmV0d29ya0NhY2hlOjpNYXBwZWRCb2R5JiBtYXBwZWRCb2R5KSB7Ci0j
aWYgRU5BQkxFKFNIQVJFQUJMRV9SRVNPVVJDRSkKLSAgICAgICAgICAgICAgICBpZiAobWFwcGVk
Qm9keS5zaGFyZWFibGVSZXNvdXJjZUhhbmRsZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIExPRyhOZXR3b3JrQ2FjaGUsICIoTmV0d29ya1By
b2Nlc3MpIHNlbmRpbmcgRGlkQ2FjaGVSZXNvdXJjZSIpOwotICAgICAgICAgICAgICAgIGxvYWRl
ci0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEaWRDYWNoZVJlc291
cmNlKGxvYWRlci0+b3JpZ2luYWxSZXF1ZXN0KCksIG1hcHBlZEJvZHkuc2hhcmVhYmxlUmVzb3Vy
Y2VIYW5kbGUsIGxvYWRlci0+c2Vzc2lvbklEKCkpKTsKLSNlbmRpZgotICAgICAgICAgICAgfSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoIWhhc0NhY2hlYWJsZVJlZGlyZWN0KSB7Ci0gICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgd2UgZG9uJ3Qga2VlcCBhIHN0YWxlIGVudHJ5IGluIHRoZSBjYWNoZS4K
LSAgICAgICAgICAgIE5ldHdvcmtDYWNoZTo6c2luZ2xldG9uKCkucmVtb3ZlKG9yaWdpbmFsUmVx
dWVzdCgpKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKGlzU3luY2hyb25v
dXMoKSkKLSAgICAgICAgc2VuZFJlcGx5VG9TeW5jaHJvbm91c1JlcXVlc3QoKm1fc3luY2hyb25v
dXNMb2FkRGF0YSwgbV9idWZmZXJlZERhdGEuZ2V0KCkpOwotICAgIGVsc2UgewotICAgICAgICBp
ZiAobV9idWZmZXJlZERhdGEgJiYgbV9idWZmZXJlZERhdGEtPnNpemUoKSkgewotICAgICAgICAg
ICAgLy8gRklYTUU6IFBhc3MgYSByZWFsIHZhbHVlIG9yIHJlbW92ZSB0aGUgZW5jb2RlZCBkYXRh
IHNpemUgZmVhdHVyZS4KLSAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSBzZW5kQnVm
ZmVyTWF5YmVBYm9ydGluZygqbV9idWZmZXJlZERhdGEsIC0xKTsKLSAgICAgICAgICAgIGlmICgh
c2hvdWxkQ29udGludWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIHNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGaW5pc2hSZXNvdXJjZUxv
YWQoZmluaXNoVGltZSkpOwotICAgIH0KLQotICAgIGNsZWFudXAoKTsKKyAgICBzaGFyZWREaWRG
aW5pc2hMb2FkaW5nKGZpbmlzaFRpbWUpOwogfQogCiB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRl
cjo6ZGlkRmFpbChSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBjb25zdCBSZXNvdXJjZUVycm9yJiBl
cnJvcikKIHsKICAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgIWhhbmRsZSB8fCBoYW5kbGUgPT0g
bV9oYW5kbGUpOwotCi0jaWYgRU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgbV9jYWNoZUVudHJ5
Rm9yVmFsaWRhdGlvbiA9IG51bGxwdHI7Ci0jZW5kaWYKLQotICAgIGlmIChpc1N5bmNocm9ub3Vz
KCkpIHsKLSAgICAgICAgbV9zeW5jaHJvbm91c0xvYWREYXRhLT5lcnJvciA9IGVycm9yOwotICAg
ICAgICBzZW5kUmVwbHlUb1N5bmNocm9ub3VzUmVxdWVzdCgqbV9zeW5jaHJvbm91c0xvYWREYXRh
LCBudWxscHRyKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUmVzb3Vy
Y2VMb2FkZXI6OkRpZEZhaWxSZXNvdXJjZUxvYWQoZXJyb3IpKTsKLQotICAgIGNsZWFudXAoKTsK
KyAgICBzaGFyZWREaWRGYWlsKGVycm9yKTsKIH0KIAogdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OndpbGxTZW5kUmVxdWVzdEFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RS
ZXNwb25zZSkKIHsKICAgICBBU1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxl
KTsKIAotICAgIC8vIFdlIG9ubHkgZXhwZWN0IHRvIGdldCB0aGUgd2lsbFNlbmRSZXF1ZXN0IGNh
bGxiYWNrIGZyb20gUmVzb3VyY2VIYW5kbGUgYXMgdGhlIHJlc3VsdCBvZiBhIHJlZGlyZWN0Lgot
ICAgIEFTU0VSVCghcmVkaXJlY3RSZXNwb25zZS5pc051bGwoKSk7Ci0gICAgQVNTRVJUKFJ1bkxv
b3A6OmlzTWFpbigpKTsKLQotICAgIG1fY3VycmVudFJlcXVlc3QgPSByZXF1ZXN0OwotCi0jaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCi0gICAgV2ViQ29yZTo6dXBkYXRlUmVkaXJlY3RDaGFpblN0
YXR1cyhtX3JlZGlyZWN0Q2hhaW5DYWNoZVN0YXR1cywgcmVkaXJlY3RSZXNwb25zZSk7Ci0jZW5k
aWYKLQotICAgIGlmIChpc1N5bmNocm9ub3VzKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
bmVlZHMgdG8gYmUgZml4ZWQgdG8gZm9sbG93IHRoZSByZWRpcmVjdCBjb3JyZWN0bHkgZXZlbiBm
b3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLgotICAgICAgICAvLyBUaGlzIGluY2x1ZGVzIGF0IGxl
YXN0IHVwZGF0aW5nIGhvc3QgcmVjb3JkcywgYW5kIGNvbXBhcmluZyB0aGUgY3VycmVudCByZXF1
ZXN0IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHJlcXVlc3QgaGVyZS4KLSAgICAgICAgaWYgKCFw
cm90b2NvbEhvc3RBbmRQb3J0QXJlRXF1YWwob3JpZ2luYWxSZXF1ZXN0KCkudXJsKCksIG1fY3Vy
cmVudFJlcXVlc3QudXJsKCkpKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9zeW5jaHJvbm91c0xv
YWREYXRhLT5lcnJvci5pc051bGwoKSk7Ci0gICAgICAgICAgICBtX3N5bmNocm9ub3VzTG9hZERh
dGEtPmVycm9yID0gU3luY2hyb25vdXNMb2FkZXJDbGllbnQ6OnBsYXRmb3JtQmFkUmVzcG9uc2VF
cnJvcigpOwotICAgICAgICAgICAgbV9jdXJyZW50UmVxdWVzdCA9IFJlc291cmNlUmVxdWVzdCgp
OwotICAgICAgICB9Ci0gICAgICAgIGNvbnRpbnVlV2lsbFNlbmRSZXF1ZXN0KG1fY3VycmVudFJl
cXVlc3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHNlbmRBYm9ydGluZ09uRmFpbHVy
ZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OldpbGxTZW5kUmVxdWVzdChtX2N1cnJlbnRS
ZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKSk7CisgICAgc2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVk
UmVxdWVzdChyZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKIH0KIAogI2VuZGlmIC8vIFVTRShO
RVRXT1JLX1NFU1NJT04pCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMTkxNzYwKQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzMywxMSArMTMzLDIxIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBJUEM6
OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIG92ZXJyaWRlIHsgcmV0
dXJuIG1fcGFyYW1ldGVycy5pZGVudGlmaWVyOyB9CiAKKyAgICBlbnVtIFNob3VsZENvbnRpbnVl
RGlkUmVjZWl2ZVJlc3BvbnNlIHsKKyAgICAgICAgWWVzLAorICAgICAgICBObworICAgIH07Cisg
ICAgU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2Ugc2hhcmVkRGlkUmVjZWl2ZVJlc3Bv
bnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdm9pZCBzaGFy
ZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2b2lkIHNoYXJlZERp
ZFJlY2VpdmVCdWZmZXIoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+LCBpbnQgcmVw
b3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCk7CisgICAgdm9pZCBzaGFyZWREaWRGYWlsKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImKTsKKyAgICB2b2lkIHNoYXJlZERpZEZpbmlzaExvYWRpbmco
ZG91YmxlIGZpbmlzaFRpbWUpOworCiAjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKICAgICAvLyBO
ZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQuCiAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtSFRU
UFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VSZXF1ZXN0Jik+KSBmaW5hbCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYs
IHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uLCBj
b25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+KSBmaW5hbCBvdmVycmlkZTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBzdGQ6
OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSBmaW5hbCBvdmVycmlkZTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSBmaW5h
bCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoUmVmUHRyPFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcj4pIGZpbmFsIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgZmluYWwgb3Zl
cnJpZGU7CiAjZWxzZQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Nlc3Npb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrU2Vzc2lvbi5oCShyZXZpc2lvbiAxOTE3NjApCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrU2Vzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3
IEBAIGNsYXNzIE5ldHdvcmtTZXNzaW9uVGFza0NsaWVudCB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHdpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik+KSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVuZ2VEaXNw
b3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIHN0ZDo6
ZnVuY3Rpb248dm9pZChSZXNwb25zZURpc3Bvc2l0aW9uKT4pID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UmLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVEYXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+KSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJl
c291cmNlRXJyb3ImKSA9IDA7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264482</attachid>
            <date>2015-10-31 12:07:30 -0700</date>
            <delta_ts>2015-10-31 14:36:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-150742-20151031120636.patch</filename>
            <type>text/plain</type>
            <size>13546</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTg0NCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE1LTEwLTMxICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgU2hhcmUgbW9y
ZSBjb2RlIGJldHdlZW4gTkVUV09SS19TRVNTSU9OIGFuZCBub24tTkVUV09SS19TRVNTSU9OIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDc0MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIHIxOTE0NTcgYWRkZWQgZW5vdWdoIGNvZGUgdG8gTmV0d29ya1Jlc291cmNl
TG9hZGVyIHRvIGxvYWQgbW9zdCByZXNvdXJjZXMgc3VjY2Vzc2Z1bGx5IGlmIHRoZXJlIGFyZSBu
byBlcnJvcnMuCisgICAgICAgIEl0IHBhc3NlZCBhYm91dCA4MCUgb2YgTGF5b3V0VGVzdHMvaHR0
cCBhbmQgY3Jhc2hlZCBzb21ldGltZXMuCisgICAgICAgIFRoaXMgcGFzc2VzIGFib3V0IDk1JSBv
ZiBMYXlvdXRUZXN0cy9odHRwIGFuZCBkb2VzIG5vdCBjcmFzaCBvbiBhbnkgb2YgdGhlIExheW91
dFRlc3RzL2h0dHAuCisgICAgICAgIEl0IHNob3VsZCBub3QgY2hhbmdlIGJlaGF2aW9yIG9mIHRo
ZSBub24tTkVUV09SS19TRVNTSU9OIGNvZGUgd2hpY2ggaXMgY3VycmVudGx5IHRoZSBkZWZhdWx0
IGluIHRydW5rLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjphYm9ydCk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6c2hhcmVkRGlkUmVjZWl2
ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpzaGFy
ZWREaWRSZWNlaXZlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9h
ZGVyOjpzaGFyZWREaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jl
c291cmNlTG9hZGVyOjpzaGFyZWREaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jl
c291cmNlTG9hZGVyOjpzaGFyZWRXaWxsU2VuZFJlZGlyZWN0ZWRSZXF1ZXN0KToKKyAgICAgICAg
KFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjp3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlv
bik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNo
YWxsZW5nZSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpk
aWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlkQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZUFzeW5jKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGYWlsKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjp3aWxsU2VuZFJlcXVlc3RBc3luYyk6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Nlc3Npb24uaDoKKwogMjAxNS0xMC0yOCAgV2Vuc29uIEhzaWVoICA8d2Vuc29u
X2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBJbm5lciBoZWlnaHQgYmVoYXZpb3Igd2hlbiB0
aGUga2V5Ym9hcmQgaXMgc2hvd24gc2hvdWxkIG1hdGNoIG9uIFdLV2ViVmlldyBhbmQgTW9iaWxl
U2FmYXJpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3Vy
Y2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE5MTg0NCkKKysrIFNvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3MSw1MSArMjcxLDggQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmFi
b3J0KCkKICAgICBjbGVhbnVwKCk7CiB9CiAKLSNpZiBVU0UoTkVUV09SS19TRVNTSU9OKQotCi12
b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2lsbFBlcmZvcm1IVFRQUmVkaXJlY3Rpb24oY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYpPiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlcXVlc3QpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZUNoYWxsZW5nZShjb25zdCBXZWJDb3JlOjpBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYgY2hhbGxlbmdlLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPiBjb21wbGV0
aW9uSGFuZGxlcikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIGNvbXBsZXRpb25IYW5k
bGVyKEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb246OlBlcmZvcm1EZWZhdWx0SGFu
ZGxpbmcsIFdlYkNvcmU6OkNyZWRlbnRpYWwoKSk7Ci19Ci0KLXZvaWQgTmV0d29ya1Jlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIHN0ZDo6ZnVuY3Rpb248dm9pZChSZXNwb25zZURpc3Bvc2l0aW9uKT4gY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX3Jlc3BvbnNl
ID0gcmVzcG9uc2U7Ci0gICAgbV9yZXNwb25zZS5zZXRTb3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpOZXR3b3JrKTsKLSAgICBpZiAobV9wYXJhbWV0ZXJzLm5lZWRzQ2VydGlmaWNhdGVJ
bmZvKQotICAgICAgICBtX3Jlc3BvbnNlLmluY2x1ZGVDZXJ0aWZpY2F0ZUluZm8oKTsKLSAgICAK
LSAgICBib29sIHNob3VsZFdhaXRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSA9IG9yaWdpbmFs
UmVxdWVzdCgpLnJlcXVlc3RlcigpID09IFJlc291cmNlUmVxdWVzdDo6UmVxdWVzdGVyOjpNYWlu
OwotICAgIGlmICghc2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxv
YWRlcjo6RGlkUmVjZWl2ZVJlc3BvbnNlKG1fcmVzcG9uc2UsIHNob3VsZFdhaXRDb250aW51ZURp
ZFJlY2VpdmVSZXNwb25zZSkpKQotICAgICAgICByZXR1cm47Ci0gICAgY29tcGxldGlvbkhhbmRs
ZXIoUmVzcG9uc2VEaXNwb3NpdGlvbjo6QWxsb3cpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVm
ZmVyKQotewotICAgIEFTU0VSVChidWZmZXIpOwotICAgIHNlbmRCdWZmZXJNYXliZUFib3J0aW5n
KCpidWZmZXIsIGJ1ZmZlci0+c2l6ZSgpKTsKLX0KLQotdm9pZCBOZXR3b3JrUmVzb3VyY2VMb2Fk
ZXI6OmRpZENvbXBsZXRlV2l0aEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKQor
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWNlaXZlZFJlc3BvbnNlKQogewotICAgIHNlbmQoTWVz
c2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRGaW5pc2hSZXNvdXJjZUxvYWQoV1RGOjptb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSkpOwotfQotCi0jZWxzZQotCi12b2lkIE5ldHdvcmtS
ZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlQXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVjZWl2ZWRSZXNwb25zZSkKLXsKLSAgICBB
U1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKLQogICAgIG1fcmVzcG9u
c2UgPSByZWNlaXZlZFJlc3BvbnNlOwogCiAgICAgbV9yZXNwb25zZS5zZXRTb3VyY2UoUmVzb3Vy
Y2VSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrKTsKQEAgLTM1MCw3ICszMDcsNyBAQCB2b2lkIE5l
dHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZVJlCiAgICAgICAgICAgICBtX3N5bmNocm9u
b3VzTG9hZERhdGEtPnJlc3BvbnNlID0gbV9yZXNwb25zZTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICBpZiAoIXNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VM
b2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZShtX3Jlc3BvbnNlLCBzaG91bGRXYWl0Q29udGludWVE
aWRSZWNlaXZlUmVzcG9uc2UpKSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlOjpObzsKICAgICAg
ICAgfQogICAgIH0KIApAQCAtMzYwLDIxICszMTcsMTIgQEAgdm9pZCBOZXR3b3JrUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVSZQogICAgIHNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNl
ID0gc2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UgfHwgbV9jYWNoZUVudHJ5Rm9yVmFs
aWRhdGlvbjsKICNlbmRpZgogICAgIGlmICghc2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9u
c2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1faGFuZGxlLT5jb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZSgpOworICAgICAgICByZXR1cm4gU2hvdWxkQ29udGludWVEaWRSZWNlaXZlUmVzcG9u
c2U6Ok5vOworICAgIHJldHVybiBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVz
OwogfQogCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoUmVzb3Vy
Y2VIYW5kbGUqLCBjb25zdCBjaGFyKiAvKiBkYXRhICovLCB1bnNpZ25lZCAvKiBsZW5ndGggKi8s
IGludCAvKiBlbmNvZGVkRGF0YUxlbmd0aCAqLykKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVy
OjpzaGFyZWREaWRSZWNlaXZlQnVmZmVyKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiBidWZmZXIsIGludCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKQogewotICAgIC8vIFRoZSBO
ZXR3b3JrUHJvY2VzcyBzaG91bGQgbmV2ZXIgZ2V0IGEgZGlkUmVjZWl2ZURhdGEgY2FsbGJhY2su
Ci0gICAgLy8gV2Ugc2hvdWxkIGFsd2F5cyBiZSB1c2luZyBkaWRSZWNlaXZlQnVmZmVyLgotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi12b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6
ZGlkUmVjZWl2ZUJ1ZmZlcihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gYnVmZmVyLCBpbnQgcmVwb3J0ZWRFbmNvZGVkRGF0YUxlbmd0aCkKLXsKLSAgICBB
U1NFUlRfVU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKICNpZiBFTkFCTEUoTkVU
V09SS19DQUNIRSkKICAgICBBU1NFUlQoIW1fY2FjaGVFbnRyeUZvclZhbGlkYXRpb24pOwogCkBA
IC00MDAsMTAgKzM0OCw4IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
QnUKICAgICBzZW5kQnVmZmVyTWF5YmVBYm9ydGluZygqYnVmZmVyLCBlbmNvZGVkRGF0YUxlbmd0
aCk7CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUsIGRvdWJsZSBmaW5pc2hUaW1lKQordm9pZCBOZXR3b3JrUmVz
b3VyY2VMb2FkZXI6OnNoYXJlZERpZEZpbmlzaExvYWRpbmcoZG91YmxlIGZpbmlzaFRpbWUpCiB7
Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hhbmRsZSk7Ci0KICNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRSkKICAgICBpZiAoTmV0d29ya0NhY2hlOjpzaW5nbGV0b24oKS5p
c0VuYWJsZWQoKSkgewogICAgICAgICBpZiAobV9jYWNoZUVudHJ5Rm9yVmFsaWRhdGlvbikgewpA
QCAtNDU3LDkgKzQwMyw5IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRGaW5pc2hM
b2EKICAgICBjbGVhbnVwKCk7CiB9CiAKLXZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRG
YWlsKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQor
dm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZERpZEZhaWwoY29uc3QgV2ViQ29yZTo6
UmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsICFoYW5k
bGUgfHwgaGFuZGxlID09IG1faGFuZGxlKTsKKyAgICBBU1NFUlQoIWVycm9yLmlzTnVsbCgpKTsK
IAogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQogICAgIG1fY2FjaGVFbnRyeUZvclZhbGlkYXRp
b24gPSBudWxscHRyOwpAQCAtNDc0LDEwICs0MjAsOCBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxv
YWRlcjo6ZGlkRmFpbChSZXNvCiAgICAgY2xlYW51cCgpOwogfQogCi12b2lkIE5ldHdvcmtSZXNv
dXJjZUxvYWRlcjo6d2lsbFNlbmRSZXF1ZXN0QXN5bmMoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZWRpcmVjdFJlc3BvbnNlKQordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnNoYXJlZFdpbGxT
ZW5kUmVkaXJlY3RlZFJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKQog
ewotICAgIEFTU0VSVF9VTlVTRUQoaGFuZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOwotCiAgICAg
Ly8gV2Ugb25seSBleHBlY3QgdG8gZ2V0IHRoZSB3aWxsU2VuZFJlcXVlc3QgY2FsbGJhY2sgZnJv
bSBSZXNvdXJjZUhhbmRsZSBhcyB0aGUgcmVzdWx0IG9mIGEgcmVkaXJlY3QuCiAgICAgQVNTRVJU
KCFyZWRpcmVjdFJlc3BvbnNlLmlzTnVsbCgpKTsKICAgICBBU1NFUlQoUnVuTG9vcDo6aXNNYWlu
KCkpOwpAQCAtNTAxLDYgKzQ0NSw4MiBAQCB2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6d2ls
bFNlbmRSZXF1CiAgICAgfQogICAgIHNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2Vi
UmVzb3VyY2VMb2FkZXI6OldpbGxTZW5kUmVxdWVzdChtX2N1cnJlbnRSZXF1ZXN0LCByZWRpcmVj
dFJlc3BvbnNlKSk7CiB9CisgICAgCisjaWYgVVNFKE5FVFdPUktfU0VTU0lPTikKKwordm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxQZXJmb3JtSFRUUFJlZGlyZWN0aW9uKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QsIHN0ZDo6ZnVuY3Rpb248dm9pZChjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgc2hhcmVkV2lsbFNlbmRS
ZWRpcmVjdGVkUmVxdWVzdChyZXF1ZXN0LCByZXNwb25zZSk7CisgICAgY29tcGxldGlvbkhhbmRs
ZXIocmVxdWVzdCk7Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZl
Q2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiBjaGFsbGVu
Z2UsIHN0ZDo6ZnVuY3Rpb248dm9pZChBdXRoZW50aWNhdGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9u
LCBjb25zdCBXZWJDb3JlOjpDcmVkZW50aWFsJik+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VEaXNwb3NpdGlvbjo6UGVyZm9ybURlZmF1bHRIYW5kbGluZywgV2ViQ29yZTo6Q3Jl
ZGVudGlhbCgpKTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgc3RkOjpm
dW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHNoYXJlZERpZFJlY2VpdmVSZXNwb25z
ZShyZXNwb25zZSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoUmVzcG9uc2VEaXNwb3NpdGlvbjo6
QWxsb3cpOworfQorCit2b2lkIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEo
UmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyKQoreworICAgIEFTU0VSVChidWZm
ZXIpOworICAgIHNoYXJlZERpZFJlY2VpdmVCdWZmZXIoYnVmZmVyLCBidWZmZXItPnNpemUoKSk7
Cit9CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRDb21wbGV0ZVdpdGhFcnJvcihj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKK3sKKyAgICBpZiAoZXJyb3IuaXNO
dWxsKCkpCisgICAgICAgIHNoYXJlZERpZEZpbmlzaExvYWRpbmcoV1RGOjptb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKSk7CisgICAgZWxzZQorICAgICAgICBzaGFyZWREaWRGYWlsKGVycm9y
KTsKK30KKworI2Vsc2UKKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZUFzeW5jKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlY2VpdmVkUmVzcG9uc2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRs
ZSA9PSBtX2hhbmRsZSk7CisgICAgaWYgKHNoYXJlZERpZFJlY2VpdmVSZXNwb25zZShyZWNlaXZl
ZFJlc3BvbnNlKSA9PSBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZTo6WWVzKQorICAg
ICAgICBtX2hhbmRsZS0+Y29udGludWVEaWRSZWNlaXZlUmVzcG9uc2UoKTsKK30KKwordm9pZCBO
ZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKFJlc291cmNlSGFuZGxlKiwgY29u
c3QgY2hhciogLyogZGF0YSAqLywgdW5zaWduZWQgLyogbGVuZ3RoICovLCBpbnQgLyogZW5jb2Rl
ZERhdGFMZW5ndGggKi8pCit7CisgICAgLy8gVGhlIE5ldHdvcmtQcm9jZXNzIHNob3VsZCBuZXZl
ciBnZXQgYSBkaWRSZWNlaXZlRGF0YSBjYWxsYmFjay4KKyAgICAvLyBXZSBzaG91bGQgYWx3YXlz
IGJlIHVzaW5nIGRpZFJlY2VpdmVCdWZmZXIuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgTmV0d29ya1Jlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQnVmZmVyKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBidWZmZXIs
IGludCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKQoreworICAgIEFTU0VSVF9VTlVTRUQoaGFu
ZGxlLCBoYW5kbGUgPT0gbV9oYW5kbGUpOworICAgIHNoYXJlZERpZFJlY2VpdmVCdWZmZXIoYnVm
ZmVyLCByZXBvcnRlZEVuY29kZWREYXRhTGVuZ3RoKTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3Vy
Y2VMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgZG91Ymxl
IGZpbmlzaFRpbWUpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUsIGhhbmRsZSA9PSBtX2hh
bmRsZSk7CisgICAgc2hhcmVkRGlkRmluaXNoTG9hZGluZyhmaW5pc2hUaW1lKTsKK30KKwordm9p
ZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OmRpZEZhaWwoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCit7CisgICAgQVNTRVJUX1VOVVNFRChoYW5kbGUs
ICFoYW5kbGUgfHwgaGFuZGxlID09IG1faGFuZGxlKTsKKyAgICBzaGFyZWREaWRGYWlsKGVycm9y
KTsKK30KKwordm9pZCBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OndpbGxTZW5kUmVxdWVzdEFzeW5j
KFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSkKK3sKKyAgICBBU1NFUlRf
VU5VU0VEKGhhbmRsZSwgaGFuZGxlID09IG1faGFuZGxlKTsKKworICAgIHNoYXJlZFdpbGxTZW5k
UmVkaXJlY3RlZFJlcXVlc3QocmVxdWVzdCwgcmVkaXJlY3RSZXNwb25zZSk7Cit9CiAKICNlbmRp
ZiAvLyBVU0UoTkVUV09SS19TRVNTSU9OKQogICAgIApJbmRleDogU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHJldmlzaW9u
IDE5MTg0NCkKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJj
ZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsMTEgKzEzMywyMSBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQo
KSBvdmVycmlkZSB7IHJldHVybiBtX3BhcmFtZXRlcnMuaWRlbnRpZmllcjsgfQogCisgICAgZW51
bSBTaG91bGRDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSB7CisgICAgICAgIFllcywKKyAgICAg
ICAgTm8KKyAgICB9OworICAgIFNob3VsZENvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlIHNoYXJl
ZERpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgICAgIHZvaWQgc2hhcmVkV2lsbFNlbmRSZWRpcmVjdGVkUmVxdWVzdChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJik7Cisg
ICAgdm9pZCBzaGFyZWREaWRSZWNlaXZlQnVmZmVyKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVk
QnVmZmVyPiwgaW50IHJlcG9ydGVkRW5jb2RlZERhdGFMZW5ndGgpOworICAgIHZvaWQgc2hhcmVk
RGlkRmFpbChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJik7CisgICAgdm9pZCBzaGFyZWRE
aWRGaW5pc2hMb2FkaW5nKGRvdWJsZSBmaW5pc2hUaW1lKTsKKwogI2lmIFVTRShORVRXT1JLX1NF
U1NJT04pCiAgICAgLy8gTmV0d29ya1Nlc3Npb25UYXNrQ2xpZW50LgogICAgIHZpcnR1YWwgdm9p
ZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jiwgc3RkOjpmdW5jdGlvbjx2b2lk
KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpPikgZmluYWwgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVDaGFsbGVuZ2UoY29uc3QgV2ViQ29yZTo6QXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoQXV0aGVudGljYXRpb25DaGFsbGVu
Z2VEaXNwb3NpdGlvbiwgY29uc3QgV2ViQ29yZTo6Q3JlZGVudGlhbCYpPikgZmluYWwgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJj
ZVJlc3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikgZmlu
YWwgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlz
cG9zaXRpb24pPikgZmluYWwgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVE
YXRhKFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+KSBmaW5hbCBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VF
cnJvciYpIGZpbmFsIG92ZXJyaWRlOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtTZXNzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAkocmV2aXNpb24gMTkxODQ0KQorKysgU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Nlc3Npb24uaAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNyArNjcsNyBAQCBjbGFzcyBOZXR3b3JrU2Vzc2lvblRhc2tDbGllbnQgewogcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCB3aWxsUGVyZm9ybUhUVFBSZWRpcmVjdGlvbihjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0
Jiwgc3RkOjpmdW5jdGlvbjx2b2lkKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYpPikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQ2hhbGxlbmdlKGNvbnN0IFdlYkNvcmU6
OkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlRGlzcG9zaXRpb24sIGNvbnN0IFdlYkNvcmU6OkNyZWRlbnRpYWwmKT4pID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdlYkNvcmU6OlJlc291cmNl
UmVzcG9uc2UmLCBzdGQ6OmZ1bmN0aW9uPHZvaWQoUmVzcG9uc2VEaXNwb3NpdGlvbik+KSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlc3BvbnNlJiwgc3RkOjpmdW5jdGlvbjx2b2lkKFJlc3BvbnNlRGlzcG9zaXRpb24pPikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShSZWZQdHI8V2ViQ29yZTo6U2hh
cmVkQnVmZmVyPikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVdpdGhFcnJvcihj
b25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikgPSAwOwogCg==
</data>
<flag name="review"
          id="289613"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>