<?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>145541</bug_id>
          
          <creation_ts>2015-06-01 19:09:30 -0700</creation_ts>
          <short_desc>Use modern for-loops in WebCore/Modules - 2</short_desc>
          <delta_ts>2015-06-08 07:37:22 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hunseop Jeong">hs85.jeong</reporter>
          <assigned_to name="Hunseop Jeong">hs85.jeong</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1098691</commentid>
    <comment_count>0</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-01 19:09:30 -0700</bug_when>
    <thetext>Use the modern for-loops in WebCore/Modules - 2 of 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099030</commentid>
    <comment_count>1</comment_count>
      <attachid>254137</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-02 20:48:50 -0700</bug_when>
    <thetext>Created attachment 254137
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099120</commentid>
    <comment_count>2</comment_count>
      <attachid>254137</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 04:32:20 -0700</bug_when>
    <thetext>Comment on attachment 254137
Patch

Attachment 254137 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5037866975494144

New failing tests:
webaudio/audioparam-setValueAtTime.html
webaudio/oscillator-square.html
webaudio/audioparam-linearRampToValueAtTime.html
webaudio/oscillator-custom.html
webaudio/audioparam-exponentialRampToValueAtTime.html
webaudio/audiobuffersource-playbackrate.html
webaudio/audioparam-setTargetAtTime.html
webaudio/audioparam-setValueCurveAtTime.html
webaudio/oscillator-sawtooth.html
webaudio/oscillator-triangle.html
webaudio/oscillator-sine.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099121</commentid>
    <comment_count>3</comment_count>
      <attachid>254167</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 04:32:23 -0700</bug_when>
    <thetext>Created attachment 254167
Archive of layout-test-results from ews102 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews102  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099127</commentid>
    <comment_count>4</comment_count>
      <attachid>254137</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 05:36:00 -0700</bug_when>
    <thetext>Comment on attachment 254137
Patch

Attachment 254137 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/6013651332890624

New failing tests:
webaudio/audioparam-setValueAtTime.html
webaudio/oscillator-square.html
webaudio/audioparam-linearRampToValueAtTime.html
webaudio/oscillator-custom.html
webaudio/audioparam-exponentialRampToValueAtTime.html
webaudio/audiobuffersource-playbackrate.html
webaudio/audioparam-setTargetAtTime.html
webaudio/audioparam-setValueCurveAtTime.html
webaudio/oscillator-sawtooth.html
webaudio/oscillator-triangle.html
webaudio/oscillator-sine.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099128</commentid>
    <comment_count>5</comment_count>
      <attachid>254170</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 05:36:02 -0700</bug_when>
    <thetext>Created attachment 254170
Archive of layout-test-results from ews104 for mac-mavericks-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews104  Port: mac-mavericks-wk2  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099133</commentid>
    <comment_count>6</comment_count>
      <attachid>254137</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 06:59:04 -0700</bug_when>
    <thetext>Comment on attachment 254137
Patch

Attachment 254137 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/5916993093894144

New failing tests:
webaudio/audioparam-setValueAtTime.html
webaudio/oscillator-square.html
webaudio/audioparam-linearRampToValueAtTime.html
webaudio/oscillator-custom.html
webaudio/audioparam-exponentialRampToValueAtTime.html
webaudio/audiobuffersource-playbackrate.html
webaudio/audioparam-setTargetAtTime.html
webaudio/audioparam-setValueCurveAtTime.html
webaudio/oscillator-sawtooth.html
webaudio/oscillator-triangle.html
webaudio/oscillator-sine.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099134</commentid>
    <comment_count>7</comment_count>
      <attachid>254172</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 06:59:08 -0700</bug_when>
    <thetext>Created attachment 254172
Archive of layout-test-results from ews106 for mac-mavericks-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews106  Port: mac-mavericks-wk2  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099141</commentid>
    <comment_count>8</comment_count>
      <attachid>254137</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 07:46:06 -0700</bug_when>
    <thetext>Comment on attachment 254137
Patch

Attachment 254137 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/6728427306483712

New failing tests:
webaudio/audioparam-setValueAtTime.html
webaudio/oscillator-square.html
webaudio/audioparam-linearRampToValueAtTime.html
webaudio/oscillator-custom.html
webaudio/audioparam-exponentialRampToValueAtTime.html
webaudio/audiobuffersource-playbackrate.html
webaudio/audioparam-setTargetAtTime.html
webaudio/audioparam-setValueCurveAtTime.html
webaudio/oscillator-sawtooth.html
webaudio/oscillator-triangle.html
webaudio/oscillator-sine.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099142</commentid>
    <comment_count>9</comment_count>
      <attachid>254176</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 07:46:09 -0700</bug_when>
    <thetext>Created attachment 254176
Archive of layout-test-results from ews100 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews100  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099152</commentid>
    <comment_count>10</comment_count>
      <attachid>254137</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 08:39:06 -0700</bug_when>
    <thetext>Comment on attachment 254137
Patch

Attachment 254137 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/4772107284119552

New failing tests:
webaudio/audioparam-setValueAtTime.html
webaudio/oscillator-square.html
webaudio/audioparam-linearRampToValueAtTime.html
webaudio/oscillator-custom.html
webaudio/audioparam-exponentialRampToValueAtTime.html
webaudio/audiobuffersource-playbackrate.html
webaudio/audioparam-setTargetAtTime.html
webaudio/audioparam-setValueCurveAtTime.html
webaudio/oscillator-sawtooth.html
webaudio/oscillator-triangle.html
webaudio/oscillator-sine.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099153</commentid>
    <comment_count>11</comment_count>
      <attachid>254177</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 08:39:09 -0700</bug_when>
    <thetext>Created attachment 254177
Archive of layout-test-results from ews105 for mac-mavericks-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews105  Port: mac-mavericks-wk2  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099158</commentid>
    <comment_count>12</comment_count>
      <attachid>254137</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 09:05:12 -0700</bug_when>
    <thetext>Comment on attachment 254137
Patch

Attachment 254137 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/6570532497522688

New failing tests:
webaudio/audioparam-setValueAtTime.html
webaudio/oscillator-square.html
webaudio/audioparam-linearRampToValueAtTime.html
webaudio/oscillator-custom.html
webaudio/audioparam-exponentialRampToValueAtTime.html
webaudio/audiobuffersource-playbackrate.html
webaudio/audioparam-setTargetAtTime.html
webaudio/audioparam-setValueCurveAtTime.html
webaudio/oscillator-sawtooth.html
webaudio/oscillator-triangle.html
webaudio/oscillator-sine.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099159</commentid>
    <comment_count>13</comment_count>
      <attachid>254179</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 09:05:14 -0700</bug_when>
    <thetext>Created attachment 254179
Archive of layout-test-results from ews101 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews101  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099206</commentid>
    <comment_count>14</comment_count>
      <attachid>254137</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 11:55:41 -0700</bug_when>
    <thetext>Comment on attachment 254137
Patch

Attachment 254137 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5967004766830592

New failing tests:
webaudio/audioparam-setValueAtTime.html
webaudio/oscillator-square.html
webaudio/audioparam-linearRampToValueAtTime.html
webaudio/oscillator-custom.html
webaudio/audioparam-exponentialRampToValueAtTime.html
webaudio/audiobuffersource-playbackrate.html
webaudio/audioparam-setTargetAtTime.html
webaudio/audioparam-setValueCurveAtTime.html
webaudio/oscillator-sine.html
webaudio/oscillator-triangle.html
webaudio/oscillator-sawtooth.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099207</commentid>
    <comment_count>15</comment_count>
      <attachid>254191</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 11:55:44 -0700</bug_when>
    <thetext>Created attachment 254191
Archive of layout-test-results from ews103 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews103  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099225</commentid>
    <comment_count>16</comment_count>
      <attachid>254137</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 12:45:13 -0700</bug_when>
    <thetext>Comment on attachment 254137
Patch

Attachment 254137 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/4948009817210880

New failing tests:
webaudio/audioparam-setValueAtTime.html
webaudio/oscillator-square.html
webaudio/audioparam-linearRampToValueAtTime.html
webaudio/oscillator-custom.html
webaudio/audioparam-exponentialRampToValueAtTime.html
webaudio/audiobuffersource-playbackrate.html
webaudio/audioparam-setTargetAtTime.html
webaudio/audioparam-setValueCurveAtTime.html
webaudio/oscillator-sawtooth.html
webaudio/oscillator-triangle.html
webaudio/oscillator-sine.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099226</commentid>
    <comment_count>17</comment_count>
      <attachid>254199</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-06-03 12:45:16 -0700</bug_when>
    <thetext>Created attachment 254199
Archive of layout-test-results from ews107 for mac-mavericks-wk2

The attached test failures were seen while running run-webkit-tests on the mac-wk2-ews.
Bot: ews107  Port: mac-mavericks-wk2  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099453</commentid>
    <comment_count>18</comment_count>
      <attachid>254258</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-04 00:42:37 -0700</bug_when>
    <thetext>Created attachment 254258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099454</commentid>
    <comment_count>19</comment_count>
      <attachid>254137</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-04 00:50:05 -0700</bug_when>
    <thetext>Comment on attachment 254137
Patch

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

&gt; Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp:95
&gt;      unsigned i = 0;
&gt;      float insertTime = event.time();
&gt; -    for (i = 0; i &lt; m_events.size(); ++i) {
&gt; +    for (auto&amp; paramEvent : m_events) {
&gt;          // Overwrite same event type and time.
&gt; -        if (m_events[i].time() == insertTime &amp;&amp; m_events[i].type() == event.type()) {
&gt; -            m_events[i] = event;
&gt; +        if (paramEvent.time() == insertTime &amp;&amp; paramEvent.type() == event.type()) {
&gt; +            paramEvent = event;
&gt;              return;
&gt;          }
&gt;  
&gt; -        if (m_events[i].time() &gt; insertTime)
&gt; +        if (paramEvent.time() &gt; insertTime)
&gt;              break;

I forgot to increase the value of &apos;i&apos;. It makes the test failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099457</commentid>
    <comment_count>20</comment_count>
      <attachid>254258</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-04 01:14:21 -0700</bug_when>
    <thetext>Comment on attachment 254258
Patch

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

&gt; Source/WebCore/Modules/webaudio/AudioParamTimeline.cpp:97
&gt;      unsigned i = 0;
&gt;      float insertTime = event.time();
&gt; -    for (i = 0; i &lt; m_events.size(); ++i) {
&gt; +    for (auto&amp; paramEvent : m_events) {
&gt;          // Overwrite same event type and time.
&gt; -        if (m_events[i].time() == insertTime &amp;&amp; m_events[i].type() == event.type()) {
&gt; -            m_events[i] = event;
&gt; +        if (paramEvent.time() == insertTime &amp;&amp; paramEvent.type() == event.type()) {
&gt; +            paramEvent = event;
&gt;              return;
&gt;          }
&gt;  
&gt; -        if (m_events[i].time() &gt; insertTime)
&gt; +        if (paramEvent.time() &gt; insertTime)
&gt;              break;
&gt; +
&gt; +        ++i;

I added the &apos;i&apos; and increased it in new patch. All tests passed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1099966</commentid>
    <comment_count>21</comment_count>
      <attachid>254258</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-05 14:42:20 -0700</bug_when>
    <thetext>Comment on attachment 254258
Patch

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

I have a few comments, but none are about the new for loops themselves.

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests, no behavior chnages.

typo

Also, “no behavior change” is not completely a justification for no test coverage; in this case we definitely will tolerate it.

&gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:326
&gt;      events.clear();

This line of code is not needed.

&gt; Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp:69
&gt; +            WaveShaperDSPKernel* kernel = static_cast&lt;WaveShaperDSPKernel*&gt;(audioDSPKernel.get());

I think we should use a reference and * rather than a pointer and get().

&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:723
&gt; +    for (auto&amp; fileName : listDirectory(originPath, String(&quot;*.db&quot;))) {

This should either just be &quot;*.db&quot; with no String() or ASCIILiteral(&quot;*.db&quot;).

&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1226
&gt; +                RefPtr&lt;SecurityOrigin&gt; origin = openDatabase.key;

Strange that this is a RefPtr; no need to ref it. Could just do:

    auto&amp; origin = openDatabase.key;

Or:

    auto&amp; origin = *openDatabase.key;

In the second case we’d have to make a few changes below.

&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1232
&gt; +                for (auto&amp; databaseName : *databaseNameMap) {

I am not sure that the entries in the database name maps are themselves database names.

&gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1356
&gt; +                DatabaseContext* context = database-&gt;databaseContext();
&gt;                  context-&gt;setPaused(paused);

No need for a local variable here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100291</commentid>
    <comment_count>22</comment_count>
      <attachid>254468</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-07 20:00:35 -0700</bug_when>
    <thetext>Created attachment 254468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100300</commentid>
    <comment_count>23</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-07 21:20:41 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Comment on attachment 254258 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=254258&amp;action=review
&gt; 
&gt; I have a few comments, but none are about the new for loops themselves.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        No new tests, no behavior chnages.
&gt; 
&gt; typo
Changed. 
&gt; 
&gt; Also, “no behavior change” is not completely a justification for no test
&gt; coverage; in this case we definitely will tolerate it.
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:326
&gt; &gt;      events.clear();
&gt; 
&gt; This line of code is not needed.
I removed it.
&gt; 
&gt; &gt; Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp:69
&gt; &gt; +            WaveShaperDSPKernel* kernel = static_cast&lt;WaveShaperDSPKernel*&gt;(audioDSPKernel.get());
&gt; 
&gt; I think we should use a reference and * rather than a pointer and get().
I changed it to &quot;WaveShaperDSPKernel&amp; kernel = static_cast&lt;WaveShaperDSPKernel&amp;&gt;(*audioDSPKernel);&quot;
&gt; 
&gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:723
&gt; &gt; +    for (auto&amp; fileName : listDirectory(originPath, String(&quot;*.db&quot;))) {
&gt; 
&gt; This should either just be &quot;*.db&quot; with no String() or ASCIILiteral(&quot;*.db&quot;).
Used ASCIILiteral(&quot;*.db&quot;).
&gt; 
&gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1226
&gt; &gt; +                RefPtr&lt;SecurityOrigin&gt; origin = openDatabase.key;
&gt; 
&gt; Strange that this is a RefPtr; no need to ref it. Could just do:
&gt; 
&gt;     auto&amp; origin = openDatabase.key;
&gt; 
&gt; Or:
&gt; 
&gt;     auto&amp; origin = *openDatabase.key;
&gt; 
&gt; In the second case we’d have to make a few changes below.
&gt; 
Used the first case.
&gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1232
&gt; &gt; +                for (auto&amp; databaseName : *databaseNameMap) {
&gt; 
&gt; I am not sure that the entries in the database name maps are themselves
&gt; database names.
&gt; 
typedef HashMap&lt;String, DatabaseSet*&gt; DatabaseNameMap;

DatabaseNameMap consists of the &apos;String&apos; and the &apos;DatabaseSet&apos;.
Maybe &apos;String&apos; is the name of databases and &apos;DatabaseSet&apos; is set of the databases. I changed the &apos;databaseName&apos; to &apos;databases&apos;.
It looks like a good name rather than &apos;databasName&apos;.
How about your idea?

&gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1356
&gt; &gt; +                DatabaseContext* context = database-&gt;databaseContext();
&gt; &gt;                  context-&gt;setPaused(paused);
&gt; 
&gt; No need for a local variable here.
I removed the local variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100302</commentid>
    <comment_count>24</comment_count>
      <attachid>254471</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-07 21:23:07 -0700</bug_when>
    <thetext>Created attachment 254471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100303</commentid>
    <comment_count>25</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-07 21:27:16 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #21)
&gt; &gt; Comment on attachment 254258 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=254258&amp;action=review
&gt; &gt; 
&gt; &gt; I have a few comments, but none are about the new for loops themselves.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; &gt; +        No new tests, no behavior chnages.
&gt; &gt; 
&gt; &gt; typo
&gt; Changed. 
&gt; &gt; 
&gt; &gt; Also, “no behavior change” is not completely a justification for no test
&gt; &gt; coverage; in this case we definitely will tolerate it.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:326
&gt; &gt; &gt;      events.clear();
&gt; &gt; 
&gt; &gt; This line of code is not needed.
&gt; I removed it.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp:69
&gt; &gt; &gt; +            WaveShaperDSPKernel* kernel = static_cast&lt;WaveShaperDSPKernel*&gt;(audioDSPKernel.get());
&gt; &gt; 
&gt; &gt; I think we should use a reference and * rather than a pointer and get().
&gt; I changed it to &quot;WaveShaperDSPKernel&amp; kernel =
&gt; static_cast&lt;WaveShaperDSPKernel&amp;&gt;(*audioDSPKernel);&quot;
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:723
&gt; &gt; &gt; +    for (auto&amp; fileName : listDirectory(originPath, String(&quot;*.db&quot;))) {
&gt; &gt; 
&gt; &gt; This should either just be &quot;*.db&quot; with no String() or ASCIILiteral(&quot;*.db&quot;).
&gt; Used ASCIILiteral(&quot;*.db&quot;).
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1226
&gt; &gt; &gt; +                RefPtr&lt;SecurityOrigin&gt; origin = openDatabase.key;
&gt; &gt; 
&gt; &gt; Strange that this is a RefPtr; no need to ref it. Could just do:
&gt; &gt; 
&gt; &gt;     auto&amp; origin = openDatabase.key;
&gt; &gt; 
&gt; &gt; Or:
&gt; &gt; 
&gt; &gt;     auto&amp; origin = *openDatabase.key;
&gt; &gt; 
&gt; &gt; In the second case we’d have to make a few changes below.
&gt; &gt; 
&gt; Used the first case.
&gt; &gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1232
&gt; &gt; &gt; +                for (auto&amp; databaseName : *databaseNameMap) {
&gt; &gt; 
&gt; &gt; I am not sure that the entries in the database name maps are themselves
&gt; &gt; database names.
&gt; &gt; 
&gt; typedef HashMap&lt;String, DatabaseSet*&gt; DatabaseNameMap;
&gt; 
&gt; DatabaseNameMap consists of the &apos;String&apos; and the &apos;DatabaseSet&apos;.
&gt; Maybe &apos;String&apos; is the name of databases and &apos;DatabaseSet&apos; is set of the
&gt; databases. I changed the &apos;databaseName&apos; to &apos;databases&apos;.
&gt; It looks like a good name rather than &apos;databasName&apos;.
&gt; How about your idea?
Oops,, I misunderstood your comment,, I will change it correctly!!
&gt; 
&gt; &gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1356
&gt; &gt; &gt; +                DatabaseContext* context = database-&gt;databaseContext();
&gt; &gt; &gt;                  context-&gt;setPaused(paused);
&gt; &gt; 
&gt; &gt; No need for a local variable here.
&gt; I removed the local variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100305</commentid>
    <comment_count>26</comment_count>
      <attachid>254473</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-07 21:56:33 -0700</bug_when>
    <thetext>Created attachment 254473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100313</commentid>
    <comment_count>27</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-06-08 00:03:17 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #23)
&gt; &gt; (In reply to comment #21)
&gt; &gt; &gt; Comment on attachment 254258 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=254258&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; I have a few comments, but none are about the new for loops themselves.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; &gt; &gt; +        No new tests, no behavior chnages.
&gt; &gt; &gt; 
&gt; &gt; &gt; typo
&gt; &gt; Changed. 
&gt; &gt; &gt; 
&gt; &gt; &gt; Also, “no behavior change” is not completely a justification for no test
&gt; &gt; &gt; coverage; in this case we definitely will tolerate it.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/Modules/mediastream/RTCDataChannel.cpp:326
&gt; &gt; &gt; &gt;      events.clear();
&gt; &gt; &gt; 
&gt; &gt; &gt; This line of code is not needed.
&gt; &gt; I removed it.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/Modules/webaudio/WaveShaperProcessor.cpp:69
&gt; &gt; &gt; &gt; +            WaveShaperDSPKernel* kernel = static_cast&lt;WaveShaperDSPKernel*&gt;(audioDSPKernel.get());
&gt; &gt; &gt; 
&gt; &gt; &gt; I think we should use a reference and * rather than a pointer and get().
&gt; &gt; I changed it to &quot;WaveShaperDSPKernel&amp; kernel =
&gt; &gt; static_cast&lt;WaveShaperDSPKernel&amp;&gt;(*audioDSPKernel);&quot;
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:723
&gt; &gt; &gt; &gt; +    for (auto&amp; fileName : listDirectory(originPath, String(&quot;*.db&quot;))) {
&gt; &gt; &gt; 
&gt; &gt; &gt; This should either just be &quot;*.db&quot; with no String() or ASCIILiteral(&quot;*.db&quot;).
&gt; &gt; Used ASCIILiteral(&quot;*.db&quot;).
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1226
&gt; &gt; &gt; &gt; +                RefPtr&lt;SecurityOrigin&gt; origin = openDatabase.key;
&gt; &gt; &gt; 
&gt; &gt; &gt; Strange that this is a RefPtr; no need to ref it. Could just do:
&gt; &gt; &gt; 
&gt; &gt; &gt;     auto&amp; origin = openDatabase.key;
&gt; &gt; &gt; 
&gt; &gt; &gt; Or:
&gt; &gt; &gt; 
&gt; &gt; &gt;     auto&amp; origin = *openDatabase.key;
&gt; &gt; &gt; 
&gt; &gt; &gt; In the second case we’d have to make a few changes below.
&gt; &gt; &gt; 
&gt; &gt; Used the first case.
&gt; &gt; &gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1232
&gt; &gt; &gt; &gt; +                for (auto&amp; databaseName : *databaseNameMap) {
&gt; &gt; &gt; 
&gt; &gt; &gt; I am not sure that the entries in the database name maps are themselves
&gt; &gt; &gt; database names.
&gt; &gt; &gt; 
&gt; &gt; typedef HashMap&lt;String, DatabaseSet*&gt; DatabaseNameMap;
&gt; &gt; 
&gt; &gt; DatabaseNameMap consists of the &apos;String&apos; and the &apos;DatabaseSet&apos;.
&gt; &gt; Maybe &apos;String&apos; is the name of databases and &apos;DatabaseSet&apos; is set of the
&gt; &gt; databases. I changed the &apos;databaseName&apos; to &apos;databases&apos;.
&gt; &gt; It looks like a good name rather than &apos;databasName&apos;.
&gt; &gt; How about your idea?
&gt; Oops,, I misunderstood your comment,, I will change it correctly!!
Done!! Could you check again?
&gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp:1356
&gt; &gt; &gt; &gt; +                DatabaseContext* context = database-&gt;databaseContext();
&gt; &gt; &gt; &gt;                  context-&gt;setPaused(paused);
&gt; &gt; &gt; 
&gt; &gt; &gt; No need for a local variable here.
&gt; &gt; I removed the local variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100358</commentid>
    <comment_count>28</comment_count>
      <attachid>254473</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-08 07:37:17 -0700</bug_when>
    <thetext>Comment on attachment 254473
Patch

Clearing flags on attachment: 254473

Committed r185316: &lt;http://trac.webkit.org/changeset/185316&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100359</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-08 07:37:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254137</attachid>
            <date>2015-06-02 20:48:50 -0700</date>
            <delta_ts>2015-06-04 00:42:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145541-20150603124830.patch</filename>
            <type>text/plain</type>
            <size>50900</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MDQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmQyOThiZjA3NDEzN2Fh
ZmJlNTMwYjIzNWY1MTQ4ODU5MDdlNWJiZS4uNjJkYmUyYjhjNzE5N2FhODA0MmJkMDUzZjI3M2Ji
MzAwODM5NWYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE1LTA2LTAyICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL01vZHVsZXMgLSAyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNobmFn
ZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJUQ0NvbmZpZ3VyYXRpb246OmljZVNlcnZlcnMpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSVENEVE1GU2VuZGVyOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UlRDRGF0YUNoYW5uZWw6OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpwcm9jZXNzSWNlU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0
aW9uOjp+UlRDUGVlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5l
Y3Rpb246OmdldFN0cmVhbUJ5SWQpOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rp
b246Omhhc0xvY2FsU3RyZWFtV2l0aFRyYWNrSWQpOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVl
ckNvbm5lY3Rpb246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246
OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENTdGF0c1JlcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c1JlcG9ydDo6
bmFtZXMpOgorICAgICAgICAqIE1vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRv
ckNvbnRlbnRVdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0UHJvdG9jb2xIYW5kbGVy
V2hpdGVsaXN0KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9CdWZmZXI6Om1lbW9yeUNvc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVk
aWFTdHJlYW1Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJlZkZp
bmlzaGVkU291cmNlTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJl
ZlVuZmluaXNoZWRTb3VyY2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6
OmhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29u
dGV4dDo6aGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Db250ZXh0Ojp1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb05vZGU6OnVwZGF0ZUNoYW5uZWxzRm9ySW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Ob2RlOjpwdWxsSW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9k
ZTo6aW5wdXRzQXJlU2lsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6c2lsZW5j
ZU91dHB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjp1bnNpbGVuY2VPdXRwdXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZW5hYmxlT3V0cHV0c0lmTmVjZXNzYXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZGlzYWJsZU91dHB1dHNJZk5lY2Vzc2Fy
eSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OmZpbmlzaERlcmVmKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvTm9kZUlucHV0OjpudW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvTm9kZUlucHV0OjpzdW1BbGxDb25uZWN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGVPdXRwdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0
cHV0Ojpwcm9wYWdhdGVDaGFubmVsQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2Rl
T3V0cHV0OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6ZW5h
YmxlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1ZXMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6aW5zZXJ0RXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TdW1taW5nSnVuY3Rpb246OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6c2V0QXVkaW9Gb3JtYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6Y29uc3VtZUF1ZGlvKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2F2ZVNoYXBlclByb2Nlc3Nvcjo6c2V0T3ZlcnNhbXBsZSk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRocmVhZDo6aGFuZGxlUGF1c2VkUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6
OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnVzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlc1BhdXNlZCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tl
dDo6Y29ubmVjdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0RXh0ZW5zaW9u
RGlzcGF0Y2hlcjo6YWRkUHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4
dGVuc2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OnByb2Nlc3NIZWFkZXJWYWx1ZSk6
CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3Nh
Z2UpOgorCiAyMDE1LTA1LTMxICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUga1pvb21UaWNrcy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDQ29uZmln
dXJhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENDb25maWd1
cmF0aW9uLmgKaW5kZXggNGZmYTk2ZTAyZTMyODFkY2MyNjgxNGMzODI2ZWFkNWI1MGUzODZlNC4u
NjM3ZDRkOWNiYmFiYjhkMGVkYzM4OGQwZGQwNDkzM2ViNWY2ODE3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENDb25maWd1cmF0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENDb25maWd1cmF0aW9uLmgKQEAg
LTY3LDEwICs2Nyw4IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8UmVmUHRyPFJUQ0ljZVNlcnZlcj4+
IGljZVNlcnZlcnMoKSBjb25zdAogICAgIHsKICAgICAgICAgVmVjdG9yPFJlZlB0cjxSVENJY2VT
ZXJ2ZXI+PiBzZXJ2ZXJzOwotICAgICAgICBWZWN0b3I8UmVmUHRyPFJUQ0ljZVNlcnZlclByaXZh
dGU+PiBwcml2YXRlU2VydmVycyA9IG1fcHJpdmF0ZS0+aWNlU2VydmVycygpOwotCi0gICAgICAg
IGZvciAoYXV0byBpdGVyID0gcHJpdmF0ZVNlcnZlcnMuYmVnaW4oKTsgaXRlciAhPSBwcml2YXRl
U2VydmVycy5lbmQoKTsgKytpdGVyKQotICAgICAgICAgICAgc2VydmVycy5hcHBlbmQoUlRDSWNl
U2VydmVyOjpjcmVhdGUoKml0ZXIpKTsKKyAgICAgICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX3By
aXZhdGUtPmljZVNlcnZlcnMoKSkKKyAgICAgICAgICAgIHNlcnZlcnMuYXBwZW5kKFJUQ0ljZVNl
cnZlcjo6Y3JlYXRlKHNlcnZlcikpOwogCiAgICAgICAgIHJldHVybiBzZXJ2ZXJzOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNl
bmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5k
ZXIuY3BwCmluZGV4IGI3OTJjMmZkMWM4ZTYxNTAzZDMzMDMwNGJlNDNjNmRjNDcwYzlkNGUuLjY4
NDkxYmZiODM5NzliMDc5NWM3YjU1Y2QxZWUyOTAyNzQxNjU2YzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcApAQCAtMTYx
LDkgKzE2MSw4IEBAIHZvaWQgUlRDRFRNRlNlbmRlcjo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVk
KCkKICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gZXZlbnRzOwogICAgIGV2ZW50cy5zd2FwKG1f
c2NoZWR1bGVkRXZlbnRzKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+Pjo6aXRlcmF0b3Ig
aXQgPSBldmVudHMuYmVnaW4oKTsKLSAgICBmb3IgKDsgaXQgIT0gZXZlbnRzLmVuZCgpOyArK2l0
KQotICAgICAgICBkaXNwYXRjaEV2ZW50KCgqaXQpLnJlbGVhc2UoKSk7CisgICAgZm9yIChhdXRv
JiBldmVudCA6IGV2ZW50cykKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RhdGFDaGFubmVsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCmluZGV4IDkwZDA2Yzc5Yjk3
NGU4MzgyZTA1ZDczZjJiYjhkZDRhZGJlYjFmNWIuLjRhNWFhODc1NDAzOTNmZGFjMzJkMGVhNzM1
NjA2YmJjYzZmZTg2ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwCkBAIC0zMjAsOSArMzIwLDggQEAgdm9pZCBSVENE
YXRhQ2hhbm5lbDo6c2NoZWR1bGVkRXZlbnRUaW1lckZpcmVkKCkKICAgICBWZWN0b3I8UmVmUHRy
PEV2ZW50Pj4gZXZlbnRzOwogICAgIGV2ZW50cy5zd2FwKG1fc2NoZWR1bGVkRXZlbnRzKTsKIAot
ICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+Pjo6aXRlcmF0b3IgaXQgPSBldmVudHMuYmVnaW4oKTsK
LSAgICBmb3IgKDsgaXQgIT0gZXZlbnRzLmVuZCgpOyArK2l0KQotICAgICAgICBkaXNwYXRjaEV2
ZW50KCgqaXQpLnJlbGVhc2UoKSk7CisgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykKKyAg
ICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxlYXNlKCkpOwogCiAgICAgZXZlbnRzLmNsZWFy
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
UlRDUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDAxZGFlZTcwMTRiMTQ2ZjhkYzc2ODk2MjBkMGFi
ZTA4ZGFkM2U2NWIuLmMzNzFhNTkxY2NiZWNlMTNhZTE5MmI2NzUyYmViNjg1MTY1MmQ3YTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwCkBAIC05NSw4ICs5NSw4IEBAIHN0YXRpYyBFeGNlcHRpb25Db2RlIHBy
b2Nlc3NJY2VTZXJ2ZXIoY29uc3QgRGljdGlvbmFyeSYgaWNlU2VydmVyLCBSVENDb25maWd1cmF0
CiAgICAgICAgIHJldHVybiBJTlZBTElEX0FDQ0VTU19FUlI7CiAKICAgICBpZiAodXJsU3RyaW5n
LmZpbmQoJywnKSAhPSBub3RGb3VuZCAmJiBpY2VTZXJ2ZXIuZ2V0KCJ1cmxzIiwgdXJsc0xpc3Qp
ICYmIHVybHNMaXN0LnNpemUoKSkgewotICAgICAgICBmb3IgKGF1dG8gaXRlciA9IHVybHNMaXN0
LmJlZ2luKCk7IGl0ZXIgIT0gdXJsc0xpc3QuZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAg
aWYgKCF2YWxpZGF0ZUljZVNlcnZlclVSTCgqaXRlcikpCisgICAgICAgIGZvciAoYXV0byYgdXJs
IDogdXJsc0xpc3QpIHsKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGVJY2VTZXJ2ZXJVUkwodXJs
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRF9BQ0NFU1NfRVJSOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKQEAgLTIwMyw4ICsyMDMsOCBAQCBSVENQZWVyQ29ubmVjdGlvbjo6flJU
Q1BlZXJDb25uZWN0aW9uKCkKIHsKICAgICBzdG9wKCk7CiAKLSAgICBmb3IgKGF1dG8gc3RyZWFt
ID0gbV9sb2NhbFN0cmVhbXMuYmVnaW4oKSwgZW5kID0gbV9sb2NhbFN0cmVhbXMuZW5kKCk7IHN0
cmVhbSAhPSBlbmQ7ICsrc3RyZWFtKQotICAgICAgICAoKnN0cmVhbSktPnJlbW92ZU9ic2VydmVy
KHRoaXMpOworICAgIGZvciAoYXV0byYgbG9jYWxTdHJlYW0gOiBtX2xvY2FsU3RyZWFtcykKKyAg
ICAgICAgbG9jYWxTdHJlYW0tPnJlbW92ZU9ic2VydmVyKHRoaXMpOwogfQogCiB2b2lkIFJUQ1Bl
ZXJDb25uZWN0aW9uOjpjcmVhdGVPZmZlcihQYXNzUmVmUHRyPFJUQ1Nlc3Npb25EZXNjcmlwdGlv
bkNhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8UlRDUGVlckNvbm5lY3Rpb25F
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBjb25zdCBEaWN0aW9uYXJ5JiBvZmZlck9wdGlv
bnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtNTE0LDE0ICs1MTQsMTQgQEAgVmVjdG9yPFJlZlB0
cjxNZWRpYVN0cmVhbT4+IFJUQ1BlZXJDb25uZWN0aW9uOjpnZXRSZW1vdGVTdHJlYW1zKCkgY29u
c3QKIAogTWVkaWFTdHJlYW0qIFJUQ1BlZXJDb25uZWN0aW9uOjpnZXRTdHJlYW1CeUlkKGNvbnN0
IFN0cmluZyYgc3RyZWFtSWQpCiB7Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX2xvY2FsU3RyZWFt
cy5iZWdpbigpOyBpdGVyICE9IG1fbG9jYWxTdHJlYW1zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAg
ICAgaWYgKCgqaXRlciktPmlkKCkgPT0gc3RyZWFtSWQpCi0gICAgICAgICAgICByZXR1cm4gaXRl
ci0+Z2V0KCk7CisgICAgZm9yIChhdXRvJiBsb2NhbFN0cmVhbSA6IG1fbG9jYWxTdHJlYW1zKSB7
CisgICAgICAgIGlmIChsb2NhbFN0cmVhbS0+aWQoKSA9PSBzdHJlYW1JZCkKKyAgICAgICAgICAg
IHJldHVybiBsb2NhbFN0cmVhbS5nZXQoKTsKICAgICB9CiAKLSAgICBmb3IgKGF1dG8gaXRlciA9
IG1fcmVtb3RlU3RyZWFtcy5iZWdpbigpOyBpdGVyICE9IG1fcmVtb3RlU3RyZWFtcy5lbmQoKTsg
KytpdGVyKSB7Ci0gICAgICAgIGlmICgoKml0ZXIpLT5pZCgpID09IHN0cmVhbUlkKQotICAgICAg
ICAgICAgcmV0dXJuIGl0ZXItPmdldCgpOworICAgIGZvciAoYXV0byYgcmVtb3RlU3RyZWFtIDog
bV9yZW1vdGVTdHJlYW1zKSB7CisgICAgICAgIGlmIChyZW1vdGVTdHJlYW0tPmlkKCkgPT0gc3Ry
ZWFtSWQpCisgICAgICAgICAgICByZXR1cm4gcmVtb3RlU3RyZWFtLmdldCgpOwogICAgIH0KIAog
ICAgIHJldHVybiBudWxscHRyOwpAQCAtNTUxLDggKzU1MSw4IEBAIFBhc3NSZWZQdHI8UlRDRGF0
YUNoYW5uZWw+IFJUQ1BlZXJDb25uZWN0aW9uOjpjcmVhdGVEYXRhQ2hhbm5lbChTdHJpbmcgbGFi
ZWwsIGNvCiAKIGJvb2wgUlRDUGVlckNvbm5lY3Rpb246Omhhc0xvY2FsU3RyZWFtV2l0aFRyYWNr
SWQoY29uc3QgU3RyaW5nJiB0cmFja0lkKQogewotICAgIGZvciAoYXV0byBpdGVyID0gbV9sb2Nh
bFN0cmVhbXMuYmVnaW4oKTsgaXRlciAhPSBtX2xvY2FsU3RyZWFtcy5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgIGlmICgoKml0ZXIpLT5nZXRUcmFja0J5SWQodHJhY2tJZCkpCisgICAgZm9yIChh
dXRvJiBsb2NhbFN0cmVhbSA6IG1fbG9jYWxTdHJlYW1zKSB7CisgICAgICAgIGlmIChsb2NhbFN0
cmVhbS0+Z2V0VHJhY2tCeUlkKHRyYWNrSWQpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTY4NSw5ICs2ODUsOCBAQCB2b2lkIFJUQ1BlZXJD
b25uZWN0aW9uOjpzdG9wKCkKICAgICBtX2ljZUNvbm5lY3Rpb25TdGF0ZSA9IEljZUNvbm5lY3Rp
b25TdGF0ZUNsb3NlZDsKICAgICBtX3NpZ25hbGluZ1N0YXRlID0gU2lnbmFsaW5nU3RhdGVDbG9z
ZWQ7CiAKLSAgICBWZWN0b3I8UmVmUHRyPFJUQ0RhdGFDaGFubmVsPj46Oml0ZXJhdG9yIGkgPSBt
X2RhdGFDaGFubmVscy5iZWdpbigpOwotICAgIGZvciAoOyBpICE9IG1fZGF0YUNoYW5uZWxzLmVu
ZCgpOyArK2kpCi0gICAgICAgICgqaSktPnN0b3AoKTsKKyAgICBmb3IgKGF1dG8mIGNoYW5uZWwg
OiBtX2RhdGFDaGFubmVscykKKyAgICAgICAgY2hhbm5lbC0+c3RvcCgpOwogfQogCiBjb25zdCBj
aGFyKiBSVENQZWVyQ29ubmVjdGlvbjo6YWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0CkBAIC03
NDMsOSArNzQyLDggQEAgdm9pZCBSVENQZWVyQ29ubmVjdGlvbjo6c2NoZWR1bGVkRXZlbnRUaW1l
ckZpcmVkKCkKICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gZXZlbnRzOwogICAgIGV2ZW50cy5z
d2FwKG1fc2NoZWR1bGVkRXZlbnRzKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+Pjo6aXRl
cmF0b3IgaXQgPSBldmVudHMuYmVnaW4oKTsKLSAgICBmb3IgKDsgaXQgIT0gZXZlbnRzLmVuZCgp
OyArK2l0KQotICAgICAgICBkaXNwYXRjaEV2ZW50KCgqaXQpLnJlbGVhc2UoKSk7CisgICAgZm9y
IChhdXRvJiBldmVudCA6IGV2ZW50cykKKyAgICAgICAgZGlzcGF0Y2hFdmVudChldmVudC5yZWxl
YXNlKCkpOwogCiAgICAgZXZlbnRzLmNsZWFyKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1N0YXRzUmVwb3J0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuY3BwCmluZGV4IDk4OWE3NmZm
YzA4NjcxM2ExZjYwNmZhYzVkZDRkMTZjYTM5MzliMzUuLmEwMzU2MzQ1MGU0YTU1YTY3NGI0NThk
MzRiMTMzYWI3NTJmNDU2MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuY3BwCkBAIC00OCw5ICs0OCw4IEBAIFJUQ1N0YXRz
UmVwb3J0OjpSVENTdGF0c1JlcG9ydChjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIHR5
cGUsIGRvdWJsZSB0aW1lCiBWZWN0b3I8U3RyaW5nPiBSVENTdGF0c1JlcG9ydDo6bmFtZXMoKSBj
b25zdAogewogICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLSAgICBmb3IgKEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdHMuYmVnaW4oKTsgaXQgIT0g
bV9zdGF0cy5lbmQoKTsgKytpdCkgewotICAgICAgICByZXN1bHQuYXBwZW5kKGl0LT5rZXkpOwot
ICAgIH0KKyAgICBmb3IgKGF1dG8mIHN0YXQgOiBtX3N0YXRzLmtleXMoKSkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChzdGF0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250
ZW50VXRpbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9uYXZpZ2F0b3Jjb250ZW50dXRp
bHMvTmF2aWdhdG9yQ29udGVudFV0aWxzLmNwcAppbmRleCBjY2E3ZDllMzE5NGM4MDVkYjkyMDhm
ZWU1YzcwZjVmMjIxYjVkMjljLi41Njg2NzE1MjlhYjUwODA0YTk3OWNhNjM0M2NkZWIyYWEyYTMy
MDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1
dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAKQEAgLTQ0
LDI5ICs0NCw4IEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4qIHByb3RvY29sV2hpdGVsaXN0Owog
c3RhdGljIHZvaWQgaW5pdFByb3RvY29sSGFuZGxlcldoaXRlbGlzdCgpCiB7CiAgICAgcHJvdG9j
b2xXaGl0ZWxpc3QgPSBuZXcgSGFzaFNldDxTdHJpbmc+OwotICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBwcm90b2NvbHNbXSA9IHsKLSAgICAgICAgImJpdGNvaW4iLAotICAgICAgICAiZ2VvIiwKLSAg
ICAgICAgImltIiwKLSAgICAgICAgImlyYyIsCi0gICAgICAgICJpcmNzIiwKLSAgICAgICAgIm1h
Z25ldCIsCi0gICAgICAgICJtYWlsdG8iLAotICAgICAgICAibW1zIiwKLSAgICAgICAgIm5ld3Mi
LAotICAgICAgICAibm50cCIsCi0gICAgICAgICJzaXAiLAotICAgICAgICAic21zIiwKLSAgICAg
ICAgInNtc3RvIiwKLSAgICAgICAgInNzaCIsCi0gICAgICAgICJ0ZWwiLAotICAgICAgICAidXJu
IiwKLSAgICAgICAgIndlYmNhbCIsCi0gICAgICAgICJ3dGFpIiwKLSAgICAgICAgInhtcHAiLAot
ICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHByb3Rv
Y29scyk7ICsraSkKLSAgICAgICAgcHJvdG9jb2xXaGl0ZWxpc3QtPmFkZChwcm90b2NvbHNbaV0p
OworICAgIGZvciAoYXV0byogcHJvdG9jb2wgOiB7ICJiaXRjb2luIiwgImdlbyIsICJpbSIsICJp
cmMiLCAiaXJjcyIsICJtYWduZXQiLCAibWFpbHRvIiwgIm1tcyIsICJuZXdzIiwgIm5udHAiLCAi
c2lwIiwgInNtcyIsICJzbXN0byIsICJzc2giLCAidGVsIiwgInVybiIsICJ3ZWJjYWwiLCAid3Rh
aSIsICJ4bXBwIiB9KQorICAgICAgICBwcm90b2NvbFdoaXRlbGlzdC0+YWRkKHByb3RvY29sKTsK
IH0KIAogc3RhdGljIGJvb2wgdmVyaWZ5Q3VzdG9tSGFuZGxlclVSTChjb25zdCBVUkwmIGJhc2VV
UkwsIGNvbnN0IFN0cmluZyYgdXJsLCBFeGNlcHRpb25Db2RlJiBlYykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwCmluZGV4IDc4NTAzNDBh
MTBhN2UzOTQ3NzQ5YzIwMDQwZTY4MGM1YTFiMzRkZTkuLjk3MTQ5ZjRlMjA2NjYxMDlmZmVjMTIy
ZjRlYjE1MjdlNzFiNzFlOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3Bl
ZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVl
Y2gvU3BlZWNoU3ludGhlc2lzLmNwcApAQCAtNzQsMTAgKzc0LDggQEAgY29uc3QgVmVjdG9yPFJl
ZlB0cjxTcGVlY2hTeW50aGVzaXNWb2ljZT4+JiBTcGVlY2hTeW50aGVzaXM6OmdldFZvaWNlcygp
CiAgICAgICAgIG1fcGxhdGZvcm1TcGVlY2hTeW50aGVzaXplciA9IHN0ZDo6bWFrZV91bmlxdWU8
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplcj4odGhpcyk7CiAKICAgICAvLyBJZiB0aGUgdm9pY2VM
aXN0IGlzIGVtcHR5LCB0aGF0J3MgdGhlIGN1ZSB0byBnZXQgdGhlIHZvaWNlcyBmcm9tIHRoZSBw
bGF0Zm9ybSBhZ2Fpbi4KLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtU3BlZWNoU3lu
dGhlc2lzVm9pY2U+PiYgcGxhdGZvcm1Wb2ljZXMgPSBtX3BsYXRmb3JtU3BlZWNoU3ludGhlc2l6
ZXItPnZvaWNlTGlzdCgpOwotICAgIHNpemVfdCB2b2ljZUNvdW50ID0gcGxhdGZvcm1Wb2ljZXMu
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgdm9pY2VDb3VudDsgaysrKQotICAg
ICAgICBtX3ZvaWNlTGlzdC5hcHBlbmQoU3BlZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZShwbGF0
Zm9ybVZvaWNlc1trXSkpOworICAgIGZvciAoYXV0byYgdm9pY2UgOiBtX3BsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXItPnZvaWNlTGlzdCgpKQorICAgICAgICBtX3ZvaWNlTGlzdC5hcHBlbmQoU3Bl
ZWNoU3ludGhlc2lzVm9pY2U6OmNyZWF0ZSh2b2ljZSkpOwogCiAgICAgcmV0dXJuIG1fdm9pY2VM
aXN0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0J1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVy
LmNwcAppbmRleCAzMWRhOTRjMjdhNDQxM2MyMGM2Nzg2ZWZjMGZiNzhiNWQzZmI0NWEyLi44Y2I4
YTcxZDk4OGNhNmRiMGU0ZWNiNGUxYzllOWU0NmU2MDdiNzAxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcApAQCAtMTI1LDggKzEyNSw4IEBA
IHZvaWQgQXVkaW9CdWZmZXI6Onplcm8oKQogc2l6ZV90IEF1ZGlvQnVmZmVyOjptZW1vcnlDb3N0
KCkgY29uc3QKIHsKICAgICBzaXplX3QgY29zdCA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fY2hhbm5lbHMuc2l6ZSgpIDsgKytpKQotICAgICAgICBjb3N0ICs9IG1fY2hhbm5l
bHNbaV0tPmJ5dGVMZW5ndGgoKTsKKyAgICBmb3IgKGF1dG8mIGNoYW5uZWwgOiBtX2NoYW5uZWxz
KQorICAgICAgICBjb3N0ICs9IGNoYW5uZWwtPmJ5dGVMZW5ndGgoKTsKICAgICByZXR1cm4gY29z
dDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRl
eHQuY3BwCmluZGV4IDkwYWM0OTBhMjdmMjg1MjU2MjEwYTRhOGUzZDEyOTg2ODdlMDhlNzIuLmI3
MTExZDAzY2JmYTJjZTQ1NWI2YTRiY2VjZGRmYTc0YzdhYTcyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKQEAgLTQ2MCwxMiArNDYw
LDExIEBAIFBhc3NSZWZQdHI8TWVkaWFTdHJlYW1BdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlTWVkaWFTdHJlYW1Tb3VyY2UoTWVkCiAKICAgICBBdWRpb1NvdXJjZVByb3ZpZGVy
KiBwcm92aWRlciA9IDA7CiAKLSAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+PiBh
dWRpb1RyYWNrcyA9IG1lZGlhU3RyZWFtLT5nZXRBdWRpb1RyYWNrcygpOwogICAgIFJlZlB0cjxN
ZWRpYVN0cmVhbVRyYWNrPiBhdWRpb1RyYWNrOwogCiAgICAgLy8gRklYTUU6IGdldCBhIHByb3Zp
ZGVyIGZvciBub24tbG9jYWwgTWVkaWFTdHJlYW1zIChsaWtlIGZyb20gYSByZW1vdGUgcGVlciku
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhdWRpb1RyYWNrcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBhdWRpb1RyYWNrID0gYXVkaW9UcmFja3NbaV07CisgICAgZm9yIChhdXRvJiB0cmFj
ayA6IG1lZGlhU3RyZWFtLT5nZXRBdWRpb1RyYWNrcygpKSB7CisgICAgICAgIGF1ZGlvVHJhY2sg
PSB0cmFjazsKICAgICAgICAgaWYgKGF1ZGlvVHJhY2stPnNvdXJjZSgpLT5pc0F1ZGlvU3RyZWFt
U291cmNlKCkpIHsKICAgICAgICAgICAgIGF1dG8gc291cmNlID0gc3RhdGljX2Nhc3Q8TWVkaWFT
dHJlYW1BdWRpb1NvdXJjZSo+KGF1ZGlvVHJhY2stPnNvdXJjZSgpKTsKICAgICAgICAgICAgIEFT
U0VSVCghc291cmNlLT5kZXZpY2VJZCgpLmlzRW1wdHkoKSk7CkBAIC02NjQsOCArNjYzLDggQEAg
dm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVmRmluaXNoZWRTb3VyY2VOb2RlcygpCiB7CiAgICAgQVNT
RVJUKGlzR3JhcGhPd25lcigpKTsKICAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgpIHx8IGlzQXVk
aW9UaHJlYWRGaW5pc2hlZCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9maW5p
c2hlZE5vZGVzLnNpemUoKTsgaSsrKQotICAgICAgICBkZXJlZk5vZGUobV9maW5pc2hlZE5vZGVz
W2ldKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX2ZpbmlzaGVkTm9kZXMpCisgICAgICAgIGRl
cmVmTm9kZShub2RlKTsKIAogICAgIG1fZmluaXNoZWROb2Rlcy5jbGVhcigpOwogfQpAQCAtNjky
LDggKzY5MSw4IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpkZXJlZk5vZGUoQXVkaW9Ob2RlKiBub2Rl
KQogdm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVmVW5maW5pc2hlZFNvdXJjZU5vZGVzKCkKIHsKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkgJiYgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpOwotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3JlZmVyZW5jZWROb2Rlcy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV9yZWZlcmVuY2VkTm9kZXNbaV0tPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNv
bm5lY3Rpb24pOworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fcmVmZXJlbmNlZE5vZGVzKQorICAg
ICAgICBub2RlLT5kZXJlZihBdWRpb05vZGU6OlJlZlR5cGVDb25uZWN0aW9uKTsKIAogICAgIG1f
cmVmZXJlbmNlZE5vZGVzLmNsZWFyKCk7CiB9CkBAIC04MjUsMTAgKzgyNCw4IEBAIHZvaWQgQXVk
aW9Db250ZXh0OjpoYW5kbGVQb3N0UmVuZGVyVGFza3MoKQogdm9pZCBBdWRpb0NvbnRleHQ6Omhh
bmRsZURlZmVycmVkRmluaXNoRGVyZWZzKCkKIHsKICAgICBBU1NFUlQoaXNBdWRpb1RocmVhZCgp
ICYmIGlzR3JhcGhPd25lcigpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kZWZl
cnJlZEZpbmlzaERlcmVmTGlzdC5zaXplKCk7ICsraSkgewotICAgICAgICBBdWRpb05vZGUqIG5v
ZGUgPSBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0W2ldOworICAgIGZvciAoYXV0byYgbm9kZSA6
IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3QpCiAgICAgICAgIG5vZGUtPmZpbmlzaERlcmVmKEF1
ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwotICAgIH0KICAgICAKICAgICBtX2RlZmVycmVk
RmluaXNoRGVyZWZMaXN0LmNsZWFyKCk7CiB9CkBAIC05MjIsOCArOTE5LDggQEAgdm9pZCBBdWRp
b0NvbnRleHQ6OmhhbmRsZURpcnR5QXVkaW9TdW1taW5nSnVuY3Rpb25zKCkKIHsKICAgICBBU1NF
UlQoaXNHcmFwaE93bmVyKCkpOyAgICAKIAotICAgIGZvciAoSGFzaFNldDxBdWRpb1N1bW1pbmdK
dW5jdGlvbio+OjppdGVyYXRvciBpID0gbV9kaXJ0eVN1bW1pbmdKdW5jdGlvbnMuYmVnaW4oKTsg
aSAhPSBtX2RpcnR5U3VtbWluZ0p1bmN0aW9ucy5lbmQoKTsgKytpKQotICAgICAgICAoKmkpLT51
cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOworICAgIGZvciAoYXV0byYganVuY3Rpb24gOiBtX2RpcnR5
U3VtbWluZ0p1bmN0aW9ucykKKyAgICAgICAganVuY3Rpb24tPnVwZGF0ZVJlbmRlcmluZ1N0YXRl
KCk7CiAKICAgICBtX2RpcnR5U3VtbWluZ0p1bmN0aW9ucy5jbGVhcigpOwogfQpAQCAtOTMyLDgg
KzkyOSw4IEBAIHZvaWQgQXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMo
KQogewogICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7ICAgIAogCi0gICAgZm9yIChIYXNoU2V0
PEF1ZGlvTm9kZU91dHB1dCo+OjppdGVyYXRvciBpID0gbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMu
YmVnaW4oKTsgaSAhPSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5lbmQoKTsgKytpKQotICAgICAg
ICAoKmkpLT51cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOworICAgIGZvciAoYXV0byYgb3V0cHV0IDog
bV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMpCisgICAgICAgIG91dHB1dC0+dXBkYXRlUmVuZGVyaW5n
U3RhdGUoKTsKIAogICAgIG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmNsZWFyKCk7CiB9CkBAIC05
NjMsOSArOTYwLDkgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVwZGF0ZUF1dG9tYXRpY1B1bGxOb2Rl
cygpCiAgICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzLnJlc2l6ZShtX2F1dG9t
YXRpY1B1bGxOb2Rlcy5zaXplKCkpOwogCiAgICAgICAgIHVuc2lnbmVkIGogPSAwOwotICAgICAg
ICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlKj46Oml0ZXJhdG9yIGkgPSBtX2F1dG9tYXRpY1B1bGxO
b2Rlcy5iZWdpbigpOyBpICE9IG1fYXV0b21hdGljUHVsbE5vZGVzLmVuZCgpOyArK2ksICsraikg
ewotICAgICAgICAgICAgQXVkaW9Ob2RlKiBvdXRwdXQgPSAqaTsKKyAgICAgICAgZm9yIChhdXRv
JiBvdXRwdXQgOiBtX2F1dG9tYXRpY1B1bGxOb2RlcykgewogICAgICAgICAgICAgbV9yZW5kZXJp
bmdBdXRvbWF0aWNQdWxsTm9kZXNbal0gPSBvdXRwdXQ7CisgICAgICAgICAgICBqKys7CiAgICAg
ICAgIH0KIAogICAgICAgICBtX2F1dG9tYXRpY1B1bGxOb2Rlc05lZWRVcGRhdGluZyA9IGZhbHNl
OwpAQCAtOTc2LDggKzk3Myw4IEBAIHZvaWQgQXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGlj
UHVsbE5vZGVzKHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiB7CiAgICAgQVNTRVJUKGlzQXVkaW9U
aHJlYWQoKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJpbmdBdXRv
bWF0aWNQdWxsTm9kZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGlj
UHVsbE5vZGVzW2ldLT5wcm9jZXNzSWZOZWNlc3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBm
b3IgKGF1dG8mIG5vZGUgOiBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2RlcykKKyAgICAgICAg
bm9kZS0+cHJvY2Vzc0lmTmVjZXNzYXJ5KGZyYW1lc1RvUHJvY2Vzcyk7CiB9CiAKIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIEF1ZGlvQ29udGV4dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9k
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5k
ZXggMzI2NGI1YjFiNTEwMDE2MGU3Zjg4MzI3ZmNiNjUxNWMyYzZlZGNmMC4uZjQ2YjRiZTI0NGQ0
MDdkMDA0OTEzYWI1NDdkOTExZDkxOGVjMDNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcApAQCAtMjc3LDggKzI3Nyw4IEBAIHZvaWQgQXVkaW9O
b2RlOjpzZXRDaGFubmVsSW50ZXJwcmV0YXRpb24oY29uc3QgU3RyaW5nJiBpbnRlcnByZXRhdGlv
biwgRXhjZXB0aW9uCiAKIHZvaWQgQXVkaW9Ob2RlOjp1cGRhdGVDaGFubmVsc0ZvcklucHV0cygp
CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5wdXRzLnNpemUoKTsgKytpKQot
ICAgICAgICBpbnB1dChpKS0+Y2hhbmdlZE91dHB1dHMoKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0
IDogbV9pbnB1dHMpCisgICAgICAgIGlucHV0LT5jaGFuZ2VkT3V0cHV0cygpOwogfQogCiBFdmVu
dFRhcmdldEludGVyZmFjZSBBdWRpb05vZGU6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QK
QEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIEF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxz
Rm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlucHV0KQogewogICAgIEFTU0VSVChjb250ZXh0KCkt
PmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKIAotICAgIGZv
ciAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvTm9kZUlucHV0PiYgc2F2ZWRJbnB1dCA6IG1f
aW5wdXRzKSB7CisgICAgZm9yIChhdXRvJiBzYXZlZElucHV0IDogbV9pbnB1dHMpIHsKICAgICAg
ICAgaWYgKGlucHV0ID09IHNhdmVkSW5wdXQuZ2V0KCkpIHsKICAgICAgICAgICAgIGlucHV0LT51
cGRhdGVJbnRlcm5hbEJ1cygpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzQ1LDE0ICszNDUs
MTQgQEAgdm9pZCBBdWRpb05vZGU6OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykK
ICAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwogICAgIAogICAgIC8vIFBy
b2Nlc3MgYWxsIG9mIHRoZSBBdWRpb05vZGVzIGNvbm5lY3RlZCB0byBvdXIgaW5wdXRzLgotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lucHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAg
aW5wdXQoaSktPnB1bGwoMCwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0
IDogbV9pbnB1dHMpCisgICAgICAgIGlucHV0LT5wdWxsKDAsIGZyYW1lc1RvUHJvY2Vzcyk7CiB9
CiAKIGJvb2wgQXVkaW9Ob2RlOjppbnB1dHNBcmVTaWxlbnQoKQogewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2lucHV0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWlucHV0
KGkpLT5idXMoKS0+aXNTaWxlbnQoKSkKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMp
IHsKKyAgICAgICAgaWYgKCFpbnB1dC0+YnVzKCktPmlzU2lsZW50KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMzYwLDE0ICszNjAsMTQg
QEAgYm9vbCBBdWRpb05vZGU6OmlucHV0c0FyZVNpbGVudCgpCiAKIHZvaWQgQXVkaW9Ob2RlOjpz
aWxlbmNlT3V0cHV0cygpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0
cy5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0cHV0KGkpLT5idXMoKS0+emVybygpOworICAgIGZv
ciAoYXV0byYgb3V0cHV0IDogbV9vdXRwdXRzKQorICAgICAgICBvdXRwdXQtPmJ1cygpLT56ZXJv
KCk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjp1bnNpbGVuY2VPdXRwdXRzKCkKIHsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRwdXRzLnNpemUoKTsgKytpKQotICAgICAgICBvdXRw
dXQoaSktPmJ1cygpLT5jbGVhclNpbGVudEZsYWcoKTsKKyAgICBmb3IgKGF1dG8mIG91dHB1dCA6
IG1fb3V0cHV0cykKKyAgICAgICAgb3V0cHV0LT5idXMoKS0+Y2xlYXJTaWxlbnRGbGFnKCk7CiB9
CiAKIHZvaWQgQXVkaW9Ob2RlOjplbmFibGVPdXRwdXRzSWZOZWNlc3NhcnkoKQpAQCAtMzc3LDgg
KzM3Nyw4IEBAIHZvaWQgQXVkaW9Ob2RlOjplbmFibGVPdXRwdXRzSWZOZWNlc3NhcnkoKQogICAg
ICAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKCpjb250ZXh0KCkpOwogCiAgICAg
ICAgIG1faXNEaXNhYmxlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9vdXRwdXRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgb3V0cHV0KGkpLT5lbmFibGUo
KTsKKyAgICAgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX291dHB1dHMpCisgICAgICAgICAgICBv
dXRwdXQtPmVuYWJsZSgpOwogICAgIH0KIH0KIApAQCAtNDAyLDggKzQwMiw4IEBAIHZvaWQgQXVk
aW9Ob2RlOjpkaXNhYmxlT3V0cHV0c0lmTmVjZXNzYXJ5KCkKICAgICAgICAgLy8gbG9uZ2VyIGFu
eSBhY3RpdmUgY29ubmVjdGlvbnMuCiAgICAgICAgIGlmIChub2RlVHlwZSgpICE9IE5vZGVUeXBl
Q29udm9sdmVyICYmIG5vZGVUeXBlKCkgIT0gTm9kZVR5cGVEZWxheSkgewogICAgICAgICAgICAg
bV9pc0Rpc2FibGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX291dHB1dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNh
YmxlKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAg
ICAgICAgICAgICBvdXRwdXQtPmRpc2FibGUoKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQ5
Miw4ICs0OTIsOCBAQCB2b2lkIEF1ZGlvTm9kZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBl
KQogICAgICAgICBpZiAoIW1fbm9ybWFsUmVmQ291bnQpIHsKICAgICAgICAgICAgIGlmICghbV9p
c01hcmtlZEZvckRlbGV0aW9uKSB7CiAgICAgICAgICAgICAgICAgLy8gQWxsIHJlZmVyZW5jZXMg
YXJlIGdvbmUgLSB3ZSBuZWVkIHRvIGdvIGF3YXkuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0KGkpLT5kaXNjb25uZWN0QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVz
IHdlJ3JlIGNvbm5lY3RlZCB0by4KKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6
IG1fb3V0cHV0cykKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LT5kaXNjb25uZWN0QWxsKCk7
IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0by4KIAogICAgICAg
ICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNoIHJlbmRlciBxdWFu
dHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBkb3duLgogICAgICAgICAgICAgICAgIGNvbnRleHQo
KS0+bWFya0ZvckRlbGV0aW9uKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAppbmRleCBjNjIzMzNkMmIyMTk3ODU4YjJlODBm
MzE5MDMwYWYzZGRjOGViMjc4Li5hNjA1ZTMzMmRhODZhOGQ0OWViOTFjYTYxZmEwMGZlZTBhOGJi
YmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9k
ZUlucHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9k
ZUlucHV0LmNwcApAQCAtMTUxLDggKzE1MSw3IEBAIHVuc2lnbmVkIEF1ZGlvTm9kZUlucHV0Ojpu
dW1iZXJPZkNoYW5uZWxzKCkgY29uc3QKICAgICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgY2hhbm5l
bHMgb2YgdGhlIGNvbm5lY3Rpb24gd2l0aCB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhbm5lbHMu
CiAgICAgdW5zaWduZWQgbWF4Q2hhbm5lbHMgPSAxOyAvLyBvbmUgY2hhbm5lbCBpcyB0aGUgbWlu
aW11bSBhbGxvd2VkCiAKLSAgICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj46Oml0ZXJh
dG9yIGkgPSBtX291dHB1dHMuYmVnaW4oKTsgaSAhPSBtX291dHB1dHMuZW5kKCk7ICsraSkgewot
ICAgICAgICBBdWRpb05vZGVPdXRwdXQqIG91dHB1dCA9ICppOworICAgIGZvciAoYXV0byYgb3V0
cHV0IDogbV9vdXRwdXRzKSB7CiAgICAgICAgIC8vIFVzZSBvdXRwdXQoKS0+bnVtYmVyT2ZDaGFu
bmVscygpIGluc3RlYWQgb2Ygb3V0cHV0LT5idXMoKS0+bnVtYmVyT2ZDaGFubmVscygpLAogICAg
ICAgICAvLyBiZWNhdXNlIHRoZSBjYWxsaW5nIG9mIEF1ZGlvTm9kZU91dHB1dDo6YnVzKCkgaXMg
bm90IHNhZmUgaGVyZS4KICAgICAgICAgbWF4Q2hhbm5lbHMgPSBzdGQ6Om1heChtYXhDaGFubmVs
cywgb3V0cHV0LT5udW1iZXJPZkNoYW5uZWxzKCkpOwpAQCAtMTk4LDggKzE5Nyw3IEBAIHZvaWQg
QXVkaW9Ob2RlSW5wdXQ6OnN1bUFsbENvbm5lY3Rpb25zKEF1ZGlvQnVzKiBzdW1taW5nQnVzLCBz
aXplX3QgZnJhbWVzVG9Qcm9jCiAKICAgICBBdWRpb0J1czo6Q2hhbm5lbEludGVycHJldGF0aW9u
IGludGVycHJldGF0aW9uID0gbm9kZSgpLT5pbnRlcm5hbENoYW5uZWxJbnRlcnByZXRhdGlvbigp
OwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUmVuZGVyaW5nQ29ubmVj
dGlvbnMoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gcmVuZGVy
aW5nT3V0cHV0KGkpOworICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9yZW5kZXJpbmdPdXRwdXRz
KSB7CiAgICAgICAgIEFTU0VSVChvdXRwdXQpOwogCiAgICAgICAgIC8vIFJlbmRlciBhdWRpbyBm
cm9tIHRoaXMgb3V0cHV0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGVPdXRwdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGVPdXRwdXQuY3BwCmluZGV4IGY5YTQ1MTZmOTgyNDdjZDBkZDEyNmNhYzQ4MmNk
ZWZhOTkyNjhiMTEuLjQ2OGQ4ZDVmMTQwOTQxMmFhMThkMzIxOWE0Y2M0MzVjMTNiMWRkYTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1
dC5jcHAKQEAgLTk4LDggKzk4LDcgQEAgdm9pZCBBdWRpb05vZGVPdXRwdXQ6OnByb3BhZ2F0ZUNo
YW5uZWxDb3VudCgpCiAgICAgCiAgICAgaWYgKGlzQ2hhbm5lbENvdW50S25vd24oKSkgewogICAg
ICAgICAvLyBBbm5vdW5jZSB0byBhbnkgbm9kZXMgd2UncmUgY29ubmVjdGVkIHRvIHRoYXQgd2Ug
Y2hhbmdlZCBvdXIgY2hhbm5lbCBjb3VudCBmb3IgaXRzIGlucHV0LgotICAgICAgICBmb3IgKElu
cHV0c0l0ZXJhdG9yIGkgPSBtX2lucHV0cy5iZWdpbigpOyBpICE9IG1faW5wdXRzLmVuZCgpOyAr
K2kpIHsKLSAgICAgICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9ICppOworICAgICAgICBm
b3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpIHsKICAgICAgICAgICAgIEF1ZGlvTm9kZSogY29u
bmVjdGlvbk5vZGUgPSBpbnB1dC0+bm9kZSgpOwogICAgICAgICAgICAgY29ubmVjdGlvbk5vZGUt
PmNoZWNrTnVtYmVyT2ZDaGFubmVsc0ZvcklucHV0KGlucHV0KTsKICAgICAgICAgfQpAQCAtMjMw
LDEwICsyMjksOCBAQCB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZGlzYWJsZSgpCiAgICAgQVNTRVJU
KGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkpOwogCiAgICAgaWYgKG1faXNFbmFibGVkKSB7Ci0g
ICAgICAgIGZvciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9p
bnB1dHMuZW5kKCk7ICsraSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0g
Kmk7CisgICAgICAgIGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0cykKICAgICAgICAgICAgIGlu
cHV0LT5kaXNhYmxlKHRoaXMpOwotICAgICAgICB9CiAgICAgICAgIG1faXNFbmFibGVkID0gZmFs
c2U7CiAgICAgfQogfQpAQCAtMjQzLDEwICsyNDAsOCBAQCB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6
ZW5hYmxlKCkKICAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7CiAKICAgICBp
ZiAoIW1faXNFbmFibGVkKSB7Ci0gICAgICAgIGZvciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1faW5w
dXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMuZW5kKCk7ICsraSkgewotICAgICAgICAgICAgQXVk
aW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7CisgICAgICAgIGZvciAoYXV0byYgaW5wdXQgOiBtX2lu
cHV0cykKICAgICAgICAgICAgIGlucHV0LT5lbmFibGUodGhpcyk7Ci0gICAgICAgIH0KICAgICAg
ICAgbV9pc0VuYWJsZWQgPSB0cnVlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwCmluZGV4IDNlNDg5OWY1MGUzOWMzOGIxN2U1MGI0
NTg1YTJiNjQ4MWJiNjBhYmEuLmI3M2U5MTZhZjkyZDliNmQ2ZTIwOWM3ZmJiY2RhZDFlNGQ2MjRj
YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJh
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmNw
cApAQCAtMTM5LDggKzEzOSw3IEBAIHZvaWQgQXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1
ZXMoZmxvYXQqIHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsIGJvCiAgICAgUmVmUHRy
PEF1ZGlvQnVzPiBzdW1taW5nQnVzID0gQXVkaW9CdXM6OmNyZWF0ZSgxLCBudW1iZXJPZlZhbHVl
cywgZmFsc2UpOwogICAgIHN1bW1pbmdCdXMtPnNldENoYW5uZWxNZW1vcnkoMCwgdmFsdWVzLCBu
dW1iZXJPZlZhbHVlcyk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZS
ZW5kZXJpbmdDb25uZWN0aW9ucygpOyArK2kpIHsKLSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBv
dXRwdXQgPSByZW5kZXJpbmdPdXRwdXQoaSk7CisgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX3Jl
bmRlcmluZ091dHB1dHMpIHsKICAgICAgICAgQVNTRVJUKG91dHB1dCk7CiAKICAgICAgICAgLy8g
UmVuZGVyIGF1ZGlvIGZyb20gdGhpcyBvdXRwdXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAKaW5kZXggMWM3ZTRlNWY4
YmU5M2RiMDk3MjE4MjE0M2Y2NmM3MDY4NjI5YmJhNy4uYzVlMjE2OTg0MjYyYjlmMmU4YmQxODc1
OWZlOGUwYWEyZjUwMDc4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcApAQCAtODQsMTQgKzg0LDE0IEBAIHZvaWQg
QXVkaW9QYXJhbVRpbWVsaW5lOjppbnNlcnRFdmVudChjb25zdCBQYXJhbUV2ZW50JiBldmVudCkK
ICAgICAKICAgICB1bnNpZ25lZCBpID0gMDsKICAgICBmbG9hdCBpbnNlcnRUaW1lID0gZXZlbnQu
dGltZSgpOwotICAgIGZvciAoaSA9IDA7IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkgeworICAg
IGZvciAoYXV0byYgcGFyYW1FdmVudCA6IG1fZXZlbnRzKSB7CiAgICAgICAgIC8vIE92ZXJ3cml0
ZSBzYW1lIGV2ZW50IHR5cGUgYW5kIHRpbWUuCi0gICAgICAgIGlmIChtX2V2ZW50c1tpXS50aW1l
KCkgPT0gaW5zZXJ0VGltZSAmJiBtX2V2ZW50c1tpXS50eXBlKCkgPT0gZXZlbnQudHlwZSgpKSB7
Ci0gICAgICAgICAgICBtX2V2ZW50c1tpXSA9IGV2ZW50OworICAgICAgICBpZiAocGFyYW1FdmVu
dC50aW1lKCkgPT0gaW5zZXJ0VGltZSAmJiBwYXJhbUV2ZW50LnR5cGUoKSA9PSBldmVudC50eXBl
KCkpIHsKKyAgICAgICAgICAgIHBhcmFtRXZlbnQgPSBldmVudDsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtX2V2ZW50c1tpXS50aW1lKCkgPiBpbnNlcnRU
aW1lKQorICAgICAgICBpZiAocGFyYW1FdmVudC50aW1lKCkgPiBpbnNlcnRUaW1lKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwCmluZGV4IGVkNDE3ZmFkYmQ1NWVl
NjNkNmI4ZmNmODVkZjc0N2RhZmQ2ODI4YTQuLmMyMjhlZWM3MTgyOTk5ZjA4MWNmMGI1ZjM5YzQ0
YWUxM2U0MmYyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwCkBAIC02MiwxMCArNjIsOSBAQCB2b2lkIEF1
ZGlvU3VtbWluZ0p1bmN0aW9uOjp1cGRhdGVSZW5kZXJpbmdTdGF0ZSgpCiAgICAgaWYgKG1fcmVu
ZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcgJiYgY2FuVXBkYXRlU3RhdGUoKSkgewogICAgICAgICAv
LyBDb3B5IGZyb20gbV9vdXRwdXRzIHRvIG1fcmVuZGVyaW5nT3V0cHV0cy4KICAgICAgICAgbV9y
ZW5kZXJpbmdPdXRwdXRzLnJlc2l6ZShtX291dHB1dHMuc2l6ZSgpKTsKLSAgICAgICAgdW5zaWdu
ZWQgaiA9IDA7Ci0gICAgICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGVPdXRwdXQqPjo6aXRlcmF0
b3IgaSA9IG1fb3V0cHV0cy5iZWdpbigpOyBpICE9IG1fb3V0cHV0cy5lbmQoKTsgKytpLCArK2op
IHsKLSAgICAgICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gKmk7Ci0gICAgICAgICAg
ICBtX3JlbmRlcmluZ091dHB1dHNbal0gPSBvdXRwdXQ7CisgICAgICAgIHVuc2lnbmVkIGkgPSAw
OworICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0cykgeworICAgICAgICAgICAg
bV9yZW5kZXJpbmdPdXRwdXRzW2krK10gPSBvdXRwdXQ7CiAgICAgICAgICAgICBvdXRwdXQtPnVw
ZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZS5jcHAKaW5k
ZXggZWQ3OGE3YzBkMmM1NDcyOTUwOWU2Yzk5MDY2YjMzNzg3MWRmMWRkNy4uYjZlMjZlN2Y5OWRi
MmFiNDBmZjFkZDQ0MzA5NzE1NmUwMWIzMTUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwCkBAIC04
MSwxNSArODEsMTUgQEAgYm9vbCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlOjpyZW1vdmVBdWRpb0Nv
bnN1bWVyKEF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29uc3UKIHZvaWQgTWVkaWFTdHJlYW1B
dWRpb1NvdXJjZTo6c2V0QXVkaW9Gb3JtYXQoc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGZsb2F0
IHNhbXBsZVJhdGUpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXVkaW9Db25zdW1lcnNM
b2NrKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPj46
Oml0ZXJhdG9yIGl0ID0gbV9hdWRpb0NvbnN1bWVycy5iZWdpbigpOyBpdCAhPSBtX2F1ZGlvQ29u
c3VtZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAoKml0KS0+c2V0Rm9ybWF0KG51bWJlck9mQ2hh
bm5lbHMsIHNhbXBsZVJhdGUpOworICAgIGZvciAoYXV0byYgY29uc3VtZXIgOiBtX2F1ZGlvQ29u
c3VtZXJzKQorICAgICAgICBjb25zdW1lci0+c2V0Rm9ybWF0KG51bWJlck9mQ2hhbm5lbHMsIHNh
bXBsZVJhdGUpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2U6OmNvbnN1bWVBdWRp
byhBdWRpb0J1cyogYnVzLCBzaXplX3QgbnVtYmVyT2ZGcmFtZXMpCiB7CiAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fYXVkaW9Db25zdW1lcnNMb2NrKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8
QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPj46Oml0ZXJhdG9yIGl0ID0gbV9hdWRpb0NvbnN1bWVy
cy5iZWdpbigpOyBpdCAhPSBtX2F1ZGlvQ29uc3VtZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAo
Kml0KS0+Y29uc3VtZUF1ZGlvKGJ1cywgbnVtYmVyT2ZGcmFtZXMpOworICAgIGZvciAoYXV0byYg
Y29uc3VtZXIgOiBtX2F1ZGlvQ29uc3VtZXJzKQorICAgICAgICBjb25zdW1lci0+Y29uc3VtZUF1
ZGlvKGJ1cywgbnVtYmVyT2ZGcmFtZXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9j
ZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJv
Y2Vzc29yLmNwcAppbmRleCBjMmQ2ZGUwYWY5MWNlNjQ2OGZlYmYzZDI3M2MzMzVmN2ZjOTRiYTU0
Li41MDgzZTA3MDNjMTExZjZiOGZmMjU5NGJhY2I4ODM1OWU5ZGQyY2VkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5j
cHAKQEAgLTY1LDggKzY1LDggQEAgdm9pZCBXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRPdmVyc2Ft
cGxlKE92ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGUpCiAgICAgbV9vdmVyc2FtcGxlID0gb3ZlcnNh
bXBsZTsKIAogICAgIGlmIChvdmVyc2FtcGxlICE9IE92ZXJTYW1wbGVOb25lKSB7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgICAgIFdhdmVTaGFwZXJEU1BLZXJuZWwqIGtlcm5lbCA9IHN0YXRpY19jYXN0PFdhdmVTaGFw
ZXJEU1BLZXJuZWwqPihtX2tlcm5lbHNbaV0uZ2V0KCkpOworICAgICAgICBmb3IgKGF1dG8mIGF1
ZGlvRFNQS2VybmVsIDogbV9rZXJuZWxzKSB7CisgICAgICAgICAgICBXYXZlU2hhcGVyRFNQS2Vy
bmVsKiBrZXJuZWwgPSBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyRFNQS2VybmVsKj4oYXVkaW9EU1BL
ZXJuZWwuZ2V0KCkpOwogICAgICAgICAgICAga2VybmVsLT5sYXp5SW5pdGlhbGl6ZU92ZXJzYW1w
bGluZygpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCAyOTZhZGZkZTZkOTYxMmZj
ZDc5ZGI0ODNhYWIxNDIzMDIyMmVlZjc3Li5hNDQxM2MyNTYzYjI1NjAyZWYxNWJhNTMyNjAyYjBm
OTA2Zjg0NWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAtMTUwLDEwICsxNTAsMTAgQEAgdm9pZCBEYXRhYmFz
ZVRocmVhZDo6aGFuZGxlUGF1c2VkUXVldWUoKQogICAgIHdoaWxlIChhdXRvIHRhc2sgPSBtX3Bh
dXNlZFF1ZXVlLnRyeUdldE1lc3NhZ2UoKSkKICAgICAgICAgcGF1c2VkVGFza3MuYXBwZW5kKFdU
Rjo6bW92ZSh0YXNrKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGF1c2VkVGFz
a3Muc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIHBhdXNlZFRhc2sgOiBwYXVzZWRUYXNr
cykgewogICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIAotICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8RGF0YWJhc2VUYXNrPiB0YXNrKHBhdXNlZFRhc2tzW2ldLnJlbGVhc2UoKSk7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRhc2s+IHRhc2socGF1c2VkVGFzay5yZWxlYXNl
KCkpOwogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBwYXVzZWRMb2NrZXIobV9w
YXVzZWRNdXRleCk7CiAgICAgICAgICAgICBpZiAobV9wYXVzZWQpIHsKQEAgLTIwMyw5ICsyMDMs
OCBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpCiAgICAgICAgIC8vIEFz
IHRoZSBjYWxsIHRvIGNsb3NlIHdpbGwgbW9kaWZ5IHRoZSBvcmlnaW5hbCBzZXQsIHdlIG11c3Qg
dGFrZSBhIGNvcHkgdG8gaXRlcmF0ZSBvdmVyLgogICAgICAgICBEYXRhYmFzZVNldCBvcGVuU2V0
Q29weTsKICAgICAgICAgb3BlblNldENvcHkuc3dhcChtX29wZW5EYXRhYmFzZVNldCk7Ci0gICAg
ICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBlbmQgPSBvcGVuU2V0Q29weS5lbmQoKTsKLSAgICAg
ICAgZm9yIChEYXRhYmFzZVNldDo6aXRlcmF0b3IgaXQgPSBvcGVuU2V0Q29weS5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS5nZXQoKS0+Y2xvc2UoKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBvcGVuRGF0YWJhc2UgOiBvcGVuU2V0Q29weSkKKyAgICAgICAgICAgIG9w
ZW5EYXRhYmFzZS0+Y2xvc2UoKTsKICAgICB9CiAKICAgICAvLyBEZXRhY2ggdGhlIHRocmVhZCBz
byBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25nZXIgb2YgYW55IGNvbmNlcm4gdG8gYW55b25lIGVs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJh
c2VUcmFja2VyLmNwcAppbmRleCA2NGM2MDE0MGMwYTI5MmJjOTAzZWYwOGZlYjNjZDU1NDA2YTc2
MWVmLi45MjI1NTkxMTIxZDgwMWM2MGI1OGJmZTg0MmVmN2FmZWExZjAwNmUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIu
Y3BwCkBAIC0zMzcsMjAgKzMzNywxNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0
QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUNvbnRleHQqIGNvbgogICAgICAg
ICBpZiAoIW5hbWVNYXApCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgRGF0YWJhc2VO
YW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVNYXAtPmVuZCgpOwot
ICAgICAgICBmb3IgKERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwSXQg
PSBuYW1lTWFwLT5iZWdpbigpOyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBFbmRJdDsgKytkYk5h
bWVNYXBJdCkgewotICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1l
TWFwSXQtPnZhbHVlOwotICAgICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRi
U2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKERhdGFiYXNl
U2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGRiU2V0
SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNldEl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgqZGJT
ZXRJdCktPmRhdGFiYXNlQ29udGV4dCgpID09IGNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAg
IG9wZW5EYXRhYmFzZXMuYXBwZW5kKCpkYlNldEl0KTsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRh
YmFzZVNldCA6IG5hbWVNYXAtPnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGRh
dGFiYXNlIDogKmRhdGFiYXNlU2V0KSB7CisgICAgICAgICAgICAgICAgaWYgKGRhdGFiYXNlLT5k
YXRhYmFzZUNvbnRleHQoKSA9PSBjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICBvcGVuRGF0
YWJhc2VzLmFwcGVuZChkYXRhYmFzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBWZWN0b3I8UmVmUHRyPERhdGFiYXNlQmFja2VuZEJhc2U+Pjo6Y29uc3RfaXRlcmF0
b3Igb3BlbkRhdGFiYXNlc0VuZEl0ID0gb3BlbkRhdGFiYXNlcy5lbmQoKTsKLSAgICBmb3IgKFZl
Y3RvcjxSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4+Ojpjb25zdF9pdGVyYXRvciBvcGVuRGF0
YWJhc2VzSXQgPSBvcGVuRGF0YWJhc2VzLmJlZ2luKCk7IG9wZW5EYXRhYmFzZXNJdCAhPSBvcGVu
RGF0YWJhc2VzRW5kSXQ7ICsrb3BlbkRhdGFiYXNlc0l0KQotICAgICAgICAoKm9wZW5EYXRhYmFz
ZXNJdCktPmludGVycnVwdCgpOworICAgIGZvciAoYXV0byYgb3BlbkRhdGFiYXNlIDogb3BlbkRh
dGFiYXNlcykKKyAgICAgICAgb3BlbkRhdGFiYXNlLT5pbnRlcnJ1cHQoKTsKIH0KIAogU3RyaW5n
IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luUGF0aChTZWN1cml0eU9yaWdpbiogb3JpZ2luKSBjb25z
dApAQCAtNDcwLDggKzQ2Niw4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVz
Rm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJpCiAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZvciAoVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9y
IGl0ZXIgPSB0ZW1wLmJlZ2luKCk7IGl0ZXIgIT0gdGVtcC5lbmQoKTsgKytpdGVyKQotICAgICAg
ICByZXN1bHRWZWN0b3IuYXBwZW5kKGl0ZXItPmlzb2xhdGVkQ29weSgpKTsKKyAgICBmb3IgKGF1
dG8mIGRhdGFiYXNlTmFtZSA6IHRlbXApCisgICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoZGF0
YWJhc2VOYW1lLmlzb2xhdGVkQ29weSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjU4
LDggKzY1NCw4IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2VzKFNlY3Vy
aXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtCiAgICAgaWYgKCFkYXRhYmFzZVNl
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChEYXRhYmFzZVNldDo6aXRlcmF0b3IgaXQg
PSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VTZXQtPmVuZCgpOyArK2l0KQot
ICAgICAgICBkYXRhYmFzZXMtPmFkZCgqaXQpOworICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiAq
ZGF0YWJhc2VTZXQpCisgICAgICAgIGRhdGFiYXNlcy0+YWRkKGRhdGFiYXNlKTsKIH0KIAogUmVm
UHRyPE9yaWdpbkxvY2s+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luTG9ja0ZvcihTZWN1cml0eU9y
aWdpbiogb3JpZ2luKQpAQCAtNzEyLDEyICs3MDgsOSBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0
YWJhc2VUcmFja2VyOjp1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewog
ICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+b3JpZ2luUGF0aChvcmlnaW4pOwogICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2UgPSAwOwotICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVO
YW1lcyA9IGxpc3REaXJlY3Rvcnkob3JpZ2luUGF0aCwgU3RyaW5nKCIqLmRiIikpOwotICAgIFZl
Y3RvcjxTdHJpbmc+OjppdGVyYXRvciBmaWxlTmFtZSA9IGZpbGVOYW1lcy5iZWdpbigpOwotICAg
IFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBsYXN0RmlsZU5hbWUgPSBmaWxlTmFtZXMuZW5kKCk7
Ci0gICAgZm9yICg7IGZpbGVOYW1lICE9IGxhc3RGaWxlTmFtZTsgKytmaWxlTmFtZSkgeworICAg
IGZvciAoYXV0byYgZmlsZU5hbWUgOiBsaXN0RGlyZWN0b3J5KG9yaWdpblBhdGgsIFN0cmluZygi
Ki5kYiIpKSkgewogICAgICAgICBsb25nIGxvbmcgc2l6ZTsKLSAgICAgICAgZ2V0RmlsZVNpemUo
KmZpbGVOYW1lLCBzaXplKTsKKyAgICAgICAgZ2V0RmlsZVNpemUoZmlsZU5hbWUsIHNpemUpOwog
ICAgICAgICBkaXNrVXNhZ2UgKz0gc2l6ZTsKICAgICB9CiAgICAgcmV0dXJuIGRpc2tVc2FnZTsK
QEAgLTg0Myw4ICs4MzYsOCBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJh
c2VzKCkKICAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gb3JpZ2luc0NvcHk7CiAg
ICAgb3JpZ2lucyhvcmlnaW5zQ29weSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
b3JpZ2luc0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZU9yaWdpbihvcmlnaW5zQ29w
eVtpXS5nZXQoKSk7CisgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zQ29weSkKKyAgICAg
ICAgZGVsZXRlT3JpZ2luKG9yaWdpbi5nZXQoKSk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2Vy
OjpkZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6
OnRpbWVfcG9pbnQgdGltZSkKQEAgLTg5NiwxMCArODg5LDEwIEBAIGJvb2wgRGF0YWJhc2VUcmFj
a2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKICAgICB9CiAKICAgICAv
LyBXZSBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSBob2xkaW5nIGxvY2tzIGR1cmluZyBhIGNh
bGwgdG8gZGVsZXRlRGF0YWJhc2VGaWxlIHdpbGwgZGVhZGxvY2suCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFk
ZWxldGVEYXRhYmFzZUZpbGUob3JpZ2luLCBkYXRhYmFzZU5hbWVzW2ldKSkgeworICAgIGZvciAo
YXV0byYgbmFtZSA6IGRhdGFiYXNlTmFtZXMpIHsKKyAgICAgICAgaWYgKCFkZWxldGVEYXRhYmFz
ZUZpbGUob3JpZ2luLCBuYW1lKSkgewogICAgICAgICAgICAgLy8gRXZlbiBpZiB0aGUgZmlsZSBj
YW4ndCBiZSBkZWxldGVkLCB3ZSB3YW50IHRvIHRyeSBhbmQgZGVsZXRlIHRoZSByZXN0LCBkb24n
dCByZXR1cm4gZWFybHkgaGVyZS4KLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGRl
bGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMiLCBkYXRhYmFzZU5hbWVzW2ld
LmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGRlbGV0ZSBmaWxlIGZvciBk
YXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRh
dGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtOTYxLDggKzk1NCw4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbikKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgICAgICBtX2Ns
aWVudC0+ZGlzcGF0Y2hEaWREZWxldGVEYXRhYmFzZU9yaWdpbigpOwogI2VuZGlmCi0gICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YWJhc2VOYW1lcy5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFzZShvcmln
aW4sIGRhdGFiYXNlTmFtZXNbaV0pOworICAgICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogZGF0
YWJhc2VOYW1lcykKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlE
YXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVl
OwpAQCAtMTE2NiwxNiArMTE1OSwxNSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0
YWJhc2VGaWxlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbgogICAgICAg
ICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsK
ICAgICAgICAgICAgICAgICBpZiAoZGF0YWJhc2VTZXQgJiYgZGF0YWJhc2VTZXQtPnNpemUoKSkg
ewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNvbWUgZGF0YWJhc2Ugb3BlbiB3aXRo
IHRoaXMgbmFtZS4gTWFyayB0aGVtIGFzIGRlbGV0ZWQuCi0gICAgICAgICAgICAgICAgICAgIERh
dGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0
YWJhc2VTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZWREYXRhYmFzZXMuYXBwZW5kKCppdCk7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCisgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGVkRGF0YWJhc2VzLmFwcGVuZChkYXRhYmFzZSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZWREYXRh
YmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOworICAgIGZvciAoYXV0byYgZGF0YWJh
c2UgOiBkZWxldGVkRGF0YWJhc2VzKQorICAgICAgICBkYXRhYmFzZS0+bWFya0FzRGVsZXRlZEFu
ZENsb3NlKCk7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJldHVybiBTUUxpdGVGaWxlU3lz
dGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoZnVsbFBhdGgpOwpAQCAtMTIxOCwzMyArMTIxMCwyNiBA
QCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcygpCiAg
ICAgewogICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFi
YXNlTWFwR3VhcmQpOwogICAgICAgICBpZiAobV9vcGVuRGF0YWJhc2VNYXApIHsKLSAgICAgICAg
ICAgIERhdGFiYXNlT3JpZ2luTWFwOjpjb25zdF9pdGVyYXRvciBvcmlnaW5NYXBFbmQgPSBtX29w
ZW5EYXRhYmFzZU1hcC0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKERhdGFiYXNlT3JpZ2luTWFw
Ojpjb25zdF9pdGVyYXRvciBvcmlnaW5NYXBJdCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5iZWdpbigp
OyBvcmlnaW5NYXBJdCAhPSBvcmlnaW5NYXBFbmQ7ICsrb3JpZ2luTWFwSXQpIHsKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9IG9yaWdpbk1hcEl0LT5rZXk7
Ci0gICAgICAgICAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBkYXRhYmFzZU5hbWVNYXAgPSBvcmln
aW5NYXBJdC0+dmFsdWU7CisgICAgICAgICAgICBmb3IgKGF1dG8mIG9wZW5EYXRhYmFzZSA6ICpt
X29wZW5EYXRhYmFzZU1hcCkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdp
bj4gb3JpZ2luID0gb3BlbkRhdGFiYXNlLmtleTsKKyAgICAgICAgICAgICAgICBEYXRhYmFzZU5h
bWVNYXAqIGRhdGFiYXNlTmFtZU1hcCA9IG9wZW5EYXRhYmFzZS52YWx1ZTsKICAgICAgICAgICAg
ICAgICBWZWN0b3I8U3RyaW5nPiBkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW47CiAK
ICAgICAgICAgICAgICAgICAvLyBMb29wIHRocm91Z2ggYWxsIG9wZW5lZCBkYXRhYmFzZXMgaW4g
dGhpcyBvcmlnaW4uICBHZXQgdGhlIGN1cnJlbnQgZGF0YWJhc2UgZmlsZSBwYXRoIG9mIGVhY2gg
ZGF0YWJhc2UgYW5kIHNlZSBpZgogICAgICAgICAgICAgICAgIC8vIGl0IHN0aWxsIG1hdGNoZXMg
dGhlIHBhdGggc3RvcmVkIGluIHRoZSBvcGVuZWQgZGF0YWJhc2Ugb2JqZWN0LgotICAgICAgICAg
ICAgICAgIERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5kID0gZGF0
YWJhc2VOYW1lTWFwLT5lbmQoKTsKLSAgICAgICAgICAgICAgICBmb3IgKERhdGFiYXNlTmFtZU1h
cDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwSXQgPSBkYXRhYmFzZU5hbWVNYXAtPmJlZ2luKCk7
IGRiTmFtZU1hcEl0ICE9IGRiTmFtZU1hcEVuZDsgKytkYk5hbWVNYXBJdCkgewotICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VOYW1lID0gZGJOYW1lTWFwSXQtPmtleTsKKyAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIGRhdGFiYXNlTmFtZSA6ICpkYXRhYmFzZU5hbWVNYXApIHsK
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlRmlsZU5hbWU7CiAgICAgICAgICAg
ICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBw
YXRoIEZST00gRGF0YWJhc2VzIFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewogICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJh
c2VJZGVudGlmaWVyKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRU
ZXh0KDIsIGRhdGFiYXNlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQu
YmluZFRleHQoMiwgZGF0YWJhc2VOYW1lLmtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhdGVtZW50LnN0ZXAoKSA9PSBTUUxJVEVfUk9XKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFiYXNlRmlsZU5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBib29s
IGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIERhdGFi
YXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1hcEl0LT52YWx1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiRW5kID0gZGF0YWJhc2VTZXQtPmVu
ZCgpOwotICAgICAgICAgICAgICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRv
ciBkYkl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGRiSXQgIT0gZGJFbmQ7ICsrZGJJdCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgRGF0YWJhc2UqIGRiID0gc3RhdGljX2Nhc3Q8RGF0YWJh
c2UqPigqZGJJdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgZm9yIChhdXRvJiBkYiA6ICpkYXRhYmFzZU5hbWUudmFsdWUpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoaXMgZGF0YWJhc2UgaGFzIGFscmVhZHkgYmVl
biBtYXJrZWQgYXMgZGVsZXRlZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYi0+ZGVs
ZXRlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTI1OCw3
ICsxMjQzLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRh
YmFzZXMoKQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIGRhdGFiYXNlIG5vIGxvbmdlciBleGlzdHMsIHdlIHNob3VsZCByZW1lbWJlciB0byByZW1v
dmUgaXQgZnJvbSB0aGUgT3JpZ2luUXVvdGFNYW5hZ2VyIGxhdGVyLgogICAgICAgICAgICAgICAg
ICAgICBpZiAoZm91bmREZWxldGVkRGF0YWJhc2UgJiYgZGF0YWJhc2VGaWxlTmFtZS5pc051bGwo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREYXRhYmFzZU5hbWVzRm9yVGhpc09y
aWdpbi5hcHBlbmQoZGF0YWJhc2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0
ZWREYXRhYmFzZU5hbWVzRm9yVGhpc09yaWdpbi5hcHBlbmQoZGF0YWJhc2VOYW1lLmtleSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICgh
ZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JUaGlzT3JpZ2luLmlzRW1wdHkoKSkKQEAgLTEyNjcsMTkg
KzEyNTIsMTggQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRh
YmFzZXMoKQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBkZWxldGVkRGF0YWJhc2VzLnNpemUoKTsgKytpKQotICAgICAgICBkZWxldGVkRGF0YWJh
c2VzW2ldLT5tYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsKLSAgICAKLSAgICBEZWxldGVkRGF0YWJh
c2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGRlbGV0ZWREYXRhYmFzZU1hcC5lbmQoKTsKLSAg
ICBmb3IgKERlbGV0ZWREYXRhYmFzZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkZWxldGVkRGF0
YWJhc2VNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNlY3VyaXR5T3Jp
Z2luKiBvcmlnaW4gPSBpdC0+a2V5LmdldCgpOworICAgIGZvciAoYXV0byYgZGVsZXRlZERhdGFi
YXNlIDogZGVsZXRlZERhdGFiYXNlcykKKyAgICAgICAgZGVsZXRlZERhdGFiYXNlLT5tYXJrQXNE
ZWxldGVkQW5kQ2xvc2UoKTsKKworICAgIGZvciAoYXV0byYgZGVsZXRlZERhdGFiYXNlIDogZGVs
ZXRlZERhdGFiYXNlTWFwKSB7CisgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBkZWxl
dGVkRGF0YWJhc2Uua2V5LmdldCgpOwogICAgICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKICAgICAgICAgCi0g
ICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBkYXRhYmFzZU5hbWVzID0gaXQtPnZhbHVlOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YWJhc2VOYW1lcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YWJhc2VOYW1lcyA9IGRlbGV0
ZWREYXRhYmFzZS52YWx1ZTsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZU5hbWUgOiBkYXRh
YmFzZU5hbWVzKSB7CiAgICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAg
bV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2Uob3JpZ2luLCBkYXRhYmFzZU5hbWVz
W2ldKTsKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFz
ZShvcmlnaW4sIGRhdGFiYXNlTmFtZSk7CiAgICAgICAgIH0gICAgICAgIAogICAgIH0KIH0KQEAg
LTEzNTMsMTkgKzEzMzcsMTAgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlc1Bh
dXNlZChib29sIHBhdXNlZCkKIAogICAgIC8vIFRoaXMgd2Fsa2luZyBpcyAtIHNhZGx5IC0gdGhl
IG9ubHkgcmVsaWFibGUgd2F5IHRvIGdldCBhdCBlYWNoIG9wZW4gZGF0YWJhc2UgdGhyZWFkLgog
ICAgIC8vIFRoaXMgd2lsbCBiZSBjbGVhbmVyIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzU2ODA0NDE+
IG9yIHNvbWUgb3RoZXIgREIgdGhyZWFkIGNvbnNvbGlkYXRpb24gdGFrZXMgcGxhY2UuCi0gICAg
RGF0YWJhc2VPcmlnaW5NYXA6Oml0ZXJhdG9yIGkgPSBtX29wZW5EYXRhYmFzZU1hcC5nZXQoKS0+
YmVnaW4oKTsKLSAgICBEYXRhYmFzZU9yaWdpbk1hcDo6aXRlcmF0b3IgZW5kID0gbV9vcGVuRGF0
YWJhc2VNYXAuZ2V0KCktPmVuZCgpOwotICAgIAotICAgIGZvciAoOyBpICE9IGVuZDsgKytpKSB7
Ci0gICAgICAgIERhdGFiYXNlTmFtZU1hcCogZGF0YWJhc2VOYW1lTWFwID0gaS0+dmFsdWU7Ci0g
ICAgICAgIERhdGFiYXNlTmFtZU1hcDo6aXRlcmF0b3IgaiA9IGRhdGFiYXNlTmFtZU1hcC0+YmVn
aW4oKTsKLSAgICAgICAgRGF0YWJhc2VOYW1lTWFwOjppdGVyYXRvciBkYk5hbWVNYXBFbmQgPSBk
YXRhYmFzZU5hbWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKDsgaiAhPSBkYk5hbWVNYXBFbmQ7
ICsraikgewotICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gai0+dmFsdWU7
Ci0gICAgICAgICAgICBEYXRhYmFzZVNldDo6aXRlcmF0b3IgayA9IGRhdGFiYXNlU2V0LT5iZWdp
bigpOwotICAgICAgICAgICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGRiU2V0RW5kID0gZGF0YWJh
c2VTZXQtPmVuZCgpOwotICAgICAgICAgICAgZm9yICg7IGsgIT0gZGJTZXRFbmQ7ICsraykgewot
ICAgICAgICAgICAgICAgIERhdGFiYXNlQ29udGV4dCogY29udGV4dCA9ICgqayktPmRhdGFiYXNl
Q29udGV4dCgpOworICAgIGZvciAoYXV0byYgZGF0YWJhc2VOYW1lTWFwIDogbV9vcGVuRGF0YWJh
c2VNYXAtPnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VTZXQgOiBkYXRh
YmFzZU5hbWVNYXAtPnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGRhdGFiYXNl
IDogKmRhdGFiYXNlU2V0KSB7CisgICAgICAgICAgICAgICAgRGF0YWJhc2VDb250ZXh0KiBjb250
ZXh0ID0gZGF0YWJhc2UtPmRhdGFiYXNlQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnNldFBhdXNlZChwYXVzZWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmNwcAppbmRleCA5ZjYyMjM0YWMzOWVjODQ1ZDVkNGUxMGRlYzEw
MjM4M2VhZGExNmY5Li44OWE2MmFiNzY3NzJmMjZjMjI5ZGViNzkzMTI5MzQ4ODdjM2ZmMTYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKQEAgLTExOSwyMSArMTE5LDE0IEBAIHZv
aWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6c2h1dGRvd24oKQogICAgIG1faXNTaHV0dGlu
Z0Rvd24gPSB0cnVlOwogCiAgICAgLy8gTm90aWZ5IGFsbCB0cmFuc2FjdGlvbnMgaW4gcHJvZ3Jl
c3MgdGhhdCB0aGUgZGF0YWJhc2UgdGhyZWFkIGlzIHNodXR0aW5nIGRvd24KLSAgICBmb3IgKENv
b3JkaW5hdGlvbkluZm9NYXA6Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1f
Y29vcmRpbmF0aW9uSW5mb01hcC5iZWdpbigpOwotICAgICAgICAgY29vcmRpbmF0aW9uSW5mb0l0
ZXJhdG9yICE9IG1fY29vcmRpbmF0aW9uSW5mb01hcC5lbmQoKTsgKytjb29yZGluYXRpb25JbmZv
SXRlcmF0b3IpIHsKLSAgICAgICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlv
bkluZm9JdGVyYXRvci0+dmFsdWU7Ci0KKyAgICBmb3IgKGF1dG8mIGluZm8gOiBtX2Nvb3JkaW5h
dGlvbkluZm9NYXAudmFsdWVzKCkpIHsKICAgICAgICAgLy8gQ2xlYW4gdXAgdHJhbnNhY3Rpb25z
IHRoYXQgaGF2ZSByZWFjaGVkICJsb2NrQWNxdWlyZWQiOgogICAgICAgICAvLyBUcmFuc2FjdGlv
biBwaGFzZSA0IGNsZWFudXAuIFNlZSBjb21tZW50IG9uICJXaGF0IGhhcHBlbnMgaWYgYQogICAg
ICAgICAvLyB0cmFuc2FjdGlvbiBpcyBpbnRlcnJ1cHRlZD8iIGF0IHRoZSB0b3Agb2YgU1FMVHJh
bnNhY3Rpb25CYWNrZW5kLmNwcC4KICAgICAgICAgaWYgKGluZm8uYWN0aXZlV3JpdGVUcmFuc2Fj
dGlvbikKICAgICAgICAgICAgIGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbi0+bm90aWZ5RGF0
YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVmUHRy
PFNRTFRyYW5zYWN0aW9uQmFja2VuZD4+OjppdGVyYXRvciBhY3RpdmVSZWFkVHJhbnNhY3Rpb25z
SXRlcmF0b3IgPQotICAgICAgICAgICAgICAgICAgICAgaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rp
b25zLmJlZ2luKCk7Ci0gICAgICAgICAgICAgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9y
ICE9IGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5lbmQoKTsKLSAgICAgICAgICAgICArK2Fj
dGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvcikgewotICAgICAgICAgICAgKCphY3RpdmVSZWFk
VHJhbnNhY3Rpb25zSXRlcmF0b3IpLT5ub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3du
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiB0cmFuc2FjdGlvbiA6IGluZm8uYWN0
aXZlUmVhZFRyYW5zYWN0aW9ucykKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5ub3RpZnlEYXRh
YmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7CiAKICAgICAgICAgLy8gQ2xlYW4gdXAgdHJhbnNh
Y3Rpb25zIHRoYXQgaGF2ZSBOT1QgcmVhY2hlZCAibG9ja0FjcXVpcmVkIjoKICAgICAgICAgLy8g
VHJhbnNhY3Rpb24gcGhhc2UgMyBjbGVhbnVwLiBTZWUgY29tbWVudCBvbiAiV2hhdCBoYXBwZW5z
IGlmIGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5j
cHAKaW5kZXggZTM1OWIzYmRlNTgyZmJhMDFhMDg4NTc0YTgyMmU5MzYzNTdjNjdmMC4uMDMxNWZi
ZTNmY2QwY2FkNjFhODg1ZjhlNjhhZTk3ZGUxNzU5YzJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKQEAgLTI2MCwxOCArMjYwLDE4IEBA
IHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcHJvdG9jb2xzLCBFeGNlCiAgICAgLy8KICAgICAvLyBIZXJlLCB3ZSB0aHJvdyBT
WU5UQVhfRVJSIGlmIHRoZSBnaXZlbiBwcm90b2NvbHMgZG8gbm90IG1lZXQgdGhlIGxhdHRlciBj
cml0ZXJpYS4gVGhpcyBiZWhhdmlvciBkb2VzIG5vdAogICAgIC8vIGNvbXBseSB3aXRoIFdlYlNv
Y2tldCBBUEkgc3BlY2lmaWNhdGlvbiwgYnV0IGl0IHNlZW1zIHRvIGJlIHRoZSBvbmx5IHJlYXNv
bmFibGUgd2F5IHRvIGhhbmRsZSB0aGlzIGNvbmZsaWN0LgotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcHJvdG9jb2xzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghaXNWYWxpZFByb3Rv
Y29sU3RyaW5nKHByb3RvY29sc1tpXSkpIHsKLSAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZl
bDo6RXJyb3IsICJXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0ICciICsgZW5jb2RlUHJvdG9j
b2xTdHJpbmcocHJvdG9jb2xzW2ldKSArICInIik7CisgICAgZm9yIChhdXRvJiBwcm90b2NvbCA6
IHByb3RvY29scykgeworICAgICAgICBpZiAoIWlzVmFsaWRQcm90b2NvbFN0cmluZyhwcm90b2Nv
bCkpIHsKKyAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1l
c3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJXcm9uZyBwcm90
b2NvbCBmb3IgV2ViU29ja2V0ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wpICsg
IiciKTsKICAgICAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgSGFz
aFNldDxTdHJpbmc+IHZpc2l0ZWQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm90b2Nv
bHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCF2aXNpdGVkLmFkZChwcm90b2NvbHNbaV0p
LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRk
Q29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJX
ZWJTb2NrZXQgcHJvdG9jb2xzIGNvbnRhaW4gZHVwbGljYXRlczogJyIgKyBlbmNvZGVQcm90b2Nv
bFN0cmluZyhwcm90b2NvbHNbaV0pICsgIiciKTsKKyAgICBmb3IgKGF1dG8mIHByb3RvY29sIDog
cHJvdG9jb2xzKSB7CisgICAgICAgIGlmICghdmlzaXRlZC5hZGQocHJvdG9jb2wpLmlzTmV3RW50
cnkpIHsKKyAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1l
c3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJXZWJTb2NrZXQg
cHJvdG9jb2xzIGNvbnRhaW4gZHVwbGljYXRlczogJyIgKyBlbmNvZGVQcm90b2NvbFN0cmluZyhw
cm90b2NvbCkgKyAiJyIpOwogICAgICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKICAgICAgICAg
ICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRj
aGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRl
bnNpb25EaXNwYXRjaGVyLmNwcAppbmRleCAxOWUyNWExYTVhMDUwM2MwYTNmZDdkZTZiNDYzY2E0
MDViMzQ2YTgxLi4wOWQ5OWU5ZThlZGQ4ZWY4NzY0M2RhZmVmOWY2NTJmMTk5MGRlNjk1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5z
aW9uRGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCkBAIC01MCw4ICs1MCw4IEBAIHZvaWQg
V2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6cmVzZXQoKQogCiB2b2lkIFdlYlNvY2tldEV4
dGVuc2lvbkRpc3BhdGNoZXI6OmFkZFByb2Nlc3NvcihzdGQ6OnVuaXF1ZV9wdHI8V2ViU29ja2V0
RXh0ZW5zaW9uUHJvY2Vzc29yPiBwcm9jZXNzb3IpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3Byb2Nlc3NvcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fcHJvY2Vzc29y
c1tpXS0+ZXh0ZW5zaW9uVG9rZW4oKSA9PSBwcm9jZXNzb3ItPmV4dGVuc2lvblRva2VuKCkpCisg
ICAgZm9yIChhdXRvJiBleHRlbnNpb25Qcm9jZXNzb3IgOiBtX3Byb2Nlc3NvcnMpIHsKKyAgICAg
ICAgaWYgKGV4dGVuc2lvblByb2Nlc3Nvci0+ZXh0ZW5zaW9uVG9rZW4oKSA9PSBwcm9jZXNzb3It
PmV4dGVuc2lvblRva2VuKCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VS
VChwcm9jZXNzb3ItPmhhbmRzaGFrZVN0cmluZygpLmxlbmd0aCgpKTsKQEAgLTgxLDEyICs4MSwx
MiBAQCB2b2lkIFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaQogICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9u
c0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1
aWxkZXIuYXBwZW5kKGV4dGVuc2lvblRva2VuKTsKICAgICAvLyBGSVhNRTogU2hvdWxkIHVzZSBM
aXN0SGFzaFNldCB0byBrZWVwIHRoZSBvcmRlciBvZiB0aGUgcGFyYW1ldGVycy4KLSAgICBmb3Ig
KEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IGV4dGVu
c2lvblBhcmFtZXRlcnMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZXh0ZW5zaW9uUGFyYW1ldGVycy5l
bmQoKTsgKytpdGVyYXRvcikgeworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZXh0ZW5zaW9u
UGFyYW1ldGVycykgewogICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5k
TGl0ZXJhbCgiOyAiKTsKLSAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVu
ZChpdGVyYXRvci0+a2V5KTsKLSAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUuaXNOdWxsKCkp
IHsKKyAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChwYXJhbWV0ZXIu
a2V5KTsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXIudmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAg
ICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoJz0nKTsKLSAgICAgICAgICAg
IG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsKKyAg
ICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQocGFyYW1ldGVyLnZh
bHVlKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTExOCw5ICsxMTgsOCBAQCBib29sIFdlYlNv
Y2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OnByb2Nlc3NIZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcm
IGhlYWRlclZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAg
ICAgICAgc2l6ZV90IGluZGV4OwotICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtX3By
b2Nlc3NvcnMuc2l6ZSgpOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBXZWJTb2NrZXRFeHRlbnNp
b25Qcm9jZXNzb3IqIHByb2Nlc3NvciA9IG1fcHJvY2Vzc29yc1tpbmRleF0uZ2V0KCk7CisgICAg
ICAgIHNpemVfdCBpbmRleCA9IDA7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc29yIDogbV9w
cm9jZXNzb3JzKSB7CiAgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uVG9rZW4gPT0gcHJvY2Vzc29y
LT5leHRlbnNpb25Ub2tlbigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3Nvci0+cHJv
Y2Vzc1Jlc3BvbnNlKGV4dGVuc2lvblBhcmFtZXRlcnMpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKGV4dGVuc2lvblRva2VuLCBleHRlbnNpb25QYXJhbWV0
ZXJzKTsKQEAgLTEyOSw2ICsxMjgsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNo
ZXI6OnByb2Nlc3NIZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmIGhlYWRlclZhbHVlKQogICAgICAg
ICAgICAgICAgIGZhaWwocHJvY2Vzc29yLT5mYWlsdXJlUmVhc29uKCkpOwogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsraW5kZXg7CiAg
ICAgICAgIH0KICAgICAgICAgLy8gVGhlcmUgaXMgbm8gZXh0ZW5zaW9uIHdoaWNoIGNhbiBwcm9j
ZXNzIHRoZSByZXNwb25zZS4KICAgICAgICAgaWYgKGluZGV4ID09IG1fcHJvY2Vzc29ycy5zaXpl
KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJT
b2NrZXRIYW5kc2hha2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldEhhbmRzaGFrZS5jcHAKaW5kZXggMzIyYWE0MDFkNGUwZWM0MDFiYjI4M2ZiZDUzZWFh
ZGQ1NWRhYTc1Zi4uNTUxZGRmMjJhOTdlMzMxMjg4OTQ5ODQ1OTIxMGVmYTU2ODc1MzJlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tl
dEhhbmRzaGFrZS5jcHAKQEAgLTIyNCw4ICsyMjQsOCBAQCBDU3RyaW5nIFdlYlNvY2tldEhhbmRz
aGFrZTo6Y2xpZW50SGFuZHNoYWtlTWVzc2FnZSgpIGNvbnN0CiAgICAgLy8gb3JkZXIgaXMgbm90
IG1lYW5pbmdmdWwuICBUaHVzLCBpdCdzIG9rIHRvIHNlbmQgdGhlIG9yZGVyIHdlIGNvbnN0cnVj
dGVkCiAgICAgLy8gdGhlIGZpZWxkcy4KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmll
bGRzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZpZWxkc1tpXSk7Cisg
ICAgZm9yIChhdXRvJiBmaWVsZCA6IGZpZWxkcykgeworICAgICAgICBidWlsZGVyLmFwcGVuZChm
aWVsZCk7CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXHJcbiIpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>254167</attachid>
            <date>2015-06-03 04:32:23 -0700</date>
            <delta_ts>2015-06-08 06:48:41 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews102 for mac-mavericks</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>0</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>254170</attachid>
            <date>2015-06-03 05:36:02 -0700</date>
            <delta_ts>2015-06-03 05:36:02 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews104 for mac-mavericks-wk2</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>0</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>254172</attachid>
            <date>2015-06-03 06:59:08 -0700</date>
            <delta_ts>2015-06-03 06:59:08 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews106 for mac-mavericks-wk2</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>0</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>254176</attachid>
            <date>2015-06-03 07:46:09 -0700</date>
            <delta_ts>2015-06-03 07:46:09 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews100 for mac-mavericks</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>0</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>254177</attachid>
            <date>2015-06-03 08:39:09 -0700</date>
            <delta_ts>2015-06-03 08:39:09 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews105 for mac-mavericks-wk2</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>0</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>254179</attachid>
            <date>2015-06-03 09:05:14 -0700</date>
            <delta_ts>2015-06-03 09:05:14 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews101 for mac-mavericks</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>0</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>254191</attachid>
            <date>2015-06-03 11:55:44 -0700</date>
            <delta_ts>2015-06-03 11:55:44 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews103 for mac-mavericks</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>0</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>254199</attachid>
            <date>2015-06-03 12:45:16 -0700</date>
            <delta_ts>2015-06-03 12:45:16 -0700</delta_ts>
            <desc>Archive of layout-test-results from ews107 for mac-mavericks-wk2</desc>
            <filename>layout-test-results.zip</filename>
            <type>application/zip</type>
            <size>0</size>
            <attacher name="Build Bot">buildbot</attacher>
            
              <data encoding="base64"></data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254258</attachid>
            <date>2015-06-04 00:42:37 -0700</date>
            <delta_ts>2015-06-07 20:00:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145541-20150604164214.patch</filename>
            <type>text/plain</type>
            <size>51110</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2FmOTc4MGM4NmRlOTVh
NWU4NjdlZTljMTZkNjY3NzBjMzgyODdkMC4uMzU3MTY1MmNlZTdlNzBhNzE2MGVmMmRmOTllNjVm
N2YwNzY2NWI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE1LTA2LTA0ICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL01vZHVsZXMgLSAyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNobmFn
ZXMuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJUQ0NvbmZpZ3VyYXRpb246OmljZVNlcnZlcnMpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSVENEVE1GU2VuZGVyOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UlRDRGF0YUNoYW5uZWw6OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpwcm9jZXNzSWNlU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0
aW9uOjp+UlRDUGVlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5l
Y3Rpb246OmdldFN0cmVhbUJ5SWQpOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rp
b246Omhhc0xvY2FsU3RyZWFtV2l0aFRyYWNrSWQpOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVl
ckNvbm5lY3Rpb246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246
OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENTdGF0c1JlcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c1JlcG9ydDo6
bmFtZXMpOgorICAgICAgICAqIE1vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRv
ckNvbnRlbnRVdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0UHJvdG9jb2xIYW5kbGVy
V2hpdGVsaXN0KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAg
ICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9CdWZmZXI6Om1lbW9yeUNvc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVk
aW9Db250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVk
aWFTdHJlYW1Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJlZkZp
bmlzaGVkU291cmNlTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJl
ZlVuZmluaXNoZWRTb3VyY2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6
OmhhbmRsZURlZmVycmVkRmluaXNoRGVyZWZzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29u
dGV4dDo6aGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Db250ZXh0Ojp1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKToKKyAg
ICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBdWRpb05vZGU6OnVwZGF0ZUNoYW5uZWxzRm9ySW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Ob2RlOjpwdWxsSW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9k
ZTo6aW5wdXRzQXJlU2lsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6c2lsZW5j
ZU91dHB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjp1bnNpbGVuY2VPdXRwdXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZW5hYmxlT3V0cHV0c0lmTmVjZXNzYXJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZGlzYWJsZU91dHB1dHNJZk5lY2Vzc2Fy
eSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OmZpbmlzaERlcmVmKToKKyAgICAgICAg
KiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvTm9kZUlucHV0OjpudW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvTm9kZUlucHV0OjpzdW1BbGxDb25uZWN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGVPdXRwdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0
cHV0Ojpwcm9wYWdhdGVDaGFubmVsQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2Rl
T3V0cHV0OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6ZW5h
YmxlKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1ZXMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvUGFyYW1UaW1lbGluZTo6aW5zZXJ0RXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMv
d2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TdW1taW5nSnVuY3Rpb246OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6c2V0QXVkaW9Gb3JtYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6Y29uc3VtZUF1ZGlvKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V2F2ZVNoYXBlclByb2Nlc3Nvcjo6c2V0T3ZlcnNhbXBsZSk6CisgICAgICAgICogTW9kdWxl
cy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRocmVhZDo6aGFuZGxlUGF1c2VkUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNl
L0RhdGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6
OmludGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0
YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6
OkRhdGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnVzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJh
Y2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlc1BhdXNlZCk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tl
dDo6Y29ubmVjdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0RXh0ZW5zaW9u
RGlzcGF0Y2hlcjo6YWRkUHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4
dGVuc2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OnByb2Nlc3NIZWFkZXJWYWx1ZSk6
CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3Nh
Z2UpOgorCiAyMDE1LTA2LTAzICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVXNlIGJvcmRlckJveFJlY3QgaW5zdGVhZCBvZiBjb250ZW50Qm94UmVjdCBmb3IgYmFj
a2Ryb3AgZmlsdGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENDb25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaAppbmRleCA0ZmZhOTZlMDJlMzI4MWRjYzI2ODE0YzM4MjZl
YWQ1YjUwZTM4NmU0Li42MzdkNGQ5Y2JiYWJiOGQwZWRjMzg4ZDBkZDA0OTMzZWI1ZjY4MTc1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0NvbmZpZ3Vy
YXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0NvbmZp
Z3VyYXRpb24uaApAQCAtNjcsMTAgKzY3LDggQEAgcHVibGljOgogICAgIFZlY3RvcjxSZWZQdHI8
UlRDSWNlU2VydmVyPj4gaWNlU2VydmVycygpIGNvbnN0CiAgICAgewogICAgICAgICBWZWN0b3I8
UmVmUHRyPFJUQ0ljZVNlcnZlcj4+IHNlcnZlcnM7Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8UlRD
SWNlU2VydmVyUHJpdmF0ZT4+IHByaXZhdGVTZXJ2ZXJzID0gbV9wcml2YXRlLT5pY2VTZXJ2ZXJz
KCk7Ci0KLSAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBwcml2YXRlU2VydmVycy5iZWdpbigpOyBp
dGVyICE9IHByaXZhdGVTZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICAgICBzZXJ2ZXJz
LmFwcGVuZChSVENJY2VTZXJ2ZXI6OmNyZWF0ZSgqaXRlcikpOworICAgICAgICBmb3IgKGF1dG8m
IHNlcnZlciA6IG1fcHJpdmF0ZS0+aWNlU2VydmVycygpKQorICAgICAgICAgICAgc2VydmVycy5h
cHBlbmQoUlRDSWNlU2VydmVyOjpjcmVhdGUoc2VydmVyKSk7CiAKICAgICAgICAgcmV0dXJuIHNl
cnZlcnM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENEVE1GU2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDRFRNRlNlbmRlci5jcHAKaW5kZXggM2NmZmI4NmI2YTVkYjMzNWYwYTk5NTY4YjUwNTFh
MGE0MjQyY2YwOS4uNTI3YjVkMTlkOTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4YmNkNWQ5OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0RUTUZTZW5k
ZXIuY3BwCkBAIC0xNjEsOSArMTYxLDggQEAgdm9pZCBSVENEVE1GU2VuZGVyOjpzY2hlZHVsZWRF
dmVudFRpbWVyRmlyZWQoKQogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CiAgICAg
ZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVu
dD4+OjppdGVyYXRvciBpdCA9IGV2ZW50cy5iZWdpbigpOwotICAgIGZvciAoOyBpdCAhPSBldmVu
dHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoKCppdCkucmVsZWFzZSgpKTsK
KyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNwYXRjaEV2ZW50KGV2
ZW50LnJlbGVhc2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKaW5k
ZXggOTBkMDZjNzliOTc0ZTgzODJlMDVkNzNmMmJiOGRkNGFkYmViMWY1Yi4uNGE1YWE4NzU0MDM5
M2ZkYWMzMmQwZWE3MzU2MDZiYmNjNmZlODZkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAgLTMyMCw5ICszMjAs
OCBAQCB2b2lkIFJUQ0RhdGFDaGFubmVsOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAg
IFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CiAgICAgZXZlbnRzLnN3YXAobV9zY2hlZHVs
ZWRFdmVudHMpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+OjppdGVyYXRvciBpdCA9IGV2
ZW50cy5iZWdpbigpOwotICAgIGZvciAoOyBpdCAhPSBldmVudHMuZW5kKCk7ICsraXQpCi0gICAg
ICAgIGRpc3BhdGNoRXZlbnQoKCppdCkucmVsZWFzZSgpKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50
IDogZXZlbnRzKQorICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CiAKICAg
ICBldmVudHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggMTYwOTgxNmI4NTk5ZDBk
MGRhMzMxNDJhYjJlMDY4OTA0MTJhNTVkNC4uYjkwNDA0Y2FhYTI0MjAzODI5YTc0ZDNkOGE3ZDIy
NGQwNGY3YTdlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTk1LDggKzk1LDggQEAgc3RhdGljIEV4
Y2VwdGlvbkNvZGUgcHJvY2Vzc0ljZVNlcnZlcihjb25zdCBEaWN0aW9uYXJ5JiBpY2VTZXJ2ZXIs
IFJUQ0NvbmZpZ3VyYXQKICAgICAgICAgcmV0dXJuIElOVkFMSURfQUNDRVNTX0VSUjsKIAogICAg
IGlmICh1cmxTdHJpbmcuZmluZCgnLCcpICE9IG5vdEZvdW5kICYmIGljZVNlcnZlci5nZXQoInVy
bHMiLCB1cmxzTGlzdCkgJiYgdXJsc0xpc3Quc2l6ZSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byBp
dGVyID0gdXJsc0xpc3QuYmVnaW4oKTsgaXRlciAhPSB1cmxzTGlzdC5lbmQoKTsgKytpdGVyKSB7
Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlSWNlU2VydmVyVVJMKCppdGVyKSkKKyAgICAgICAg
Zm9yIChhdXRvJiB1cmwgOiB1cmxzTGlzdCkgeworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUlj
ZVNlcnZlclVSTCh1cmwpKQogICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX0FDQ0VTU19F
UlI7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjAzLDggKzIwMyw4IEBAIFJUQ1BlZXJD
b25uZWN0aW9uOjp+UlRDUGVlckNvbm5lY3Rpb24oKQogewogICAgIHN0b3AoKTsKIAotICAgIGZv
ciAoYXV0byBzdHJlYW0gPSBtX2xvY2FsU3RyZWFtcy5iZWdpbigpLCBlbmQgPSBtX2xvY2FsU3Ry
ZWFtcy5lbmQoKTsgc3RyZWFtICE9IGVuZDsgKytzdHJlYW0pCi0gICAgICAgICgqc3RyZWFtKS0+
cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CisgICAgZm9yIChhdXRvJiBsb2NhbFN0cmVhbSA6IG1fbG9j
YWxTdHJlYW1zKQorICAgICAgICBsb2NhbFN0cmVhbS0+cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiB9
CiAKIHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZU9mZmVyKFBhc3NSZWZQdHI8UlRDU2Vz
c2lvbkRlc2NyaXB0aW9uQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxSVENQ
ZWVyQ29ubmVjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGNvbnN0IERpY3Rpb25h
cnkmIG9mZmVyT3B0aW9ucywgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC01MTQsMTQgKzUxNCwxNCBA
QCBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4gUlRDUGVlckNvbm5lY3Rpb246OmdldFJlbW90
ZVN0cmVhbXMoKSBjb25zdAogCiBNZWRpYVN0cmVhbSogUlRDUGVlckNvbm5lY3Rpb246OmdldFN0
cmVhbUJ5SWQoY29uc3QgU3RyaW5nJiBzdHJlYW1JZCkKIHsKLSAgICBmb3IgKGF1dG8gaXRlciA9
IG1fbG9jYWxTdHJlYW1zLmJlZ2luKCk7IGl0ZXIgIT0gbV9sb2NhbFN0cmVhbXMuZW5kKCk7ICsr
aXRlcikgewotICAgICAgICBpZiAoKCppdGVyKS0+aWQoKSA9PSBzdHJlYW1JZCkKLSAgICAgICAg
ICAgIHJldHVybiBpdGVyLT5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIGxvY2FsU3RyZWFtIDogbV9s
b2NhbFN0cmVhbXMpIHsKKyAgICAgICAgaWYgKGxvY2FsU3RyZWFtLT5pZCgpID09IHN0cmVhbUlk
KQorICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RyZWFtLmdldCgpOwogICAgIH0KIAotICAgIGZv
ciAoYXV0byBpdGVyID0gbV9yZW1vdGVTdHJlYW1zLmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW1vdGVT
dHJlYW1zLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmlkKCkgPT0gc3Ry
ZWFtSWQpCi0gICAgICAgICAgICByZXR1cm4gaXRlci0+Z2V0KCk7CisgICAgZm9yIChhdXRvJiBy
ZW1vdGVTdHJlYW0gOiBtX3JlbW90ZVN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHJlbW90ZVN0cmVh
bS0+aWQoKSA9PSBzdHJlYW1JZCkKKyAgICAgICAgICAgIHJldHVybiByZW1vdGVTdHJlYW0uZ2V0
KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NTEsOCArNTUxLDggQEAgUGFz
c1JlZlB0cjxSVENEYXRhQ2hhbm5lbD4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZURhdGFDaGFu
bmVsKFN0cmluZyBsYWJlbCwgY28KIAogYm9vbCBSVENQZWVyQ29ubmVjdGlvbjo6aGFzTG9jYWxT
dHJlYW1XaXRoVHJhY2tJZChjb25zdCBTdHJpbmcmIHRyYWNrSWQpCiB7Ci0gICAgZm9yIChhdXRv
IGl0ZXIgPSBtX2xvY2FsU3RyZWFtcy5iZWdpbigpOyBpdGVyICE9IG1fbG9jYWxTdHJlYW1zLmVu
ZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmdldFRyYWNrQnlJZCh0cmFja0lk
KSkKKyAgICBmb3IgKGF1dG8mIGxvY2FsU3RyZWFtIDogbV9sb2NhbFN0cmVhbXMpIHsKKyAgICAg
ICAgaWYgKGxvY2FsU3RyZWFtLT5nZXRUcmFja0J5SWQodHJhY2tJZCkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjg1LDkgKzY4NSw4IEBA
IHZvaWQgUlRDUGVlckNvbm5lY3Rpb246OnN0b3AoKQogICAgIG1faWNlQ29ubmVjdGlvblN0YXRl
ID0gSWNlQ29ubmVjdGlvblN0YXRlQ2xvc2VkOwogICAgIG1fc2lnbmFsaW5nU3RhdGUgPSBTaWdu
YWxpbmdTdGF0ZUNsb3NlZDsKIAotICAgIFZlY3RvcjxSZWZQdHI8UlRDRGF0YUNoYW5uZWw+Pjo6
aXRlcmF0b3IgaSA9IG1fZGF0YUNoYW5uZWxzLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gbV9k
YXRhQ2hhbm5lbHMuZW5kKCk7ICsraSkKLSAgICAgICAgKCppKS0+c3RvcCgpOworICAgIGZvciAo
YXV0byYgY2hhbm5lbCA6IG1fZGF0YUNoYW5uZWxzKQorICAgICAgICBjaGFubmVsLT5zdG9wKCk7
CiB9CiAKIGNvbnN0IGNoYXIqIFJUQ1BlZXJDb25uZWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1l
KCkgY29uc3QKQEAgLTc0Myw5ICs3NDIsOCBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpzY2hl
ZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7
CiAgICAgZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCi0gICAgVmVjdG9yPFJlZlB0
cjxFdmVudD4+OjppdGVyYXRvciBpdCA9IGV2ZW50cy5iZWdpbigpOwotICAgIGZvciAoOyBpdCAh
PSBldmVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoKCppdCkucmVsZWFz
ZSgpKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNwYXRjaEV2
ZW50KGV2ZW50LnJlbGVhc2UoKSk7CiAKICAgICBldmVudHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAK
aW5kZXggOTg5YTc2ZmZjMDg2NzEzYTFmNjA2ZmFjNWRkNGQxNmNhMzkzOWIzNS4uYTAzNTYzNDUw
ZTRhNTVhNjc0YjQ1OGQzNGIxMzNhYjc1MmY0NTYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKQEAgLTQ4LDkgKzQ4
LDggQEAgUlRDU3RhdHNSZXBvcnQ6OlJUQ1N0YXRzUmVwb3J0KGNvbnN0IFN0cmluZyYgaWQsIGNv
bnN0IFN0cmluZyYgdHlwZSwgZG91YmxlIHRpbWUKIFZlY3RvcjxTdHJpbmc+IFJUQ1N0YXRzUmVw
b3J0OjpuYW1lcygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwotICAgIGZv
ciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0cy5i
ZWdpbigpOyBpdCAhPSBtX3N0YXRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoaXQtPmtleSk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgc3RhdCA6IG1fc3RhdHMua2V5cygp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxz
L05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmln
YXRvcmNvbnRlbnR1dGlscy9OYXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwCmluZGV4IGNjYTdkOWUz
MTk0YzgwNWRiOTIwOGZlZTVjNzBmNWYyMjFiNWQyOWMuLjU2ODY3MTUyOWFiNTA4MDRhOTc5Y2E2
MzQzY2RlYjJhYTJhMzIwNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2
aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9uYXZpZ2F0b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0
aWxzLmNwcApAQCAtNDQsMjkgKzQ0LDggQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiogcHJvdG9j
b2xXaGl0ZWxpc3Q7CiBzdGF0aWMgdm9pZCBpbml0UHJvdG9jb2xIYW5kbGVyV2hpdGVsaXN0KCkK
IHsKICAgICBwcm90b2NvbFdoaXRlbGlzdCA9IG5ldyBIYXNoU2V0PFN0cmluZz47Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHByb3RvY29sc1tdID0gewotICAgICAgICAiYml0Y29pbiIsCi0gICAg
ICAgICJnZW8iLAotICAgICAgICAiaW0iLAotICAgICAgICAiaXJjIiwKLSAgICAgICAgImlyY3Mi
LAotICAgICAgICAibWFnbmV0IiwKLSAgICAgICAgIm1haWx0byIsCi0gICAgICAgICJtbXMiLAot
ICAgICAgICAibmV3cyIsCi0gICAgICAgICJubnRwIiwKLSAgICAgICAgInNpcCIsCi0gICAgICAg
ICJzbXMiLAotICAgICAgICAic21zdG8iLAotICAgICAgICAic3NoIiwKLSAgICAgICAgInRlbCIs
Ci0gICAgICAgICJ1cm4iLAotICAgICAgICAid2ViY2FsIiwKLSAgICAgICAgInd0YWkiLAotICAg
ICAgICAieG1wcCIsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJB
WV9MRU5HVEgocHJvdG9jb2xzKTsgKytpKQotICAgICAgICBwcm90b2NvbFdoaXRlbGlzdC0+YWRk
KHByb3RvY29sc1tpXSk7CisgICAgZm9yIChhdXRvKiBwcm90b2NvbCA6IHsgImJpdGNvaW4iLCAi
Z2VvIiwgImltIiwgImlyYyIsICJpcmNzIiwgIm1hZ25ldCIsICJtYWlsdG8iLCAibW1zIiwgIm5l
d3MiLCAibm50cCIsICJzaXAiLCAic21zIiwgInNtc3RvIiwgInNzaCIsICJ0ZWwiLCAidXJuIiwg
IndlYmNhbCIsICJ3dGFpIiwgInhtcHAiIH0pCisgICAgICAgIHByb3RvY29sV2hpdGVsaXN0LT5h
ZGQocHJvdG9jb2wpOwogfQogCiBzdGF0aWMgYm9vbCB2ZXJpZnlDdXN0b21IYW5kbGVyVVJMKGNv
bnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAK
aW5kZXggNzg1MDM0MGExMGE3ZTM5NDc3NDljMjAwNDBlNjgwYzVhMWIzNGRlOS4uOTcxNDlmNGUy
MDY2NjEwOWZmZWMxMjJmNGViMTUyN2U3MWI3MWU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwCkBAIC03NCwxMCArNzQsOCBAQCBj
b25zdCBWZWN0b3I8UmVmUHRyPFNwZWVjaFN5bnRoZXNpc1ZvaWNlPj4mIFNwZWVjaFN5bnRoZXNp
czo6Z2V0Vm9pY2VzKCkKICAgICAgICAgbV9wbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyID0gc3Rk
OjptYWtlX3VuaXF1ZTxQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyPih0aGlzKTsKIAogICAgIC8v
IElmIHRoZSB2b2ljZUxpc3QgaXMgZW1wdHksIHRoYXQncyB0aGUgY3VlIHRvIGdldCB0aGUgdm9p
Y2VzIGZyb20gdGhlIHBsYXRmb3JtIGFnYWluLgotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxh
dGZvcm1TcGVlY2hTeW50aGVzaXNWb2ljZT4+JiBwbGF0Zm9ybVZvaWNlcyA9IG1fcGxhdGZvcm1T
cGVlY2hTeW50aGVzaXplci0+dm9pY2VMaXN0KCk7Ci0gICAgc2l6ZV90IHZvaWNlQ291bnQgPSBw
bGF0Zm9ybVZvaWNlcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCB2b2ljZUNv
dW50OyBrKyspCi0gICAgICAgIG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hTeW50aGVzaXNWb2lj
ZTo6Y3JlYXRlKHBsYXRmb3JtVm9pY2VzW2tdKSk7CisgICAgZm9yIChhdXRvJiB2b2ljZSA6IG1f
cGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci0+dm9pY2VMaXN0KCkpCisgICAgICAgIG1fdm9pY2VM
aXN0LmFwcGVuZChTcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlKSk7CiAKICAgICBy
ZXR1cm4gbV92b2ljZUxpc3Q7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9CdWZmZXIuY3BwCmluZGV4IDMxZGE5NGMyN2E0NDEzYzIwYzY3ODZlZmMwZmI3OGI1
ZDNmYjQ1YTIuLjhjYjhhNzFkOTg4Y2E2ZGIwZTRlY2I0ZTFjOWU5ZTQ2ZTYwN2I3MDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCkBAIC0x
MjUsOCArMTI1LDggQEAgdm9pZCBBdWRpb0J1ZmZlcjo6emVybygpCiBzaXplX3QgQXVkaW9CdWZm
ZXI6Om1lbW9yeUNvc3QoKSBjb25zdAogewogICAgIHNpemVfdCBjb3N0ID0gMDsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGFubmVscy5zaXplKCkgOyArK2kpCi0gICAgICAgIGNv
c3QgKz0gbV9jaGFubmVsc1tpXS0+Ynl0ZUxlbmd0aCgpOworICAgIGZvciAoYXV0byYgY2hhbm5l
bCA6IG1fY2hhbm5lbHMpCisgICAgICAgIGNvc3QgKz0gY2hhbm5lbC0+Ynl0ZUxlbmd0aCgpOwog
ICAgIHJldHVybiBjb3N0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXggYTI5MzE2YTE1ZmYyZWI3OTU4OTIwNmExMjQ1MTBk
ZmEwN2U1ODEwYS4uZTNlYzkxODNlNWE0NDFmOTYxMjg3NjNhZGYyNDJhMDNmY2U3NWNlMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApA
QCAtNDYwLDEyICs0NjAsMTEgQEAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9k
ZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWQKIAogICAgIEF1ZGlv
U291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gMDsKIAotICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFT
dHJlYW1UcmFjaz4+IGF1ZGlvVHJhY2tzID0gbWVkaWFTdHJlYW0tPmdldEF1ZGlvVHJhY2tzKCk7
CiAgICAgUmVmUHRyPE1lZGlhU3RyZWFtVHJhY2s+IGF1ZGlvVHJhY2s7CiAKICAgICAvLyBGSVhN
RTogZ2V0IGEgcHJvdmlkZXIgZm9yIG5vbi1sb2NhbCBNZWRpYVN0cmVhbXMgKGxpa2UgZnJvbSBh
IHJlbW90ZSBwZWVyKS4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvVHJhY2tzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGF1ZGlvVHJhY2sgPSBhdWRpb1RyYWNrc1tpXTsKKyAgICBm
b3IgKGF1dG8mIHRyYWNrIDogbWVkaWFTdHJlYW0tPmdldEF1ZGlvVHJhY2tzKCkpIHsKKyAgICAg
ICAgYXVkaW9UcmFjayA9IHRyYWNrOwogICAgICAgICBpZiAoYXVkaW9UcmFjay0+c291cmNlKCkt
PmlzQXVkaW9TdHJlYW1Tb3VyY2UoKSkgewogICAgICAgICAgICAgYXV0byBzb3VyY2UgPSBzdGF0
aWNfY2FzdDxNZWRpYVN0cmVhbUF1ZGlvU291cmNlKj4oYXVkaW9UcmFjay0+c291cmNlKCkpOwog
ICAgICAgICAgICAgQVNTRVJUKCFzb3VyY2UtPmRldmljZUlkKCkuaXNFbXB0eSgpKTsKQEAgLTY2
NCw4ICs2NjMsOCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVz
KCkKIHsKICAgICBBU1NFUlQoaXNHcmFwaE93bmVyKCkpOwogICAgIEFTU0VSVChpc0F1ZGlvVGhy
ZWFkKCkgfHwgaXNBdWRpb1RocmVhZEZpbmlzaGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2ZpbmlzaGVkTm9kZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGRlcmVmTm9kZSht
X2ZpbmlzaGVkTm9kZXNbaV0pOworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fZmluaXNoZWROb2Rl
cykKKyAgICAgICAgZGVyZWZOb2RlKG5vZGUpOwogCiAgICAgbV9maW5pc2hlZE5vZGVzLmNsZWFy
KCk7CiB9CkBAIC02OTIsOCArNjkxLDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVmTm9kZShB
dWRpb05vZGUqIG5vZGUpCiB2b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZVbmZpbmlzaGVkU291cmNl
Tm9kZXMoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSAmJiBpc0F1ZGlvVGhyZWFkRmlu
aXNoZWQoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVmZXJlbmNlZE5vZGVz
LnNpemUoKTsgKytpKQotICAgICAgICBtX3JlZmVyZW5jZWROb2Rlc1tpXS0+ZGVyZWYoQXVkaW9O
b2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9yZWZlcmVu
Y2VkTm9kZXMpCisgICAgICAgIG5vZGUtPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rp
b24pOwogCiAgICAgbV9yZWZlcmVuY2VkTm9kZXMuY2xlYXIoKTsKIH0KQEAgLTgyNSwxMCArODI0
LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZVBvc3RSZW5kZXJUYXNrcygpCiB2b2lkIEF1
ZGlvQ29udGV4dDo6aGFuZGxlRGVmZXJyZWRGaW5pc2hEZXJlZnMoKQogewogICAgIEFTU0VSVChp
c0F1ZGlvVGhyZWFkKCkgJiYgaXNHcmFwaE93bmVyKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2RlZmVycmVkRmluaXNoRGVyZWZMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IEF1ZGlvTm9kZSogbm9kZSA9IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3RbaV07CisgICAgZm9y
IChhdXRvJiBub2RlIDogbV9kZWZlcnJlZEZpbmlzaERlcmVmTGlzdCkKICAgICAgICAgbm9kZS0+
ZmluaXNoRGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0gICAgfQogICAgIAog
ICAgIG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3QuY2xlYXIoKTsKIH0KQEAgLTkyMiw4ICs5MTks
OCBAQCB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMo
KQogewogICAgIEFTU0VSVChpc0dyYXBoT3duZXIoKSk7ICAgIAogCi0gICAgZm9yIChIYXNoU2V0
PEF1ZGlvU3VtbWluZ0p1bmN0aW9uKj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5U3VtbWluZ0p1bmN0
aW9ucy5iZWdpbigpOyBpICE9IG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLmVuZCgpOyArK2kpCi0g
ICAgICAgICgqaSktPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CisgICAgZm9yIChhdXRvJiBqdW5j
dGlvbiA6IG1fZGlydHlTdW1taW5nSnVuY3Rpb25zKQorICAgICAgICBqdW5jdGlvbi0+dXBkYXRl
UmVuZGVyaW5nU3RhdGUoKTsKIAogICAgIG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLmNsZWFyKCk7
CiB9CkBAIC05MzIsOCArOTI5LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZURpcnR5QXVk
aW9Ob2RlT3V0cHV0cygpCiB7CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCiAKLSAg
ICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5QXVk
aW9Ob2RlT3V0cHV0cy5iZWdpbigpOyBpICE9IG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmVuZCgp
OyArK2kpCi0gICAgICAgICgqaSktPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CisgICAgZm9yIChh
dXRvJiBvdXRwdXQgOiBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cykKKyAgICAgICAgb3V0cHV0LT51
cGRhdGVSZW5kZXJpbmdTdGF0ZSgpOwogCiAgICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuY2xl
YXIoKTsKIH0KQEAgLTk2MiwxMSArOTU5LDkgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVwZGF0ZUF1
dG9tYXRpY1B1bGxOb2RlcygpCiAgICAgICAgIC8vIENvcHkgZnJvbSBtX2F1dG9tYXRpY1B1bGxO
b2RlcyB0byBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlcy4KICAgICAgICAgbV9yZW5kZXJp
bmdBdXRvbWF0aWNQdWxsTm9kZXMucmVzaXplKG1fYXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7
CiAKLSAgICAgICAgdW5zaWduZWQgaiA9IDA7Ci0gICAgICAgIGZvciAoSGFzaFNldDxBdWRpb05v
ZGUqPjo6aXRlcmF0b3IgaSA9IG1fYXV0b21hdGljUHVsbE5vZGVzLmJlZ2luKCk7IGkgIT0gbV9h
dXRvbWF0aWNQdWxsTm9kZXMuZW5kKCk7ICsraSwgKytqKSB7Ci0gICAgICAgICAgICBBdWRpb05v
ZGUqIG91dHB1dCA9ICppOwotICAgICAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9k
ZXNbal0gPSBvdXRwdXQ7Ci0gICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAg
ICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9hdXRvbWF0aWNQdWxsTm9kZXMpCisgICAgICAgICAg
ICBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2Rlc1tpKytdID0gb3V0cHV0OwogCiAgICAgICAg
IG1fYXV0b21hdGljUHVsbE5vZGVzTmVlZFVwZGF0aW5nID0gZmFsc2U7CiAgICAgfQpAQCAtOTc2
LDggKzk3MSw4IEBAIHZvaWQgQXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVz
KHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCiB7CiAgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7
CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxs
Tm9kZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVz
W2ldLT5wcm9jZXNzSWZOZWNlc3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKGF1dG8m
IG5vZGUgOiBtX3JlbmRlcmluZ0F1dG9tYXRpY1B1bGxOb2RlcykKKyAgICAgICAgbm9kZS0+cHJv
Y2Vzc0lmTmVjZXNzYXJ5KGZyYW1lc1RvUHJvY2Vzcyk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIEF1ZGlvQ29udGV4dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXggMzI2NGI1
YjFiNTEwMDE2MGU3Zjg4MzI3ZmNiNjUxNWMyYzZlZGNmMC4uZjQ2YjRiZTI0NGQ0MDdkMDA0OTEz
YWI1NDdkOTExZDkxOGVjMDNlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9BdWRpb05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVk
aW8vQXVkaW9Ob2RlLmNwcApAQCAtMjc3LDggKzI3Nyw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpzZXRD
aGFubmVsSW50ZXJwcmV0YXRpb24oY29uc3QgU3RyaW5nJiBpbnRlcnByZXRhdGlvbiwgRXhjZXB0
aW9uCiAKIHZvaWQgQXVkaW9Ob2RlOjp1cGRhdGVDaGFubmVsc0ZvcklucHV0cygpCiB7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW5wdXRzLnNpemUoKTsgKytpKQotICAgICAgICBp
bnB1dChpKS0+Y2hhbmdlZE91dHB1dHMoKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1
dHMpCisgICAgICAgIGlucHV0LT5jaGFuZ2VkT3V0cHV0cygpOwogfQogCiBFdmVudFRhcmdldElu
dGVyZmFjZSBBdWRpb05vZGU6OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKQEAgLTMyNSw3
ICszMjUsNyBAQCB2b2lkIEF1ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQo
QXVkaW9Ob2RlSW5wdXQqIGlucHV0KQogewogICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9U
aHJlYWQoKSAmJiBjb250ZXh0KCktPmlzR3JhcGhPd25lcigpKTsKIAotICAgIGZvciAoY29uc3Qg
c3RkOjp1bmlxdWVfcHRyPEF1ZGlvTm9kZUlucHV0PiYgc2F2ZWRJbnB1dCA6IG1faW5wdXRzKSB7
CisgICAgZm9yIChhdXRvJiBzYXZlZElucHV0IDogbV9pbnB1dHMpIHsKICAgICAgICAgaWYgKGlu
cHV0ID09IHNhdmVkSW5wdXQuZ2V0KCkpIHsKICAgICAgICAgICAgIGlucHV0LT51cGRhdGVJbnRl
cm5hbEJ1cygpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzQ1LDE0ICszNDUsMTQgQEAgdm9p
ZCBBdWRpb05vZGU6OnB1bGxJbnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBBU1NF
UlQoY29udGV4dCgpLT5pc0F1ZGlvVGhyZWFkKCkpOwogICAgIAogICAgIC8vIFByb2Nlc3MgYWxs
IG9mIHRoZSBBdWRpb05vZGVzIGNvbm5lY3RlZCB0byBvdXIgaW5wdXRzLgotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2lucHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgaW5wdXQoaSkt
PnB1bGwoMCwgZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1
dHMpCisgICAgICAgIGlucHV0LT5wdWxsKDAsIGZyYW1lc1RvUHJvY2Vzcyk7CiB9CiAKIGJvb2wg
QXVkaW9Ob2RlOjppbnB1dHNBcmVTaWxlbnQoKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2lucHV0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWlucHV0KGkpLT5idXMo
KS0+aXNTaWxlbnQoKSkKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpIHsKKyAgICAg
ICAgaWYgKCFpbnB1dC0+YnVzKCktPmlzU2lsZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMzYwLDE0ICszNjAsMTQgQEAgYm9vbCBB
dWRpb05vZGU6OmlucHV0c0FyZVNpbGVudCgpCiAKIHZvaWQgQXVkaW9Ob2RlOjpzaWxlbmNlT3V0
cHV0cygpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5zaXplKCk7
ICsraSkKLSAgICAgICAgb3V0cHV0KGkpLT5idXMoKS0+emVybygpOworICAgIGZvciAoYXV0byYg
b3V0cHV0IDogbV9vdXRwdXRzKQorICAgICAgICBvdXRwdXQtPmJ1cygpLT56ZXJvKCk7CiB9CiAK
IHZvaWQgQXVkaW9Ob2RlOjp1bnNpbGVuY2VPdXRwdXRzKCkKIHsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9vdXRwdXRzLnNpemUoKTsgKytpKQotICAgICAgICBvdXRwdXQoaSktPmJ1
cygpLT5jbGVhclNpbGVudEZsYWcoKTsKKyAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0
cykKKyAgICAgICAgb3V0cHV0LT5idXMoKS0+Y2xlYXJTaWxlbnRGbGFnKCk7CiB9CiAKIHZvaWQg
QXVkaW9Ob2RlOjplbmFibGVPdXRwdXRzSWZOZWNlc3NhcnkoKQpAQCAtMzc3LDggKzM3Nyw4IEBA
IHZvaWQgQXVkaW9Ob2RlOjplbmFibGVPdXRwdXRzSWZOZWNlc3NhcnkoKQogICAgICAgICBBdWRp
b0NvbnRleHQ6OkF1dG9Mb2NrZXIgbG9ja2VyKCpjb250ZXh0KCkpOwogCiAgICAgICAgIG1faXNE
aXNhYmxlZCA9IGZhbHNlOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRw
dXRzLnNpemUoKTsgKytpKQotICAgICAgICAgICAgb3V0cHV0KGkpLT5lbmFibGUoKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX291dHB1dHMpCisgICAgICAgICAgICBvdXRwdXQtPmVu
YWJsZSgpOwogICAgIH0KIH0KIApAQCAtNDAyLDggKzQwMiw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpk
aXNhYmxlT3V0cHV0c0lmTmVjZXNzYXJ5KCkKICAgICAgICAgLy8gbG9uZ2VyIGFueSBhY3RpdmUg
Y29ubmVjdGlvbnMuCiAgICAgICAgIGlmIChub2RlVHlwZSgpICE9IE5vZGVUeXBlQ29udm9sdmVy
ICYmIG5vZGVUeXBlKCkgIT0gTm9kZVR5cGVEZWxheSkgewogICAgICAgICAgICAgbV9pc0Rpc2Fi
bGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX291dHB1
dHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNhYmxlKCk7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAgICAgICAgICAg
ICBvdXRwdXQtPmRpc2FibGUoKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQ5Miw4ICs0OTIs
OCBAQCB2b2lkIEF1ZGlvTm9kZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBlKQogICAgICAg
ICBpZiAoIW1fbm9ybWFsUmVmQ291bnQpIHsKICAgICAgICAgICAgIGlmICghbV9pc01hcmtlZEZv
ckRlbGV0aW9uKSB7CiAgICAgICAgICAgICAgICAgLy8gQWxsIHJlZmVyZW5jZXMgYXJlIGdvbmUg
LSB3ZSBuZWVkIHRvIGdvIGF3YXkuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fb3V0cHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0
KGkpLT5kaXNjb25uZWN0QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNv
bm5lY3RlZCB0by4KKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0
cykKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0LT5kaXNjb25uZWN0QWxsKCk7IC8vIFRoaXMg
d2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0by4KIAogICAgICAgICAgICAgICAg
IC8vIE1hcmsgZm9yIGRlbGV0aW9uIGF0IGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIG9yIHdo
ZW4gY29udGV4dCBzaHV0cyBkb3duLgogICAgICAgICAgICAgICAgIGNvbnRleHQoKS0+bWFya0Zv
ckRlbGV0aW9uKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9BdWRpb05vZGVJbnB1dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlv
L0F1ZGlvTm9kZUlucHV0LmNwcAppbmRleCBjNjIzMzNkMmIyMTk3ODU4YjJlODBmMzE5MDMwYWYz
ZGRjOGViMjc4Li5hNjA1ZTMzMmRhODZhOGQ0OWViOTFjYTYxZmEwMGZlZTBhOGJiYmQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNw
cApAQCAtMTUxLDggKzE1MSw3IEBAIHVuc2lnbmVkIEF1ZGlvTm9kZUlucHV0OjpudW1iZXJPZkNo
YW5uZWxzKCkgY29uc3QKICAgICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhl
IGNvbm5lY3Rpb24gd2l0aCB0aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhbm5lbHMuCiAgICAgdW5z
aWduZWQgbWF4Q2hhbm5lbHMgPSAxOyAvLyBvbmUgY2hhbm5lbCBpcyB0aGUgbWluaW11bSBhbGxv
d2VkCiAKLSAgICBmb3IgKEhhc2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBt
X291dHB1dHMuYmVnaW4oKTsgaSAhPSBtX291dHB1dHMuZW5kKCk7ICsraSkgewotICAgICAgICBB
dWRpb05vZGVPdXRwdXQqIG91dHB1dCA9ICppOworICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9v
dXRwdXRzKSB7CiAgICAgICAgIC8vIFVzZSBvdXRwdXQoKS0+bnVtYmVyT2ZDaGFubmVscygpIGlu
c3RlYWQgb2Ygb3V0cHV0LT5idXMoKS0+bnVtYmVyT2ZDaGFubmVscygpLAogICAgICAgICAvLyBi
ZWNhdXNlIHRoZSBjYWxsaW5nIG9mIEF1ZGlvTm9kZU91dHB1dDo6YnVzKCkgaXMgbm90IHNhZmUg
aGVyZS4KICAgICAgICAgbWF4Q2hhbm5lbHMgPSBzdGQ6Om1heChtYXhDaGFubmVscywgb3V0cHV0
LT5udW1iZXJPZkNoYW5uZWxzKCkpOwpAQCAtMTk4LDggKzE5Nyw3IEBAIHZvaWQgQXVkaW9Ob2Rl
SW5wdXQ6OnN1bUFsbENvbm5lY3Rpb25zKEF1ZGlvQnVzKiBzdW1taW5nQnVzLCBzaXplX3QgZnJh
bWVzVG9Qcm9jCiAKICAgICBBdWRpb0J1czo6Q2hhbm5lbEludGVycHJldGF0aW9uIGludGVycHJl
dGF0aW9uID0gbm9kZSgpLT5pbnRlcm5hbENoYW5uZWxJbnRlcnByZXRhdGlvbigpOwogCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsg
KytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gcmVuZGVyaW5nT3V0cHV0
KGkpOworICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9yZW5kZXJpbmdPdXRwdXRzKSB7CiAgICAg
ICAgIEFTU0VSVChvdXRwdXQpOwogCiAgICAgICAgIC8vIFJlbmRlciBhdWRpbyBmcm9tIHRoaXMg
b3V0cHV0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b05vZGVPdXRwdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05v
ZGVPdXRwdXQuY3BwCmluZGV4IGY5YTQ1MTZmOTgyNDdjZDBkZDEyNmNhYzQ4MmNkZWZhOTkyNjhi
MTEuLjQ2OGQ4ZDVmMTQwOTQxMmFhMThkMzIxOWE0Y2M0MzVjMTNiMWRkYTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAKQEAg
LTk4LDggKzk4LDcgQEAgdm9pZCBBdWRpb05vZGVPdXRwdXQ6OnByb3BhZ2F0ZUNoYW5uZWxDb3Vu
dCgpCiAgICAgCiAgICAgaWYgKGlzQ2hhbm5lbENvdW50S25vd24oKSkgewogICAgICAgICAvLyBB
bm5vdW5jZSB0byBhbnkgbm9kZXMgd2UncmUgY29ubmVjdGVkIHRvIHRoYXQgd2UgY2hhbmdlZCBv
dXIgY2hhbm5lbCBjb3VudCBmb3IgaXRzIGlucHV0LgotICAgICAgICBmb3IgKElucHV0c0l0ZXJh
dG9yIGkgPSBtX2lucHV0cy5iZWdpbigpOyBpICE9IG1faW5wdXRzLmVuZCgpOyArK2kpIHsKLSAg
ICAgICAgICAgIEF1ZGlvTm9kZUlucHV0KiBpbnB1dCA9ICppOworICAgICAgICBmb3IgKGF1dG8m
IGlucHV0IDogbV9pbnB1dHMpIHsKICAgICAgICAgICAgIEF1ZGlvTm9kZSogY29ubmVjdGlvbk5v
ZGUgPSBpbnB1dC0+bm9kZSgpOwogICAgICAgICAgICAgY29ubmVjdGlvbk5vZGUtPmNoZWNrTnVt
YmVyT2ZDaGFubmVsc0ZvcklucHV0KGlucHV0KTsKICAgICAgICAgfQpAQCAtMjMwLDEwICsyMjks
OCBAQCB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZGlzYWJsZSgpCiAgICAgQVNTRVJUKGNvbnRleHQo
KS0+aXNHcmFwaE93bmVyKCkpOwogCiAgICAgaWYgKG1faXNFbmFibGVkKSB7Ci0gICAgICAgIGZv
ciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMuZW5k
KCk7ICsraSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7CisgICAg
ICAgIGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0cykKICAgICAgICAgICAgIGlucHV0LT5kaXNh
YmxlKHRoaXMpOwotICAgICAgICB9CiAgICAgICAgIG1faXNFbmFibGVkID0gZmFsc2U7CiAgICAg
fQogfQpAQCAtMjQzLDEwICsyNDAsOCBAQCB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxlKCkK
ICAgICBBU1NFUlQoY29udGV4dCgpLT5pc0dyYXBoT3duZXIoKSk7CiAKICAgICBpZiAoIW1faXNF
bmFibGVkKSB7Ci0gICAgICAgIGZvciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1faW5wdXRzLmJlZ2lu
KCk7IGkgIT0gbV9pbnB1dHMuZW5kKCk7ICsraSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlSW5w
dXQqIGlucHV0ID0gKmk7CisgICAgICAgIGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0cykKICAg
ICAgICAgICAgIGlucHV0LT5lbmFibGUodGhpcyk7Ci0gICAgICAgIH0KICAgICAgICAgbV9pc0Vu
YWJsZWQgPSB0cnVlOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1
ZGlvL0F1ZGlvUGFyYW0uY3BwCmluZGV4IDNlNDg5OWY1MGUzOWMzOGIxN2U1MGI0NTg1YTJiNjQ4
MWJiNjBhYmEuLmI3M2U5MTZhZjkyZDliNmQ2ZTIwOWM3ZmJiY2RhZDFlNGQ2MjRjYjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcApAQCAtMTM5
LDggKzEzOSw3IEBAIHZvaWQgQXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1ZXMoZmxvYXQq
IHZhbHVlcywgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZXMsIGJvCiAgICAgUmVmUHRyPEF1ZGlvQnVz
PiBzdW1taW5nQnVzID0gQXVkaW9CdXM6OmNyZWF0ZSgxLCBudW1iZXJPZlZhbHVlcywgZmFsc2Up
OwogICAgIHN1bW1pbmdCdXMtPnNldENoYW5uZWxNZW1vcnkoMCwgdmFsdWVzLCBudW1iZXJPZlZh
bHVlcyk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSZW5kZXJpbmdD
b25uZWN0aW9ucygpOyArK2kpIHsKLSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSBy
ZW5kZXJpbmdPdXRwdXQoaSk7CisgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX3JlbmRlcmluZ091
dHB1dHMpIHsKICAgICAgICAgQVNTRVJUKG91dHB1dCk7CiAKICAgICAgICAgLy8gUmVuZGVyIGF1
ZGlvIGZyb20gdGhpcyBvdXRwdXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmF1ZGlvL0F1ZGlvUGFyYW1UaW1lbGluZS5jcHAKaW5kZXggMWM3ZTRlNWY4YmU5M2RiMDk3
MjE4MjE0M2Y2NmM3MDY4NjI5YmJhNy4uZTg3YmU2MjQ1OGIzMjIyM2YyZTk5YTA0Y2Q0ZWQwMzAw
ZTUwMzU0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRp
b1BhcmFtVGltZWxpbmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
QXVkaW9QYXJhbVRpbWVsaW5lLmNwcApAQCAtODQsMTUgKzg0LDE3IEBAIHZvaWQgQXVkaW9QYXJh
bVRpbWVsaW5lOjppbnNlcnRFdmVudChjb25zdCBQYXJhbUV2ZW50JiBldmVudCkKICAgICAKICAg
ICB1bnNpZ25lZCBpID0gMDsKICAgICBmbG9hdCBpbnNlcnRUaW1lID0gZXZlbnQudGltZSgpOwot
ICAgIGZvciAoaSA9IDA7IGkgPCBtX2V2ZW50cy5zaXplKCk7ICsraSkgeworICAgIGZvciAoYXV0
byYgcGFyYW1FdmVudCA6IG1fZXZlbnRzKSB7CiAgICAgICAgIC8vIE92ZXJ3cml0ZSBzYW1lIGV2
ZW50IHR5cGUgYW5kIHRpbWUuCi0gICAgICAgIGlmIChtX2V2ZW50c1tpXS50aW1lKCkgPT0gaW5z
ZXJ0VGltZSAmJiBtX2V2ZW50c1tpXS50eXBlKCkgPT0gZXZlbnQudHlwZSgpKSB7Ci0gICAgICAg
ICAgICBtX2V2ZW50c1tpXSA9IGV2ZW50OworICAgICAgICBpZiAocGFyYW1FdmVudC50aW1lKCkg
PT0gaW5zZXJ0VGltZSAmJiBwYXJhbUV2ZW50LnR5cGUoKSA9PSBldmVudC50eXBlKCkpIHsKKyAg
ICAgICAgICAgIHBhcmFtRXZlbnQgPSBldmVudDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmIChtX2V2ZW50c1tpXS50aW1lKCkgPiBpbnNlcnRUaW1lKQorICAg
ICAgICBpZiAocGFyYW1FdmVudC50aW1lKCkgPiBpbnNlcnRUaW1lKQogICAgICAgICAgICAgYnJl
YWs7CisKKyAgICAgICAgKytpOwogICAgIH0KIAogICAgIG1fZXZlbnRzLmluc2VydChpLCBldmVu
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3Vt
bWluZ0p1bmN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9T
dW1taW5nSnVuY3Rpb24uY3BwCmluZGV4IGVkNDE3ZmFkYmQ1NWVlNjNkNmI4ZmNmODVkZjc0N2Rh
ZmQ2ODI4YTQuLmMyMjhlZWM3MTgyOTk5ZjA4MWNmMGI1ZjM5YzQ0YWUxM2U0MmYyMGYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5n
SnVuY3Rpb24uY3BwCkBAIC02MiwxMCArNjIsOSBAQCB2b2lkIEF1ZGlvU3VtbWluZ0p1bmN0aW9u
Ojp1cGRhdGVSZW5kZXJpbmdTdGF0ZSgpCiAgICAgaWYgKG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBk
YXRpbmcgJiYgY2FuVXBkYXRlU3RhdGUoKSkgewogICAgICAgICAvLyBDb3B5IGZyb20gbV9vdXRw
dXRzIHRvIG1fcmVuZGVyaW5nT3V0cHV0cy4KICAgICAgICAgbV9yZW5kZXJpbmdPdXRwdXRzLnJl
c2l6ZShtX291dHB1dHMuc2l6ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgaiA9IDA7Ci0gICAgICAg
IGZvciAoSGFzaFNldDxBdWRpb05vZGVPdXRwdXQqPjo6aXRlcmF0b3IgaSA9IG1fb3V0cHV0cy5i
ZWdpbigpOyBpICE9IG1fb3V0cHV0cy5lbmQoKTsgKytpLCArK2opIHsKLSAgICAgICAgICAgIEF1
ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gKmk7Ci0gICAgICAgICAgICBtX3JlbmRlcmluZ091dHB1
dHNbal0gPSBvdXRwdXQ7CisgICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKGF1
dG8mIG91dHB1dCA6IG1fb3V0cHV0cykgeworICAgICAgICAgICAgbV9yZW5kZXJpbmdPdXRwdXRz
W2krK10gPSBvdXRwdXQ7CiAgICAgICAgICAgICBvdXRwdXQtPnVwZGF0ZVJlbmRlcmluZ1N0YXRl
KCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJh
dWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZS5jcHAKaW5kZXggZWQ3OGE3YzBkMmM1NDcy
OTUwOWU2Yzk5MDY2YjMzNzg3MWRmMWRkNy4uYjZlMjZlN2Y5OWRiMmFiNDBmZjFkZDQ0MzA5NzE1
NmUwMWIzMTUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9N
ZWRpYVN0cmVhbUF1ZGlvU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwCkBAIC04MSwxNSArODEsMTUgQEAgYm9v
bCBNZWRpYVN0cmVhbUF1ZGlvU291cmNlOjpyZW1vdmVBdWRpb0NvbnN1bWVyKEF1ZGlvRGVzdGlu
YXRpb25Db25zdW1lciogY29uc3UKIHZvaWQgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6c2V0QXVk
aW9Gb3JtYXQoc2l6ZV90IG51bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXVkaW9Db25zdW1lcnNMb2NrKTsKLSAgICBmb3IgKFZl
Y3RvcjxSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPj46Oml0ZXJhdG9yIGl0ID0gbV9h
dWRpb0NvbnN1bWVycy5iZWdpbigpOyBpdCAhPSBtX2F1ZGlvQ29uc3VtZXJzLmVuZCgpOyArK2l0
KQotICAgICAgICAoKml0KS0+c2V0Rm9ybWF0KG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUp
OworICAgIGZvciAoYXV0byYgY29uc3VtZXIgOiBtX2F1ZGlvQ29uc3VtZXJzKQorICAgICAgICBj
b25zdW1lci0+c2V0Rm9ybWF0KG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUpOwogfQogCiB2
b2lkIE1lZGlhU3RyZWFtQXVkaW9Tb3VyY2U6OmNvbnN1bWVBdWRpbyhBdWRpb0J1cyogYnVzLCBz
aXplX3QgbnVtYmVyT2ZGcmFtZXMpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXVkaW9D
b25zdW1lcnNMb2NrKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNv
bnN1bWVyPj46Oml0ZXJhdG9yIGl0ID0gbV9hdWRpb0NvbnN1bWVycy5iZWdpbigpOyBpdCAhPSBt
X2F1ZGlvQ29uc3VtZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAoKml0KS0+Y29uc3VtZUF1ZGlv
KGJ1cywgbnVtYmVyT2ZGcmFtZXMpOworICAgIGZvciAoYXV0byYgY29uc3VtZXIgOiBtX2F1ZGlv
Q29uc3VtZXJzKQorICAgICAgICBjb25zdW1lci0+Y29uc3VtZUF1ZGlvKGJ1cywgbnVtYmVyT2ZG
cmFtZXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAppbmRleCBj
MmQ2ZGUwYWY5MWNlNjQ2OGZlYmYzZDI3M2MzMzVmN2ZjOTRiYTU0Li41MDgzZTA3MDNjMTExZjZi
OGZmMjU5NGJhY2I4ODM1OWU5ZGQyY2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vV2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAKQEAgLTY1LDggKzY1LDgg
QEAgdm9pZCBXYXZlU2hhcGVyUHJvY2Vzc29yOjpzZXRPdmVyc2FtcGxlKE92ZXJTYW1wbGVUeXBl
IG92ZXJzYW1wbGUpCiAgICAgbV9vdmVyc2FtcGxlID0gb3ZlcnNhbXBsZTsKIAogICAgIGlmIChv
dmVyc2FtcGxlICE9IE92ZXJTYW1wbGVOb25lKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFdhdmVTaGFwZXJE
U1BLZXJuZWwqIGtlcm5lbCA9IHN0YXRpY19jYXN0PFdhdmVTaGFwZXJEU1BLZXJuZWwqPihtX2tl
cm5lbHNbaV0uZ2V0KCkpOworICAgICAgICBmb3IgKGF1dG8mIGF1ZGlvRFNQS2VybmVsIDogbV9r
ZXJuZWxzKSB7CisgICAgICAgICAgICBXYXZlU2hhcGVyRFNQS2VybmVsKiBrZXJuZWwgPSBzdGF0
aWNfY2FzdDxXYXZlU2hhcGVyRFNQS2VybmVsKj4oYXVkaW9EU1BLZXJuZWwuZ2V0KCkpOwogICAg
ICAgICAgICAga2VybmVsLT5sYXp5SW5pdGlhbGl6ZU92ZXJzYW1wbGluZygpOwogICAgICAgICB9
CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9E
YXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVGhyZWFkLmNwcAppbmRleCAyOTZhZGZkZTZkOTYxMmZjZDc5ZGI0ODNhYWIxNDIzMDIy
MmVlZjc3Li5hNDQxM2MyNTYzYjI1NjAyZWYxNWJhNTMyNjAyYjBmOTA2Zjg0NWNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFk
LmNwcApAQCAtMTUwLDEwICsxNTAsMTAgQEAgdm9pZCBEYXRhYmFzZVRocmVhZDo6aGFuZGxlUGF1
c2VkUXVldWUoKQogICAgIHdoaWxlIChhdXRvIHRhc2sgPSBtX3BhdXNlZFF1ZXVlLnRyeUdldE1l
c3NhZ2UoKSkKICAgICAgICAgcGF1c2VkVGFza3MuYXBwZW5kKFdURjo6bW92ZSh0YXNrKSk7CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGF1c2VkVGFza3Muc2l6ZSgpOyArK2kpIHsK
KyAgICBmb3IgKGF1dG8mIHBhdXNlZFRhc2sgOiBwYXVzZWRUYXNrcykgewogICAgICAgICBBdXRv
ZHJhaW5lZFBvb2wgcG9vbDsKIAotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YWJhc2VUYXNr
PiB0YXNrKHBhdXNlZFRhc2tzW2ldLnJlbGVhc2UoKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxEYXRhYmFzZVRhc2s+IHRhc2socGF1c2VkVGFzay5yZWxlYXNlKCkpOwogICAgICAgICB7CiAg
ICAgICAgICAgICBNdXRleExvY2tlciBwYXVzZWRMb2NrZXIobV9wYXVzZWRNdXRleCk7CiAgICAg
ICAgICAgICBpZiAobV9wYXVzZWQpIHsKQEAgLTIwMyw5ICsyMDMsOCBAQCB2b2lkIERhdGFiYXNl
VGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpCiAgICAgICAgIC8vIEFzIHRoZSBjYWxsIHRvIGNsb3Nl
IHdpbGwgbW9kaWZ5IHRoZSBvcmlnaW5hbCBzZXQsIHdlIG11c3QgdGFrZSBhIGNvcHkgdG8gaXRl
cmF0ZSBvdmVyLgogICAgICAgICBEYXRhYmFzZVNldCBvcGVuU2V0Q29weTsKICAgICAgICAgb3Bl
blNldENvcHkuc3dhcChtX29wZW5EYXRhYmFzZVNldCk7Ci0gICAgICAgIERhdGFiYXNlU2V0Ojpp
dGVyYXRvciBlbmQgPSBvcGVuU2V0Q29weS5lbmQoKTsKLSAgICAgICAgZm9yIChEYXRhYmFzZVNl
dDo6aXRlcmF0b3IgaXQgPSBvcGVuU2V0Q29weS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0g
ICAgICAgICAgICAoKml0KS5nZXQoKS0+Y2xvc2UoKTsKKyAgICAgICAgZm9yIChhdXRvJiBvcGVu
RGF0YWJhc2UgOiBvcGVuU2V0Q29weSkKKyAgICAgICAgICAgIG9wZW5EYXRhYmFzZS0+Y2xvc2Uo
KTsKICAgICB9CiAKICAgICAvLyBEZXRhY2ggdGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFy
ZSBubyBsb25nZXIgb2YgYW55IGNvbmNlcm4gdG8gYW55b25lIGVsc2UKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRl
eCA3YmNkYmYwYjc4MTNlZWU5NWZkYjBkYjhkZDdkNGVlYjhkODE3YmIyLi5mMWVhZmVkN2NmYTk4
NmVjMTFmMWMwZDhmYzU0ZjkzNTFkOGE0YWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRyYWNrZXIuY3BwCkBAIC0zMzgsMjAgKzMz
OCwxNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29u
dGV4dChjb25zdCBEYXRhYmFzZUNvbnRleHQqIGNvbgogICAgICAgICBpZiAoIW5hbWVNYXApCiAg
ICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVNYXAtPmVuZCgpOwotICAgICAgICBmb3IgKERhdGFi
YXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwSXQgPSBuYW1lTWFwLT5iZWdpbigp
OyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBFbmRJdDsgKytkYk5hbWVNYXBJdCkgewotICAgICAg
ICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwotICAg
ICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFz
ZVNldC0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRv
ciBkYlNldEl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsg
KytkYlNldEl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCgqZGJTZXRJdCktPmRhdGFiYXNlQ29u
dGV4dCgpID09IGNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgIG9wZW5EYXRhYmFzZXMuYXBw
ZW5kKCpkYlNldEl0KTsKKyAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZVNldCA6IG5hbWVNYXAt
PnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGRhdGFiYXNlIDogKmRhdGFiYXNl
U2V0KSB7CisgICAgICAgICAgICAgICAgaWYgKGRhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKSA9
PSBjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICBvcGVuRGF0YWJhc2VzLmFwcGVuZChkYXRh
YmFzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8UmVm
UHRyPERhdGFiYXNlQmFja2VuZEJhc2U+Pjo6Y29uc3RfaXRlcmF0b3Igb3BlbkRhdGFiYXNlc0Vu
ZEl0ID0gb3BlbkRhdGFiYXNlcy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8RGF0YWJh
c2VCYWNrZW5kQmFzZT4+Ojpjb25zdF9pdGVyYXRvciBvcGVuRGF0YWJhc2VzSXQgPSBvcGVuRGF0
YWJhc2VzLmJlZ2luKCk7IG9wZW5EYXRhYmFzZXNJdCAhPSBvcGVuRGF0YWJhc2VzRW5kSXQ7ICsr
b3BlbkRhdGFiYXNlc0l0KQotICAgICAgICAoKm9wZW5EYXRhYmFzZXNJdCktPmludGVycnVwdCgp
OworICAgIGZvciAoYXV0byYgb3BlbkRhdGFiYXNlIDogb3BlbkRhdGFiYXNlcykKKyAgICAgICAg
b3BlbkRhdGFiYXNlLT5pbnRlcnJ1cHQoKTsKIH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6
b3JpZ2luUGF0aChTZWN1cml0eU9yaWdpbiogb3JpZ2luKSBjb25zdApAQCAtNDgyLDggKzQ3OCw4
IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJpCiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIGZvciAoVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ZXIgPSB0ZW1wLmJlZ2lu
KCk7IGl0ZXIgIT0gdGVtcC5lbmQoKTsgKytpdGVyKQotICAgICAgICByZXN1bHRWZWN0b3IuYXBw
ZW5kKGl0ZXItPmlzb2xhdGVkQ29weSgpKTsKKyAgICBmb3IgKGF1dG8mIGRhdGFiYXNlTmFtZSA6
IHRlbXApCisgICAgICAgIHJlc3VsdFZlY3Rvci5hcHBlbmQoZGF0YWJhc2VOYW1lLmlzb2xhdGVk
Q29weSgpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNjcwLDggKzY2Niw4IEBAIHZvaWQg
RGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4s
IGNvbnN0IFN0cmluZyYgbmFtCiAgICAgaWYgKCFkYXRhYmFzZVNldCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZm9yIChEYXRhYmFzZVNldDo6aXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVn
aW4oKTsgaXQgIT0gZGF0YWJhc2VTZXQtPmVuZCgpOyArK2l0KQotICAgICAgICBkYXRhYmFzZXMt
PmFkZCgqaXQpOworICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCisgICAg
ICAgIGRhdGFiYXNlcy0+YWRkKGRhdGFiYXNlKTsKIH0KIAogUmVmUHRyPE9yaWdpbkxvY2s+IERh
dGFiYXNlVHJhY2tlcjo6b3JpZ2luTG9ja0ZvcihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQpAQCAt
NzI0LDEyICs3MjAsOSBAQCB1bnNpZ25lZCBsb25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2Fn
ZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQogewogICAgIFN0cmluZyBvcmlnaW5Q
YXRoID0gdGhpcy0+b3JpZ2luUGF0aChvcmlnaW4pOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBk
aXNrVXNhZ2UgPSAwOwotICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVOYW1lcyA9IGxpc3REaXJlY3Rv
cnkob3JpZ2luUGF0aCwgU3RyaW5nKCIqLmRiIikpOwotICAgIFZlY3RvcjxTdHJpbmc+OjppdGVy
YXRvciBmaWxlTmFtZSA9IGZpbGVOYW1lcy5iZWdpbigpOwotICAgIFZlY3RvcjxTdHJpbmc+Ojpp
dGVyYXRvciBsYXN0RmlsZU5hbWUgPSBmaWxlTmFtZXMuZW5kKCk7Ci0gICAgZm9yICg7IGZpbGVO
YW1lICE9IGxhc3RGaWxlTmFtZTsgKytmaWxlTmFtZSkgeworICAgIGZvciAoYXV0byYgZmlsZU5h
bWUgOiBsaXN0RGlyZWN0b3J5KG9yaWdpblBhdGgsIFN0cmluZygiKi5kYiIpKSkgewogICAgICAg
ICBsb25nIGxvbmcgc2l6ZTsKLSAgICAgICAgZ2V0RmlsZVNpemUoKmZpbGVOYW1lLCBzaXplKTsK
KyAgICAgICAgZ2V0RmlsZVNpemUoZmlsZU5hbWUsIHNpemUpOwogICAgICAgICBkaXNrVXNhZ2Ug
Kz0gc2l6ZTsKICAgICB9CiAgICAgcmV0dXJuIGRpc2tVc2FnZTsKQEAgLTg1NSw4ICs4NDgsOCBA
QCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCkKICAgICBWZWN0b3I8
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPj4gb3JpZ2luc0NvcHk7CiAgICAgb3JpZ2lucyhvcmlnaW5z
Q29weSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luc0NvcHkuc2l6ZSgp
OyArK2kpCi0gICAgICAgIGRlbGV0ZU9yaWdpbihvcmlnaW5zQ29weVtpXS5nZXQoKSk7CisgICAg
Zm9yIChhdXRvJiBvcmlnaW4gOiBvcmlnaW5zQ29weSkKKyAgICAgICAgZGVsZXRlT3JpZ2luKG9y
aWdpbi5nZXQoKSk7CiB9CiAKIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZXNN
b2RpZmllZFNpbmNlKHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgdGltZSkK
QEAgLTkwOCwxMCArOTAxLDEwIEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4o
U2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKICAgICB9CiAKICAgICAvLyBXZSBkcm9wIHRoZSBsb2Nr
IGhlcmUgYmVjYXVzZSBob2xkaW5nIGxvY2tzIGR1cmluZyBhIGNhbGwgdG8gZGVsZXRlRGF0YWJh
c2VGaWxlIHdpbGwgZGVhZGxvY2suCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGFi
YXNlTmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFkZWxldGVEYXRhYmFzZUZpbGUo
b3JpZ2luLCBkYXRhYmFzZU5hbWVzW2ldKSkgeworICAgIGZvciAoYXV0byYgbmFtZSA6IGRhdGFi
YXNlTmFtZXMpIHsKKyAgICAgICAgaWYgKCFkZWxldGVEYXRhYmFzZUZpbGUob3JpZ2luLCBuYW1l
KSkgewogICAgICAgICAgICAgLy8gRXZlbiBpZiB0aGUgZmlsZSBjYW4ndCBiZSBkZWxldGVkLCB3
ZSB3YW50IHRvIHRyeSBhbmQgZGVsZXRlIHRoZSByZXN0LCBkb24ndCByZXR1cm4gZWFybHkgaGVy
ZS4KLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGRlbGV0ZSBmaWxlIGZvciBkYXRh
YmFzZSAlcyBpbiBvcmlnaW4gJXMiLCBkYXRhYmFzZU5hbWVzW2ldLmFzY2lpKCkuZGF0YSgpLCBv
cmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGRlbGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmln
aW4gJXMiLCBuYW1lLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigp
LmFzY2lpKCkuZGF0YSgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTczLDggKzk2Niw4IEBA
IGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKICNpZiBQTEFURk9STShJT1MpCiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRE
ZWxldGVEYXRhYmFzZU9yaWdpbigpOwogI2VuZGlmCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZGF0YWJhc2VOYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBt
X2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFzZShvcmlnaW4sIGRhdGFiYXNlTmFtZXNb
aV0pOworICAgICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogZGF0YWJhc2VOYW1lcykKKyAgICAg
ICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFzZShvcmlnaW4sIG5h
bWUpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpAQCAtMTE3OCwxNiArMTE3
MSwxNSBAQCBib29sIERhdGFiYXNlVHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKFNlY3VyaXR5
T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbgogICAgICAgICAgICAgICAgIERhdGFiYXNl
U2V0KiBkYXRhYmFzZVNldCA9IG5hbWVNYXAtPmdldChuYW1lKTsKICAgICAgICAgICAgICAgICBp
ZiAoZGF0YWJhc2VTZXQgJiYgZGF0YWJhc2VTZXQtPnNpemUoKSkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBoYXZlIHNvbWUgZGF0YWJhc2Ugb3BlbiB3aXRoIHRoaXMgbmFtZS4gTWFyayB0
aGVtIGFzIGRlbGV0ZWQuCi0gICAgICAgICAgICAgICAgICAgIERhdGFiYXNlU2V0Ojpjb25zdF9p
dGVyYXRvciBlbmQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZv
ciAoRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREYXRhYmFz
ZXMuYXBwZW5kKCppdCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2Ug
OiAqZGF0YWJhc2VTZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJhc2Vz
LmFwcGVuZChkYXRhYmFzZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlbGV0ZWREYXRh
YmFzZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0ZWREYXRhYmFzZXNbaV0tPm1hcmtBc0Rl
bGV0ZWRBbmRDbG9zZSgpOworICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiBkZWxldGVkRGF0YWJh
c2VzKQorICAgICAgICBkYXRhYmFzZS0+bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAKICNpZiAh
UExBVEZPUk0oSU9TKQogICAgIHJldHVybiBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFz
ZUZpbGUoZnVsbFBhdGgpOwpAQCAtMTIzMCwzMyArMTIyMiwyNiBAQCB2b2lkIERhdGFiYXNlVHJh
Y2tlcjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcygpCiAgICAgewogICAgICAgICBNdXRl
eExvY2tlciBvcGVuRGF0YWJhc2VNYXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogICAg
ICAgICBpZiAobV9vcGVuRGF0YWJhc2VNYXApIHsKLSAgICAgICAgICAgIERhdGFiYXNlT3JpZ2lu
TWFwOjpjb25zdF9pdGVyYXRvciBvcmlnaW5NYXBFbmQgPSBtX29wZW5EYXRhYmFzZU1hcC0+ZW5k
KCk7Ci0gICAgICAgICAgICBmb3IgKERhdGFiYXNlT3JpZ2luTWFwOjpjb25zdF9pdGVyYXRvciBv
cmlnaW5NYXBJdCA9IG1fb3BlbkRhdGFiYXNlTWFwLT5iZWdpbigpOyBvcmlnaW5NYXBJdCAhPSBv
cmlnaW5NYXBFbmQ7ICsrb3JpZ2luTWFwSXQpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+IG9yaWdpbiA9IG9yaWdpbk1hcEl0LT5rZXk7Ci0gICAgICAgICAgICAgICAg
RGF0YWJhc2VOYW1lTWFwKiBkYXRhYmFzZU5hbWVNYXAgPSBvcmlnaW5NYXBJdC0+dmFsdWU7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIG9wZW5EYXRhYmFzZSA6ICptX29wZW5EYXRhYmFzZU1hcCkg
eworICAgICAgICAgICAgICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gb3BlbkRh
dGFiYXNlLmtleTsKKyAgICAgICAgICAgICAgICBEYXRhYmFzZU5hbWVNYXAqIGRhdGFiYXNlTmFt
ZU1hcCA9IG9wZW5EYXRhYmFzZS52YWx1ZTsKICAgICAgICAgICAgICAgICBWZWN0b3I8U3RyaW5n
PiBkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW47CiAKICAgICAgICAgICAgICAgICAv
LyBMb29wIHRocm91Z2ggYWxsIG9wZW5lZCBkYXRhYmFzZXMgaW4gdGhpcyBvcmlnaW4uICBHZXQg
dGhlIGN1cnJlbnQgZGF0YWJhc2UgZmlsZSBwYXRoIG9mIGVhY2ggZGF0YWJhc2UgYW5kIHNlZSBp
ZgogICAgICAgICAgICAgICAgIC8vIGl0IHN0aWxsIG1hdGNoZXMgdGhlIHBhdGggc3RvcmVkIGlu
IHRoZSBvcGVuZWQgZGF0YWJhc2Ugb2JqZWN0LgotICAgICAgICAgICAgICAgIERhdGFiYXNlTmFt
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgZGJOYW1lTWFwRW5kID0gZGF0YWJhc2VOYW1lTWFwLT5lbmQo
KTsKLSAgICAgICAgICAgICAgICBmb3IgKERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZGJOYW1lTWFwSXQgPSBkYXRhYmFzZU5hbWVNYXAtPmJlZ2luKCk7IGRiTmFtZU1hcEl0ICE9IGRi
TmFtZU1hcEVuZDsgKytkYk5hbWVNYXBJdCkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcg
ZGF0YWJhc2VOYW1lID0gZGJOYW1lTWFwSXQtPmtleTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIGRhdGFiYXNlTmFtZSA6ICpkYXRhYmFzZU5hbWVNYXApIHsKICAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nIGRhdGFiYXNlRmlsZU5hbWU7CiAgICAgICAgICAgICAgICAgICAgIFNRTGl0ZVN0
YXRlbWVudCBzdGF0ZW1lbnQobV9kYXRhYmFzZSwgIlNFTEVDVCBwYXRoIEZST00gRGF0YWJhc2Vz
IFdIRVJFIG9yaWdpbj0/IEFORCBuYW1lPT87Iik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChz
dGF0ZW1lbnQucHJlcGFyZSgpID09IFNRTElURV9PSykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGVtZW50LmJpbmRUZXh0KDEsIG9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJpbmRUZXh0KDIsIGRhdGFiYXNlTmFt
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuYmluZFRleHQoMiwgZGF0YWJh
c2VOYW1lLmtleSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50LnN0ZXAo
KSA9PSBTUUxJVEVfUk9XKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFiYXNlRmls
ZU5hbWUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgwKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlbWVudC5maW5hbGl6ZSgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRlZERhdGFi
YXNlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNl
dCA9IGRiTmFtZU1hcEl0LT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgRGF0YWJhc2VTZXQ6
OmNvbnN0X2l0ZXJhdG9yIGRiRW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOwotICAgICAgICAgICAg
ICAgICAgICBmb3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYkl0ID0gZGF0YWJhc2VT
ZXQtPmJlZ2luKCk7IGRiSXQgIT0gZGJFbmQ7ICsrZGJJdCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgRGF0YWJhc2UqIGRiID0gc3RhdGljX2Nhc3Q8RGF0YWJhc2UqPigqZGJJdCk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYiA6
ICpkYXRhYmFzZU5hbWUudmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFy
ZSBkb25lIGlmIHRoaXMgZGF0YWJhc2UgaGFzIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMgZGVsZXRl
ZC4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYi0+ZGVsZXRlZCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTI3MCw3ICsxMjU1LDcgQEAgdm9pZCBE
YXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRhYmFzZXMoKQogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIGRhdGFiYXNlIG5vIGxv
bmdlciBleGlzdHMsIHdlIHNob3VsZCByZW1lbWJlciB0byByZW1vdmUgaXQgZnJvbSB0aGUgT3Jp
Z2luUXVvdGFNYW5hZ2VyIGxhdGVyLgogICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmREZWxl
dGVkRGF0YWJhc2UgJiYgZGF0YWJhc2VGaWxlTmFtZS5pc051bGwoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlbGV0ZWREYXRhYmFzZU5hbWVzRm9yVGhpc09yaWdpbi5hcHBlbmQoZGF0YWJh
c2VOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREYXRhYmFzZU5hbWVzRm9y
VGhpc09yaWdpbi5hcHBlbmQoZGF0YWJhc2VOYW1lLmtleSk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghZGVsZXRlZERhdGFiYXNlTmFt
ZXNGb3JUaGlzT3JpZ2luLmlzRW1wdHkoKSkKQEAgLTEyNzksMTkgKzEyNjQsMTggQEAgdm9pZCBE
YXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVuZWREYXRhYmFzZXMoKQogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkZWxldGVkRGF0YWJh
c2VzLnNpemUoKTsgKytpKQotICAgICAgICBkZWxldGVkRGF0YWJhc2VzW2ldLT5tYXJrQXNEZWxl
dGVkQW5kQ2xvc2UoKTsKLSAgICAKLSAgICBEZWxldGVkRGF0YWJhc2VNYXA6OmNvbnN0X2l0ZXJh
dG9yIGVuZCA9IGRlbGV0ZWREYXRhYmFzZU1hcC5lbmQoKTsKLSAgICBmb3IgKERlbGV0ZWREYXRh
YmFzZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkZWxldGVkRGF0YWJhc2VNYXAuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBpdC0+
a2V5LmdldCgpOworICAgIGZvciAoYXV0byYgZGVsZXRlZERhdGFiYXNlIDogZGVsZXRlZERhdGFi
YXNlcykKKyAgICAgICAgZGVsZXRlZERhdGFiYXNlLT5tYXJrQXNEZWxldGVkQW5kQ2xvc2UoKTsK
KworICAgIGZvciAoYXV0byYgZGVsZXRlZERhdGFiYXNlIDogZGVsZXRlZERhdGFiYXNlTWFwKSB7
CisgICAgICAgIFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4gPSBkZWxldGVkRGF0YWJhc2Uua2V5Lmdl
dCgpOwogICAgICAgICBpZiAobV9jbGllbnQpCiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0
Y2hEaWRNb2RpZnlPcmlnaW4ob3JpZ2luKTsKICAgICAgICAgCi0gICAgICAgIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBkYXRhYmFzZU5hbWVzID0gaXQtPnZhbHVlOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZGF0YWJhc2VOYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZGF0YWJhc2VOYW1lcyA9IGRlbGV0ZWREYXRhYmFzZS52YWx1ZTsK
KyAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZU5hbWUgOiBkYXRhYmFzZU5hbWVzKSB7CiAgICAg
ICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNo
RGlkTW9kaWZ5RGF0YWJhc2Uob3JpZ2luLCBkYXRhYmFzZU5hbWVzW2ldKTsKKyAgICAgICAgICAg
ICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFzZShvcmlnaW4sIGRhdGFiYXNl
TmFtZSk7CiAgICAgICAgIH0gICAgICAgIAogICAgIH0KIH0KQEAgLTEzNjUsMTkgKzEzNDksMTAg
QEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnNldERhdGFiYXNlc1BhdXNlZChib29sIHBhdXNlZCkK
IAogICAgIC8vIFRoaXMgd2Fsa2luZyBpcyAtIHNhZGx5IC0gdGhlIG9ubHkgcmVsaWFibGUgd2F5
IHRvIGdldCBhdCBlYWNoIG9wZW4gZGF0YWJhc2UgdGhyZWFkLgogICAgIC8vIFRoaXMgd2lsbCBi
ZSBjbGVhbmVyIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzU2ODA0NDE+IG9yIHNvbWUgb3RoZXIgREIg
dGhyZWFkIGNvbnNvbGlkYXRpb24gdGFrZXMgcGxhY2UuCi0gICAgRGF0YWJhc2VPcmlnaW5NYXA6
Oml0ZXJhdG9yIGkgPSBtX29wZW5EYXRhYmFzZU1hcC5nZXQoKS0+YmVnaW4oKTsKLSAgICBEYXRh
YmFzZU9yaWdpbk1hcDo6aXRlcmF0b3IgZW5kID0gbV9vcGVuRGF0YWJhc2VNYXAuZ2V0KCktPmVu
ZCgpOwotICAgIAotICAgIGZvciAoOyBpICE9IGVuZDsgKytpKSB7Ci0gICAgICAgIERhdGFiYXNl
TmFtZU1hcCogZGF0YWJhc2VOYW1lTWFwID0gaS0+dmFsdWU7Ci0gICAgICAgIERhdGFiYXNlTmFt
ZU1hcDo6aXRlcmF0b3IgaiA9IGRhdGFiYXNlTmFtZU1hcC0+YmVnaW4oKTsKLSAgICAgICAgRGF0
YWJhc2VOYW1lTWFwOjppdGVyYXRvciBkYk5hbWVNYXBFbmQgPSBkYXRhYmFzZU5hbWVNYXAtPmVu
ZCgpOwotICAgICAgICBmb3IgKDsgaiAhPSBkYk5hbWVNYXBFbmQ7ICsraikgewotICAgICAgICAg
ICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNlU2V0ID0gai0+dmFsdWU7Ci0gICAgICAgICAgICBEYXRh
YmFzZVNldDo6aXRlcmF0b3IgayA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOwotICAgICAgICAgICAg
RGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGRiU2V0RW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOwotICAg
ICAgICAgICAgZm9yICg7IGsgIT0gZGJTZXRFbmQ7ICsraykgewotICAgICAgICAgICAgICAgIERh
dGFiYXNlQ29udGV4dCogY29udGV4dCA9ICgqayktPmRhdGFiYXNlQ29udGV4dCgpOworICAgIGZv
ciAoYXV0byYgZGF0YWJhc2VOYW1lTWFwIDogbV9vcGVuRGF0YWJhc2VNYXAtPnZhbHVlcygpKSB7
CisgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VTZXQgOiBkYXRhYmFzZU5hbWVNYXAtPnZhbHVl
cygpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGRhdGFiYXNlIDogKmRhdGFiYXNlU2V0KSB7
CisgICAgICAgICAgICAgICAgRGF0YWJhc2VDb250ZXh0KiBjb250ZXh0ID0gZGF0YWJhc2UtPmRh
dGFiYXNlQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFBhdXNlZChwYXVz
ZWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcAppbmRleCA5ZjYyMjM0YWMzOWVjODQ1ZDVkNGUxMGRlYzEwMjM4M2VhZGExNmY5Li44OWE2
MmFiNzY3NzJmMjZjMjI5ZGViNzkzMTI5MzQ4ODdjM2ZmMTYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAKQEAgLTExOSwyMSArMTE5LDE0IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvcjo6c2h1dGRvd24oKQogICAgIG1faXNTaHV0dGluZ0Rvd24gPSB0cnVlOwogCiAg
ICAgLy8gTm90aWZ5IGFsbCB0cmFuc2FjdGlvbnMgaW4gcHJvZ3Jlc3MgdGhhdCB0aGUgZGF0YWJh
c2UgdGhyZWFkIGlzIHNodXR0aW5nIGRvd24KLSAgICBmb3IgKENvb3JkaW5hdGlvbkluZm9NYXA6
Oml0ZXJhdG9yIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciA9IG1fY29vcmRpbmF0aW9uSW5mb01h
cC5iZWdpbigpOwotICAgICAgICAgY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yICE9IG1fY29vcmRp
bmF0aW9uSW5mb01hcC5lbmQoKTsgKytjb29yZGluYXRpb25JbmZvSXRlcmF0b3IpIHsKLSAgICAg
ICAgQ29vcmRpbmF0aW9uSW5mbyYgaW5mbyA9IGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvci0+dmFs
dWU7Ci0KKyAgICBmb3IgKGF1dG8mIGluZm8gOiBtX2Nvb3JkaW5hdGlvbkluZm9NYXAudmFsdWVz
KCkpIHsKICAgICAgICAgLy8gQ2xlYW4gdXAgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSByZWFjaGVk
ICJsb2NrQWNxdWlyZWQiOgogICAgICAgICAvLyBUcmFuc2FjdGlvbiBwaGFzZSA0IGNsZWFudXAu
IFNlZSBjb21tZW50IG9uICJXaGF0IGhhcHBlbnMgaWYgYQogICAgICAgICAvLyB0cmFuc2FjdGlv
biBpcyBpbnRlcnJ1cHRlZD8iIGF0IHRoZSB0b3Agb2YgU1FMVHJhbnNhY3Rpb25CYWNrZW5kLmNw
cC4KICAgICAgICAgaWYgKGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbikKICAgICAgICAgICAg
IGluZm8uYWN0aXZlV3JpdGVUcmFuc2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0
aW5nRG93bigpOwotICAgICAgICBmb3IgKEhhc2hTZXQ8UmVmUHRyPFNRTFRyYW5zYWN0aW9uQmFj
a2VuZD4+OjppdGVyYXRvciBhY3RpdmVSZWFkVHJhbnNhY3Rpb25zSXRlcmF0b3IgPQotICAgICAg
ICAgICAgICAgICAgICAgaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zLmJlZ2luKCk7Ci0gICAg
ICAgICAgICAgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yICE9IGluZm8uYWN0aXZlUmVh
ZFRyYW5zYWN0aW9ucy5lbmQoKTsKLSAgICAgICAgICAgICArK2FjdGl2ZVJlYWRUcmFuc2FjdGlv
bnNJdGVyYXRvcikgewotICAgICAgICAgICAgKCphY3RpdmVSZWFkVHJhbnNhY3Rpb25zSXRlcmF0
b3IpLT5ub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7Ci0gICAgICAgIH0KKyAg
ICAgICAgZm9yIChhdXRvJiB0cmFuc2FjdGlvbiA6IGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9u
cykKKyAgICAgICAgICAgIHRyYW5zYWN0aW9uLT5ub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRp
bmdEb3duKCk7CiAKICAgICAgICAgLy8gQ2xlYW4gdXAgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBO
T1QgcmVhY2hlZCAibG9ja0FjcXVpcmVkIjoKICAgICAgICAgLy8gVHJhbnNhY3Rpb24gcGhhc2Ug
MyBjbGVhbnVwLiBTZWUgY29tbWVudCBvbiAiV2hhdCBoYXBwZW5zIGlmIGEKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKaW5kZXggZTM1OWIzYmRl
NTgyZmJhMDFhMDg4NTc0YTgyMmU5MzYzNTdjNjdmMC4uMDMxNWZiZTNmY2QwY2FkNjFhODg1Zjhl
NjhhZTk3ZGUxNzU5YzJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJz
b2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5jcHAKQEAgLTI2MCwxOCArMjYwLDE4IEBAIHZvaWQgV2ViU29ja2V0Ojpj
b25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJvdG9jb2xz
LCBFeGNlCiAgICAgLy8KICAgICAvLyBIZXJlLCB3ZSB0aHJvdyBTWU5UQVhfRVJSIGlmIHRoZSBn
aXZlbiBwcm90b2NvbHMgZG8gbm90IG1lZXQgdGhlIGxhdHRlciBjcml0ZXJpYS4gVGhpcyBiZWhh
dmlvciBkb2VzIG5vdAogICAgIC8vIGNvbXBseSB3aXRoIFdlYlNvY2tldCBBUEkgc3BlY2lmaWNh
dGlvbiwgYnV0IGl0IHNlZW1zIHRvIGJlIHRoZSBvbmx5IHJlYXNvbmFibGUgd2F5IHRvIGhhbmRs
ZSB0aGlzIGNvbmZsaWN0LgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdG9jb2xzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghaXNWYWxpZFByb3RvY29sU3RyaW5nKHByb3RvY29s
c1tpXSkpIHsKLSAgICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29s
ZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJXcm9uZyBw
cm90b2NvbCBmb3IgV2ViU29ja2V0ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2xz
W2ldKSArICInIik7CisgICAgZm9yIChhdXRvJiBwcm90b2NvbCA6IHByb3RvY29scykgeworICAg
ICAgICBpZiAoIWlzVmFsaWRQcm90b2NvbFN0cmluZyhwcm90b2NvbCkpIHsKKyAgICAgICAgICAg
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJXcm9uZyBwcm90b2NvbCBmb3IgV2ViU29ja2V0
ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wpICsgIiciKTsKICAgICAgICAgICAg
IG1fc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAgICAgSGFzaFNldDxTdHJpbmc+IHZpc2l0
ZWQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm90b2NvbHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKCF2aXNpdGVkLmFkZChwcm90b2NvbHNbaV0pLmlzTmV3RW50cnkpIHsKLSAg
ICAgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVz
c2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJXZWJTb2NrZXQgcHJvdG9jb2xz
IGNvbnRhaW4gZHVwbGljYXRlczogJyIgKyBlbmNvZGVQcm90b2NvbFN0cmluZyhwcm90b2NvbHNb
aV0pICsgIiciKTsKKyAgICBmb3IgKGF1dG8mIHByb3RvY29sIDogcHJvdG9jb2xzKSB7CisgICAg
ICAgIGlmICghdmlzaXRlZC5hZGQocHJvdG9jb2wpLmlzTmV3RW50cnkpIHsKKyAgICAgICAgICAg
IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJXZWJTb2NrZXQgcHJvdG9jb2xzIGNvbnRhaW4g
ZHVwbGljYXRlczogJyIgKyBlbmNvZGVQcm90b2NvbFN0cmluZyhwcm90b2NvbCkgKyAiJyIpOwog
ICAgICAgICAgICAgbV9zdGF0ZSA9IENMT1NFRDsKICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VS
UjsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNw
cAppbmRleCAxOWUyNWExYTVhMDUwM2MwYTNmZDdkZTZiNDYzY2E0MDViMzQ2YTgxLi4wOWQ5OWU5
ZThlZGQ4ZWY4NzY0M2RhZmVmOWY2NTJmMTk5MGRlNjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lv
bkRpc3BhdGNoZXIuY3BwCkBAIC01MCw4ICs1MCw4IEBAIHZvaWQgV2ViU29ja2V0RXh0ZW5zaW9u
RGlzcGF0Y2hlcjo6cmVzZXQoKQogCiB2b2lkIFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6
OmFkZFByb2Nlc3NvcihzdGQ6OnVuaXF1ZV9wdHI8V2ViU29ja2V0RXh0ZW5zaW9uUHJvY2Vzc29y
PiBwcm9jZXNzb3IpCiB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Byb2Nlc3NvcnMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fcHJvY2Vzc29yc1tpXS0+ZXh0ZW5zaW9uVG9r
ZW4oKSA9PSBwcm9jZXNzb3ItPmV4dGVuc2lvblRva2VuKCkpCisgICAgZm9yIChhdXRvJiBleHRl
bnNpb25Qcm9jZXNzb3IgOiBtX3Byb2Nlc3NvcnMpIHsKKyAgICAgICAgaWYgKGV4dGVuc2lvblBy
b2Nlc3Nvci0+ZXh0ZW5zaW9uVG9rZW4oKSA9PSBwcm9jZXNzb3ItPmV4dGVuc2lvblRva2VuKCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogICAgIEFTU0VSVChwcm9jZXNzb3ItPmhhbmRz
aGFrZVN0cmluZygpLmxlbmd0aCgpKTsKQEAgLTgxLDEyICs4MSwxMiBAQCB2b2lkIFdlYlNvY2tl
dEV4dGVuc2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyYgZXh0ZW5zaQogICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgiLCAiKTsKICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGV4dGVu
c2lvblRva2VuKTsKICAgICAvLyBGSVhNRTogU2hvdWxkIHVzZSBMaXN0SGFzaFNldCB0byBrZWVw
IHRoZSBvcmRlciBvZiB0aGUgcGFyYW1ldGVycy4KLSAgICBmb3IgKEhhc2hNYXA8U3RyaW5nLCBT
dHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IGV4dGVuc2lvblBhcmFtZXRlcnMuYmVn
aW4oKTsgaXRlcmF0b3IgIT0gZXh0ZW5zaW9uUGFyYW1ldGVycy5lbmQoKTsgKytpdGVyYXRvcikg
eworICAgIGZvciAoYXV0byYgcGFyYW1ldGVyIDogZXh0ZW5zaW9uUGFyYW1ldGVycykgewogICAg
ICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiOyAiKTsKLSAg
ICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChpdGVyYXRvci0+a2V5KTsK
LSAgICAgICAgaWYgKCFpdGVyYXRvci0+dmFsdWUuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9hY2Nl
cHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZChwYXJhbWV0ZXIua2V5KTsKKyAgICAgICAgaWYg
KCFwYXJhbWV0ZXIudmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRl
bnNpb25zQnVpbGRlci5hcHBlbmQoJz0nKTsKLSAgICAgICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNp
b25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgICAgIG1fYWNjZXB0
ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQocGFyYW1ldGVyLnZhbHVlKTsKICAgICAgICAgfQog
ICAgIH0KIH0KQEAgLTExOCw5ICsxMTgsOCBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRpc3Bh
dGNoZXI6OnByb2Nlc3NIZWFkZXJWYWx1ZShjb25zdCBTdHJpbmcmIGhlYWRlclZhbHVlKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgc2l6ZV90IGluZGV4
OwotICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBtX3Byb2Nlc3NvcnMuc2l6ZSgpOyAr
K2luZGV4KSB7Ci0gICAgICAgICAgICBXZWJTb2NrZXRFeHRlbnNpb25Qcm9jZXNzb3IqIHByb2Nl
c3NvciA9IG1fcHJvY2Vzc29yc1tpbmRleF0uZ2V0KCk7CisgICAgICAgIHNpemVfdCBpbmRleCA9
IDA7CisgICAgICAgIGZvciAoYXV0byYgcHJvY2Vzc29yIDogbV9wcm9jZXNzb3JzKSB7CiAgICAg
ICAgICAgICBpZiAoZXh0ZW5zaW9uVG9rZW4gPT0gcHJvY2Vzc29yLT5leHRlbnNpb25Ub2tlbigp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3Nvci0+cHJvY2Vzc1Jlc3BvbnNlKGV4dGVu
c2lvblBhcmFtZXRlcnMpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEFjY2VwdGVkRXh0
ZW5zaW9uKGV4dGVuc2lvblRva2VuLCBleHRlbnNpb25QYXJhbWV0ZXJzKTsKQEAgLTEyOSw2ICsx
MjgsNyBAQCBib29sIFdlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OnByb2Nlc3NIZWFkZXJW
YWx1ZShjb25zdCBTdHJpbmcmIGhlYWRlclZhbHVlKQogICAgICAgICAgICAgICAgIGZhaWwocHJv
Y2Vzc29yLT5mYWlsdXJlUmVhc29uKCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAgIH0KICAgICAgICAg
Ly8gVGhlcmUgaXMgbm8gZXh0ZW5zaW9uIHdoaWNoIGNhbiBwcm9jZXNzIHRoZSByZXNwb25zZS4K
ICAgICAgICAgaWYgKGluZGV4ID09IG1fcHJvY2Vzc29ycy5zaXplKCkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5j
cHAKaW5kZXggMzIyYWE0MDFkNGUwZWM0MDFiYjI4M2ZiZDUzZWFhZGQ1NWRhYTc1Zi4uNTUxZGRm
MjJhOTdlMzMxMjg4OTQ5ODQ1OTIxMGVmYTU2ODc1MzJlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKQEAg
LTIyNCw4ICsyMjQsOCBAQCBDU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNo
YWtlTWVzc2FnZSgpIGNvbnN0CiAgICAgLy8gb3JkZXIgaXMgbm90IG1lYW5pbmdmdWwuICBUaHVz
LCBpdCdzIG9rIHRvIHNlbmQgdGhlIG9yZGVyIHdlIGNvbnN0cnVjdGVkCiAgICAgLy8gdGhlIGZp
ZWxkcy4KIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKSB7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZpZWxkc1tpXSk7CisgICAgZm9yIChhdXRvJiBmaWVs
ZCA6IGZpZWxkcykgeworICAgICAgICBidWlsZGVyLmFwcGVuZChmaWVsZCk7CiAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kTGl0ZXJhbCgiXHJcbiIpOwogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254468</attachid>
            <date>2015-06-07 20:00:35 -0700</date>
            <delta_ts>2015-06-07 21:23:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145541-20150608120009.patch</filename>
            <type>text/plain</type>
            <size>51861</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTIxZjUxYTFjYTdlZTU2
MWMyM2FlOGExY2NmNWZlMDllMmIxNDkxZi4uZTQ2NzYyZTE3ZDNlYmEyYzM2NzYyMzJlNjIxNTNj
MjE1Y2MwZWRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE1LTA2LTA3ICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL01vZHVsZXMgLSAyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZXMu
CisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ0NvbmZpZ3VyYXRpb246OmljZVNlcnZlcnMpOgorICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSVENEVE1GU2VuZGVyOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UlRDRGF0YUNoYW5uZWw6OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9jZXNzSWNlU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9u
Ojp+UlRDUGVlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rp
b246OmdldFN0cmVhbUJ5SWQpOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246
Omhhc0xvY2FsU3RyZWFtV2l0aFRyYWNrSWQpOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNv
bm5lY3Rpb246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246OnNj
aGVkdWxlZEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENTdGF0c1JlcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c1JlcG9ydDo6bmFt
ZXMpOgorICAgICAgICAqIE1vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNv
bnRlbnRVdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0UHJvdG9jb2xIYW5kbGVyV2hp
dGVsaXN0KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9CdWZmZXI6Om1lbW9yeUNvc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFT
dHJlYW1Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJlZkZpbmlz
aGVkU291cmNlTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJlZlVu
ZmluaXNoZWRTb3VyY2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6Omhh
bmRsZURlZmVycmVkRmluaXNoRGVyZWZzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6aGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Db250ZXh0Ojp1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb05vZGU6OnVwZGF0ZUNoYW5uZWxzRm9ySW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Ob2RlOjpwdWxsSW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6
aW5wdXRzQXJlU2lsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6c2lsZW5jZU91
dHB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjp1bnNpbGVuY2VPdXRwdXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZW5hYmxlT3V0cHV0c0lmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZGlzYWJsZU91dHB1dHNJZk5lY2Vzc2FyeSk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OmZpbmlzaERlcmVmKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvTm9kZUlucHV0OjpudW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Tm9kZUlucHV0OjpzdW1BbGxDb25uZWN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGVPdXRwdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0cHV0
Ojpwcm9wYWdhdGVDaGFubmVsQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0
cHV0OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1ZXMpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvUGFyYW1UaW1lbGluZTo6aW5zZXJ0RXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9T
dW1taW5nSnVuY3Rpb246OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6c2V0QXVkaW9Gb3JtYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6Y29uc3VtZUF1ZGlvKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2F2ZVNoYXBlclByb2Nlc3Nvcjo6c2V0T3ZlcnNhbXBsZSk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRocmVhZDo6aGFuZGxlUGF1c2VkUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
aHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omlu
dGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnVzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnNldERhdGFiYXNlc1BhdXNlZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6
Y29ubmVjdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lv
bkRpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0RXh0ZW5zaW9uRGlz
cGF0Y2hlcjo6YWRkUHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OnByb2Nlc3NIZWFkZXJWYWx1ZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3NhZ2Up
OgorCiAyMDE1LTA2LTA3ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNv
bT4KIAogICAgICAgICBGaXggc3RybmNweSB1c2UgaW4gV2ViQ29yZTo6VGV4dDo6Zm9ybWF0Rm9y
RGVidWdnZXIKQEAgLTY5MjMwLDcgKzY5MzIxLDcgQEAKICAgICAgICAgd2l0aCBjYWxsYmFja3Mg
aXMgbGltaXRpbmcgYSBudW1iZXIgb2Ygd2F5cy4gVGhlIGNhbGxiYWNrIG5hbWVzIGFyZSB2ZXJ5
IGFtYmlndW91cywgdGhlIGNhbGxiYWNrcwogICAgICAgICBtdXN0IGVpdGhlciBiZSBvbiBhIHNl
cGFyYXRlIG9iamVjdCAobW9yZSBib2lsZXJwbGF0ZSksIG9yIHRoZSBjYWxsYmFjayBtdXN0IGJl
IHB1YmxpYyBmb3IKICAgICAgICAgSHlzdGVyZXNpc0FjdGl2aXR5IHRvIGNhbGwgdGhlbSwgb3Ig
ZnJpZW5kcyBnZXQgaW52b2x2ZWQuIFdpdGhvdXQgdGhlIGJvaWxlcnBsYXRlIG9mIGV4dHJhCi0g
ICAgICAgIGRlbGVnYXRlIG9iamVjdHMgaXQncyBoYXJkIHRvIHNjYWxlIHVzZSBvZiB0aGVzZSBv
YmplY3RzIC3CoGEgc2luZ2xlIG9iamVjdCBjYW4ndCBzZXJ2ZSBhcyBhCisgICAgICAgIGRlbGVn
YXRlIG9iamVjdHMgaXQncyBoYXJkIHRvIHNjYWxlIHVzZSBvZiB0aGVzZSBvYmplY3RzIC0gYSBz
aW5nbGUgb2JqZWN0IGNhbid0IHNlcnZlIGFzIGEKICAgICAgICAgZGVsZWdhdGUgZm9yIG11bHRp
cGxlIEh5c3RlcmVzaXNBY3Rpdml0eSBtZW1iZXJzLgogCiAgICAgICAgIEluc3RlYWQsIG1ha2Ug
SHlzdGVyZXNpc0FjdGl2aXR5IHRha2UgYSBsYW1iZGEgdG8gY2FsbGJhY2sgb24gc3RhdGUgY2hh
bmdlLiBUbyBzaW1wbGlmeSwgY2hhbmdlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENDb25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaAppbmRleCA0ZmZhOTZlMDJlMzI4MWRj
YzI2ODE0YzM4MjZlYWQ1YjUwZTM4NmU0Li42MzdkNGQ5Y2JiYWJiOGQwZWRjMzg4ZDBkZDA0OTMz
ZWI1ZjY4MTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0NvbmZpZ3VyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaApAQCAtNjcsMTAgKzY3LDggQEAgcHVibGljOgogICAgIFZl
Y3RvcjxSZWZQdHI8UlRDSWNlU2VydmVyPj4gaWNlU2VydmVycygpIGNvbnN0CiAgICAgewogICAg
ICAgICBWZWN0b3I8UmVmUHRyPFJUQ0ljZVNlcnZlcj4+IHNlcnZlcnM7Ci0gICAgICAgIFZlY3Rv
cjxSZWZQdHI8UlRDSWNlU2VydmVyUHJpdmF0ZT4+IHByaXZhdGVTZXJ2ZXJzID0gbV9wcml2YXRl
LT5pY2VTZXJ2ZXJzKCk7Ci0KLSAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBwcml2YXRlU2VydmVy
cy5iZWdpbigpOyBpdGVyICE9IHByaXZhdGVTZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
ICAgICBzZXJ2ZXJzLmFwcGVuZChSVENJY2VTZXJ2ZXI6OmNyZWF0ZSgqaXRlcikpOworICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZlciA6IG1fcHJpdmF0ZS0+aWNlU2VydmVycygpKQorICAgICAgICAg
ICAgc2VydmVycy5hcHBlbmQoUlRDSWNlU2VydmVyOjpjcmVhdGUoc2VydmVyKSk7CiAKICAgICAg
ICAgcmV0dXJuIHNlcnZlcnM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAKaW5kZXggM2NmZmI4NmI2YTVkYjMzNWYw
YTk5NTY4YjUwNTFhMGE0MjQyY2YwOS4uNTI3YjVkMTlkOTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4
YmNkNWQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENEVE1GU2VuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC0xNjEsOSArMTYxLDggQEAgdm9pZCBSVENEVE1GU2VuZGVy
OjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBl
dmVudHM7CiAgICAgZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCi0gICAgVmVjdG9y
PFJlZlB0cjxFdmVudD4+OjppdGVyYXRvciBpdCA9IGV2ZW50cy5iZWdpbigpOwotICAgIGZvciAo
OyBpdCAhPSBldmVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoKCppdCku
cmVsZWFzZSgpKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNw
YXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hh
bm5lbC5jcHAKaW5kZXggOTBkMDZjNzliOTc0ZTgzODJlMDVkNzNmMmJiOGRkNGFkYmViMWY1Yi4u
ODI3MTkxYzcyN2U3ODVhMDA2MGRkYTA0N2MxOTMzZDg4YTYzZmU2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAg
LTMyMCwxMSArMzIwLDggQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c2NoZWR1bGVkRXZlbnRUaW1l
ckZpcmVkKCkKICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gZXZlbnRzOwogICAgIGV2ZW50cy5z
d2FwKG1fc2NoZWR1bGVkRXZlbnRzKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+Pjo6aXRl
cmF0b3IgaXQgPSBldmVudHMuYmVnaW4oKTsKLSAgICBmb3IgKDsgaXQgIT0gZXZlbnRzLmVuZCgp
OyArK2l0KQotICAgICAgICBkaXNwYXRjaEV2ZW50KCgqaXQpLnJlbGVhc2UoKSk7Ci0KLSAgICBl
dmVudHMuY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBk
aXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggMTYwOTgxNmI4NTk5ZDBkMGRhMzMxNDJhYjJlMDY4OTA0
MTJhNTVkNC4uYjkwNDA0Y2FhYTI0MjAzODI5YTc0ZDNkOGE3ZDIyNGQwNGY3YTdlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi5jcHAKQEAgLTk1LDggKzk1LDggQEAgc3RhdGljIEV4Y2VwdGlvbkNvZGUgcHJvY2Vz
c0ljZVNlcnZlcihjb25zdCBEaWN0aW9uYXJ5JiBpY2VTZXJ2ZXIsIFJUQ0NvbmZpZ3VyYXQKICAg
ICAgICAgcmV0dXJuIElOVkFMSURfQUNDRVNTX0VSUjsKIAogICAgIGlmICh1cmxTdHJpbmcuZmlu
ZCgnLCcpICE9IG5vdEZvdW5kICYmIGljZVNlcnZlci5nZXQoInVybHMiLCB1cmxzTGlzdCkgJiYg
dXJsc0xpc3Quc2l6ZSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byBpdGVyID0gdXJsc0xpc3QuYmVn
aW4oKTsgaXRlciAhPSB1cmxzTGlzdC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAo
IXZhbGlkYXRlSWNlU2VydmVyVVJMKCppdGVyKSkKKyAgICAgICAgZm9yIChhdXRvJiB1cmwgOiB1
cmxzTGlzdCkgeworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUljZVNlcnZlclVSTCh1cmwpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewpAQCAtMjAzLDggKzIwMyw4IEBAIFJUQ1BlZXJDb25uZWN0aW9uOjp+UlRDUGVl
ckNvbm5lY3Rpb24oKQogewogICAgIHN0b3AoKTsKIAotICAgIGZvciAoYXV0byBzdHJlYW0gPSBt
X2xvY2FsU3RyZWFtcy5iZWdpbigpLCBlbmQgPSBtX2xvY2FsU3RyZWFtcy5lbmQoKTsgc3RyZWFt
ICE9IGVuZDsgKytzdHJlYW0pCi0gICAgICAgICgqc3RyZWFtKS0+cmVtb3ZlT2JzZXJ2ZXIodGhp
cyk7CisgICAgZm9yIChhdXRvJiBsb2NhbFN0cmVhbSA6IG1fbG9jYWxTdHJlYW1zKQorICAgICAg
ICBsb2NhbFN0cmVhbS0+cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiB9CiAKIHZvaWQgUlRDUGVlckNv
bm5lY3Rpb246OmNyZWF0ZU9mZmVyKFBhc3NSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxSVENQZWVyQ29ubmVjdGlvbkVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGNvbnN0IERpY3Rpb25hcnkmIG9mZmVyT3B0aW9ucywg
RXhjZXB0aW9uQ29kZSYgZWMpCkBAIC01MTQsMTQgKzUxNCwxNCBAQCBWZWN0b3I8UmVmUHRyPE1l
ZGlhU3RyZWFtPj4gUlRDUGVlckNvbm5lY3Rpb246OmdldFJlbW90ZVN0cmVhbXMoKSBjb25zdAog
CiBNZWRpYVN0cmVhbSogUlRDUGVlckNvbm5lY3Rpb246OmdldFN0cmVhbUJ5SWQoY29uc3QgU3Ry
aW5nJiBzdHJlYW1JZCkKIHsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fbG9jYWxTdHJlYW1zLmJl
Z2luKCk7IGl0ZXIgIT0gbV9sb2NhbFN0cmVhbXMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBp
ZiAoKCppdGVyKS0+aWQoKSA9PSBzdHJlYW1JZCkKLSAgICAgICAgICAgIHJldHVybiBpdGVyLT5n
ZXQoKTsKKyAgICBmb3IgKGF1dG8mIGxvY2FsU3RyZWFtIDogbV9sb2NhbFN0cmVhbXMpIHsKKyAg
ICAgICAgaWYgKGxvY2FsU3RyZWFtLT5pZCgpID09IHN0cmVhbUlkKQorICAgICAgICAgICAgcmV0
dXJuIGxvY2FsU3RyZWFtLmdldCgpOwogICAgIH0KIAotICAgIGZvciAoYXV0byBpdGVyID0gbV9y
ZW1vdGVTdHJlYW1zLmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW1vdGVTdHJlYW1zLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmlkKCkgPT0gc3RyZWFtSWQpCi0gICAgICAgICAg
ICByZXR1cm4gaXRlci0+Z2V0KCk7CisgICAgZm9yIChhdXRvJiByZW1vdGVTdHJlYW0gOiBtX3Jl
bW90ZVN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHJlbW90ZVN0cmVhbS0+aWQoKSA9PSBzdHJlYW1J
ZCkKKyAgICAgICAgICAgIHJldHVybiByZW1vdGVTdHJlYW0uZ2V0KCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC01NTEsOCArNTUxLDggQEAgUGFzc1JlZlB0cjxSVENEYXRhQ2hh
bm5lbD4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZURhdGFDaGFubmVsKFN0cmluZyBsYWJlbCwg
Y28KIAogYm9vbCBSVENQZWVyQ29ubmVjdGlvbjo6aGFzTG9jYWxTdHJlYW1XaXRoVHJhY2tJZChj
b25zdCBTdHJpbmcmIHRyYWNrSWQpCiB7Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX2xvY2FsU3Ry
ZWFtcy5iZWdpbigpOyBpdGVyICE9IG1fbG9jYWxTdHJlYW1zLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgaWYgKCgqaXRlciktPmdldFRyYWNrQnlJZCh0cmFja0lkKSkKKyAgICBmb3IgKGF1dG8m
IGxvY2FsU3RyZWFtIDogbV9sb2NhbFN0cmVhbXMpIHsKKyAgICAgICAgaWYgKGxvY2FsU3RyZWFt
LT5nZXRUcmFja0J5SWQodHJhY2tJZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjg1LDkgKzY4NSw4IEBAIHZvaWQgUlRDUGVlckNvbm5l
Y3Rpb246OnN0b3AoKQogICAgIG1faWNlQ29ubmVjdGlvblN0YXRlID0gSWNlQ29ubmVjdGlvblN0
YXRlQ2xvc2VkOwogICAgIG1fc2lnbmFsaW5nU3RhdGUgPSBTaWduYWxpbmdTdGF0ZUNsb3NlZDsK
IAotICAgIFZlY3RvcjxSZWZQdHI8UlRDRGF0YUNoYW5uZWw+Pjo6aXRlcmF0b3IgaSA9IG1fZGF0
YUNoYW5uZWxzLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gbV9kYXRhQ2hhbm5lbHMuZW5kKCk7
ICsraSkKLSAgICAgICAgKCppKS0+c3RvcCgpOworICAgIGZvciAoYXV0byYgY2hhbm5lbCA6IG1f
ZGF0YUNoYW5uZWxzKQorICAgICAgICBjaGFubmVsLT5zdG9wKCk7CiB9CiAKIGNvbnN0IGNoYXIq
IFJUQ1BlZXJDb25uZWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAgLTc0Myw5
ICs3NDIsOCBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpzY2hlZHVsZWRFdmVudFRpbWVyRmly
ZWQoKQogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CiAgICAgZXZlbnRzLnN3YXAo
bV9zY2hlZHVsZWRFdmVudHMpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+OjppdGVyYXRv
ciBpdCA9IGV2ZW50cy5iZWdpbigpOwotICAgIGZvciAoOyBpdCAhPSBldmVudHMuZW5kKCk7ICsr
aXQpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoKCppdCkucmVsZWFzZSgpKTsKKyAgICBmb3IgKGF1
dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2Uo
KSk7CiAKICAgICBldmVudHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKaW5kZXggOTg5YTc2ZmZjMDg2
NzEzYTFmNjA2ZmFjNWRkNGQxNmNhMzkzOWIzNS4uYTAzNTYzNDUwZTRhNTVhNjc0YjQ1OGQzNGIx
MzNhYjc1MmY0NTYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKQEAgLTQ4LDkgKzQ4LDggQEAgUlRDU3RhdHNSZXBv
cnQ6OlJUQ1N0YXRzUmVwb3J0KGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgdHlwZSwg
ZG91YmxlIHRpbWUKIFZlY3RvcjxTdHJpbmc+IFJUQ1N0YXRzUmVwb3J0OjpuYW1lcygpIGNvbnN0
CiB7CiAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwotICAgIGZvciAoSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0cy5iZWdpbigpOyBpdCAhPSBtX3N0
YXRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoaXQtPmtleSk7Ci0gICAg
fQorICAgIGZvciAoYXV0byYgc3RhdCA6IG1fc3RhdHMua2V5cygpKQorICAgICAgICByZXN1bHQu
YXBwZW5kKHN0YXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNvbnRlbnRV
dGlscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9O
YXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwCmluZGV4IGNjYTdkOWUzMTk0YzgwNWRiOTIwOGZlZTVj
NzBmNWYyMjFiNWQyOWMuLjU2ODY3MTUyOWFiNTA4MDRhOTc5Y2E2MzQzY2RlYjJhYTJhMzIwNzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxz
L05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9u
YXZpZ2F0b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0aWxzLmNwcApAQCAtNDQsMjkg
KzQ0LDggQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiogcHJvdG9jb2xXaGl0ZWxpc3Q7CiBzdGF0
aWMgdm9pZCBpbml0UHJvdG9jb2xIYW5kbGVyV2hpdGVsaXN0KCkKIHsKICAgICBwcm90b2NvbFdo
aXRlbGlzdCA9IG5ldyBIYXNoU2V0PFN0cmluZz47Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHBy
b3RvY29sc1tdID0gewotICAgICAgICAiYml0Y29pbiIsCi0gICAgICAgICJnZW8iLAotICAgICAg
ICAiaW0iLAotICAgICAgICAiaXJjIiwKLSAgICAgICAgImlyY3MiLAotICAgICAgICAibWFnbmV0
IiwKLSAgICAgICAgIm1haWx0byIsCi0gICAgICAgICJtbXMiLAotICAgICAgICAibmV3cyIsCi0g
ICAgICAgICJubnRwIiwKLSAgICAgICAgInNpcCIsCi0gICAgICAgICJzbXMiLAotICAgICAgICAi
c21zdG8iLAotICAgICAgICAic3NoIiwKLSAgICAgICAgInRlbCIsCi0gICAgICAgICJ1cm4iLAot
ICAgICAgICAid2ViY2FsIiwKLSAgICAgICAgInd0YWkiLAotICAgICAgICAieG1wcCIsCi0gICAg
fTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgocHJvdG9jb2xz
KTsgKytpKQotICAgICAgICBwcm90b2NvbFdoaXRlbGlzdC0+YWRkKHByb3RvY29sc1tpXSk7Cisg
ICAgZm9yIChhdXRvKiBwcm90b2NvbCA6IHsgImJpdGNvaW4iLCAiZ2VvIiwgImltIiwgImlyYyIs
ICJpcmNzIiwgIm1hZ25ldCIsICJtYWlsdG8iLCAibW1zIiwgIm5ld3MiLCAibm50cCIsICJzaXAi
LCAic21zIiwgInNtc3RvIiwgInNzaCIsICJ0ZWwiLCAidXJuIiwgIndlYmNhbCIsICJ3dGFpIiwg
InhtcHAiIH0pCisgICAgICAgIHByb3RvY29sV2hpdGVsaXN0LT5hZGQocHJvdG9jb2wpOwogfQog
CiBzdGF0aWMgYm9vbCB2ZXJpZnlDdXN0b21IYW5kbGVyVVJMKGNvbnN0IFVSTCYgYmFzZVVSTCwg
Y29uc3QgU3RyaW5nJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKaW5kZXggNzg1MDM0MGExMGE3
ZTM5NDc3NDljMjAwNDBlNjgwYzVhMWIzNGRlOS4uOTcxNDlmNGUyMDY2NjEwOWZmZWMxMjJmNGVi
MTUyN2U3MWI3MWU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
U3BlZWNoU3ludGhlc2lzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXMuY3BwCkBAIC03NCwxMCArNzQsOCBAQCBjb25zdCBWZWN0b3I8UmVmUHRy
PFNwZWVjaFN5bnRoZXNpc1ZvaWNlPj4mIFNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2VzKCkKICAg
ICAgICAgbV9wbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpemVyPih0aGlzKTsKIAogICAgIC8vIElmIHRoZSB2b2ljZUxpc3Qg
aXMgZW1wdHksIHRoYXQncyB0aGUgY3VlIHRvIGdldCB0aGUgdm9pY2VzIGZyb20gdGhlIHBsYXRm
b3JtIGFnYWluLgotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNWb2ljZT4+JiBwbGF0Zm9ybVZvaWNlcyA9IG1fcGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci0+
dm9pY2VMaXN0KCk7Ci0gICAgc2l6ZV90IHZvaWNlQ291bnQgPSBwbGF0Zm9ybVZvaWNlcy5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCB2b2ljZUNvdW50OyBrKyspCi0gICAgICAg
IG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKHBsYXRmb3Jt
Vm9pY2VzW2tdKSk7CisgICAgZm9yIChhdXRvJiB2b2ljZSA6IG1fcGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplci0+dm9pY2VMaXN0KCkpCisgICAgICAgIG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hT
eW50aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlKSk7CiAKICAgICByZXR1cm4gbV92b2ljZUxpc3Q7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3Bw
CmluZGV4IDMxZGE5NGMyN2E0NDEzYzIwYzY3ODZlZmMwZmI3OGI1ZDNmYjQ1YTIuLjhjYjhhNzFk
OTg4Y2E2ZGIwZTRlY2I0ZTFjOWU5ZTQ2ZTYwN2I3MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCkBAIC0xMjUsOCArMTI1LDggQEAgdm9p
ZCBBdWRpb0J1ZmZlcjo6emVybygpCiBzaXplX3QgQXVkaW9CdWZmZXI6Om1lbW9yeUNvc3QoKSBj
b25zdAogewogICAgIHNpemVfdCBjb3N0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jaGFubmVscy5zaXplKCkgOyArK2kpCi0gICAgICAgIGNvc3QgKz0gbV9jaGFubmVsc1tp
XS0+Ynl0ZUxlbmd0aCgpOworICAgIGZvciAoYXV0byYgY2hhbm5lbCA6IG1fY2hhbm5lbHMpCisg
ICAgICAgIGNvc3QgKz0gY2hhbm5lbC0+Ynl0ZUxlbmd0aCgpOwogICAgIHJldHVybiBjb3N0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5j
cHAKaW5kZXggYTI5MzE2YTE1ZmYyZWI3OTU4OTIwNmExMjQ1MTBkZmEwN2U1ODEwYS4uZTNlYzkx
ODNlNWE0NDFmOTYxMjg3NjNhZGYyNDJhMDNmY2U3NWNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtNDYwLDEyICs0NjAsMTEg
QEAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gQXVkaW9Db250ZXh0Ojpj
cmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWQKIAogICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIHBy
b3ZpZGVyID0gMDsKIAotICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+IGF1ZGlv
VHJhY2tzID0gbWVkaWFTdHJlYW0tPmdldEF1ZGlvVHJhY2tzKCk7CiAgICAgUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2s+IGF1ZGlvVHJhY2s7CiAKICAgICAvLyBGSVhNRTogZ2V0IGEgcHJvdmlkZXIg
Zm9yIG5vbi1sb2NhbCBNZWRpYVN0cmVhbXMgKGxpa2UgZnJvbSBhIHJlbW90ZSBwZWVyKS4KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvVHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGF1ZGlvVHJhY2sgPSBhdWRpb1RyYWNrc1tpXTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bWVkaWFTdHJlYW0tPmdldEF1ZGlvVHJhY2tzKCkpIHsKKyAgICAgICAgYXVkaW9UcmFjayA9IHRy
YWNrOwogICAgICAgICBpZiAoYXVkaW9UcmFjay0+c291cmNlKCktPmlzQXVkaW9TdHJlYW1Tb3Vy
Y2UoKSkgewogICAgICAgICAgICAgYXV0byBzb3VyY2UgPSBzdGF0aWNfY2FzdDxNZWRpYVN0cmVh
bUF1ZGlvU291cmNlKj4oYXVkaW9UcmFjay0+c291cmNlKCkpOwogICAgICAgICAgICAgQVNTRVJU
KCFzb3VyY2UtPmRldmljZUlkKCkuaXNFbXB0eSgpKTsKQEAgLTY2NCw4ICs2NjMsOCBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6ZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCkKIHsKICAgICBBU1NFUlQo
aXNHcmFwaE93bmVyKCkpOwogICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkgfHwgaXNBdWRpb1Ro
cmVhZEZpbmlzaGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZpbmlzaGVk
Tm9kZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGRlcmVmTm9kZShtX2ZpbmlzaGVkTm9kZXNbaV0p
OworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fZmluaXNoZWROb2RlcykKKyAgICAgICAgZGVyZWZO
b2RlKG5vZGUpOwogCiAgICAgbV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7CiB9CkBAIC02OTIsOCAr
NjkxLDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVmTm9kZShBdWRpb05vZGUqIG5vZGUpCiB2
b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSAmJiBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVmZXJlbmNlZE5vZGVzLnNpemUoKTsgKytpKQotICAg
ICAgICBtX3JlZmVyZW5jZWROb2Rlc1tpXS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVj
dGlvbik7CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9yZWZlcmVuY2VkTm9kZXMpCisgICAgICAg
IG5vZGUtPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwogCiAgICAgbV9yZWZl
cmVuY2VkTm9kZXMuY2xlYXIoKTsKIH0KQEAgLTgyNSwxMCArODI0LDggQEAgdm9pZCBBdWRpb0Nv
bnRleHQ6OmhhbmRsZVBvc3RSZW5kZXJUYXNrcygpCiB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxl
RGVmZXJyZWRGaW5pc2hEZXJlZnMoKQogewogICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkgJiYg
aXNHcmFwaE93bmVyKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RlZmVycmVk
RmluaXNoRGVyZWZMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZSogbm9kZSA9
IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3RbaV07CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9k
ZWZlcnJlZEZpbmlzaERlcmVmTGlzdCkKICAgICAgICAgbm9kZS0+ZmluaXNoRGVyZWYoQXVkaW9O
b2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0gICAgfQogICAgIAogICAgIG1fZGVmZXJyZWRGaW5p
c2hEZXJlZkxpc3QuY2xlYXIoKTsKIH0KQEAgLTkyMiw4ICs5MTksOCBAQCB2b2lkIEF1ZGlvQ29u
dGV4dDo6aGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMoKQogewogICAgIEFTU0VSVChp
c0dyYXBoT3duZXIoKSk7ICAgIAogCi0gICAgZm9yIChIYXNoU2V0PEF1ZGlvU3VtbWluZ0p1bmN0
aW9uKj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5U3VtbWluZ0p1bmN0aW9ucy5iZWdpbigpOyBpICE9
IG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLmVuZCgpOyArK2kpCi0gICAgICAgICgqaSktPnVwZGF0
ZVJlbmRlcmluZ1N0YXRlKCk7CisgICAgZm9yIChhdXRvJiBqdW5jdGlvbiA6IG1fZGlydHlTdW1t
aW5nSnVuY3Rpb25zKQorICAgICAgICBqdW5jdGlvbi0+dXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsK
IAogICAgIG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLmNsZWFyKCk7CiB9CkBAIC05MzIsOCArOTI5
LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpCiB7
CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCiAKLSAgICBmb3IgKEhhc2hTZXQ8QXVk
aW9Ob2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5iZWdp
bigpOyBpICE9IG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmVuZCgpOyArK2kpCi0gICAgICAgICgq
aSktPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CisgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX2Rp
cnR5QXVkaW9Ob2RlT3V0cHV0cykKKyAgICAgICAgb3V0cHV0LT51cGRhdGVSZW5kZXJpbmdTdGF0
ZSgpOwogCiAgICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuY2xlYXIoKTsKIH0KQEAgLTk2Miwx
MSArOTU5LDkgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVwZGF0ZUF1dG9tYXRpY1B1bGxOb2Rlcygp
CiAgICAgICAgIC8vIENvcHkgZnJvbSBtX2F1dG9tYXRpY1B1bGxOb2RlcyB0byBtX3JlbmRlcmlu
Z0F1dG9tYXRpY1B1bGxOb2Rlcy4KICAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9k
ZXMucmVzaXplKG1fYXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7CiAKLSAgICAgICAgdW5zaWdu
ZWQgaiA9IDA7Ci0gICAgICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGUqPjo6aXRlcmF0b3IgaSA9
IG1fYXV0b21hdGljUHVsbE5vZGVzLmJlZ2luKCk7IGkgIT0gbV9hdXRvbWF0aWNQdWxsTm9kZXMu
ZW5kKCk7ICsraSwgKytqKSB7Ci0gICAgICAgICAgICBBdWRpb05vZGUqIG91dHB1dCA9ICppOwot
ICAgICAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXNbal0gPSBvdXRwdXQ7Ci0g
ICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGZvciAoYXV0byYgb3V0
cHV0IDogbV9hdXRvbWF0aWNQdWxsTm9kZXMpCisgICAgICAgICAgICBtX3JlbmRlcmluZ0F1dG9t
YXRpY1B1bGxOb2Rlc1tpKytdID0gb3V0cHV0OwogCiAgICAgICAgIG1fYXV0b21hdGljUHVsbE5v
ZGVzTmVlZFVwZGF0aW5nID0gZmFsc2U7CiAgICAgfQpAQCAtOTc2LDggKzk3MSw4IEBAIHZvaWQg
QXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpCiB7CiAgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7CiAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2ldLT5wcm9jZXNzSWZOZWNl
c3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3JlbmRlcmlu
Z0F1dG9tYXRpY1B1bGxOb2RlcykKKyAgICAgICAgbm9kZS0+cHJvY2Vzc0lmTmVjZXNzYXJ5KGZy
YW1lc1RvUHJvY2Vzcyk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEF1ZGlvQ29udGV4
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXggMzI2NGI1YjFiNTEwMDE2MGU3Zjg4MzI3
ZmNiNjUxNWMyYzZlZGNmMC4uZjQ2YjRiZTI0NGQ0MDdkMDA0OTEzYWI1NDdkOTExZDkxOGVjMDNl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcApA
QCAtMjc3LDggKzI3Nyw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpzZXRDaGFubmVsSW50ZXJwcmV0YXRp
b24oY29uc3QgU3RyaW5nJiBpbnRlcnByZXRhdGlvbiwgRXhjZXB0aW9uCiAKIHZvaWQgQXVkaW9O
b2RlOjp1cGRhdGVDaGFubmVsc0ZvcklucHV0cygpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1faW5wdXRzLnNpemUoKTsgKytpKQotICAgICAgICBpbnB1dChpKS0+Y2hhbmdlZE91
dHB1dHMoKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpCisgICAgICAgIGlucHV0
LT5jaGFuZ2VkT3V0cHV0cygpOwogfQogCiBFdmVudFRhcmdldEludGVyZmFjZSBBdWRpb05vZGU6
OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIEF1
ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlu
cHV0KQogewogICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0
KCktPmlzR3JhcGhPd25lcigpKTsKIAotICAgIGZvciAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEF1
ZGlvTm9kZUlucHV0PiYgc2F2ZWRJbnB1dCA6IG1faW5wdXRzKSB7CisgICAgZm9yIChhdXRvJiBz
YXZlZElucHV0IDogbV9pbnB1dHMpIHsKICAgICAgICAgaWYgKGlucHV0ID09IHNhdmVkSW5wdXQu
Z2V0KCkpIHsKICAgICAgICAgICAgIGlucHV0LT51cGRhdGVJbnRlcm5hbEJ1cygpOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMzQ1LDE0ICszNDUsMTQgQEAgdm9pZCBBdWRpb05vZGU6OnB1bGxJ
bnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1
ZGlvVGhyZWFkKCkpOwogICAgIAogICAgIC8vIFByb2Nlc3MgYWxsIG9mIHRoZSBBdWRpb05vZGVz
IGNvbm5lY3RlZCB0byBvdXIgaW5wdXRzLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2lucHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgaW5wdXQoaSktPnB1bGwoMCwgZnJhbWVzVG9Q
cm9jZXNzKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpCisgICAgICAgIGlucHV0
LT5wdWxsKDAsIGZyYW1lc1RvUHJvY2Vzcyk7CiB9CiAKIGJvb2wgQXVkaW9Ob2RlOjppbnB1dHNB
cmVTaWxlbnQoKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lucHV0cy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAoIWlucHV0KGkpLT5idXMoKS0+aXNTaWxlbnQoKSkKKyAg
ICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpIHsKKyAgICAgICAgaWYgKCFpbnB1dC0+YnVz
KCktPmlzU2lsZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzYwLDE0ICszNjAsMTQgQEAgYm9vbCBBdWRpb05vZGU6OmlucHV0c0Fy
ZVNpbGVudCgpCiAKIHZvaWQgQXVkaW9Ob2RlOjpzaWxlbmNlT3V0cHV0cygpCiB7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0
cHV0KGkpLT5idXMoKS0+emVybygpOworICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9vdXRwdXRz
KQorICAgICAgICBvdXRwdXQtPmJ1cygpLT56ZXJvKCk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjp1
bnNpbGVuY2VPdXRwdXRzKCkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRw
dXRzLnNpemUoKTsgKytpKQotICAgICAgICBvdXRwdXQoaSktPmJ1cygpLT5jbGVhclNpbGVudEZs
YWcoKTsKKyAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAgICAgb3V0cHV0
LT5idXMoKS0+Y2xlYXJTaWxlbnRGbGFnKCk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjplbmFibGVP
dXRwdXRzSWZOZWNlc3NhcnkoKQpAQCAtMzc3LDggKzM3Nyw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpl
bmFibGVPdXRwdXRzSWZOZWNlc3NhcnkoKQogICAgICAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2Nr
ZXIgbG9ja2VyKCpjb250ZXh0KCkpOwogCiAgICAgICAgIG1faXNEaXNhYmxlZCA9IGZhbHNlOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRwdXRzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgb3V0cHV0KGkpLT5lbmFibGUoKTsKKyAgICAgICAgZm9yIChhdXRvJiBvdXRw
dXQgOiBtX291dHB1dHMpCisgICAgICAgICAgICBvdXRwdXQtPmVuYWJsZSgpOwogICAgIH0KIH0K
IApAQCAtNDAyLDggKzQwMiw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpkaXNhYmxlT3V0cHV0c0lmTmVj
ZXNzYXJ5KCkKICAgICAgICAgLy8gbG9uZ2VyIGFueSBhY3RpdmUgY29ubmVjdGlvbnMuCiAgICAg
ICAgIGlmIChub2RlVHlwZSgpICE9IE5vZGVUeXBlQ29udm9sdmVyICYmIG5vZGVUeXBlKCkgIT0g
Tm9kZVR5cGVEZWxheSkgewogICAgICAgICAgICAgbV9pc0Rpc2FibGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX291dHB1dHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNhYmxlKCk7CisgICAgICAgICAgICBmb3IgKGF1
dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAgICAgICAgICAgICBvdXRwdXQtPmRpc2FibGUo
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQ5Miw4ICs0OTIsOCBAQCB2b2lkIEF1ZGlvTm9k
ZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBlKQogICAgICAgICBpZiAoIW1fbm9ybWFsUmVm
Q291bnQpIHsKICAgICAgICAgICAgIGlmICghbV9pc01hcmtlZEZvckRlbGV0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgLy8gQWxsIHJlZmVyZW5jZXMgYXJlIGdvbmUgLSB3ZSBuZWVkIHRvIGdvIGF3
YXkuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNjb25uZWN0QWxs
KCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0by4KKyAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0LT5kaXNjb25uZWN0QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVz
IHdlJ3JlIGNvbm5lY3RlZCB0by4KIAogICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0
aW9uIGF0IGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBk
b3duLgogICAgICAgICAgICAgICAgIGNvbnRleHQoKS0+bWFya0ZvckRlbGV0aW9uKHRoaXMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNw
cAppbmRleCBjNjIzMzNkMmIyMTk3ODU4YjJlODBmMzE5MDMwYWYzZGRjOGViMjc4Li5hNjA1ZTMz
MmRhODZhOGQ0OWViOTFjYTYxZmEwMGZlZTBhOGJiYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcApAQCAtMTUxLDggKzE1MSw3
IEBAIHVuc2lnbmVkIEF1ZGlvTm9kZUlucHV0OjpudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QKICAg
ICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIGNvbm5lY3Rpb24gd2l0aCB0
aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhbm5lbHMuCiAgICAgdW5zaWduZWQgbWF4Q2hhbm5lbHMg
PSAxOyAvLyBvbmUgY2hhbm5lbCBpcyB0aGUgbWluaW11bSBhbGxvd2VkCiAKLSAgICBmb3IgKEhh
c2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBtX291dHB1dHMuYmVnaW4oKTsg
aSAhPSBtX291dHB1dHMuZW5kKCk7ICsraSkgewotICAgICAgICBBdWRpb05vZGVPdXRwdXQqIG91
dHB1dCA9ICppOworICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9vdXRwdXRzKSB7CiAgICAgICAg
IC8vIFVzZSBvdXRwdXQoKS0+bnVtYmVyT2ZDaGFubmVscygpIGluc3RlYWQgb2Ygb3V0cHV0LT5i
dXMoKS0+bnVtYmVyT2ZDaGFubmVscygpLAogICAgICAgICAvLyBiZWNhdXNlIHRoZSBjYWxsaW5n
IG9mIEF1ZGlvTm9kZU91dHB1dDo6YnVzKCkgaXMgbm90IHNhZmUgaGVyZS4KICAgICAgICAgbWF4
Q2hhbm5lbHMgPSBzdGQ6Om1heChtYXhDaGFubmVscywgb3V0cHV0LT5udW1iZXJPZkNoYW5uZWxz
KCkpOwpAQCAtMTk4LDggKzE5Nyw3IEBAIHZvaWQgQXVkaW9Ob2RlSW5wdXQ6OnN1bUFsbENvbm5l
Y3Rpb25zKEF1ZGlvQnVzKiBzdW1taW5nQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jCiAKICAgICBB
dWRpb0J1czo6Q2hhbm5lbEludGVycHJldGF0aW9uIGludGVycHJldGF0aW9uID0gbm9kZSgpLT5p
bnRlcm5hbENoYW5uZWxJbnRlcnByZXRhdGlvbigpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsgKytpKSB7Ci0gICAgICAgIEF1
ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gcmVuZGVyaW5nT3V0cHV0KGkpOworICAgIGZvciAoYXV0
byYgb3V0cHV0IDogbV9yZW5kZXJpbmdPdXRwdXRzKSB7CiAgICAgICAgIEFTU0VSVChvdXRwdXQp
OwogCiAgICAgICAgIC8vIFJlbmRlciBhdWRpbyBmcm9tIHRoaXMgb3V0cHV0LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCmluZGV4
IGY5YTQ1MTZmOTgyNDdjZDBkZDEyNmNhYzQ4MmNkZWZhOTkyNjhiMTEuLjQ2OGQ4ZDVmMTQwOTQx
MmFhMThkMzIxOWE0Y2M0MzVjMTNiMWRkYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAKQEAgLTk4LDggKzk4LDcgQEAgdm9p
ZCBBdWRpb05vZGVPdXRwdXQ6OnByb3BhZ2F0ZUNoYW5uZWxDb3VudCgpCiAgICAgCiAgICAgaWYg
KGlzQ2hhbm5lbENvdW50S25vd24oKSkgewogICAgICAgICAvLyBBbm5vdW5jZSB0byBhbnkgbm9k
ZXMgd2UncmUgY29ubmVjdGVkIHRvIHRoYXQgd2UgY2hhbmdlZCBvdXIgY2hhbm5lbCBjb3VudCBm
b3IgaXRzIGlucHV0LgotICAgICAgICBmb3IgKElucHV0c0l0ZXJhdG9yIGkgPSBtX2lucHV0cy5i
ZWdpbigpOyBpICE9IG1faW5wdXRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgICAgIEF1ZGlvTm9k
ZUlucHV0KiBpbnB1dCA9ICppOworICAgICAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMp
IHsKICAgICAgICAgICAgIEF1ZGlvTm9kZSogY29ubmVjdGlvbk5vZGUgPSBpbnB1dC0+bm9kZSgp
OwogICAgICAgICAgICAgY29ubmVjdGlvbk5vZGUtPmNoZWNrTnVtYmVyT2ZDaGFubmVsc0Zvcklu
cHV0KGlucHV0KTsKICAgICAgICAgfQpAQCAtMjMwLDEwICsyMjksOCBAQCB2b2lkIEF1ZGlvTm9k
ZU91dHB1dDo6ZGlzYWJsZSgpCiAgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkp
OwogCiAgICAgaWYgKG1faXNFbmFibGVkKSB7Ci0gICAgICAgIGZvciAoSW5wdXRzSXRlcmF0b3Ig
aSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMuZW5kKCk7ICsraSkgewotICAgICAg
ICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7CisgICAgICAgIGZvciAoYXV0byYgaW5w
dXQgOiBtX2lucHV0cykKICAgICAgICAgICAgIGlucHV0LT5kaXNhYmxlKHRoaXMpOwotICAgICAg
ICB9CiAgICAgICAgIG1faXNFbmFibGVkID0gZmFsc2U7CiAgICAgfQogfQpAQCAtMjQzLDEwICsy
NDAsOCBAQCB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxlKCkKICAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CiAKICAgICBpZiAoIW1faXNFbmFibGVkKSB7Ci0gICAgICAg
IGZvciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMu
ZW5kKCk7ICsraSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7Cisg
ICAgICAgIGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0cykKICAgICAgICAgICAgIGlucHV0LT5l
bmFibGUodGhpcyk7Ci0gICAgICAgIH0KICAgICAgICAgbV9pc0VuYWJsZWQgPSB0cnVlOwogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Q
YXJhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3Bw
CmluZGV4IDNlNDg5OWY1MGUzOWMzOGIxN2U1MGI0NTg1YTJiNjQ4MWJiNjBhYmEuLmI3M2U5MTZh
ZjkyZDliNmQ2ZTIwOWM3ZmJiY2RhZDFlNGQ2MjRjYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcApAQCAtMTM5LDggKzEzOSw3IEBAIHZvaWQg
QXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1ZXMoZmxvYXQqIHZhbHVlcywgdW5zaWduZWQg
bnVtYmVyT2ZWYWx1ZXMsIGJvCiAgICAgUmVmUHRyPEF1ZGlvQnVzPiBzdW1taW5nQnVzID0gQXVk
aW9CdXM6OmNyZWF0ZSgxLCBudW1iZXJPZlZhbHVlcywgZmFsc2UpOwogICAgIHN1bW1pbmdCdXMt
PnNldENoYW5uZWxNZW1vcnkoMCwgdmFsdWVzLCBudW1iZXJPZlZhbHVlcyk7CiAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpOyArK2kp
IHsKLSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSByZW5kZXJpbmdPdXRwdXQoaSk7
CisgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX3JlbmRlcmluZ091dHB1dHMpIHsKICAgICAgICAg
QVNTRVJUKG91dHB1dCk7CiAKICAgICAgICAgLy8gUmVuZGVyIGF1ZGlvIGZyb20gdGhpcyBvdXRw
dXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5jcHAKaW5kZXggMWM3ZTRlNWY4YmU5M2RiMDk3MjE4MjE0M2Y2NmM3MDY4NjI5
YmJhNy4uZTg3YmU2MjQ1OGIzMjIyM2YyZTk5YTA0Y2Q0ZWQwMzAwZTUwMzU0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5l
LmNwcApAQCAtODQsMTUgKzg0LDE3IEBAIHZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjppbnNlcnRF
dmVudChjb25zdCBQYXJhbUV2ZW50JiBldmVudCkKICAgICAKICAgICB1bnNpZ25lZCBpID0gMDsK
ICAgICBmbG9hdCBpbnNlcnRUaW1lID0gZXZlbnQudGltZSgpOwotICAgIGZvciAoaSA9IDA7IGkg
PCBtX2V2ZW50cy5zaXplKCk7ICsraSkgeworICAgIGZvciAoYXV0byYgcGFyYW1FdmVudCA6IG1f
ZXZlbnRzKSB7CiAgICAgICAgIC8vIE92ZXJ3cml0ZSBzYW1lIGV2ZW50IHR5cGUgYW5kIHRpbWUu
Ci0gICAgICAgIGlmIChtX2V2ZW50c1tpXS50aW1lKCkgPT0gaW5zZXJ0VGltZSAmJiBtX2V2ZW50
c1tpXS50eXBlKCkgPT0gZXZlbnQudHlwZSgpKSB7Ci0gICAgICAgICAgICBtX2V2ZW50c1tpXSA9
IGV2ZW50OworICAgICAgICBpZiAocGFyYW1FdmVudC50aW1lKCkgPT0gaW5zZXJ0VGltZSAmJiBw
YXJhbUV2ZW50LnR5cGUoKSA9PSBldmVudC50eXBlKCkpIHsKKyAgICAgICAgICAgIHBhcmFtRXZl
bnQgPSBldmVudDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChtX2V2ZW50c1tpXS50aW1lKCkgPiBpbnNlcnRUaW1lKQorICAgICAgICBpZiAocGFyYW1FdmVu
dC50aW1lKCkgPiBpbnNlcnRUaW1lKQogICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKytp
OwogICAgIH0KIAogICAgIG1fZXZlbnRzLmluc2VydChpLCBldmVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3Bw
CmluZGV4IGVkNDE3ZmFkYmQ1NWVlNjNkNmI4ZmNmODVkZjc0N2RhZmQ2ODI4YTQuLmMyMjhlZWM3
MTgyOTk5ZjA4MWNmMGI1ZjM5YzQ0YWUxM2U0MmYyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwCkBAIC02
MiwxMCArNjIsOSBAQCB2b2lkIEF1ZGlvU3VtbWluZ0p1bmN0aW9uOjp1cGRhdGVSZW5kZXJpbmdT
dGF0ZSgpCiAgICAgaWYgKG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcgJiYgY2FuVXBkYXRl
U3RhdGUoKSkgewogICAgICAgICAvLyBDb3B5IGZyb20gbV9vdXRwdXRzIHRvIG1fcmVuZGVyaW5n
T3V0cHV0cy4KICAgICAgICAgbV9yZW5kZXJpbmdPdXRwdXRzLnJlc2l6ZShtX291dHB1dHMuc2l6
ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgaiA9IDA7Ci0gICAgICAgIGZvciAoSGFzaFNldDxBdWRp
b05vZGVPdXRwdXQqPjo6aXRlcmF0b3IgaSA9IG1fb3V0cHV0cy5iZWdpbigpOyBpICE9IG1fb3V0
cHV0cy5lbmQoKTsgKytpLCArK2opIHsKLSAgICAgICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0
cHV0ID0gKmk7Ci0gICAgICAgICAgICBtX3JlbmRlcmluZ091dHB1dHNbal0gPSBvdXRwdXQ7Cisg
ICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0
cHV0cykgeworICAgICAgICAgICAgbV9yZW5kZXJpbmdPdXRwdXRzW2krK10gPSBvdXRwdXQ7CiAg
ICAgICAgICAgICBvdXRwdXQtPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1
ZGlvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJl
YW1BdWRpb1NvdXJjZS5jcHAKaW5kZXggZWQ3OGE3YzBkMmM1NDcyOTUwOWU2Yzk5MDY2YjMzNzg3
MWRmMWRkNy4uYjZlMjZlN2Y5OWRiMmFiNDBmZjFkZDQ0MzA5NzE1NmUwMWIzMTUxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFt
QXVkaW9Tb3VyY2UuY3BwCkBAIC04MSwxNSArODEsMTUgQEAgYm9vbCBNZWRpYVN0cmVhbUF1ZGlv
U291cmNlOjpyZW1vdmVBdWRpb0NvbnN1bWVyKEF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29u
c3UKIHZvaWQgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6c2V0QXVkaW9Gb3JtYXQoc2l6ZV90IG51
bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fYXVkaW9Db25zdW1lcnNMb2NrKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8QXVkaW9E
ZXN0aW5hdGlvbkNvbnN1bWVyPj46Oml0ZXJhdG9yIGl0ID0gbV9hdWRpb0NvbnN1bWVycy5iZWdp
bigpOyBpdCAhPSBtX2F1ZGlvQ29uc3VtZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAoKml0KS0+
c2V0Rm9ybWF0KG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUpOworICAgIGZvciAoYXV0byYg
Y29uc3VtZXIgOiBtX2F1ZGlvQ29uc3VtZXJzKQorICAgICAgICBjb25zdW1lci0+c2V0Rm9ybWF0
KG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtQXVk
aW9Tb3VyY2U6OmNvbnN1bWVBdWRpbyhBdWRpb0J1cyogYnVzLCBzaXplX3QgbnVtYmVyT2ZGcmFt
ZXMpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXVkaW9Db25zdW1lcnNMb2NrKTsKLSAg
ICBmb3IgKFZlY3RvcjxSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPj46Oml0ZXJhdG9y
IGl0ID0gbV9hdWRpb0NvbnN1bWVycy5iZWdpbigpOyBpdCAhPSBtX2F1ZGlvQ29uc3VtZXJzLmVu
ZCgpOyArK2l0KQotICAgICAgICAoKml0KS0+Y29uc3VtZUF1ZGlvKGJ1cywgbnVtYmVyT2ZGcmFt
ZXMpOworICAgIGZvciAoYXV0byYgY29uc3VtZXIgOiBtX2F1ZGlvQ29uc3VtZXJzKQorICAgICAg
ICBjb25zdW1lci0+Y29uc3VtZUF1ZGlvKGJ1cywgbnVtYmVyT2ZGcmFtZXMpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAppbmRleCBjMmQ2ZGUwYWY5MWNlNjQ2OGZl
YmYzZDI3M2MzMzVmN2ZjOTRiYTU0Li42Y2U1NTg2OWFkNWRiYjFiOWFlYjU5NDE1NjYzYTE5ZTNj
MjhiNGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVT
aGFwZXJQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
V2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAKQEAgLTY1LDkgKzY1LDkgQEAgdm9pZCBXYXZlU2hhcGVy
UHJvY2Vzc29yOjpzZXRPdmVyc2FtcGxlKE92ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGUpCiAgICAg
bV9vdmVyc2FtcGxlID0gb3ZlcnNhbXBsZTsKIAogICAgIGlmIChvdmVyc2FtcGxlICE9IE92ZXJT
YW1wbGVOb25lKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFdhdmVTaGFwZXJEU1BLZXJuZWwqIGtlcm5lbCA9
IHN0YXRpY19jYXN0PFdhdmVTaGFwZXJEU1BLZXJuZWwqPihtX2tlcm5lbHNbaV0uZ2V0KCkpOwot
ICAgICAgICAgICAga2VybmVsLT5sYXp5SW5pdGlhbGl6ZU92ZXJzYW1wbGluZygpOworICAgICAg
ICBmb3IgKGF1dG8mIGF1ZGlvRFNQS2VybmVsIDogbV9rZXJuZWxzKSB7CisgICAgICAgICAgICBX
YXZlU2hhcGVyRFNQS2VybmVsJiBrZXJuZWwgPSBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyRFNQS2Vy
bmVsJj4oKmF1ZGlvRFNQS2VybmVsKTsKKyAgICAgICAgICAgIGtlcm5lbC5sYXp5SW5pdGlhbGl6
ZU92ZXJzYW1wbGluZygpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCAyOTZh
ZGZkZTZkOTYxMmZjZDc5ZGI0ODNhYWIxNDIzMDIyMmVlZjc3Li5hNDQxM2MyNTYzYjI1NjAyZWYx
NWJhNTMyNjAyYjBmOTA2Zjg0NWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAtMTUwLDEwICsxNTAsMTAgQEAg
dm9pZCBEYXRhYmFzZVRocmVhZDo6aGFuZGxlUGF1c2VkUXVldWUoKQogICAgIHdoaWxlIChhdXRv
IHRhc2sgPSBtX3BhdXNlZFF1ZXVlLnRyeUdldE1lc3NhZ2UoKSkKICAgICAgICAgcGF1c2VkVGFz
a3MuYXBwZW5kKFdURjo6bW92ZSh0YXNrKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGF1c2VkVGFza3Muc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIHBhdXNlZFRhc2sg
OiBwYXVzZWRUYXNrcykgewogICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIAotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YWJhc2VUYXNrPiB0YXNrKHBhdXNlZFRhc2tzW2ldLnJlbGVh
c2UoKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRhc2s+IHRhc2socGF1c2Vk
VGFzay5yZWxlYXNlKCkpOwogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBwYXVz
ZWRMb2NrZXIobV9wYXVzZWRNdXRleCk7CiAgICAgICAgICAgICBpZiAobV9wYXVzZWQpIHsKQEAg
LTIwMyw5ICsyMDMsOCBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpCiAg
ICAgICAgIC8vIEFzIHRoZSBjYWxsIHRvIGNsb3NlIHdpbGwgbW9kaWZ5IHRoZSBvcmlnaW5hbCBz
ZXQsIHdlIG11c3QgdGFrZSBhIGNvcHkgdG8gaXRlcmF0ZSBvdmVyLgogICAgICAgICBEYXRhYmFz
ZVNldCBvcGVuU2V0Q29weTsKICAgICAgICAgb3BlblNldENvcHkuc3dhcChtX29wZW5EYXRhYmFz
ZVNldCk7Ci0gICAgICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBlbmQgPSBvcGVuU2V0Q29weS5l
bmQoKTsKLSAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6aXRlcmF0b3IgaXQgPSBvcGVuU2V0Q29w
eS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS5nZXQoKS0+Y2xv
c2UoKTsKKyAgICAgICAgZm9yIChhdXRvJiBvcGVuRGF0YWJhc2UgOiBvcGVuU2V0Q29weSkKKyAg
ICAgICAgICAgIG9wZW5EYXRhYmFzZS0+Y2xvc2UoKTsKICAgICB9CiAKICAgICAvLyBEZXRhY2gg
dGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25nZXIgb2YgYW55IGNvbmNlcm4g
dG8gYW55b25lIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCA3YmNkYmYwYjc4MTNlZWU5NWZkYjBkYjhk
ZDdkNGVlYjhkODE3YmIyLi43MTUzMjU0OWZiYWUzZGVjZDMxZjE3Y2UxOThlODQwYTYzN2JiM2Ni
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRyYWNrZXIuY3BwCkBAIC0zMzgsMjAgKzMzOCwxNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUNvbnRleHQq
IGNvbgogICAgICAgICBpZiAoIW5hbWVNYXApCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVN
YXAtPmVuZCgpOwotICAgICAgICBmb3IgKERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZGJOYW1lTWFwSXQgPSBuYW1lTWFwLT5iZWdpbigpOyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBF
bmRJdDsgKytkYk5hbWVNYXBJdCkgewotICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNl
U2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwotICAgICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Ci0gICAgICAgICAgICBm
b3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEl0ID0gZGF0YWJhc2VTZXQtPmJl
Z2luKCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNldEl0KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCgqZGJTZXRJdCktPmRhdGFiYXNlQ29udGV4dCgpID09IGNvbnRleHQpCi0gICAgICAg
ICAgICAgICAgICAgIG9wZW5EYXRhYmFzZXMuYXBwZW5kKCpkYlNldEl0KTsKKyAgICAgICAgZm9y
IChhdXRvJiBkYXRhYmFzZVNldCA6IG5hbWVNYXAtPnZhbHVlcygpKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIGRhdGFiYXNlIDogKmRhdGFiYXNlU2V0KSB7CisgICAgICAgICAgICAgICAgaWYg
KGRhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKSA9PSBjb250ZXh0KQorICAgICAgICAgICAgICAg
ICAgICBvcGVuRGF0YWJhc2VzLmFwcGVuZChkYXRhYmFzZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPERhdGFiYXNlQmFja2VuZEJhc2U+Pjo6
Y29uc3RfaXRlcmF0b3Igb3BlbkRhdGFiYXNlc0VuZEl0ID0gb3BlbkRhdGFiYXNlcy5lbmQoKTsK
LSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4+Ojpjb25zdF9pdGVy
YXRvciBvcGVuRGF0YWJhc2VzSXQgPSBvcGVuRGF0YWJhc2VzLmJlZ2luKCk7IG9wZW5EYXRhYmFz
ZXNJdCAhPSBvcGVuRGF0YWJhc2VzRW5kSXQ7ICsrb3BlbkRhdGFiYXNlc0l0KQotICAgICAgICAo
Km9wZW5EYXRhYmFzZXNJdCktPmludGVycnVwdCgpOworICAgIGZvciAoYXV0byYgb3BlbkRhdGFi
YXNlIDogb3BlbkRhdGFiYXNlcykKKyAgICAgICAgb3BlbkRhdGFiYXNlLT5pbnRlcnJ1cHQoKTsK
IH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luUGF0aChTZWN1cml0eU9yaWdpbiog
b3JpZ2luKSBjb25zdApAQCAtNDgyLDggKzQ3OCw4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpk
YXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJp
CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46Oml0ZXJhdG9yIGl0ZXIgPSB0ZW1wLmJlZ2luKCk7IGl0ZXIgIT0gdGVtcC5lbmQoKTsgKytp
dGVyKQotICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKGl0ZXItPmlzb2xhdGVkQ29weSgpKTsK
KyAgICBmb3IgKGF1dG8mIGRhdGFiYXNlTmFtZSA6IHRlbXApCisgICAgICAgIHJlc3VsdFZlY3Rv
ci5hcHBlbmQoZGF0YWJhc2VOYW1lLmlzb2xhdGVkQ29weSgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtNjcwLDggKzY2Niw4IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0
YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtCiAgICAgaWYg
KCFkYXRhYmFzZVNldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChEYXRhYmFzZVNldDo6
aXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VTZXQtPmVu
ZCgpOyArK2l0KQotICAgICAgICBkYXRhYmFzZXMtPmFkZCgqaXQpOworICAgIGZvciAoYXV0byYg
ZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCisgICAgICAgIGRhdGFiYXNlcy0+YWRkKGRhdGFiYXNl
KTsKIH0KIAogUmVmUHRyPE9yaWdpbkxvY2s+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luTG9ja0Zv
cihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQpAQCAtNzI0LDEyICs3MjAsOSBAQCB1bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQogewogICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+b3JpZ2luUGF0aChvcmln
aW4pOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2UgPSAwOwotICAgIFZlY3RvcjxT
dHJpbmc+IGZpbGVOYW1lcyA9IGxpc3REaXJlY3Rvcnkob3JpZ2luUGF0aCwgU3RyaW5nKCIqLmRi
IikpOwotICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBmaWxlTmFtZSA9IGZpbGVOYW1lcy5i
ZWdpbigpOwotICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBsYXN0RmlsZU5hbWUgPSBmaWxl
TmFtZXMuZW5kKCk7Ci0gICAgZm9yICg7IGZpbGVOYW1lICE9IGxhc3RGaWxlTmFtZTsgKytmaWxl
TmFtZSkgeworICAgIGZvciAoYXV0byYgZmlsZU5hbWUgOiBsaXN0RGlyZWN0b3J5KG9yaWdpblBh
dGgsIEFTQ0lJTGl0ZXJhbCgiKi5kYiIpKSkgewogICAgICAgICBsb25nIGxvbmcgc2l6ZTsKLSAg
ICAgICAgZ2V0RmlsZVNpemUoKmZpbGVOYW1lLCBzaXplKTsKKyAgICAgICAgZ2V0RmlsZVNpemUo
ZmlsZU5hbWUsIHNpemUpOwogICAgICAgICBkaXNrVXNhZ2UgKz0gc2l6ZTsKICAgICB9CiAgICAg
cmV0dXJuIGRpc2tVc2FnZTsKQEAgLTg1NSw4ICs4NDgsOCBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCkKICAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
Pj4gb3JpZ2luc0NvcHk7CiAgICAgb3JpZ2lucyhvcmlnaW5zQ29weSk7CiAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luc0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0
ZU9yaWdpbihvcmlnaW5zQ29weVtpXS5nZXQoKSk7CisgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBv
cmlnaW5zQ29weSkKKyAgICAgICAgZGVsZXRlT3JpZ2luKG9yaWdpbi5nZXQoKSk7CiB9CiAKIHZv
aWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKHN0ZDo6Y2hy
b25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgdGltZSkKQEAgLTkwOCwxMCArOTAxLDEwIEBA
IGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKICAgICB9CiAKICAgICAvLyBXZSBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSBob2xkaW5n
IGxvY2tzIGR1cmluZyBhIGNhbGwgdG8gZGVsZXRlRGF0YWJhc2VGaWxlIHdpbGwgZGVhZGxvY2su
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKCFkZWxldGVEYXRhYmFzZUZpbGUob3JpZ2luLCBkYXRhYmFzZU5hbWVz
W2ldKSkgeworICAgIGZvciAoYXV0byYgbmFtZSA6IGRhdGFiYXNlTmFtZXMpIHsKKyAgICAgICAg
aWYgKCFkZWxldGVEYXRhYmFzZUZpbGUob3JpZ2luLCBuYW1lKSkgewogICAgICAgICAgICAgLy8g
RXZlbiBpZiB0aGUgZmlsZSBjYW4ndCBiZSBkZWxldGVkLCB3ZSB3YW50IHRvIHRyeSBhbmQgZGVs
ZXRlIHRoZSByZXN0LCBkb24ndCByZXR1cm4gZWFybHkgaGVyZS4KLSAgICAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIGRlbGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMi
LCBkYXRhYmFzZU5hbWVzW2ldLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRp
ZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGRlbGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMiLCBuYW1lLmFzY2lpKCku
ZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtOTczLDggKzk2Niw4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2Vy
OjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWREZWxldGVEYXRhYmFzZU9yaWdpbigp
OwogI2VuZGlmCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YWJhc2VO
YW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRN
b2RpZnlEYXRhYmFzZShvcmlnaW4sIGRhdGFiYXNlTmFtZXNbaV0pOworICAgICAgICAgICAgZm9y
IChhdXRvJiBuYW1lIDogZGF0YWJhc2VOYW1lcykKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+
ZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwpAQCAtMTE3OCwxNiArMTE3MSwxNSBAQCBib29sIERhdGFiYXNl
VHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0
IFN0cmluZyYgbgogICAgICAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5h
bWVNYXAtPmdldChuYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoZGF0YWJhc2VTZXQgJiYgZGF0
YWJhc2VTZXQtPnNpemUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNvbWUg
ZGF0YWJhc2Ugb3BlbiB3aXRoIHRoaXMgbmFtZS4gTWFyayB0aGVtIGFzIGRlbGV0ZWQuCi0gICAg
ICAgICAgICAgICAgICAgIERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFz
ZVNldC0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREYXRhYmFzZXMuYXBwZW5kKCppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJhc2VzLmFwcGVuZChkYXRhYmFzZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGRlbGV0ZWREYXRhYmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOworICAg
IGZvciAoYXV0byYgZGF0YWJhc2UgOiBkZWxldGVkRGF0YWJhc2VzKQorICAgICAgICBkYXRhYmFz
ZS0+bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJl
dHVybiBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoZnVsbFBhdGgpOwpAQCAt
MTIzMCwzMyArMTIyMiwyNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9w
ZW5lZERhdGFiYXNlcygpCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VN
YXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogICAgICAgICBpZiAobV9vcGVuRGF0YWJh
c2VNYXApIHsKLSAgICAgICAgICAgIERhdGFiYXNlT3JpZ2luTWFwOjpjb25zdF9pdGVyYXRvciBv
cmlnaW5NYXBFbmQgPSBtX29wZW5EYXRhYmFzZU1hcC0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3Ig
KERhdGFiYXNlT3JpZ2luTWFwOjpjb25zdF9pdGVyYXRvciBvcmlnaW5NYXBJdCA9IG1fb3BlbkRh
dGFiYXNlTWFwLT5iZWdpbigpOyBvcmlnaW5NYXBJdCAhPSBvcmlnaW5NYXBFbmQ7ICsrb3JpZ2lu
TWFwSXQpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9
IG9yaWdpbk1hcEl0LT5rZXk7Ci0gICAgICAgICAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBkYXRh
YmFzZU5hbWVNYXAgPSBvcmlnaW5NYXBJdC0+dmFsdWU7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IG9wZW5EYXRhYmFzZSA6ICptX29wZW5EYXRhYmFzZU1hcCkgeworICAgICAgICAgICAgICAgIGF1
dG8mIG9yaWdpbiA9IG9wZW5EYXRhYmFzZS5rZXk7CisgICAgICAgICAgICAgICAgRGF0YWJhc2VO
YW1lTWFwKiBkYXRhYmFzZU5hbWVNYXAgPSBvcGVuRGF0YWJhc2UudmFsdWU7CiAgICAgICAgICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JUaGlzT3JpZ2luOwog
CiAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBvcGVuZWQgZGF0YWJhc2VzIGlu
IHRoaXMgb3JpZ2luLiAgR2V0IHRoZSBjdXJyZW50IGRhdGFiYXNlIGZpbGUgcGF0aCBvZiBlYWNo
IGRhdGFiYXNlIGFuZCBzZWUgaWYKICAgICAgICAgICAgICAgICAvLyBpdCBzdGlsbCBtYXRjaGVz
IHRoZSBwYXRoIHN0b3JlZCBpbiB0aGUgb3BlbmVkIGRhdGFiYXNlIG9iamVjdC4KLSAgICAgICAg
ICAgICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEVuZCA9IGRh
dGFiYXNlTmFtZU1hcC0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gZGF0YWJhc2VOYW1lTWFwLT5iZWdpbigp
OyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBFbmQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlTmFtZSA9IGRiTmFtZU1hcEl0LT5rZXk7CisgICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZXMgOiAqZGF0YWJhc2VOYW1lTWFwKSB7CiAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVOYW1lOwogICAgICAgICAgICAg
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0
aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyIpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGFiYXNl
SWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgyLCBkYXRhYmFzZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJp
bmRUZXh0KDIsIGRhdGFiYXNlcy5rZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3Vu
ZERlbGV0ZWREYXRhYmFzZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBEYXRhYmFzZVNl
dCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAg
IERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYkVuZCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZGJJ
dCA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOyBkYkl0ICE9IGRiRW5kOyArK2RiSXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIERhdGFiYXNlKiBkYiA9IHN0YXRpY19jYXN0PERhdGFiYXNlKj4o
KmRiSXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgZGIgOiAqZGF0YWJhc2VzLnZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBhcmUgZG9uZSBpZiB0aGlzIGRhdGFiYXNlIGhhcyBhbHJlYWR5IGJlZW4gbWFya2Vk
IGFzIGRlbGV0ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGItPmRlbGV0ZWQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyNzAsNyArMTI1NSw3
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVEZWxldGVkT3BlbmVkRGF0YWJhc2VzKCkK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkYXRh
YmFzZSBubyBsb25nZXIgZXhpc3RzLCB3ZSBzaG91bGQgcmVtZW1iZXIgdG8gcmVtb3ZlIGl0IGZy
b20gdGhlIE9yaWdpblF1b3RhTWFuYWdlciBsYXRlci4KICAgICAgICAgICAgICAgICAgICAgaWYg
KGZvdW5kRGVsZXRlZERhdGFiYXNlICYmIGRhdGFiYXNlRmlsZU5hbWUuaXNOdWxsKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW4uYXBw
ZW5kKGRhdGFiYXNlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJh
c2VOYW1lc0ZvclRoaXNPcmlnaW4uYXBwZW5kKGRhdGFiYXNlTmFtZS5rZXkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIWRlbGV0ZWRE
YXRhYmFzZU5hbWVzRm9yVGhpc09yaWdpbi5pc0VtcHR5KCkpCkBAIC0xMjc5LDE5ICsxMjY0LDE4
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVEZWxldGVkT3BlbmVkRGF0YWJhc2VzKCkK
ICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVs
ZXRlZERhdGFiYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgZGVsZXRlZERhdGFiYXNlc1tpXS0+
bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7Ci0gICAgCi0gICAgRGVsZXRlZERhdGFiYXNlTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBkZWxldGVkRGF0YWJhc2VNYXAuZW5kKCk7Ci0gICAgZm9yIChE
ZWxldGVkRGF0YWJhc2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGVsZXRlZERhdGFiYXNlTWFw
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTZWN1cml0eU9yaWdpbiogb3Jp
Z2luID0gaXQtPmtleS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIGRlbGV0ZWREYXRhYmFzZSA6IGRl
bGV0ZWREYXRhYmFzZXMpCisgICAgICAgIGRlbGV0ZWREYXRhYmFzZS0+bWFya0FzRGVsZXRlZEFu
ZENsb3NlKCk7CisKKyAgICBmb3IgKGF1dG8mIGRlbGV0ZWREYXRhYmFzZSA6IGRlbGV0ZWREYXRh
YmFzZU1hcCkgeworICAgICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gZGVsZXRlZERhdGFi
YXNlLmtleS5nZXQoKTsKICAgICAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICAgICAgbV9jbGll
bnQtPmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0YWJhc2VOYW1lcyA9IGl0LT52YWx1ZTsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRhdGFiYXNlTmFtZXMgPSBkZWxldGVkRGF0YWJh
c2UudmFsdWU7CisgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VOYW1lIDogZGF0YWJhc2VOYW1l
cykgewogICAgICAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgICAgIG1fY2xpZW50
LT5kaXNwYXRjaERpZE1vZGlmeURhdGFiYXNlKG9yaWdpbiwgZGF0YWJhc2VOYW1lc1tpXSk7Cisg
ICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2Uob3JpZ2lu
LCBkYXRhYmFzZU5hbWUpOwogICAgICAgICB9ICAgICAgICAKICAgICB9CiB9CkBAIC0xMzY1LDIx
ICsxMzQ5LDEwIEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXREYXRhYmFzZXNQYXVzZWQoYm9v
bCBwYXVzZWQpCiAKICAgICAvLyBUaGlzIHdhbGtpbmcgaXMgLSBzYWRseSAtIHRoZSBvbmx5IHJl
bGlhYmxlIHdheSB0byBnZXQgYXQgZWFjaCBvcGVuIGRhdGFiYXNlIHRocmVhZC4KICAgICAvLyBU
aGlzIHdpbGwgYmUgY2xlYW5lciBvbmNlIDxyZGFyOi8vcHJvYmxlbS81NjgwNDQxPiBvciBzb21l
IG90aGVyIERCIHRocmVhZCBjb25zb2xpZGF0aW9uIHRha2VzIHBsYWNlLgotICAgIERhdGFiYXNl
T3JpZ2luTWFwOjppdGVyYXRvciBpID0gbV9vcGVuRGF0YWJhc2VNYXAuZ2V0KCktPmJlZ2luKCk7
Ci0gICAgRGF0YWJhc2VPcmlnaW5NYXA6Oml0ZXJhdG9yIGVuZCA9IG1fb3BlbkRhdGFiYXNlTWFw
LmdldCgpLT5lbmQoKTsKLSAgICAKLSAgICBmb3IgKDsgaSAhPSBlbmQ7ICsraSkgewotICAgICAg
ICBEYXRhYmFzZU5hbWVNYXAqIGRhdGFiYXNlTmFtZU1hcCA9IGktPnZhbHVlOwotICAgICAgICBE
YXRhYmFzZU5hbWVNYXA6Oml0ZXJhdG9yIGogPSBkYXRhYmFzZU5hbWVNYXAtPmJlZ2luKCk7Ci0g
ICAgICAgIERhdGFiYXNlTmFtZU1hcDo6aXRlcmF0b3IgZGJOYW1lTWFwRW5kID0gZGF0YWJhc2VO
YW1lTWFwLT5lbmQoKTsKLSAgICAgICAgZm9yICg7IGogIT0gZGJOYW1lTWFwRW5kOyArK2opIHsK
LSAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGotPnZhbHVlOwotICAgICAg
ICAgICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGsgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsKLSAg
ICAgICAgICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBkYlNldEVuZCA9IGRhdGFiYXNlU2V0LT5l
bmQoKTsKLSAgICAgICAgICAgIGZvciAoOyBrICE9IGRiU2V0RW5kOyArK2spIHsKLSAgICAgICAg
ICAgICAgICBEYXRhYmFzZUNvbnRleHQqIGNvbnRleHQgPSAoKmspLT5kYXRhYmFzZUNvbnRleHQo
KTsKLSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRQYXVzZWQocGF1c2VkKTsKLSAgICAgICAg
ICAgIH0KKyAgICBmb3IgKGF1dG8mIGRhdGFiYXNlTmFtZU1hcCA6IG1fb3BlbkRhdGFiYXNlTWFw
LT52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGRhdGFiYXNlU2V0IDogZGF0YWJhc2VO
YW1lTWFwLT52YWx1ZXMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6ICpk
YXRhYmFzZVNldCkKKyAgICAgICAgICAgICAgICBkYXRhYmFzZS0+ZGF0YWJhc2VDb250ZXh0KCkt
PnNldFBhdXNlZChwYXVzZWQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAKaW5kZXggOWY2MjIzNGFjMzllYzg0NWQ1ZDRlMTBkZWMxMDIzODNlYWRh
MTZmOS4uODlhNjJhYjc2NzcyZjI2YzIyOWRlYjc5MzEyOTM0ODg3YzNmZjE2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCkBAIC0xMTksMjEgKzExOSwxNCBAQCB2b2lkIFNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKCkKICAgICBtX2lzU2h1dHRpbmdEb3duID0g
dHJ1ZTsKIAogICAgIC8vIE5vdGlmeSBhbGwgdHJhbnNhY3Rpb25zIGluIHByb2dyZXNzIHRoYXQg
dGhlIGRhdGFiYXNlIHRocmVhZCBpcyBzaHV0dGluZyBkb3duCi0gICAgZm9yIChDb29yZGluYXRp
b25JbmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5h
dGlvbkluZm9NYXAuYmVnaW4oKTsKLSAgICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciAh
PSBtX2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCk7ICsrY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9y
KSB7Ci0gICAgICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRl
cmF0b3ItPnZhbHVlOwotCisgICAgZm9yIChhdXRvJiBpbmZvIDogbV9jb29yZGluYXRpb25JbmZv
TWFwLnZhbHVlcygpKSB7CiAgICAgICAgIC8vIENsZWFuIHVwIHRyYW5zYWN0aW9ucyB0aGF0IGhh
dmUgcmVhY2hlZCAibG9ja0FjcXVpcmVkIjoKICAgICAgICAgLy8gVHJhbnNhY3Rpb24gcGhhc2Ug
NCBjbGVhbnVwLiBTZWUgY29tbWVudCBvbiAiV2hhdCBoYXBwZW5zIGlmIGEKICAgICAgICAgLy8g
dHJhbnNhY3Rpb24gaXMgaW50ZXJydXB0ZWQ/IiBhdCB0aGUgdG9wIG9mIFNRTFRyYW5zYWN0aW9u
QmFja2VuZC5jcHAuCiAgICAgICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24pCiAg
ICAgICAgICAgICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhy
ZWFkSXNTaHV0dGluZ0Rvd24oKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxTUUxUcmFu
c2FjdGlvbkJhY2tlbmQ+Pjo6aXRlcmF0b3IgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9y
ID0KLSAgICAgICAgICAgICAgICAgICAgIGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5iZWdp
bigpOwotICAgICAgICAgICAgIGFjdGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvciAhPSBpbmZv
LmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuZW5kKCk7Ci0gICAgICAgICAgICAgKythY3RpdmVSZWFk
VHJhbnNhY3Rpb25zSXRlcmF0b3IpIHsKLSAgICAgICAgICAgICgqYWN0aXZlUmVhZFRyYW5zYWN0
aW9uc0l0ZXJhdG9yKS0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwotICAg
ICAgICB9CisgICAgICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb24gOiBpbmZvLmFjdGl2ZVJlYWRU
cmFuc2FjdGlvbnMpCisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJl
YWRJc1NodXR0aW5nRG93bigpOwogCiAgICAgICAgIC8vIENsZWFuIHVwIHRyYW5zYWN0aW9ucyB0
aGF0IGhhdmUgTk9UIHJlYWNoZWQgImxvY2tBY3F1aXJlZCI6CiAgICAgICAgIC8vIFRyYW5zYWN0
aW9uIHBoYXNlIDMgY2xlYW51cC4gU2VlIGNvbW1lbnQgb24gIldoYXQgaGFwcGVucyBpZiBhCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4
IGUzNTliM2JkZTU4MmZiYTAxYTA4ODU3NGE4MjJlOTM2MzU3YzY3ZjAuLjAzMTVmYmUzZmNkMGNh
ZDYxYTg4NWY4ZTY4YWU5N2RlMTc1OWMyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCkBAIC0yNjAsMTggKzI2MCwxOCBAQCB2b2lkIFdl
YlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IHByb3RvY29scywgRXhjZQogICAgIC8vCiAgICAgLy8gSGVyZSwgd2UgdGhyb3cgU1lOVEFYX0VS
UiBpZiB0aGUgZ2l2ZW4gcHJvdG9jb2xzIGRvIG5vdCBtZWV0IHRoZSBsYXR0ZXIgY3JpdGVyaWEu
IFRoaXMgYmVoYXZpb3IgZG9lcyBub3QKICAgICAvLyBjb21wbHkgd2l0aCBXZWJTb2NrZXQgQVBJ
IHNwZWNpZmljYXRpb24sIGJ1dCBpdCBzZWVtcyB0byBiZSB0aGUgb25seSByZWFzb25hYmxlIHdh
eSB0byBoYW5kbGUgdGhpcyBjb25mbGljdC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBy
b3RvY29scy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWlzVmFsaWRQcm90b2NvbFN0cmlu
Zyhwcm90b2NvbHNbaV0pKSB7Ci0gICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkt
PmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9y
LCAiV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnIiArIGVuY29kZVByb3RvY29sU3RyaW5n
KHByb3RvY29sc1tpXSkgKyAiJyIpOworICAgIGZvciAoYXV0byYgcHJvdG9jb2wgOiBwcm90b2Nv
bHMpIHsKKyAgICAgICAgaWYgKCFpc1ZhbGlkUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wpKSB7Cisg
ICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV3JvbmcgcHJvdG9jb2wgZm9y
IFdlYlNvY2tldCAnIiArIGVuY29kZVByb3RvY29sU3RyaW5nKHByb3RvY29sKSArICInIik7CiAg
ICAgICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwogICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJS
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIEhhc2hTZXQ8U3Ry
aW5nPiB2aXNpdGVkOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdG9jb2xzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIGlmICghdmlzaXRlZC5hZGQocHJvdG9jb2xzW2ldKS5pc05ld0Vu
dHJ5KSB7Ci0gICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV2ViU29ja2V0
IHByb3RvY29scyBjb250YWluIGR1cGxpY2F0ZXM6ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmco
cHJvdG9jb2xzW2ldKSArICInIik7CisgICAgZm9yIChhdXRvJiBwcm90b2NvbCA6IHByb3RvY29s
cykgeworICAgICAgICBpZiAoIXZpc2l0ZWQuYWRkKHByb3RvY29sKS5pc05ld0VudHJ5KSB7Cisg
ICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV2ViU29ja2V0IHByb3RvY29s
cyBjb250YWluIGR1cGxpY2F0ZXM6ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wp
ICsgIiciKTsKICAgICAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgICAgICBlYyA9
IFNZTlRBWF9FUlI7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlz
cGF0Y2hlci5jcHAKaW5kZXggMTllMjVhMWE1YTA1MDNjMGEzZmQ3ZGU2YjQ2M2NhNDA1YjM0NmE4
MS4uMDlkOTllOWU4ZWRkOGVmODc2NDNkYWZlZjlmNjUyZjE5OTBkZTY5NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3Bh
dGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcApAQCAtNTAsOCArNTAsOCBAQCB2b2lkIFdlYlNvY2tl
dEV4dGVuc2lvbkRpc3BhdGNoZXI6OnJlc2V0KCkKIAogdm9pZCBXZWJTb2NrZXRFeHRlbnNpb25E
aXNwYXRjaGVyOjphZGRQcm9jZXNzb3Ioc3RkOjp1bmlxdWVfcHRyPFdlYlNvY2tldEV4dGVuc2lv
blByb2Nlc3Nvcj4gcHJvY2Vzc29yKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9w
cm9jZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3Byb2Nlc3NvcnNbaV0tPmV4
dGVuc2lvblRva2VuKCkgPT0gcHJvY2Vzc29yLT5leHRlbnNpb25Ub2tlbigpKQorICAgIGZvciAo
YXV0byYgZXh0ZW5zaW9uUHJvY2Vzc29yIDogbV9wcm9jZXNzb3JzKSB7CisgICAgICAgIGlmIChl
eHRlbnNpb25Qcm9jZXNzb3ItPmV4dGVuc2lvblRva2VuKCkgPT0gcHJvY2Vzc29yLT5leHRlbnNp
b25Ub2tlbigpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQocHJvY2Vz
c29yLT5oYW5kc2hha2VTdHJpbmcoKS5sZW5ndGgoKSk7CkBAIC04MSwxMiArODEsMTIgQEAgdm9p
ZCBXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbihj
b25zdCBTdHJpbmcmIGV4dGVuc2kKICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVy
LmFwcGVuZExpdGVyYWwoIiwgIik7CiAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFw
cGVuZChleHRlbnNpb25Ub2tlbik7CiAgICAgLy8gRklYTUU6IFNob3VsZCB1c2UgTGlzdEhhc2hT
ZXQgdG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhlIHBhcmFtZXRlcnMuCi0gICAgZm9yIChIYXNoTWFw
PFN0cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IgPSBleHRlbnNpb25QYXJh
bWV0ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4dGVuc2lvblBhcmFtZXRlcnMuZW5kKCk7ICsr
aXRlcmF0b3IpIHsKKyAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGV4dGVuc2lvblBhcmFtZXRl
cnMpIHsKICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZExpdGVyYWwo
IjsgIik7Ci0gICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0
b3ItPmtleSk7Ci0gICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKSB7CisgICAg
ICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQocGFyYW1ldGVyLmtleSk7Cisg
ICAgICAgIGlmICghcGFyYW1ldGVyLnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2Fj
Y2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgICBtX2FjY2Vw
dGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgICAg
ICBtX2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKHBhcmFtZXRlci52YWx1ZSk7CiAg
ICAgICAgIH0KICAgICB9CiB9CkBAIC0xMTgsOSArMTE4LDggQEAgYm9vbCBXZWJTb2NrZXRFeHRl
bnNpb25EaXNwYXRjaGVyOjpwcm9jZXNzSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBoZWFkZXJW
YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHNp
emVfdCBpbmRleDsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9wcm9jZXNzb3Jz
LnNpemUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgV2ViU29ja2V0RXh0ZW5zaW9uUHJvY2Vz
c29yKiBwcm9jZXNzb3IgPSBtX3Byb2Nlc3NvcnNbaW5kZXhdLmdldCgpOworICAgICAgICBzaXpl
X3QgaW5kZXggPSAwOworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NvciA6IG1fcHJvY2Vzc29y
cykgewogICAgICAgICAgICAgaWYgKGV4dGVuc2lvblRva2VuID09IHByb2Nlc3Nvci0+ZXh0ZW5z
aW9uVG9rZW4oKSkgewogICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzb3ItPnByb2Nlc3NSZXNw
b25zZShleHRlbnNpb25QYXJhbWV0ZXJzKSkgewogICAgICAgICAgICAgICAgICAgICBhcHBlbmRB
Y2NlcHRlZEV4dGVuc2lvbihleHRlbnNpb25Ub2tlbiwgZXh0ZW5zaW9uUGFyYW1ldGVycyk7CkBA
IC0xMjksNiArMTI4LDcgQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyOjpwcm9j
ZXNzSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBoZWFkZXJWYWx1ZSkKICAgICAgICAgICAgICAg
ICBmYWlsKHByb2Nlc3Nvci0+ZmFpbHVyZVJlYXNvbigpKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICArK2luZGV4OwogICAgICAgICB9
CiAgICAgICAgIC8vIFRoZXJlIGlzIG5vIGV4dGVuc2lvbiB3aGljaCBjYW4gcHJvY2VzcyB0aGUg
cmVzcG9uc2UuCiAgICAgICAgIGlmIChpbmRleCA9PSBtX3Byb2Nlc3NvcnMuc2l6ZSgpKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRI
YW5kc2hha2UuY3BwCmluZGV4IDMyMmFhNDAxZDRlMGVjNDAxYmIyODNmYmQ1M2VhYWRkNTVkYWE3
NWYuLjU1MWRkZjIyYTk3ZTMzMTI4ODk0OTg0NTkyMTBlZmE1Njg3NTMyZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hh
a2UuY3BwCkBAIC0yMjQsOCArMjI0LDggQEAgQ1N0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNs
aWVudEhhbmRzaGFrZU1lc3NhZ2UoKSBjb25zdAogICAgIC8vIG9yZGVyIGlzIG5vdCBtZWFuaW5n
ZnVsLiAgVGh1cywgaXQncyBvayB0byBzZW5kIHRoZSBvcmRlciB3ZSBjb25zdHJ1Y3RlZAogICAg
IC8vIHRoZSBmaWVsZHMuCiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXpl
KCk7IGkrKykgewotICAgICAgICBidWlsZGVyLmFwcGVuZChmaWVsZHNbaV0pOworICAgIGZvciAo
YXV0byYgZmllbGQgOiBmaWVsZHMpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZmllbGQpOwog
ICAgICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlxyXG4iKTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254471</attachid>
            <date>2015-06-07 21:23:07 -0700</date>
            <delta_ts>2015-06-07 21:56:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145541-20150608132242.patch</filename>
            <type>text/plain</type>
            <size>51858</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTIxZjUxYTFjYTdlZTU2
MWMyM2FlOGExY2NmNWZlMDllMmIxNDkxZi4uZTQ2NzYyZTE3ZDNlYmEyYzM2NzYyMzJlNjIxNTNj
MjE1Y2MwZWRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE1LTA2LTA3ICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL01vZHVsZXMgLSAyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZXMu
CisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ0NvbmZpZ3VyYXRpb246OmljZVNlcnZlcnMpOgorICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSVENEVE1GU2VuZGVyOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UlRDRGF0YUNoYW5uZWw6OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9jZXNzSWNlU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9u
Ojp+UlRDUGVlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rp
b246OmdldFN0cmVhbUJ5SWQpOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246
Omhhc0xvY2FsU3RyZWFtV2l0aFRyYWNrSWQpOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNv
bm5lY3Rpb246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246OnNj
aGVkdWxlZEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENTdGF0c1JlcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c1JlcG9ydDo6bmFt
ZXMpOgorICAgICAgICAqIE1vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNv
bnRlbnRVdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0UHJvdG9jb2xIYW5kbGVyV2hp
dGVsaXN0KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9CdWZmZXI6Om1lbW9yeUNvc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFT
dHJlYW1Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJlZkZpbmlz
aGVkU291cmNlTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJlZlVu
ZmluaXNoZWRTb3VyY2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6Omhh
bmRsZURlZmVycmVkRmluaXNoRGVyZWZzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6aGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Db250ZXh0Ojp1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb05vZGU6OnVwZGF0ZUNoYW5uZWxzRm9ySW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Ob2RlOjpwdWxsSW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6
aW5wdXRzQXJlU2lsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6c2lsZW5jZU91
dHB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjp1bnNpbGVuY2VPdXRwdXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZW5hYmxlT3V0cHV0c0lmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZGlzYWJsZU91dHB1dHNJZk5lY2Vzc2FyeSk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OmZpbmlzaERlcmVmKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvTm9kZUlucHV0OjpudW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Tm9kZUlucHV0OjpzdW1BbGxDb25uZWN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGVPdXRwdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0cHV0
Ojpwcm9wYWdhdGVDaGFubmVsQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0
cHV0OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1ZXMpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvUGFyYW1UaW1lbGluZTo6aW5zZXJ0RXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9T
dW1taW5nSnVuY3Rpb246OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6c2V0QXVkaW9Gb3JtYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6Y29uc3VtZUF1ZGlvKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2F2ZVNoYXBlclByb2Nlc3Nvcjo6c2V0T3ZlcnNhbXBsZSk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRocmVhZDo6aGFuZGxlUGF1c2VkUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
aHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omlu
dGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnVzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnNldERhdGFiYXNlc1BhdXNlZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6
Y29ubmVjdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lv
bkRpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0RXh0ZW5zaW9uRGlz
cGF0Y2hlcjo6YWRkUHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OnByb2Nlc3NIZWFkZXJWYWx1ZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3NhZ2Up
OgorCiAyMDE1LTA2LTA3ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNv
bT4KIAogICAgICAgICBGaXggc3RybmNweSB1c2UgaW4gV2ViQ29yZTo6VGV4dDo6Zm9ybWF0Rm9y
RGVidWdnZXIKQEAgLTY5MjMwLDcgKzY5MzIxLDcgQEAKICAgICAgICAgd2l0aCBjYWxsYmFja3Mg
aXMgbGltaXRpbmcgYSBudW1iZXIgb2Ygd2F5cy4gVGhlIGNhbGxiYWNrIG5hbWVzIGFyZSB2ZXJ5
IGFtYmlndW91cywgdGhlIGNhbGxiYWNrcwogICAgICAgICBtdXN0IGVpdGhlciBiZSBvbiBhIHNl
cGFyYXRlIG9iamVjdCAobW9yZSBib2lsZXJwbGF0ZSksIG9yIHRoZSBjYWxsYmFjayBtdXN0IGJl
IHB1YmxpYyBmb3IKICAgICAgICAgSHlzdGVyZXNpc0FjdGl2aXR5IHRvIGNhbGwgdGhlbSwgb3Ig
ZnJpZW5kcyBnZXQgaW52b2x2ZWQuIFdpdGhvdXQgdGhlIGJvaWxlcnBsYXRlIG9mIGV4dHJhCi0g
ICAgICAgIGRlbGVnYXRlIG9iamVjdHMgaXQncyBoYXJkIHRvIHNjYWxlIHVzZSBvZiB0aGVzZSBv
YmplY3RzIC3CoGEgc2luZ2xlIG9iamVjdCBjYW4ndCBzZXJ2ZSBhcyBhCisgICAgICAgIGRlbGVn
YXRlIG9iamVjdHMgaXQncyBoYXJkIHRvIHNjYWxlIHVzZSBvZiB0aGVzZSBvYmplY3RzIC0gYSBz
aW5nbGUgb2JqZWN0IGNhbid0IHNlcnZlIGFzIGEKICAgICAgICAgZGVsZWdhdGUgZm9yIG11bHRp
cGxlIEh5c3RlcmVzaXNBY3Rpdml0eSBtZW1iZXJzLgogCiAgICAgICAgIEluc3RlYWQsIG1ha2Ug
SHlzdGVyZXNpc0FjdGl2aXR5IHRha2UgYSBsYW1iZGEgdG8gY2FsbGJhY2sgb24gc3RhdGUgY2hh
bmdlLiBUbyBzaW1wbGlmeSwgY2hhbmdlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENDb25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaAppbmRleCA0ZmZhOTZlMDJlMzI4MWRj
YzI2ODE0YzM4MjZlYWQ1YjUwZTM4NmU0Li42MzdkNGQ5Y2JiYWJiOGQwZWRjMzg4ZDBkZDA0OTMz
ZWI1ZjY4MTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0NvbmZpZ3VyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaApAQCAtNjcsMTAgKzY3LDggQEAgcHVibGljOgogICAgIFZl
Y3RvcjxSZWZQdHI8UlRDSWNlU2VydmVyPj4gaWNlU2VydmVycygpIGNvbnN0CiAgICAgewogICAg
ICAgICBWZWN0b3I8UmVmUHRyPFJUQ0ljZVNlcnZlcj4+IHNlcnZlcnM7Ci0gICAgICAgIFZlY3Rv
cjxSZWZQdHI8UlRDSWNlU2VydmVyUHJpdmF0ZT4+IHByaXZhdGVTZXJ2ZXJzID0gbV9wcml2YXRl
LT5pY2VTZXJ2ZXJzKCk7Ci0KLSAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBwcml2YXRlU2VydmVy
cy5iZWdpbigpOyBpdGVyICE9IHByaXZhdGVTZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
ICAgICBzZXJ2ZXJzLmFwcGVuZChSVENJY2VTZXJ2ZXI6OmNyZWF0ZSgqaXRlcikpOworICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZlciA6IG1fcHJpdmF0ZS0+aWNlU2VydmVycygpKQorICAgICAgICAg
ICAgc2VydmVycy5hcHBlbmQoUlRDSWNlU2VydmVyOjpjcmVhdGUoc2VydmVyKSk7CiAKICAgICAg
ICAgcmV0dXJuIHNlcnZlcnM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAKaW5kZXggM2NmZmI4NmI2YTVkYjMzNWYw
YTk5NTY4YjUwNTFhMGE0MjQyY2YwOS4uNTI3YjVkMTlkOTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4
YmNkNWQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENEVE1GU2VuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC0xNjEsOSArMTYxLDggQEAgdm9pZCBSVENEVE1GU2VuZGVy
OjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBl
dmVudHM7CiAgICAgZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCi0gICAgVmVjdG9y
PFJlZlB0cjxFdmVudD4+OjppdGVyYXRvciBpdCA9IGV2ZW50cy5iZWdpbigpOwotICAgIGZvciAo
OyBpdCAhPSBldmVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoKCppdCku
cmVsZWFzZSgpKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNw
YXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hh
bm5lbC5jcHAKaW5kZXggOTBkMDZjNzliOTc0ZTgzODJlMDVkNzNmMmJiOGRkNGFkYmViMWY1Yi4u
ODI3MTkxYzcyN2U3ODVhMDA2MGRkYTA0N2MxOTMzZDg4YTYzZmU2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAg
LTMyMCwxMSArMzIwLDggQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c2NoZWR1bGVkRXZlbnRUaW1l
ckZpcmVkKCkKICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gZXZlbnRzOwogICAgIGV2ZW50cy5z
d2FwKG1fc2NoZWR1bGVkRXZlbnRzKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+Pjo6aXRl
cmF0b3IgaXQgPSBldmVudHMuYmVnaW4oKTsKLSAgICBmb3IgKDsgaXQgIT0gZXZlbnRzLmVuZCgp
OyArK2l0KQotICAgICAgICBkaXNwYXRjaEV2ZW50KCgqaXQpLnJlbGVhc2UoKSk7Ci0KLSAgICBl
dmVudHMuY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBk
aXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggMTYwOTgxNmI4NTk5ZDBkMGRhMzMxNDJhYjJlMDY4OTA0
MTJhNTVkNC4uYjkwNDA0Y2FhYTI0MjAzODI5YTc0ZDNkOGE3ZDIyNGQwNGY3YTdlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi5jcHAKQEAgLTk1LDggKzk1LDggQEAgc3RhdGljIEV4Y2VwdGlvbkNvZGUgcHJvY2Vz
c0ljZVNlcnZlcihjb25zdCBEaWN0aW9uYXJ5JiBpY2VTZXJ2ZXIsIFJUQ0NvbmZpZ3VyYXQKICAg
ICAgICAgcmV0dXJuIElOVkFMSURfQUNDRVNTX0VSUjsKIAogICAgIGlmICh1cmxTdHJpbmcuZmlu
ZCgnLCcpICE9IG5vdEZvdW5kICYmIGljZVNlcnZlci5nZXQoInVybHMiLCB1cmxzTGlzdCkgJiYg
dXJsc0xpc3Quc2l6ZSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byBpdGVyID0gdXJsc0xpc3QuYmVn
aW4oKTsgaXRlciAhPSB1cmxzTGlzdC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAo
IXZhbGlkYXRlSWNlU2VydmVyVVJMKCppdGVyKSkKKyAgICAgICAgZm9yIChhdXRvJiB1cmwgOiB1
cmxzTGlzdCkgeworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUljZVNlcnZlclVSTCh1cmwpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewpAQCAtMjAzLDggKzIwMyw4IEBAIFJUQ1BlZXJDb25uZWN0aW9uOjp+UlRDUGVl
ckNvbm5lY3Rpb24oKQogewogICAgIHN0b3AoKTsKIAotICAgIGZvciAoYXV0byBzdHJlYW0gPSBt
X2xvY2FsU3RyZWFtcy5iZWdpbigpLCBlbmQgPSBtX2xvY2FsU3RyZWFtcy5lbmQoKTsgc3RyZWFt
ICE9IGVuZDsgKytzdHJlYW0pCi0gICAgICAgICgqc3RyZWFtKS0+cmVtb3ZlT2JzZXJ2ZXIodGhp
cyk7CisgICAgZm9yIChhdXRvJiBsb2NhbFN0cmVhbSA6IG1fbG9jYWxTdHJlYW1zKQorICAgICAg
ICBsb2NhbFN0cmVhbS0+cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiB9CiAKIHZvaWQgUlRDUGVlckNv
bm5lY3Rpb246OmNyZWF0ZU9mZmVyKFBhc3NSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxSVENQZWVyQ29ubmVjdGlvbkVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGNvbnN0IERpY3Rpb25hcnkmIG9mZmVyT3B0aW9ucywg
RXhjZXB0aW9uQ29kZSYgZWMpCkBAIC01MTQsMTQgKzUxNCwxNCBAQCBWZWN0b3I8UmVmUHRyPE1l
ZGlhU3RyZWFtPj4gUlRDUGVlckNvbm5lY3Rpb246OmdldFJlbW90ZVN0cmVhbXMoKSBjb25zdAog
CiBNZWRpYVN0cmVhbSogUlRDUGVlckNvbm5lY3Rpb246OmdldFN0cmVhbUJ5SWQoY29uc3QgU3Ry
aW5nJiBzdHJlYW1JZCkKIHsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fbG9jYWxTdHJlYW1zLmJl
Z2luKCk7IGl0ZXIgIT0gbV9sb2NhbFN0cmVhbXMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBp
ZiAoKCppdGVyKS0+aWQoKSA9PSBzdHJlYW1JZCkKLSAgICAgICAgICAgIHJldHVybiBpdGVyLT5n
ZXQoKTsKKyAgICBmb3IgKGF1dG8mIGxvY2FsU3RyZWFtIDogbV9sb2NhbFN0cmVhbXMpIHsKKyAg
ICAgICAgaWYgKGxvY2FsU3RyZWFtLT5pZCgpID09IHN0cmVhbUlkKQorICAgICAgICAgICAgcmV0
dXJuIGxvY2FsU3RyZWFtLmdldCgpOwogICAgIH0KIAotICAgIGZvciAoYXV0byBpdGVyID0gbV9y
ZW1vdGVTdHJlYW1zLmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW1vdGVTdHJlYW1zLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmlkKCkgPT0gc3RyZWFtSWQpCi0gICAgICAgICAg
ICByZXR1cm4gaXRlci0+Z2V0KCk7CisgICAgZm9yIChhdXRvJiByZW1vdGVTdHJlYW0gOiBtX3Jl
bW90ZVN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHJlbW90ZVN0cmVhbS0+aWQoKSA9PSBzdHJlYW1J
ZCkKKyAgICAgICAgICAgIHJldHVybiByZW1vdGVTdHJlYW0uZ2V0KCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC01NTEsOCArNTUxLDggQEAgUGFzc1JlZlB0cjxSVENEYXRhQ2hh
bm5lbD4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZURhdGFDaGFubmVsKFN0cmluZyBsYWJlbCwg
Y28KIAogYm9vbCBSVENQZWVyQ29ubmVjdGlvbjo6aGFzTG9jYWxTdHJlYW1XaXRoVHJhY2tJZChj
b25zdCBTdHJpbmcmIHRyYWNrSWQpCiB7Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX2xvY2FsU3Ry
ZWFtcy5iZWdpbigpOyBpdGVyICE9IG1fbG9jYWxTdHJlYW1zLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgaWYgKCgqaXRlciktPmdldFRyYWNrQnlJZCh0cmFja0lkKSkKKyAgICBmb3IgKGF1dG8m
IGxvY2FsU3RyZWFtIDogbV9sb2NhbFN0cmVhbXMpIHsKKyAgICAgICAgaWYgKGxvY2FsU3RyZWFt
LT5nZXRUcmFja0J5SWQodHJhY2tJZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjg1LDkgKzY4NSw4IEBAIHZvaWQgUlRDUGVlckNvbm5l
Y3Rpb246OnN0b3AoKQogICAgIG1faWNlQ29ubmVjdGlvblN0YXRlID0gSWNlQ29ubmVjdGlvblN0
YXRlQ2xvc2VkOwogICAgIG1fc2lnbmFsaW5nU3RhdGUgPSBTaWduYWxpbmdTdGF0ZUNsb3NlZDsK
IAotICAgIFZlY3RvcjxSZWZQdHI8UlRDRGF0YUNoYW5uZWw+Pjo6aXRlcmF0b3IgaSA9IG1fZGF0
YUNoYW5uZWxzLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gbV9kYXRhQ2hhbm5lbHMuZW5kKCk7
ICsraSkKLSAgICAgICAgKCppKS0+c3RvcCgpOworICAgIGZvciAoYXV0byYgY2hhbm5lbCA6IG1f
ZGF0YUNoYW5uZWxzKQorICAgICAgICBjaGFubmVsLT5zdG9wKCk7CiB9CiAKIGNvbnN0IGNoYXIq
IFJUQ1BlZXJDb25uZWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAgLTc0Myw5
ICs3NDIsOCBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpzY2hlZHVsZWRFdmVudFRpbWVyRmly
ZWQoKQogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CiAgICAgZXZlbnRzLnN3YXAo
bV9zY2hlZHVsZWRFdmVudHMpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+OjppdGVyYXRv
ciBpdCA9IGV2ZW50cy5iZWdpbigpOwotICAgIGZvciAoOyBpdCAhPSBldmVudHMuZW5kKCk7ICsr
aXQpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoKCppdCkucmVsZWFzZSgpKTsKKyAgICBmb3IgKGF1
dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2Uo
KSk7CiAKICAgICBldmVudHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKaW5kZXggOTg5YTc2ZmZjMDg2
NzEzYTFmNjA2ZmFjNWRkNGQxNmNhMzkzOWIzNS4uYTAzNTYzNDUwZTRhNTVhNjc0YjQ1OGQzNGIx
MzNhYjc1MmY0NTYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKQEAgLTQ4LDkgKzQ4LDggQEAgUlRDU3RhdHNSZXBv
cnQ6OlJUQ1N0YXRzUmVwb3J0KGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgdHlwZSwg
ZG91YmxlIHRpbWUKIFZlY3RvcjxTdHJpbmc+IFJUQ1N0YXRzUmVwb3J0OjpuYW1lcygpIGNvbnN0
CiB7CiAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwotICAgIGZvciAoSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0cy5iZWdpbigpOyBpdCAhPSBtX3N0
YXRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoaXQtPmtleSk7Ci0gICAg
fQorICAgIGZvciAoYXV0byYgc3RhdCA6IG1fc3RhdHMua2V5cygpKQorICAgICAgICByZXN1bHQu
YXBwZW5kKHN0YXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNvbnRlbnRV
dGlscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9O
YXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwCmluZGV4IGNjYTdkOWUzMTk0YzgwNWRiOTIwOGZlZTVj
NzBmNWYyMjFiNWQyOWMuLjU2ODY3MTUyOWFiNTA4MDRhOTc5Y2E2MzQzY2RlYjJhYTJhMzIwNzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxz
L05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9u
YXZpZ2F0b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0aWxzLmNwcApAQCAtNDQsMjkg
KzQ0LDggQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiogcHJvdG9jb2xXaGl0ZWxpc3Q7CiBzdGF0
aWMgdm9pZCBpbml0UHJvdG9jb2xIYW5kbGVyV2hpdGVsaXN0KCkKIHsKICAgICBwcm90b2NvbFdo
aXRlbGlzdCA9IG5ldyBIYXNoU2V0PFN0cmluZz47Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHBy
b3RvY29sc1tdID0gewotICAgICAgICAiYml0Y29pbiIsCi0gICAgICAgICJnZW8iLAotICAgICAg
ICAiaW0iLAotICAgICAgICAiaXJjIiwKLSAgICAgICAgImlyY3MiLAotICAgICAgICAibWFnbmV0
IiwKLSAgICAgICAgIm1haWx0byIsCi0gICAgICAgICJtbXMiLAotICAgICAgICAibmV3cyIsCi0g
ICAgICAgICJubnRwIiwKLSAgICAgICAgInNpcCIsCi0gICAgICAgICJzbXMiLAotICAgICAgICAi
c21zdG8iLAotICAgICAgICAic3NoIiwKLSAgICAgICAgInRlbCIsCi0gICAgICAgICJ1cm4iLAot
ICAgICAgICAid2ViY2FsIiwKLSAgICAgICAgInd0YWkiLAotICAgICAgICAieG1wcCIsCi0gICAg
fTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgocHJvdG9jb2xz
KTsgKytpKQotICAgICAgICBwcm90b2NvbFdoaXRlbGlzdC0+YWRkKHByb3RvY29sc1tpXSk7Cisg
ICAgZm9yIChhdXRvKiBwcm90b2NvbCA6IHsgImJpdGNvaW4iLCAiZ2VvIiwgImltIiwgImlyYyIs
ICJpcmNzIiwgIm1hZ25ldCIsICJtYWlsdG8iLCAibW1zIiwgIm5ld3MiLCAibm50cCIsICJzaXAi
LCAic21zIiwgInNtc3RvIiwgInNzaCIsICJ0ZWwiLCAidXJuIiwgIndlYmNhbCIsICJ3dGFpIiwg
InhtcHAiIH0pCisgICAgICAgIHByb3RvY29sV2hpdGVsaXN0LT5hZGQocHJvdG9jb2wpOwogfQog
CiBzdGF0aWMgYm9vbCB2ZXJpZnlDdXN0b21IYW5kbGVyVVJMKGNvbnN0IFVSTCYgYmFzZVVSTCwg
Y29uc3QgU3RyaW5nJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKaW5kZXggNzg1MDM0MGExMGE3
ZTM5NDc3NDljMjAwNDBlNjgwYzVhMWIzNGRlOS4uOTcxNDlmNGUyMDY2NjEwOWZmZWMxMjJmNGVi
MTUyN2U3MWI3MWU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
U3BlZWNoU3ludGhlc2lzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXMuY3BwCkBAIC03NCwxMCArNzQsOCBAQCBjb25zdCBWZWN0b3I8UmVmUHRy
PFNwZWVjaFN5bnRoZXNpc1ZvaWNlPj4mIFNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2VzKCkKICAg
ICAgICAgbV9wbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpemVyPih0aGlzKTsKIAogICAgIC8vIElmIHRoZSB2b2ljZUxpc3Qg
aXMgZW1wdHksIHRoYXQncyB0aGUgY3VlIHRvIGdldCB0aGUgdm9pY2VzIGZyb20gdGhlIHBsYXRm
b3JtIGFnYWluLgotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNWb2ljZT4+JiBwbGF0Zm9ybVZvaWNlcyA9IG1fcGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci0+
dm9pY2VMaXN0KCk7Ci0gICAgc2l6ZV90IHZvaWNlQ291bnQgPSBwbGF0Zm9ybVZvaWNlcy5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCB2b2ljZUNvdW50OyBrKyspCi0gICAgICAg
IG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKHBsYXRmb3Jt
Vm9pY2VzW2tdKSk7CisgICAgZm9yIChhdXRvJiB2b2ljZSA6IG1fcGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplci0+dm9pY2VMaXN0KCkpCisgICAgICAgIG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hT
eW50aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlKSk7CiAKICAgICByZXR1cm4gbV92b2ljZUxpc3Q7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3Bw
CmluZGV4IDMxZGE5NGMyN2E0NDEzYzIwYzY3ODZlZmMwZmI3OGI1ZDNmYjQ1YTIuLjhjYjhhNzFk
OTg4Y2E2ZGIwZTRlY2I0ZTFjOWU5ZTQ2ZTYwN2I3MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCkBAIC0xMjUsOCArMTI1LDggQEAgdm9p
ZCBBdWRpb0J1ZmZlcjo6emVybygpCiBzaXplX3QgQXVkaW9CdWZmZXI6Om1lbW9yeUNvc3QoKSBj
b25zdAogewogICAgIHNpemVfdCBjb3N0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jaGFubmVscy5zaXplKCkgOyArK2kpCi0gICAgICAgIGNvc3QgKz0gbV9jaGFubmVsc1tp
XS0+Ynl0ZUxlbmd0aCgpOworICAgIGZvciAoYXV0byYgY2hhbm5lbCA6IG1fY2hhbm5lbHMpCisg
ICAgICAgIGNvc3QgKz0gY2hhbm5lbC0+Ynl0ZUxlbmd0aCgpOwogICAgIHJldHVybiBjb3N0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5j
cHAKaW5kZXggYTI5MzE2YTE1ZmYyZWI3OTU4OTIwNmExMjQ1MTBkZmEwN2U1ODEwYS4uZTNlYzkx
ODNlNWE0NDFmOTYxMjg3NjNhZGYyNDJhMDNmY2U3NWNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtNDYwLDEyICs0NjAsMTEg
QEAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gQXVkaW9Db250ZXh0Ojpj
cmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWQKIAogICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIHBy
b3ZpZGVyID0gMDsKIAotICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+IGF1ZGlv
VHJhY2tzID0gbWVkaWFTdHJlYW0tPmdldEF1ZGlvVHJhY2tzKCk7CiAgICAgUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2s+IGF1ZGlvVHJhY2s7CiAKICAgICAvLyBGSVhNRTogZ2V0IGEgcHJvdmlkZXIg
Zm9yIG5vbi1sb2NhbCBNZWRpYVN0cmVhbXMgKGxpa2UgZnJvbSBhIHJlbW90ZSBwZWVyKS4KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvVHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGF1ZGlvVHJhY2sgPSBhdWRpb1RyYWNrc1tpXTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bWVkaWFTdHJlYW0tPmdldEF1ZGlvVHJhY2tzKCkpIHsKKyAgICAgICAgYXVkaW9UcmFjayA9IHRy
YWNrOwogICAgICAgICBpZiAoYXVkaW9UcmFjay0+c291cmNlKCktPmlzQXVkaW9TdHJlYW1Tb3Vy
Y2UoKSkgewogICAgICAgICAgICAgYXV0byBzb3VyY2UgPSBzdGF0aWNfY2FzdDxNZWRpYVN0cmVh
bUF1ZGlvU291cmNlKj4oYXVkaW9UcmFjay0+c291cmNlKCkpOwogICAgICAgICAgICAgQVNTRVJU
KCFzb3VyY2UtPmRldmljZUlkKCkuaXNFbXB0eSgpKTsKQEAgLTY2NCw4ICs2NjMsOCBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6ZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCkKIHsKICAgICBBU1NFUlQo
aXNHcmFwaE93bmVyKCkpOwogICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkgfHwgaXNBdWRpb1Ro
cmVhZEZpbmlzaGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZpbmlzaGVk
Tm9kZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGRlcmVmTm9kZShtX2ZpbmlzaGVkTm9kZXNbaV0p
OworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fZmluaXNoZWROb2RlcykKKyAgICAgICAgZGVyZWZO
b2RlKG5vZGUpOwogCiAgICAgbV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7CiB9CkBAIC02OTIsOCAr
NjkxLDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVmTm9kZShBdWRpb05vZGUqIG5vZGUpCiB2
b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSAmJiBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVmZXJlbmNlZE5vZGVzLnNpemUoKTsgKytpKQotICAg
ICAgICBtX3JlZmVyZW5jZWROb2Rlc1tpXS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVj
dGlvbik7CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9yZWZlcmVuY2VkTm9kZXMpCisgICAgICAg
IG5vZGUtPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwogCiAgICAgbV9yZWZl
cmVuY2VkTm9kZXMuY2xlYXIoKTsKIH0KQEAgLTgyNSwxMCArODI0LDggQEAgdm9pZCBBdWRpb0Nv
bnRleHQ6OmhhbmRsZVBvc3RSZW5kZXJUYXNrcygpCiB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxl
RGVmZXJyZWRGaW5pc2hEZXJlZnMoKQogewogICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkgJiYg
aXNHcmFwaE93bmVyKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RlZmVycmVk
RmluaXNoRGVyZWZMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZSogbm9kZSA9
IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3RbaV07CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9k
ZWZlcnJlZEZpbmlzaERlcmVmTGlzdCkKICAgICAgICAgbm9kZS0+ZmluaXNoRGVyZWYoQXVkaW9O
b2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0gICAgfQogICAgIAogICAgIG1fZGVmZXJyZWRGaW5p
c2hEZXJlZkxpc3QuY2xlYXIoKTsKIH0KQEAgLTkyMiw4ICs5MTksOCBAQCB2b2lkIEF1ZGlvQ29u
dGV4dDo6aGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMoKQogewogICAgIEFTU0VSVChp
c0dyYXBoT3duZXIoKSk7ICAgIAogCi0gICAgZm9yIChIYXNoU2V0PEF1ZGlvU3VtbWluZ0p1bmN0
aW9uKj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5U3VtbWluZ0p1bmN0aW9ucy5iZWdpbigpOyBpICE9
IG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLmVuZCgpOyArK2kpCi0gICAgICAgICgqaSktPnVwZGF0
ZVJlbmRlcmluZ1N0YXRlKCk7CisgICAgZm9yIChhdXRvJiBqdW5jdGlvbiA6IG1fZGlydHlTdW1t
aW5nSnVuY3Rpb25zKQorICAgICAgICBqdW5jdGlvbi0+dXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsK
IAogICAgIG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLmNsZWFyKCk7CiB9CkBAIC05MzIsOCArOTI5
LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpCiB7
CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCiAKLSAgICBmb3IgKEhhc2hTZXQ8QXVk
aW9Ob2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5iZWdp
bigpOyBpICE9IG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmVuZCgpOyArK2kpCi0gICAgICAgICgq
aSktPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CisgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX2Rp
cnR5QXVkaW9Ob2RlT3V0cHV0cykKKyAgICAgICAgb3V0cHV0LT51cGRhdGVSZW5kZXJpbmdTdGF0
ZSgpOwogCiAgICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuY2xlYXIoKTsKIH0KQEAgLTk2Miwx
MSArOTU5LDkgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVwZGF0ZUF1dG9tYXRpY1B1bGxOb2Rlcygp
CiAgICAgICAgIC8vIENvcHkgZnJvbSBtX2F1dG9tYXRpY1B1bGxOb2RlcyB0byBtX3JlbmRlcmlu
Z0F1dG9tYXRpY1B1bGxOb2Rlcy4KICAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9k
ZXMucmVzaXplKG1fYXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7CiAKLSAgICAgICAgdW5zaWdu
ZWQgaiA9IDA7Ci0gICAgICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGUqPjo6aXRlcmF0b3IgaSA9
IG1fYXV0b21hdGljUHVsbE5vZGVzLmJlZ2luKCk7IGkgIT0gbV9hdXRvbWF0aWNQdWxsTm9kZXMu
ZW5kKCk7ICsraSwgKytqKSB7Ci0gICAgICAgICAgICBBdWRpb05vZGUqIG91dHB1dCA9ICppOwot
ICAgICAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXNbal0gPSBvdXRwdXQ7Ci0g
ICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGZvciAoYXV0byYgb3V0
cHV0IDogbV9hdXRvbWF0aWNQdWxsTm9kZXMpCisgICAgICAgICAgICBtX3JlbmRlcmluZ0F1dG9t
YXRpY1B1bGxOb2Rlc1tpKytdID0gb3V0cHV0OwogCiAgICAgICAgIG1fYXV0b21hdGljUHVsbE5v
ZGVzTmVlZFVwZGF0aW5nID0gZmFsc2U7CiAgICAgfQpAQCAtOTc2LDggKzk3MSw4IEBAIHZvaWQg
QXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpCiB7CiAgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7CiAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2ldLT5wcm9jZXNzSWZOZWNl
c3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3JlbmRlcmlu
Z0F1dG9tYXRpY1B1bGxOb2RlcykKKyAgICAgICAgbm9kZS0+cHJvY2Vzc0lmTmVjZXNzYXJ5KGZy
YW1lc1RvUHJvY2Vzcyk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEF1ZGlvQ29udGV4
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXggMzI2NGI1YjFiNTEwMDE2MGU3Zjg4MzI3
ZmNiNjUxNWMyYzZlZGNmMC4uZjQ2YjRiZTI0NGQ0MDdkMDA0OTEzYWI1NDdkOTExZDkxOGVjMDNl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcApA
QCAtMjc3LDggKzI3Nyw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpzZXRDaGFubmVsSW50ZXJwcmV0YXRp
b24oY29uc3QgU3RyaW5nJiBpbnRlcnByZXRhdGlvbiwgRXhjZXB0aW9uCiAKIHZvaWQgQXVkaW9O
b2RlOjp1cGRhdGVDaGFubmVsc0ZvcklucHV0cygpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1faW5wdXRzLnNpemUoKTsgKytpKQotICAgICAgICBpbnB1dChpKS0+Y2hhbmdlZE91
dHB1dHMoKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpCisgICAgICAgIGlucHV0
LT5jaGFuZ2VkT3V0cHV0cygpOwogfQogCiBFdmVudFRhcmdldEludGVyZmFjZSBBdWRpb05vZGU6
OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIEF1
ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlu
cHV0KQogewogICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0
KCktPmlzR3JhcGhPd25lcigpKTsKIAotICAgIGZvciAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEF1
ZGlvTm9kZUlucHV0PiYgc2F2ZWRJbnB1dCA6IG1faW5wdXRzKSB7CisgICAgZm9yIChhdXRvJiBz
YXZlZElucHV0IDogbV9pbnB1dHMpIHsKICAgICAgICAgaWYgKGlucHV0ID09IHNhdmVkSW5wdXQu
Z2V0KCkpIHsKICAgICAgICAgICAgIGlucHV0LT51cGRhdGVJbnRlcm5hbEJ1cygpOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMzQ1LDE0ICszNDUsMTQgQEAgdm9pZCBBdWRpb05vZGU6OnB1bGxJ
bnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1
ZGlvVGhyZWFkKCkpOwogICAgIAogICAgIC8vIFByb2Nlc3MgYWxsIG9mIHRoZSBBdWRpb05vZGVz
IGNvbm5lY3RlZCB0byBvdXIgaW5wdXRzLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2lucHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgaW5wdXQoaSktPnB1bGwoMCwgZnJhbWVzVG9Q
cm9jZXNzKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpCisgICAgICAgIGlucHV0
LT5wdWxsKDAsIGZyYW1lc1RvUHJvY2Vzcyk7CiB9CiAKIGJvb2wgQXVkaW9Ob2RlOjppbnB1dHNB
cmVTaWxlbnQoKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lucHV0cy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAoIWlucHV0KGkpLT5idXMoKS0+aXNTaWxlbnQoKSkKKyAg
ICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpIHsKKyAgICAgICAgaWYgKCFpbnB1dC0+YnVz
KCktPmlzU2lsZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzYwLDE0ICszNjAsMTQgQEAgYm9vbCBBdWRpb05vZGU6OmlucHV0c0Fy
ZVNpbGVudCgpCiAKIHZvaWQgQXVkaW9Ob2RlOjpzaWxlbmNlT3V0cHV0cygpCiB7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0
cHV0KGkpLT5idXMoKS0+emVybygpOworICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9vdXRwdXRz
KQorICAgICAgICBvdXRwdXQtPmJ1cygpLT56ZXJvKCk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjp1
bnNpbGVuY2VPdXRwdXRzKCkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRw
dXRzLnNpemUoKTsgKytpKQotICAgICAgICBvdXRwdXQoaSktPmJ1cygpLT5jbGVhclNpbGVudEZs
YWcoKTsKKyAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAgICAgb3V0cHV0
LT5idXMoKS0+Y2xlYXJTaWxlbnRGbGFnKCk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjplbmFibGVP
dXRwdXRzSWZOZWNlc3NhcnkoKQpAQCAtMzc3LDggKzM3Nyw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpl
bmFibGVPdXRwdXRzSWZOZWNlc3NhcnkoKQogICAgICAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2Nr
ZXIgbG9ja2VyKCpjb250ZXh0KCkpOwogCiAgICAgICAgIG1faXNEaXNhYmxlZCA9IGZhbHNlOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRwdXRzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgb3V0cHV0KGkpLT5lbmFibGUoKTsKKyAgICAgICAgZm9yIChhdXRvJiBvdXRw
dXQgOiBtX291dHB1dHMpCisgICAgICAgICAgICBvdXRwdXQtPmVuYWJsZSgpOwogICAgIH0KIH0K
IApAQCAtNDAyLDggKzQwMiw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpkaXNhYmxlT3V0cHV0c0lmTmVj
ZXNzYXJ5KCkKICAgICAgICAgLy8gbG9uZ2VyIGFueSBhY3RpdmUgY29ubmVjdGlvbnMuCiAgICAg
ICAgIGlmIChub2RlVHlwZSgpICE9IE5vZGVUeXBlQ29udm9sdmVyICYmIG5vZGVUeXBlKCkgIT0g
Tm9kZVR5cGVEZWxheSkgewogICAgICAgICAgICAgbV9pc0Rpc2FibGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX291dHB1dHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNhYmxlKCk7CisgICAgICAgICAgICBmb3IgKGF1
dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAgICAgICAgICAgICBvdXRwdXQtPmRpc2FibGUo
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQ5Miw4ICs0OTIsOCBAQCB2b2lkIEF1ZGlvTm9k
ZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBlKQogICAgICAgICBpZiAoIW1fbm9ybWFsUmVm
Q291bnQpIHsKICAgICAgICAgICAgIGlmICghbV9pc01hcmtlZEZvckRlbGV0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgLy8gQWxsIHJlZmVyZW5jZXMgYXJlIGdvbmUgLSB3ZSBuZWVkIHRvIGdvIGF3
YXkuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNjb25uZWN0QWxs
KCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0by4KKyAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0LT5kaXNjb25uZWN0QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVz
IHdlJ3JlIGNvbm5lY3RlZCB0by4KIAogICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0
aW9uIGF0IGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBk
b3duLgogICAgICAgICAgICAgICAgIGNvbnRleHQoKS0+bWFya0ZvckRlbGV0aW9uKHRoaXMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNw
cAppbmRleCBjNjIzMzNkMmIyMTk3ODU4YjJlODBmMzE5MDMwYWYzZGRjOGViMjc4Li5hNjA1ZTMz
MmRhODZhOGQ0OWViOTFjYTYxZmEwMGZlZTBhOGJiYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcApAQCAtMTUxLDggKzE1MSw3
IEBAIHVuc2lnbmVkIEF1ZGlvTm9kZUlucHV0OjpudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QKICAg
ICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIGNvbm5lY3Rpb24gd2l0aCB0
aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhbm5lbHMuCiAgICAgdW5zaWduZWQgbWF4Q2hhbm5lbHMg
PSAxOyAvLyBvbmUgY2hhbm5lbCBpcyB0aGUgbWluaW11bSBhbGxvd2VkCiAKLSAgICBmb3IgKEhh
c2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBtX291dHB1dHMuYmVnaW4oKTsg
aSAhPSBtX291dHB1dHMuZW5kKCk7ICsraSkgewotICAgICAgICBBdWRpb05vZGVPdXRwdXQqIG91
dHB1dCA9ICppOworICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9vdXRwdXRzKSB7CiAgICAgICAg
IC8vIFVzZSBvdXRwdXQoKS0+bnVtYmVyT2ZDaGFubmVscygpIGluc3RlYWQgb2Ygb3V0cHV0LT5i
dXMoKS0+bnVtYmVyT2ZDaGFubmVscygpLAogICAgICAgICAvLyBiZWNhdXNlIHRoZSBjYWxsaW5n
IG9mIEF1ZGlvTm9kZU91dHB1dDo6YnVzKCkgaXMgbm90IHNhZmUgaGVyZS4KICAgICAgICAgbWF4
Q2hhbm5lbHMgPSBzdGQ6Om1heChtYXhDaGFubmVscywgb3V0cHV0LT5udW1iZXJPZkNoYW5uZWxz
KCkpOwpAQCAtMTk4LDggKzE5Nyw3IEBAIHZvaWQgQXVkaW9Ob2RlSW5wdXQ6OnN1bUFsbENvbm5l
Y3Rpb25zKEF1ZGlvQnVzKiBzdW1taW5nQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jCiAKICAgICBB
dWRpb0J1czo6Q2hhbm5lbEludGVycHJldGF0aW9uIGludGVycHJldGF0aW9uID0gbm9kZSgpLT5p
bnRlcm5hbENoYW5uZWxJbnRlcnByZXRhdGlvbigpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsgKytpKSB7Ci0gICAgICAgIEF1
ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gcmVuZGVyaW5nT3V0cHV0KGkpOworICAgIGZvciAoYXV0
byYgb3V0cHV0IDogbV9yZW5kZXJpbmdPdXRwdXRzKSB7CiAgICAgICAgIEFTU0VSVChvdXRwdXQp
OwogCiAgICAgICAgIC8vIFJlbmRlciBhdWRpbyBmcm9tIHRoaXMgb3V0cHV0LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCmluZGV4
IGY5YTQ1MTZmOTgyNDdjZDBkZDEyNmNhYzQ4MmNkZWZhOTkyNjhiMTEuLjQ2OGQ4ZDVmMTQwOTQx
MmFhMThkMzIxOWE0Y2M0MzVjMTNiMWRkYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAKQEAgLTk4LDggKzk4LDcgQEAgdm9p
ZCBBdWRpb05vZGVPdXRwdXQ6OnByb3BhZ2F0ZUNoYW5uZWxDb3VudCgpCiAgICAgCiAgICAgaWYg
KGlzQ2hhbm5lbENvdW50S25vd24oKSkgewogICAgICAgICAvLyBBbm5vdW5jZSB0byBhbnkgbm9k
ZXMgd2UncmUgY29ubmVjdGVkIHRvIHRoYXQgd2UgY2hhbmdlZCBvdXIgY2hhbm5lbCBjb3VudCBm
b3IgaXRzIGlucHV0LgotICAgICAgICBmb3IgKElucHV0c0l0ZXJhdG9yIGkgPSBtX2lucHV0cy5i
ZWdpbigpOyBpICE9IG1faW5wdXRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgICAgIEF1ZGlvTm9k
ZUlucHV0KiBpbnB1dCA9ICppOworICAgICAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMp
IHsKICAgICAgICAgICAgIEF1ZGlvTm9kZSogY29ubmVjdGlvbk5vZGUgPSBpbnB1dC0+bm9kZSgp
OwogICAgICAgICAgICAgY29ubmVjdGlvbk5vZGUtPmNoZWNrTnVtYmVyT2ZDaGFubmVsc0Zvcklu
cHV0KGlucHV0KTsKICAgICAgICAgfQpAQCAtMjMwLDEwICsyMjksOCBAQCB2b2lkIEF1ZGlvTm9k
ZU91dHB1dDo6ZGlzYWJsZSgpCiAgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkp
OwogCiAgICAgaWYgKG1faXNFbmFibGVkKSB7Ci0gICAgICAgIGZvciAoSW5wdXRzSXRlcmF0b3Ig
aSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMuZW5kKCk7ICsraSkgewotICAgICAg
ICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7CisgICAgICAgIGZvciAoYXV0byYgaW5w
dXQgOiBtX2lucHV0cykKICAgICAgICAgICAgIGlucHV0LT5kaXNhYmxlKHRoaXMpOwotICAgICAg
ICB9CiAgICAgICAgIG1faXNFbmFibGVkID0gZmFsc2U7CiAgICAgfQogfQpAQCAtMjQzLDEwICsy
NDAsOCBAQCB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxlKCkKICAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CiAKICAgICBpZiAoIW1faXNFbmFibGVkKSB7Ci0gICAgICAg
IGZvciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMu
ZW5kKCk7ICsraSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7Cisg
ICAgICAgIGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0cykKICAgICAgICAgICAgIGlucHV0LT5l
bmFibGUodGhpcyk7Ci0gICAgICAgIH0KICAgICAgICAgbV9pc0VuYWJsZWQgPSB0cnVlOwogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Q
YXJhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3Bw
CmluZGV4IDNlNDg5OWY1MGUzOWMzOGIxN2U1MGI0NTg1YTJiNjQ4MWJiNjBhYmEuLmI3M2U5MTZh
ZjkyZDliNmQ2ZTIwOWM3ZmJiY2RhZDFlNGQ2MjRjYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcApAQCAtMTM5LDggKzEzOSw3IEBAIHZvaWQg
QXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1ZXMoZmxvYXQqIHZhbHVlcywgdW5zaWduZWQg
bnVtYmVyT2ZWYWx1ZXMsIGJvCiAgICAgUmVmUHRyPEF1ZGlvQnVzPiBzdW1taW5nQnVzID0gQXVk
aW9CdXM6OmNyZWF0ZSgxLCBudW1iZXJPZlZhbHVlcywgZmFsc2UpOwogICAgIHN1bW1pbmdCdXMt
PnNldENoYW5uZWxNZW1vcnkoMCwgdmFsdWVzLCBudW1iZXJPZlZhbHVlcyk7CiAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpOyArK2kp
IHsKLSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSByZW5kZXJpbmdPdXRwdXQoaSk7
CisgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX3JlbmRlcmluZ091dHB1dHMpIHsKICAgICAgICAg
QVNTRVJUKG91dHB1dCk7CiAKICAgICAgICAgLy8gUmVuZGVyIGF1ZGlvIGZyb20gdGhpcyBvdXRw
dXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5jcHAKaW5kZXggMWM3ZTRlNWY4YmU5M2RiMDk3MjE4MjE0M2Y2NmM3MDY4NjI5
YmJhNy4uZTg3YmU2MjQ1OGIzMjIyM2YyZTk5YTA0Y2Q0ZWQwMzAwZTUwMzU0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5l
LmNwcApAQCAtODQsMTUgKzg0LDE3IEBAIHZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjppbnNlcnRF
dmVudChjb25zdCBQYXJhbUV2ZW50JiBldmVudCkKICAgICAKICAgICB1bnNpZ25lZCBpID0gMDsK
ICAgICBmbG9hdCBpbnNlcnRUaW1lID0gZXZlbnQudGltZSgpOwotICAgIGZvciAoaSA9IDA7IGkg
PCBtX2V2ZW50cy5zaXplKCk7ICsraSkgeworICAgIGZvciAoYXV0byYgcGFyYW1FdmVudCA6IG1f
ZXZlbnRzKSB7CiAgICAgICAgIC8vIE92ZXJ3cml0ZSBzYW1lIGV2ZW50IHR5cGUgYW5kIHRpbWUu
Ci0gICAgICAgIGlmIChtX2V2ZW50c1tpXS50aW1lKCkgPT0gaW5zZXJ0VGltZSAmJiBtX2V2ZW50
c1tpXS50eXBlKCkgPT0gZXZlbnQudHlwZSgpKSB7Ci0gICAgICAgICAgICBtX2V2ZW50c1tpXSA9
IGV2ZW50OworICAgICAgICBpZiAocGFyYW1FdmVudC50aW1lKCkgPT0gaW5zZXJ0VGltZSAmJiBw
YXJhbUV2ZW50LnR5cGUoKSA9PSBldmVudC50eXBlKCkpIHsKKyAgICAgICAgICAgIHBhcmFtRXZl
bnQgPSBldmVudDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChtX2V2ZW50c1tpXS50aW1lKCkgPiBpbnNlcnRUaW1lKQorICAgICAgICBpZiAocGFyYW1FdmVu
dC50aW1lKCkgPiBpbnNlcnRUaW1lKQogICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKytp
OwogICAgIH0KIAogICAgIG1fZXZlbnRzLmluc2VydChpLCBldmVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3Bw
CmluZGV4IGVkNDE3ZmFkYmQ1NWVlNjNkNmI4ZmNmODVkZjc0N2RhZmQ2ODI4YTQuLmMyMjhlZWM3
MTgyOTk5ZjA4MWNmMGI1ZjM5YzQ0YWUxM2U0MmYyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwCkBAIC02
MiwxMCArNjIsOSBAQCB2b2lkIEF1ZGlvU3VtbWluZ0p1bmN0aW9uOjp1cGRhdGVSZW5kZXJpbmdT
dGF0ZSgpCiAgICAgaWYgKG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcgJiYgY2FuVXBkYXRl
U3RhdGUoKSkgewogICAgICAgICAvLyBDb3B5IGZyb20gbV9vdXRwdXRzIHRvIG1fcmVuZGVyaW5n
T3V0cHV0cy4KICAgICAgICAgbV9yZW5kZXJpbmdPdXRwdXRzLnJlc2l6ZShtX291dHB1dHMuc2l6
ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgaiA9IDA7Ci0gICAgICAgIGZvciAoSGFzaFNldDxBdWRp
b05vZGVPdXRwdXQqPjo6aXRlcmF0b3IgaSA9IG1fb3V0cHV0cy5iZWdpbigpOyBpICE9IG1fb3V0
cHV0cy5lbmQoKTsgKytpLCArK2opIHsKLSAgICAgICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0
cHV0ID0gKmk7Ci0gICAgICAgICAgICBtX3JlbmRlcmluZ091dHB1dHNbal0gPSBvdXRwdXQ7Cisg
ICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0
cHV0cykgeworICAgICAgICAgICAgbV9yZW5kZXJpbmdPdXRwdXRzW2krK10gPSBvdXRwdXQ7CiAg
ICAgICAgICAgICBvdXRwdXQtPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1
ZGlvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJl
YW1BdWRpb1NvdXJjZS5jcHAKaW5kZXggZWQ3OGE3YzBkMmM1NDcyOTUwOWU2Yzk5MDY2YjMzNzg3
MWRmMWRkNy4uYjZlMjZlN2Y5OWRiMmFiNDBmZjFkZDQ0MzA5NzE1NmUwMWIzMTUxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFt
QXVkaW9Tb3VyY2UuY3BwCkBAIC04MSwxNSArODEsMTUgQEAgYm9vbCBNZWRpYVN0cmVhbUF1ZGlv
U291cmNlOjpyZW1vdmVBdWRpb0NvbnN1bWVyKEF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29u
c3UKIHZvaWQgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6c2V0QXVkaW9Gb3JtYXQoc2l6ZV90IG51
bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fYXVkaW9Db25zdW1lcnNMb2NrKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8QXVkaW9E
ZXN0aW5hdGlvbkNvbnN1bWVyPj46Oml0ZXJhdG9yIGl0ID0gbV9hdWRpb0NvbnN1bWVycy5iZWdp
bigpOyBpdCAhPSBtX2F1ZGlvQ29uc3VtZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAoKml0KS0+
c2V0Rm9ybWF0KG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUpOworICAgIGZvciAoYXV0byYg
Y29uc3VtZXIgOiBtX2F1ZGlvQ29uc3VtZXJzKQorICAgICAgICBjb25zdW1lci0+c2V0Rm9ybWF0
KG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtQXVk
aW9Tb3VyY2U6OmNvbnN1bWVBdWRpbyhBdWRpb0J1cyogYnVzLCBzaXplX3QgbnVtYmVyT2ZGcmFt
ZXMpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXVkaW9Db25zdW1lcnNMb2NrKTsKLSAg
ICBmb3IgKFZlY3RvcjxSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPj46Oml0ZXJhdG9y
IGl0ID0gbV9hdWRpb0NvbnN1bWVycy5iZWdpbigpOyBpdCAhPSBtX2F1ZGlvQ29uc3VtZXJzLmVu
ZCgpOyArK2l0KQotICAgICAgICAoKml0KS0+Y29uc3VtZUF1ZGlvKGJ1cywgbnVtYmVyT2ZGcmFt
ZXMpOworICAgIGZvciAoYXV0byYgY29uc3VtZXIgOiBtX2F1ZGlvQ29uc3VtZXJzKQorICAgICAg
ICBjb25zdW1lci0+Y29uc3VtZUF1ZGlvKGJ1cywgbnVtYmVyT2ZGcmFtZXMpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAppbmRleCBjMmQ2ZGUwYWY5MWNlNjQ2OGZl
YmYzZDI3M2MzMzVmN2ZjOTRiYTU0Li42Y2U1NTg2OWFkNWRiYjFiOWFlYjU5NDE1NjYzYTE5ZTNj
MjhiNGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVT
aGFwZXJQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
V2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAKQEAgLTY1LDkgKzY1LDkgQEAgdm9pZCBXYXZlU2hhcGVy
UHJvY2Vzc29yOjpzZXRPdmVyc2FtcGxlKE92ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGUpCiAgICAg
bV9vdmVyc2FtcGxlID0gb3ZlcnNhbXBsZTsKIAogICAgIGlmIChvdmVyc2FtcGxlICE9IE92ZXJT
YW1wbGVOb25lKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFdhdmVTaGFwZXJEU1BLZXJuZWwqIGtlcm5lbCA9
IHN0YXRpY19jYXN0PFdhdmVTaGFwZXJEU1BLZXJuZWwqPihtX2tlcm5lbHNbaV0uZ2V0KCkpOwot
ICAgICAgICAgICAga2VybmVsLT5sYXp5SW5pdGlhbGl6ZU92ZXJzYW1wbGluZygpOworICAgICAg
ICBmb3IgKGF1dG8mIGF1ZGlvRFNQS2VybmVsIDogbV9rZXJuZWxzKSB7CisgICAgICAgICAgICBX
YXZlU2hhcGVyRFNQS2VybmVsJiBrZXJuZWwgPSBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyRFNQS2Vy
bmVsJj4oKmF1ZGlvRFNQS2VybmVsKTsKKyAgICAgICAgICAgIGtlcm5lbC5sYXp5SW5pdGlhbGl6
ZU92ZXJzYW1wbGluZygpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCAyOTZh
ZGZkZTZkOTYxMmZjZDc5ZGI0ODNhYWIxNDIzMDIyMmVlZjc3Li5hNDQxM2MyNTYzYjI1NjAyZWYx
NWJhNTMyNjAyYjBmOTA2Zjg0NWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAtMTUwLDEwICsxNTAsMTAgQEAg
dm9pZCBEYXRhYmFzZVRocmVhZDo6aGFuZGxlUGF1c2VkUXVldWUoKQogICAgIHdoaWxlIChhdXRv
IHRhc2sgPSBtX3BhdXNlZFF1ZXVlLnRyeUdldE1lc3NhZ2UoKSkKICAgICAgICAgcGF1c2VkVGFz
a3MuYXBwZW5kKFdURjo6bW92ZSh0YXNrKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGF1c2VkVGFza3Muc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIHBhdXNlZFRhc2sg
OiBwYXVzZWRUYXNrcykgewogICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIAotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YWJhc2VUYXNrPiB0YXNrKHBhdXNlZFRhc2tzW2ldLnJlbGVh
c2UoKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRhc2s+IHRhc2socGF1c2Vk
VGFzay5yZWxlYXNlKCkpOwogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBwYXVz
ZWRMb2NrZXIobV9wYXVzZWRNdXRleCk7CiAgICAgICAgICAgICBpZiAobV9wYXVzZWQpIHsKQEAg
LTIwMyw5ICsyMDMsOCBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpCiAg
ICAgICAgIC8vIEFzIHRoZSBjYWxsIHRvIGNsb3NlIHdpbGwgbW9kaWZ5IHRoZSBvcmlnaW5hbCBz
ZXQsIHdlIG11c3QgdGFrZSBhIGNvcHkgdG8gaXRlcmF0ZSBvdmVyLgogICAgICAgICBEYXRhYmFz
ZVNldCBvcGVuU2V0Q29weTsKICAgICAgICAgb3BlblNldENvcHkuc3dhcChtX29wZW5EYXRhYmFz
ZVNldCk7Ci0gICAgICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBlbmQgPSBvcGVuU2V0Q29weS5l
bmQoKTsKLSAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6aXRlcmF0b3IgaXQgPSBvcGVuU2V0Q29w
eS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS5nZXQoKS0+Y2xv
c2UoKTsKKyAgICAgICAgZm9yIChhdXRvJiBvcGVuRGF0YWJhc2UgOiBvcGVuU2V0Q29weSkKKyAg
ICAgICAgICAgIG9wZW5EYXRhYmFzZS0+Y2xvc2UoKTsKICAgICB9CiAKICAgICAvLyBEZXRhY2gg
dGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25nZXIgb2YgYW55IGNvbmNlcm4g
dG8gYW55b25lIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCA3YmNkYmYwYjc4MTNlZWU5NWZkYjBkYjhk
ZDdkNGVlYjhkODE3YmIyLi5mOTk5N2JlMWY1Mzk4MTA4ZDZkM2Q4NTVlNjc5YmUxZWIzZDI0ZDU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRyYWNrZXIuY3BwCkBAIC0zMzgsMjAgKzMzOCwxNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUNvbnRleHQq
IGNvbgogICAgICAgICBpZiAoIW5hbWVNYXApCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVN
YXAtPmVuZCgpOwotICAgICAgICBmb3IgKERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZGJOYW1lTWFwSXQgPSBuYW1lTWFwLT5iZWdpbigpOyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBF
bmRJdDsgKytkYk5hbWVNYXBJdCkgewotICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNl
U2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwotICAgICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Ci0gICAgICAgICAgICBm
b3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEl0ID0gZGF0YWJhc2VTZXQtPmJl
Z2luKCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNldEl0KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCgqZGJTZXRJdCktPmRhdGFiYXNlQ29udGV4dCgpID09IGNvbnRleHQpCi0gICAgICAg
ICAgICAgICAgICAgIG9wZW5EYXRhYmFzZXMuYXBwZW5kKCpkYlNldEl0KTsKKyAgICAgICAgZm9y
IChhdXRvJiBkYXRhYmFzZVNldCA6IG5hbWVNYXAtPnZhbHVlcygpKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIGRhdGFiYXNlIDogKmRhdGFiYXNlU2V0KSB7CisgICAgICAgICAgICAgICAgaWYg
KGRhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKSA9PSBjb250ZXh0KQorICAgICAgICAgICAgICAg
ICAgICBvcGVuRGF0YWJhc2VzLmFwcGVuZChkYXRhYmFzZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPERhdGFiYXNlQmFja2VuZEJhc2U+Pjo6
Y29uc3RfaXRlcmF0b3Igb3BlbkRhdGFiYXNlc0VuZEl0ID0gb3BlbkRhdGFiYXNlcy5lbmQoKTsK
LSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4+Ojpjb25zdF9pdGVy
YXRvciBvcGVuRGF0YWJhc2VzSXQgPSBvcGVuRGF0YWJhc2VzLmJlZ2luKCk7IG9wZW5EYXRhYmFz
ZXNJdCAhPSBvcGVuRGF0YWJhc2VzRW5kSXQ7ICsrb3BlbkRhdGFiYXNlc0l0KQotICAgICAgICAo
Km9wZW5EYXRhYmFzZXNJdCktPmludGVycnVwdCgpOworICAgIGZvciAoYXV0byYgb3BlbkRhdGFi
YXNlIDogb3BlbkRhdGFiYXNlcykKKyAgICAgICAgb3BlbkRhdGFiYXNlLT5pbnRlcnJ1cHQoKTsK
IH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luUGF0aChTZWN1cml0eU9yaWdpbiog
b3JpZ2luKSBjb25zdApAQCAtNDgyLDggKzQ3OCw4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpk
YXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJp
CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46Oml0ZXJhdG9yIGl0ZXIgPSB0ZW1wLmJlZ2luKCk7IGl0ZXIgIT0gdGVtcC5lbmQoKTsgKytp
dGVyKQotICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKGl0ZXItPmlzb2xhdGVkQ29weSgpKTsK
KyAgICBmb3IgKGF1dG8mIGRhdGFiYXNlTmFtZSA6IHRlbXApCisgICAgICAgIHJlc3VsdFZlY3Rv
ci5hcHBlbmQoZGF0YWJhc2VOYW1lLmlzb2xhdGVkQ29weSgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtNjcwLDggKzY2Niw4IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0
YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtCiAgICAgaWYg
KCFkYXRhYmFzZVNldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChEYXRhYmFzZVNldDo6
aXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VTZXQtPmVu
ZCgpOyArK2l0KQotICAgICAgICBkYXRhYmFzZXMtPmFkZCgqaXQpOworICAgIGZvciAoYXV0byYg
ZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCisgICAgICAgIGRhdGFiYXNlcy0+YWRkKGRhdGFiYXNl
KTsKIH0KIAogUmVmUHRyPE9yaWdpbkxvY2s+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luTG9ja0Zv
cihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQpAQCAtNzI0LDEyICs3MjAsOSBAQCB1bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQogewogICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+b3JpZ2luUGF0aChvcmln
aW4pOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2UgPSAwOwotICAgIFZlY3RvcjxT
dHJpbmc+IGZpbGVOYW1lcyA9IGxpc3REaXJlY3Rvcnkob3JpZ2luUGF0aCwgU3RyaW5nKCIqLmRi
IikpOwotICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBmaWxlTmFtZSA9IGZpbGVOYW1lcy5i
ZWdpbigpOwotICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBsYXN0RmlsZU5hbWUgPSBmaWxl
TmFtZXMuZW5kKCk7Ci0gICAgZm9yICg7IGZpbGVOYW1lICE9IGxhc3RGaWxlTmFtZTsgKytmaWxl
TmFtZSkgeworICAgIGZvciAoYXV0byYgZmlsZU5hbWUgOiBsaXN0RGlyZWN0b3J5KG9yaWdpblBh
dGgsIEFTQ0lJTGl0ZXJhbCgiKi5kYiIpKSkgewogICAgICAgICBsb25nIGxvbmcgc2l6ZTsKLSAg
ICAgICAgZ2V0RmlsZVNpemUoKmZpbGVOYW1lLCBzaXplKTsKKyAgICAgICAgZ2V0RmlsZVNpemUo
ZmlsZU5hbWUsIHNpemUpOwogICAgICAgICBkaXNrVXNhZ2UgKz0gc2l6ZTsKICAgICB9CiAgICAg
cmV0dXJuIGRpc2tVc2FnZTsKQEAgLTg1NSw4ICs4NDgsOCBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCkKICAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
Pj4gb3JpZ2luc0NvcHk7CiAgICAgb3JpZ2lucyhvcmlnaW5zQ29weSk7CiAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luc0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0
ZU9yaWdpbihvcmlnaW5zQ29weVtpXS5nZXQoKSk7CisgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBv
cmlnaW5zQ29weSkKKyAgICAgICAgZGVsZXRlT3JpZ2luKG9yaWdpbi5nZXQoKSk7CiB9CiAKIHZv
aWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKHN0ZDo6Y2hy
b25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgdGltZSkKQEAgLTkwOCwxMCArOTAxLDEwIEBA
IGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKICAgICB9CiAKICAgICAvLyBXZSBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSBob2xkaW5n
IGxvY2tzIGR1cmluZyBhIGNhbGwgdG8gZGVsZXRlRGF0YWJhc2VGaWxlIHdpbGwgZGVhZGxvY2su
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKCFkZWxldGVEYXRhYmFzZUZpbGUob3JpZ2luLCBkYXRhYmFzZU5hbWVz
W2ldKSkgeworICAgIGZvciAoYXV0byYgbmFtZSA6IGRhdGFiYXNlTmFtZXMpIHsKKyAgICAgICAg
aWYgKCFkZWxldGVEYXRhYmFzZUZpbGUob3JpZ2luLCBuYW1lKSkgewogICAgICAgICAgICAgLy8g
RXZlbiBpZiB0aGUgZmlsZSBjYW4ndCBiZSBkZWxldGVkLCB3ZSB3YW50IHRvIHRyeSBhbmQgZGVs
ZXRlIHRoZSByZXN0LCBkb24ndCByZXR1cm4gZWFybHkgaGVyZS4KLSAgICAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIGRlbGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMi
LCBkYXRhYmFzZU5hbWVzW2ldLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRp
ZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGRlbGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMiLCBuYW1lLmFzY2lpKCku
ZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtOTczLDggKzk2Niw4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2Vy
OjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWREZWxldGVEYXRhYmFzZU9yaWdpbigp
OwogI2VuZGlmCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YWJhc2VO
YW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRN
b2RpZnlEYXRhYmFzZShvcmlnaW4sIGRhdGFiYXNlTmFtZXNbaV0pOworICAgICAgICAgICAgZm9y
IChhdXRvJiBuYW1lIDogZGF0YWJhc2VOYW1lcykKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+
ZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwpAQCAtMTE3OCwxNiArMTE3MSwxNSBAQCBib29sIERhdGFiYXNl
VHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0
IFN0cmluZyYgbgogICAgICAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5h
bWVNYXAtPmdldChuYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoZGF0YWJhc2VTZXQgJiYgZGF0
YWJhc2VTZXQtPnNpemUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNvbWUg
ZGF0YWJhc2Ugb3BlbiB3aXRoIHRoaXMgbmFtZS4gTWFyayB0aGVtIGFzIGRlbGV0ZWQuCi0gICAg
ICAgICAgICAgICAgICAgIERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFz
ZVNldC0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREYXRhYmFzZXMuYXBwZW5kKCppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJhc2VzLmFwcGVuZChkYXRhYmFzZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGRlbGV0ZWREYXRhYmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOworICAg
IGZvciAoYXV0byYgZGF0YWJhc2UgOiBkZWxldGVkRGF0YWJhc2VzKQorICAgICAgICBkYXRhYmFz
ZS0+bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJl
dHVybiBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoZnVsbFBhdGgpOwpAQCAt
MTIzMCwzMyArMTIyMiwyNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9w
ZW5lZERhdGFiYXNlcygpCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VN
YXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogICAgICAgICBpZiAobV9vcGVuRGF0YWJh
c2VNYXApIHsKLSAgICAgICAgICAgIERhdGFiYXNlT3JpZ2luTWFwOjpjb25zdF9pdGVyYXRvciBv
cmlnaW5NYXBFbmQgPSBtX29wZW5EYXRhYmFzZU1hcC0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3Ig
KERhdGFiYXNlT3JpZ2luTWFwOjpjb25zdF9pdGVyYXRvciBvcmlnaW5NYXBJdCA9IG1fb3BlbkRh
dGFiYXNlTWFwLT5iZWdpbigpOyBvcmlnaW5NYXBJdCAhPSBvcmlnaW5NYXBFbmQ7ICsrb3JpZ2lu
TWFwSXQpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9
IG9yaWdpbk1hcEl0LT5rZXk7Ci0gICAgICAgICAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBkYXRh
YmFzZU5hbWVNYXAgPSBvcmlnaW5NYXBJdC0+dmFsdWU7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IG9wZW5EYXRhYmFzZSA6ICptX29wZW5EYXRhYmFzZU1hcCkgeworICAgICAgICAgICAgICAgIGF1
dG8mIG9yaWdpbiA9IG9wZW5EYXRhYmFzZS5rZXk7CisgICAgICAgICAgICAgICAgRGF0YWJhc2VO
YW1lTWFwKiBkYXRhYmFzZU5hbWVNYXAgPSBvcGVuRGF0YWJhc2UudmFsdWU7CiAgICAgICAgICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JUaGlzT3JpZ2luOwog
CiAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBvcGVuZWQgZGF0YWJhc2VzIGlu
IHRoaXMgb3JpZ2luLiAgR2V0IHRoZSBjdXJyZW50IGRhdGFiYXNlIGZpbGUgcGF0aCBvZiBlYWNo
IGRhdGFiYXNlIGFuZCBzZWUgaWYKICAgICAgICAgICAgICAgICAvLyBpdCBzdGlsbCBtYXRjaGVz
IHRoZSBwYXRoIHN0b3JlZCBpbiB0aGUgb3BlbmVkIGRhdGFiYXNlIG9iamVjdC4KLSAgICAgICAg
ICAgICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEVuZCA9IGRh
dGFiYXNlTmFtZU1hcC0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gZGF0YWJhc2VOYW1lTWFwLT5iZWdpbigp
OyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBFbmQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlTmFtZSA9IGRiTmFtZU1hcEl0LT5rZXk7CisgICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZXMgOiAqZGF0YWJhc2VOYW1lTWFwKSB7CiAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZUZpbGVOYW1lOwogICAgICAgICAgICAg
ICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KG1fZGF0YWJhc2UsICJTRUxFQ1QgcGF0
aCBGUk9NIERhdGFiYXNlcyBXSEVSRSBvcmlnaW49PyBBTkQgbmFtZT0/OyIpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSA9PSBTUUxJVEVfT0spIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4dCgxLCBvcmlnaW4tPmRhdGFiYXNl
SWRlbnRpZmllcigpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudC5iaW5kVGV4
dCgyLCBkYXRhYmFzZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmJp
bmRUZXh0KDIsIGRhdGFiYXNlcy5rZXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YXRlbWVudC5zdGVwKCkgPT0gU1FMSVRFX1JPVykKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkYXRhYmFzZUZpbGVOYW1lID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQuZmluYWxpemUoKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgYm9vbCBmb3Vu
ZERlbGV0ZWREYXRhYmFzZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBEYXRhYmFzZVNl
dCogZGF0YWJhc2VTZXQgPSBkYk5hbWVNYXBJdC0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAg
IERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYkVuZCA9IGRhdGFiYXNlU2V0LT5lbmQoKTsK
LSAgICAgICAgICAgICAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6Y29uc3RfaXRlcmF0b3IgZGJJ
dCA9IGRhdGFiYXNlU2V0LT5iZWdpbigpOyBkYkl0ICE9IGRiRW5kOyArK2RiSXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIERhdGFiYXNlKiBkYiA9IHN0YXRpY19jYXN0PERhdGFiYXNlKj4o
KmRiSXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZv
ciAoYXV0byYgZGIgOiAqZGF0YWJhc2VzLnZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBhcmUgZG9uZSBpZiB0aGlzIGRhdGFiYXNlIGhhcyBhbHJlYWR5IGJlZW4gbWFya2Vk
IGFzIGRlbGV0ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGItPmRlbGV0ZWQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTEyNzAsNyArMTI1NSw3
IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVEZWxldGVkT3BlbmVkRGF0YWJhc2VzKCkK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkYXRh
YmFzZSBubyBsb25nZXIgZXhpc3RzLCB3ZSBzaG91bGQgcmVtZW1iZXIgdG8gcmVtb3ZlIGl0IGZy
b20gdGhlIE9yaWdpblF1b3RhTWFuYWdlciBsYXRlci4KICAgICAgICAgICAgICAgICAgICAgaWYg
KGZvdW5kRGVsZXRlZERhdGFiYXNlICYmIGRhdGFiYXNlRmlsZU5hbWUuaXNOdWxsKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJhc2VOYW1lc0ZvclRoaXNPcmlnaW4uYXBw
ZW5kKGRhdGFiYXNlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJh
c2VOYW1lc0ZvclRoaXNPcmlnaW4uYXBwZW5kKGRhdGFiYXNlcy5rZXkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIWRlbGV0ZWREYXRh
YmFzZU5hbWVzRm9yVGhpc09yaWdpbi5pc0VtcHR5KCkpCkBAIC0xMjc5LDE5ICsxMjY0LDE4IEBA
IHZvaWQgRGF0YWJhc2VUcmFja2VyOjpyZW1vdmVEZWxldGVkT3BlbmVkRGF0YWJhc2VzKCkKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGVsZXRl
ZERhdGFiYXNlcy5zaXplKCk7ICsraSkKLSAgICAgICAgZGVsZXRlZERhdGFiYXNlc1tpXS0+bWFy
a0FzRGVsZXRlZEFuZENsb3NlKCk7Ci0gICAgCi0gICAgRGVsZXRlZERhdGFiYXNlTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBkZWxldGVkRGF0YWJhc2VNYXAuZW5kKCk7Ci0gICAgZm9yIChEZWxl
dGVkRGF0YWJhc2VNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZGVsZXRlZERhdGFiYXNlTWFwLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2lu
ID0gaXQtPmtleS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIGRlbGV0ZWREYXRhYmFzZSA6IGRlbGV0
ZWREYXRhYmFzZXMpCisgICAgICAgIGRlbGV0ZWREYXRhYmFzZS0+bWFya0FzRGVsZXRlZEFuZENs
b3NlKCk7CisKKyAgICBmb3IgKGF1dG8mIGRlbGV0ZWREYXRhYmFzZSA6IGRlbGV0ZWREYXRhYmFz
ZU1hcCkgeworICAgICAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gZGVsZXRlZERhdGFiYXNl
LmtleS5nZXQoKTsKICAgICAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICAgICAgbV9jbGllbnQt
PmRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKG9yaWdpbik7CiAgICAgICAgIAotICAgICAgICBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgZGF0YWJhc2VOYW1lcyA9IGl0LT52YWx1ZTsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRhdGFiYXNlTmFtZXMgPSBkZWxldGVkRGF0YWJhc2Uu
dmFsdWU7CisgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2VOYW1lIDogZGF0YWJhc2VOYW1lcykg
ewogICAgICAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgICAgIG1fY2xpZW50LT5k
aXNwYXRjaERpZE1vZGlmeURhdGFiYXNlKG9yaWdpbiwgZGF0YWJhc2VOYW1lc1tpXSk7CisgICAg
ICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2Uob3JpZ2luLCBk
YXRhYmFzZU5hbWUpOwogICAgICAgICB9ICAgICAgICAKICAgICB9CiB9CkBAIC0xMzY1LDIxICsx
MzQ5LDEwIEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpzZXREYXRhYmFzZXNQYXVzZWQoYm9vbCBw
YXVzZWQpCiAKICAgICAvLyBUaGlzIHdhbGtpbmcgaXMgLSBzYWRseSAtIHRoZSBvbmx5IHJlbGlh
YmxlIHdheSB0byBnZXQgYXQgZWFjaCBvcGVuIGRhdGFiYXNlIHRocmVhZC4KICAgICAvLyBUaGlz
IHdpbGwgYmUgY2xlYW5lciBvbmNlIDxyZGFyOi8vcHJvYmxlbS81NjgwNDQxPiBvciBzb21lIG90
aGVyIERCIHRocmVhZCBjb25zb2xpZGF0aW9uIHRha2VzIHBsYWNlLgotICAgIERhdGFiYXNlT3Jp
Z2luTWFwOjppdGVyYXRvciBpID0gbV9vcGVuRGF0YWJhc2VNYXAuZ2V0KCktPmJlZ2luKCk7Ci0g
ICAgRGF0YWJhc2VPcmlnaW5NYXA6Oml0ZXJhdG9yIGVuZCA9IG1fb3BlbkRhdGFiYXNlTWFwLmdl
dCgpLT5lbmQoKTsKLSAgICAKLSAgICBmb3IgKDsgaSAhPSBlbmQ7ICsraSkgewotICAgICAgICBE
YXRhYmFzZU5hbWVNYXAqIGRhdGFiYXNlTmFtZU1hcCA9IGktPnZhbHVlOwotICAgICAgICBEYXRh
YmFzZU5hbWVNYXA6Oml0ZXJhdG9yIGogPSBkYXRhYmFzZU5hbWVNYXAtPmJlZ2luKCk7Ci0gICAg
ICAgIERhdGFiYXNlTmFtZU1hcDo6aXRlcmF0b3IgZGJOYW1lTWFwRW5kID0gZGF0YWJhc2VOYW1l
TWFwLT5lbmQoKTsKLSAgICAgICAgZm9yICg7IGogIT0gZGJOYW1lTWFwRW5kOyArK2opIHsKLSAg
ICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGotPnZhbHVlOwotICAgICAgICAg
ICAgRGF0YWJhc2VTZXQ6Oml0ZXJhdG9yIGsgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsKLSAgICAg
ICAgICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBkYlNldEVuZCA9IGRhdGFiYXNlU2V0LT5lbmQo
KTsKLSAgICAgICAgICAgIGZvciAoOyBrICE9IGRiU2V0RW5kOyArK2spIHsKLSAgICAgICAgICAg
ICAgICBEYXRhYmFzZUNvbnRleHQqIGNvbnRleHQgPSAoKmspLT5kYXRhYmFzZUNvbnRleHQoKTsK
LSAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRQYXVzZWQocGF1c2VkKTsKLSAgICAgICAgICAg
IH0KKyAgICBmb3IgKGF1dG8mIGRhdGFiYXNlTmFtZU1hcCA6IG1fb3BlbkRhdGFiYXNlTWFwLT52
YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGRhdGFiYXNlU2V0IDogZGF0YWJhc2VOYW1l
TWFwLT52YWx1ZXMoKSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6ICpkYXRh
YmFzZVNldCkKKyAgICAgICAgICAgICAgICBkYXRhYmFzZS0+ZGF0YWJhc2VDb250ZXh0KCktPnNl
dFBhdXNlZChwYXVzZWQpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHAKaW5kZXggOWY2MjIzNGFjMzllYzg0NWQ1ZDRlMTBkZWMxMDIzODNlYWRhMTZm
OS4uODlhNjJhYjc2NzcyZjI2YzIyOWRlYjc5MzEyOTM0ODg3YzNmZjE2MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwCkBAIC0xMTksMjEgKzExOSwxNCBAQCB2b2lkIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKCkKICAgICBtX2lzU2h1dHRpbmdEb3duID0gdHJ1
ZTsKIAogICAgIC8vIE5vdGlmeSBhbGwgdHJhbnNhY3Rpb25zIGluIHByb2dyZXNzIHRoYXQgdGhl
IGRhdGFiYXNlIHRocmVhZCBpcyBzaHV0dGluZyBkb3duCi0gICAgZm9yIChDb29yZGluYXRpb25J
bmZvTWFwOjppdGVyYXRvciBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgPSBtX2Nvb3JkaW5hdGlv
bkluZm9NYXAuYmVnaW4oKTsKLSAgICAgICAgIGNvb3JkaW5hdGlvbkluZm9JdGVyYXRvciAhPSBt
X2Nvb3JkaW5hdGlvbkluZm9NYXAuZW5kKCk7ICsrY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yKSB7
Ci0gICAgICAgIENvb3JkaW5hdGlvbkluZm8mIGluZm8gPSBjb29yZGluYXRpb25JbmZvSXRlcmF0
b3ItPnZhbHVlOwotCisgICAgZm9yIChhdXRvJiBpbmZvIDogbV9jb29yZGluYXRpb25JbmZvTWFw
LnZhbHVlcygpKSB7CiAgICAgICAgIC8vIENsZWFuIHVwIHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUg
cmVhY2hlZCAibG9ja0FjcXVpcmVkIjoKICAgICAgICAgLy8gVHJhbnNhY3Rpb24gcGhhc2UgNCBj
bGVhbnVwLiBTZWUgY29tbWVudCBvbiAiV2hhdCBoYXBwZW5zIGlmIGEKICAgICAgICAgLy8gdHJh
bnNhY3Rpb24gaXMgaW50ZXJydXB0ZWQ/IiBhdCB0aGUgdG9wIG9mIFNRTFRyYW5zYWN0aW9uQmFj
a2VuZC5jcHAuCiAgICAgICAgIGlmIChpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24pCiAgICAg
ICAgICAgICBpbmZvLmFjdGl2ZVdyaXRlVHJhbnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhyZWFk
SXNTaHV0dGluZ0Rvd24oKTsKLSAgICAgICAgZm9yIChIYXNoU2V0PFJlZlB0cjxTUUxUcmFuc2Fj
dGlvbkJhY2tlbmQ+Pjo6aXRlcmF0b3IgYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yID0K
LSAgICAgICAgICAgICAgICAgICAgIGluZm8uYWN0aXZlUmVhZFRyYW5zYWN0aW9ucy5iZWdpbigp
OwotICAgICAgICAgICAgIGFjdGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvciAhPSBpbmZvLmFj
dGl2ZVJlYWRUcmFuc2FjdGlvbnMuZW5kKCk7Ci0gICAgICAgICAgICAgKythY3RpdmVSZWFkVHJh
bnNhY3Rpb25zSXRlcmF0b3IpIHsKLSAgICAgICAgICAgICgqYWN0aXZlUmVhZFRyYW5zYWN0aW9u
c0l0ZXJhdG9yKS0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJc1NodXR0aW5nRG93bigpOwotICAgICAg
ICB9CisgICAgICAgIGZvciAoYXV0byYgdHJhbnNhY3Rpb24gOiBpbmZvLmFjdGl2ZVJlYWRUcmFu
c2FjdGlvbnMpCisgICAgICAgICAgICB0cmFuc2FjdGlvbi0+bm90aWZ5RGF0YWJhc2VUaHJlYWRJ
c1NodXR0aW5nRG93bigpOwogCiAgICAgICAgIC8vIENsZWFuIHVwIHRyYW5zYWN0aW9ucyB0aGF0
IGhhdmUgTk9UIHJlYWNoZWQgImxvY2tBY3F1aXJlZCI6CiAgICAgICAgIC8vIFRyYW5zYWN0aW9u
IHBoYXNlIDMgY2xlYW51cC4gU2VlIGNvbW1lbnQgb24gIldoYXQgaGFwcGVucyBpZiBhCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IGUz
NTliM2JkZTU4MmZiYTAxYTA4ODU3NGE4MjJlOTM2MzU3YzY3ZjAuLjAzMTVmYmUzZmNkMGNhZDYx
YTg4NWY4ZTY4YWU5N2RlMTc1OWMyYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCkBAIC0yNjAsMTggKzI2MCwxOCBAQCB2b2lkIFdlYlNv
Y2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBy
b3RvY29scywgRXhjZQogICAgIC8vCiAgICAgLy8gSGVyZSwgd2UgdGhyb3cgU1lOVEFYX0VSUiBp
ZiB0aGUgZ2l2ZW4gcHJvdG9jb2xzIGRvIG5vdCBtZWV0IHRoZSBsYXR0ZXIgY3JpdGVyaWEuIFRo
aXMgYmVoYXZpb3IgZG9lcyBub3QKICAgICAvLyBjb21wbHkgd2l0aCBXZWJTb2NrZXQgQVBJIHNw
ZWNpZmljYXRpb24sIGJ1dCBpdCBzZWVtcyB0byBiZSB0aGUgb25seSByZWFzb25hYmxlIHdheSB0
byBoYW5kbGUgdGhpcyBjb25mbGljdC4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3Rv
Y29scy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWlzVmFsaWRQcm90b2NvbFN0cmluZyhw
cm90b2NvbHNbaV0pKSB7Ci0gICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFk
ZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAi
V3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnIiArIGVuY29kZVByb3RvY29sU3RyaW5nKHBy
b3RvY29sc1tpXSkgKyAiJyIpOworICAgIGZvciAoYXV0byYgcHJvdG9jb2wgOiBwcm90b2NvbHMp
IHsKKyAgICAgICAgaWYgKCFpc1ZhbGlkUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wpKSB7CisgICAg
ICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV3JvbmcgcHJvdG9jb2wgZm9yIFdl
YlNvY2tldCAnIiArIGVuY29kZVByb3RvY29sU3RyaW5nKHByb3RvY29sKSArICInIik7CiAgICAg
ICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwogICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogICAgIEhhc2hTZXQ8U3RyaW5n
PiB2aXNpdGVkOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJvdG9jb2xzLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmICghdmlzaXRlZC5hZGQocHJvdG9jb2xzW2ldKS5pc05ld0VudHJ5
KSB7Ci0gICAgICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV2ViU29ja2V0IHBy
b3RvY29scyBjb250YWluIGR1cGxpY2F0ZXM6ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJv
dG9jb2xzW2ldKSArICInIik7CisgICAgZm9yIChhdXRvJiBwcm90b2NvbCA6IHByb3RvY29scykg
eworICAgICAgICBpZiAoIXZpc2l0ZWQuYWRkKHByb3RvY29sKS5pc05ld0VudHJ5KSB7CisgICAg
ICAgICAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmFkZENvbnNvbGVNZXNzYWdlKE1lc3Nh
Z2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV2ViU29ja2V0IHByb3RvY29scyBj
b250YWluIGR1cGxpY2F0ZXM6ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wpICsg
IiciKTsKICAgICAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgICAgICBlYyA9IFNZ
TlRBWF9FUlI7CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0
Y2hlci5jcHAKaW5kZXggMTllMjVhMWE1YTA1MDNjMGEzZmQ3ZGU2YjQ2M2NhNDA1YjM0NmE4MS4u
MDlkOTllOWU4ZWRkOGVmODc2NDNkYWZlZjlmNjUyZjE5OTBkZTY5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNo
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRF
eHRlbnNpb25EaXNwYXRjaGVyLmNwcApAQCAtNTAsOCArNTAsOCBAQCB2b2lkIFdlYlNvY2tldEV4
dGVuc2lvbkRpc3BhdGNoZXI6OnJlc2V0KCkKIAogdm9pZCBXZWJTb2NrZXRFeHRlbnNpb25EaXNw
YXRjaGVyOjphZGRQcm9jZXNzb3Ioc3RkOjp1bmlxdWVfcHRyPFdlYlNvY2tldEV4dGVuc2lvblBy
b2Nlc3Nvcj4gcHJvY2Vzc29yKQogewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wcm9j
ZXNzb3JzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3Byb2Nlc3NvcnNbaV0tPmV4dGVu
c2lvblRva2VuKCkgPT0gcHJvY2Vzc29yLT5leHRlbnNpb25Ub2tlbigpKQorICAgIGZvciAoYXV0
byYgZXh0ZW5zaW9uUHJvY2Vzc29yIDogbV9wcm9jZXNzb3JzKSB7CisgICAgICAgIGlmIChleHRl
bnNpb25Qcm9jZXNzb3ItPmV4dGVuc2lvblRva2VuKCkgPT0gcHJvY2Vzc29yLT5leHRlbnNpb25U
b2tlbigpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBBU1NFUlQocHJvY2Vzc29y
LT5oYW5kc2hha2VTdHJpbmcoKS5sZW5ndGgoKSk7CkBAIC04MSwxMiArODEsMTIgQEAgdm9pZCBX
ZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyOjphcHBlbmRBY2NlcHRlZEV4dGVuc2lvbihjb25z
dCBTdHJpbmcmIGV4dGVuc2kKICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFw
cGVuZExpdGVyYWwoIiwgIik7CiAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVu
ZChleHRlbnNpb25Ub2tlbik7CiAgICAgLy8gRklYTUU6IFNob3VsZCB1c2UgTGlzdEhhc2hTZXQg
dG8ga2VlcCB0aGUgb3JkZXIgb2YgdGhlIHBhcmFtZXRlcnMuCi0gICAgZm9yIChIYXNoTWFwPFN0
cmluZywgU3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IgPSBleHRlbnNpb25QYXJhbWV0
ZXJzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGV4dGVuc2lvblBhcmFtZXRlcnMuZW5kKCk7ICsraXRl
cmF0b3IpIHsKKyAgICBmb3IgKGF1dG8mIHBhcmFtZXRlciA6IGV4dGVuc2lvblBhcmFtZXRlcnMp
IHsKICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFwcGVuZExpdGVyYWwoIjsg
Iik7Ci0gICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoaXRlcmF0b3It
PmtleSk7Ci0gICAgICAgIGlmICghaXRlcmF0b3ItPnZhbHVlLmlzTnVsbCgpKSB7CisgICAgICAg
IG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQocGFyYW1ldGVyLmtleSk7CisgICAg
ICAgIGlmICghcGFyYW1ldGVyLnZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBtX2FjY2Vw
dGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKCc9Jyk7Ci0gICAgICAgICAgICBtX2FjY2VwdGVk
RXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT52YWx1ZSk7CisgICAgICAgICAgICBt
X2FjY2VwdGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKHBhcmFtZXRlci52YWx1ZSk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC0xMTgsOSArMTE4LDggQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNp
b25EaXNwYXRjaGVyOjpwcm9jZXNzSGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBoZWFkZXJWYWx1
ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIHNpemVf
dCBpbmRleDsKLSAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbV9wcm9jZXNzb3JzLnNp
emUoKTsgKytpbmRleCkgewotICAgICAgICAgICAgV2ViU29ja2V0RXh0ZW5zaW9uUHJvY2Vzc29y
KiBwcm9jZXNzb3IgPSBtX3Byb2Nlc3NvcnNbaW5kZXhdLmdldCgpOworICAgICAgICBzaXplX3Qg
aW5kZXggPSAwOworICAgICAgICBmb3IgKGF1dG8mIHByb2Nlc3NvciA6IG1fcHJvY2Vzc29ycykg
ewogICAgICAgICAgICAgaWYgKGV4dGVuc2lvblRva2VuID09IHByb2Nlc3Nvci0+ZXh0ZW5zaW9u
VG9rZW4oKSkgewogICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzb3ItPnByb2Nlc3NSZXNwb25z
ZShleHRlbnNpb25QYXJhbWV0ZXJzKSkgewogICAgICAgICAgICAgICAgICAgICBhcHBlbmRBY2Nl
cHRlZEV4dGVuc2lvbihleHRlbnNpb25Ub2tlbiwgZXh0ZW5zaW9uUGFyYW1ldGVycyk7CkBAIC0x
MjksNiArMTI4LDcgQEAgYm9vbCBXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyOjpwcm9jZXNz
SGVhZGVyVmFsdWUoY29uc3QgU3RyaW5nJiBoZWFkZXJWYWx1ZSkKICAgICAgICAgICAgICAgICBm
YWlsKHByb2Nlc3Nvci0+ZmFpbHVyZVJlYXNvbigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICArK2luZGV4OwogICAgICAgICB9CiAg
ICAgICAgIC8vIFRoZXJlIGlzIG5vIGV4dGVuc2lvbiB3aGljaCBjYW4gcHJvY2VzcyB0aGUgcmVz
cG9uc2UuCiAgICAgICAgIGlmIChpbmRleCA9PSBtX3Byb2Nlc3NvcnMuc2l6ZSgpKSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5k
c2hha2UuY3BwCmluZGV4IDMyMmFhNDAxZDRlMGVjNDAxYmIyODNmYmQ1M2VhYWRkNTVkYWE3NWYu
LjU1MWRkZjIyYTk3ZTMzMTI4ODk0OTg0NTkyMTBlZmE1Njg3NTMyZTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2Uu
Y3BwCkBAIC0yMjQsOCArMjI0LDggQEAgQ1N0cmluZyBXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVu
dEhhbmRzaGFrZU1lc3NhZ2UoKSBjb25zdAogICAgIC8vIG9yZGVyIGlzIG5vdCBtZWFuaW5nZnVs
LiAgVGh1cywgaXQncyBvayB0byBzZW5kIHRoZSBvcmRlciB3ZSBjb25zdHJ1Y3RlZAogICAgIC8v
IHRoZSBmaWVsZHMuCiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpZWxkcy5zaXplKCk7
IGkrKykgewotICAgICAgICBidWlsZGVyLmFwcGVuZChmaWVsZHNbaV0pOworICAgIGZvciAoYXV0
byYgZmllbGQgOiBmaWVsZHMpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZmllbGQpOwogICAg
ICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlxyXG4iKTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254473</attachid>
            <date>2015-06-07 21:56:33 -0700</date>
            <delta_ts>2015-06-08 07:37:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145541-20150608135608.patch</filename>
            <type>text/plain</type>
            <size>51040</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1MzA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTIxZjUxYTFjYTdlZTU2
MWMyM2FlOGExY2NmNWZlMDllMmIxNDkxZi4uZTQ2NzYyZTE3ZDNlYmEyYzM2NzYyMzJlNjIxNTNj
MjE1Y2MwZWRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDE1LTA2LTA3ICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL01vZHVsZXMgLSAyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU1NDEKKworICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBBZGxlci4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIGJlaGF2aW9yIGNoYW5nZXMu
CisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ0NvbmZpZ3VyYXRpb246OmljZVNlcnZlcnMpOgorICAgICAgICAq
IE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSVENEVE1GU2VuZGVyOjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNoYW5uZWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UlRDRGF0YUNoYW5uZWw6OnNjaGVkdWxlZEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpwcm9jZXNzSWNlU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9u
Ojp+UlRDUGVlckNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rp
b246OmdldFN0cmVhbUJ5SWQpOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246
Omhhc0xvY2FsU3RyZWFtV2l0aFRyYWNrSWQpOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNv
bm5lY3Rpb246OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246OnNj
aGVkdWxlZEV2ZW50VGltZXJGaXJlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENTdGF0c1JlcG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c1JlcG9ydDo6bmFt
ZXMpOgorICAgICAgICAqIE1vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNv
bnRlbnRVdGlscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjppbml0UHJvdG9jb2xIYW5kbGVyV2hp
dGVsaXN0KToKKyAgICAgICAgKiBNb2R1bGVzL3NwZWVjaC9TcGVlY2hTeW50aGVzaXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3BlZWNoU3ludGhlc2lzOjpnZXRWb2ljZXMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9CdWZmZXI6Om1lbW9yeUNvc3QpOgorICAgICAgICAqIE1vZHVsZXMvd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFT
dHJlYW1Tb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJlZkZpbmlz
aGVkU291cmNlTm9kZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Db250ZXh0OjpkZXJlZlVu
ZmluaXNoZWRTb3VyY2VOb2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6Omhh
bmRsZURlZmVycmVkRmluaXNoRGVyZWZzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvQ29udGV4
dDo6aGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
QXVkaW9Db250ZXh0OjpoYW5kbGVEaXJ0eUF1ZGlvTm9kZU91dHB1dHMpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Db250ZXh0Ojp1cGRhdGVBdXRvbWF0aWNQdWxsTm9kZXMpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKToKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb05vZGU6OnVwZGF0ZUNoYW5uZWxzRm9ySW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6QXVkaW9Ob2RlOjpwdWxsSW5wdXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6
aW5wdXRzQXJlU2lsZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6c2lsZW5jZU91
dHB1dHMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlOjp1bnNpbGVuY2VPdXRwdXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZW5hYmxlT3V0cHV0c0lmTmVjZXNzYXJ5KToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZTo6ZGlzYWJsZU91dHB1dHNJZk5lY2Vzc2FyeSk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb05vZGU6OmZpbmlzaERlcmVmKToKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvTm9kZUlucHV0OjpudW1iZXJPZkNoYW5uZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlv
Tm9kZUlucHV0OjpzdW1BbGxDb25uZWN0aW9ucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJhdWRp
by9BdWRpb05vZGVPdXRwdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0cHV0
Ojpwcm9wYWdhdGVDaGFubmVsQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Ob2RlT3V0
cHV0OjpkaXNhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxl
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1ZXMpOgorICAgICAgICAqIE1v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvUGFyYW1UaW1lbGluZTo6aW5zZXJ0RXZlbnQpOgorICAgICAgICAqIE1vZHVsZXMvd2Vi
YXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9T
dW1taW5nSnVuY3Rpb246OnVwZGF0ZVJlbmRlcmluZ1N0YXRlKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6c2V0QXVkaW9Gb3JtYXQpOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6Y29uc3VtZUF1ZGlvKToKKyAgICAgICAgKiBNb2R1
bGVzL3dlYmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2F2ZVNoYXBlclByb2Nlc3Nvcjo6c2V0T3ZlcnNhbXBsZSk6CisgICAgICAgICogTW9kdWxlcy93
ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFz
ZVRocmVhZDo6aGFuZGxlUGF1c2VkUXVldWUpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
aHJlYWQ6OmRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmRhdGFiYXNlL0Rh
dGFiYXNlVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRyYWNrZXI6Omlu
dGVycnVwdEFsbERhdGFiYXNlc0ZvckNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJh
c2VUcmFja2VyOjpkYXRhYmFzZU5hbWVzRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlVHJhY2tlcjo6Z2V0T3BlbkRhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnVzYWdlRm9yT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
VHJhY2tlcjo6ZGVsZXRlT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhY2tl
cjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcyk6CisgICAgICAgIChXZWJDb3JlOjpEYXRh
YmFzZVRyYWNrZXI6OnNldERhdGFiYXNlc1BhdXNlZCk6CisgICAgICAgICogTW9kdWxlcy93ZWJk
YXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3duKToKKyAgICAgICAgKiBNb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6
Y29ubmVjdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lv
bkRpc3BhdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0RXh0ZW5zaW9uRGlz
cGF0Y2hlcjo6YWRkUHJvY2Vzc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEV4dGVu
c2lvbkRpc3BhdGNoZXI6OmFwcGVuZEFjY2VwdGVkRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXI6OnByb2Nlc3NIZWFkZXJWYWx1ZSk6Cisg
ICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVudEhhbmRzaGFrZU1lc3NhZ2Up
OgorCiAyMDE1LTA2LTA3ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNv
bT4KIAogICAgICAgICBGaXggc3RybmNweSB1c2UgaW4gV2ViQ29yZTo6VGV4dDo6Zm9ybWF0Rm9y
RGVidWdnZXIKQEAgLTY5MjMwLDcgKzY5MzIxLDcgQEAKICAgICAgICAgd2l0aCBjYWxsYmFja3Mg
aXMgbGltaXRpbmcgYSBudW1iZXIgb2Ygd2F5cy4gVGhlIGNhbGxiYWNrIG5hbWVzIGFyZSB2ZXJ5
IGFtYmlndW91cywgdGhlIGNhbGxiYWNrcwogICAgICAgICBtdXN0IGVpdGhlciBiZSBvbiBhIHNl
cGFyYXRlIG9iamVjdCAobW9yZSBib2lsZXJwbGF0ZSksIG9yIHRoZSBjYWxsYmFjayBtdXN0IGJl
IHB1YmxpYyBmb3IKICAgICAgICAgSHlzdGVyZXNpc0FjdGl2aXR5IHRvIGNhbGwgdGhlbSwgb3Ig
ZnJpZW5kcyBnZXQgaW52b2x2ZWQuIFdpdGhvdXQgdGhlIGJvaWxlcnBsYXRlIG9mIGV4dHJhCi0g
ICAgICAgIGRlbGVnYXRlIG9iamVjdHMgaXQncyBoYXJkIHRvIHNjYWxlIHVzZSBvZiB0aGVzZSBv
YmplY3RzIC3CoGEgc2luZ2xlIG9iamVjdCBjYW4ndCBzZXJ2ZSBhcyBhCisgICAgICAgIGRlbGVn
YXRlIG9iamVjdHMgaXQncyBoYXJkIHRvIHNjYWxlIHVzZSBvZiB0aGVzZSBvYmplY3RzIC0gYSBz
aW5nbGUgb2JqZWN0IGNhbid0IHNlcnZlIGFzIGEKICAgICAgICAgZGVsZWdhdGUgZm9yIG11bHRp
cGxlIEh5c3RlcmVzaXNBY3Rpdml0eSBtZW1iZXJzLgogCiAgICAgICAgIEluc3RlYWQsIG1ha2Ug
SHlzdGVyZXNpc0FjdGl2aXR5IHRha2UgYSBsYW1iZGEgdG8gY2FsbGJhY2sgb24gc3RhdGUgY2hh
bmdlLiBUbyBzaW1wbGlmeSwgY2hhbmdlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENDb25maWd1cmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaAppbmRleCA0ZmZhOTZlMDJlMzI4MWRj
YzI2ODE0YzM4MjZlYWQ1YjUwZTM4NmU0Li42MzdkNGQ5Y2JiYWJiOGQwZWRjMzg4ZDBkZDA0OTMz
ZWI1ZjY4MTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0NvbmZpZ3VyYXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ0NvbmZpZ3VyYXRpb24uaApAQCAtNjcsMTAgKzY3LDggQEAgcHVibGljOgogICAgIFZl
Y3RvcjxSZWZQdHI8UlRDSWNlU2VydmVyPj4gaWNlU2VydmVycygpIGNvbnN0CiAgICAgewogICAg
ICAgICBWZWN0b3I8UmVmUHRyPFJUQ0ljZVNlcnZlcj4+IHNlcnZlcnM7Ci0gICAgICAgIFZlY3Rv
cjxSZWZQdHI8UlRDSWNlU2VydmVyUHJpdmF0ZT4+IHByaXZhdGVTZXJ2ZXJzID0gbV9wcml2YXRl
LT5pY2VTZXJ2ZXJzKCk7Ci0KLSAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBwcml2YXRlU2VydmVy
cy5iZWdpbigpOyBpdGVyICE9IHByaXZhdGVTZXJ2ZXJzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAg
ICAgICBzZXJ2ZXJzLmFwcGVuZChSVENJY2VTZXJ2ZXI6OmNyZWF0ZSgqaXRlcikpOworICAgICAg
ICBmb3IgKGF1dG8mIHNlcnZlciA6IG1fcHJpdmF0ZS0+aWNlU2VydmVycygpKQorICAgICAgICAg
ICAgc2VydmVycy5hcHBlbmQoUlRDSWNlU2VydmVyOjpjcmVhdGUoc2VydmVyKSk7CiAKICAgICAg
ICAgcmV0dXJuIHNlcnZlcnM7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9SVENEVE1GU2VuZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDRFRNRlNlbmRlci5jcHAKaW5kZXggM2NmZmI4NmI2YTVkYjMzNWYw
YTk5NTY4YjUwNTFhMGE0MjQyY2YwOS4uNTI3YjVkMTlkOTA4ZDRhM2UxNjBlMzViYmViN2FhOTg4
YmNkNWQ5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENEVE1GU2VuZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1JUQ0RUTUZTZW5kZXIuY3BwCkBAIC0xNjEsOSArMTYxLDggQEAgdm9pZCBSVENEVE1GU2VuZGVy
OjpzY2hlZHVsZWRFdmVudFRpbWVyRmlyZWQoKQogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBl
dmVudHM7CiAgICAgZXZlbnRzLnN3YXAobV9zY2hlZHVsZWRFdmVudHMpOwogCi0gICAgVmVjdG9y
PFJlZlB0cjxFdmVudD4+OjppdGVyYXRvciBpdCA9IGV2ZW50cy5iZWdpbigpOwotICAgIGZvciAo
OyBpdCAhPSBldmVudHMuZW5kKCk7ICsraXQpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoKCppdCku
cmVsZWFzZSgpKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNw
YXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDRGF0YUNo
YW5uZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hh
bm5lbC5jcHAKaW5kZXggOTBkMDZjNzliOTc0ZTgzODJlMDVkNzNmMmJiOGRkNGFkYmViMWY1Yi4u
ODI3MTkxYzcyN2U3ODVhMDA2MGRkYTA0N2MxOTMzZDg4YTYzZmU2MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENEYXRhQ2hhbm5lbC5jcHAKQEAg
LTMyMCwxMSArMzIwLDggQEAgdm9pZCBSVENEYXRhQ2hhbm5lbDo6c2NoZWR1bGVkRXZlbnRUaW1l
ckZpcmVkKCkKICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50Pj4gZXZlbnRzOwogICAgIGV2ZW50cy5z
d2FwKG1fc2NoZWR1bGVkRXZlbnRzKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+Pjo6aXRl
cmF0b3IgaXQgPSBldmVudHMuYmVnaW4oKTsKLSAgICBmb3IgKDsgaXQgIT0gZXZlbnRzLmVuZCgp
OyArK2l0KQotICAgICAgICBkaXNwYXRjaEV2ZW50KCgqaXQpLnJlbGVhc2UoKSk7Ci0KLSAgICBl
dmVudHMuY2xlYXIoKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBk
aXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2UoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggMTYwOTgxNmI4NTk5ZDBkMGRhMzMxNDJhYjJlMDY4OTA0
MTJhNTVkNC4uYjkwNDA0Y2FhYTI0MjAzODI5YTc0ZDNkOGE3ZDIyNGQwNGY3YTdlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi5jcHAKQEAgLTk1LDggKzk1LDggQEAgc3RhdGljIEV4Y2VwdGlvbkNvZGUgcHJvY2Vz
c0ljZVNlcnZlcihjb25zdCBEaWN0aW9uYXJ5JiBpY2VTZXJ2ZXIsIFJUQ0NvbmZpZ3VyYXQKICAg
ICAgICAgcmV0dXJuIElOVkFMSURfQUNDRVNTX0VSUjsKIAogICAgIGlmICh1cmxTdHJpbmcuZmlu
ZCgnLCcpICE9IG5vdEZvdW5kICYmIGljZVNlcnZlci5nZXQoInVybHMiLCB1cmxzTGlzdCkgJiYg
dXJsc0xpc3Quc2l6ZSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byBpdGVyID0gdXJsc0xpc3QuYmVn
aW4oKTsgaXRlciAhPSB1cmxzTGlzdC5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAo
IXZhbGlkYXRlSWNlU2VydmVyVVJMKCppdGVyKSkKKyAgICAgICAgZm9yIChhdXRvJiB1cmwgOiB1
cmxzTGlzdCkgeworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUljZVNlcnZlclVSTCh1cmwpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgewpAQCAtMjAzLDggKzIwMyw4IEBAIFJUQ1BlZXJDb25uZWN0aW9uOjp+UlRDUGVl
ckNvbm5lY3Rpb24oKQogewogICAgIHN0b3AoKTsKIAotICAgIGZvciAoYXV0byBzdHJlYW0gPSBt
X2xvY2FsU3RyZWFtcy5iZWdpbigpLCBlbmQgPSBtX2xvY2FsU3RyZWFtcy5lbmQoKTsgc3RyZWFt
ICE9IGVuZDsgKytzdHJlYW0pCi0gICAgICAgICgqc3RyZWFtKS0+cmVtb3ZlT2JzZXJ2ZXIodGhp
cyk7CisgICAgZm9yIChhdXRvJiBsb2NhbFN0cmVhbSA6IG1fbG9jYWxTdHJlYW1zKQorICAgICAg
ICBsb2NhbFN0cmVhbS0+cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiB9CiAKIHZvaWQgUlRDUGVlckNv
bm5lY3Rpb246OmNyZWF0ZU9mZmVyKFBhc3NSZWZQdHI8UlRDU2Vzc2lvbkRlc2NyaXB0aW9uQ2Fs
bGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxSVENQZWVyQ29ubmVjdGlvbkVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGNvbnN0IERpY3Rpb25hcnkmIG9mZmVyT3B0aW9ucywg
RXhjZXB0aW9uQ29kZSYgZWMpCkBAIC01MTQsMTQgKzUxNCwxNCBAQCBWZWN0b3I8UmVmUHRyPE1l
ZGlhU3RyZWFtPj4gUlRDUGVlckNvbm5lY3Rpb246OmdldFJlbW90ZVN0cmVhbXMoKSBjb25zdAog
CiBNZWRpYVN0cmVhbSogUlRDUGVlckNvbm5lY3Rpb246OmdldFN0cmVhbUJ5SWQoY29uc3QgU3Ry
aW5nJiBzdHJlYW1JZCkKIHsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fbG9jYWxTdHJlYW1zLmJl
Z2luKCk7IGl0ZXIgIT0gbV9sb2NhbFN0cmVhbXMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBp
ZiAoKCppdGVyKS0+aWQoKSA9PSBzdHJlYW1JZCkKLSAgICAgICAgICAgIHJldHVybiBpdGVyLT5n
ZXQoKTsKKyAgICBmb3IgKGF1dG8mIGxvY2FsU3RyZWFtIDogbV9sb2NhbFN0cmVhbXMpIHsKKyAg
ICAgICAgaWYgKGxvY2FsU3RyZWFtLT5pZCgpID09IHN0cmVhbUlkKQorICAgICAgICAgICAgcmV0
dXJuIGxvY2FsU3RyZWFtLmdldCgpOwogICAgIH0KIAotICAgIGZvciAoYXV0byBpdGVyID0gbV9y
ZW1vdGVTdHJlYW1zLmJlZ2luKCk7IGl0ZXIgIT0gbV9yZW1vdGVTdHJlYW1zLmVuZCgpOyArK2l0
ZXIpIHsKLSAgICAgICAgaWYgKCgqaXRlciktPmlkKCkgPT0gc3RyZWFtSWQpCi0gICAgICAgICAg
ICByZXR1cm4gaXRlci0+Z2V0KCk7CisgICAgZm9yIChhdXRvJiByZW1vdGVTdHJlYW0gOiBtX3Jl
bW90ZVN0cmVhbXMpIHsKKyAgICAgICAgaWYgKHJlbW90ZVN0cmVhbS0+aWQoKSA9PSBzdHJlYW1J
ZCkKKyAgICAgICAgICAgIHJldHVybiByZW1vdGVTdHJlYW0uZ2V0KCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC01NTEsOCArNTUxLDggQEAgUGFzc1JlZlB0cjxSVENEYXRhQ2hh
bm5lbD4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZURhdGFDaGFubmVsKFN0cmluZyBsYWJlbCwg
Y28KIAogYm9vbCBSVENQZWVyQ29ubmVjdGlvbjo6aGFzTG9jYWxTdHJlYW1XaXRoVHJhY2tJZChj
b25zdCBTdHJpbmcmIHRyYWNrSWQpCiB7Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX2xvY2FsU3Ry
ZWFtcy5iZWdpbigpOyBpdGVyICE9IG1fbG9jYWxTdHJlYW1zLmVuZCgpOyArK2l0ZXIpIHsKLSAg
ICAgICAgaWYgKCgqaXRlciktPmdldFRyYWNrQnlJZCh0cmFja0lkKSkKKyAgICBmb3IgKGF1dG8m
IGxvY2FsU3RyZWFtIDogbV9sb2NhbFN0cmVhbXMpIHsKKyAgICAgICAgaWYgKGxvY2FsU3RyZWFt
LT5nZXRUcmFja0J5SWQodHJhY2tJZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjg1LDkgKzY4NSw4IEBAIHZvaWQgUlRDUGVlckNvbm5l
Y3Rpb246OnN0b3AoKQogICAgIG1faWNlQ29ubmVjdGlvblN0YXRlID0gSWNlQ29ubmVjdGlvblN0
YXRlQ2xvc2VkOwogICAgIG1fc2lnbmFsaW5nU3RhdGUgPSBTaWduYWxpbmdTdGF0ZUNsb3NlZDsK
IAotICAgIFZlY3RvcjxSZWZQdHI8UlRDRGF0YUNoYW5uZWw+Pjo6aXRlcmF0b3IgaSA9IG1fZGF0
YUNoYW5uZWxzLmJlZ2luKCk7Ci0gICAgZm9yICg7IGkgIT0gbV9kYXRhQ2hhbm5lbHMuZW5kKCk7
ICsraSkKLSAgICAgICAgKCppKS0+c3RvcCgpOworICAgIGZvciAoYXV0byYgY2hhbm5lbCA6IG1f
ZGF0YUNoYW5uZWxzKQorICAgICAgICBjaGFubmVsLT5zdG9wKCk7CiB9CiAKIGNvbnN0IGNoYXIq
IFJUQ1BlZXJDb25uZWN0aW9uOjphY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3QKQEAgLTc0Myw5
ICs3NDIsOCBAQCB2b2lkIFJUQ1BlZXJDb25uZWN0aW9uOjpzY2hlZHVsZWRFdmVudFRpbWVyRmly
ZWQoKQogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+PiBldmVudHM7CiAgICAgZXZlbnRzLnN3YXAo
bV9zY2hlZHVsZWRFdmVudHMpOwogCi0gICAgVmVjdG9yPFJlZlB0cjxFdmVudD4+OjppdGVyYXRv
ciBpdCA9IGV2ZW50cy5iZWdpbigpOwotICAgIGZvciAoOyBpdCAhPSBldmVudHMuZW5kKCk7ICsr
aXQpCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoKCppdCkucmVsZWFzZSgpKTsKKyAgICBmb3IgKGF1
dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNwYXRjaEV2ZW50KGV2ZW50LnJlbGVhc2Uo
KSk7CiAKICAgICBldmVudHMuY2xlYXIoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDU3RhdHNSZXBvcnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKaW5kZXggOTg5YTc2ZmZjMDg2
NzEzYTFmNjA2ZmFjNWRkNGQxNmNhMzkzOWIzNS4uYTAzNTYzNDUwZTRhNTVhNjc0YjQ1OGQzNGIx
MzNhYjc1MmY0NTYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENTdGF0c1JlcG9ydC5jcHAKQEAgLTQ4LDkgKzQ4LDggQEAgUlRDU3RhdHNSZXBv
cnQ6OlJUQ1N0YXRzUmVwb3J0KGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgdHlwZSwg
ZG91YmxlIHRpbWUKIFZlY3RvcjxTdHJpbmc+IFJUQ1N0YXRzUmVwb3J0OjpuYW1lcygpIGNvbnN0
CiB7CiAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwotICAgIGZvciAoSGFzaE1hcDxTdHJpbmcs
IFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0cy5iZWdpbigpOyBpdCAhPSBtX3N0
YXRzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoaXQtPmtleSk7Ci0gICAg
fQorICAgIGZvciAoYXV0byYgc3RhdCA6IG1fc3RhdHMua2V5cygpKQorICAgICAgICByZXN1bHQu
YXBwZW5kKHN0YXQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxzL05hdmlnYXRvckNvbnRlbnRV
dGlscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL25hdmlnYXRvcmNvbnRlbnR1dGlscy9O
YXZpZ2F0b3JDb250ZW50VXRpbHMuY3BwCmluZGV4IGNjYTdkOWUzMTk0YzgwNWRiOTIwOGZlZTVj
NzBmNWYyMjFiNWQyOWMuLjU2ODY3MTUyOWFiNTA4MDRhOTc5Y2E2MzQzY2RlYjJhYTJhMzIwNzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbmF2aWdhdG9yY29udGVudHV0aWxz
L05hdmlnYXRvckNvbnRlbnRVdGlscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9u
YXZpZ2F0b3Jjb250ZW50dXRpbHMvTmF2aWdhdG9yQ29udGVudFV0aWxzLmNwcApAQCAtNDQsMjkg
KzQ0LDggQEAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiogcHJvdG9jb2xXaGl0ZWxpc3Q7CiBzdGF0
aWMgdm9pZCBpbml0UHJvdG9jb2xIYW5kbGVyV2hpdGVsaXN0KCkKIHsKICAgICBwcm90b2NvbFdo
aXRlbGlzdCA9IG5ldyBIYXNoU2V0PFN0cmluZz47Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHBy
b3RvY29sc1tdID0gewotICAgICAgICAiYml0Y29pbiIsCi0gICAgICAgICJnZW8iLAotICAgICAg
ICAiaW0iLAotICAgICAgICAiaXJjIiwKLSAgICAgICAgImlyY3MiLAotICAgICAgICAibWFnbmV0
IiwKLSAgICAgICAgIm1haWx0byIsCi0gICAgICAgICJtbXMiLAotICAgICAgICAibmV3cyIsCi0g
ICAgICAgICJubnRwIiwKLSAgICAgICAgInNpcCIsCi0gICAgICAgICJzbXMiLAotICAgICAgICAi
c21zdG8iLAotICAgICAgICAic3NoIiwKLSAgICAgICAgInRlbCIsCi0gICAgICAgICJ1cm4iLAot
ICAgICAgICAid2ViY2FsIiwKLSAgICAgICAgInd0YWkiLAotICAgICAgICAieG1wcCIsCi0gICAg
fTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgocHJvdG9jb2xz
KTsgKytpKQotICAgICAgICBwcm90b2NvbFdoaXRlbGlzdC0+YWRkKHByb3RvY29sc1tpXSk7Cisg
ICAgZm9yIChhdXRvKiBwcm90b2NvbCA6IHsgImJpdGNvaW4iLCAiZ2VvIiwgImltIiwgImlyYyIs
ICJpcmNzIiwgIm1hZ25ldCIsICJtYWlsdG8iLCAibW1zIiwgIm5ld3MiLCAibm50cCIsICJzaXAi
LCAic21zIiwgInNtc3RvIiwgInNzaCIsICJ0ZWwiLCAidXJuIiwgIndlYmNhbCIsICJ3dGFpIiwg
InhtcHAiIH0pCisgICAgICAgIHByb3RvY29sV2hpdGVsaXN0LT5hZGQocHJvdG9jb2wpOwogfQog
CiBzdGF0aWMgYm9vbCB2ZXJpZnlDdXN0b21IYW5kbGVyVVJMKGNvbnN0IFVSTCYgYmFzZVVSTCwg
Y29uc3QgU3RyaW5nJiB1cmwsIEV4Y2VwdGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gvU3BlZWNoU3ludGhlc2lzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvc3BlZWNoL1NwZWVjaFN5bnRoZXNpcy5jcHAKaW5kZXggNzg1MDM0MGExMGE3
ZTM5NDc3NDljMjAwNDBlNjgwYzVhMWIzNGRlOS4uOTcxNDlmNGUyMDY2NjEwOWZmZWMxMjJmNGVi
MTUyN2U3MWI3MWU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9zcGVlY2gv
U3BlZWNoU3ludGhlc2lzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3NwZWVjaC9T
cGVlY2hTeW50aGVzaXMuY3BwCkBAIC03NCwxMCArNzQsOCBAQCBjb25zdCBWZWN0b3I8UmVmUHRy
PFNwZWVjaFN5bnRoZXNpc1ZvaWNlPj4mIFNwZWVjaFN5bnRoZXNpczo6Z2V0Vm9pY2VzKCkKICAg
ICAgICAgbV9wbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVyID0gc3RkOjptYWtlX3VuaXF1ZTxQbGF0
Zm9ybVNwZWVjaFN5bnRoZXNpemVyPih0aGlzKTsKIAogICAgIC8vIElmIHRoZSB2b2ljZUxpc3Qg
aXMgZW1wdHksIHRoYXQncyB0aGUgY3VlIHRvIGdldCB0aGUgdm9pY2VzIGZyb20gdGhlIHBsYXRm
b3JtIGFnYWluLgotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1TcGVlY2hTeW50aGVz
aXNWb2ljZT4+JiBwbGF0Zm9ybVZvaWNlcyA9IG1fcGxhdGZvcm1TcGVlY2hTeW50aGVzaXplci0+
dm9pY2VMaXN0KCk7Ci0gICAgc2l6ZV90IHZvaWNlQ291bnQgPSBwbGF0Zm9ybVZvaWNlcy5zaXpl
KCk7Ci0gICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCB2b2ljZUNvdW50OyBrKyspCi0gICAgICAg
IG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hTeW50aGVzaXNWb2ljZTo6Y3JlYXRlKHBsYXRmb3Jt
Vm9pY2VzW2tdKSk7CisgICAgZm9yIChhdXRvJiB2b2ljZSA6IG1fcGxhdGZvcm1TcGVlY2hTeW50
aGVzaXplci0+dm9pY2VMaXN0KCkpCisgICAgICAgIG1fdm9pY2VMaXN0LmFwcGVuZChTcGVlY2hT
eW50aGVzaXNWb2ljZTo6Y3JlYXRlKHZvaWNlKSk7CiAKICAgICByZXR1cm4gbV92b2ljZUxpc3Q7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3Bw
CmluZGV4IDMxZGE5NGMyN2E0NDEzYzIwYzY3ODZlZmMwZmI3OGI1ZDNmYjQ1YTIuLjhjYjhhNzFk
OTg4Y2E2ZGIwZTRlY2I0ZTFjOWU5ZTQ2ZTYwN2I3MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViYXVkaW8vQXVkaW9CdWZmZXIuY3BwCkBAIC0xMjUsOCArMTI1LDggQEAgdm9p
ZCBBdWRpb0J1ZmZlcjo6emVybygpCiBzaXplX3QgQXVkaW9CdWZmZXI6Om1lbW9yeUNvc3QoKSBj
b25zdAogewogICAgIHNpemVfdCBjb3N0ID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9jaGFubmVscy5zaXplKCkgOyArK2kpCi0gICAgICAgIGNvc3QgKz0gbV9jaGFubmVsc1tp
XS0+Ynl0ZUxlbmd0aCgpOworICAgIGZvciAoYXV0byYgY2hhbm5lbCA6IG1fY2hhbm5lbHMpCisg
ICAgICAgIGNvc3QgKz0gY2hhbm5lbC0+Ynl0ZUxlbmd0aCgpOwogICAgIHJldHVybiBjb3N0Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5j
cHAKaW5kZXggYTI5MzE2YTE1ZmYyZWI3OTU4OTIwNmExMjQ1MTBkZmEwN2U1ODEwYS4uZTNlYzkx
ODNlNWE0NDFmOTYxMjg3NjNhZGYyNDJhMDNmY2U3NWNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtNDYwLDEyICs0NjAsMTEg
QEAgUGFzc1JlZlB0cjxNZWRpYVN0cmVhbUF1ZGlvU291cmNlTm9kZT4gQXVkaW9Db250ZXh0Ojpj
cmVhdGVNZWRpYVN0cmVhbVNvdXJjZShNZWQKIAogICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIHBy
b3ZpZGVyID0gMDsKIAotICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW1UcmFjaz4+IGF1ZGlv
VHJhY2tzID0gbWVkaWFTdHJlYW0tPmdldEF1ZGlvVHJhY2tzKCk7CiAgICAgUmVmUHRyPE1lZGlh
U3RyZWFtVHJhY2s+IGF1ZGlvVHJhY2s7CiAKICAgICAvLyBGSVhNRTogZ2V0IGEgcHJvdmlkZXIg
Zm9yIG5vbi1sb2NhbCBNZWRpYVN0cmVhbXMgKGxpa2UgZnJvbSBhIHJlbW90ZSBwZWVyKS4KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF1ZGlvVHJhY2tzLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGF1ZGlvVHJhY2sgPSBhdWRpb1RyYWNrc1tpXTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrIDog
bWVkaWFTdHJlYW0tPmdldEF1ZGlvVHJhY2tzKCkpIHsKKyAgICAgICAgYXVkaW9UcmFjayA9IHRy
YWNrOwogICAgICAgICBpZiAoYXVkaW9UcmFjay0+c291cmNlKCktPmlzQXVkaW9TdHJlYW1Tb3Vy
Y2UoKSkgewogICAgICAgICAgICAgYXV0byBzb3VyY2UgPSBzdGF0aWNfY2FzdDxNZWRpYVN0cmVh
bUF1ZGlvU291cmNlKj4oYXVkaW9UcmFjay0+c291cmNlKCkpOwogICAgICAgICAgICAgQVNTRVJU
KCFzb3VyY2UtPmRldmljZUlkKCkuaXNFbXB0eSgpKTsKQEAgLTY2NCw4ICs2NjMsOCBAQCB2b2lk
IEF1ZGlvQ29udGV4dDo6ZGVyZWZGaW5pc2hlZFNvdXJjZU5vZGVzKCkKIHsKICAgICBBU1NFUlQo
aXNHcmFwaE93bmVyKCkpOwogICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkgfHwgaXNBdWRpb1Ro
cmVhZEZpbmlzaGVkKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZpbmlzaGVk
Tm9kZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGRlcmVmTm9kZShtX2ZpbmlzaGVkTm9kZXNbaV0p
OworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fZmluaXNoZWROb2RlcykKKyAgICAgICAgZGVyZWZO
b2RlKG5vZGUpOwogCiAgICAgbV9maW5pc2hlZE5vZGVzLmNsZWFyKCk7CiB9CkBAIC02OTIsOCAr
NjkxLDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmRlcmVmTm9kZShBdWRpb05vZGUqIG5vZGUpCiB2
b2lkIEF1ZGlvQ29udGV4dDo6ZGVyZWZVbmZpbmlzaGVkU291cmNlTm9kZXMoKQogewogICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSAmJiBpc0F1ZGlvVGhyZWFkRmluaXNoZWQoKSk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcmVmZXJlbmNlZE5vZGVzLnNpemUoKTsgKytpKQotICAg
ICAgICBtX3JlZmVyZW5jZWROb2Rlc1tpXS0+ZGVyZWYoQXVkaW9Ob2RlOjpSZWZUeXBlQ29ubmVj
dGlvbik7CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9yZWZlcmVuY2VkTm9kZXMpCisgICAgICAg
IG5vZGUtPmRlcmVmKEF1ZGlvTm9kZTo6UmVmVHlwZUNvbm5lY3Rpb24pOwogCiAgICAgbV9yZWZl
cmVuY2VkTm9kZXMuY2xlYXIoKTsKIH0KQEAgLTgyNSwxMCArODI0LDggQEAgdm9pZCBBdWRpb0Nv
bnRleHQ6OmhhbmRsZVBvc3RSZW5kZXJUYXNrcygpCiB2b2lkIEF1ZGlvQ29udGV4dDo6aGFuZGxl
RGVmZXJyZWRGaW5pc2hEZXJlZnMoKQogewogICAgIEFTU0VSVChpc0F1ZGlvVGhyZWFkKCkgJiYg
aXNHcmFwaE93bmVyKCkpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RlZmVycmVk
RmluaXNoRGVyZWZMaXN0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEF1ZGlvTm9kZSogbm9kZSA9
IG1fZGVmZXJyZWRGaW5pc2hEZXJlZkxpc3RbaV07CisgICAgZm9yIChhdXRvJiBub2RlIDogbV9k
ZWZlcnJlZEZpbmlzaERlcmVmTGlzdCkKICAgICAgICAgbm9kZS0+ZmluaXNoRGVyZWYoQXVkaW9O
b2RlOjpSZWZUeXBlQ29ubmVjdGlvbik7Ci0gICAgfQogICAgIAogICAgIG1fZGVmZXJyZWRGaW5p
c2hEZXJlZkxpc3QuY2xlYXIoKTsKIH0KQEAgLTkyMiw4ICs5MTksOCBAQCB2b2lkIEF1ZGlvQ29u
dGV4dDo6aGFuZGxlRGlydHlBdWRpb1N1bW1pbmdKdW5jdGlvbnMoKQogewogICAgIEFTU0VSVChp
c0dyYXBoT3duZXIoKSk7ICAgIAogCi0gICAgZm9yIChIYXNoU2V0PEF1ZGlvU3VtbWluZ0p1bmN0
aW9uKj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5U3VtbWluZ0p1bmN0aW9ucy5iZWdpbigpOyBpICE9
IG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLmVuZCgpOyArK2kpCi0gICAgICAgICgqaSktPnVwZGF0
ZVJlbmRlcmluZ1N0YXRlKCk7CisgICAgZm9yIChhdXRvJiBqdW5jdGlvbiA6IG1fZGlydHlTdW1t
aW5nSnVuY3Rpb25zKQorICAgICAgICBqdW5jdGlvbi0+dXBkYXRlUmVuZGVyaW5nU3RhdGUoKTsK
IAogICAgIG1fZGlydHlTdW1taW5nSnVuY3Rpb25zLmNsZWFyKCk7CiB9CkBAIC05MzIsOCArOTI5
LDggQEAgdm9pZCBBdWRpb0NvbnRleHQ6OmhhbmRsZURpcnR5QXVkaW9Ob2RlT3V0cHV0cygpCiB7
CiAgICAgQVNTRVJUKGlzR3JhcGhPd25lcigpKTsgICAgCiAKLSAgICBmb3IgKEhhc2hTZXQ8QXVk
aW9Ob2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBtX2RpcnR5QXVkaW9Ob2RlT3V0cHV0cy5iZWdp
bigpOyBpICE9IG1fZGlydHlBdWRpb05vZGVPdXRwdXRzLmVuZCgpOyArK2kpCi0gICAgICAgICgq
aSktPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CisgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX2Rp
cnR5QXVkaW9Ob2RlT3V0cHV0cykKKyAgICAgICAgb3V0cHV0LT51cGRhdGVSZW5kZXJpbmdTdGF0
ZSgpOwogCiAgICAgbV9kaXJ0eUF1ZGlvTm9kZU91dHB1dHMuY2xlYXIoKTsKIH0KQEAgLTk2Miwx
MSArOTU5LDkgQEAgdm9pZCBBdWRpb0NvbnRleHQ6OnVwZGF0ZUF1dG9tYXRpY1B1bGxOb2Rlcygp
CiAgICAgICAgIC8vIENvcHkgZnJvbSBtX2F1dG9tYXRpY1B1bGxOb2RlcyB0byBtX3JlbmRlcmlu
Z0F1dG9tYXRpY1B1bGxOb2Rlcy4KICAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9k
ZXMucmVzaXplKG1fYXV0b21hdGljUHVsbE5vZGVzLnNpemUoKSk7CiAKLSAgICAgICAgdW5zaWdu
ZWQgaiA9IDA7Ci0gICAgICAgIGZvciAoSGFzaFNldDxBdWRpb05vZGUqPjo6aXRlcmF0b3IgaSA9
IG1fYXV0b21hdGljUHVsbE5vZGVzLmJlZ2luKCk7IGkgIT0gbV9hdXRvbWF0aWNQdWxsTm9kZXMu
ZW5kKCk7ICsraSwgKytqKSB7Ci0gICAgICAgICAgICBBdWRpb05vZGUqIG91dHB1dCA9ICppOwot
ICAgICAgICAgICAgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXNbal0gPSBvdXRwdXQ7Ci0g
ICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGZvciAoYXV0byYgb3V0
cHV0IDogbV9hdXRvbWF0aWNQdWxsTm9kZXMpCisgICAgICAgICAgICBtX3JlbmRlcmluZ0F1dG9t
YXRpY1B1bGxOb2Rlc1tpKytdID0gb3V0cHV0OwogCiAgICAgICAgIG1fYXV0b21hdGljUHVsbE5v
ZGVzTmVlZFVwZGF0aW5nID0gZmFsc2U7CiAgICAgfQpAQCAtOTc2LDggKzk3MSw4IEBAIHZvaWQg
QXVkaW9Db250ZXh0Ojpwcm9jZXNzQXV0b21hdGljUHVsbE5vZGVzKHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpCiB7CiAgICAgQVNTRVJUKGlzQXVkaW9UaHJlYWQoKSk7CiAKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9yZW5kZXJpbmdBdXRvbWF0aWNQdWxsTm9kZXMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIG1fcmVuZGVyaW5nQXV0b21hdGljUHVsbE5vZGVzW2ldLT5wcm9jZXNzSWZOZWNl
c3NhcnkoZnJhbWVzVG9Qcm9jZXNzKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX3JlbmRlcmlu
Z0F1dG9tYXRpY1B1bGxOb2RlcykKKyAgICAgICAgbm9kZS0+cHJvY2Vzc0lmTmVjZXNzYXJ5KGZy
YW1lc1RvUHJvY2Vzcyk7CiB9CiAKIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIEF1ZGlvQ29udGV4
dDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZS5jcHAKaW5kZXggMzI2NGI1YjFiNTEwMDE2MGU3Zjg4MzI3
ZmNiNjUxNWMyYzZlZGNmMC4uZjQ2YjRiZTI0NGQ0MDdkMDA0OTEzYWI1NDdkOTExZDkxOGVjMDNl
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlLmNwcApA
QCAtMjc3LDggKzI3Nyw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpzZXRDaGFubmVsSW50ZXJwcmV0YXRp
b24oY29uc3QgU3RyaW5nJiBpbnRlcnByZXRhdGlvbiwgRXhjZXB0aW9uCiAKIHZvaWQgQXVkaW9O
b2RlOjp1cGRhdGVDaGFubmVsc0ZvcklucHV0cygpCiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1faW5wdXRzLnNpemUoKTsgKytpKQotICAgICAgICBpbnB1dChpKS0+Y2hhbmdlZE91
dHB1dHMoKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpCisgICAgICAgIGlucHV0
LT5jaGFuZ2VkT3V0cHV0cygpOwogfQogCiBFdmVudFRhcmdldEludGVyZmFjZSBBdWRpb05vZGU6
OmV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QKQEAgLTMyNSw3ICszMjUsNyBAQCB2b2lkIEF1
ZGlvTm9kZTo6Y2hlY2tOdW1iZXJPZkNoYW5uZWxzRm9ySW5wdXQoQXVkaW9Ob2RlSW5wdXQqIGlu
cHV0KQogewogICAgIEFTU0VSVChjb250ZXh0KCktPmlzQXVkaW9UaHJlYWQoKSAmJiBjb250ZXh0
KCktPmlzR3JhcGhPd25lcigpKTsKIAotICAgIGZvciAoY29uc3Qgc3RkOjp1bmlxdWVfcHRyPEF1
ZGlvTm9kZUlucHV0PiYgc2F2ZWRJbnB1dCA6IG1faW5wdXRzKSB7CisgICAgZm9yIChhdXRvJiBz
YXZlZElucHV0IDogbV9pbnB1dHMpIHsKICAgICAgICAgaWYgKGlucHV0ID09IHNhdmVkSW5wdXQu
Z2V0KCkpIHsKICAgICAgICAgICAgIGlucHV0LT51cGRhdGVJbnRlcm5hbEJ1cygpOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMzQ1LDE0ICszNDUsMTQgQEAgdm9pZCBBdWRpb05vZGU6OnB1bGxJ
bnB1dHMoc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKICAgICBBU1NFUlQoY29udGV4dCgpLT5pc0F1
ZGlvVGhyZWFkKCkpOwogICAgIAogICAgIC8vIFByb2Nlc3MgYWxsIG9mIHRoZSBBdWRpb05vZGVz
IGNvbm5lY3RlZCB0byBvdXIgaW5wdXRzLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2lucHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgaW5wdXQoaSktPnB1bGwoMCwgZnJhbWVzVG9Q
cm9jZXNzKTsKKyAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpCisgICAgICAgIGlucHV0
LT5wdWxsKDAsIGZyYW1lc1RvUHJvY2Vzcyk7CiB9CiAKIGJvb2wgQXVkaW9Ob2RlOjppbnB1dHNB
cmVTaWxlbnQoKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2lucHV0cy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpZiAoIWlucHV0KGkpLT5idXMoKS0+aXNTaWxlbnQoKSkKKyAg
ICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMpIHsKKyAgICAgICAgaWYgKCFpbnB1dC0+YnVz
KCktPmlzU2lsZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJl
dHVybiB0cnVlOwpAQCAtMzYwLDE0ICszNjAsMTQgQEAgYm9vbCBBdWRpb05vZGU6OmlucHV0c0Fy
ZVNpbGVudCgpCiAKIHZvaWQgQXVkaW9Ob2RlOjpzaWxlbmNlT3V0cHV0cygpCiB7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5zaXplKCk7ICsraSkKLSAgICAgICAgb3V0
cHV0KGkpLT5idXMoKS0+emVybygpOworICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9vdXRwdXRz
KQorICAgICAgICBvdXRwdXQtPmJ1cygpLT56ZXJvKCk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjp1
bnNpbGVuY2VPdXRwdXRzKCkKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRw
dXRzLnNpemUoKTsgKytpKQotICAgICAgICBvdXRwdXQoaSktPmJ1cygpLT5jbGVhclNpbGVudEZs
YWcoKTsKKyAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAgICAgb3V0cHV0
LT5idXMoKS0+Y2xlYXJTaWxlbnRGbGFnKCk7CiB9CiAKIHZvaWQgQXVkaW9Ob2RlOjplbmFibGVP
dXRwdXRzSWZOZWNlc3NhcnkoKQpAQCAtMzc3LDggKzM3Nyw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpl
bmFibGVPdXRwdXRzSWZOZWNlc3NhcnkoKQogICAgICAgICBBdWRpb0NvbnRleHQ6OkF1dG9Mb2Nr
ZXIgbG9ja2VyKCpjb250ZXh0KCkpOwogCiAgICAgICAgIG1faXNEaXNhYmxlZCA9IGZhbHNlOwot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9vdXRwdXRzLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgb3V0cHV0KGkpLT5lbmFibGUoKTsKKyAgICAgICAgZm9yIChhdXRvJiBvdXRw
dXQgOiBtX291dHB1dHMpCisgICAgICAgICAgICBvdXRwdXQtPmVuYWJsZSgpOwogICAgIH0KIH0K
IApAQCAtNDAyLDggKzQwMiw4IEBAIHZvaWQgQXVkaW9Ob2RlOjpkaXNhYmxlT3V0cHV0c0lmTmVj
ZXNzYXJ5KCkKICAgICAgICAgLy8gbG9uZ2VyIGFueSBhY3RpdmUgY29ubmVjdGlvbnMuCiAgICAg
ICAgIGlmIChub2RlVHlwZSgpICE9IE5vZGVUeXBlQ29udm9sdmVyICYmIG5vZGVUeXBlKCkgIT0g
Tm9kZVR5cGVEZWxheSkgewogICAgICAgICAgICAgbV9pc0Rpc2FibGVkID0gdHJ1ZTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX291dHB1dHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNhYmxlKCk7CisgICAgICAgICAgICBmb3IgKGF1
dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAgICAgICAgICAgICBvdXRwdXQtPmRpc2FibGUo
KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQ5Miw4ICs0OTIsOCBAQCB2b2lkIEF1ZGlvTm9k
ZTo6ZmluaXNoRGVyZWYoUmVmVHlwZSByZWZUeXBlKQogICAgICAgICBpZiAoIW1fbm9ybWFsUmVm
Q291bnQpIHsKICAgICAgICAgICAgIGlmICghbV9pc01hcmtlZEZvckRlbGV0aW9uKSB7CiAgICAg
ICAgICAgICAgICAgLy8gQWxsIHJlZmVyZW5jZXMgYXJlIGdvbmUgLSB3ZSBuZWVkIHRvIGdvIGF3
YXkuCi0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fb3V0cHV0cy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgb3V0cHV0KGkpLT5kaXNjb25uZWN0QWxs
KCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVzIHdlJ3JlIGNvbm5lY3RlZCB0by4KKyAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0cHV0cykKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0LT5kaXNjb25uZWN0QWxsKCk7IC8vIFRoaXMgd2lsbCBkZXJlZigpIG5vZGVz
IHdlJ3JlIGNvbm5lY3RlZCB0by4KIAogICAgICAgICAgICAgICAgIC8vIE1hcmsgZm9yIGRlbGV0
aW9uIGF0IGVuZCBvZiBlYWNoIHJlbmRlciBxdWFudHVtIG9yIHdoZW4gY29udGV4dCBzaHV0cyBk
b3duLgogICAgICAgICAgICAgICAgIGNvbnRleHQoKS0+bWFya0ZvckRlbGV0aW9uKHRoaXMpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVJbnB1
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNw
cAppbmRleCBjNjIzMzNkMmIyMTk3ODU4YjJlODBmMzE5MDMwYWYzZGRjOGViMjc4Li5hNjA1ZTMz
MmRhODZhOGQ0OWViOTFjYTYxZmEwMGZlZTBhOGJiYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZUlucHV0LmNwcApAQCAtMTUxLDggKzE1MSw3
IEBAIHVuc2lnbmVkIEF1ZGlvTm9kZUlucHV0OjpudW1iZXJPZkNoYW5uZWxzKCkgY29uc3QKICAg
ICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgb2YgdGhlIGNvbm5lY3Rpb24gd2l0aCB0
aGUgbGFyZ2VzdCBudW1iZXIgb2YgY2hhbm5lbHMuCiAgICAgdW5zaWduZWQgbWF4Q2hhbm5lbHMg
PSAxOyAvLyBvbmUgY2hhbm5lbCBpcyB0aGUgbWluaW11bSBhbGxvd2VkCiAKLSAgICBmb3IgKEhh
c2hTZXQ8QXVkaW9Ob2RlT3V0cHV0Kj46Oml0ZXJhdG9yIGkgPSBtX291dHB1dHMuYmVnaW4oKTsg
aSAhPSBtX291dHB1dHMuZW5kKCk7ICsraSkgewotICAgICAgICBBdWRpb05vZGVPdXRwdXQqIG91
dHB1dCA9ICppOworICAgIGZvciAoYXV0byYgb3V0cHV0IDogbV9vdXRwdXRzKSB7CiAgICAgICAg
IC8vIFVzZSBvdXRwdXQoKS0+bnVtYmVyT2ZDaGFubmVscygpIGluc3RlYWQgb2Ygb3V0cHV0LT5i
dXMoKS0+bnVtYmVyT2ZDaGFubmVscygpLAogICAgICAgICAvLyBiZWNhdXNlIHRoZSBjYWxsaW5n
IG9mIEF1ZGlvTm9kZU91dHB1dDo6YnVzKCkgaXMgbm90IHNhZmUgaGVyZS4KICAgICAgICAgbWF4
Q2hhbm5lbHMgPSBzdGQ6Om1heChtYXhDaGFubmVscywgb3V0cHV0LT5udW1iZXJPZkNoYW5uZWxz
KCkpOwpAQCAtMTk4LDggKzE5Nyw3IEBAIHZvaWQgQXVkaW9Ob2RlSW5wdXQ6OnN1bUFsbENvbm5l
Y3Rpb25zKEF1ZGlvQnVzKiBzdW1taW5nQnVzLCBzaXplX3QgZnJhbWVzVG9Qcm9jCiAKICAgICBB
dWRpb0J1czo6Q2hhbm5lbEludGVycHJldGF0aW9uIGludGVycHJldGF0aW9uID0gbm9kZSgpLT5p
bnRlcm5hbENoYW5uZWxJbnRlcnByZXRhdGlvbigpOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bWJlck9mUmVuZGVyaW5nQ29ubmVjdGlvbnMoKTsgKytpKSB7Ci0gICAgICAgIEF1
ZGlvTm9kZU91dHB1dCogb3V0cHV0ID0gcmVuZGVyaW5nT3V0cHV0KGkpOworICAgIGZvciAoYXV0
byYgb3V0cHV0IDogbV9yZW5kZXJpbmdPdXRwdXRzKSB7CiAgICAgICAgIEFTU0VSVChvdXRwdXQp
OwogCiAgICAgICAgIC8vIFJlbmRlciBhdWRpbyBmcm9tIHRoaXMgb3V0cHV0LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb05vZGVPdXRwdXQuY3BwCmluZGV4
IGY5YTQ1MTZmOTgyNDdjZDBkZDEyNmNhYzQ4MmNkZWZhOTkyNjhiMTEuLjQ2OGQ4ZDVmMTQwOTQx
MmFhMThkMzIxOWE0Y2M0MzVjMTNiMWRkYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViYXVkaW8vQXVkaW9Ob2RlT3V0cHV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmF1ZGlvL0F1ZGlvTm9kZU91dHB1dC5jcHAKQEAgLTk4LDggKzk4LDcgQEAgdm9p
ZCBBdWRpb05vZGVPdXRwdXQ6OnByb3BhZ2F0ZUNoYW5uZWxDb3VudCgpCiAgICAgCiAgICAgaWYg
KGlzQ2hhbm5lbENvdW50S25vd24oKSkgewogICAgICAgICAvLyBBbm5vdW5jZSB0byBhbnkgbm9k
ZXMgd2UncmUgY29ubmVjdGVkIHRvIHRoYXQgd2UgY2hhbmdlZCBvdXIgY2hhbm5lbCBjb3VudCBm
b3IgaXRzIGlucHV0LgotICAgICAgICBmb3IgKElucHV0c0l0ZXJhdG9yIGkgPSBtX2lucHV0cy5i
ZWdpbigpOyBpICE9IG1faW5wdXRzLmVuZCgpOyArK2kpIHsKLSAgICAgICAgICAgIEF1ZGlvTm9k
ZUlucHV0KiBpbnB1dCA9ICppOworICAgICAgICBmb3IgKGF1dG8mIGlucHV0IDogbV9pbnB1dHMp
IHsKICAgICAgICAgICAgIEF1ZGlvTm9kZSogY29ubmVjdGlvbk5vZGUgPSBpbnB1dC0+bm9kZSgp
OwogICAgICAgICAgICAgY29ubmVjdGlvbk5vZGUtPmNoZWNrTnVtYmVyT2ZDaGFubmVsc0Zvcklu
cHV0KGlucHV0KTsKICAgICAgICAgfQpAQCAtMjMwLDEwICsyMjksOCBAQCB2b2lkIEF1ZGlvTm9k
ZU91dHB1dDo6ZGlzYWJsZSgpCiAgICAgQVNTRVJUKGNvbnRleHQoKS0+aXNHcmFwaE93bmVyKCkp
OwogCiAgICAgaWYgKG1faXNFbmFibGVkKSB7Ci0gICAgICAgIGZvciAoSW5wdXRzSXRlcmF0b3Ig
aSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMuZW5kKCk7ICsraSkgewotICAgICAg
ICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7CisgICAgICAgIGZvciAoYXV0byYgaW5w
dXQgOiBtX2lucHV0cykKICAgICAgICAgICAgIGlucHV0LT5kaXNhYmxlKHRoaXMpOwotICAgICAg
ICB9CiAgICAgICAgIG1faXNFbmFibGVkID0gZmFsc2U7CiAgICAgfQogfQpAQCAtMjQzLDEwICsy
NDAsOCBAQCB2b2lkIEF1ZGlvTm9kZU91dHB1dDo6ZW5hYmxlKCkKICAgICBBU1NFUlQoY29udGV4
dCgpLT5pc0dyYXBoT3duZXIoKSk7CiAKICAgICBpZiAoIW1faXNFbmFibGVkKSB7Ci0gICAgICAg
IGZvciAoSW5wdXRzSXRlcmF0b3IgaSA9IG1faW5wdXRzLmJlZ2luKCk7IGkgIT0gbV9pbnB1dHMu
ZW5kKCk7ICsraSkgewotICAgICAgICAgICAgQXVkaW9Ob2RlSW5wdXQqIGlucHV0ID0gKmk7Cisg
ICAgICAgIGZvciAoYXV0byYgaW5wdXQgOiBtX2lucHV0cykKICAgICAgICAgICAgIGlucHV0LT5l
bmFibGUodGhpcyk7Ci0gICAgICAgIH0KICAgICAgICAgbV9pc0VuYWJsZWQgPSB0cnVlOwogICAg
IH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9Q
YXJhbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFyYW0uY3Bw
CmluZGV4IDNlNDg5OWY1MGUzOWMzOGIxN2U1MGI0NTg1YTJiNjQ4MWJiNjBhYmEuLmI3M2U5MTZh
ZjkyZDliNmQ2ZTIwOWM3ZmJiY2RhZDFlNGQ2MjRjYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtLmNwcApAQCAtMTM5LDggKzEzOSw3IEBAIHZvaWQg
QXVkaW9QYXJhbTo6Y2FsY3VsYXRlRmluYWxWYWx1ZXMoZmxvYXQqIHZhbHVlcywgdW5zaWduZWQg
bnVtYmVyT2ZWYWx1ZXMsIGJvCiAgICAgUmVmUHRyPEF1ZGlvQnVzPiBzdW1taW5nQnVzID0gQXVk
aW9CdXM6OmNyZWF0ZSgxLCBudW1iZXJPZlZhbHVlcywgZmFsc2UpOwogICAgIHN1bW1pbmdCdXMt
PnNldENoYW5uZWxNZW1vcnkoMCwgdmFsdWVzLCBudW1iZXJPZlZhbHVlcyk7CiAKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtYmVyT2ZSZW5kZXJpbmdDb25uZWN0aW9ucygpOyArK2kp
IHsKLSAgICAgICAgQXVkaW9Ob2RlT3V0cHV0KiBvdXRwdXQgPSByZW5kZXJpbmdPdXRwdXQoaSk7
CisgICAgZm9yIChhdXRvJiBvdXRwdXQgOiBtX3JlbmRlcmluZ091dHB1dHMpIHsKICAgICAgICAg
QVNTRVJUKG91dHB1dCk7CiAKICAgICAgICAgLy8gUmVuZGVyIGF1ZGlvIGZyb20gdGhpcyBvdXRw
dXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvUGFy
YW1UaW1lbGluZS5jcHAKaW5kZXggMWM3ZTRlNWY4YmU5M2RiMDk3MjE4MjE0M2Y2NmM3MDY4NjI5
YmJhNy4uZTg3YmU2MjQ1OGIzMjIyM2YyZTk5YTA0Y2Q0ZWQwMzAwZTUwMzU0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9BdWRpb1BhcmFtVGltZWxpbmUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9QYXJhbVRpbWVsaW5l
LmNwcApAQCAtODQsMTUgKzg0LDE3IEBAIHZvaWQgQXVkaW9QYXJhbVRpbWVsaW5lOjppbnNlcnRF
dmVudChjb25zdCBQYXJhbUV2ZW50JiBldmVudCkKICAgICAKICAgICB1bnNpZ25lZCBpID0gMDsK
ICAgICBmbG9hdCBpbnNlcnRUaW1lID0gZXZlbnQudGltZSgpOwotICAgIGZvciAoaSA9IDA7IGkg
PCBtX2V2ZW50cy5zaXplKCk7ICsraSkgeworICAgIGZvciAoYXV0byYgcGFyYW1FdmVudCA6IG1f
ZXZlbnRzKSB7CiAgICAgICAgIC8vIE92ZXJ3cml0ZSBzYW1lIGV2ZW50IHR5cGUgYW5kIHRpbWUu
Ci0gICAgICAgIGlmIChtX2V2ZW50c1tpXS50aW1lKCkgPT0gaW5zZXJ0VGltZSAmJiBtX2V2ZW50
c1tpXS50eXBlKCkgPT0gZXZlbnQudHlwZSgpKSB7Ci0gICAgICAgICAgICBtX2V2ZW50c1tpXSA9
IGV2ZW50OworICAgICAgICBpZiAocGFyYW1FdmVudC50aW1lKCkgPT0gaW5zZXJ0VGltZSAmJiBw
YXJhbUV2ZW50LnR5cGUoKSA9PSBldmVudC50eXBlKCkpIHsKKyAgICAgICAgICAgIHBhcmFtRXZl
bnQgPSBldmVudDsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlm
IChtX2V2ZW50c1tpXS50aW1lKCkgPiBpbnNlcnRUaW1lKQorICAgICAgICBpZiAocGFyYW1FdmVu
dC50aW1lKCkgPiBpbnNlcnRUaW1lKQogICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgKytp
OwogICAgIH0KIAogICAgIG1fZXZlbnRzLmluc2VydChpLCBldmVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL0F1ZGlvU3VtbWluZ0p1bmN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3Bw
CmluZGV4IGVkNDE3ZmFkYmQ1NWVlNjNkNmI4ZmNmODVkZjc0N2RhZmQ2ODI4YTQuLmMyMjhlZWM3
MTgyOTk5ZjA4MWNmMGI1ZjM5YzQ0YWUxM2U0MmYyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vQXVkaW9TdW1taW5nSnVuY3Rpb24uY3BwCkBAIC02
MiwxMCArNjIsOSBAQCB2b2lkIEF1ZGlvU3VtbWluZ0p1bmN0aW9uOjp1cGRhdGVSZW5kZXJpbmdT
dGF0ZSgpCiAgICAgaWYgKG1fcmVuZGVyaW5nU3RhdGVOZWVkVXBkYXRpbmcgJiYgY2FuVXBkYXRl
U3RhdGUoKSkgewogICAgICAgICAvLyBDb3B5IGZyb20gbV9vdXRwdXRzIHRvIG1fcmVuZGVyaW5n
T3V0cHV0cy4KICAgICAgICAgbV9yZW5kZXJpbmdPdXRwdXRzLnJlc2l6ZShtX291dHB1dHMuc2l6
ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgaiA9IDA7Ci0gICAgICAgIGZvciAoSGFzaFNldDxBdWRp
b05vZGVPdXRwdXQqPjo6aXRlcmF0b3IgaSA9IG1fb3V0cHV0cy5iZWdpbigpOyBpICE9IG1fb3V0
cHV0cy5lbmQoKTsgKytpLCArK2opIHsKLSAgICAgICAgICAgIEF1ZGlvTm9kZU91dHB1dCogb3V0
cHV0ID0gKmk7Ci0gICAgICAgICAgICBtX3JlbmRlcmluZ091dHB1dHNbal0gPSBvdXRwdXQ7Cisg
ICAgICAgIHVuc2lnbmVkIGkgPSAwOworICAgICAgICBmb3IgKGF1dG8mIG91dHB1dCA6IG1fb3V0
cHV0cykgeworICAgICAgICAgICAgbV9yZW5kZXJpbmdPdXRwdXRzW2krK10gPSBvdXRwdXQ7CiAg
ICAgICAgICAgICBvdXRwdXQtPnVwZGF0ZVJlbmRlcmluZ1N0YXRlKCk7CiAgICAgICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1
ZGlvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJl
YW1BdWRpb1NvdXJjZS5jcHAKaW5kZXggZWQ3OGE3YzBkMmM1NDcyOTUwOWU2Yzk5MDY2YjMzNzg3
MWRmMWRkNy4uYjZlMjZlN2Y5OWRiMmFiNDBmZjFkZDQ0MzA5NzE1NmUwMWIzMTUxOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291
cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFt
QXVkaW9Tb3VyY2UuY3BwCkBAIC04MSwxNSArODEsMTUgQEAgYm9vbCBNZWRpYVN0cmVhbUF1ZGlv
U291cmNlOjpyZW1vdmVBdWRpb0NvbnN1bWVyKEF1ZGlvRGVzdGluYXRpb25Db25zdW1lciogY29u
c3UKIHZvaWQgTWVkaWFTdHJlYW1BdWRpb1NvdXJjZTo6c2V0QXVkaW9Gb3JtYXQoc2l6ZV90IG51
bWJlck9mQ2hhbm5lbHMsIGZsb2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fYXVkaW9Db25zdW1lcnNMb2NrKTsKLSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8QXVkaW9E
ZXN0aW5hdGlvbkNvbnN1bWVyPj46Oml0ZXJhdG9yIGl0ID0gbV9hdWRpb0NvbnN1bWVycy5iZWdp
bigpOyBpdCAhPSBtX2F1ZGlvQ29uc3VtZXJzLmVuZCgpOyArK2l0KQotICAgICAgICAoKml0KS0+
c2V0Rm9ybWF0KG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUpOworICAgIGZvciAoYXV0byYg
Y29uc3VtZXIgOiBtX2F1ZGlvQ29uc3VtZXJzKQorICAgICAgICBjb25zdW1lci0+c2V0Rm9ybWF0
KG51bWJlck9mQ2hhbm5lbHMsIHNhbXBsZVJhdGUpOwogfQogCiB2b2lkIE1lZGlhU3RyZWFtQXVk
aW9Tb3VyY2U6OmNvbnN1bWVBdWRpbyhBdWRpb0J1cyogYnVzLCBzaXplX3QgbnVtYmVyT2ZGcmFt
ZXMpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXVkaW9Db25zdW1lcnNMb2NrKTsKLSAg
ICBmb3IgKFZlY3RvcjxSZWZQdHI8QXVkaW9EZXN0aW5hdGlvbkNvbnN1bWVyPj46Oml0ZXJhdG9y
IGl0ID0gbV9hdWRpb0NvbnN1bWVycy5iZWdpbigpOyBpdCAhPSBtX2F1ZGlvQ29uc3VtZXJzLmVu
ZCgpOyArK2l0KQotICAgICAgICAoKml0KS0+Y29uc3VtZUF1ZGlvKGJ1cywgbnVtYmVyT2ZGcmFt
ZXMpOworICAgIGZvciAoYXV0byYgY29uc3VtZXIgOiBtX2F1ZGlvQ29uc3VtZXJzKQorICAgICAg
ICBjb25zdW1lci0+Y29uc3VtZUF1ZGlvKGJ1cywgbnVtYmVyT2ZGcmFtZXMpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmF1ZGlvL1dhdmVTaGFwZXJQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJhdWRpby9XYXZlU2hhcGVyUHJvY2Vzc29yLmNwcAppbmRleCBjMmQ2ZGUwYWY5MWNlNjQ2OGZl
YmYzZDI3M2MzMzVmN2ZjOTRiYTU0Li42Y2U1NTg2OWFkNWRiYjFiOWFlYjU5NDE1NjYzYTE5ZTNj
MjhiNGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmF1ZGlvL1dhdmVT
aGFwZXJQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViYXVkaW8v
V2F2ZVNoYXBlclByb2Nlc3Nvci5jcHAKQEAgLTY1LDkgKzY1LDkgQEAgdm9pZCBXYXZlU2hhcGVy
UHJvY2Vzc29yOjpzZXRPdmVyc2FtcGxlKE92ZXJTYW1wbGVUeXBlIG92ZXJzYW1wbGUpCiAgICAg
bV9vdmVyc2FtcGxlID0gb3ZlcnNhbXBsZTsKIAogICAgIGlmIChvdmVyc2FtcGxlICE9IE92ZXJT
YW1wbGVOb25lKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIFdhdmVTaGFwZXJEU1BLZXJuZWwqIGtlcm5lbCA9
IHN0YXRpY19jYXN0PFdhdmVTaGFwZXJEU1BLZXJuZWwqPihtX2tlcm5lbHNbaV0uZ2V0KCkpOwot
ICAgICAgICAgICAga2VybmVsLT5sYXp5SW5pdGlhbGl6ZU92ZXJzYW1wbGluZygpOworICAgICAg
ICBmb3IgKGF1dG8mIGF1ZGlvRFNQS2VybmVsIDogbV9rZXJuZWxzKSB7CisgICAgICAgICAgICBX
YXZlU2hhcGVyRFNQS2VybmVsJiBrZXJuZWwgPSBzdGF0aWNfY2FzdDxXYXZlU2hhcGVyRFNQS2Vy
bmVsJj4oKmF1ZGlvRFNQS2VybmVsKTsKKyAgICAgICAgICAgIGtlcm5lbC5sYXp5SW5pdGlhbGl6
ZU92ZXJzYW1wbGluZygpOwogICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRhYmFzZVRocmVhZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAppbmRleCAyOTZh
ZGZkZTZkOTYxMmZjZDc5ZGI0ODNhYWIxNDIzMDIyMmVlZjc3Li5hNDQxM2MyNTYzYjI1NjAyZWYx
NWJhNTMyNjAyYjBmOTA2Zjg0NWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNlVGhyZWFkLmNwcApAQCAtMTUwLDEwICsxNTAsMTAgQEAg
dm9pZCBEYXRhYmFzZVRocmVhZDo6aGFuZGxlUGF1c2VkUXVldWUoKQogICAgIHdoaWxlIChhdXRv
IHRhc2sgPSBtX3BhdXNlZFF1ZXVlLnRyeUdldE1lc3NhZ2UoKSkKICAgICAgICAgcGF1c2VkVGFz
a3MuYXBwZW5kKFdURjo6bW92ZSh0YXNrKSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgcGF1c2VkVGFza3Muc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIHBhdXNlZFRhc2sg
OiBwYXVzZWRUYXNrcykgewogICAgICAgICBBdXRvZHJhaW5lZFBvb2wgcG9vbDsKIAotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YWJhc2VUYXNrPiB0YXNrKHBhdXNlZFRhc2tzW2ldLnJlbGVh
c2UoKSk7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEYXRhYmFzZVRhc2s+IHRhc2socGF1c2Vk
VGFzay5yZWxlYXNlKCkpOwogICAgICAgICB7CiAgICAgICAgICAgICBNdXRleExvY2tlciBwYXVz
ZWRMb2NrZXIobV9wYXVzZWRNdXRleCk7CiAgICAgICAgICAgICBpZiAobV9wYXVzZWQpIHsKQEAg
LTIwMyw5ICsyMDMsOCBAQCB2b2lkIERhdGFiYXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpCiAg
ICAgICAgIC8vIEFzIHRoZSBjYWxsIHRvIGNsb3NlIHdpbGwgbW9kaWZ5IHRoZSBvcmlnaW5hbCBz
ZXQsIHdlIG11c3QgdGFrZSBhIGNvcHkgdG8gaXRlcmF0ZSBvdmVyLgogICAgICAgICBEYXRhYmFz
ZVNldCBvcGVuU2V0Q29weTsKICAgICAgICAgb3BlblNldENvcHkuc3dhcChtX29wZW5EYXRhYmFz
ZVNldCk7Ci0gICAgICAgIERhdGFiYXNlU2V0OjppdGVyYXRvciBlbmQgPSBvcGVuU2V0Q29weS5l
bmQoKTsKLSAgICAgICAgZm9yIChEYXRhYmFzZVNldDo6aXRlcmF0b3IgaXQgPSBvcGVuU2V0Q29w
eS5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICAgICAoKml0KS5nZXQoKS0+Y2xv
c2UoKTsKKyAgICAgICAgZm9yIChhdXRvJiBvcGVuRGF0YWJhc2UgOiBvcGVuU2V0Q29weSkKKyAg
ICAgICAgICAgIG9wZW5EYXRhYmFzZS0+Y2xvc2UoKTsKICAgICB9CiAKICAgICAvLyBEZXRhY2gg
dGhlIHRocmVhZCBzbyBpdHMgcmVzb3VyY2VzIGFyZSBubyBsb25nZXIgb2YgYW55IGNvbmNlcm4g
dG8gYW55b25lIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvRGF0YWJhc2VUcmFja2VyLmNwcAppbmRleCA3YmNkYmYwYjc4MTNlZWU5NWZkYjBkYjhk
ZDdkNGVlYjhkODE3YmIyLi5hNzEwZGMyYTU2N2I5YTY5MzZmMjYzMDUyNGNkM2JlMWU0MzhjMDU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RhdGFiYXNl
VHJhY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9EYXRh
YmFzZVRyYWNrZXIuY3BwCkBAIC0zMzgsMjAgKzMzOCwxNiBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6aW50ZXJydXB0QWxsRGF0YWJhc2VzRm9yQ29udGV4dChjb25zdCBEYXRhYmFzZUNvbnRleHQq
IGNvbgogICAgICAgICBpZiAoIW5hbWVNYXApCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgRGF0YWJhc2VOYW1lTWFwOjpjb25zdF9pdGVyYXRvciBkYk5hbWVNYXBFbmRJdCA9IG5hbWVN
YXAtPmVuZCgpOwotICAgICAgICBmb3IgKERhdGFiYXNlTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
ZGJOYW1lTWFwSXQgPSBuYW1lTWFwLT5iZWdpbigpOyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBF
bmRJdDsgKytkYk5hbWVNYXBJdCkgewotICAgICAgICAgICAgRGF0YWJhc2VTZXQqIGRhdGFiYXNl
U2V0ID0gZGJOYW1lTWFwSXQtPnZhbHVlOwotICAgICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGRiU2V0RW5kSXQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Ci0gICAgICAgICAgICBm
b3IgKERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYlNldEl0ID0gZGF0YWJhc2VTZXQtPmJl
Z2luKCk7IGRiU2V0SXQgIT0gZGJTZXRFbmRJdDsgKytkYlNldEl0KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKCgqZGJTZXRJdCktPmRhdGFiYXNlQ29udGV4dCgpID09IGNvbnRleHQpCi0gICAgICAg
ICAgICAgICAgICAgIG9wZW5EYXRhYmFzZXMuYXBwZW5kKCpkYlNldEl0KTsKKyAgICAgICAgZm9y
IChhdXRvJiBkYXRhYmFzZVNldCA6IG5hbWVNYXAtPnZhbHVlcygpKSB7CisgICAgICAgICAgICBm
b3IgKGF1dG8mIGRhdGFiYXNlIDogKmRhdGFiYXNlU2V0KSB7CisgICAgICAgICAgICAgICAgaWYg
KGRhdGFiYXNlLT5kYXRhYmFzZUNvbnRleHQoKSA9PSBjb250ZXh0KQorICAgICAgICAgICAgICAg
ICAgICBvcGVuRGF0YWJhc2VzLmFwcGVuZChkYXRhYmFzZSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBWZWN0b3I8UmVmUHRyPERhdGFiYXNlQmFja2VuZEJhc2U+Pjo6
Y29uc3RfaXRlcmF0b3Igb3BlbkRhdGFiYXNlc0VuZEl0ID0gb3BlbkRhdGFiYXNlcy5lbmQoKTsK
LSAgICBmb3IgKFZlY3RvcjxSZWZQdHI8RGF0YWJhc2VCYWNrZW5kQmFzZT4+Ojpjb25zdF9pdGVy
YXRvciBvcGVuRGF0YWJhc2VzSXQgPSBvcGVuRGF0YWJhc2VzLmJlZ2luKCk7IG9wZW5EYXRhYmFz
ZXNJdCAhPSBvcGVuRGF0YWJhc2VzRW5kSXQ7ICsrb3BlbkRhdGFiYXNlc0l0KQotICAgICAgICAo
Km9wZW5EYXRhYmFzZXNJdCktPmludGVycnVwdCgpOworICAgIGZvciAoYXV0byYgb3BlbkRhdGFi
YXNlIDogb3BlbkRhdGFiYXNlcykKKyAgICAgICAgb3BlbkRhdGFiYXNlLT5pbnRlcnJ1cHQoKTsK
IH0KIAogU3RyaW5nIERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luUGF0aChTZWN1cml0eU9yaWdpbiog
b3JpZ2luKSBjb25zdApAQCAtNDgyLDggKzQ3OCw4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2VyOjpk
YXRhYmFzZU5hbWVzRm9yT3JpZ2luKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIFZlY3RvcjxTdHJp
CiAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46Oml0ZXJhdG9yIGl0ZXIgPSB0ZW1wLmJlZ2luKCk7IGl0ZXIgIT0gdGVtcC5lbmQoKTsgKytp
dGVyKQotICAgICAgICByZXN1bHRWZWN0b3IuYXBwZW5kKGl0ZXItPmlzb2xhdGVkQ29weSgpKTsK
KyAgICBmb3IgKGF1dG8mIGRhdGFiYXNlTmFtZSA6IHRlbXApCisgICAgICAgIHJlc3VsdFZlY3Rv
ci5hcHBlbmQoZGF0YWJhc2VOYW1lLmlzb2xhdGVkQ29weSgpKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtNjcwLDggKzY2Niw4IEBAIHZvaWQgRGF0YWJhc2VUcmFja2VyOjpnZXRPcGVuRGF0
YWJhc2VzKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgbmFtCiAgICAgaWYg
KCFkYXRhYmFzZVNldCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZm9yIChEYXRhYmFzZVNldDo6
aXRlcmF0b3IgaXQgPSBkYXRhYmFzZVNldC0+YmVnaW4oKTsgaXQgIT0gZGF0YWJhc2VTZXQtPmVu
ZCgpOyArK2l0KQotICAgICAgICBkYXRhYmFzZXMtPmFkZCgqaXQpOworICAgIGZvciAoYXV0byYg
ZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCisgICAgICAgIGRhdGFiYXNlcy0+YWRkKGRhdGFiYXNl
KTsKIH0KIAogUmVmUHRyPE9yaWdpbkxvY2s+IERhdGFiYXNlVHJhY2tlcjo6b3JpZ2luTG9ja0Zv
cihTZWN1cml0eU9yaWdpbiogb3JpZ2luKQpAQCAtNzI0LDEyICs3MjAsOSBAQCB1bnNpZ25lZCBs
b25nIGxvbmcgRGF0YWJhc2VUcmFja2VyOjp1c2FnZUZvck9yaWdpbihTZWN1cml0eU9yaWdpbiog
b3JpZ2luKQogewogICAgIFN0cmluZyBvcmlnaW5QYXRoID0gdGhpcy0+b3JpZ2luUGF0aChvcmln
aW4pOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBkaXNrVXNhZ2UgPSAwOwotICAgIFZlY3RvcjxT
dHJpbmc+IGZpbGVOYW1lcyA9IGxpc3REaXJlY3Rvcnkob3JpZ2luUGF0aCwgU3RyaW5nKCIqLmRi
IikpOwotICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBmaWxlTmFtZSA9IGZpbGVOYW1lcy5i
ZWdpbigpOwotICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBsYXN0RmlsZU5hbWUgPSBmaWxl
TmFtZXMuZW5kKCk7Ci0gICAgZm9yICg7IGZpbGVOYW1lICE9IGxhc3RGaWxlTmFtZTsgKytmaWxl
TmFtZSkgeworICAgIGZvciAoYXV0byYgZmlsZU5hbWUgOiBsaXN0RGlyZWN0b3J5KG9yaWdpblBh
dGgsIEFTQ0lJTGl0ZXJhbCgiKi5kYiIpKSkgewogICAgICAgICBsb25nIGxvbmcgc2l6ZTsKLSAg
ICAgICAgZ2V0RmlsZVNpemUoKmZpbGVOYW1lLCBzaXplKTsKKyAgICAgICAgZ2V0RmlsZVNpemUo
ZmlsZU5hbWUsIHNpemUpOwogICAgICAgICBkaXNrVXNhZ2UgKz0gc2l6ZTsKICAgICB9CiAgICAg
cmV0dXJuIGRpc2tVc2FnZTsKQEAgLTg1NSw4ICs4NDgsOCBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCkKICAgICBWZWN0b3I8UmVmUHRyPFNlY3VyaXR5T3JpZ2lu
Pj4gb3JpZ2luc0NvcHk7CiAgICAgb3JpZ2lucyhvcmlnaW5zQ29weSk7CiAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgb3JpZ2luc0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIGRlbGV0
ZU9yaWdpbihvcmlnaW5zQ29weVtpXS5nZXQoKSk7CisgICAgZm9yIChhdXRvJiBvcmlnaW4gOiBv
cmlnaW5zQ29weSkKKyAgICAgICAgZGVsZXRlT3JpZ2luKG9yaWdpbi5nZXQoKSk7CiB9CiAKIHZv
aWQgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKHN0ZDo6Y2hy
b25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgdGltZSkKQEAgLTkwOCwxMCArOTAxLDEwIEBA
IGJvb2wgRGF0YWJhc2VUcmFja2VyOjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdp
bikKICAgICB9CiAKICAgICAvLyBXZSBkcm9wIHRoZSBsb2NrIGhlcmUgYmVjYXVzZSBob2xkaW5n
IGxvY2tzIGR1cmluZyBhIGNhbGwgdG8gZGVsZXRlRGF0YWJhc2VGaWxlIHdpbGwgZGVhZGxvY2su
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGFiYXNlTmFtZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKCFkZWxldGVEYXRhYmFzZUZpbGUob3JpZ2luLCBkYXRhYmFzZU5hbWVz
W2ldKSkgeworICAgIGZvciAoYXV0byYgbmFtZSA6IGRhdGFiYXNlTmFtZXMpIHsKKyAgICAgICAg
aWYgKCFkZWxldGVEYXRhYmFzZUZpbGUob3JpZ2luLCBuYW1lKSkgewogICAgICAgICAgICAgLy8g
RXZlbiBpZiB0aGUgZmlsZSBjYW4ndCBiZSBkZWxldGVkLCB3ZSB3YW50IHRvIHRyeSBhbmQgZGVs
ZXRlIHRoZSByZXN0LCBkb24ndCByZXR1cm4gZWFybHkgaGVyZS4KLSAgICAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIGRlbGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMi
LCBkYXRhYmFzZU5hbWVzW2ldLmFzY2lpKCkuZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRp
ZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRv
IGRlbGV0ZSBmaWxlIGZvciBkYXRhYmFzZSAlcyBpbiBvcmlnaW4gJXMiLCBuYW1lLmFzY2lpKCku
ZGF0YSgpLCBvcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpLmFzY2lpKCkuZGF0YSgpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtOTczLDggKzk2Niw4IEBAIGJvb2wgRGF0YWJhc2VUcmFja2Vy
OjpkZWxldGVPcmlnaW4oU2VjdXJpdHlPcmlnaW4qIG9yaWdpbikKICNpZiBQTEFURk9STShJT1Mp
CiAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWREZWxldGVEYXRhYmFzZU9yaWdpbigp
OwogI2VuZGlmCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YWJhc2VO
YW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRN
b2RpZnlEYXRhYmFzZShvcmlnaW4sIGRhdGFiYXNlTmFtZXNbaV0pOworICAgICAgICAgICAgZm9y
IChhdXRvJiBuYW1lIDogZGF0YWJhc2VOYW1lcykKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+
ZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFzZShvcmlnaW4sIG5hbWUpOwogICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiB0cnVlOwpAQCAtMTE3OCwxNiArMTE3MSwxNSBAQCBib29sIERhdGFiYXNl
VHJhY2tlcjo6ZGVsZXRlRGF0YWJhc2VGaWxlKFNlY3VyaXR5T3JpZ2luKiBvcmlnaW4sIGNvbnN0
IFN0cmluZyYgbgogICAgICAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IG5h
bWVNYXAtPmdldChuYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoZGF0YWJhc2VTZXQgJiYgZGF0
YWJhc2VTZXQtPnNpemUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHNvbWUg
ZGF0YWJhc2Ugb3BlbiB3aXRoIHRoaXMgbmFtZS4gTWFyayB0aGVtIGFzIGRlbGV0ZWQuCi0gICAg
ICAgICAgICAgICAgICAgIERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBkYXRhYmFz
ZVNldC0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoRGF0YWJhc2VTZXQ6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWREYXRhYmFzZXMuYXBwZW5kKCppdCk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWxldGVkRGF0YWJhc2VzLmFwcGVuZChkYXRhYmFzZSk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIGRlbGV0ZWREYXRhYmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOworICAg
IGZvciAoYXV0byYgZGF0YWJhc2UgOiBkZWxldGVkRGF0YWJhc2VzKQorICAgICAgICBkYXRhYmFz
ZS0+bWFya0FzRGVsZXRlZEFuZENsb3NlKCk7CiAKICNpZiAhUExBVEZPUk0oSU9TKQogICAgIHJl
dHVybiBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoZnVsbFBhdGgpOwpAQCAt
MTIzMCwxNyArMTIyMiwxNSBAQCB2b2lkIERhdGFiYXNlVHJhY2tlcjo6cmVtb3ZlRGVsZXRlZE9w
ZW5lZERhdGFiYXNlcygpCiAgICAgewogICAgICAgICBNdXRleExvY2tlciBvcGVuRGF0YWJhc2VN
YXBMb2NrKG1fb3BlbkRhdGFiYXNlTWFwR3VhcmQpOwogICAgICAgICBpZiAobV9vcGVuRGF0YWJh
c2VNYXApIHsKLSAgICAgICAgICAgIERhdGFiYXNlT3JpZ2luTWFwOjpjb25zdF9pdGVyYXRvciBv
cmlnaW5NYXBFbmQgPSBtX29wZW5EYXRhYmFzZU1hcC0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3Ig
KERhdGFiYXNlT3JpZ2luTWFwOjpjb25zdF9pdGVyYXRvciBvcmlnaW5NYXBJdCA9IG1fb3BlbkRh
dGFiYXNlTWFwLT5iZWdpbigpOyBvcmlnaW5NYXBJdCAhPSBvcmlnaW5NYXBFbmQ7ICsrb3JpZ2lu
TWFwSXQpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG9yaWdpbiA9
IG9yaWdpbk1hcEl0LT5rZXk7Ci0gICAgICAgICAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBkYXRh
YmFzZU5hbWVNYXAgPSBvcmlnaW5NYXBJdC0+dmFsdWU7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IG9wZW5EYXRhYmFzZSA6ICptX29wZW5EYXRhYmFzZU1hcCkgeworICAgICAgICAgICAgICAgIGF1
dG8mIG9yaWdpbiA9IG9wZW5EYXRhYmFzZS5rZXk7CisgICAgICAgICAgICAgICAgRGF0YWJhc2VO
YW1lTWFwKiBkYXRhYmFzZU5hbWVNYXAgPSBvcGVuRGF0YWJhc2UudmFsdWU7CiAgICAgICAgICAg
ICAgICAgVmVjdG9yPFN0cmluZz4gZGVsZXRlZERhdGFiYXNlTmFtZXNGb3JUaGlzT3JpZ2luOwog
CiAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBvcGVuZWQgZGF0YWJhc2VzIGlu
IHRoaXMgb3JpZ2luLiAgR2V0IHRoZSBjdXJyZW50IGRhdGFiYXNlIGZpbGUgcGF0aCBvZiBlYWNo
IGRhdGFiYXNlIGFuZCBzZWUgaWYKICAgICAgICAgICAgICAgICAvLyBpdCBzdGlsbCBtYXRjaGVz
IHRoZSBwYXRoIHN0b3JlZCBpbiB0aGUgb3BlbmVkIGRhdGFiYXNlIG9iamVjdC4KLSAgICAgICAg
ICAgICAgICBEYXRhYmFzZU5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEVuZCA9IGRh
dGFiYXNlTmFtZU1hcC0+ZW5kKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChEYXRhYmFzZU5hbWVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGRiTmFtZU1hcEl0ID0gZGF0YWJhc2VOYW1lTWFwLT5iZWdpbigp
OyBkYk5hbWVNYXBJdCAhPSBkYk5hbWVNYXBFbmQ7ICsrZGJOYW1lTWFwSXQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIGRhdGFiYXNlTmFtZSA9IGRiTmFtZU1hcEl0LT5rZXk7CisgICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBkYXRhYmFzZXMgOiAqZGF0YWJhc2VOYW1lTWFwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyBkYXRhYmFzZU5hbWUgPSBkYXRhYmFzZXMua2V5Owog
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGF0YWJhc2VGaWxlTmFtZTsKICAgICAgICAgICAg
ICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudChtX2RhdGFiYXNlLCAiU0VMRUNUIHBh
dGggRlJPTSBEYXRhYmFzZXMgV0hFUkUgb3JpZ2luPT8gQU5EIG5hbWU9PzsiKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgPT0gU1FMSVRFX09LKSB7CkBAIC0x
MjUyLDExICsxMjQyLDcgQEAgdm9pZCBEYXRhYmFzZVRyYWNrZXI6OnJlbW92ZURlbGV0ZWRPcGVu
ZWREYXRhYmFzZXMoKQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBib29sIGZvdW5kRGVsZXRlZERhdGFiYXNlID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIERhdGFiYXNlU2V0KiBkYXRhYmFzZVNldCA9IGRiTmFtZU1h
cEl0LT52YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgRGF0YWJhc2VTZXQ6OmNvbnN0X2l0ZXJh
dG9yIGRiRW5kID0gZGF0YWJhc2VTZXQtPmVuZCgpOwotICAgICAgICAgICAgICAgICAgICBmb3Ig
KERhdGFiYXNlU2V0Ojpjb25zdF9pdGVyYXRvciBkYkl0ID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7
IGRiSXQgIT0gZGJFbmQ7ICsrZGJJdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgRGF0YWJh
c2UqIGRiID0gc3RhdGljX2Nhc3Q8RGF0YWJhc2UqPigqZGJJdCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBkYiA6ICpkYXRhYmFzZXMu
dmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBkb25lIGlmIHRoaXMg
ZGF0YWJhc2UgaGFzIGFscmVhZHkgYmVlbiBtYXJrZWQgYXMgZGVsZXRlZC4KICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChkYi0+ZGVsZXRlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpAQCAtMTI3OSwxOSArMTI2NSwxOCBAQCB2b2lkIERhdGFiYXNlVHJhY2tl
cjo6cmVtb3ZlRGVsZXRlZE9wZW5lZERhdGFiYXNlcygpCiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGRlbGV0ZWREYXRhYmFzZXMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGRlbGV0ZWREYXRhYmFzZXNbaV0tPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgp
OwotICAgIAotICAgIERlbGV0ZWREYXRhYmFzZU1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZGVs
ZXRlZERhdGFiYXNlTWFwLmVuZCgpOwotICAgIGZvciAoRGVsZXRlZERhdGFiYXNlTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGRlbGV0ZWREYXRhYmFzZU1hcC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKLSAgICAgICAgU2VjdXJpdHlPcmlnaW4qIG9yaWdpbiA9IGl0LT5rZXkuZ2V0KCk7Cisg
ICAgZm9yIChhdXRvJiBkZWxldGVkRGF0YWJhc2UgOiBkZWxldGVkRGF0YWJhc2VzKQorICAgICAg
ICBkZWxldGVkRGF0YWJhc2UtPm1hcmtBc0RlbGV0ZWRBbmRDbG9zZSgpOworCisgICAgZm9yIChh
dXRvJiBkZWxldGVkRGF0YWJhc2UgOiBkZWxldGVkRGF0YWJhc2VNYXApIHsKKyAgICAgICAgU2Vj
dXJpdHlPcmlnaW4qIG9yaWdpbiA9IGRlbGV0ZWREYXRhYmFzZS5rZXkuZ2V0KCk7CiAgICAgICAg
IGlmIChtX2NsaWVudCkKICAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZE1vZGlmeU9y
aWdpbihvcmlnaW4pOwogICAgICAgICAKLSAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGRh
dGFiYXNlTmFtZXMgPSBpdC0+dmFsdWU7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBkYXRhYmFzZU5hbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBkYXRhYmFzZU5hbWVzID0gZGVsZXRlZERhdGFiYXNlLnZhbHVlOworICAgICAgICBmb3Ig
KGF1dG8mIGRhdGFiYXNlTmFtZSA6IGRhdGFiYXNlTmFtZXMpIHsKICAgICAgICAgICAgIGlmICht
X2NsaWVudCkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRNb2RpZnlEYXRh
YmFzZShvcmlnaW4sIGRhdGFiYXNlTmFtZXNbaV0pOworICAgICAgICAgICAgICAgIG1fY2xpZW50
LT5kaXNwYXRjaERpZE1vZGlmeURhdGFiYXNlKG9yaWdpbiwgZGF0YWJhc2VOYW1lKTsKICAgICAg
ICAgfSAgICAgICAgCiAgICAgfQogfQpAQCAtMTM2NSwyMSArMTM1MCwxMCBAQCB2b2lkIERhdGFi
YXNlVHJhY2tlcjo6c2V0RGF0YWJhc2VzUGF1c2VkKGJvb2wgcGF1c2VkKQogCiAgICAgLy8gVGhp
cyB3YWxraW5nIGlzIC0gc2FkbHkgLSB0aGUgb25seSByZWxpYWJsZSB3YXkgdG8gZ2V0IGF0IGVh
Y2ggb3BlbiBkYXRhYmFzZSB0aHJlYWQuCiAgICAgLy8gVGhpcyB3aWxsIGJlIGNsZWFuZXIgb25j
ZSA8cmRhcjovL3Byb2JsZW0vNTY4MDQ0MT4gb3Igc29tZSBvdGhlciBEQiB0aHJlYWQgY29uc29s
aWRhdGlvbiB0YWtlcyBwbGFjZS4KLSAgICBEYXRhYmFzZU9yaWdpbk1hcDo6aXRlcmF0b3IgaSA9
IG1fb3BlbkRhdGFiYXNlTWFwLmdldCgpLT5iZWdpbigpOwotICAgIERhdGFiYXNlT3JpZ2luTWFw
OjppdGVyYXRvciBlbmQgPSBtX29wZW5EYXRhYmFzZU1hcC5nZXQoKS0+ZW5kKCk7Ci0gICAgCi0g
ICAgZm9yICg7IGkgIT0gZW5kOyArK2kpIHsKLSAgICAgICAgRGF0YWJhc2VOYW1lTWFwKiBkYXRh
YmFzZU5hbWVNYXAgPSBpLT52YWx1ZTsKLSAgICAgICAgRGF0YWJhc2VOYW1lTWFwOjppdGVyYXRv
ciBqID0gZGF0YWJhc2VOYW1lTWFwLT5iZWdpbigpOwotICAgICAgICBEYXRhYmFzZU5hbWVNYXA6
Oml0ZXJhdG9yIGRiTmFtZU1hcEVuZCA9IGRhdGFiYXNlTmFtZU1hcC0+ZW5kKCk7Ci0gICAgICAg
IGZvciAoOyBqICE9IGRiTmFtZU1hcEVuZDsgKytqKSB7Ci0gICAgICAgICAgICBEYXRhYmFzZVNl
dCogZGF0YWJhc2VTZXQgPSBqLT52YWx1ZTsKLSAgICAgICAgICAgIERhdGFiYXNlU2V0OjppdGVy
YXRvciBrID0gZGF0YWJhc2VTZXQtPmJlZ2luKCk7Ci0gICAgICAgICAgICBEYXRhYmFzZVNldDo6
aXRlcmF0b3IgZGJTZXRFbmQgPSBkYXRhYmFzZVNldC0+ZW5kKCk7Ci0gICAgICAgICAgICBmb3Ig
KDsgayAhPSBkYlNldEVuZDsgKytrKSB7Ci0gICAgICAgICAgICAgICAgRGF0YWJhc2VDb250ZXh0
KiBjb250ZXh0ID0gKCprKS0+ZGF0YWJhc2VDb250ZXh0KCk7Ci0gICAgICAgICAgICAgICAgY29u
dGV4dC0+c2V0UGF1c2VkKHBhdXNlZCk7Ci0gICAgICAgICAgICB9CisgICAgZm9yIChhdXRvJiBk
YXRhYmFzZU5hbWVNYXAgOiBtX29wZW5EYXRhYmFzZU1hcC0+dmFsdWVzKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBkYXRhYmFzZVNldCA6IGRhdGFiYXNlTmFtZU1hcC0+dmFsdWVzKCkpIHsKKyAg
ICAgICAgICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiAqZGF0YWJhc2VTZXQpCisgICAgICAgICAg
ICAgICAgZGF0YWJhc2UtPmRhdGFiYXNlQ29udGV4dCgpLT5zZXRQYXVzZWQocGF1c2VkKTsKICAg
ICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCmluZGV4IDlm
NjIyMzRhYzM5ZWM4NDVkNWQ0ZTEwZGVjMTAyMzgzZWFkYTE2ZjkuLjg5YTYyYWI3Njc3MmYyNmMy
MjlkZWI3OTMxMjkzNDg4N2MzZmYxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZGF0YWJhc2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cApAQCAtMTE5LDIxICsxMTksMTQgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpz
aHV0ZG93bigpCiAgICAgbV9pc1NodXR0aW5nRG93biA9IHRydWU7CiAKICAgICAvLyBOb3RpZnkg
YWxsIHRyYW5zYWN0aW9ucyBpbiBwcm9ncmVzcyB0aGF0IHRoZSBkYXRhYmFzZSB0aHJlYWQgaXMg
c2h1dHRpbmcgZG93bgotICAgIGZvciAoQ29vcmRpbmF0aW9uSW5mb01hcDo6aXRlcmF0b3IgY29v
cmRpbmF0aW9uSW5mb0l0ZXJhdG9yID0gbV9jb29yZGluYXRpb25JbmZvTWFwLmJlZ2luKCk7Ci0g
ICAgICAgICBjb29yZGluYXRpb25JbmZvSXRlcmF0b3IgIT0gbV9jb29yZGluYXRpb25JbmZvTWFw
LmVuZCgpOyArK2Nvb3JkaW5hdGlvbkluZm9JdGVyYXRvcikgewotICAgICAgICBDb29yZGluYXRp
b25JbmZvJiBpbmZvID0gY29vcmRpbmF0aW9uSW5mb0l0ZXJhdG9yLT52YWx1ZTsKLQorICAgIGZv
ciAoYXV0byYgaW5mbyA6IG1fY29vcmRpbmF0aW9uSW5mb01hcC52YWx1ZXMoKSkgewogICAgICAg
ICAvLyBDbGVhbiB1cCB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIHJlYWNoZWQgImxvY2tBY3F1aXJl
ZCI6CiAgICAgICAgIC8vIFRyYW5zYWN0aW9uIHBoYXNlIDQgY2xlYW51cC4gU2VlIGNvbW1lbnQg
b24gIldoYXQgaGFwcGVucyBpZiBhCiAgICAgICAgIC8vIHRyYW5zYWN0aW9uIGlzIGludGVycnVw
dGVkPyIgYXQgdGhlIHRvcCBvZiBTUUxUcmFuc2FjdGlvbkJhY2tlbmQuY3BwLgogICAgICAgICBp
ZiAoaW5mby5hY3RpdmVXcml0ZVRyYW5zYWN0aW9uKQogICAgICAgICAgICAgaW5mby5hY3RpdmVX
cml0ZVRyYW5zYWN0aW9uLT5ub3RpZnlEYXRhYmFzZVRocmVhZElzU2h1dHRpbmdEb3duKCk7Ci0g
ICAgICAgIGZvciAoSGFzaFNldDxSZWZQdHI8U1FMVHJhbnNhY3Rpb25CYWNrZW5kPj46Oml0ZXJh
dG9yIGFjdGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvciA9Ci0gICAgICAgICAgICAgICAgICAg
ICBpbmZvLmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnMuYmVnaW4oKTsKLSAgICAgICAgICAgICBhY3Rp
dmVSZWFkVHJhbnNhY3Rpb25zSXRlcmF0b3IgIT0gaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25z
LmVuZCgpOwotICAgICAgICAgICAgICsrYWN0aXZlUmVhZFRyYW5zYWN0aW9uc0l0ZXJhdG9yKSB7
Ci0gICAgICAgICAgICAoKmFjdGl2ZVJlYWRUcmFuc2FjdGlvbnNJdGVyYXRvciktPm5vdGlmeURh
dGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKGF1
dG8mIHRyYW5zYWN0aW9uIDogaW5mby5hY3RpdmVSZWFkVHJhbnNhY3Rpb25zKQorICAgICAgICAg
ICAgdHJhbnNhY3Rpb24tPm5vdGlmeURhdGFiYXNlVGhyZWFkSXNTaHV0dGluZ0Rvd24oKTsKIAog
ICAgICAgICAvLyBDbGVhbiB1cCB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIE5PVCByZWFjaGVkICJs
b2NrQWNxdWlyZWQiOgogICAgICAgICAvLyBUcmFuc2FjdGlvbiBwaGFzZSAzIGNsZWFudXAuIFNl
ZSBjb21tZW50IG9uICJXaGF0IGhhcHBlbnMgaWYgYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCBlMzU5YjNiZGU1ODJmYmEwMWEwODg1
NzRhODIyZTkzNjM1N2M2N2YwLi4wMzE1ZmJlM2ZjZDBjYWQ2MWE4ODVmOGU2OGFlOTdkZTE3NTlj
MmMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0
LmNwcApAQCAtMjYwLDE4ICsyNjAsMTggQEAgdm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcm90b2NvbHMsIEV4Y2UKICAgICAv
LwogICAgIC8vIEhlcmUsIHdlIHRocm93IFNZTlRBWF9FUlIgaWYgdGhlIGdpdmVuIHByb3RvY29s
cyBkbyBub3QgbWVldCB0aGUgbGF0dGVyIGNyaXRlcmlhLiBUaGlzIGJlaGF2aW9yIGRvZXMgbm90
CiAgICAgLy8gY29tcGx5IHdpdGggV2ViU29ja2V0IEFQSSBzcGVjaWZpY2F0aW9uLCBidXQgaXQg
c2VlbXMgdG8gYmUgdGhlIG9ubHkgcmVhc29uYWJsZSB3YXkgdG8gaGFuZGxlIHRoaXMgY29uZmxp
Y3QuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm90b2NvbHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgaWYgKCFpc1ZhbGlkUHJvdG9jb2xTdHJpbmcocHJvdG9jb2xzW2ldKSkgewotICAg
ICAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNz
YWdlU291cmNlOjpKUywgTWVzc2FnZUxldmVsOjpFcnJvciwgIldyb25nIHByb3RvY29sIGZvciBX
ZWJTb2NrZXQgJyIgKyBlbmNvZGVQcm90b2NvbFN0cmluZyhwcm90b2NvbHNbaV0pICsgIiciKTsK
KyAgICBmb3IgKGF1dG8mIHByb3RvY29sIDogcHJvdG9jb2xzKSB7CisgICAgICAgIGlmICghaXNW
YWxpZFByb3RvY29sU3RyaW5nKHByb3RvY29sKSkgeworICAgICAgICAgICAgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgIldyb25nIHByb3RvY29sIGZvciBXZWJTb2NrZXQgJyIgKyBlbmNvZGVQ
cm90b2NvbFN0cmluZyhwcm90b2NvbCkgKyAiJyIpOwogICAgICAgICAgICAgbV9zdGF0ZSA9IENM
T1NFRDsKICAgICAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KICAgICBIYXNoU2V0PFN0cmluZz4gdmlzaXRlZDsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHByb3RvY29scy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAo
IXZpc2l0ZWQuYWRkKHByb3RvY29sc1tpXSkuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpK
UywgTWVzc2FnZUxldmVsOjpFcnJvciwgIldlYlNvY2tldCBwcm90b2NvbHMgY29udGFpbiBkdXBs
aWNhdGVzOiAnIiArIGVuY29kZVByb3RvY29sU3RyaW5nKHByb3RvY29sc1tpXSkgKyAiJyIpOwor
ICAgIGZvciAoYXV0byYgcHJvdG9jb2wgOiBwcm90b2NvbHMpIHsKKyAgICAgICAgaWYgKCF2aXNp
dGVkLmFkZChwcm90b2NvbCkuaXNOZXdFbnRyeSkgeworICAgICAgICAgICAgc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2Fn
ZUxldmVsOjpFcnJvciwgIldlYlNvY2tldCBwcm90b2NvbHMgY29udGFpbiBkdXBsaWNhdGVzOiAn
IiArIGVuY29kZVByb3RvY29sU3RyaW5nKHByb3RvY29sKSArICInIik7CiAgICAgICAgICAgICBt
X3N0YXRlID0gQ0xPU0VEOwogICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRz
L1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXIuY3BwCmluZGV4IDE5ZTI1
YTFhNWEwNTAzYzBhM2ZkN2RlNmI0NjNjYTQwNWIzNDZhODEuLjA5ZDk5ZTllOGVkZDhlZjg3NjQz
ZGFmZWY5ZjY1MmYxOTkwZGU2OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlci5j
cHAKQEAgLTUwLDggKzUwLDggQEAgdm9pZCBXZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyOjpy
ZXNldCgpCiAKIHZvaWQgV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6YWRkUHJvY2Vzc29y
KHN0ZDo6dW5pcXVlX3B0cjxXZWJTb2NrZXRFeHRlbnNpb25Qcm9jZXNzb3I+IHByb2Nlc3NvcikK
IHsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcHJvY2Vzc29ycy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpZiAobV9wcm9jZXNzb3JzW2ldLT5leHRlbnNpb25Ub2tlbigpID09IHByb2Nl
c3Nvci0+ZXh0ZW5zaW9uVG9rZW4oKSkKKyAgICBmb3IgKGF1dG8mIGV4dGVuc2lvblByb2Nlc3Nv
ciA6IG1fcHJvY2Vzc29ycykgeworICAgICAgICBpZiAoZXh0ZW5zaW9uUHJvY2Vzc29yLT5leHRl
bnNpb25Ub2tlbigpID09IHByb2Nlc3Nvci0+ZXh0ZW5zaW9uVG9rZW4oKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgQVNTRVJUKHByb2Nlc3Nvci0+aGFuZHNoYWtlU3RyaW5nKCku
bGVuZ3RoKCkpOwpAQCAtODEsMTIgKzgxLDEyIEBAIHZvaWQgV2ViU29ja2V0RXh0ZW5zaW9uRGlz
cGF0Y2hlcjo6YXBwZW5kQWNjZXB0ZWRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpCiAg
ICAgICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmRMaXRlcmFsKCIsICIpOwog
ICAgIG1fYWNjZXB0ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmQoZXh0ZW5zaW9uVG9rZW4pOwog
ICAgIC8vIEZJWE1FOiBTaG91bGQgdXNlIExpc3RIYXNoU2V0IHRvIGtlZXAgdGhlIG9yZGVyIG9m
IHRoZSBwYXJhbWV0ZXJzLgotICAgIGZvciAoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz46OmNvbnN0
X2l0ZXJhdG9yIGl0ZXJhdG9yID0gZXh0ZW5zaW9uUGFyYW1ldGVycy5iZWdpbigpOyBpdGVyYXRv
ciAhPSBleHRlbnNpb25QYXJhbWV0ZXJzLmVuZCgpOyArK2l0ZXJhdG9yKSB7CisgICAgZm9yIChh
dXRvJiBwYXJhbWV0ZXIgOiBleHRlbnNpb25QYXJhbWV0ZXJzKSB7CiAgICAgICAgIG1fYWNjZXB0
ZWRFeHRlbnNpb25zQnVpbGRlci5hcHBlbmRMaXRlcmFsKCI7ICIpOwotICAgICAgICBtX2FjY2Vw
dGVkRXh0ZW5zaW9uc0J1aWxkZXIuYXBwZW5kKGl0ZXJhdG9yLT5rZXkpOwotICAgICAgICBpZiAo
IWl0ZXJhdG9yLT52YWx1ZS5pc051bGwoKSkgeworICAgICAgICBtX2FjY2VwdGVkRXh0ZW5zaW9u
c0J1aWxkZXIuYXBwZW5kKHBhcmFtZXRlci5rZXkpOworICAgICAgICBpZiAoIXBhcmFtZXRlci52
YWx1ZS5pc051bGwoKSkgewogICAgICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVy
LmFwcGVuZCgnPScpOwotICAgICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNCdWlsZGVyLmFw
cGVuZChpdGVyYXRvci0+dmFsdWUpOworICAgICAgICAgICAgbV9hY2NlcHRlZEV4dGVuc2lvbnNC
dWlsZGVyLmFwcGVuZChwYXJhbWV0ZXIudmFsdWUpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
MTE4LDkgKzExOCw4IEBAIGJvb2wgV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6cHJvY2Vz
c0hlYWRlclZhbHVlKGNvbnN0IFN0cmluZyYgaGVhZGVyVmFsdWUpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KIAotICAgICAgICBzaXplX3QgaW5kZXg7Ci0gICAgICAgIGZv
ciAoaW5kZXggPSAwOyBpbmRleCA8IG1fcHJvY2Vzc29ycy5zaXplKCk7ICsraW5kZXgpIHsKLSAg
ICAgICAgICAgIFdlYlNvY2tldEV4dGVuc2lvblByb2Nlc3NvciogcHJvY2Vzc29yID0gbV9wcm9j
ZXNzb3JzW2luZGV4XS5nZXQoKTsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gMDsKKyAgICAgICAg
Zm9yIChhdXRvJiBwcm9jZXNzb3IgOiBtX3Byb2Nlc3NvcnMpIHsKICAgICAgICAgICAgIGlmIChl
eHRlbnNpb25Ub2tlbiA9PSBwcm9jZXNzb3ItPmV4dGVuc2lvblRva2VuKCkpIHsKICAgICAgICAg
ICAgICAgICBpZiAocHJvY2Vzc29yLT5wcm9jZXNzUmVzcG9uc2UoZXh0ZW5zaW9uUGFyYW1ldGVy
cykpIHsKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kQWNjZXB0ZWRFeHRlbnNpb24oZXh0ZW5z
aW9uVG9rZW4sIGV4dGVuc2lvblBhcmFtZXRlcnMpOwpAQCAtMTI5LDYgKzEyOCw3IEBAIGJvb2wg
V2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlcjo6cHJvY2Vzc0hlYWRlclZhbHVlKGNvbnN0IFN0
cmluZyYgaGVhZGVyVmFsdWUpCiAgICAgICAgICAgICAgICAgZmFpbChwcm9jZXNzb3ItPmZhaWx1
cmVSZWFzb24oKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
fQorICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgfQogICAgICAgICAvLyBUaGVyZSBpcyBu
byBleHRlbnNpb24gd2hpY2ggY2FuIHByb2Nlc3MgdGhlIHJlc3BvbnNlLgogICAgICAgICBpZiAo
aW5kZXggPT0gbV9wcm9jZXNzb3JzLnNpemUoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAppbmRleCAzMjJh
YTQwMWQ0ZTBlYzQwMWJiMjgzZmJkNTNlYWFkZDU1ZGFhNzVmLi41NTFkZGYyMmE5N2UzMzEyODg5
NDk4NDU5MjEwZWZhNTY4NzUzMmU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcApAQCAtMjI0LDggKzIyNCw4
IEBAIENTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRIYW5kc2hha2VNZXNzYWdlKCkg
Y29uc3QKICAgICAvLyBvcmRlciBpcyBub3QgbWVhbmluZ2Z1bC4gIFRodXMsIGl0J3Mgb2sgdG8g
c2VuZCB0aGUgb3JkZXIgd2UgY29uc3RydWN0ZWQKICAgICAvLyB0aGUgZmllbGRzLgogCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWVsZHMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoZmllbGRzW2ldKTsKKyAgICBmb3IgKGF1dG8mIGZpZWxkIDogZmllbGRzKSB7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZpZWxkKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCJcclxuIik7CiAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>