<?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>86911</bug_id>
          
          <creation_ts>2012-05-18 15:41:34 -0700</creation_ts>
          <short_desc>IndexedDB: &quot;ASSERTION FAILED: !m_requestFinished&quot; hit in IDBRequest::dispatchEvent</short_desc>
          <delta_ts>2012-07-20 16:51:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90412</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>628166</commentid>
    <comment_count>0</comment_count>
      <attachid>142799</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-05-18 15:41:34 -0700</bug_when>
    <thetext>Created attachment 142799
Repro case

Seen in DumpRenderTree with attached LayoutTest (which could be dropped into storage/indexeddb for dependencies):

crash log for DumpRenderTree (pid 8867):
STDERR: ASSERTION FAILED: !m_requestFinished
STDERR: ../../third_party/WebKit/Source/WebCore/Modules/indexeddb/IDBRequest.cpp(342) : virtual bool WebCore::IDBRequest::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;)

What&apos;s probably happening is the transaction is completing, and IDBTransaction::onComplete() calls IDBTransaction::closeOpenCursors() calls IDBCursor::close() calls IDBRequest::finishCursor() which sets m_cursorFinished, which allows m_requestFinished to be set. This may be happening too early.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628179</commentid>
    <comment_count>1</comment_count>
      <attachid>142804</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-05-18 15:47:24 -0700</bug_when>
    <thetext>Created attachment 142804
Real repro case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628181</commentid>
    <comment_count>2</comment_count>
      <attachid>142799</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-05-18 15:48:16 -0700</bug_when>
    <thetext>Comment on attachment 142799
Repro case

Whoops. First repro had been reduced too far and I was testing the wrong file. Look at the second one that has noSuchFunction</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629317</commentid>
    <comment_count>3</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-05-21 11:42:16 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 142799 [details])
&gt; Whoops. First repro had been reduced too far and I was testing the wrong file. Look at the second one that has noSuchFunction

... and I admit I now have no idea what&apos;s going on. Changing the ordering of lines in the minimal repro - e.g. when the non-existent handler is assigned - makes the issue go away, which means my previous theory is incorrect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649616</commentid>
    <comment_count>4</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-14 16:22:45 -0700</bug_when>
    <thetext>Ah, here&apos;s the key bit:

    request = store.openCursor();
    request.onsuccess = function () {
        event.target.result.continue();
        throw &quot;foo&quot;;
    };

If an exception is thrown in the event handler after the continue() is called the ASSERT is hit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649630</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-14 16:43:57 -0700</bug_when>
    <thetext>The uncaught exception is causing the transaction to be aborted, which closes the cursor which sets m_requestFinished on the IDBRequest between an event being enqueued and it being dispatched.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649648</commentid>
    <comment_count>6</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-14 17:08:31 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; The uncaught exception is causing the transaction to be aborted, which closes the cursor which sets m_requestFinished on the IDBRequest between an event being enqueued and it being dispatched.

Scratch that, not quite correct. Here&apos;s what&apos;s going on:

* success event fired at the cursor request
* success event dispatched by the cursor request
* script calls continue(), which queues an task in the transaction
* script raises an exception, which aborts the transaction
* transaction aborting closes the cursor
* transaction aborting aborts the queued task, which fires an error event at the cursor request
* cursor request attempt to dispatch the error event, and ASSERTs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>649655</commentid>
    <comment_count>7</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-14 17:18:34 -0700</bug_when>
    <thetext>Seems like we need to untangle things slightly - either the cursor shouldn&apos;t &quot;finish&quot; the request while there are outstanding events, or we should allow the error event to be dispatched even if the cursor is closed. Given that dispatch can be arbitrarily delayed, it seems like the latter is more tractable.

(The timing difference between event queuing and dispatching is tricksy.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>665126</commentid>
    <comment_count>8</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-09 13:40:05 -0700</bug_when>
    <thetext>Note that this still repros after the untangling in 90412 (which makes sense because that patch should only impact multiprocess ports, whereas this repros DRT), but any fix here should wait until that lands since it touches related code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673970</commentid>
    <comment_count>9</comment_count>
      <attachid>153361</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-19 15:21:09 -0700</bug_when>
    <thetext>Created attachment 153361
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673974</commentid>
    <comment_count>10</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-19 15:24:25 -0700</bug_when>
    <thetext>Counting only &quot;interesting&quot; LOC, IDBRequest.cpp is now 20% ASSERTs!

dgrogan@, alecflett@ - please take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674965</commentid>
    <comment_count>11</comment_count>
      <attachid>153361</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-07-20 14:20:24 -0700</bug_when>
    <thetext>Comment on attachment 153361
Patch

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

LGTM

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.h:76
&gt;      bool resetReadyState(IDBTransaction*);

Can this line be deleted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674986</commentid>
    <comment_count>12</comment_count>
      <attachid>153605</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-20 14:44:43 -0700</bug_when>
    <thetext>Created attachment 153605
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674989</commentid>
    <comment_count>13</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-07-20 14:45:36 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBRequest.h:76
&gt; &gt;      bool resetReadyState(IDBTransaction*);
&gt; 
&gt; Can this line be deleted?

Good catch - deleted!

tony@ - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675083</commentid>
    <comment_count>14</comment_count>
      <attachid>153605</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-20 16:51:41 -0700</bug_when>
    <thetext>Comment on attachment 153605
Patch

Clearing flags on attachment: 153605

Committed r123275: &lt;http://trac.webkit.org/changeset/123275&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675084</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-20 16:51:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>142799</attachid>
            <date>2012-05-18 15:41:34 -0700</date>
            <delta_ts>2012-05-18 15:48:16 -0700</delta_ts>
            <desc>Repro case</desc>
            <filename>continue-assert.html</filename>
            <type>text/html</type>
            <size>702</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">PHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0Pgo8c2NyaXB0
PgpyZXF1ZXN0ID0gd2Via2l0SW5kZXhlZERCLm9wZW4oJ2NvbnRpbnVlLWFzc2VydCcpOwpyZXF1
ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uICgpIHsKICAgIGRiID0gZXZlbnQudGFyZ2V0LnJlc3Vs
dDsKICAgIHJlcXVlc3QgPSBkYi5zZXRWZXJzaW9uKCcxJyk7CiAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdz
dG9yZU5hbWUnLCBudWxsKTsKICAgICAgICBzdG9yZS5hZGQoJ3ZhbHVlJywgJ2tleScpOwogICAg
ICAgIHJlcXVlc3QgPSBzdG9yZS5vcGVuQ3Vyc29yKCk7CiAgICAgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSBvbk9wZW5DdXJzb3I7CiAgICB9Owp9CgpmdW5jdGlvbiBvbk9wZW5DdXJzb3IoKQp7CiAg
ICBpZiAoZXZlbnQudGFyZ2V0LnJlc3VsdCkgewogICAgICAgIGV2ZW50LnRhcmdldC5yZXN1bHQu
Y29udGludWUoKTsKICAgIH0gZWxzZSB7CiAgICAgICAgZmluaXNoSlNUZXN0KCk7CiAgICB9Cn0K
Cjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>142804</attachid>
            <date>2012-05-18 15:47:24 -0700</date>
            <delta_ts>2012-05-18 15:47:24 -0700</delta_ts>
            <desc>Real repro case</desc>
            <filename>continueassert.html</filename>
            <type>text/html</type>
            <size>665</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">CjxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+CjxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KPHNjcmlw
dD4KcmVxdWVzdCA9IHdlYmtpdEluZGV4ZWREQi5vcGVuKCdjb250aW51ZS1hc3NlcnQnKTsKcmVx
dWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7CiAgICBkYiA9IGV2ZW50LnRhcmdldC5yZXN1
bHQ7CiAgICByZXF1ZXN0ID0gZGIuc2V0VmVyc2lvbignMScpOwogICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgn
c3RvcmVOYW1lJywgbnVsbCk7CiAgICAgICAgc3RvcmUuYWRkKCd2YWx1ZScsICdrZXknKTsKICAg
ICAgICByZXF1ZXN0ID0gc3RvcmUub3BlbkN1cnNvcigpOwogICAgICAgIHJlcXVlc3Qub25zdWNj
ZXNzID0gb25PcGVuQ3Vyc29yOwogICAgfTsKfQoKZnVuY3Rpb24gb25PcGVuQ3Vyc29yKCkKewog
ICAgZXZlbnQudGFyZ2V0LnJlc3VsdC5jb250aW51ZSgpOwogICAgcmVxdWVzdC5vbnN1Y2Nlc3Mg
PSBub1N1Y2hGdW5jdGlvbjsKfQoKPC9zY3JpcHQ+CjxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153361</attachid>
            <date>2012-07-19 15:21:09 -0700</date>
            <delta_ts>2012-07-20 14:44:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86911-20120719152109.patch</filename>
            <type>text/plain</type>
            <size>24672</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmFlNTY0YmNkOTA3YWJj
YWM4MDUxZTIzZGYwZjE4M2ZjYzBmYWJmMS4uZDhjY2EyMDBlZDQxMDYxMzNiZjExODk5YjA5MDY0
ZGNiYjQ2NGUxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA3LTE5ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiAiQVNT
RVJUSU9OIEZBSUxFRDogIW1fcmVxdWVzdEZpbmlzaGVkIiBoaXQgaW4gSURCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODY5MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDbGVhbiB1cCB0aGUgSURCUmVxdWVzdC9JREJDdXJzb3IgcmVsYXRpb25zaGlwIGFuZCB0aGUg
SURCUmVxdWVzdCBsaWZlY3ljbGUuCisKKyAgICAgICAgVGhlIElEQlJlcXVlc3QncyBtX2N1cnNv
ci9zZXRDdXJzb3IoKSBjYWxscyBhcmUgcmVuYW1lZCB0byBtX3BlbmRpbmdDdXJzb3Ivc2V0UGVu
ZGluZ0N1cnNvcigpIHRvCisgICAgICAgIGNsYXJpZnkgdGhhdCB0aGUgcmVxdWVzdCB3aWxsIG1v
dmUgYmV0d2VlbiB0d28gc3RhdGVzIC0gZWl0aGVyIHRoZXJlJ3MgYSBjdXJzb3IgcmVxdWVzdCBp
bi1mbGlnaHQKKyAgICAgICAgYy9vIGEgY29udGludWUoKSBvciBhZHZhbmNlKCkgY2FsbCwgb3Ig
dGhlIHJlc3VsdCBoYXMgY29tZSBpbiAoY3Vyc29yLCBudWxsLWZvci1kb25lLCBvciBlcnJvciku
CisgICAgICAgIFNpbmNlIHRoZXkgd2VyZSBvbmx5IGV2ZXIgdXNlZCB0b2dldGhlciwgcmVzZXRS
ZWFkeVN0YXRlKCkgaXMgbWVyZ2VkIGludG8gc2V0UmVzdWx0Q3Vyc29yKCkuIFRoZQorICAgICAg
ICBtX3JlcXVlc3RGaW5pc2hlZCBmbGFnIGJlY29tZXMgcmVkdW5kYW50IGFuZCBpcyBkcm9wcGVk
IC0gdGhlIEFTU0VSVCByZXBvcnRlZCBpbiB0aGUgYnVnCisgICAgICAgIGJlY29tZXMgYW4gQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKSBhbmQgbV9yZWFkeVN0YXRlIHRyYWNraW5nIGlz
IGFscmVhZHkgY29ycmVjdC4KKworICAgICAgICBUZXN0OiBzdG9yYWdlL2luZGV4ZWRkYi9yZXF1
ZXN0LWNvbnRpbnVlLWFib3J0Lmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmFkdmFuY2UpOiBVbnJl
YWNoYWJsZSBjb2RlIHBhdGggbm93IGRlYWQgYW5kIGdvbmUuCisgICAgICAgIChXZWJDb3JlOjpJ
REJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcDogTW9zdCBmdW5jdGlvbnMganVzdCBhZGQgc3RhdGUgYXNz
ZXJ0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OklEQlJlcXVlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6c2V0Q3Vyc29yRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0
OjpzZXRQZW5kaW5nQ3Vyc29yKTogTWVyZ2Ugd2l0aCBvbGQgcmVzZXRSZWFkeVN0YXRlKCkuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmdldFJlc3Vs
dEN1cnNvcik6IEhlbHBlciwgc2luY2UgZGlnZ2luZyBjdXJzb3Igb3V0IG9mIElEQkFueSBpcyBw
ZXNreS4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcik6IEp1
c3QgbW92ZWQgaW4gdGhlIGZpbGUgdG8gYmUgd2l0aCBpdHMgZnJpZW5kcy4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlJlcXVlc3Q6OmZpbmlzaEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpvbkVycm9yKTogSnVzdCBhc3NlcnRpb25zLCByZS1vcmRlcmluZywgcmUtbmFtaW5n
LgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQpOiBTaW1wbGlmeSEKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OmVucXVldWVFdmVudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCUmVxdWVzdC5oOgorICAgICAgICAoSURCUmVxdWVzdCk6CisKIDIwMTItMDctMTggIERp
bWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXggdXAg
b2xkIG5hbWUgaW4gUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDZlMjg2OTFhZjBiNzcxNmM5
MDY1NmM4NmI1Yzg4NzA0NWM3YjU3ZTAuLmRkM2IwNmNiNzMzYjI3ZDUwZmZlZDk5MWFiNTdmOTBm
MDY4NzVhMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vy
c29yLmNwcApAQCAtMTg2LDEyICsxODYsNyBAQCB2b2lkIElEQkN1cnNvcjo6YWR2YW5jZSh1bnNp
Z25lZCBsb25nIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGlmICghbV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90cmFuc2FjdGlvbi5n
ZXQoKSkpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBtX3JlcXVlc3QtPnNldEN1cnNvcih0aGlzKTsKKyAgICBtX3JlcXVlc3Qt
PnNldFBlbmRpbmdDdXJzb3IodGhpcyk7CiAgICAgbV9nb3RWYWx1ZSA9IGZhbHNlOwogICAgIG1f
YmFja2VuZC0+YWR2YW5jZShjb3VudCwgbV9yZXF1ZXN0LCBlYyk7CiB9CkBAIC0yMTYsMTQgKzIx
MSw5IEBAIHZvaWQgSURCQ3Vyc29yOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5
PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiAgICAgLy8gRklYTUU6IFdlJ3JlIG5vdCB1c2lu
ZyB0aGUgY29udGV4dCBmcm9tIHdoZW4gY29udGludWUgd2FzIGNhbGxlZCwgd2hpY2ggbWVhbnMg
dGhlIGNhbGxiYWNrCiAgICAgLy8gICAgICAgIHdpbGwgYmUgb24gdGhlIG9yaWdpbmFsIGNvbnRl
eHQgb3BlbkN1cnNvciB3YXMgY2FsbGVkIG9uLiBJcyB0aGlzIHJpZ2h0PwotICAgIGlmIChtX3Jl
cXVlc3QtPnJlc2V0UmVhZHlTdGF0ZShtX3RyYW5zYWN0aW9uLmdldCgpKSkgewotICAgICAgICBt
X3JlcXVlc3QtPnNldEN1cnNvcih0aGlzKTsKLSAgICAgICAgbV9nb3RWYWx1ZSA9IGZhbHNlOwot
ICAgICAgICBtX2JhY2tlbmQtPmNvbnRpbnVlRnVuY3Rpb24oa2V5LCBtX3JlcXVlc3QsIGVjKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwotICAgIH0KKyAg
ICBtX3JlcXVlc3QtPnNldFBlbmRpbmdDdXJzb3IodGhpcyk7CisgICAgbV9nb3RWYWx1ZSA9IGZh
bHNlOworICAgIG1fYmFja2VuZC0+Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCwgZWMp
OwogfQogCiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24o
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCmluZGV4IDU0
YWZlMDNhNmYyZWRkZGMyM2VlY2YwODUyMDViNWI1NzJjYTY4MWYuLmExZWFmMjkzMGMxYTFlYjhj
MjdiY2VlOGU1MjIwOWU4MjY5ODQzNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlJlcXVlc3QuY3BwCkBAIC01OCwxMiArNTgsMTEgQEAgSURCUmVxdWVzdDo6
SURCUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElE
QkFueT4gc291cmMKICAgICAsIG1fdHJhbnNhY3Rpb24odHJhbnNhY3Rpb24pCiAgICAgLCBtX3Jl
YWR5U3RhdGUoUEVORElORykKICAgICAsIG1fcmVxdWVzdEFib3J0ZWQoZmFsc2UpCi0gICAgLCBt
X3JlcXVlc3RGaW5pc2hlZChmYWxzZSkKICAgICAsIG1fY3Vyc29yRmluaXNoZWQoZmFsc2UpCiAg
ICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQogICAgICwgbV9jdXJzb3JUeXBlKElEQkN1cnNv
ckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBlKQogICAgICwgbV9jdXJzb3JEaXJl
Y3Rpb24oSURCQ3Vyc29yOjpORVhUKQotICAgICwgbV9jdXJzb3IoMCkKKyAgICAsIG1fcGVuZGlu
Z0N1cnNvcigwKQogewogICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7CiAgICAgICAgIG1fdHJhbnNh
Y3Rpb24tPnJlZ2lzdGVyUmVxdWVzdCh0aGlzKTsKQEAgLTE0MSw0MCArMTQwLDE0IEBAIHZvaWQg
SURCUmVxdWVzdDo6bWFya0Vhcmx5RGVhdGgoKQogICAgICAgICBtX3RyYW5zYWN0aW9uLT51bnJl
Z2lzdGVyUmVxdWVzdCh0aGlzKTsKIH0KIAotYm9vbCBJREJSZXF1ZXN0OjpyZXNldFJlYWR5U3Rh
dGUoSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCghbV9yZXF1ZXN0
RmluaXNoZWQpOwotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIEFT
U0VSVF9VTlVTRUQodHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uID09IG1fdHJhbnNhY3Rpb24pOwot
ICAgIGlmIChtX3JlYWR5U3RhdGUgIT0gRE9ORSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgbV9yZWFkeVN0YXRlID0gUEVORElORzsKLSAgICBtX3Jlc3VsdC5jbGVhcigpOwotICAgIG1f
ZXJyb3JDb2RlID0gMDsKLSAgICBtX2Vycm9yLmNsZWFyKCk7Ci0gICAgbV9lcnJvck1lc3NhZ2Ug
PSBTdHJpbmcoKTsKLSAgICBBU1NFUlQobV90cmFuc2FjdGlvbik7Ci0gICAgbV90cmFuc2FjdGlv
bi0+cmVnaXN0ZXJSZXF1ZXN0KHRoaXMpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLUlEQkFu
eSogSURCUmVxdWVzdDo6c291cmNlKCkKLXsKLSAgICByZXR1cm4gbV9zb3VyY2UuZ2V0KCk7Ci19
Ci0KIHZvaWQgSURCUmVxdWVzdDo6YWJvcnQoKQogeworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUg
PT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CiAgICAgQVNTRVJUKCFtX3JlcXVl
c3RBYm9ydGVkKTsKICAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IFBF
TkRJTkcpIHsKLSAgICAgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKKyAgICBpZiAo
bV9yZWFkeVN0YXRlID09IERPTkUpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICBFdmVu
dFF1ZXVlKiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVl
KCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VucXVldWVkRXZlbnRzLnNpemUoKTsg
KytpKSB7CkBAIC0xOTMsMzQgKzE2Niw2OCBAQCB2b2lkIElEQlJlcXVlc3Q6OmFib3J0KCkKIAog
dm9pZCBJREJSZXF1ZXN0OjpzZXRDdXJzb3JEZXRhaWxzKElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkN1cnNvclR5cGUgY3Vyc29yVHlwZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9u
KQogeworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7CiAgICAgQVNTRVJUKG1f
Y3Vyc29yVHlwZSA9PSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlw
ZSk7CiAgICAgbV9jdXJzb3JUeXBlID0gY3Vyc29yVHlwZTsKICAgICBtX2N1cnNvckRpcmVjdGlv
biA9IGRpcmVjdGlvbjsKIH0KIAotdm9pZCBJREJSZXF1ZXN0OjpzZXRDdXJzb3IoUGFzc1JlZlB0
cjxJREJDdXJzb3I+IGN1cnNvcikKK3ZvaWQgSURCUmVxdWVzdDo6c2V0UGVuZGluZ0N1cnNvcihQ
YXNzUmVmUHRyPElEQkN1cnNvcj4gY3Vyc29yKQogewotICAgIEFTU0VSVCghbV9jdXJzb3IpOwot
ICAgIG1fY3Vyc29yID0gY3Vyc29yOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gRE9ORSk7
CisgICAgQVNTRVJUKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgQVNTRVJUKG1fdHJh
bnNhY3Rpb24pOworICAgIEFTU0VSVCghbV9wZW5kaW5nQ3Vyc29yKTsKKyAgICBBU1NFUlQoY3Vy
c29yID09IGdldFJlc3VsdEN1cnNvcigpKTsKKworICAgIG1fcGVuZGluZ0N1cnNvciA9IGN1cnNv
cjsKKyAgICBtX3Jlc3VsdC5jbGVhcigpOworICAgIG1fcmVhZHlTdGF0ZSA9IFBFTkRJTkc7Cisg
ICAgbV9lcnJvckNvZGUgPSAwOworICAgIG1fZXJyb3IuY2xlYXIoKTsKKyAgICBtX2Vycm9yTWVz
c2FnZSA9IFN0cmluZygpOworICAgIG1fdHJhbnNhY3Rpb24tPnJlZ2lzdGVyUmVxdWVzdCh0aGlz
KTsKK30KKworUGFzc1JlZlB0cjxJREJDdXJzb3I+IElEQlJlcXVlc3Q6OmdldFJlc3VsdEN1cnNv
cigpCit7CisgICAgaWYgKCFtX3Jlc3VsdCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1f
cmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JUeXBlKQorICAgICAgICByZXR1cm4g
bV9yZXN1bHQtPmlkYkN1cnNvcigpOworICAgIGlmIChtX3Jlc3VsdC0+dHlwZSgpID09IElEQkFu
eTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0LT5pZGJD
dXJzb3JXaXRoVmFsdWUoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJREJSZXF1ZXN0Ojpz
ZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IHBycEN1cnNvcikKK3sKKyAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOworICAgIGlmIChtX2N1cnNvclR5cGUgPT0g
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpIHsKKyAgICAgICAgbV9y
ZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShwcnBDdXJzb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShJREJDdXJzb3JXaXRoVmFsdWU6OmZy
b21DdXJzb3IocHJwQ3Vyc29yKSk7CiB9CiAKIHZvaWQgSURCUmVxdWVzdDo6ZmluaXNoQ3Vyc29y
KCkKIHsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRl
ID09IERPTkUpOwogICAgIG1fY3Vyc29yRmluaXNoZWQgPSB0cnVlOwotICAgIGlmIChtX3JlYWR5
U3RhdGUgIT0gUEVORElORykKLSAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQgPSB0cnVlOwogfQog
CiB2b2lkIElEQlJlcXVlc3Q6Om9uRXJyb3IoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBl
cnJvcikKIHsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0
YXRlID09IERPTkUpOwogICAgIGlmIChtX3JlcXVlc3RBYm9ydGVkKQogICAgICAgICByZXR1cm47
Ci0gICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAh
bV9yZXN1bHQpOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7CisgICAgQVNT
RVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9lcnJvciAm
JiAhbV9yZXN1bHQpOwogICAgIG1fZXJyb3JDb2RlID0gZXJyb3ItPmNvZGUoKTsKLSAgICBBU1NF
UlQoIW1fZXJyb3IpOwotICAgIG1fZXJyb3IgPSBET01FcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpnZXRFcnJvck5hbWUoZXJyb3ItPmlkYkNvZGUoKSkpOwogICAgIG1fZXJyb3JN
ZXNzYWdlID0gZXJyb3ItPm1lc3NhZ2UoKTsKLSAgICBtX2N1cnNvci5jbGVhcigpOworICAgIG1f
ZXJyb3IgPSBET01FcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpnZXRFcnJvck5h
bWUoZXJyb3ItPmlkYkNvZGUoKSkpOworICAgIG1fcGVuZGluZ0N1cnNvci5jbGVhcigpOwogICAg
IGVucXVldWVFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50LCB0cnVl
LCB0cnVlKSk7CiB9CiAKQEAgLTIzMiw4ICsyMzksMTAgQEAgc3RhdGljIFBhc3NSZWZQdHI8RXZl
bnQ+IGNyZWF0ZVN1Y2Nlc3NFdmVudCgpCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNz
UmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QpCiB7CiAgICAgSURCX1RSQUNFKCJJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoRE9NU3RyaW5nTGlzdCkiKTsKKyAgICBBU1NFUlQobV9yZWFk
eVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwogICAgIGlmIChtX3Jl
cXVlc3RBYm9ydGVkKQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9
PSBQRU5ESU5HKTsKICAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlz
TnVsbCgpICYmICFtX2Vycm9yICYmICFtX3Jlc3VsdCk7CiAgICAgbV9yZXN1bHQgPSBJREJBbnk6
OmNyZWF0ZShkb21TdHJpbmdMaXN0KTsKICAgICBlbnF1ZXVlRXZlbnQoY3JlYXRlU3VjY2Vzc0V2
ZW50KCkpOwpAQCAtMjQyLDggKzI1MSwxMCBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IGRvbVN0cmluZ0xpc3QpCiB2b2lkIElEQlJlcXVlc3Q6
Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQp
CiB7CiAgICAgSURCX1RSQUNFKCJJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoSURCQ3Vyc29yKSIpOwor
ICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9O
RSk7CiAgICAgaWYgKG1fcmVxdWVzdEFib3J0ZWQpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwogICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYg
bV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fZXJyb3IgJiYgIW1fcmVzdWx0KTsKICAgICBB
U1NFUlQobV9jdXJzb3JUeXBlICE9IElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRD
dXJzb3JUeXBlKTsKICAgICBSZWZQdHI8SURCQ3Vyc29yPiBjdXJzb3I7CkBAIC0yNTEsNyArMjYy
LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogICAgICAgICBjdXJzb3IgPSBJREJDdXJzb3I6OmNyZWF0
ZShiYWNrZW5kLCBtX2N1cnNvckRpcmVjdGlvbiwgdGhpcywgbV9zb3VyY2UuZ2V0KCksIG1fdHJh
bnNhY3Rpb24uZ2V0KCkpOwogICAgIGVsc2UKICAgICAgICAgY3Vyc29yID0gSURCQ3Vyc29yV2l0
aFZhbHVlOjpjcmVhdGUoYmFja2VuZCwgbV9jdXJzb3JEaXJlY3Rpb24sIHRoaXMsIG1fc291cmNl
LmdldCgpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBzZXRSZXN1bHRDdXJzb3IoY3Vyc29y
LCBtX2N1cnNvclR5cGUpOworICAgIHNldFJlc3VsdEN1cnNvcihjdXJzb3IpOwogCiAgICAgZW5x
dWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKIH0KQEAgLTI1OSw4ICsyNzAsMTAgQEAg
dm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlPiBiYWNrZW5kKQogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCiB7CiAgICAgSURCX1RSQUNFKCJJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoSURCRGF0YWJhc2UpIik7CisgICAgQVNTRVJUKG1fcmVhZHlT
dGF0ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKICAgICBpZiAobV9yZXF1
ZXN0QWJvcnRlZCkKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0g
UEVORElORyk7CiAgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051
bGwoKSAmJiAhbV9lcnJvciAmJiAhbV9yZXN1bHQpOwogICAgIGlmIChtX2NvbnRleHRTdG9wcGVk
IHx8ICFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI3NSw4
ICsyODgsMTAgQEAgdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQpCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2Vz
cyhQYXNzUmVmUHRyPElEQktleT4gaWRiS2V5KQogewogICAgIElEQl9UUkFDRSgiSURCUmVxdWVz
dDo6b25TdWNjZXNzKElEQktleSkiKTsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJ
TkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwogICAgIGlmIChtX3JlcXVlc3RBYm9ydGVkKQog
ICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKICAg
ICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNzYWdlLmlzTnVsbCgpICYmICFtX2Vy
cm9yICYmICFtX3Jlc3VsdCk7CiAgICAgaWYgKGlkYktleSAmJiBpZGJLZXktPmlzVmFsaWQoKSkK
ICAgICAgICAgbV9yZXN1bHQgPSBJREJBbnk6OmNyZWF0ZShpZGJLZXkpOwpAQCAtMjg4LDggKzMw
MywxMCBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQktleT4gaWRi
S2V5KQogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+IHBycEJhY2tlbmQpCiB7CiAgICAgSURCX1RSQUNFKCJJREJSZXF1
ZXN0OjpvblN1Y2Nlc3MoSURCVHJhbnNhY3Rpb24pIik7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0
ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKICAgICBpZiAobV9yZXF1ZXN0
QWJvcnRlZCkKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVO
RElORyk7CiAgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwo
KSAmJiAhbV9lcnJvciAmJiAhbV9yZXN1bHQpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IGJhY2tlbmQgPSBwcnBCYWNrZW5kOwogCkBAIC0zMTIsMTEgKzMyOSwx
MyBAQCB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gcHJwQmFja2VuZAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSkK
IHsKICAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0
VmFsdWUpIik7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlT
dGF0ZSA9PSBET05FKTsKICAgICBpZiAobV9yZXF1ZXN0QWJvcnRlZCkKICAgICAgICAgcmV0dXJu
OworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7CiAgICAgQVNTRVJUKCFtX2Vy
cm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9lcnJvciAmJiAhbV9yZXN1
bHQpOwogICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoc2VyaWFsaXplZFNjcmlwdFZhbHVl
KTsKLSAgICBtX2N1cnNvci5jbGVhcigpOworICAgIG1fcGVuZGluZ0N1cnNvci5jbGVhcigpOwog
ICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNjZXNzRXZlbnQoKSk7CiB9CiAKQEAgLTMyNCw4ICsz
NDMsMTAgQEAgdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRTY3JpcHRWYWwKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNj
ZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBTZXJpYWxpemVkU2NyaXB0
VmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBJREJLZXlQYXRo
JiBrZXlQYXRoKQogewogICAgIExPR19FUlJPUigiQ0hFQ0tJTkc6IG9uU3VjY2Vzcyh2YWx1ZSwg
a2V5LCBrZXlwYXRoKSIpOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBt
X3JlYWR5U3RhdGUgPT0gRE9ORSk7CiAgICAgaWYgKG1fcmVxdWVzdEFib3J0ZWQpCiAgICAgICAg
IHJldHVybjsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwogICAgIFJlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSA9IHBycFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTsKICNpZm5kZWYgTkRFQlVHCiAgICAgLy8gRklYTUU6IEFzc2VydCB1
bnRpbCB3ZSBjYW4gYWN0dWFsbHkgaW5qZWN0IHRoZSByaWdodCB2YWx1ZS4KQEAgLTM0MSwxMiAr
MzYyLDEyIEBAIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBwcnBTZXJpYWxpemVkU2NyaXB0CiB2b2lkIElEQlJlcXVlc3Q6Om9uU3Vj
Y2Vzc1dpdGhDb250aW51YXRpb24oKQogewogICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25T
dWNjZXNzV2l0aENvbnRpbnVhdGlvbiIpOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVO
RElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CiAgICAgaWYgKG1fcmVxdWVzdEFib3J0ZWQp
CiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNz
YWdlLmlzTnVsbCgpICYmICFtX2Vycm9yICYmICFtX3Jlc3VsdCk7Ci0gICAgQVNTRVJUKG1fY3Vy
c29yKTsKLSAgICBzZXRSZXN1bHRDdXJzb3IobV9jdXJzb3IsIG1fY3Vyc29yVHlwZSk7Ci0gICAg
bV9jdXJzb3IuY2xlYXIoKTsKKyAgICBBU1NFUlQobV9wZW5kaW5nQ3Vyc29yKTsKKyAgICBzZXRS
ZXN1bHRDdXJzb3IobV9wZW5kaW5nQ3Vyc29yLnJlbGVhc2UoKSk7CiAgICAgZW5xdWV1ZUV2ZW50
KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKIH0KIApAQCAtMzU1LDcgKzM3Niw3IEBAIGJvb2wgSURC
UmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKICAgICAvLyBGSVhNRTogSW4gYW4g
aWRlYWwgd29ybGQsIHdlIHNob3VsZCByZXR1cm4gdHJ1ZSBhcyBsb25nIGFzIGFueW9uZSBoYXMg
YSBvciBjYW4KICAgICAvLyAgICAgICAgZ2V0IGEgaGFuZGxlIHRvIHVzIGFuZCB3ZSBoYXZlIGV2
ZW50IGxpc3RlbmVycy4gVGhpcyBpcyBvcmRlciB0byBoYW5kbGUKICAgICAvLyAgICAgICAgdXNl
ciBnZW5lcmF0ZWQgZXZlbnRzIHByb3Blcmx5LgotICAgIHJldHVybiAhbV9yZXF1ZXN0RmluaXNo
ZWQgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0aXZpdHkoKTsKKyAgICByZXR1cm4g
bV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgQWN0aXZlRE9NT2JqZWN0OjpoYXNQZW5kaW5nQWN0
aXZpdHkoKTsKIH0KIAogdm9pZCBJREJSZXF1ZXN0OjpzdG9wKCkKQEAgLTM4NywxMiArNDA4LDEz
IEBAIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIElEQlJlcXVlc3Q6OnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSBjb25zdAogYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50KQogewogICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dCIpOwotICAgIEFTU0VSVCghbV9yZXF1ZXN0RmluaXNoZWQpOworICAgIEFTU0VSVChtX3JlYWR5
U3RhdGUgPT0gUEVORElORyk7CiAgICAgQVNTRVJUKCFtX2NvbnRleHRTdG9wcGVkKTsKICAgICBB
U1NFUlQobV9lbnF1ZXVlZEV2ZW50cy5zaXplKCkpOwogICAgIEFTU0VSVChzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwogICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkgPT0gdGhpcyk7CiAgICAg
QVNTRVJUX1dJVEhfTUVTU0FHRShtX3JlYWR5U3RhdGUgPCBET05FLCAibV9yZWFkeVN0YXRlIDwg
RE9ORSglZCksIHdhcyAlZCIsIERPTkUsIG1fcmVhZHlTdGF0ZSk7CisKICAgICBpZiAoZXZlbnQt
PnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KQogICAgICAgICBtX3JlYWR5U3Rh
dGUgPSBET05FOwogCkBAIC00MTIsMTIgKzQzNCwxMCBAQCBib29sIElEQlJlcXVlc3Q6OmRpc3Bh
dGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgICAgIHRhcmdldHMuYXBwZW5k
KG1fdHJhbnNhY3Rpb24tPmRiKCkpOwogICAgIH0KIAorICAgIC8vIEN1cnNvciBwcm9wZXJ0aWVz
IHNob3VsZCBub3QgdXBkYXRlZCB1bnRpbCB0aGUgc3VjY2VzcyBldmVudCBpcyBiZWluZyBkaXNw
YXRjaGVkLgogICAgIFJlZlB0cjxJREJDdXJzb3I+IGN1cnNvclRvTm90aWZ5OwotICAgIGlmICht
X3Jlc3VsdCkgewotICAgICAgICBpZiAobV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OklEQkN1
cnNvclR5cGUpCi0gICAgICAgICAgICBjdXJzb3JUb05vdGlmeSA9IG1fcmVzdWx0LT5pZGJDdXJz
b3IoKTsKLSAgICAgICAgZWxzZSBpZiAobV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OklEQkN1
cnNvcldpdGhWYWx1ZVR5cGUpCi0gICAgICAgICAgICBjdXJzb3JUb05vdGlmeSA9IG1fcmVzdWx0
LT5pZGJDdXJzb3JXaXRoVmFsdWUoKTsKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5h
bWVzKCkuc3VjY2Vzc0V2ZW50KSB7CisgICAgICAgIGN1cnNvclRvTm90aWZ5ID0gZ2V0UmVzdWx0
Q3Vyc29yKCk7CiAgICAgICAgIGlmIChjdXJzb3JUb05vdGlmeSkKICAgICAgICAgICAgIGN1cnNv
clRvTm90aWZ5LT5zZXRWYWx1ZVJlYWR5KCk7CiAgICAgfQpAQCAtNDMyLDE1ICs0NTIsMTEgQEAg
Ym9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQog
ICAgIGlmIChzZXRUcmFuc2FjdGlvbkFjdGl2ZSkKICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0
QWN0aXZlKGZhbHNlKTsKIAotICAgIC8vIElmIHRoZSByZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vy
c29yLCBvciBhIG9uQmxvY2tlZCBldmVudCwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgotICAgIGlm
IChldmVudC0+dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgJiYgKCFjdXJzb3JU
b05vdGlmeSB8fCBtX2N1cnNvckZpbmlzaGVkKSkKLSAgICAgICAgbV9yZXF1ZXN0RmluaXNoZWQg
PSB0cnVlOwotCiAgICAgaWYgKGN1cnNvclRvTm90aWZ5KQogICAgICAgICBjdXJzb3JUb05vdGlm
eS0+cG9zdFN1Y2Nlc3NIYW5kbGVyQ2FsbGJhY2soKTsKIAogICAgIGlmIChtX3RyYW5zYWN0aW9u
KSB7Ci0gICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50
ICYmIGRvbnRQcmV2ZW50RGVmYXVsdCAmJiAgIW1fcmVxdWVzdEFib3J0ZWQpIHsKKyAgICAgICAg
aWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgJiYgZG9udFByZXZl
bnREZWZhdWx0ICYmICFtX3JlcXVlc3RBYm9ydGVkKSB7CiAgICAgICAgICAgICBtX3RyYW5zYWN0
aW9uLT5zZXRFcnJvcihtX2Vycm9yKTsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0
KCk7CiAgICAgICAgIH0KQEAgLTQ2NSwxMiArNDgxLDEyIEBAIHZvaWQgSURCUmVxdWVzdDo6dW5j
YXVnaHRFeGNlcHRpb25JbkV2ZW50SGFuZGxlcigpCiAKIHZvaWQgSURCUmVxdWVzdDo6ZW5xdWV1
ZUV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogewotICAgIEFTU0VSVCghbV9yZXF1ZXN0
RmluaXNoZWQpOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5
U3RhdGUgPT0gRE9ORSk7CiAKICAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBBU1NFUlQobV9yZWFkeVN0
YXRlIDwgRE9ORSk7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKIAogICAg
IEV2ZW50UXVldWUqIGV2ZW50UXVldWUgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV2ZW50
UXVldWUoKTsKICAgICBldmVudC0+c2V0VGFyZ2V0KHRoaXMpOwpAQCAtNDg5LDE2ICs1MDUsNiBA
QCBFdmVudFRhcmdldERhdGEqIElEQlJlcXVlc3Q6OmVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpCiAg
ICAgcmV0dXJuICZtX2V2ZW50VGFyZ2V0RGF0YTsKIH0KIAotdm9pZCBJREJSZXF1ZXN0OjpzZXRS
ZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+IHBycEN1cnNvciwgSURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSB0eXBlKQotewotICAgIGlmICh0eXBlID09IElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKSB7Ci0gICAgICAgIG1fcmVzdWx0
ID0gSURCQW55OjpjcmVhdGUocHJwQ3Vyc29yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoSURCQ3Vyc29yV2l0aFZhbHVlOjpmcm9tQ3Vy
c29yKHBycEN1cnNvcikpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IDA2
Y2E5ZGI5YTc5M2Y4Mzc4MTMxZDlmMDc5MjNmYjYxMTU0NTBiMGIuLmVkZWE1NjljNjg1YzdhYjVl
ODVjNTc0NzhmNTIwM2VlYmJmOTgxZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmgKQEAgLTc1LDkgKzc1LDggQEAgcHVibGljOgogICAgIHZvaWQg
bWFya0Vhcmx5RGVhdGgoKTsKICAgICBib29sIHJlc2V0UmVhZHlTdGF0ZShJREJUcmFuc2FjdGlv
biopOwogICAgIHZvaWQgc2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
OjpDdXJzb3JUeXBlLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAgdm9pZCBzZXRDdXJzb3Io
UGFzc1JlZlB0cjxJREJDdXJzb3I+KTsKKyAgICB2b2lkIHNldFBlbmRpbmdDdXJzb3IoUGFzc1Jl
ZlB0cjxJREJDdXJzb3I+KTsKICAgICB2b2lkIGZpbmlzaEN1cnNvcigpOwotICAgIElEQkFueSog
c291cmNlKCk7CiAgICAgdm9pZCBhYm9ydCgpOwogCiAgICAgLy8gSURCQ2FsbGJhY2tzCkBAIC0x
MjIsMTQgKzEyMSwxNCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBl
dmVudFRhcmdldERhdGEoKTsKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZW5zdXJlRXZl
bnRUYXJnZXREYXRhKCk7CiAKLSAgICB2b2lkIHNldFJlc3VsdEN1cnNvcihQYXNzUmVmUHRyPElE
QkN1cnNvcj4sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclR5cGUpOworICAgIFBh
c3NSZWZQdHI8SURCQ3Vyc29yPiBnZXRSZXN1bHRDdXJzb3IoKTsKKyAgICB2b2lkIHNldFJlc3Vs
dEN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvcj4pOwogCiAgICAgUmVmUHRyPElEQkFueT4gbV9z
b3VyY2U7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwogCiAgICAg
UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiAgICAgYm9vbCBtX3JlcXVlc3RBYm9ydGVkOyAvLyBN
YXkgYmUgYWJvcnRlZCBieSB0cmFuc2FjdGlvbiB0aGVuIHJlY2VpdmUgYXN5bmMgb25zdWNjZXNz
OyBpZ25vcmUgdnMuIGFzc2VydC4KLSAgICBib29sIG1fcmVxdWVzdEZpbmlzaGVkOyAvLyBJcyBp
dCBwb3NzaWJsZSB0aGF0IHdlJ2xsIGZpcmUgYW55IG1vcmUgZXZlbnRzPyBJZiBub3QsIHdlJ3Jl
IGZpbmlzaGVkLgogICAgIGJvb2wgbV9jdXJzb3JGaW5pc2hlZDsKICAgICBib29sIG1fY29udGV4
dFN0b3BwZWQ7CiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudD4gPiBtX2VucXVldWVkRXZlbnRzOwpA
QCAtMTM3LDcgKzEzNiw3IEBAIHByaXZhdGU6CiAgICAgLy8gT25seSB1c2VkIGlmIHRoZSByZXN1
bHQgdHlwZSB3aWxsIGJlIGEgY3Vyc29yLgogICAgIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6
OkN1cnNvclR5cGUgbV9jdXJzb3JUeXBlOwogICAgIElEQkN1cnNvcjo6RGlyZWN0aW9uIG1fY3Vy
c29yRGlyZWN0aW9uOwotICAgIFJlZlB0cjxJREJDdXJzb3I+IG1fY3Vyc29yOworICAgIFJlZlB0
cjxJREJDdXJzb3I+IG1fcGVuZGluZ0N1cnNvcjsKIAogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2
ZW50VGFyZ2V0RGF0YTsKIH07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZTcyOWM4ZDY3NDBiMDQ0YjMzYmZmNmI0YzRjNjBk
MDhhMmJiZDAxMC4uYjk3YWNjMzQwNmM1MWQ1MzZhNDZhMmU1MmRmYjIzYzhhYmVlYzM0ZSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI1IEBACisyMDEyLTA3LTE5ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiAiQVNTRVJUSU9OIEZBSUxFRDogIW1fcmVx
dWVzdEZpbmlzaGVkIiBoaXQgaW4gSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODY5MTEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCByZWdyZXNzaW9uIHRl
c3QgYmFzZWQgb24gcmVwcm8gc3RlcHMgaW4gdGhlIGJ1Zy4KKworICAgICAgICAqIHN0b3JhZ2Uv
aW5kZXhlZGRiL3JlcXVlc3QtY29udGludWUtYWJvcnQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9yZXF1ZXN0LWNvbnRpbnVlLWFib3J0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9yZXF1ZXN0LWNvbnRp
bnVlLWFib3J0LmpzOiBBZGRlZC4KKyAgICAgICAgKHRlc3QucmVxdWVzdC5vbnN1Y2Nlc3MucmVx
dWVzdC5vbnN1Y2Nlc3MucmVxdWVzdC5vbnN1Y2Nlc3MpOgorICAgICAgICAodGVzdC5yZXF1ZXN0
Lm9uc3VjY2Vzcy5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh0ZXN0LnJlcXVlc3Qub25z
dWNjZXNzKToKKyAgICAgICAgKHRlc3QpOgorICAgICAgICAob25VcGdyYWRlKToKKyAgICAgICAg
KHRlc3RDdXJzb3IucmVxdWVzdC5vbnN1Y2Nlc3MpOgorICAgICAgICAodGVzdEN1cnNvci5yZXF1
ZXN0Lm9uZXJyb3IpOgorICAgICAgICAodGVzdEN1cnNvci50cmFuc2FjdGlvbi5vbmFib3J0KToK
KyAgICAgICAgKHRlc3RDdXJzb3IpOgorCiAyMDEyLTA3LTE4ICBWaW5jZW50IFNjaGVpYiAgPHNj
aGVpYkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5pZnkgYWxsb3dmdWxsc2NyZWVuIGxvZ2lj
IGluIERvY3VtZW50Ojp3ZWJraXRGdWxsU2NyZWVuRW5hYmxlZCBhbmQgZnVsbFNjcmVlbklzQWxs
b3dlZEZvckVsZW1lbnQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9yZXF1ZXN0LWNvbnRpbnVlLWFib3J0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL3JlcXVlc3QtY29udGludWUtYWJvcnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjUyZjk2YTUxMDllNDZlMGI2OGVhODg0NDYwYmI0YTk4YjVlNTQ2NTcKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXF1ZXN0LWNvbnRpbnVlLWFi
b3J0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM4IEBACitSZWdyZXNzaW9uIHRlc3QgZm9yIElE
QlJlcXVlc3QgaXNzdWUgY2FsbGluZyBjb250aW51ZSBvbiBhIGN1cnNvciB0aGVuIGFib3J0aW5n
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworaW5kZXhlZERCID0gc2VsZi5pbmRl
eGVkREIgfHwgc2VsZi53ZWJraXRJbmRleGVkREIgfHwgc2VsZi5tb3pJbmRleGVkREIgfHwgc2Vs
Zi5tc0luZGV4ZWREQiB8fCBzZWxmLk9JbmRleGVkREI7CisKK2RibmFtZSA9IHNlbGYubG9jYXRp
b24ucGF0aG5hbWUKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnZGJuYW1lJykKK3JlcXVlc3Qg
PSBpbmRleGVkREIub3BlbignZGJuYW1lJykKK2RiID0gcmVxdWVzdC5yZXN1bHQKK2RiLnNldFZl
cnNpb24oJzEnKQorCitvblVwZ3JhZGU6CitkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKQor
Cit0ZXN0Q3Vyc29yOgordHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVh
ZHdyaXRlJykKK3N0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlJykKK3N0b3Jl
LmFkZCgndmFsdWUxJywgJ2tleTEnKQorc3RvcmUuYWRkKCd2YWx1ZTInLCAna2V5MicpCisKK3N0
YXRlID0gMAorcmVxdWVzdCA9IHN0b3JlLm9wZW5DdXJzb3IoKQorCisnc3VjY2VzcycgZXZlbnQg
ZmlyZWQgYXQgcmVxdWVzdC4KK1BBU1MgKytzdGF0ZSBpcyAxCityZXF1ZXN0LnJlc3VsdC5jb250
aW51ZSgpCisKKydlcnJvcicgZXZlbnQgZmlyZWQgYXQgcmVxdWVzdC4KK1BBU1MgKytzdGF0ZSBp
cyAyCisKKydhYm9ydCcgZXZlbnQgZmlyZWQgYXQgdHJhbnNhY3Rpb24uCitQQVNTICsrc3RhdGUg
aXMgMworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3QtY29udGlu
dWUtYWJvcnQuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3QtY29u
dGludWUtYWJvcnQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yZmRlYjZlNmRlZjk5ZGM1YTAwMjVkNGQ1OTA0
OTcyOGU4ZDRhOTNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRl
eGVkZGIvcmVxdWVzdC1jb250aW51ZS1hYm9ydC5odG1sCkBAIC0wLDAgKzEsMTAgQEAKKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlcXVlc3QtY29u
dGludWUtYWJvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1j
b250aW51ZS1hYm9ydC5qcyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNl
cy9yZXF1ZXN0LWNvbnRpbnVlLWFib3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1Y2RmMzQ4MGZmNzZlYjQx
ZTY5MmQwNmM5ZTFiYTY0NTI1ODE2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1jb250aW51ZS1hYm9ydC5qcwpAQCAt
MCwwICsxLDc3IEBACitpZiAodGhpcy5pbXBvcnRTY3JpcHRzKSB7CisgICAgaW1wb3J0U2NyaXB0
cygnLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMnKTsKKyAgICBpbXBv
cnRTY3JpcHRzKCdzaGFyZWQuanMnKTsKK30KKworZGVzY3JpcHRpb24oIlJlZ3Jlc3Npb24gdGVz
dCBmb3IgSURCUmVxdWVzdCBpc3N1ZSBjYWxsaW5nIGNvbnRpbnVlIG9uIGEgY3Vyc29yIHRoZW4g
YWJvcnRpbmcuIik7CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHJlbW92ZVZlbmRvclByZWZp
eGVzKCk7CisKKyAgICBldmFsQW5kTG9nKCdkYm5hbWUgPSBzZWxmLmxvY2F0aW9uLnBhdGhuYW1l
Jyk7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgn
ZGJuYW1lJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFj
azsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXF1ZXN0
ID0gZXZhbEFuZExvZygicmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCdkYm5hbWUnKSIpOworICAg
ICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAg
cmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGV2YWxBbmRMb2co
ImRiID0gcmVxdWVzdC5yZXN1bHQiKTsKKyAgICAgICAgICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJkYi5zZXRWZXJzaW9uKCcxJykiKTsKKyAgICAgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgICAgICAgICAgcmVxdWVzdC5vbmJsb2NrZWQgPSB1
bmV4cGVjdGVkQmxvY2tlZENhbGxiYWNrOworICAgICAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3Mg
PSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgdHJhbnNhY3Rpb24gPSByZXF1ZXN0
LnJlc3VsdDsKKyAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdW5leHBlY3Rl
ZEFib3J0Q2FsbGJhY2s7CisgICAgICAgICAgICAgICAgb25VcGdyYWRlKCk7CisgICAgICAgICAg
ICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IHRlc3RDdXJzb3I7CisgICAgICAgICAgICB9
OworICAgICAgICB9OworICAgIH07Cit9CisKK2Z1bmN0aW9uIG9uVXBncmFkZSgpCit7CisgICAg
ZGVidWcoIiIpOworICAgIGRlYnVnKCJvblVwZ3JhZGU6Iik7CisgICAgZXZhbEFuZExvZygiZGIu
Y3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlJykiKTsKK30KKworCitmdW5jdGlvbiB0ZXN0Q3Vyc29y
KCkKK3sKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoInRlc3RDdXJzb3I6Iik7CisgICAgZXZh
bEFuZExvZygidHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbignc3RvcmUnLCAncmVhZHdyaXRl
JykiKTsKKworICAgIGV2YWxBbmRMb2coInN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUo
J3N0b3JlJykiKTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKCd2YWx1ZTEn
LCAna2V5MScpIik7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInN0b3JlLmFkZCgndmFsdWUyJywgJ2tleTIn
KSIpOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworCisg
ICAgZGVidWcoIiIpOworICAgIGV2YWxBbmRMb2coInN0YXRlID0gMCIpOworICAgIGV2YWxBbmRM
b2coInJlcXVlc3QgPSBzdG9yZS5vcGVuQ3Vyc29yKCkiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygiIik7CisgICAgICAgIGRlYnVnKCInc3Vj
Y2VzcycgZXZlbnQgZmlyZWQgYXQgcmVxdWVzdC4iKTsKKyAgICAgICAgc2hvdWxkQmUoIisrc3Rh
dGUiLCAiMSIpOworICAgICAgICBldmFsQW5kTG9nKCJyZXF1ZXN0LnJlc3VsdC5jb250aW51ZSgp
Iik7CisgICAgICAgIHRyYW5zYWN0aW9uLmFib3J0KCk7CisgICAgfTsKKyAgICByZXF1ZXN0Lm9u
ZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoIiIpOworICAgICAgICBkZWJ1Zygi
J2Vycm9yJyBldmVudCBmaXJlZCBhdCByZXF1ZXN0LiIpOworICAgICAgICBzaG91bGRCZSgiKytz
dGF0ZSIsICIyIik7CisgICAgfTsKKyAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gdW5leHBl
Y3RlZENvbXBsZXRlQ2FsbGJhY2s7CisgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBkZWJ1ZygiIik7CisgICAgICAgIGRlYnVnKCInYWJvcnQnIGV2ZW50IGZp
cmVkIGF0IHRyYW5zYWN0aW9uLiIpOworICAgICAgICBzaG91bGRCZSgiKytzdGF0ZSIsICIzIik7
CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH07Cit9CisKK3Rlc3QoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153605</attachid>
            <date>2012-07-20 14:44:43 -0700</date>
            <delta_ts>2012-07-20 16:51:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86911-20120720144439.patch</filename>
            <type>text/plain</type>
            <size>24683</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjljOTNjZjRlNGIwZmUz
OTljZWUyZTJhYzVjZDY0OWViNDk3MDI5Ni4uOWQ1OWNiYTg5NTFmNGM4MjhmODc2MDg2NjgzYjMy
NWM3ZWZjMWY5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyIEBACisyMDEyLTA3LTE5ICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiAiQVNT
RVJUSU9OIEZBSUxFRDogIW1fcmVxdWVzdEZpbmlzaGVkIiBoaXQgaW4gSURCUmVxdWVzdDo6ZGlz
cGF0Y2hFdmVudAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODY5MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDbGVhbiB1cCB0aGUgSURCUmVxdWVzdC9JREJDdXJzb3IgcmVsYXRpb25zaGlwIGFuZCB0aGUg
SURCUmVxdWVzdCBsaWZlY3ljbGUuCisKKyAgICAgICAgVGhlIElEQlJlcXVlc3QncyBtX2N1cnNv
ci9zZXRDdXJzb3IoKSBjYWxscyBhcmUgcmVuYW1lZCB0byBtX3BlbmRpbmdDdXJzb3Ivc2V0UGVu
ZGluZ0N1cnNvcigpIHRvCisgICAgICAgIGNsYXJpZnkgdGhhdCB0aGUgcmVxdWVzdCB3aWxsIG1v
dmUgYmV0d2VlbiB0d28gc3RhdGVzIC0gZWl0aGVyIHRoZXJlJ3MgYSBjdXJzb3IgcmVxdWVzdCBp
bi1mbGlnaHQKKyAgICAgICAgYy9vIGEgY29udGludWUoKSBvciBhZHZhbmNlKCkgY2FsbCwgb3Ig
dGhlIHJlc3VsdCBoYXMgY29tZSBpbiAoY3Vyc29yLCBudWxsLWZvci1kb25lLCBvciBlcnJvciku
CisgICAgICAgIFNpbmNlIHRoZXkgd2VyZSBvbmx5IGV2ZXIgdXNlZCB0b2dldGhlciwgcmVzZXRS
ZWFkeVN0YXRlKCkgaXMgbWVyZ2VkIGludG8gc2V0UmVzdWx0Q3Vyc29yKCkuIFRoZQorICAgICAg
ICBtX3JlcXVlc3RGaW5pc2hlZCBmbGFnIGJlY29tZXMgcmVkdW5kYW50IGFuZCBpcyBkcm9wcGVk
IC0gdGhlIEFTU0VSVCByZXBvcnRlZCBpbiB0aGUgYnVnCisgICAgICAgIGJlY29tZXMgYW4gQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKSBhbmQgbV9yZWFkeVN0YXRlIHRyYWNraW5nIGlz
IGFscmVhZHkgY29ycmVjdC4KKworICAgICAgICBUZXN0OiBzdG9yYWdlL2luZGV4ZWRkYi9yZXF1
ZXN0LWNvbnRpbnVlLWFib3J0Lmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmFkdmFuY2UpOiBVbnJl
YWNoYWJsZSBjb2RlIHBhdGggbm93IGRlYWQgYW5kIGdvbmUuCisgICAgICAgIChXZWJDb3JlOjpJ
REJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcDogTW9zdCBmdW5jdGlvbnMganVzdCBhZGQgc3RhdGUgYXNz
ZXJ0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OklEQlJlcXVlc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
UmVxdWVzdDo6c2V0Q3Vyc29yRGV0YWlscyk6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0
OjpzZXRQZW5kaW5nQ3Vyc29yKTogTWVyZ2Ugd2l0aCBvbGQgcmVzZXRSZWFkeVN0YXRlKCkuCisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OmdldFJlc3Vs
dEN1cnNvcik6IEhlbHBlciwgc2luY2UgZGlnZ2luZyBjdXJzb3Igb3V0IG9mIElEQkFueSBpcyBw
ZXNreS4KKyAgICAgICAgKFdlYkNvcmU6OklEQlJlcXVlc3Q6OnNldFJlc3VsdEN1cnNvcik6IEp1
c3QgbW92ZWQgaW4gdGhlIGZpbGUgdG8gYmUgd2l0aCBpdHMgZnJpZW5kcy4KKyAgICAgICAgKFdl
YkNvcmU6OklEQlJlcXVlc3Q6OmZpbmlzaEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJS
ZXF1ZXN0OjpvbkVycm9yKTogSnVzdCBhc3NlcnRpb25zLCByZS1vcmRlcmluZywgcmUtbmFtaW5n
LgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6b25TdWNjZXNzKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhDb250aW51YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SURCUmVxdWVzdDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQpOiBTaW1wbGlmeSEKKyAgICAgICAgKFdlYkNv
cmU6OklEQlJlcXVlc3Q6OmVucXVldWVFdmVudCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvSURCUmVxdWVzdC5oOgorICAgICAgICAoSURCUmVxdWVzdCk6CisKIDIwMTItMDctMjAgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMjMxODIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCA0MTdkMGVkZmZmOTExYmNjM2ViNzBmNWZkNjMw
Y2NhMzgxOTliNWQ0Li5lZjM0Y2I4YzdmYjc2MzYxODQxMjJiM2NiODM2ZDI0OGQyMWViOTMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAg
LTE4NiwxMiArMTg2LDcgQEAgdm9pZCBJREJDdXJzb3I6OmFkdmFuY2UodW5zaWduZWQgbG9uZyBj
b3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAoIW1fcmVxdWVzdC0+cmVzZXRSZWFkeVN0YXRlKG1fdHJhbnNhY3Rpb24uZ2V0KCkpKSB7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgbV9yZXF1ZXN0LT5zZXRDdXJzb3IodGhpcyk7CisgICAgbV9yZXF1ZXN0LT5zZXRQZW5kaW5n
Q3Vyc29yKHRoaXMpOwogICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKICAgICBtX2JhY2tlbmQtPmFk
dmFuY2UoY291bnQsIG1fcmVxdWVzdCwgZWMpOwogfQpAQCAtMjE2LDE0ICsyMTEsOSBAQCB2b2lk
IElEQkN1cnNvcjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNl
cHRpb25Db2RlJiBlYykKIAogICAgIC8vIEZJWE1FOiBXZSdyZSBub3QgdXNpbmcgdGhlIGNvbnRl
eHQgZnJvbSB3aGVuIGNvbnRpbnVlIHdhcyBjYWxsZWQsIHdoaWNoIG1lYW5zIHRoZSBjYWxsYmFj
awogICAgIC8vICAgICAgICB3aWxsIGJlIG9uIHRoZSBvcmlnaW5hbCBjb250ZXh0IG9wZW5DdXJz
b3Igd2FzIGNhbGxlZCBvbi4gSXMgdGhpcyByaWdodD8KLSAgICBpZiAobV9yZXF1ZXN0LT5yZXNl
dFJlYWR5U3RhdGUobV90cmFuc2FjdGlvbi5nZXQoKSkpIHsKLSAgICAgICAgbV9yZXF1ZXN0LT5z
ZXRDdXJzb3IodGhpcyk7Ci0gICAgICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKLSAgICAgICAgbV9i
YWNrZW5kLT5jb250aW51ZUZ1bmN0aW9uKGtleSwgbV9yZXF1ZXN0LCBlYyk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKLSAgICB9CisgICAgbV9yZXF1ZXN0
LT5zZXRQZW5kaW5nQ3Vyc29yKHRoaXMpOworICAgIG1fZ290VmFsdWUgPSBmYWxzZTsKKyAgICBt
X2JhY2tlbmQtPmNvbnRpbnVlRnVuY3Rpb24oa2V5LCBtX3JlcXVlc3QsIGVjKTsKIH0KIAogUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCA1NGFmZTAzYTZmMmVk
ZGRjMjNlZWNmMDg1MjA1YjViNTcyY2E2ODFmLi5hMWVhZjI5MzBjMWExZWI4YzI3YmNlZThlNTIy
MDllODI2OTg0MzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJSZXF1ZXN0LmNwcApAQCAtNTgsMTIgKzU4LDExIEBAIElEQlJlcXVlc3Q6OklEQlJlcXVlc3Qo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJBbnk+IHNvdXJj
CiAgICAgLCBtX3RyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKQogICAgICwgbV9yZWFkeVN0YXRlKFBF
TkRJTkcpCiAgICAgLCBtX3JlcXVlc3RBYm9ydGVkKGZhbHNlKQotICAgICwgbV9yZXF1ZXN0Rmlu
aXNoZWQoZmFsc2UpCiAgICAgLCBtX2N1cnNvckZpbmlzaGVkKGZhbHNlKQogICAgICwgbV9jb250
ZXh0U3RvcHBlZChmYWxzZSkKICAgICAsIG1fY3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50
ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSkKICAgICAsIG1fY3Vyc29yRGlyZWN0aW9uKElEQkN1
cnNvcjo6TkVYVCkKLSAgICAsIG1fY3Vyc29yKDApCisgICAgLCBtX3BlbmRpbmdDdXJzb3IoMCkK
IHsKICAgICBpZiAobV90cmFuc2FjdGlvbikgewogICAgICAgICBtX3RyYW5zYWN0aW9uLT5yZWdp
c3RlclJlcXVlc3QodGhpcyk7CkBAIC0xNDEsNDAgKzE0MCwxNCBAQCB2b2lkIElEQlJlcXVlc3Q6
Om1hcmtFYXJseURlYXRoKCkKICAgICAgICAgbV90cmFuc2FjdGlvbi0+dW5yZWdpc3RlclJlcXVl
c3QodGhpcyk7CiB9CiAKLWJvb2wgSURCUmVxdWVzdDo6cmVzZXRSZWFkeVN0YXRlKElEQlRyYW5z
YWN0aW9uKiB0cmFuc2FjdGlvbikKLXsKLSAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsK
LSAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHRyYW5zYWN0aW9uLCB0cmFuc2FjdGlvbiA9PSBtX3RyYW5zYWN0aW9uKTsKLSAgICBpZiAobV9y
ZWFkeVN0YXRlICE9IERPTkUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG1fcmVhZHlT
dGF0ZSA9IFBFTkRJTkc7Ci0gICAgbV9yZXN1bHQuY2xlYXIoKTsKLSAgICBtX2Vycm9yQ29kZSA9
IDA7Ci0gICAgbV9lcnJvci5jbGVhcigpOwotICAgIG1fZXJyb3JNZXNzYWdlID0gU3RyaW5nKCk7
Ci0gICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24pOwotICAgIG1fdHJhbnNhY3Rpb24tPnJlZ2lzdGVy
UmVxdWVzdCh0aGlzKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1JREJBbnkqIElEQlJlcXVl
c3Q6OnNvdXJjZSgpCi17Ci0gICAgcmV0dXJuIG1fc291cmNlLmdldCgpOwotfQotCiB2b2lkIElE
QlJlcXVlc3Q6OmFib3J0KCkKIHsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcg
fHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwogICAgIEFTU0VSVCghbV9yZXF1ZXN0QWJvcnRlZCk7
CiAgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkK
ICAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fcmVhZHlTdGF0ZSAhPSBQRU5ESU5HKSB7Ci0g
ICAgICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CisgICAgaWYgKG1fcmVhZHlTdGF0
ZSA9PSBET05FKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgRXZlbnRRdWV1ZSogZXZl
bnRRdWV1ZSA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXZlbnRRdWV1ZSgpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnF1ZXVlZEV2ZW50cy5zaXplKCk7ICsraSkgewpAQCAt
MTkzLDM0ICsxNjYsNjggQEAgdm9pZCBJREJSZXF1ZXN0OjphYm9ydCgpCiAKIHZvaWQgSURCUmVx
dWVzdDo6c2V0Q3Vyc29yRGV0YWlscyhJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JU
eXBlIGN1cnNvclR5cGUsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKKyAgICBB
U1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwogICAgIEFTU0VSVChtX2N1cnNvclR5cGUg
PT0gSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW52YWxpZEN1cnNvclR5cGUpOwogICAgIG1f
Y3Vyc29yVHlwZSA9IGN1cnNvclR5cGU7CiAgICAgbV9jdXJzb3JEaXJlY3Rpb24gPSBkaXJlY3Rp
b247CiB9CiAKLXZvaWQgSURCUmVxdWVzdDo6c2V0Q3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29y
PiBjdXJzb3IpCit2b2lkIElEQlJlcXVlc3Q6OnNldFBlbmRpbmdDdXJzb3IoUGFzc1JlZlB0cjxJ
REJDdXJzb3I+IGN1cnNvcikKIHsKLSAgICBBU1NFUlQoIW1fY3Vyc29yKTsKLSAgICBtX2N1cnNv
ciA9IGN1cnNvcjsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IERPTkUpOworICAgIEFTU0VS
VChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgIEFTU0VSVChtX3RyYW5zYWN0aW9uKTsK
KyAgICBBU1NFUlQoIW1fcGVuZGluZ0N1cnNvcik7CisgICAgQVNTRVJUKGN1cnNvciA9PSBnZXRS
ZXN1bHRDdXJzb3IoKSk7CisKKyAgICBtX3BlbmRpbmdDdXJzb3IgPSBjdXJzb3I7CisgICAgbV9y
ZXN1bHQuY2xlYXIoKTsKKyAgICBtX3JlYWR5U3RhdGUgPSBQRU5ESU5HOworICAgIG1fZXJyb3JD
b2RlID0gMDsKKyAgICBtX2Vycm9yLmNsZWFyKCk7CisgICAgbV9lcnJvck1lc3NhZ2UgPSBTdHJp
bmcoKTsKKyAgICBtX3RyYW5zYWN0aW9uLT5yZWdpc3RlclJlcXVlc3QodGhpcyk7Cit9CisKK1Bh
c3NSZWZQdHI8SURCQ3Vyc29yPiBJREJSZXF1ZXN0OjpnZXRSZXN1bHRDdXJzb3IoKQoreworICAg
IGlmICghbV9yZXN1bHQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChtX3Jlc3VsdC0+dHlw
ZSgpID09IElEQkFueTo6SURCQ3Vyc29yVHlwZSkKKyAgICAgICAgcmV0dXJuIG1fcmVzdWx0LT5p
ZGJDdXJzb3IoKTsKKyAgICBpZiAobV9yZXN1bHQtPnR5cGUoKSA9PSBJREJBbnk6OklEQkN1cnNv
cldpdGhWYWx1ZVR5cGUpCisgICAgICAgIHJldHVybiBtX3Jlc3VsdC0+aWRiQ3Vyc29yV2l0aFZh
bHVlKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0Q3Vy
c29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBwcnBDdXJzb3IpCit7CisgICAgQVNTRVJUKG1fcmVh
ZHlTdGF0ZSA9PSBQRU5ESU5HKTsKKyAgICBpZiAobV9jdXJzb3JUeXBlID09IElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yKSB7CisgICAgICAgIG1fcmVzdWx0ID0gSURC
QW55OjpjcmVhdGUocHJwQ3Vyc29yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1f
cmVzdWx0ID0gSURCQW55OjpjcmVhdGUoSURCQ3Vyc29yV2l0aFZhbHVlOjpmcm9tQ3Vyc29yKHBy
cEN1cnNvcikpOwogfQogCiB2b2lkIElEQlJlcXVlc3Q6OmZpbmlzaEN1cnNvcigpCiB7CisgICAg
QVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsK
ICAgICBtX2N1cnNvckZpbmlzaGVkID0gdHJ1ZTsKLSAgICBpZiAobV9yZWFkeVN0YXRlICE9IFBF
TkRJTkcpCi0gICAgICAgIG1fcmVxdWVzdEZpbmlzaGVkID0gdHJ1ZTsKIH0KIAogdm9pZCBJREJS
ZXF1ZXN0OjpvbkVycm9yKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiB7Cisg
ICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05F
KTsKICAgICBpZiAobV9yZXF1ZXN0QWJvcnRlZCkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fcmVzdWx0KTsK
KyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOworICAgIEFTU0VSVCghbV9lcnJv
ckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fZXJyb3IgJiYgIW1fcmVzdWx0
KTsKICAgICBtX2Vycm9yQ29kZSA9IGVycm9yLT5jb2RlKCk7Ci0gICAgQVNTRVJUKCFtX2Vycm9y
KTsKLSAgICBtX2Vycm9yID0gRE9NRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
Z2V0RXJyb3JOYW1lKGVycm9yLT5pZGJDb2RlKCkpKTsKICAgICBtX2Vycm9yTWVzc2FnZSA9IGVy
cm9yLT5tZXNzYWdlKCk7Ci0gICAgbV9jdXJzb3IuY2xlYXIoKTsKKyAgICBtX2Vycm9yID0gRE9N
RXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Z2V0RXJyb3JOYW1lKGVycm9yLT5p
ZGJDb2RlKCkpKTsKKyAgICBtX3BlbmRpbmdDdXJzb3IuY2xlYXIoKTsKICAgICBlbnF1ZXVlRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCwgdHJ1ZSwgdHJ1ZSkpOwog
fQogCkBAIC0yMzIsOCArMjM5LDEwIEBAIHN0YXRpYyBQYXNzUmVmUHRyPEV2ZW50PiBjcmVhdGVT
dWNjZXNzRXZlbnQoKQogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KQogewogICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6
b25TdWNjZXNzKERPTVN0cmluZ0xpc3QpIik7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQ
RU5ESU5HIHx8IG1fcmVhZHlTdGF0ZSA9PSBET05FKTsKICAgICBpZiAobV9yZXF1ZXN0QWJvcnRl
ZCkKICAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7
CiAgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAh
bV9lcnJvciAmJiAhbV9yZXN1bHQpOwogICAgIG1fcmVzdWx0ID0gSURCQW55OjpjcmVhdGUoZG9t
U3RyaW5nTGlzdCk7CiAgICAgZW5xdWV1ZUV2ZW50KGNyZWF0ZVN1Y2Nlc3NFdmVudCgpKTsKQEAg
LTI0Miw4ICsyNTEsMTAgQEAgdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxE
T01TdHJpbmdMaXN0PiBkb21TdHJpbmdMaXN0KQogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3Mo
UGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogewogICAgIElE
Ql9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNjZXNzKElEQkN1cnNvcikiKTsKKyAgICBBU1NFUlQo
bV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERPTkUpOwogICAgIGlm
IChtX3JlcXVlc3RBYm9ydGVkKQogICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fcmVhZHlT
dGF0ZSA9PSBQRU5ESU5HKTsKICAgICBBU1NFUlQoIW1fZXJyb3JDb2RlICYmIG1fZXJyb3JNZXNz
YWdlLmlzTnVsbCgpICYmICFtX2Vycm9yICYmICFtX3Jlc3VsdCk7CiAgICAgQVNTRVJUKG1fY3Vy
c29yVHlwZSAhPSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZSk7
CiAgICAgUmVmUHRyPElEQkN1cnNvcj4gY3Vyc29yOwpAQCAtMjUxLDcgKzI2Miw3IEBAIHZvaWQg
SURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFj
ZT4gYmFja2VuZCkKICAgICAgICAgY3Vyc29yID0gSURCQ3Vyc29yOjpjcmVhdGUoYmFja2VuZCwg
bV9jdXJzb3JEaXJlY3Rpb24sIHRoaXMsIG1fc291cmNlLmdldCgpLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKICAgICBlbHNlCiAgICAgICAgIGN1cnNvciA9IElEQkN1cnNvcldpdGhWYWx1ZTo6Y3Jl
YXRlKGJhY2tlbmQsIG1fY3Vyc29yRGlyZWN0aW9uLCB0aGlzLCBtX3NvdXJjZS5nZXQoKSwgbV90
cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgc2V0UmVzdWx0Q3Vyc29yKGN1cnNvciwgbV9jdXJzb3JU
eXBlKTsKKyAgICBzZXRSZXN1bHRDdXJzb3IoY3Vyc29yKTsKIAogICAgIGVucXVldWVFdmVudChj
cmVhdGVTdWNjZXNzRXZlbnQoKSk7CiB9CkBAIC0yNTksOCArMjcwLDEwIEBAIHZvaWQgSURCUmVx
dWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4gYmFj
a2VuZCkKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VC
YWNrZW5kSW50ZXJmYWNlPiBiYWNrZW5kKQogewogICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6
b25TdWNjZXNzKElEQkRhdGFiYXNlKSIpOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVO
RElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CiAgICAgaWYgKG1fcmVxdWVzdEFib3J0ZWQp
CiAgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwog
ICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1f
ZXJyb3IgJiYgIW1fcmVzdWx0KTsKICAgICBpZiAobV9jb250ZXh0U3RvcHBlZCB8fCAhc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICAgICByZXR1cm47CkBAIC0yNzUsOCArMjg4LDEwIEBA
IHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlPiBiYWNrZW5kKQogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0
cjxJREJLZXk+IGlkYktleSkKIHsKICAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vz
cyhJREJLZXkpIik7CisgICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HIHx8IG1fcmVh
ZHlTdGF0ZSA9PSBET05FKTsKICAgICBpZiAobV9yZXF1ZXN0QWJvcnRlZCkKICAgICAgICAgcmV0
dXJuOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7CiAgICAgQVNTRVJUKCFt
X2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwoKSAmJiAhbV9lcnJvciAmJiAhbV9y
ZXN1bHQpOwogICAgIGlmIChpZGJLZXkgJiYgaWRiS2V5LT5pc1ZhbGlkKCkpCiAgICAgICAgIG1f
cmVzdWx0ID0gSURCQW55OjpjcmVhdGUoaWRiS2V5KTsKQEAgLTI4OCw4ICszMDMsMTAgQEAgdm9p
ZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJLZXk+IGlkYktleSkKIHZvaWQg
SURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiBwcnBCYWNrZW5kKQogewogICAgIElEQl9UUkFDRSgiSURCUmVxdWVzdDo6b25TdWNj
ZXNzKElEQlRyYW5zYWN0aW9uKSIpOworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElO
RyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9ORSk7CiAgICAgaWYgKG1fcmVxdWVzdEFib3J0ZWQpCiAg
ICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwogICAg
IEFTU0VSVCghbV9lcnJvckNvZGUgJiYgbV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fZXJy
b3IgJiYgIW1fcmVzdWx0KTsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBiYWNrZW5kID0gcHJwQmFja2VuZDsKIApAQCAtMzEyLDExICszMjksMTMgQEAgdm9pZCBJ
REJSZXF1ZXN0OjpvblN1Y2Nlc3MoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHBycEJhY2tlbmQKIHZvaWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUpCiB7CiAgICAgSURC
X1RSQUNFKCJJREJSZXF1ZXN0OjpvblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlKSIpOwor
ICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyB8fCBtX3JlYWR5U3RhdGUgPT0gRE9O
RSk7CiAgICAgaWYgKG1fcmVxdWVzdEFib3J0ZWQpCiAgICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcpOwogICAgIEFTU0VSVCghbV9lcnJvckNvZGUgJiYg
bV9lcnJvck1lc3NhZ2UuaXNOdWxsKCkgJiYgIW1fZXJyb3IgJiYgIW1fcmVzdWx0KTsKICAgICBt
X3Jlc3VsdCA9IElEQkFueTo6Y3JlYXRlKHNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSk7Ci0gICAgbV9j
dXJzb3IuY2xlYXIoKTsKKyAgICBtX3BlbmRpbmdDdXJzb3IuY2xlYXIoKTsKICAgICBlbnF1ZXVl
RXZlbnQoY3JlYXRlU3VjY2Vzc0V2ZW50KCkpOwogfQogCkBAIC0zMjQsOCArMzQzLDEwIEBAIHZv
aWQgSURCUmVxdWVzdDo6b25TdWNjZXNzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiBzZXJpYWxpemVkU2NyaXB0VmFsCiB2b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwU2VyaWFsaXplZFNjcmlwdFZhbHVlLCBQYXNz
UmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCkK
IHsKICAgICBMT0dfRVJST1IoIkNIRUNLSU5HOiBvblN1Y2Nlc3ModmFsdWUsIGtleSwga2V5cGF0
aCkiKTsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRl
ID09IERPTkUpOwogICAgIGlmIChtX3JlcXVlc3RBYm9ydGVkKQogICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKICAgICBSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiBzZXJpYWxpemVkU2NyaXB0VmFsdWUgPSBwcnBTZXJpYWxpemVkU2NyaXB0
VmFsdWU7CiAjaWZuZGVmIE5ERUJVRwogICAgIC8vIEZJWE1FOiBBc3NlcnQgdW50aWwgd2UgY2Fu
IGFjdHVhbGx5IGluamVjdCB0aGUgcmlnaHQgdmFsdWUuCkBAIC0zNDEsMTIgKzM2MiwxMiBAQCB2
b2lkIElEQlJlcXVlc3Q6Om9uU3VjY2VzcyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gcHJwU2VyaWFsaXplZFNjcmlwdAogdm9pZCBJREJSZXF1ZXN0OjpvblN1Y2Nlc3NXaXRoQ29u
dGludWF0aW9uKCkKIHsKICAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6Om9uU3VjY2Vzc1dpdGhD
b250aW51YXRpb24iKTsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9y
ZWFkeVN0YXRlID09IERPTkUpOwogICAgIGlmIChtX3JlcXVlc3RBYm9ydGVkKQogICAgICAgICBy
ZXR1cm47CiAgICAgQVNTRVJUKCFtX2Vycm9yQ29kZSAmJiBtX2Vycm9yTWVzc2FnZS5pc051bGwo
KSAmJiAhbV9lcnJvciAmJiAhbV9yZXN1bHQpOwotICAgIEFTU0VSVChtX2N1cnNvcik7Ci0gICAg
c2V0UmVzdWx0Q3Vyc29yKG1fY3Vyc29yLCBtX2N1cnNvclR5cGUpOwotICAgIG1fY3Vyc29yLmNs
ZWFyKCk7CisgICAgQVNTRVJUKG1fcGVuZGluZ0N1cnNvcik7CisgICAgc2V0UmVzdWx0Q3Vyc29y
KG1fcGVuZGluZ0N1cnNvci5yZWxlYXNlKCkpOwogICAgIGVucXVldWVFdmVudChjcmVhdGVTdWNj
ZXNzRXZlbnQoKSk7CiB9CiAKQEAgLTM1NSw3ICszNzYsNyBAQCBib29sIElEQlJlcXVlc3Q6Omhh
c1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0CiAgICAgLy8gRklYTUU6IEluIGFuIGlkZWFsIHdvcmxk
LCB3ZSBzaG91bGQgcmV0dXJuIHRydWUgYXMgbG9uZyBhcyBhbnlvbmUgaGFzIGEgb3IgY2FuCiAg
ICAgLy8gICAgICAgIGdldCBhIGhhbmRsZSB0byB1cyBhbmQgd2UgaGF2ZSBldmVudCBsaXN0ZW5l
cnMuIFRoaXMgaXMgb3JkZXIgdG8gaGFuZGxlCiAgICAgLy8gICAgICAgIHVzZXIgZ2VuZXJhdGVk
IGV2ZW50cyBwcm9wZXJseS4KLSAgICByZXR1cm4gIW1fcmVxdWVzdEZpbmlzaGVkIHx8IEFjdGl2
ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7CisgICAgcmV0dXJuIG1fcmVhZHlTdGF0
ZSA9PSBQRU5ESU5HIHx8IEFjdGl2ZURPTU9iamVjdDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7CiB9
CiAKIHZvaWQgSURCUmVxdWVzdDo6c3RvcCgpCkBAIC0zODcsMTIgKzQwOCwxMyBAQCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBJREJSZXF1ZXN0OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29u
c3QKIGJvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVu
dCkKIHsKICAgICBJREJfVFJBQ0UoIklEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQiKTsKLSAgICBB
U1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsKKyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBF
TkRJTkcpOwogICAgIEFTU0VSVCghbV9jb250ZXh0U3RvcHBlZCk7CiAgICAgQVNTRVJUKG1fZW5x
dWV1ZWRFdmVudHMuc2l6ZSgpKTsKICAgICBBU1NFUlQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KTsKICAgICBBU1NFUlQoZXZlbnQtPnRhcmdldCgpID09IHRoaXMpOwogICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9yZWFkeVN0YXRlIDwgRE9ORSwgIm1fcmVhZHlTdGF0ZSA8IERPTkUoJWQpLCB3
YXMgJWQiLCBET05FLCBtX3JlYWR5U3RhdGUpOworCiAgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0g
ZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCkKICAgICAgICAgbV9yZWFkeVN0YXRlID0gRE9ORTsK
IApAQCAtNDEyLDEyICs0MzQsMTAgQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgICAgICB0YXJnZXRzLmFwcGVuZChtX3RyYW5zYWN0
aW9uLT5kYigpKTsKICAgICB9CiAKKyAgICAvLyBDdXJzb3IgcHJvcGVydGllcyBzaG91bGQgbm90
IHVwZGF0ZWQgdW50aWwgdGhlIHN1Y2Nlc3MgZXZlbnQgaXMgYmVpbmcgZGlzcGF0Y2hlZC4KICAg
ICBSZWZQdHI8SURCQ3Vyc29yPiBjdXJzb3JUb05vdGlmeTsKLSAgICBpZiAobV9yZXN1bHQpIHsK
LSAgICAgICAgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JUeXBlKQot
ICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29yKCk7Ci0gICAg
ICAgIGVsc2UgaWYgKG1fcmVzdWx0LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFs
dWVUeXBlKQotICAgICAgICAgICAgY3Vyc29yVG9Ob3RpZnkgPSBtX3Jlc3VsdC0+aWRiQ3Vyc29y
V2l0aFZhbHVlKCk7CisgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCkgeworICAgICAgICBjdXJzb3JUb05vdGlmeSA9IGdldFJlc3VsdEN1cnNvcigpOwog
ICAgICAgICBpZiAoY3Vyc29yVG9Ob3RpZnkpCiAgICAgICAgICAgICBjdXJzb3JUb05vdGlmeS0+
c2V0VmFsdWVSZWFkeSgpOwogICAgIH0KQEAgLTQzMiwxNSArNDUyLDExIEBAIGJvb2wgSURCUmVx
dWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICBpZiAoc2V0
VHJhbnNhY3Rpb25BY3RpdmUpCiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPnNldEFjdGl2ZShmYWxz
ZSk7CiAKLSAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBvZiB0eXBlIElEQkN1cnNvciwgb3IgYSBv
bkJsb2NrZWQgZXZlbnQsIHRoZW4gd2UnbGwgZmlyZSBhZ2Fpbi4KLSAgICBpZiAoZXZlbnQtPnR5
cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50ICYmICghY3Vyc29yVG9Ob3RpZnkgfHwg
bV9jdXJzb3JGaW5pc2hlZCkpCi0gICAgICAgIG1fcmVxdWVzdEZpbmlzaGVkID0gdHJ1ZTsKLQog
ICAgIGlmIChjdXJzb3JUb05vdGlmeSkKICAgICAgICAgY3Vyc29yVG9Ob3RpZnktPnBvc3RTdWNj
ZXNzSGFuZGxlckNhbGxiYWNrKCk7CiAKICAgICBpZiAobV90cmFuc2FjdGlvbikgewotICAgICAg
ICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCAmJiBkb250UHJl
dmVudERlZmF1bHQgJiYgICFtX3JlcXVlc3RBYm9ydGVkKSB7CisgICAgICAgIGlmIChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50ICYmIGRvbnRQcmV2ZW50RGVmYXVsdCAm
JiAhbV9yZXF1ZXN0QWJvcnRlZCkgewogICAgICAgICAgICAgbV90cmFuc2FjdGlvbi0+c2V0RXJy
b3IobV9lcnJvcik7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAg
ICB9CkBAIC00NjUsMTIgKzQ4MSwxMiBAQCB2b2lkIElEQlJlcXVlc3Q6OnVuY2F1Z2h0RXhjZXB0
aW9uSW5FdmVudEhhbmRsZXIoKQogCiB2b2lkIElEQlJlcXVlc3Q6OmVucXVldWVFdmVudChQYXNz
UmVmUHRyPEV2ZW50PiBldmVudCkKIHsKLSAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsK
KyAgICBBU1NFUlQobV9yZWFkeVN0YXRlID09IFBFTkRJTkcgfHwgbV9yZWFkeVN0YXRlID09IERP
TkUpOwogCiAgICAgaWYgKG1fY29udGV4dFN0b3BwZWQgfHwgIXNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUKG1fcmVhZHlTdGF0ZSA8IERPTkUp
OworICAgIEFTU0VSVChtX3JlYWR5U3RhdGUgPT0gUEVORElORyk7CiAKICAgICBFdmVudFF1ZXVl
KiBldmVudFF1ZXVlID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5ldmVudFF1ZXVlKCk7CiAg
ICAgZXZlbnQtPnNldFRhcmdldCh0aGlzKTsKQEAgLTQ4OSwxNiArNTA1LDYgQEAgRXZlbnRUYXJn
ZXREYXRhKiBJREJSZXF1ZXN0OjplbnN1cmVFdmVudFRhcmdldERhdGEoKQogICAgIHJldHVybiAm
bV9ldmVudFRhcmdldERhdGE7CiB9CiAKLXZvaWQgSURCUmVxdWVzdDo6c2V0UmVzdWx0Q3Vyc29y
KFBhc3NSZWZQdHI8SURCQ3Vyc29yPiBwcnBDdXJzb3IsIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2U6OkN1cnNvclR5cGUgdHlwZSkKLXsKLSAgICBpZiAodHlwZSA9PSBJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcikgewotICAgICAgICBtX3Jlc3VsdCA9IElEQkFueTo6
Y3JlYXRlKHBycEN1cnNvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3Jlc3Vs
dCA9IElEQkFueTo6Y3JlYXRlKElEQkN1cnNvcldpdGhWYWx1ZTo6ZnJvbUN1cnNvcihwcnBDdXJz
b3IpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaAppbmRleCAwNmNhOWRiOWE3OTNm
ODM3ODEzMWQ5ZjA3OTIzZmI2MTE1NDUwYjBiLi5hYTliM2Y1OGU5Y2EyYTY4NWExMzI5NWMzMjkx
ZjZiMjVjZmQ1ZjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJSZXF1ZXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
UmVxdWVzdC5oCkBAIC03MywxMSArNzMsOSBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVU
RV9FVkVOVF9MSVNURU5FUihlcnJvcik7CiAKICAgICB2b2lkIG1hcmtFYXJseURlYXRoKCk7Ci0g
ICAgYm9vbCByZXNldFJlYWR5U3RhdGUoSURCVHJhbnNhY3Rpb24qKTsKICAgICB2b2lkIHNldEN1
cnNvckRldGFpbHMoSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6Q3Vyc29yVHlwZSwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24pOwotICAgIHZvaWQgc2V0Q3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29y
Pik7CisgICAgdm9pZCBzZXRQZW5kaW5nQ3Vyc29yKFBhc3NSZWZQdHI8SURCQ3Vyc29yPik7CiAg
ICAgdm9pZCBmaW5pc2hDdXJzb3IoKTsKLSAgICBJREJBbnkqIHNvdXJjZSgpOwogICAgIHZvaWQg
YWJvcnQoKTsKIAogICAgIC8vIElEQkNhbGxiYWNrcwpAQCAtMTIyLDE0ICsxMjAsMTQgQEAgcHJp
dmF0ZToKICAgICB2aXJ0dWFsIEV2ZW50VGFyZ2V0RGF0YSogZXZlbnRUYXJnZXREYXRhKCk7CiAg
ICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGVuc3VyZUV2ZW50VGFyZ2V0RGF0YSgpOwogCi0g
ICAgdm9pZCBzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3I+LCBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlKTsKKyAgICBQYXNzUmVmUHRyPElEQkN1cnNvcj4g
Z2V0UmVzdWx0Q3Vyc29yKCk7CisgICAgdm9pZCBzZXRSZXN1bHRDdXJzb3IoUGFzc1JlZlB0cjxJ
REJDdXJzb3I+KTsKIAogICAgIFJlZlB0cjxJREJBbnk+IG1fc291cmNlOwogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKIAogICAgIFJlYWR5U3RhdGUgbV9yZWFkeVN0
YXRlOwogICAgIGJvb2wgbV9yZXF1ZXN0QWJvcnRlZDsgLy8gTWF5IGJlIGFib3J0ZWQgYnkgdHJh
bnNhY3Rpb24gdGhlbiByZWNlaXZlIGFzeW5jIG9uc3VjY2VzczsgaWdub3JlIHZzLiBhc3NlcnQu
Ci0gICAgYm9vbCBtX3JlcXVlc3RGaW5pc2hlZDsgLy8gSXMgaXQgcG9zc2libGUgdGhhdCB3ZSds
bCBmaXJlIGFueSBtb3JlIGV2ZW50cz8gSWYgbm90LCB3ZSdyZSBmaW5pc2hlZC4KICAgICBib29s
IG1fY3Vyc29yRmluaXNoZWQ7CiAgICAgYm9vbCBtX2NvbnRleHRTdG9wcGVkOwogICAgIFZlY3Rv
cjxSZWZQdHI8RXZlbnQ+ID4gbV9lbnF1ZXVlZEV2ZW50czsKQEAgLTEzNyw3ICsxMzUsNyBAQCBw
cml2YXRlOgogICAgIC8vIE9ubHkgdXNlZCBpZiB0aGUgcmVzdWx0IHR5cGUgd2lsbCBiZSBhIGN1
cnNvci4KICAgICBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlIG1fY3Vyc29y
VHlwZTsKICAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBtX2N1cnNvckRpcmVjdGlvbjsKLSAgICBS
ZWZQdHI8SURCQ3Vyc29yPiBtX2N1cnNvcjsKKyAgICBSZWZQdHI8SURCQ3Vyc29yPiBtX3BlbmRp
bmdDdXJzb3I7CiAKICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CiB9Owpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDcyMGMwYTIzYzJlMjBkMWU1YmJmODFhZmY2NDc1NmM1OGE0ZjhlYTUuLjIxNzIwMjk4
ODM5ZTRjODU2ZjBjMzE4M2JlYjkzZjNhY2VmNDFmYjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAor
MjAxMi0wNy0xOSAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IEluZGV4ZWREQjogIkFTU0VSVElPTiBGQUlMRUQ6ICFtX3JlcXVlc3RGaW5pc2hlZCIgaGl0IGlu
IElEQlJlcXVlc3Q6OmRpc3BhdGNoRXZlbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg2OTExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lvbiB0ZXN0IGJhc2VkIG9uIHJlcHJvIHN0
ZXBzIGluIHRoZSBidWcuCisKKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9yZXF1ZXN0LWNv
bnRpbnVlLWFib3J0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRl
eGVkZGIvcmVxdWVzdC1jb250aW51ZS1hYm9ydC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9y
YWdlL2luZGV4ZWRkYi9yZXNvdXJjZXMvcmVxdWVzdC1jb250aW51ZS1hYm9ydC5qczogQWRkZWQu
CisgICAgICAgICh0ZXN0LnJlcXVlc3Qub25zdWNjZXNzLnJlcXVlc3Qub25zdWNjZXNzLnJlcXVl
c3Qub25zdWNjZXNzKToKKyAgICAgICAgKHRlc3QucmVxdWVzdC5vbnN1Y2Nlc3MucmVxdWVzdC5v
bnN1Y2Nlc3MpOgorICAgICAgICAodGVzdC5yZXF1ZXN0Lm9uc3VjY2Vzcyk6CisgICAgICAgICh0
ZXN0KToKKyAgICAgICAgKG9uVXBncmFkZSk6CisgICAgICAgICh0ZXN0Q3Vyc29yLnJlcXVlc3Qu
b25zdWNjZXNzKToKKyAgICAgICAgKHRlc3RDdXJzb3IucmVxdWVzdC5vbmVycm9yKToKKyAgICAg
ICAgKHRlc3RDdXJzb3IudHJhbnNhY3Rpb24ub25hYm9ydCk6CisgICAgICAgICh0ZXN0Q3Vyc29y
KToKKwogMjAxMi0wNy0yMCAgU3RlcGhlbiBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJlYmFzZWxpbmUgZmFpbGluZyB0ZXN0IHN2Zy9hcy1pbWFnZS9zdmctbm9u
LWludGVnZXItc2NhbGVkLWltYWdlLmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL3JlcXVlc3QtY29udGludWUtYWJvcnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVxdWVzdC1jb250aW51ZS1hYm9ydC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTJmOTZhNTEwOWU0NmUwYjY4ZWE4ODQ0NjBiYjRhOThiNWU1NDY1Nwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3JlcXVlc3Qt
Y29udGludWUtYWJvcnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzggQEAKK1JlZ3Jlc3Npb24g
dGVzdCBmb3IgSURCUmVxdWVzdCBpc3N1ZSBjYWxsaW5nIGNvbnRpbnVlIG9uIGEgY3Vyc29yIHRo
ZW4gYWJvcnRpbmcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitpbmRleGVkREIg
PSBzZWxmLmluZGV4ZWREQiB8fCBzZWxmLndlYmtpdEluZGV4ZWREQiB8fCBzZWxmLm1vekluZGV4
ZWREQiB8fCBzZWxmLm1zSW5kZXhlZERCIHx8IHNlbGYuT0luZGV4ZWREQjsKKworZGJuYW1lID0g
c2VsZi5sb2NhdGlvbi5wYXRobmFtZQoraW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdkYm5hbWUn
KQorcmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKCdkYm5hbWUnKQorZGIgPSByZXF1ZXN0LnJlc3Vs
dAorZGIuc2V0VmVyc2lvbignMScpCisKK29uVXBncmFkZToKK2RiLmNyZWF0ZU9iamVjdFN0b3Jl
KCdzdG9yZScpCisKK3Rlc3RDdXJzb3I6Cit0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdz
dG9yZScsICdyZWFkd3JpdGUnKQorc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3Rv
cmUnKQorc3RvcmUuYWRkKCd2YWx1ZTEnLCAna2V5MScpCitzdG9yZS5hZGQoJ3ZhbHVlMicsICdr
ZXkyJykKKworc3RhdGUgPSAwCityZXF1ZXN0ID0gc3RvcmUub3BlbkN1cnNvcigpCisKKydzdWNj
ZXNzJyBldmVudCBmaXJlZCBhdCByZXF1ZXN0LgorUEFTUyArK3N0YXRlIGlzIDEKK3JlcXVlc3Qu
cmVzdWx0LmNvbnRpbnVlKCkKKworJ2Vycm9yJyBldmVudCBmaXJlZCBhdCByZXF1ZXN0LgorUEFT
UyArK3N0YXRlIGlzIDIKKworJ2Fib3J0JyBldmVudCBmaXJlZCBhdCB0cmFuc2FjdGlvbi4KK1BB
U1MgKytzdGF0ZSBpcyAzCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvcmVx
dWVzdC1jb250aW51ZS1hYm9ydC5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
cmVxdWVzdC1jb250aW51ZS1hYm9ydC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmZGViNmU2ZGVmOTlkYzVh
MDAyNWQ0ZDU5MDQ5NzI4ZThkNGE5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9yZXF1ZXN0LWNvbnRpbnVlLWFib3J0Lmh0bWwKQEAgLTAsMCArMSwx
MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJl
ZC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
cmVxdWVzdC1jb250aW51ZS1hYm9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNl
cy9yZXF1ZXN0LWNvbnRpbnVlLWFib3J0LmpzIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvcmVzb3VyY2VzL3JlcXVlc3QtY29udGludWUtYWJvcnQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODVjZGYz
NDgwZmY3NmViNDFlNjkyZDA2YzllMWJhNjQ1MjU4MTZhZQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL3Jlc291cmNlcy9yZXF1ZXN0LWNvbnRpbnVlLWFi
b3J0LmpzCkBAIC0wLDAgKzEsNzcgQEAKK2lmICh0aGlzLmltcG9ydFNjcmlwdHMpIHsKKyAgICBp
bXBvcnRTY3JpcHRzKCcuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcycp
OworICAgIGltcG9ydFNjcmlwdHMoJ3NoYXJlZC5qcycpOworfQorCitkZXNjcmlwdGlvbigiUmVn
cmVzc2lvbiB0ZXN0IGZvciBJREJSZXF1ZXN0IGlzc3VlIGNhbGxpbmcgY29udGludWUgb24gYSBj
dXJzb3IgdGhlbiBhYm9ydGluZy4iKTsKKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgcmVtb3Zl
VmVuZG9yUHJlZml4ZXMoKTsKKworICAgIGV2YWxBbmRMb2coJ2RibmFtZSA9IHNlbGYubG9jYXRp
b24ucGF0aG5hbWUnKTsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmRlbGV0
ZURhdGFiYXNlKCdkYm5hbWUnKSIpOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvckNhbGxiYWNrOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oJ2RibmFt
ZScpIik7CisgICAgICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OworICAgICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ZXZhbEFuZExvZygiZGIgPSByZXF1ZXN0LnJlc3VsdCIpOworICAgICAgICAgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJzEnKSIpOworICAgICAgICAgICAgcmVxdWVzdC5v
bmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgICAgICByZXF1ZXN0Lm9u
YmxvY2tlZCA9IHVuZXhwZWN0ZWRCbG9ja2VkQ2FsbGJhY2s7CisgICAgICAgICAgICByZXF1ZXN0
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciB0cmFuc2FjdGlv
biA9IHJlcXVlc3QucmVzdWx0OworICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uYWJvcnQg
PSB1bmV4cGVjdGVkQWJvcnRDYWxsYmFjazsKKyAgICAgICAgICAgICAgICBvblVwZ3JhZGUoKTsK
KyAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gdGVzdEN1cnNvcjsKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH07CisgICAgfTsKK30KKworZnVuY3Rpb24gb25VcGdyYWRl
KCkKK3sKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIm9uVXBncmFkZToiKTsKKyAgICBldmFs
QW5kTG9nKCJkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmUnKSIpOworfQorCisKK2Z1bmN0aW9u
IHRlc3RDdXJzb3IoKQoreworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZygidGVzdEN1cnNvcjoi
KTsKKyAgICBldmFsQW5kTG9nKCJ0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKCdzdG9yZScs
ICdyZWFkd3JpdGUnKSIpOworCisgICAgZXZhbEFuZExvZygic3RvcmUgPSB0cmFuc2FjdGlvbi5v
YmplY3RTdG9yZSgnc3RvcmUnKSIpOworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJzdG9yZS5h
ZGQoJ3ZhbHVlMScsICdrZXkxJykiKTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVk
RXJyb3JDYWxsYmFjazsKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKCd2YWx1
ZTInLCAna2V5MicpIik7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2Fs
bGJhY2s7CisKKyAgICBkZWJ1ZygiIik7CisgICAgZXZhbEFuZExvZygic3RhdGUgPSAwIik7Cisg
ICAgZXZhbEFuZExvZygicmVxdWVzdCA9IHN0b3JlLm9wZW5DdXJzb3IoKSIpOworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCIiKTsKKyAgICAgICAg
ZGVidWcoIidzdWNjZXNzJyBldmVudCBmaXJlZCBhdCByZXF1ZXN0LiIpOworICAgICAgICBzaG91
bGRCZSgiKytzdGF0ZSIsICIxIik7CisgICAgICAgIGV2YWxBbmRMb2coInJlcXVlc3QucmVzdWx0
LmNvbnRpbnVlKCkiKTsKKyAgICAgICAgdHJhbnNhY3Rpb24uYWJvcnQoKTsKKyAgICB9OworICAg
IHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1ZygiIik7CisgICAg
ICAgIGRlYnVnKCInZXJyb3InIGV2ZW50IGZpcmVkIGF0IHJlcXVlc3QuIik7CisgICAgICAgIHNo
b3VsZEJlKCIrK3N0YXRlIiwgIjIiKTsKKyAgICB9OworICAgIHRyYW5zYWN0aW9uLm9uY29tcGxl
dGUgPSB1bmV4cGVjdGVkQ29tcGxldGVDYWxsYmFjazsKKyAgICB0cmFuc2FjdGlvbi5vbmFib3J0
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGRlYnVnKCIiKTsKKyAgICAgICAgZGVidWcoIidhYm9y
dCcgZXZlbnQgZmlyZWQgYXQgdHJhbnNhY3Rpb24uIik7CisgICAgICAgIHNob3VsZEJlKCIrK3N0
YXRlIiwgIjMiKTsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7CisgICAgfTsKK30KKwordGVzdCgp
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>